Polaris sync

This commit is contained in:
Eearslya
2016-08-06 20:34:44 -07:00
566 changed files with 16223 additions and 7350 deletions

View File

@@ -155,12 +155,24 @@
var/mob/living/carbon/human/H = AM
H.in_stasis = 1
src.used = 1
if(istype(AM, /obj/item/organ))
var/obj/item/organ/O = AM
O.preserved = 1
for(var/obj/item/organ/organ in O)
organ.preserved = 1
..()
/obj/structure/closet/body_bag/cryobag/Exited(atom/movable/AM)
if(ishuman(AM))
var/mob/living/carbon/human/H = AM
H.in_stasis = 0
if(istype(AM, /obj/item/organ))
var/obj/item/organ/O = AM
O.preserved = 0
for(var/obj/item/organ/organ in O)
organ.preserved = 0
..()
/obj/structure/closet/body_bag/cryobag/return_air() //Used to make stasis bags protect from vacuum.

View File

@@ -222,6 +222,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
/mob/observer/dead
var/datum/exonet_protocol/exonet = null
var/list/exonet_messages = list()
// Proc: New()
// Parameters: None
@@ -305,6 +306,10 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
if(comm.exonet)
im_contacts_ui[++im_contacts_ui.len] = list("name" = sanitize(comm.name), "address" = comm.exonet.address, "ref" = "\ref[comm]")
for(var/mob/observer/dead/ghost in im_contacts)
if(ghost.exonet)
im_contacts_ui[++im_contacts_ui.len] = list("name" = sanitize(ghost.name), "address" = ghost.exonet.address, "ref" = "\ref[ghost]")
//Actual messages.
for(var/I in im_list)
im_list_ui[++im_list_ui.len] = list("address" = I["address"], "to_address" = I["to_address"], "im" = I["im"])
@@ -411,6 +416,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
if(text)
exonet.send_message(their_address, "text", text)
im_list += list(list("address" = exonet.address, "to_address" = their_address, "im" = text))
log_pda("[usr] (COMM: [src]) sent \"[text]\" to [exonet.get_atom_from_address(their_address)]")
if(href_list["disconnect"])
var/name_to_disconnect = href_list["disconnect"]
@@ -493,7 +499,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
// Proc: receive_exonet_message()
// Parameters: 3 (origin atom - the source of the message's holder, origin_address - where the message came from, message - the message received)
// Description: Handles voice requests and invite messages originating from both real communicators and ghosts. Also includes a ping response.
/mob/observer/dead/receive_exonet_message(origin_atom, origin_address, message)
/mob/observer/dead/receive_exonet_message(origin_atom, origin_address, message, text)
if(message == "voice")
if(istype(origin_atom, /obj/item/device/communicator))
var/obj/item/device/communicator/comm = origin_atom
@@ -508,7 +514,9 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
var/random = rand(450,700)
random = random / 10
exonet.send_message(origin_address, "64 bytes received from [exonet.address] ecmp_seq=1 ttl=51 time=[random] ms")
if(message == "text") //Ghosts don't get texting yet. Mostly for spam prevention by ghosts but also due to ui requirements not sorted out yet.
if(message == "text")
src << "<span class='notice'>\icon[origin_atom] Received text message from [origin_atom]: <b>\"[text]\"</b></span>"
exonet_messages.Add("<b>From [origin_atom]:</b><br>[text]")
return
// Proc: register_device()
@@ -533,7 +541,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
communicating |= comm
listening_objects |= src
update_icon()
// Proc: del_communicating()
// Parameters: 1 (comm - the communicator to remove from communicating)
// Description: Used when this communicator is being asked to stop relaying say/me messages to another
@@ -732,7 +740,9 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
/obj/item/device/communicator/proc/request_im(var/atom/candidate, var/origin_address, var/text)
var/who = null
if(isobserver(candidate))
return
var/mob/observer/dead/ghost = candidate
who = ghost
im_list += list(list("address" = origin_address, "to_address" = exonet.address, "im" = text))
else if(istype(candidate, /obj/item/device/communicator))
var/obj/item/device/communicator/comm = candidate
who = comm.owner
@@ -811,7 +821,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
if(!T) return
var/list/in_range = get_mobs_and_objs_in_view_fast(T,world.view,0) //Range of 3 since it's a tiny video display
var/list/mobs_to_relay = in_range["mobs"]
for(var/mob/mob in mobs_to_relay) //We can't use visible_message(), or else we will get an infinite loop if two communicators hear each other.
var/dst = get_dist(get_turf(mob),get_turf(comm))
if(dst <= video_range)
@@ -827,7 +837,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
// Description: Relays the speech to all linked communicators.
/obj/item/device/communicator/hear_talk(mob/living/M, text, verb, datum/language/speaking)
for(var/obj/item/device/communicator/comm in communicating)
var/turf/T = get_turf(comm)
if(!T) return
var/list/in_range = get_mobs_and_objs_in_view_fast(T,world.view,0)
@@ -915,6 +925,71 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
src << "A communications request has been sent to [chosen_communicator]. Now you need to wait until someone answers."
// Verb: text_communicator()
// Parameters: None
// Description: Allows a ghost to send a text message to a communicator.
/mob/observer/dead/verb/text_communicator()
set category = "Ghost"
set name = "Text Communicator"
set desc = "If there is a communicator available, send a text message to it."
if(ticker.current_state < GAME_STATE_PLAYING)
src << "<span class='danger'>The game hasn't started yet!</span>"
return
if (!src.stat)
return
if (usr != src)
return //something is terribly wrong
for(var/mob/living/L in mob_list) //Simple check so you don't have dead people calling.
if(src.client.prefs.real_name == L.real_name)
src << "<span class='danger'>Your identity is already present in the game world. Please load in a different character first.</span>"
return
var/obj/machinery/exonet_node/E = get_exonet_node()
if(!E || !E.on || !E.allow_external_communicators)
src << "<span class='danger'>The Exonet node at telecommunications is down at the moment, or is actively blocking you, so your call can't go through.</span>"
return
var/list/choices = list()
for(var/obj/item/device/communicator/comm in all_communicators)
if(!comm.network_visibility || !comm.exonet || !comm.exonet.address)
continue
choices.Add(comm)
if(!choices.len)
src << "<span class='danger'>There are no available communicators, sorry.</span>"
return
var/choice = input(src,"Send a text message to whom?") as null|anything in choices
if(choice)
var/obj/item/device/communicator/chosen_communicator = choice
var/mob/observer/dead/O = src
var/text_message = sanitize(input(src, "What do you want the message to say?")) as message
if(text_message && O.exonet)
O.exonet.send_message(chosen_communicator.exonet.address, "text", text_message)
src << "<span class='notice'>You have sent '[text_message]' to [chosen_communicator].</span>."
exonet_messages.Add("<b>To [chosen_communicator]:</b><br>[text_message]")
log_pda("[usr] (COMM: [src]) sent \"[text_message]\" to [chosen_communicator]")
// Verb: show_text_messages()
// Parameters: None
// Description: Lets ghosts review messages they've sent or received.
/mob/observer/dead/verb/show_text_messages()
set category = "Ghost"
set name = "Show Text Messages"
set desc = "Allows you to see exonet text messages you've sent and received."
var/HTML = "<html><head><title>Exonet Message Log</title></head><body>"
for(var/line in exonet_messages)
HTML += line + "<br>"
HTML +="</body></html>"
usr << browse(HTML, "window=log;size=400x444;border=1;can_resize=1;can_close=1;can_minimize=0")
// Proc: connect_video()
// Parameters: user - the mob doing the viewing of video, comm - the communicator at the far end
// Description: Sets up a videocall and puts the first view into it using watch_video, and updates the icon
@@ -963,7 +1038,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
// Description: Cleans up mob's client when they stop watching a video
/obj/item/device/communicator/proc/video_cleanup(mob/user)
if(!user) return
user.reset_view(null)
user.unset_machine()
@@ -972,14 +1047,14 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
// Description: Ends the video call by clearing video_source
/obj/item/device/communicator/proc/end_video(var/reason)
video_source = null
. = "<span class='danger'>\icon[src] [reason ? reason : "Video session ended"].</span>"
visible_message(.)
update_icon()
//For synths who have no hands.
/obj/item/device/communicator/integrated
/obj/item/device/communicator/integrated
name = "integrated communicator"
desc = "A circuit used for long-range communications, able to be integrated into a system."

View File

@@ -74,13 +74,17 @@
if(M.stat!=DEAD)
var/safety = M:eyecheck()
if(safety <= 0)
var/flash_strength = 10
var/flash_strength = 5
if(ishuman(M))
var/mob/living/carbon/human/H = M
flash_strength *= H.species.flash_mod
if(flash_strength > 0)
M.Weaken(flash_strength)
M.flash_eyes()
if(flash_strength > 0)
H.confused = max(H.confused, flash_strength)
H.eye_blind = max(H.eye_blind, flash_strength)
H.eye_blurry = max(H.eye_blurry, flash_strength + 5)
H.flash_eyes()
else
flashfail = 1

View File

@@ -3,7 +3,6 @@
desc = "A hand-held emergency light."
icon = 'icons/obj/lighting.dmi'
icon_state = "flashlight"
item_state = "flashlight"
w_class = 2
flags = CONDUCT
slot_flags = SLOT_BELT
@@ -89,7 +88,7 @@
name = "penlight"
desc = "A pen-sized light, used by medical staff."
icon_state = "penlight"
item_state = ""
item_state = "pen"
flags = CONDUCT
slot_flags = SLOT_EARS
brightness_on = 2
@@ -99,7 +98,6 @@
name = "maglight"
desc = "A very, very heavy duty flashlight."
icon_state = "maglight"
item_state = "maglight"
force = 10
flags = CONDUCT
brightness_on = 4
@@ -113,7 +111,7 @@
name = "low-power flashlight"
desc = "A miniature lamp, that might be used by small robots."
icon_state = "penlight"
item_state = ""
item_state = null
flags = CONDUCT
brightness_on = 2
w_class = 1
@@ -124,7 +122,6 @@
name = "desk lamp"
desc = "A desk lamp with an adjustable mount."
icon_state = "lamp"
item_state = "lamp"
brightness_on = 5
w_class = 4
flags = CONDUCT
@@ -136,7 +133,6 @@
/obj/item/device/flashlight/lamp/green
desc = "A classic green-shaded desk lamp."
icon_state = "lampgreen"
item_state = "lampgreen"
brightness_on = 5
light_color = "#FFC58F"

View File

@@ -2,7 +2,6 @@
name = "floor painter"
icon = 'icons/obj/bureaucracy.dmi'
icon_state = "labeler1"
item_state = "flight"
var/decal = "remove all decals"
var/paint_dir = "precise"

View File

@@ -2,7 +2,6 @@
name = "closet painter"
icon = 'icons/obj/bureaucracy.dmi'
icon_state = "labeler1"
item_state = "flight"
var/colour = "plain"
var/colour_secure = "plain"

View File

@@ -2,7 +2,6 @@
name = "pipe painter"
icon = 'icons/obj/bureaucracy.dmi'
icon_state = "labeler1"
item_state = "flight"
var/list/modes
var/mode

View File

@@ -2,6 +2,10 @@
name = "electropack"
desc = "Dance my monkeys! DANCE!!!"
icon_state = "electropack0"
item_icons = list(
slot_l_hand_str = 'icons/mob/items/lefthand_storage.dmi',
slot_r_hand_str = 'icons/mob/items/righthand_storage.dmi',
)
item_state = "electropack"
frequency = 1449
flags = CONDUCT

View File

@@ -4,7 +4,6 @@
desc = "An encryption key for a radio headset. Contains cypherkeys."
icon = 'icons/obj/radio.dmi'
icon_state = "cypherkey"
item_state = ""
w_class = 1
slot_flags = SLOT_EARS
var/translate_binary = 0

View File

@@ -3,7 +3,6 @@
desc = "An updated, modular intercom that fits over the head. Takes encryption keys"
var/radio_desc = ""
icon_state = "headset"
item_state = "headset"
matter = list(DEFAULT_WALL_MATERIAL = 75)
subspace_transmission = 1
canhear_range = 0 // can't hear headsets from very far away
@@ -71,7 +70,7 @@
/obj/item/device/radio/headset/syndicate/alt
icon_state = "syndie_headset"
item_state = "syndie_headset"
item_state = "headset"
origin_tech = list(TECH_ILLEGAL = 3)
syndie = 1
ks1type = /obj/item/device/encryptionkey/syndicate
@@ -91,7 +90,7 @@
name = "security bowman headset"
desc = "This is used by your elite security force."
icon_state = "sec_headset_alt"
item_state = "sec_headset_alt"
item_state = "headset"
ks2type = /obj/item/device/encryptionkey/headset_sec
/obj/item/device/radio/headset/headset_eng
@@ -105,7 +104,7 @@
name = "engineering bowman headset"
desc = "When the engineers wish to chat like girls."
icon_state = "eng_headset_alt"
item_state = "eng_headset_alt"
item_state = "headset"
ks2type = /obj/item/device/encryptionkey/headset_eng
/obj/item/device/radio/headset/headset_rob
@@ -126,7 +125,7 @@
name = "medical bowman headset"
desc = "A headset for the trained staff of the medbay."
icon_state = "med_headset_alt"
item_state = "med_headset_alt"
item_state = "headset"
ks2type = /obj/item/device/encryptionkey/headset_med
/obj/item/device/radio/headset/headset_sci
@@ -154,7 +153,7 @@
name = "command bowman headset"
desc = "A headset with a commanding channel."
icon_state = "com_headset_alt"
item_state = "com_headset_alt"
item_state = "headset"
ks2type = /obj/item/device/encryptionkey/headset_com
@@ -169,7 +168,7 @@
name = "captain's bowman headset"
desc = "The headset of the boss."
icon_state = "com_headset_alt"
item_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.
@@ -198,7 +197,7 @@
name = "research director's bowman headset"
desc = "Headset of the researching God."
icon_state = "com_headset_alt"
item_state = "com_headset_alt"
item_state = "headset"
ks2type = /obj/item/device/encryptionkey/heads/rd
/obj/item/device/radio/headset/heads/hos
@@ -212,7 +211,7 @@
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 = "com_headset_alt"
item_state = "headset"
ks2type = /obj/item/device/encryptionkey/heads/hos
/obj/item/device/radio/headset/heads/ce
@@ -226,7 +225,7 @@
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 = "com_headset_alt"
item_state = "headset"
ks2type = /obj/item/device/encryptionkey/heads/ce
/obj/item/device/radio/headset/heads/cmo
@@ -240,7 +239,7 @@
name = "chief medical officer's bowman headset"
desc = "The headset of the highly trained medical chief."
icon_state = "com_headset_alt"
item_state = "com_headset_alt"
item_state = "headset"
ks2type = /obj/item/device/encryptionkey/heads/cmo
/obj/item/device/radio/headset/heads/hop
@@ -254,7 +253,7 @@
name = "head of personnel's bowman headset"
desc = "The headset of the guy who will one day be captain."
icon_state = "com_headset_alt"
item_state = "com_headset_alt"
item_state = "headset"
ks2type = /obj/item/device/encryptionkey/heads/hop
/*
/obj/item/device/radio/headset/headset_mine
@@ -275,7 +274,7 @@
name = "supply bowman headset"
desc = "A bowman headset used by the QM and his slaves."
icon_state = "cargo_headset_alt"
item_state = "cargo_headset_alt"
item_state = "headset"
ks2type = /obj/item/device/encryptionkey/headset_cargo
/obj/item/device/radio/headset/headset_service
@@ -297,7 +296,7 @@
name = "emergency response team bowman headset"
desc = "The headset of the boss's boss."
icon_state = "com_headset_alt"
item_state = "com_headset_alt"
item_state = "headset"
// freerange = 1
ks2type = /obj/item/device/encryptionkey/ert

View File

@@ -25,7 +25,7 @@ var/global/list/default_medbay_channels = list(
name = "station bounced radio"
suffix = "\[3\]"
icon_state = "walkietalkie"
item_state = "walkietalkie"
item_state = "radio"
var/on = 1 // 0 for off
var/last_transmission

View File

@@ -13,7 +13,7 @@ REAGENT SCANNER
name = "health analyzer"
desc = "A hand-held body scanner able to distinguish vital signs of the subject."
icon_state = "health"
item_state = "analyzer"
item_state = "healthanalyzer"
flags = CONDUCT
slot_flags = SLOT_BELT
throwforce = 3

View File

@@ -4,7 +4,7 @@
w_class = 4
icon = 'icons/obj/device.dmi'
icon_state = "suitcooler0"
slot_flags = SLOT_BACK //you can carry it on your back if you want, but it won't do anything unless attached to suit storage
slot_flags = SLOT_BACK
//copied from tank.dm
flags = CONDUCT
@@ -20,7 +20,7 @@
var/on = 0 //is it turned on?
var/cover_open = 0 //is the cover open?
var/obj/item/weapon/cell/cell
var/max_cooling = 12 // in degrees per second - probably don't need to mess with heat capacity here
var/max_cooling = 15 // in degrees per second - probably don't need to mess with heat capacity here
var/charge_consumption = 3 // charge per second at max_cooling
var/thermostat = T20C
@@ -87,7 +87,7 @@
var/mob/living/carbon/human/H = M
if (!H.wear_suit || H.s_store != src)
if (!H.wear_suit || (H.s_store != src && H.back != src))
return 0
return 1

View File

@@ -1,21 +0,0 @@
/*
Telecrystal item
Does nothing if not suitable antag type, checks for accept_tcrystals = 1 in a mob's mind.
For new antags, make sure to add "player.mind.accept_tcrystals = 1" if you want tradable tcrystals.
*/
/obj/item/device/telecrystal
name = "red crystal"
desc = "A strange, red, glowing crystal."
icon = 'icons/obj/stock_parts.dmi'
icon_state = "telecrystal"
item_state = "telecrystal"
force = 5
origin_tech = list(TECH_MATERIAL = 2, TECH_BLUESPACE = 1, TECH_ILLEGAL = 1)
/obj/item/device/telecrystal/attack_self(mob/user as mob)
if(user.mind.accept_tcrystals) //Checks to see if antag type allows for tcrystals
user.mind.tcrystals += 1
user.drop_from_inventory(src)
qdel(src)
return

View File

@@ -11,7 +11,7 @@
var/list/purchase_log = new
var/datum/mind/uplink_owner = null
var/used_TC = 0
var/offer_time = 15 MINUTES //The time increment per discount offered
var/offer_time = 10 MINUTES //The time increment per discount offered
var/next_offer_time //The time a discount will next be offered
var/datum/uplink_item/discount_item //The item to be discounted
var/discount_amount //The amount as a percent the item will be discounted by

View File

@@ -1,4 +1,5 @@
var/datum/uplink_random_selection/default_uplink_selection = new/datum/uplink_random_selection/default()
var/datum/uplink_random_selection/all_uplink_selection = new/datum/uplink_random_selection/all()
/datum/uplink_random_item
var/uplink_item // The uplink item
@@ -14,16 +15,22 @@ var/datum/uplink_random_selection/default_uplink_selection = new/datum/uplink_ra
/datum/uplink_random_selection
var/list/datum/uplink_random_item/items
var/list/datum/uplink_random_item/all_items
/datum/uplink_random_selection/New()
..()
items = list()
all_items = list()
/datum/uplink_random_selection/proc/get_random_item(var/telecrystals, obj/item/device/uplink/U, var/list/bought_items)
/datum/uplink_random_selection/proc/get_random_item(var/telecrystals, obj/item/device/uplink/U, var/list/bought_items, var/items_override = 0)
var/const/attempts = 50
for(var/i = 0; i < attempts; i++)
var/datum/uplink_random_item/RI = pick(items)
var/datum/uplink_random_item/RI
if(items_override)
RI = pick(all_items)
else
RI = pick(items)
if(!prob(RI.keep_probability))
continue
var/datum/uplink_item/I = uplink.items_assoc[RI.uplink_item]
@@ -35,6 +42,14 @@ var/datum/uplink_random_selection/default_uplink_selection = new/datum/uplink_ra
continue
return I
/datum/uplink_random_selection/all/New()
..()
for(var/datum/uplink_item/item in uplink.items)
if(item.blacklisted)
continue
else
all_items += new/datum/uplink_random_item(item.type)
/datum/uplink_random_selection/default/New()
..()
@@ -86,7 +101,7 @@ var/datum/uplink_random_selection/default_uplink_selection = new/datum/uplink_ra
items += new/datum/uplink_random_item(/datum/uplink_item/item/hardsuit_modules/thermal, reselect_propbability = 15)
items += new/datum/uplink_random_item(/datum/uplink_item/item/hardsuit_modules/energy_net, reselect_propbability = 15)
items += new/datum/uplink_random_item(/datum/uplink_item/item/ewar_voice, reselect_propbability = 15)
items += new/datum/uplink_random_item(/datum/uplink_item/item/hardsuit_modules/ewar_voice, reselect_propbability = 15)
items += new/datum/uplink_random_item(/datum/uplink_item/item/hardsuit_modules/maneuvering_jets, reselect_propbability = 15)
items += new/datum/uplink_random_item(/datum/uplink_item/item/hardsuit_modules/egun, reselect_propbability = 15)
items += new/datum/uplink_random_item(/datum/uplink_item/item/hardsuit_modules/power_sink, reselect_propbability = 15)

View File

@@ -5,7 +5,6 @@
desc = "A wooden musical instrument with four strings and a bow. \"The devil went down to space, he was looking for an assistant to grief.\""
icon = 'icons/obj/musician.dmi'
icon_state = "violin"
item_state = "violin"
force = 10
var/datum/song/song
var/playing = 0

View File

@@ -2,6 +2,10 @@
name = "latex glove"
desc = "A latex glove, usually used as a balloon."
icon_state = "latexballon"
item_icons = list(
slot_l_hand_str = 'icons/mob/items/lefthand_gloves.dmi',
slot_r_hand_str = 'icons/mob/items/righthand_gloves.dmi',
)
item_state = "lgloves"
force = 0
throwforce = 0

View File

@@ -104,7 +104,7 @@
/obj/item/borg/upgrade/tasercooler/action(var/mob/living/silicon/robot/R)
if(..()) return 0
if(!R.module || !(src in R.module.supported_upgrades))
if(!R.module || !(type in R.module.supported_upgrades))
R << "Upgrade mounting error! No suitable hardpoint detected!"
usr << "There's no mounting point for the module!"
return 0
@@ -137,7 +137,7 @@
/obj/item/borg/upgrade/jetpack/action(var/mob/living/silicon/robot/R)
if(..()) return 0
if(!R.module || !(src in R.module.supported_upgrades))
if(!R.module || !(type in R.module.supported_upgrades))
R << "Upgrade mounting error! No suitable hardpoint detected!"
usr << "There's no mounting point for the module!"
return 0

View File

@@ -13,6 +13,9 @@
max_amount = 60
attack_verb = list("hit", "bludgeoned", "whacked")
/obj/item/stack/rods/fifty //Calling this path still fifty because sixty is confusing
amount = 60
/obj/item/stack/rods/cyborg
name = "metal rod synthesizer"
desc = "A device that makes metal rods."

View File

@@ -4,36 +4,54 @@
singular_name = "human skin piece"
icon_state = "sheet-hide"
/obj/item/stack/material/animalhide/human
amount = 50
/obj/item/stack/material/animalhide/corgi
name = "corgi hide"
desc = "The by-product of corgi farming."
singular_name = "corgi hide piece"
icon_state = "sheet-corgi"
/obj/item/stack/material/animalhide/corgi
amount = 50
/obj/item/stack/material/animalhide/cat
name = "cat hide"
desc = "The by-product of cat farming."
singular_name = "cat hide piece"
icon_state = "sheet-cat"
/obj/item/stack/material/animalhide/cat
amount = 50
/obj/item/stack/material/animalhide/monkey
name = "monkey hide"
desc = "The by-product of monkey farming."
singular_name = "monkey hide piece"
icon_state = "sheet-monkey"
/obj/item/stack/material/animalhide/monkey
amount = 50
/obj/item/stack/material/animalhide/lizard
name = "lizard skin"
desc = "Sssssss..."
singular_name = "lizard skin piece"
icon_state = "sheet-lizard"
/obj/item/stack/material/animalhide/lizard
amount = 50
/obj/item/stack/material/animalhide/xeno
name = "alien hide"
desc = "The skin of a terrible creature."
singular_name = "alien hide piece"
icon_state = "sheet-xeno"
/obj/item/stack/material/animalhide/xeno
amount = 50
//don't see anywhere else to put these, maybe together they could be used to make the xenos suit?
/obj/item/stack/material/xenochitin
name = "alien chitin"
@@ -42,6 +60,9 @@
icon = 'icons/mob/alien.dmi'
icon_state = "chitin"
/obj/item/stack/material/xenochitin
amount = 50
/obj/item/xenos_claw
name = "alien claw"
desc = "The claw of a terrible creature."
@@ -60,6 +81,9 @@
singular_name = "hairless hide piece"
icon_state = "sheet-hairlesshide"
/obj/item/stack/material/hairlesshide
amount = 50
/obj/item/stack/material/wetleather
name = "wet leather"
desc = "This leather has been cleaned but still needs to be dried."
@@ -68,6 +92,9 @@
var/wetness = 30 //Reduced when exposed to high temperautres
var/drying_threshold_temperature = 500 //Kelvin to start drying
/obj/item/stack/material/wetleather
amount = 50
//Step one - dehairing.
/obj/item/stack/material/animalhide/attackby(obj/item/weapon/W as obj, mob/user as mob)
if( istype(W, /obj/item/weapon/material/knife) || \

View File

@@ -0,0 +1,26 @@
/obj/item/stack/telecrystal
name = "telecrystal"
desc = "It seems to be pulsing with suspiciously enticing energies."
description_antag = "Telecrystals can be activated by utilizing them on devices with an actively running uplink. They will not activate on unactivated uplinks."
singular_name = "telecrystal"
icon = 'icons/obj/stock_parts.dmi'
icon_state = "telecrystal"
w_class = 1
max_amount = 240
origin_tech = list(TECH_MATERIAL = 6, TECH_BLUESPACE = 4)
force = 1 //Needs a token force to ensure you can attack because for some reason you can't attack with 0 force things
/obj/item/stack/telecrystal/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone)
if(amount >= 5)
target.visible_message("<span class='warning'>\The [target] has been transported with \the [src] by \the [user].</span>")
safe_blink(target, 14)
use(5)
else
user << "<span class='warning'>There are not enough telecrystals to do that.</span>"
/obj/item/stack/telecrystal/attack_self(mob/user as mob)
if(user.mind.accept_tcrystals) //Checks to see if antag type allows for tcrystals
user << "<span class='notice'>You use \the [src], adding [src.amount] to your balance.</span>"
user.mind.tcrystals += amount
use(amount)
return

View File

@@ -35,6 +35,8 @@
flags = 0
origin_tech = list(TECH_BIO = 1)
/obj/item/stack/tile/grass/fifty
amount = 50
/*
* Wood
*/
@@ -49,6 +51,9 @@
throw_range = 20
flags = 0
/obj/item/stack/tile/wood/fifty
amount = 50
/obj/item/stack/tile/wood/cyborg
name = "wood floor tile synthesizer"
desc = "A device that makes wood floor tiles."
@@ -71,12 +76,18 @@
throw_range = 20
flags = 0
/obj/item/stack/tile/carpet/fifty
amount = 50
/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/blue/fifty
amount = 50
/obj/item/stack/tile/floor
name = "floor tile"
singular_name = "floor tile"
@@ -89,42 +100,63 @@
throw_range = 20
flags = CONDUCT
/obj/item/stack/tile/floor/fifty
amount = 50
/obj/item/stack/tile/floor_red
name = "red floor tile"
singular_name = "red floor tile"
color = COLOR_RED_GRAY
icon_state = "tile_white"
/obj/item/stack/tile/floor_red/fifty
amount = 50
/obj/item/stack/tile/floor_steel
name = "steel floor tile"
singular_name = "steel floor tile"
icon_state = "tile_steel"
matter = list("plasteel" = SHEET_MATERIAL_AMOUNT / 4)
/obj/item/stack/tile/floor_steel/fifty
amount = 50
/obj/item/stack/tile/floor_white
name = "white floor tile"
singular_name = "white floor tile"
icon_state = "tile_white"
matter = list("plastic" = SHEET_MATERIAL_AMOUNT / 4)
/obj/item/stack/tile/floor_white/fifty
amount = 50
/obj/item/stack/tile/floor_yellow
name = "yellow floor tile"
singular_name = "yellow floor tile"
color = COLOR_BROWN
icon_state = "tile_white"
/obj/item/stack/tile/floor_yellow/fifty
amount = 50
/obj/item/stack/tile/floor_dark
name = "dark floor tile"
singular_name = "dark floor tile"
icon_state = "fr_tile"
matter = list("plasteel" = SHEET_MATERIAL_AMOUNT / 4)
/obj/item/stack/tile/floor_dark/fifty
amount = 50
/obj/item/stack/tile/floor_freezer
name = "freezer floor tile"
singular_name = "freezer floor tile"
icon_state = "tile_freezer"
matter = list("plastic" = SHEET_MATERIAL_AMOUNT / 4)
/obj/item/stack/tile/foor_freezer/fifty
amount = 50
/obj/item/stack/tile/floor/cyborg
name = "floor tile synthesizer"
desc = "A device that makes floor tiles."
@@ -144,4 +176,7 @@
throwforce = 1.0
throw_speed = 5
throw_range = 20
flags = 0
flags = 0
/obj/item/stack/tile/linoleum/fifty
amount = 50

View File

@@ -34,7 +34,6 @@
desc = "A translucent balloon. There's nothing in it."
icon = 'icons/obj/toy.dmi'
icon_state = "waterballoon-e"
item_state = "balloon-empty"
/obj/item/toy/balloon/New()
var/datum/reagents/R = new/datum/reagents(10)
@@ -85,10 +84,8 @@
/obj/item/toy/balloon/update_icon()
if(src.reagents.total_volume >= 1)
icon_state = "waterballoon"
item_state = "balloon"
else
icon_state = "waterballoon-e"
item_state = "balloon-empty"
/obj/item/toy/syndicateballoon
name = "criminal balloon"
@@ -99,7 +96,6 @@
force = 0
icon = 'icons/obj/weapons.dmi'
icon_state = "syndballoon"
item_state = "syndballoon"
w_class = 4.0
/obj/item/toy/nanotrasenballoon
@@ -111,7 +107,6 @@
force = 0
icon = 'icons/obj/weapons.dmi'
icon_state = "ntballoon"
item_state = "ntballoon"
w_class = 4.0
/*
@@ -142,7 +137,6 @@
desc = "A weapon favored by many overactive children. Ages 8 and up."
icon = 'icons/obj/gun.dmi'
icon_state = "crossbow"
item_state = "crossbow"
item_icons = list(
icon_l_hand = 'icons/mob/items/lefthand_guns.dmi',
icon_r_hand = 'icons/mob/items/righthand_guns.dmi',
@@ -251,7 +245,6 @@
anchored = 1
density = 0
/*
* Toy swords
*/
@@ -260,7 +253,10 @@
desc = "A cheap, plastic replica of an energy sword. Realistic sounds! Ages 8 and up."
icon = 'icons/obj/weapons.dmi'
icon_state = "sword0"
item_state = "sword0"
item_icons = list(
slot_l_hand_str = 'icons/mob/items/lefthand_melee.dmi',
slot_r_hand_str = 'icons/mob/items/righthand_melee.dmi',
)
var/active = 0.0
w_class = 2.0
attack_verb = list("attacked", "struck", "hit")
@@ -271,13 +267,11 @@
user << "<span class='notice'>You extend the plastic blade with a quick flick of your wrist.</span>"
playsound(user, 'sound/weapons/saberon.ogg', 50, 1)
src.icon_state = "swordblue"
src.item_state = "swordblue"
src.w_class = 4
else
user << "<span class='notice'>You push the plastic blade back down into the handle.</span>"
playsound(user, 'sound/weapons/saberoff.ogg', 50, 1)
src.icon_state = "sword0"
src.item_state = "sword0"
src.w_class = 2
if(istype(user,/mob/living/carbon/human))
@@ -293,7 +287,10 @@
desc = "Woefully underpowered in D20."
icon = 'icons/obj/weapons.dmi'
icon_state = "katana"
item_state = "katana"
item_icons = list(
slot_l_hand_str = 'icons/mob/items/lefthand_material.dmi',
slot_r_hand_str = 'icons/mob/items/righthand_material.dmi',
)
flags = CONDUCT
slot_flags = SLOT_BELT | SLOT_BACK
force = 5
@@ -863,7 +860,10 @@
desc = "An arcane weapon (made of foam) wielded by the followers of the hit Saturday morning cartoon \"King Nursee and the Acolytes of Heroism\"."
icon = 'icons/obj/weapons.dmi'
icon_state = "cultblade"
item_state = "cultblade"
item_icons = list(
slot_l_hand_str = 'icons/mob/items/lefthand_melee.dmi',
slot_r_hand_str = 'icons/mob/items/righthand_melee.dmi',
)
w_class = 4
attack_verb = list("attacked", "slashed", "stabbed", "poked")
@@ -883,7 +883,6 @@
name = "inflatable duck"
desc = "No bother to sink or swim when you can just float!"
icon_state = "inflatable"
item_state = "inflatable"
icon = 'icons/obj/clothing/belts.dmi'
slot_flags = SLOT_BELT

View File

@@ -3,7 +3,6 @@
desc = "a small pillar candle. Its specially-formulated fuel-oxidizer wax mixture allows continued combustion in airless environments."
icon = 'icons/obj/candle.dmi'
icon_state = "candle1"
item_state = "candle1"
w_class = 1
light_color = "#E09D37"
var/wax = 2000

View File

@@ -69,7 +69,6 @@
icon_state = "emag"
item_state = "card-id"
origin_tech = list(TECH_MAGNET = 2, TECH_ILLEGAL = 2)
var/default_uses = 10
var/uses = 10
/obj/item/weapon/card/emag/resolve_attackby(atom/A, mob/user)
@@ -89,9 +88,15 @@
qdel(src)
return 1
/obj/item/weapon/card/emag/attackby(obj/item/O as obj, mob/user as mob)
if(istype(O, /obj/item/device/telecrystal))
src.uses += default_uses/2 //Adds half the default amount of uses which is more than you get per TC when buying, as to balance the utility of having multiple emags vs one heavily usable one
if(istype(O, /obj/item/stack/telecrystal))
var/obj/item/stack/telecrystal/T = O
if(T.amount < 1)
usr << "<span class='notice'>You are not adding enough telecrystals to fuel \the [src].</span>"
return
uses += T.amount/2 //Gives 5 uses per 10 TC
uses = ceil(uses) //Ensures no decimal uses nonsense, rounds up to be nice
usr << "<span class='notice'>You add \the [O] to \the [src]. Increasing the uses of \the [src] to [uses].</span>"
qdel(O)
@@ -350,4 +355,11 @@
desc = "A card which represents common sense and responsibility."
icon_state = "civGold"
primary_color = rgb(0,94,142)
secondary_color = rgb(255,223,127)
secondary_color = rgb(255,223,127)
/obj/item/weapon/card/id/external
name = "identification card"
desc = "An identification card of some sort. It does not look like it is issued by NT."
icon_state = "permit"
primary_color = rgb(142,94,0)
secondary_color = rgb(191,159,95)

View File

@@ -481,7 +481,9 @@ CIGARETTE PACKETS ARE IN FANCY.DM
/obj/item/weapon/flame/lighter/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
if(!istype(M, /mob))
return
M.IgniteMob()
if(lit == 1)
M.IgniteMob()
if(istype(M.wear_mask, /obj/item/clothing/mask/smokable/cigarette) && user.zone_sel.selecting == O_MOUTH && lit)
var/obj/item/clothing/mask/smokable/cigarette/cig = M.wear_mask

View File

@@ -1,5 +1,5 @@
#ifndef T_BOARD
#error T_BOARD macro is not defined but we need it!
#error T_BOARD macro is not defined but we need it!
#endif
/obj/item/weapon/circuitboard/supplycomp
@@ -28,7 +28,6 @@
catastasis = "STANDARD"
switch( alert("Current receiver spectrum is set to: [catastasis]","Multitool-Circuitboard interface","Switch to [opposite_catastasis]","Cancel") )
//switch( alert("Current receiver spectrum is set to: " {(src.contraband_enabled) ? ("BROAD") : ("STANDARD")} , "Multitool-Circuitboard interface" , "Switch to " {(src.contraband_enabled) ? ("STANDARD") : ("BROAD")}, "Cancel") )
if("Switch to STANDARD","Switch to BROAD")
src.contraband_enabled = !src.contraband_enabled

View File

@@ -75,7 +75,6 @@
slot_flags = SLOT_EARS
icon = 'icons/obj/items.dmi'
icon_state = "purplecomb"
item_state = "purplecomb"
/obj/item/weapon/haircomb/attack_self(mob/living/user)
user.visible_message(text("<span class='notice'>[] uses [] to comb their hair with incredible style and sophistication. What a [].</span>", user, src, user.gender == FEMALE ? "lady" : "guy"))

View File

@@ -3,6 +3,10 @@
desc = "You are a firestarter!"
icon = 'icons/obj/flamethrower.dmi'
icon_state = "flamethrowerbase"
item_icons = list(
slot_l_hand_str = 'icons/mob/items/lefthand_guns.dmi',
slot_r_hand_str = 'icons/mob/items/righthand_guns.dmi',
)
item_state = "flamethrower_0"
flags = CONDUCT
force = 3.0

View File

@@ -3,7 +3,6 @@
name = "photon disruption grenade"
icon = 'icons/obj/grenade.dmi'
icon_state = "emp"
item_state = "emp"
det_time = 20
origin_tech = list(TECH_BLUESPACE = 4, TECH_MATERIAL = 4)

View File

@@ -14,7 +14,6 @@
name = "low yield emp grenade"
desc = "A weaker variant of the EMP grenade"
icon_state = "lyemp"
item_state = "lyempgrenade"
origin_tech = list(TECH_MATERIAL = 2, TECH_MAGNET = 3)
prime()

View File

@@ -4,7 +4,6 @@
//icon = 'icons/obj/grenade.dmi'
//det_time = 50
//icon_state = "frggrenade"
//item_state = "frggrenade"
//origin_tech = list(TECH_MATERIAL = 2, TECH_COMBAT = 3)
//obj/item/weapon/grenade/explosive/prime()
@@ -18,7 +17,8 @@
//Explosive grenade projectile, borrowed from fragmentation grenade code.
/obj/item/projectile/bullet/pellet/fragment
damage = 10
range_step = 2
armor_penetration = 30
range_step = 2 //projectiles lose a fragment each time they travel this distance. Can be a non-integer.
base_spread = 0 //causes it to be treated as a shrapnel explosion instead of cone
spread_step = 20
@@ -31,11 +31,10 @@
name = "fragmentation grenade"
desc = "A fragmentation grenade, optimized for harming personnel without causing massive structural damage."
icon_state = "frggrenade"
item_state = "frggrenade"
item_state = "grenade"
var/num_fragments = 50 //total number of fragments produced by the grenade
var/fragment_damage = 10
var/damage_step = 2 //projectiles lose a fragment each time they travel this distance. Can be a non-integer.
var/fragment_type = /obj/item/projectile/bullet/pellet/fragment
var/num_fragments = 63 //total number of fragments produced by the grenade
var/explosion_size = 2 //size of the center explosion
//The radius of the circle used to launch projectiles. Lower values mean less projectiles are used but if set too low gaps may appear in the spread pattern
@@ -57,9 +56,7 @@
for(var/turf/T in target_turfs)
var/obj/item/projectile/bullet/pellet/fragment/P = new (O)
P.damage = fragment_damage
P.pellets = fragments_per_projectile
P.range_step = damage_step
P.shot_from = src.name
P.launch(T)

View File

@@ -60,7 +60,7 @@
user << "<span class='danger'>\The [H] needs at least two wrists before you can cuff them together!</span>"
return 0
if(istype(H.gloves,/obj/item/clothing/gloves/rig) && !elastic) // Can't cuff someone who's in a deployed hardsuit.
if(istype(H.gloves,/obj/item/clothing/gloves/gauntlets/rig) && !elastic) // Can't cuff someone who's in a deployed hardsuit.
user << "<span class='danger'>\The [src] won't fit around \the [H.gloves]!</span>"
return 0
@@ -76,7 +76,7 @@
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
user.do_attack_animation(H)
user.visible_message("<span class='danger'>\The [user] has put [cuff_type] on \the [H]!</span>")
// Apply cuffs.
@@ -169,4 +169,4 @@ var/last_chew = 0
item_state = null
icon = 'icons/obj/bureaucracy.dmi'
breakouttime = 200
cuff_type = "duct tape"
cuff_type = "duct tape"

View File

@@ -3,7 +3,6 @@
desc = "HOME RUN!"
icon_state = "metalbat0"
base_icon = "metalbat"
item_state = "metalbat"
throwforce = 7
attack_verb = list("smashed", "beaten", "slammed", "smacked", "struck", "battered", "bonked")
hitsound = 'sound/weapons/genhit3.ogg'

View File

@@ -38,3 +38,6 @@
/obj/item/weapon/material/twohanded/fireaxe/foam/New(var/newloc)
..(newloc,"foam")
/obj/item/weapon/material/twohanded/fireaxe/foam/afterattack()
return

View File

@@ -1,6 +1,6 @@
/obj/item/weapon/material/kitchen
icon = 'icons/obj/kitchen.dmi'
/*
* Utensils
*/

View File

@@ -72,7 +72,6 @@
name = "meat hook"
desc = "A sharp, metal hook what sticks into things."
icon_state = "hook_knife"
item_state = "hook_knife"
/obj/item/weapon/material/knife/ritual
name = "ritual knife"

View File

@@ -10,6 +10,10 @@
w_class = 3
sharp = 0
edge = 0
item_icons = list(
slot_l_hand_str = 'icons/mob/items/lefthand_material.dmi',
slot_r_hand_str = 'icons/mob/items/righthand_material.dmi',
)
var/applies_material_colour = 1
var/unbreakable

View File

@@ -38,6 +38,22 @@
icon = 'icons/obj/weapons.dmi'
icon_state = "unathiknife"
attack_verb = list("ripped", "torn", "cut")
var hits = 0
/obj/item/weapon/material/hatchet/unathiknife/attack(mob/M as mob, mob/user as mob)
if(hits > 0)
return
var/obj/item/I = user.get_inactive_hand()
if(istype(I, /obj/item/weapon/material/hatchet/unathiknife))
hits ++
var/obj/item/weapon/W = I
W.attack(M, user)
W.afterattack(M, user)
..()
/obj/item/weapon/material/hatchet/unathiknife/afterattack(mob/M as mob, mob/user as mob)
hits = initial(hits)
..()
/obj/item/weapon/material/hatchet/tacknife
name = "tactical knife"
@@ -64,7 +80,6 @@
desc = "It's used for removing weeds or scratching your back."
icon = 'icons/obj/weapons.dmi'
icon_state = "hoe"
item_state = "hoe"
force_divisor = 0.25 // 5 with weight 20 (steel)
thrown_force_divisor = 0.25 // as above
w_class = 2

View File

@@ -2,7 +2,6 @@
name = "claymore"
desc = "What are you standing around staring at this for? Get to killing!"
icon_state = "claymore"
item_state = "claymore"
slot_flags = SLOT_BELT
force_divisor = 0.7 // 42 when wielded with hardnes 60 (steel)
thrown_force_divisor = 0.5 // 10 when thrown with weight 20 (steel)
@@ -27,7 +26,6 @@
name = "katana"
desc = "Woefully underpowered in D20. This one looks pretty sharp."
icon_state = "katana"
item_state = "katana"
slot_flags = SLOT_BELT | SLOT_BACK
/obj/item/weapon/material/sword/katana/suicide_act(mob/user)

View File

@@ -93,6 +93,22 @@
attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut")
applies_material_colour = 0
/obj/item/weapon/material/twohanded/fireaxe/update_held_icon()
var/mob/living/M = loc
if(istype(M) && !issmall(M) && M.item_is_in_hands(src) && !M.hands_are_full())
wielded = 1
pry = 1
force = force_wielded
name = "[base_name] (wielded)"
update_icon()
else
wielded = 0
pry = 0
force = force_unwielded
name = "[base_name]"
update_icon()
..()
/obj/item/weapon/material/twohanded/fireaxe/afterattack(atom/A as mob|obj|turf|area, mob/user as mob, proximity)
if(!proximity) return
..()

View File

@@ -2,7 +2,6 @@
name = "chain of command"
desc = "A tool used by great men to placate the frothing masses."
icon_state = "chain"
item_state = "chain"
flags = CONDUCT
slot_flags = SLOT_BELT
force = 10

View File

@@ -32,6 +32,10 @@
/obj/item/weapon/shield
name = "shield"
var/base_block_chance = 50
item_icons = list(
slot_l_hand_str = 'icons/mob/items/lefthand_melee.dmi',
slot_r_hand_str = 'icons/mob/items/righthand_melee.dmi',
)
/obj/item/weapon/shield/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack")
if(user.incapacitated())

View File

@@ -1,4 +1,3 @@
/*
* Backpack
*/
@@ -6,17 +5,7 @@
/obj/item/weapon/storage/backpack
name = "backpack"
desc = "You wear this on your back and put items into it."
item_icons = list(
slot_l_hand_str = 'icons/mob/items/lefthand_backpacks.dmi',
slot_r_hand_str = 'icons/mob/items/righthand_backpacks.dmi',
)
icon_state = "backpack"
item_state = null
//most backpacks use the default backpack state for inhand overlays
item_state_slots = list(
slot_l_hand_str = "backpack",
slot_r_hand_str = "backpack",
)
sprite_sheets = list(
"Teshari" = 'icons/mob/species/seromi/back.dmi'
)
@@ -76,7 +65,7 @@
name = "\improper Santa's gift bag"
desc = "Space Santa uses this to deliver toys to all the nice children in space in Christmas! Wow, it's pretty big!"
icon_state = "giftbag0"
item_state = "giftbag"
item_state_slots = list(slot_r_hand_str = "giftbag", slot_l_hand_str = "giftbag")
w_class = 4.0
max_w_class = 3
max_storage_space = 400 // can store a ton of shit!
@@ -91,31 +80,26 @@
name = "Giggles von Honkerton"
desc = "It's a backpack made by Honk! Co."
icon_state = "clownpack"
item_state_slots = null
/obj/item/weapon/storage/backpack/medic
name = "medical backpack"
desc = "It's a backpack especially designed for use in a sterile environment."
icon_state = "medicalpack"
item_state_slots = null
/obj/item/weapon/storage/backpack/security
name = "security backpack"
desc = "It's a very robust backpack."
icon_state = "securitypack"
item_state_slots = null
/obj/item/weapon/storage/backpack/captain
name = "captain's backpack"
desc = "It's a special backpack made exclusively for officers."
icon_state = "captainpack"
item_state_slots = null
/obj/item/weapon/storage/backpack/industrial
name = "industrial backpack"
desc = "It's a tough backpack for the daily grind of station life."
icon_state = "engiepack"
item_state_slots = null
/obj/item/weapon/storage/backpack/toxins
name = "laboratory backpack"
@@ -150,10 +134,6 @@
name = "dufflebag"
desc = "A large dufflebag for holding extra things."
icon_state = "duffle"
item_state_slots = list(
slot_l_hand_str = "duffle",
slot_r_hand_str = "duffle",
)
slowdown = 1
max_storage_space = 36
@@ -161,74 +141,42 @@
name = "black dufflebag"
desc = "A large dufflebag for holding extra tactical supplies."
icon_state = "duffle_syndie"
item_state_slots = list(
slot_l_hand_str = "duffle_syndiemed",
slot_r_hand_str = "duffle_syndiemed",
)
slowdown = 0
/obj/item/weapon/storage/backpack/dufflebag/syndie/med
name = "medical dufflebag"
desc = "A large dufflebag for holding extra tactical medical supplies."
icon_state = "duffle_syndiemed"
item_state_slots = list(
slot_l_hand_str = "duffle_syndiemed",
slot_r_hand_str = "duffle_syndiemed",
)
/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo
name = "ammunition dufflebag"
desc = "A large dufflebag for holding extra weapons ammunition and supplies."
icon_state = "duffle_syndieammo"
item_state_slots = list(
slot_l_hand_str = "duffle_syndieammo",
slot_r_hand_str = "duffle_syndieammo",
)
/obj/item/weapon/storage/backpack/dufflebag/captain
name = "captain's dufflebag"
desc = "A large dufflebag for holding extra captainly goods."
icon_state = "duffle_captain"
item_state_slots = list(
slot_l_hand_str = "duffle_captain",
slot_r_hand_str = "duffle_captain",
)
/obj/item/weapon/storage/backpack/dufflebag/med
name = "medical dufflebag"
desc = "A large dufflebag for holding extra medical supplies."
icon_state = "duffle_med"
item_state_slots = list(
slot_l_hand_str = "duffle_med",
slot_r_hand_str = "duffle_med",
)
/obj/item/weapon/storage/backpack/dufflebag/emt
name = "EMT dufflebag"
desc = "A large dufflebag for holding extra medical supplies. This one has reflective stripes!"
icon_state = "duffle_emt"
item_state_slots = list(
slot_l_hand_str = "duffle_emt",
slot_r_hand_str = "duffle_emt",
)
/obj/item/weapon/storage/backpack/dufflebag/sec
name = "security dufflebag"
desc = "A large dufflebag for holding extra security supplies and ammunition."
icon_state = "duffle_sec"
item_state_slots = list(
slot_l_hand_str = "duffle_sec",
slot_r_hand_str = "duffle_sec",
)
/obj/item/weapon/storage/backpack/dufflebag/eng
name = "industrial dufflebag"
desc = "A large dufflebag for holding extra tools and supplies."
icon_state = "duffle_eng"
item_state_slots = list(
slot_l_hand_str = "duffle_eng",
slot_r_hand_str = "duffle_eng",
)
/*
* Satchel Types
@@ -238,6 +186,7 @@
name = "leather satchel"
desc = "It's a very fancy satchel made with fine leather."
icon_state = "satchel"
item_state_slots = list(slot_r_hand_str = "briefcase", slot_l_hand_str = "briefcase")
/obj/item/weapon/storage/backpack/satchel/withwallet
New()
@@ -253,48 +202,43 @@
name = "industrial satchel"
desc = "A tough satchel with extra pockets."
icon_state = "satchel-eng"
item_state_slots = list(
slot_l_hand_str = "engiepack",
slot_r_hand_str = "engiepack",
)
item_state_slots = list(slot_r_hand_str = "engiepack", slot_l_hand_str = "engiepack")
/obj/item/weapon/storage/backpack/satchel/med
name = "medical satchel"
desc = "A sterile satchel used in medical departments."
icon_state = "satchel-med"
item_state_slots = list(
slot_l_hand_str = "medicalpack",
slot_r_hand_str = "medicalpack",
)
item_state_slots = list(slot_r_hand_str = "medicalpack", slot_l_hand_str = "medicalpack")
/obj/item/weapon/storage/backpack/satchel/vir
name = "virologist satchel"
desc = "A sterile satchel with virologist colours."
icon_state = "satchel-vir"
item_state_slots = list(slot_r_hand_str = "viropack", slot_l_hand_str = "viropack")
/obj/item/weapon/storage/backpack/satchel/chem
name = "chemist satchel"
desc = "A sterile satchel with chemist colours."
icon_state = "satchel-chem"
item_state_slots = list(slot_r_hand_str = "chempack", slot_l_hand_str = "chempack")
/obj/item/weapon/storage/backpack/satchel/gen
name = "geneticist satchel"
desc = "A sterile satchel with geneticist colours."
icon_state = "satchel-gen"
item_state_slots = list(slot_r_hand_str = "genpack", slot_l_hand_str = "genpack")
/obj/item/weapon/storage/backpack/satchel/tox
name = "scientist satchel"
desc = "Useful for holding research materials."
icon_state = "satchel-tox"
item_state_slots = list(slot_r_hand_str = "toxpack", slot_l_hand_str = "toxpack")
/obj/item/weapon/storage/backpack/satchel/sec
name = "security satchel"
desc = "A robust satchel for security related needs."
icon_state = "satchel-sec"
item_state_slots = list(
slot_l_hand_str = "securitypack",
slot_r_hand_str = "securitypack",
)
item_state_slots = list(slot_r_hand_str = "securitypack", slot_l_hand_str = "securitypack")
/obj/item/weapon/storage/backpack/satchel/hyd
name = "hydroponics satchel"
@@ -305,20 +249,14 @@
name = "captain's satchel"
desc = "An exclusive satchel for officers."
icon_state = "satchel-cap"
item_state_slots = list(
slot_l_hand_str = "satchel-cap",
slot_r_hand_str = "satchel-cap",
)
item_state_slots = list(slot_r_hand_str = "captainpack", slot_l_hand_str = "captainpack")
//ERT backpacks.
/obj/item/weapon/storage/backpack/ert
name = "emergency response team backpack"
desc = "A spacious backpack with lots of pockets, used by members of the Emergency Response Team."
icon_state = "ert_commander"
item_state_slots = list(
slot_l_hand_str = "securitypack",
slot_r_hand_str = "securitypack",
)
item_state_slots = list(slot_r_hand_str = "securitypack", slot_l_hand_str = "securitypack")
//Commander
/obj/item/weapon/storage/backpack/ert/commander

View File

@@ -30,7 +30,7 @@
desc = "It's the heavy-duty black polymer kind. Time to take out the trash!"
icon = 'icons/obj/janitor.dmi'
icon_state = "trashbag0"
item_state = "trashbag"
item_state_slots = list(slot_r_hand_str = "trashbag", slot_l_hand_str = "trashbag")
w_class = 4
max_w_class = 2
@@ -56,7 +56,6 @@
desc = "It's a very flimsy, very noisy alternative to a bag."
icon = 'icons/obj/trash.dmi'
icon_state = "plasticbag"
item_state = "plasticbag"
w_class = 4
max_w_class = 2
@@ -169,7 +168,6 @@
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)

View File

@@ -2,8 +2,7 @@
name = "belt"
desc = "Can hold various things."
icon = 'icons/obj/clothing/belts.dmi'
icon_state = "utilitybelt"
item_state = "utility"
icon_state = "utility"
storage_slots = 7
max_storage_space = 28 //This should ensure belts always have enough room to store whatever.
max_w_class = 3
@@ -28,12 +27,10 @@
var/mob/M = src.loc
M.update_inv_belt()
/obj/item/weapon/storage/belt/utility
name = "tool-belt" //Carn: utility belt is nicer, but it bamboozles the text parsing.
desc = "Can hold various tools."
icon_state = "utilitybelt"
item_state = "utility"
icon_state = "utility"
can_hold = list(
///obj/item/weapon/combitool,
/obj/item/weapon/crowbar,
@@ -50,17 +47,17 @@
/obj/item/clothing/gloves,
/obj/item/device/pda,
/obj/item/device/megaphone,
/obj/item/taperoll/engineering,
/obj/item/taperoll,
/obj/item/device/radio/headset,
/obj/item/device/robotanalyzer,
/obj/item/weapon/material/minihoe,
/obj/item/weapon/material/hatchet,
/obj/item/device/analyzer/plant_analyzer,
/obj/item/weapon/extinguisher/mini,
/obj/item/device/flashlight/maglight
/obj/item/device/flashlight/maglight,
/obj/item/weapon/tape_roll,
)
/obj/item/weapon/storage/belt/utility/full/New()
..()
new /obj/item/weapon/screwdriver(src)
@@ -70,7 +67,6 @@
new /obj/item/weapon/wirecutters(src)
new /obj/item/stack/cable_coil(src,30,pick("red","yellow","orange"))
/obj/item/weapon/storage/belt/utility/atmostech/New()
..()
new /obj/item/weapon/screwdriver(src)
@@ -80,13 +76,10 @@
new /obj/item/weapon/wirecutters(src)
new /obj/item/device/t_scanner(src)
/obj/item/weapon/storage/belt/medical
name = "medical belt"
desc = "Can hold various medical equipment."
icon_state = "medicalbelt"
item_state = "medical"
icon_state = "medical"
can_hold = list(
/obj/item/device/healthanalyzer,
/obj/item/weapon/dnainjector,
@@ -101,6 +94,7 @@
/obj/item/stack/medical,
/obj/item/device/radio/headset,
/obj/item/device/pda,
/obj/item/taperoll,
/obj/item/device/megaphone,
/obj/item/device/flashlight/pen,
/obj/item/clothing/mask/surgical,
@@ -116,14 +110,12 @@
/obj/item/weapon/storage/belt/medical/emt
name = "EMT utility belt"
desc = "A sturdy black webbing belt with attached pouches."
icon_state = "emsbelt"
item_state = "emsbelt"
icon_state = "ems"
/obj/item/weapon/storage/belt/security
name = "security belt"
desc = "Can hold security gear like handcuffs and flashes."
icon_state = "securitybelt"
item_state = "security"
icon_state = "security"
max_w_class = 3
can_hold = list(
/obj/item/weapon/grenade,
@@ -146,15 +138,14 @@
/obj/item/weapon/melee,
/obj/item/clothing/accessory/badge,
/obj/item/weapon/gun/projectile/sec,
/obj/item/taperoll/police,
/obj/item/taperoll,
/obj/item/weapon/gun/projectile/colt/detective
)
/obj/item/weapon/storage/belt/detective
name = "forensic utility belt"
desc = "A belt for holding forensics equipment."
icon_state = "securitybelt"
item_state = "security"
icon_state = "security"
storage_slots = 7
max_w_class = 3
can_hold = list(
@@ -181,7 +172,7 @@
/obj/item/device/megaphone,
/obj/item/device/radio/headset,
/obj/item/clothing/gloves,
/obj/item/taperoll/police,
/obj/item/taperoll,
/obj/item/weapon/reagent_containers/spray/pepper,
/obj/item/weapon/handcuffs,
/obj/item/device/flash,
@@ -194,8 +185,7 @@
/obj/item/weapon/storage/belt/soulstone
name = "soul stone belt"
desc = "Designed for ease of access to the shards during a fight, as to not let a single enemy spirit slip away"
icon_state = "soulstonebelt"
item_state = "soulstonebelt"
icon_state = "soulstone"
storage_slots = 6
can_hold = list(
/obj/item/device/soulstone
@@ -214,8 +204,7 @@
/obj/item/weapon/storage/belt/champion
name = "championship belt"
desc = "Proves to the world that you are the strongest!"
icon_state = "championbelt"
item_state = "champion"
icon_state = "champion"
storage_slots = 1
can_hold = list(
"/obj/item/clothing/mask/luchador"
@@ -224,8 +213,7 @@
/obj/item/weapon/storage/belt/security/tactical
name = "combat belt"
desc = "Can hold security gear like handcuffs and flashes, with more pouches for more storage."
icon_state = "swatbelt"
item_state = "swatbelt"
icon_state = "swat"
storage_slots = 9
max_w_class = 3
max_storage_space = 28
@@ -234,13 +222,11 @@
name = "combat belt"
desc = "Can hold security gear like handcuffs and flashes, with more pouches for more storage."
icon_state = "bandolier"
item_state = "bandolier"
/obj/item/weapon/storage/belt/janitor
name = "janitorial belt"
desc = "A belt used to hold most janitorial supplies."
icon_state = "janibelt"
item_state = "janibelt"
icon_state = "janitor"
storage_slots = 7
max_w_class = 3
can_hold = list(
@@ -256,6 +242,36 @@
/obj/item/weapon/light/tube,
/obj/item/weapon/flame/lighter,
/obj/item/device/megaphone,
/obj/item/taperoll,
/obj/item/weapon/reagent_containers/spray,
/obj/item/weapon/soap
)
/obj/item/weapon/storage/belt/archaeology
name = "excavation gear-belt"
desc = "Can hold various excavation gear."
icon_state = "gear"
can_hold = list(
/obj/item/weapon/storage/box/samplebags,
/obj/item/device/core_sampler,
/obj/item/device/beacon_locator,
/obj/item/device/radio/beacon,
/obj/item/device/gps,
/obj/item/device/measuring_tape,
/obj/item/device/flashlight,
/obj/item/weapon/pickaxe,
/obj/item/device/depth_scanner,
/obj/item/device/camera,
/obj/item/weapon/paper,
/obj/item/weapon/photo,
/obj/item/weapon/folder,
/obj/item/weapon/pen,
/obj/item/weapon/folder,
/obj/item/weapon/clipboard,
/obj/item/weapon/anodevice,
/obj/item/clothing/glasses,
/obj/item/weapon/wrench,
/obj/item/weapon/storage/box/excavation,
/obj/item/weapon/anobattery,
/obj/item/device/ano_scanner
)

View File

@@ -23,7 +23,7 @@
name = "box"
desc = "It's just an ordinary box."
icon_state = "box"
item_state = "syringe_kit"
item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit")
var/foldable = /obj/item/stack/material/cardboard // BubbleWrap - if set, can be folded (when empty) into a sheet of cardboard
max_w_class = 2
@@ -35,20 +35,20 @@
if ( contents.len )
return
if ( !ispath(src.foldable) )
if ( !ispath(foldable) )
return
var/found = 0
// Close any open UI windows first
for(var/mob/M in range(1))
if (M.s_active == src)
src.close(M)
close(M)
if ( M == user )
found = 1
if ( !found ) // User is too far away
return
// Now make the cardboard
user << "<span class='notice'>You fold [src] flat.</span>"
new src.foldable(get_turf(src))
new foldable(get_turf(src))
qdel(src)
/obj/item/weapon/storage/box/survival/New()
@@ -125,7 +125,7 @@
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 = "syringe_kit"
item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit")
/obj/item/weapon/storage/box/blanks/New()
..()
@@ -136,7 +136,7 @@
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 = "syringe_kit"
item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit")
/obj/item/weapon/storage/box/beanbags/New()
..()
@@ -147,7 +147,7 @@
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 = "syringe_kit"
item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit")
/obj/item/weapon/storage/box/shotgunammo/New()
..()
@@ -158,7 +158,7 @@
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 = "syringe_kit"
item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit")
/obj/item/weapon/storage/box/shotgunshells/New()
..()
@@ -169,7 +169,7 @@
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 = "syringe_kit"
item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit")
/obj/item/weapon/storage/box/flashshells/New()
..()
@@ -180,7 +180,7 @@
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 = "syringe_kit"
item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit")
/obj/item/weapon/storage/box/stunshells/New()
..()
@@ -191,7 +191,7 @@
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 = "syringe_kit"
item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit")
/obj/item/weapon/storage/box/practiceshells/New()
..()
@@ -224,7 +224,7 @@
/obj/item/weapon/storage/box/emps/New()
..()
for(var/i = 1 to 5)
for(var/i = 1 to 7)
new /obj/item/weapon/grenade/empgrenade(src)
/obj/item/weapon/storage/box/empslite
@@ -234,7 +234,7 @@
/obj/item/weapon/storage/box/empslite/New()
..()
for(var/i = 1 to 5)
for(var/i = 1 to 7)
new /obj/item/weapon/grenade/empgrenade/low_yield(src)
/obj/item/weapon/storage/box/smokes
@@ -249,22 +249,32 @@
/obj/item/weapon/storage/box/anti_photons
name = "box of anti-photon grenades"
desc = "A box containing 5 experimental photon disruption 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 5)
for(var/i = 1 to 7)
new /obj/item/weapon/grenade/anti_photon(src)
/obj/item/weapon/storage/box/frags
name = "box of fragmentation grenades (WARNING)"
desc = "A box containing 5 military grade fragmentation grenades.<br> WARNING: These devices are extremely dangerous and can cause limb loss or death in repeated use."
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 5)
for(var/i = 1 to 7)
new /obj/item/weapon/grenade/explosive(src)
/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)
/obj/item/weapon/storage/box/metalfoam
@@ -316,7 +326,7 @@
name = "death alarm kit"
desc = "Box of stuff used to implant death alarms."
icon_state = "implant"
item_state = "syringe_kit"
item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit")
/obj/item/weapon/storage/box/cdeathalarm_kit/New()
..()
@@ -371,7 +381,7 @@
/obj/item/weapon/storage/box/monkeycubes/New()
..()
if(src.type == /obj/item/weapon/storage/box/monkeycubes)
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)
@@ -468,7 +478,6 @@
desc = "A small box of 'Space-Proof' premium matches."
icon = 'icons/obj/cigarettes.dmi'
icon_state = "matchbox"
item_state = "zippo"
w_class = 1
slot_flags = SLOT_BELT
can_hold = list(/obj/item/weapon/flame/match)
@@ -502,7 +511,7 @@
icon = 'icons/obj/storage.dmi'
icon_state = "light"
desc = "This box is shaped on the inside so that only light tubes and bulbs fit."
item_state = "syringe_kit"
item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit")
storage_slots=21
can_hold = list(/obj/item/weapon/light/tube, /obj/item/weapon/light/bulb)
max_storage_space = 42 //holds 21 items of w_class 2
@@ -538,13 +547,29 @@
desc = "This nifty shock-resistant device will keep your 'groceries' nice and non-spoiled."
icon = 'icons/obj/storage.dmi'
icon_state = "portafreezer"
item_state = "medicalpack"
item_state_slots = list(slot_r_hand_str = "medicalpack", slot_l_hand_str = "medicalpack")
foldable = null
max_w_class = 3
can_hold = list(/obj/item/organ, /obj/item/weapon/reagent_containers/food, /obj/item/weapon/reagent_containers/glass)
max_storage_space = 21
use_to_pickup = 1 // for picking up broken bulbs, not that most people will try
/obj/item/weapon/storage/box/freezer/Entered(var/atom/movable/AM)
if(istype(AM, /obj/item/organ))
var/obj/item/organ/O = AM
O.preserved = 1
for(var/obj/item/organ/organ in O)
organ.preserved = 1
..()
/obj/item/weapon/storage/box/freezer/Exited(var/atom/movable/AM)
if(istype(AM, /obj/item/organ))
var/obj/item/organ/O = AM
O.preserved = 0
for(var/obj/item/organ/organ in O)
organ.preserved = 0
..()
/obj/item/weapon/storage/box/ambrosia
name = "ambrosia seeds box"
desc = "Contains the seeds you need to get a little high."

View File

@@ -2,7 +2,6 @@
name = "briefcase"
desc = "It's made of AUTHENTIC faux-leather and has a price-tag still attached. Its owner must be a real professional."
icon_state = "briefcase"
item_state = "briefcase"
flags = CONDUCT
force = 8.0
throw_speed = 1

View File

@@ -19,8 +19,8 @@
var/icon_type = "donut"
/obj/item/weapon/storage/fancy/update_icon(var/itemremoved = 0)
var/total_contents = src.contents.len - itemremoved
src.icon_state = "[src.icon_type]box[total_contents]"
var/total_contents = contents.len - itemremoved
icon_state = "[icon_type]box[total_contents]"
return
/obj/item/weapon/storage/fancy/examine(mob/user)
@@ -28,11 +28,11 @@
return
if(contents.len <= 0)
user << "There are no [src.icon_type]s left in the box."
user << "There are no [icon_type]s left in the box."
else if(contents.len == 1)
user << "There is one [src.icon_type] left in the box."
user << "There is one [icon_type] left in the box."
else
user << "There are [src.contents.len] [src.icon_type]s in the box."
user << "There are [contents.len] [icon_type]s in the box."
return
@@ -71,7 +71,6 @@
throwforce = 2
slot_flags = SLOT_BELT
/obj/item/weapon/storage/fancy/candle_box/New()
..()
for(var/i=1 to 5)
@@ -128,7 +127,7 @@
desc = "A ubiquitous brand of cigarettes, found in every major spacefaring corporation in the universe. As mild and flavorless as it gets."
icon = 'icons/obj/cigarettes.dmi'
icon_state = "cigpacket"
item_state = "cigpacket"
item_state_slots = list(slot_r_hand_str = "cigpacket", slot_l_hand_str = "cigpacket")
w_class = 1
throwforce = 2
slot_flags = SLOT_BELT
@@ -187,13 +186,11 @@
name = "\improper DromedaryCo packet"
desc = "A packet of six imported DromedaryCo cancer sticks. A label on the packaging reads, \"Wouldn't a slow death make a change?\""
icon_state = "Dpacket"
item_state = "Dpacket"
/obj/item/weapon/storage/fancy/cigarettes/killthroat
name = "\improper AcmeCo packet"
desc = "A packet of six AcmeCo cigarettes. For those who somehow want to obtain the record for the most amount of cancerous tumors."
icon_state = "Bpacket"
item_state = "Bpacket" //Doesn't have an inhand state, but neither does dromedary, so, ya know..
New()
..()
@@ -205,37 +202,31 @@
name = "\improper pack of Lucky Stars"
desc = "A mellow blend made from synthetic, pod-grown tobacco. The commercial jingle is guaranteed to get stuck in your head."
icon_state = "LSpacket"
item_state = "Dpacket" //I actually don't mind cig packs not showing up in the hand. whotf doesn't just keep them in their pockets/coats //
/obj/item/weapon/storage/fancy/cigarettes/jerichos
name = "\improper pack of Jerichos"
desc = "Typically seen dangling from the lips of Martian soldiers and border world hustlers. Tastes like hickory smoke, feels like warm liquid death down your lungs."
icon_state = "Jpacket"
item_state = "Dpacket"
/obj/item/weapon/storage/fancy/cigarettes/menthols
name = "\improper pack of Temperamento Menthols"
desc = "With a sharp and natural organic menthol flavor, these Temperamentos are a favorite of NDV crews. Hardly anyone knows they make 'em in non-menthol!"
icon_state = "TMpacket"
item_state = "Dpacket"
/obj/item/weapon/storage/fancy/cigarettes/carcinomas
name = "\improper pack of Carcinoma Angels"
desc = "This unknown brand was slated for the chopping block, until they were publicly endorsed by an old Earthling gonzo journalist. The rest is history. They sell a variety for cats, too."
icon_state = "CApacket"
item_state = "Dpacket"
/obj/item/weapon/storage/fancy/cigarettes/professionals
name = "\improper pack of Professional 120s"
desc = "Let's face it - if you're smoking these, you're either trying to look upper-class or you're 80 years old. That's the only excuse. They taste disgusting, too."
icon_state = "P100packet"
item_state = "Dpacket"
/obj/item/weapon/storage/fancy/cigar
name = "cigar case"
desc = "A case for holding your cigars when you are not smoking them."
icon_state = "cigarcase"
item_state = "cigarcase"
icon = 'icons/obj/cigarettes.dmi'
w_class = 1
throwforce = 2
@@ -273,7 +264,6 @@
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)
@@ -285,7 +275,7 @@
desc = "A locked box for keeping things away from children."
icon = 'icons/obj/vialbox.dmi'
icon_state = "vialbox0"
item_state = "syringe_kit"
item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit")
max_w_class = 2
can_hold = list(/obj/item/weapon/reagent_containers/glass/beaker/vial)
max_storage_space = 12 //The sum of the w_classes of all the items in this storage item.
@@ -297,9 +287,9 @@
update_icon()
/obj/item/weapon/storage/lockbox/vials/update_icon(var/itemremoved = 0)
var/total_contents = src.contents.len - itemremoved
src.icon_state = "vialbox[total_contents]"
src.overlays.Cut()
var/total_contents = contents.len - itemremoved
icon_state = "vialbox[total_contents]"
overlays.Cut()
if (!broken)
overlays += image(icon, src, "led[locked]")
if(locked)

View File

@@ -21,7 +21,7 @@
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 = "firstaid-ointment"
item_state_slots = list(slot_r_hand_str = "firstaid-ointment", slot_l_hand_str = "firstaid-ointment")
New()
..()
@@ -58,7 +58,7 @@
name = "toxin first aid"
desc = "Used to treat when you have a high amoutn of toxins in your body."
icon_state = "antitoxin"
item_state = "firstaid-toxin"
item_state_slots = list(slot_r_hand_str = "firstaid-toxin", slot_l_hand_str = "firstaid-toxin")
New()
..()
@@ -79,7 +79,7 @@
name = "oxygen deprivation first aid"
desc = "A box full of oxygen goodies."
icon_state = "o2"
item_state = "firstaid-o2"
item_state_slots = list(slot_r_hand_str = "firstaid-o2", slot_l_hand_str = "firstaid-o2")
New()
..()
@@ -97,7 +97,7 @@
name = "advanced first-aid kit"
desc = "Contains advanced medical treatments."
icon_state = "advfirstaid"
item_state = "firstaid-advanced"
item_state_slots = list(slot_r_hand_str = "firstaid-advanced", slot_l_hand_str = "firstaid-advanced")
/obj/item/weapon/storage/firstaid/adv/New()
..()
@@ -115,7 +115,7 @@
name = "combat medical kit"
desc = "Contains advanced medical treatments."
icon_state = "bezerk"
item_state = "firstaid-advanced"
item_state_slots = list(slot_r_hand_str = "firstaid-advanced", slot_l_hand_str = "firstaid-advanced")
/obj/item/weapon/storage/firstaid/combat/New()
..()
@@ -158,7 +158,7 @@
desc = "It's an airtight container for storing medication."
icon_state = "pill_canister"
icon = 'icons/obj/chemical.dmi'
item_state = "contsolid"
item_state_slots = list(slot_r_hand_str = "contsolid", slot_l_hand_str = "contsolid")
w_class = 2.0
can_hold = list(/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/dice,/obj/item/weapon/paper)
allow_quick_gather = 1

View File

@@ -7,7 +7,7 @@
name = "laundry basket"
icon = 'icons/obj/janitor.dmi'
icon_state = "laundry-empty"
item_state = "laundry"
item_state_slots = list(slot_r_hand_str = "laundry", slot_l_hand_str = "laundry")
desc = "The peak of thousands of years of laundry evolution."
w_class = 5

View File

@@ -4,7 +4,7 @@
name = "lockbox"
desc = "A locked box."
icon_state = "lockbox+l"
item_state = "syringe_kit"
item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit")
w_class = 4
max_w_class = 3
max_storage_space = 14 //The sum of the w_classes of all the items in this storage item.

View File

@@ -144,7 +144,7 @@
name = "secure briefcase"
icon = 'icons/obj/storage.dmi'
icon_state = "secure"
item_state = "sec-case"
item_state_slots = list(slot_r_hand_str = "case", slot_l_hand_str = "case")
desc = "A large briefcase with a digital locking system."
force = 8.0
throw_speed = 1

View File

@@ -8,6 +8,10 @@
/obj/item/weapon/storage
name = "storage"
icon = 'icons/obj/storage.dmi'
item_icons = list(
slot_l_hand_str = 'icons/mob/items/lefthand_storage.dmi',
slot_r_hand_str = 'icons/mob/items/righthand_storage.dmi',
)
w_class = 3
show_messages = 1
@@ -348,7 +352,7 @@
if(usr)
usr.remove_from_mob(W)
usr.update_icons() //update our overlays
W.loc = src
W.forceMove(src)
W.on_enter_storage(src)
if(usr)
if (usr.client && usr.s_active != src)
@@ -391,9 +395,9 @@
W.layer = 20
else
W.layer = initial(W.layer)
W.loc = new_location
W.forceMove(new_location)
else
W.loc = get_turf(src)
W.forceMove(get_turf(src))
if(usr)
src.orient2hud(usr)
@@ -437,7 +441,7 @@
user << "<span class='warning'>The tray won't fit in [src].</span>"
return
else
W.loc = user.loc
W.forceMove(get_turf(user))
if ((user.client && user.s_active != src))
user.client.screen -= W
W.dropped(user)

View File

@@ -3,7 +3,7 @@
desc = "Danger. Very robust."
icon = 'icons/obj/storage.dmi'
icon_state = "red"
item_state = "toolbox_red"
item_state_slots = list(slot_r_hand_str = "toolbox_red", slot_l_hand_str = "toolbox_red")
flags = CONDUCT
force = 5
throwforce = 10
@@ -18,7 +18,7 @@
/obj/item/weapon/storage/toolbox/emergency
name = "emergency toolbox"
icon_state = "red"
item_state = "toolbox_red"
item_state_slots = list(slot_r_hand_str = "toolbox_red", slot_l_hand_str = "toolbox_red")
/obj/item/weapon/storage/toolbox/emergency/New()
..()
@@ -33,7 +33,7 @@
/obj/item/weapon/storage/toolbox/mechanical
name = "mechanical toolbox"
icon_state = "blue"
item_state = "toolbox_blue"
item_state_slots = list(slot_r_hand_str = "toolbox_blue", slot_l_hand_str = "toolbox_blue")
/obj/item/weapon/storage/toolbox/mechanical/New()
..()
@@ -47,7 +47,7 @@
/obj/item/weapon/storage/toolbox/electrical
name = "electrical toolbox"
icon_state = "yellow"
item_state = "toolbox_yellow"
item_state_slots = list(slot_r_hand_str = "toolbox_yellow", slot_l_hand_str = "toolbox_yellow")
/obj/item/weapon/storage/toolbox/electrical/New()
..()
@@ -65,7 +65,7 @@
/obj/item/weapon/storage/toolbox/syndicate
name = "black and red toolbox"
icon_state = "syndicate"
item_state = "toolbox_syndi"
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 = 7.0
@@ -83,7 +83,7 @@
max_storage_space = 8 //slightly smaller than a toolbox
name = "rainbow lunchbox"
icon_state = "lunchbox_rainbow"
item_state = "toolbox_pink"
item_state_slots = list(slot_r_hand_str = "toolbox_pink", slot_l_hand_str = "toolbox_pink")
desc = "A little lunchbox. This one is the colors of the rainbow!"
w_class = 3
max_w_class = 2
@@ -111,7 +111,7 @@
/obj/item/weapon/storage/toolbox/lunchbox/heart
name = "heart lunchbox"
icon_state = "lunchbox_lovelyhearts"
item_state = "toolbox_pink"
item_state_slots = list(slot_r_hand_str = "toolbox_pink", slot_l_hand_str = "toolbox_pink")
desc = "A little lunchbox. This one has cute little hearts on it!"
/obj/item/weapon/storage/toolbox/lunchbox/heart/filled
@@ -120,7 +120,7 @@
/obj/item/weapon/storage/toolbox/lunchbox/cat
name = "cat lunchbox"
icon_state = "lunchbox_sciencecatshow"
item_state = "toolbox_green"
item_state_slots = list(slot_r_hand_str = "toolbox_green", slot_l_hand_str = "toolbox_green")
desc = "A little lunchbox. This one has a cute little science cat from a popular show on it!"
/obj/item/weapon/storage/toolbox/lunchbox/cat/filled
@@ -129,7 +129,7 @@
/obj/item/weapon/storage/toolbox/lunchbox/nt
name = "Nanotrasen brand lunchbox"
icon_state = "lunchbox_nanotrasen"
item_state = "toolbox_blue"
item_state_slots = list(slot_r_hand_str = "toolbox_blue", slot_l_hand_str = "toolbox_blue")
desc = "A little lunchbox. This one is branded with the Nanotrasen logo!"
/obj/item/weapon/storage/toolbox/lunchbox/nt/filled
@@ -138,7 +138,7 @@
/obj/item/weapon/storage/toolbox/lunchbox/mars
name = "\improper Mojave university lunchbox"
icon_state = "lunchbox_marsuniversity"
item_state = "toolbox_red"
item_state_slots = list(slot_r_hand_str = "toolbox_red", slot_l_hand_str = "toolbox_red")
desc = "A little lunchbox. This one is branded with the Mojave university logo!"
/obj/item/weapon/storage/toolbox/lunchbox/mars/filled
@@ -147,7 +147,7 @@
/obj/item/weapon/storage/toolbox/lunchbox/cti
name = "\improper CTI lunchbox"
icon_state = "lunchbox_cti"
item_state = "toolbox_blue"
item_state_slots = list(slot_r_hand_str = "toolbox_blue", slot_l_hand_str = "toolbox_blue")
desc = "A little lunchbox. This one is branded with the CTI logo!"
/obj/item/weapon/storage/toolbox/lunchbox/cti/filled
@@ -156,7 +156,7 @@
/obj/item/weapon/storage/toolbox/lunchbox/nymph
name = "\improper Diona nymph lunchbox"
icon_state = "lunchbox_dionanymph"
item_state = "toolbox_yellow"
item_state_slots = list(slot_r_hand_str = "toolbox_yellow", slot_l_hand_str = "toolbox_yellow")
desc = "A little lunchbox. This one is an adorable Diona nymph on the side!"
/obj/item/weapon/storage/toolbox/lunchbox/nymph/filled
@@ -165,7 +165,7 @@
/obj/item/weapon/storage/toolbox/lunchbox/syndicate
name = "black and red lunchbox"
icon_state = "lunchbox_syndie"
item_state = "toolbox_syndi"
item_state_slots = list(slot_r_hand_str = "toolbox_syndi", slot_l_hand_str = "toolbox_syndi")
desc = "A little lunchbox. This one is a sleek black and red, made of a durable steel!"
/obj/item/weapon/storage/toolbox/lunchbox/syndicate/filled

View File

@@ -265,4 +265,19 @@
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
return
/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)

View File

@@ -35,13 +35,14 @@
return
/obj/item/weapon/melee/baton/proc/deductcharge(var/chrgdeductamt)
if(bcell)
if(bcell.checked_use(chrgdeductamt))
return 1
else
status = 0
update_icon()
return 0
if(status == 1) //Only deducts charge when it's on
if(bcell)
if(bcell.checked_use(chrgdeductamt))
return 1
else
status = 0
update_icon()
return 0
return null
/obj/item/weapon/melee/baton/update_icon()
@@ -109,6 +110,7 @@
user.Weaken(30)
deductcharge(hitcost)
return
deductcharge(hitcost)
return ..()
/obj/item/weapon/melee/baton/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone)
@@ -144,8 +146,6 @@
target.stun_effect_act(stun, agony, hit_zone, src)
msg_admin_attack("[key_name(user)] stunned [key_name(target)] with the [src].")
deductcharge(hitcost)
if(ishuman(target))
var/mob/living/carbon/human/H = target
H.forcesay(hit_appends)

View File

@@ -2,9 +2,10 @@
* Contains:
* Sword
* Classic Baton
* Telescopic Baton
*/
/*
/*
* Classic Baton
*/
/obj/item/weapon/melee/classic_baton
@@ -34,7 +35,6 @@
desc = "A compact yet rebalanced personal defense weapon. Can be concealed when folded."
icon = 'icons/obj/weapons.dmi'
icon_state = "telebaton0"
item_state = "telebaton0"
slot_flags = SLOT_BELT
w_class = 2
force = 3
@@ -48,7 +48,6 @@
"<span class='warning'>You extend the baton.</span>",\
"You hear an ominous click.")
icon_state = "telebaton1"
item_state = "telebaton1"
w_class = 3
force = 15//quite robust
attack_verb = list("smacked", "struck", "slapped")
@@ -57,7 +56,6 @@
"<span class='notice'>You collapse the baton.</span>",\
"You hear a click.")
icon_state = "telebaton0"
item_state = "telebaton0"
w_class = 2
force = 3//not so robust now
attack_verb = list("hit", "punched")

View File

@@ -8,7 +8,7 @@
/obj/item/weapon/syndie/c4explosive
icon_state = "c-4small_0"
item_state = "c-4small"
item_state = "radio"
name = "normal-sized package"
desc = "A small wrapped package."
w_class = 3
@@ -18,67 +18,75 @@
/obj/item/weapon/syndie/c4explosive/heavy
icon_state = "c-4large_0"
item_state = "c-4large"
item_state = "radio"
desc = "A mysterious package, it's quite heavy."
power = 2
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
/obj/item/weapon/syndie/c4explosive/New()
var/K = rand(1,2000)
K = md5(num2text(K)+name)
K = copytext(K,1,7)
src.desc += "\n You see [K] engraved on \the [src]."
var/obj/item/weapon/syndie/c4detonator/detonator = new(src.loc)
detonator.desc += "\n You see [K] engraved on the lighter."
desc += "\n You see [K] engraved on \the [src]."
var/obj/item/weapon/flame/lighter/zippo/c4detonator/detonator = new(src.loc)
detonator.desc += " You see [K] engraved on the lighter."
detonator.bomb = src
/obj/item/weapon/syndie/c4explosive/proc/detonate()
icon_state = "c-4[size]_1"
spawn(50)
explosion(get_turf(src), power, power*2, power*3, power*4, power*4)
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)
var/obj/machinery/door/airlock/D = locate() in T
if(D.density)
D.open()
if(istype(T,/turf/simulated/wall))
T.dismantle_wall(1)
qdel(src)
explosion(get_turf(src), power, power*2, power*3, power*4, power*5)
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)
var/obj/machinery/door/airlock/D = locate() in T
if(D.density)
D.open()
if(istype(T,/turf/simulated/wall))
T.dismantle_wall(1)
qdel(src)
/*Detonator, disguised as a lighter*/
/*Click it when closed to open, when open to bring up a prompt asking you if you want to close it or press the button.*/
/obj/item/weapon/syndie/c4detonator
icon_state = "c-4detonator_0"
item_state = "c-4detonator"
name = "\improper Zippo lighter" /*Sneaky, thanks Dreyfus.*/
desc = "The zippo."
w_class = 1
/obj/item/weapon/flame/lighter/zippo/c4detonator
var/detonator_mode = 0
var/obj/item/weapon/syndie/c4explosive/bomb
var/pr_open = 0 /*Is the "What do you want to do?" prompt open?*/
/obj/item/weapon/syndie/c4detonator/attack_self(mob/user as mob)
switch(src.icon_state)
if("c-4detonator_0")
src.icon_state = "c-4detonator_1"
user << "You flick open the lighter."
/obj/item/weapon/flame/lighter/zippo/c4detonator/attack_self(mob/user as mob)
if(!detonator_mode)
..()
if("c-4detonator_1")
if(!pr_open)
pr_open = 1
switch(alert(user, "What would you like to do?", "Lighter", "Press the button.", "Close the lighter."))
if("Press the button.")
user << "<span class='warning'>You press the button.</span>"
flick("c-4detonator_click", src)
if(src.bomb)
src.bomb.detonate()
log_admin("[key_name(user)] has triggered [src.bomb] with [src].")
message_admins("<span class='danger'>[key_name_admin(user)] has triggered [src.bomb] with [src].</span>")
else if(!lit)
base_state = icon_state
lit = 1
icon_state = "[base_state]1"
//item_state = "[base_state]on"
user.visible_message("<span class='rose'>Without even breaking stride, \the [user] flips open \the [src] in one smooth movement.</span>")
if("Close the lighter.")
src.icon_state = "c-4detonator_0"
user << "You close the lighter."
pr_open = 0
else if(lit && detonator_mode)
switch(alert(user, "What would you like to do?", "Lighter", "Press the button.", "Close the lighter."))
if("Press the button.")
user << "<span class='warning'>You press the button.</span>"
icon_state = "[base_state]click"
if(src.bomb)
src.bomb.detonate()
log_admin("[key_name(user)] has triggered [src.bomb] with [src].")
message_admins("<span class='danger'>[key_name_admin(user)] has triggered [src.bomb] with [src].</span>")
if("Close the lighter.")
lit = 0
icon_state = "[base_state]"
//item_state = "[base_state]"
user.visible_message("<span class='rose'>You hear a quiet click, as \the [user] shuts off \the [src] without even looking at what they're doing.</span>")
/obj/item/weapon/flame/lighter/zippo/c4detonator/attackby(obj/item/weapon/W, mob/user as mob)
if(istype(W, /obj/item/weapon/screwdriver))
detonator_mode = !detonator_mode
user << "<span class='notice'>You unscrew the top panel of \the [src] revealing a button.</span>"

View File

@@ -6,7 +6,11 @@
icon_state = "jetpack"
gauge_icon = null
w_class = 4.0
item_state = "jetpack"
item_icons = list(
slot_l_hand_str = 'icons/mob/items/lefthand_storage.dmi',
slot_r_hand_str = 'icons/mob/items/righthand_storage.dmi',
)
item_state_slots = list(slot_r_hand_str = "jetpack", slot_l_hand_str = "jetpack")
distribute_pressure = ONE_ATMOSPHERE*O2STANDARD
var/datum/effect/effect/system/ion_trail_follow/ion_trail
var/on = 0.0
@@ -16,8 +20,8 @@
/obj/item/weapon/tank/jetpack/New()
..()
src.ion_trail = new /datum/effect/effect/system/ion_trail_follow()
src.ion_trail.set_up(src)
ion_trail = new /datum/effect/effect/system/ion_trail_follow()
ion_trail.set_up(src)
/obj/item/weapon/tank/jetpack/Destroy()
qdel(ion_trail)
@@ -32,7 +36,7 @@
/obj/item/weapon/tank/jetpack/verb/toggle_rockets()
set name = "Toggle Jetpack Stabilization"
set category = "Object"
src.stabilization_on = !( src.stabilization_on )
stabilization_on = !( stabilization_on )
usr << "You toggle the stabilization [stabilization_on? "on":"off"]."
/obj/item/weapon/tank/jetpack/verb/toggle()
@@ -55,13 +59,13 @@
usr << "You toggle the thrusters [on? "on":"off"]."
/obj/item/weapon/tank/jetpack/proc/allow_thrust(num, mob/living/user as mob)
if(!(src.on))
if(!on)
return 0
if((num < 0.005 || src.air_contents.total_moles < num))
src.ion_trail.stop()
if((num < 0.005 || air_contents.total_moles < num))
ion_trail.stop()
return 0
var/datum/gas_mixture/G = src.air_contents.remove(num)
var/datum/gas_mixture/G = air_contents.remove(num)
var/allgases = G.gas["carbon_dioxide"] + G.gas["nitrogen"] + G.gas["oxygen"] + G.gas["phoron"]
if(allgases >= 0.005)
@@ -73,12 +77,11 @@
/obj/item/weapon/tank/jetpack/ui_action_click()
toggle()
/obj/item/weapon/tank/jetpack/void
name = "void jetpack (oxygen)"
desc = "It works well in a void."
icon_state = "jetpack-void"
item_state = "jetpack-void"
item_state_slots = list(slot_r_hand_str = "jetpack-void", slot_l_hand_str = "jetpack-void")
/obj/item/weapon/tank/jetpack/void/New()
..()
@@ -89,7 +92,7 @@
name = "jetpack (oxygen)"
desc = "A tank of compressed oxygen for use as propulsion in zero-gravity areas. Use with caution."
icon_state = "jetpack"
item_state = "jetpack"
item_state_slots = list(slot_r_hand_str = "jetpack", slot_l_hand_str = "jetpack")
/obj/item/weapon/tank/jetpack/oxygen/New()
..()
@@ -101,7 +104,7 @@
desc = "A tank of compressed carbon dioxide for use as propulsion in zero-gravity areas. Painted black to indicate that it should not be used as a source for internals."
distribute_pressure = 0
icon_state = "jetpack-black"
item_state = "jetpack-black"
item_state_slots = list(slot_r_hand_str = "jetpack-black", slot_l_hand_str = "jetpack-black")
/obj/item/weapon/tank/jetpack/carbondioxide/New()
..()

View File

@@ -16,19 +16,16 @@
icon_state = "oxygen"
distribute_pressure = ONE_ATMOSPHERE*O2STANDARD
New()
..()
air_contents.adjust_gas("oxygen", (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
return
examine(mob/user)
if(..(user, 0) && air_contents.gas["oxygen"] < 10)
user << text("<span class='warning'>The meter on \the [src] indicates you are almost out of oxygen!</span>")
//playsound(usr, 'sound/effects/alert.ogg', 50, 1)
/obj/item/weapon/tank/oxygen/yellow
desc = "A tank of oxygen, this one is yellow."
icon_state = "oxygen_f"
@@ -37,7 +34,6 @@
desc = "A tank of oxygen, this one is red."
icon_state = "oxygen_fr"
/*
* Anesthetic
*/
@@ -45,7 +41,6 @@
name = "anesthetic tank"
desc = "A tank with an N2O/O2 gas mix."
icon_state = "anesthetic"
item_state = "an_tank"
/obj/item/weapon/tank/anesthetic/New()
..()
@@ -64,7 +59,6 @@
desc = "Mixed anyone?"
icon_state = "oxygen"
examine(mob/user)
if(..(user, 0) && air_contents.gas["oxygen"] < 1 && loc==user)
user << "<span class='danger'>The meter on the [src.name] indicates you are almost out of air!</span>"
@@ -76,8 +70,7 @@
src.air_contents.adjust_multi("oxygen", (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD, "nitrogen", (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD)
return
/*
* Phoron
*/
@@ -89,7 +82,6 @@
flags = CONDUCT
slot_flags = null //they have no straps!
/obj/item/weapon/tank/phoron/New()
..()
@@ -124,14 +116,12 @@
distribute_pressure = ONE_ATMOSPHERE*O2STANDARD
volume = 2 //Tiny. Real life equivalents only have 21 breaths of oxygen in them. They're EMERGENCY tanks anyway -errorage (dangercon 2011)
New()
..()
src.air_contents.adjust_gas("oxygen", (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
return
examine(mob/user)
if(..(user, 0) && air_contents.gas["oxygen"] < 0.2 && loc==user)
user << text("<span class='danger'>The meter on the [src.name] indicates you are almost out of air!</span>")
@@ -157,7 +147,6 @@
icon_state = "oxygen_fr"
distribute_pressure = ONE_ATMOSPHERE*O2STANDARD
/obj/item/weapon/tank/nitrogen/New()
..()
@@ -167,4 +156,4 @@
/obj/item/weapon/tank/nitrogen/examine(mob/user)
if(..(user, 0) && air_contents.gas["nitrogen"] < 10)
user << text("<span class='danger'>The meter on \the [src] indicates you are almost out of nitrogen!</span>")
//playsound(user, 'sound/effects/alert.ogg', 50, 1)
//playsound(user, 'sound/effects/alert.ogg', 50, 1)

View File

@@ -32,6 +32,7 @@
user.visible_message("<span class='danger'>\The [user] has taped up \the [H]'s eyes!</span>")
H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/blindfold/tape(H), slot_glasses)
H.update_inv_glasses()
else if(user.zone_sel.selecting == O_MOUTH || user.zone_sel.selecting == BP_HEAD)
if(!H.organs_by_name[BP_HEAD])
@@ -58,6 +59,7 @@
user.visible_message("<span class='danger'>\The [user] has taped up \the [H]'s mouth!</span>")
H.equip_to_slot_or_del(new /obj/item/clothing/mask/muzzle/tape(H), slot_wear_mask)
H.update_inv_wear_mask()
else if(user.zone_sel.selecting == "r_hand" || user.zone_sel.selecting == "l_hand")
var/obj/item/weapon/handcuffs/cable/tape/T = new(user)

View File

@@ -413,6 +413,7 @@
slot_flags = SLOT_BELT
force = 5.0
throwforce = 7.0
pry = 1
item_state = "crowbar"
w_class = 2.0
origin_tech = list(TECH_ENGINEERING = 1)

View File

@@ -1,4 +1,3 @@
/obj/item/weapon/nullrod
name = "null rod"
desc = "A rod of pure obsidian, its very presence disrupts and dampens the powers of paranormal phenomenae."

View File

@@ -7,6 +7,7 @@
var/throwforce = 1
var/sharp = 0 // whether this object cuts
var/edge = 0 // whether this object is more likely to dismember
var/pry = 0 //Used in attackby() to open doors
var/in_use = 0 // If we have a user using us, this will be set on. We will check if the user has stopped using us, and thus stop updating and LAGGING EVERYTHING!
var/damtype = "brute"
var/armor_penetration = 0
@@ -119,9 +120,6 @@
/obj/proc/interact(mob/user)
return
/obj/proc/update_icon()
return
/mob/proc/unset_machine()
src.machine = null

View File

@@ -42,12 +42,14 @@
icon = 'icons/obj/items.dmi'
icon_state = "welder"
item_to_spawn()
return pick(/obj/item/weapon/screwdriver,\
/obj/item/weapon/wirecutters,\
/obj/item/weapon/weldingtool,\
/obj/item/weapon/crowbar,\
/obj/item/weapon/wrench,\
/obj/item/device/flashlight)
return pick(/obj/item/weapon/screwdriver,
/obj/item/weapon/wirecutters,
/obj/item/weapon/weldingtool,
/obj/item/weapon/weldingtool/largetank,
/obj/item/weapon/crowbar,
/obj/item/weapon/wrench,
/obj/item/device/flashlight,
/obj/item/device/multitool)
/obj/random/technology_scanner
@@ -56,8 +58,8 @@
icon = 'icons/obj/device.dmi'
icon_state = "atmos"
item_to_spawn()
return pick(prob(5);/obj/item/device/t_scanner,\
prob(2);/obj/item/device/radio,\
return pick(prob(5);/obj/item/device/t_scanner,
prob(2);/obj/item/device/radio,
prob(5);/obj/item/device/analyzer)
@@ -67,10 +69,9 @@
icon = 'icons/obj/power.dmi'
icon_state = "cell"
item_to_spawn()
return pick(prob(10);/obj/item/weapon/cell/crap,\
prob(40);/obj/item/weapon/cell,\
prob(40);/obj/item/weapon/cell/high,\
prob(9);/obj/item/weapon/cell/super,\
return pick(prob(50);/obj/item/weapon/cell,
prob(40);/obj/item/weapon/cell/high,
prob(9);/obj/item/weapon/cell/super,
prob(1);/obj/item/weapon/cell/hyper)
@@ -80,9 +81,10 @@
icon = 'icons/obj/assemblies/new_assemblies.dmi'
icon_state = "signaller"
item_to_spawn()
return pick(/obj/item/device/assembly/igniter,\
/obj/item/device/assembly/prox_sensor,\
/obj/item/device/assembly/signaler,\
return pick(/obj/item/device/assembly/igniter,
/obj/item/device/assembly/prox_sensor,
/obj/item/device/assembly/signaler,
/obj/item/device/assembly/timer,
/obj/item/device/multitool)
@@ -92,9 +94,10 @@
icon = 'icons/obj/storage.dmi'
icon_state = "red"
item_to_spawn()
return pick(prob(3);/obj/item/weapon/storage/toolbox/mechanical,\
prob(2);/obj/item/weapon/storage/toolbox/electrical,\
prob(1);/obj/item/weapon/storage/toolbox/emergency)
return pick(prob(6);/obj/item/weapon/storage/toolbox/mechanical,
prob(6);/obj/item/weapon/storage/toolbox/electrical,
prob(2);/obj/item/weapon/storage/toolbox/emergency,
prob(1);/obj/item/weapon/storage/toolbox/syndicate)
/obj/random/tech_supply
@@ -102,41 +105,53 @@
desc = "This is a random piece of technology supplies."
icon = 'icons/obj/power.dmi'
icon_state = "cell"
spawn_nothing_percentage = 50
spawn_nothing_percentage = 25
item_to_spawn()
return pick(prob(3);/obj/random/powercell,\
prob(2);/obj/random/technology_scanner,\
prob(1);/obj/item/weapon/packageWrap,\
prob(2);/obj/random/bomb_supply,\
prob(1);/obj/item/weapon/extinguisher,\
prob(1);/obj/item/clothing/gloves/fyellow,\
prob(3);/obj/item/stack/cable_coil/random,\
prob(2);/obj/random/toolbox,\
prob(2);/obj/item/weapon/storage/belt/utility,\
prob(5);/obj/random/tool,\
prob(2);/obj/item/weapon/tape_roll)
return pick(prob(3);/obj/random/powercell,
prob(2);/obj/random/technology_scanner,
prob(1);/obj/item/weapon/packageWrap,
prob(2);/obj/random/bomb_supply,
prob(1);/obj/item/weapon/extinguisher,
prob(1);/obj/item/clothing/gloves/fyellow,
prob(3);/obj/item/stack/cable_coil/random,
prob(2);/obj/random/toolbox,
prob(2);/obj/item/weapon/storage/belt/utility,
prob(1);/obj/item/weapon/storage/belt/utility/full,
prob(5);/obj/random/tool,
prob(2);/obj/item/weapon/tape_roll,
prob(2);/obj/item/taperoll/engineering,
prob(1);/obj/item/taperoll/atmos,
prob(1);/obj/item/device/flashlight/maglight)
/obj/random/medical
name = "Random Medicine"
desc = "This is a random medical item."
icon = 'icons/obj/items.dmi'
icon_state = "brutepack"
spawn_nothing_percentage = 25
spawn_nothing_percentage = 12.5
item_to_spawn()
return pick(prob(4);/obj/item/stack/medical/bruise_pack,\
prob(4);/obj/item/stack/medical/ointment,\
prob(2);/obj/item/stack/medical/advanced/bruise_pack,\
prob(2);/obj/item/stack/medical/advanced/ointment,\
prob(1);/obj/item/stack/medical/splint,\
prob(2);/obj/item/bodybag,\
prob(1);/obj/item/bodybag/cryobag,\
prob(2);/obj/item/weapon/storage/pill_bottle/kelotane,\
prob(2);/obj/item/weapon/storage/pill_bottle/antitox,\
prob(2);/obj/item/weapon/storage/pill_bottle/tramadol,\
prob(2);/obj/item/weapon/reagent_containers/syringe/antitoxin,\
prob(1);/obj/item/weapon/reagent_containers/syringe/antiviral,\
prob(2);/obj/item/weapon/reagent_containers/syringe/inaprovaline,\
prob(1);/obj/item/stack/nanopaste)
return pick(prob(8);/obj/item/stack/medical/bruise_pack,
prob(8);/obj/item/stack/medical/ointment,
prob(4);/obj/item/stack/medical/advanced/bruise_pack,
prob(4);/obj/item/stack/medical/advanced/ointment,
prob(2);/obj/item/stack/medical/splint,
prob(4);/obj/item/bodybag,
prob(2);/obj/item/bodybag/cryobag,
prob(4);/obj/item/weapon/storage/pill_bottle/kelotane,
prob(4);/obj/item/weapon/storage/pill_bottle/dylovene,
prob(4);/obj/item/weapon/storage/pill_bottle/tramadol,
prob(1);/obj/item/weapon/storage/pill_bottle/spaceacillin,
prob(1);/obj/item/weapon/storage/pill_bottle/tramadol,
prob(0.2);/obj/item/weapon/storage/pill_bottle/dermaline,
prob(0.2);/obj/item/weapon/storage/pill_bottle/dexalin_plus,
prob(0.2);/obj/item/weapon/storage/pill_bottle/bicaridine,
prob(4);/obj/item/weapon/reagent_containers/syringe/antitoxin,
prob(2);/obj/item/weapon/reagent_containers/syringe/antiviral,
prob(4);/obj/item/weapon/reagent_containers/syringe/inaprovaline,
prob(4);/obj/item/weapon/reagent_containers/hypospray/autoinjector,
prob(0.1);/obj/item/weapon/reagent_containers/hypospray,
prob(1);/obj/item/device/healthanalyzer,
prob(2);/obj/item/stack/nanopaste)
/obj/random/firstaid
@@ -145,10 +160,10 @@
icon = 'icons/obj/storage.dmi'
icon_state = "firstaid"
item_to_spawn()
return pick(prob(3);/obj/item/weapon/storage/firstaid/regular,\
prob(2);/obj/item/weapon/storage/firstaid/toxin,\
prob(2);/obj/item/weapon/storage/firstaid/o2,\
prob(1);/obj/item/weapon/storage/firstaid/adv,\
return pick(prob(3);/obj/item/weapon/storage/firstaid/regular,
prob(2);/obj/item/weapon/storage/firstaid/toxin,
prob(2);/obj/item/weapon/storage/firstaid/o2,
prob(1);/obj/item/weapon/storage/firstaid/adv,
prob(2);/obj/item/weapon/storage/firstaid/fire)
@@ -159,17 +174,22 @@
icon_state = "purplecomb"
spawn_nothing_percentage = 50
item_to_spawn()
return pick(prob(3);/obj/item/weapon/storage/pill_bottle/tramadol,\
prob(4);/obj/item/weapon/haircomb,\
prob(2);/obj/item/weapon/storage/pill_bottle/happy,\
prob(2);/obj/item/weapon/storage/pill_bottle/zoom,\
prob(5);/obj/item/weapon/contraband/poster,\
prob(2);/obj/item/weapon/material/butterfly,\
prob(3);/obj/item/weapon/material/butterflyblade,\
prob(3);/obj/item/weapon/material/butterflyhandle,\
prob(3);/obj/item/weapon/material/wirerod,\
prob(1);/obj/item/weapon/material/butterfly/switchblade,\
prob(1);/obj/item/weapon/reagent_containers/syringe/drugs)
return pick(prob(6);/obj/item/weapon/storage/pill_bottle/tramadol,
prob(8);/obj/item/weapon/haircomb,
prob(4);/obj/item/weapon/storage/pill_bottle/happy,
prob(4);/obj/item/weapon/storage/pill_bottle/zoom,
prob(10);/obj/item/weapon/contraband/poster,
prob(4);/obj/item/weapon/material/butterfly,
prob(6);/obj/item/weapon/material/butterflyblade,
prob(6);/obj/item/weapon/material/butterflyhandle,
prob(6);/obj/item/weapon/material/wirerod,
prob(2);/obj/item/weapon/material/butterfly/switchblade,
prob(2);/obj/item/weapon/material/knuckledusters,
prob(1);/obj/item/weapon/material/hatchet/tacknife,
prob(0.5);/obj/item/weapon/beartrap,
prob(1);/obj/item/weapon/handcuffs,
prob(1);/obj/item/weapon/legcuffs,
prob(2);/obj/item/weapon/reagent_containers/syringe/drugs)
/obj/random/energy
@@ -178,9 +198,8 @@
icon = 'icons/obj/gun.dmi'
icon_state = "energykill100"
item_to_spawn()
return pick(prob(2);/obj/item/weapon/gun/energy/laser,\
prob(2);/obj/item/weapon/gun/energy/gun,\
prob(1);/obj/item/weapon/gun/energy/stunrevolver)
return pick(prob(2);/obj/item/weapon/gun/energy/laser,
prob(2);/obj/item/weapon/gun/energy/gun)
/obj/random/projectile
name = "Random Projectile Weapon"
@@ -188,8 +207,8 @@
icon = 'icons/obj/gun.dmi'
icon_state = "revolver"
item_to_spawn()
return pick(prob(3);/obj/item/weapon/gun/projectile/shotgun/pump,\
prob(2);/obj/item/weapon/gun/projectile/automatic/wt550,\
return pick(prob(3);/obj/item/weapon/gun/projectile/shotgun/pump,
prob(2);/obj/item/weapon/gun/projectile/automatic/wt550,
prob(1);/obj/item/weapon/gun/projectile/shotgun/pump/combat)
/obj/random/handgun
@@ -198,7 +217,7 @@
icon = 'icons/obj/gun.dmi'
icon_state = "secgundark"
item_to_spawn()
return pick(prob(3);/obj/item/weapon/gun/projectile/sec,\
return pick(prob(3);/obj/item/weapon/gun/projectile/sec,
prob(1);/obj/item/weapon/gun/projectile/sec/wood)
@@ -208,14 +227,14 @@
icon = 'icons/obj/ammo.dmi'
icon_state = "45-10"
item_to_spawn()
return pick(prob(6);/obj/item/weapon/storage/box/beanbags,\
prob(2);/obj/item/weapon/storage/box/shotgunammo,\
prob(4);/obj/item/weapon/storage/box/shotgunshells,\
prob(1);/obj/item/weapon/storage/box/stunshells,\
prob(2);/obj/item/ammo_magazine/c45m,\
prob(4);/obj/item/ammo_magazine/c45m/rubber,\
prob(4);/obj/item/ammo_magazine/c45m/flash,\
prob(2);/obj/item/ammo_magazine/mc9mmt,\
return pick(prob(6);/obj/item/weapon/storage/box/beanbags,
prob(2);/obj/item/weapon/storage/box/shotgunammo,
prob(4);/obj/item/weapon/storage/box/shotgunshells,
prob(1);/obj/item/weapon/storage/box/stunshells,
prob(2);/obj/item/ammo_magazine/c45m,
prob(4);/obj/item/ammo_magazine/c45m/rubber,
prob(4);/obj/item/ammo_magazine/c45m/flash,
prob(2);/obj/item/ammo_magazine/mc9mmt,
prob(6);/obj/item/ammo_magazine/mc9mmt/rubber)
@@ -225,43 +244,43 @@
icon = 'icons/obj/toy.dmi'
icon_state = "assistant"
item_to_spawn()
return pick(/obj/item/toy/figure/cmo,\
/obj/item/toy/figure/assistant,\
/obj/item/toy/figure/atmos,\
/obj/item/toy/figure/bartender,\
/obj/item/toy/figure/borg,\
/obj/item/toy/figure/gardener,\
/obj/item/toy/figure/captain,\
/obj/item/toy/figure/cargotech,\
/obj/item/toy/figure/ce,\
/obj/item/toy/figure/chaplain,\
/obj/item/toy/figure/chef,\
/obj/item/toy/figure/chemist,\
/obj/item/toy/figure/clown,\
/obj/item/toy/figure/corgi,\
/obj/item/toy/figure/detective,\
/obj/item/toy/figure/dsquad,\
/obj/item/toy/figure/engineer,\
/obj/item/toy/figure/geneticist,\
/obj/item/toy/figure/hop,\
/obj/item/toy/figure/hos,\
/obj/item/toy/figure/qm,\
/obj/item/toy/figure/janitor,\
/obj/item/toy/figure/agent,\
/obj/item/toy/figure/librarian,\
/obj/item/toy/figure/md,\
/obj/item/toy/figure/mime,\
/obj/item/toy/figure/miner,\
/obj/item/toy/figure/ninja,\
/obj/item/toy/figure/wizard,\
/obj/item/toy/figure/rd,\
/obj/item/toy/figure/roboticist,\
/obj/item/toy/figure/scientist,\
/obj/item/toy/figure/syndie,\
/obj/item/toy/figure/secofficer,\
/obj/item/toy/figure/warden,\
/obj/item/toy/figure/psychologist,\
/obj/item/toy/figure/paramedic,\
return pick(/obj/item/toy/figure/cmo,
/obj/item/toy/figure/assistant,
/obj/item/toy/figure/atmos,
/obj/item/toy/figure/bartender,
/obj/item/toy/figure/borg,
/obj/item/toy/figure/gardener,
/obj/item/toy/figure/captain,
/obj/item/toy/figure/cargotech,
/obj/item/toy/figure/ce,
/obj/item/toy/figure/chaplain,
/obj/item/toy/figure/chef,
/obj/item/toy/figure/chemist,
/obj/item/toy/figure/clown,
/obj/item/toy/figure/corgi,
/obj/item/toy/figure/detective,
/obj/item/toy/figure/dsquad,
/obj/item/toy/figure/engineer,
/obj/item/toy/figure/geneticist,
/obj/item/toy/figure/hop,
/obj/item/toy/figure/hos,
/obj/item/toy/figure/qm,
/obj/item/toy/figure/janitor,
/obj/item/toy/figure/agent,
/obj/item/toy/figure/librarian,
/obj/item/toy/figure/md,
/obj/item/toy/figure/mime,
/obj/item/toy/figure/miner,
/obj/item/toy/figure/ninja,
/obj/item/toy/figure/wizard,
/obj/item/toy/figure/rd,
/obj/item/toy/figure/roboticist,
/obj/item/toy/figure/scientist,
/obj/item/toy/figure/syndie,
/obj/item/toy/figure/secofficer,
/obj/item/toy/figure/warden,
/obj/item/toy/figure/psychologist,
/obj/item/toy/figure/paramedic,
/obj/item/toy/figure/ert)
@@ -271,12 +290,12 @@
icon = 'icons/obj/toy.dmi'
icon_state = "nymphplushie"
item_to_spawn()
return pick(/obj/structure/plushie/ian,\
/obj/structure/plushie/drone,\
/obj/structure/plushie/carp,\
/obj/structure/plushie/beepsky,\
/obj/item/toy/plushie/nymph,\
/obj/item/toy/plushie/mouse,\
/obj/item/toy/plushie/kitten,\
return pick(/obj/structure/plushie/ian,
/obj/structure/plushie/drone,
/obj/structure/plushie/carp,
/obj/structure/plushie/beepsky,
/obj/item/toy/plushie/nymph,
/obj/item/toy/plushie/mouse,
/obj/item/toy/plushie/kitten,
/obj/item/toy/plushie/lizard)

View File

@@ -9,7 +9,6 @@ LINEN BINS
desc = "A surprisingly soft linen bedsheet."
icon = 'icons/obj/items.dmi'
icon_state = "sheet"
item_state = "bedsheet"
slot_flags = SLOT_BACK
layer = 4.0
throwforce = 1
@@ -39,75 +38,59 @@ LINEN BINS
/obj/item/weapon/bedsheet/blue
icon_state = "sheetblue"
item_state = "sheetblue"
/obj/item/weapon/bedsheet/green
icon_state = "sheetgreen"
item_state = "sheetgreen"
/obj/item/weapon/bedsheet/orange
icon_state = "sheetorange"
item_state = "sheetorange"
/obj/item/weapon/bedsheet/purple
icon_state = "sheetpurple"
item_state = "sheetpurple"
/obj/item/weapon/bedsheet/rainbow
icon_state = "sheetrainbow"
item_state = "sheetrainbow"
/obj/item/weapon/bedsheet/red
icon_state = "sheetred"
item_state = "sheetred"
/obj/item/weapon/bedsheet/yellow
icon_state = "sheetyellow"
item_state = "sheetyellow"
/obj/item/weapon/bedsheet/mime
icon_state = "sheetmime"
item_state = "sheetmime"
/obj/item/weapon/bedsheet/clown
icon_state = "sheetclown"
item_state = "sheetclown"
item_state = "sheetrainbow"
/obj/item/weapon/bedsheet/captain
icon_state = "sheetcaptain"
item_state = "sheetcaptain"
/obj/item/weapon/bedsheet/rd
icon_state = "sheetrd"
item_state = "sheetrd"
/obj/item/weapon/bedsheet/medical
icon_state = "sheetmedical"
item_state = "sheetmedical"
/obj/item/weapon/bedsheet/hos
icon_state = "sheethos"
item_state = "sheethos"
/obj/item/weapon/bedsheet/hop
icon_state = "sheethop"
item_state = "sheethop"
/obj/item/weapon/bedsheet/ce
icon_state = "sheetce"
item_state = "sheetce"
/obj/item/weapon/bedsheet/brown
icon_state = "sheetbrown"
item_state = "sheetbrown"
/obj/item/weapon/bedsheet/ian
icon_state = "sheetian"
item_state = "bedsheet"
/obj/item/weapon/bedsheet/double
icon_state = "doublesheet"
item_state = "bedsheet"
item_state = "sheet"
/obj/item/weapon/bedsheet/bluedouble
icon_state = "doublesheetblue"
@@ -125,54 +108,53 @@ LINEN BINS
icon_state = "doublesheetpurple"
item_state = "sheetpurple"
/obj/item/weapon/bedsheet/doublerainbow //all the way across the sky.
/obj/item/weapon/bedsheet/rainbowdouble //all the way across the sky.
icon_state = "doublesheetrainbow"
item_state = "sheetrainbow"
/obj/item/weapon/bedsheet/doublered
/obj/item/weapon/bedsheet/reddouble
icon_state = "doublesheetred"
item_state = "sheetred"
/obj/item/weapon/bedsheet/doubleyellow
/obj/item/weapon/bedsheet/yellowdouble
icon_state = "doublesheetyellow"
item_state = "sheetyellow"
/obj/item/weapon/bedsheet/doublemime
/obj/item/weapon/bedsheet/mimedouble
icon_state = "doublesheetmime"
item_state = "sheetmime"
/obj/item/weapon/bedsheet/doubleclown
/obj/item/weapon/bedsheet/clowndouble
icon_state = "doublesheetclown"
item_state = "sheetclown"
item_state = "sheetrainbow"
/obj/item/weapon/bedsheet/doublecaptain
/obj/item/weapon/bedsheet/captaindouble
icon_state = "doublesheetcaptain"
item_state = "sheetcaptain"
/obj/item/weapon/bedsheet/doublerd
/obj/item/weapon/bedsheet/rddouble
icon_state = "doublesheetrd"
item_state = "sheetrd"
/obj/item/weapon/bedsheet/doublehos
/obj/item/weapon/bedsheet/hosdouble
icon_state = "doublesheethos"
item_state = "sheethos"
/obj/item/weapon/bedsheet/doublehop
/obj/item/weapon/bedsheet/hopdouble
icon_state = "doublesheethop"
item_state = "sheethop"
/obj/item/weapon/bedsheet/doublece
/obj/item/weapon/bedsheet/cedouble
icon_state = "doublesheetce"
item_state = "sheetce"
/obj/item/weapon/bedsheet/doublebrown
/obj/item/weapon/bedsheet/browndouble
icon_state = "doublesheetbrown"
item_state = "sheetbrown"
/obj/item/weapon/bedsheet/doubleian
/obj/item/weapon/bedsheet/iandouble
icon_state = "doublesheetian"
item_state = "bedsheet"
item_state = "sheetian"
/obj/structure/bedsheetbin
name = "linen bin"

View File

@@ -20,7 +20,7 @@
new /obj/item/clothing/accessory/storage/brown_vest(src)
new /obj/item/blueprints(src)
new /obj/item/clothing/under/rank/chief_engineer(src)
new /obj/item/clothing/under/rank/engineer/chief_engineer/skirt(src)
new /obj/item/clothing/under/rank/chief_engineer/skirt(src)
new /obj/item/clothing/head/hardhat/white(src)
new /obj/item/clothing/head/welding(src)
new /obj/item/clothing/gloves/yellow(src)

View File

@@ -192,7 +192,7 @@
new /obj/item/clothing/under/rank/medical/navyblue(src)
new /obj/item/clothing/head/surgery/navyblue(src)
new /obj/item/clothing/under/rank/chief_medical_officer(src)
new /obj/item/clothing/under/rank/medical/chief_medical_officer/skirt(src)
new /obj/item/clothing/under/rank/chief_medical_officer/skirt(src)
new /obj/item/clothing/suit/storage/toggle/labcoat/cmo(src)
new /obj/item/clothing/suit/storage/toggle/labcoat/cmoalt(src)
new /obj/item/weapon/cartridge/cmo(src)

View File

@@ -102,8 +102,8 @@
new /obj/item/clothing/suit/storage/vest/hos(src)
new /obj/item/clothing/under/rank/head_of_security/jensen(src)
new /obj/item/clothing/under/rank/head_of_security/corp(src)
new /obj/item/clothing/suit/armor/hos/jensen(src)
new /obj/item/clothing/suit/armor/hos(src)
new /obj/item/clothing/suit/storage/vest/hoscoat/jensen(src)
new /obj/item/clothing/suit/storage/vest/hoscoat(src)
new /obj/item/clothing/head/helmet/HoS/dermal(src)
new /obj/item/weapon/cartridge/hos(src)
new /obj/item/device/radio/headset/heads/hos(src)
@@ -114,6 +114,8 @@
new /obj/item/weapon/shield/riot/tele(src)
new /obj/item/weapon/storage/box/holobadge/hos(src)
new /obj/item/clothing/accessory/badge/holo/hos(src)
new /obj/item/weapon/reagent_containers/spray/pepper(src)
new /obj/item/weapon/crowbar/red(src)
new /obj/item/weapon/storage/box/flashbangs(src)
new /obj/item/weapon/storage/belt/security(src)
new /obj/item/device/flash(src)
@@ -150,8 +152,8 @@
new /obj/item/clothing/suit/storage/vest/warden(src)
new /obj/item/clothing/under/rank/warden(src)
new /obj/item/clothing/under/rank/warden/corp(src)
new /obj/item/clothing/suit/armor/vest/warden(src)
new /obj/item/clothing/suit/armor/vest/warden/alt(src)
new /obj/item/clothing/suit/storage/vest/wardencoat(src)
new /obj/item/clothing/suit/storage/vest/wardencoat/alt(src)
new /obj/item/clothing/head/helmet/warden(src)
new /obj/item/weapon/cartridge/security(src)
new /obj/item/device/radio/headset/headset_sec(src)

View File

@@ -246,9 +246,9 @@
new /obj/item/clothing/under/rank/atmospheric_technician(src)
new /obj/item/clothing/under/rank/atmospheric_technician(src)
new /obj/item/clothing/under/rank/atmospheric_technician(src)
new /obj/item/clothing/under/rank/engineer/atmospheric_technician/skirt(src)
new /obj/item/clothing/under/rank/engineer/atmospheric_technician/skirt(src)
new /obj/item/clothing/under/rank/engineer/atmospheric_technician/skirt(src)
new /obj/item/clothing/under/rank/atmospheric_technician/skirt(src)
new /obj/item/clothing/under/rank/atmospheric_technician/skirt(src)
new /obj/item/clothing/under/rank/atmospheric_technician/skirt(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/shoes/black(src)
@@ -396,8 +396,8 @@
..()
new /obj/item/clothing/under/rank/chemist(src)
new /obj/item/clothing/under/rank/chemist(src)
new /obj/item/clothing/under/rank/medical/chemist/skirt(src)
new /obj/item/clothing/under/rank/medical/chemist/skirt(src)
new /obj/item/clothing/under/rank/chemist/skirt(src)
new /obj/item/clothing/under/rank/chemist/skirt(src)
new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/suit/storage/toggle/labcoat/chemist(src)
@@ -418,8 +418,8 @@
..()
new /obj/item/clothing/under/rank/geneticist(src)
new /obj/item/clothing/under/rank/geneticist(src)
new /obj/item/clothing/under/rank/medical/geneticist/skirt(src)
new /obj/item/clothing/under/rank/medical/geneticist/skirt(src)
new /obj/item/clothing/under/rank/geneticist/skirt(src)
new /obj/item/clothing/under/rank/geneticist/skirt(src)
new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/suit/storage/toggle/labcoat/genetics(src)
@@ -440,8 +440,8 @@
..()
new /obj/item/clothing/under/rank/virologist(src)
new /obj/item/clothing/under/rank/virologist(src)
new /obj/item/clothing/under/rank/medical/virologist/skirt(src)
new /obj/item/clothing/under/rank/medical/virologist/skirt(src)
new /obj/item/clothing/under/rank/virologist/skirt(src)
new /obj/item/clothing/under/rank/virologist/skirt(src)
new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/suit/storage/toggle/labcoat/virologist(src)

View File

@@ -331,18 +331,34 @@
var/target_temp = T0C - 40
var/cooling_power = 40
return_air()
var/datum/gas_mixture/gas = (..())
if(!gas) return null
var/datum/gas_mixture/newgas = new/datum/gas_mixture()
newgas.copy_from(gas)
if(newgas.temperature <= target_temp) return
/obj/structure/closet/crate/freezer/return_air()
var/datum/gas_mixture/gas = (..())
if(!gas) return null
var/datum/gas_mixture/newgas = new/datum/gas_mixture()
newgas.copy_from(gas)
if(newgas.temperature <= target_temp) return
if((newgas.temperature - cooling_power) > target_temp)
newgas.temperature -= cooling_power
else
newgas.temperature = target_temp
return newgas
if((newgas.temperature - cooling_power) > target_temp)
newgas.temperature -= cooling_power
else
newgas.temperature = target_temp
return newgas
/obj/structure/closet/crate/freezer/Entered(var/atom/movable/AM)
if(istype(AM, /obj/item/organ))
var/obj/item/organ/O = AM
O.preserved = 1
for(var/obj/item/organ/organ in O)
organ.preserved = 1
..()
/obj/structure/closet/crate/freezer/Exited(var/atom/movable/AM)
if(istype(AM, /obj/item/organ))
var/obj/item/organ/O = AM
O.preserved = 0
for(var/obj/item/organ/organ in O)
organ.preserved = 0
..()
/obj/structure/closet/crate/freezer/rations //Fpr use in the escape shuttle
name = "emergency rations"

View File

@@ -7,7 +7,7 @@
w_class = 5
var/state = 0
var/base_icon_state = ""
var/base_name = "Airlock"
var/base_name = "airlock"
var/obj/item/weapon/airlock_electronics/electronics = null
var/airlock_type = "" //the type path of the airlock once completed
var/glass_type = "/glass"
@@ -19,91 +19,91 @@
/obj/structure/door_assembly/door_assembly_com
base_icon_state = "com"
base_name = "Command Airlock"
base_name = "Command airlock"
glass_type = "/glass_command"
airlock_type = "/command"
/obj/structure/door_assembly/door_assembly_sec
base_icon_state = "sec"
base_name = "Security Airlock"
base_name = "Security airlock"
glass_type = "/glass_security"
airlock_type = "/security"
/obj/structure/door_assembly/door_assembly_eng
base_icon_state = "eng"
base_name = "Engineering Airlock"
base_name = "Engineering airlock"
glass_type = "/glass_engineering"
airlock_type = "/engineering"
/obj/structure/door_assembly/door_assembly_eat
base_icon_state = "eat"
base_name = "Engineering Atmos Airlock"
base_name = "Engineering atmos airlock"
glass_type = "/glass_engineeringatmos"
airlock_type = "/engineering"
/obj/structure/door_assembly/door_assembly_min
base_icon_state = "min"
base_name = "Mining Airlock"
base_name = "Mining airlock"
glass_type = "/glass_mining"
airlock_type = "/mining"
/obj/structure/door_assembly/door_assembly_atmo
base_icon_state = "atmo"
base_name = "Atmospherics Airlock"
base_name = "Atmospherics airlock"
glass_type = "/glass_atmos"
airlock_type = "/atmos"
/obj/structure/door_assembly/door_assembly_research
base_icon_state = "res"
base_name = "Research Airlock"
base_name = "Research airlock"
glass_type = "/glass_research"
airlock_type = "/research"
/obj/structure/door_assembly/door_assembly_science
base_icon_state = "sci"
base_name = "Science Airlock"
base_name = "Science airlock"
glass_type = "/glass_science"
airlock_type = "/science"
/obj/structure/door_assembly/door_assembly_med
base_icon_state = "med"
base_name = "Medical Airlock"
base_name = "Medical airlock"
glass_type = "/glass_medical"
airlock_type = "/medical"
/obj/structure/door_assembly/door_assembly_mai
base_icon_state = "mai"
base_name = "Maintenance Airlock"
base_name = "Maintenance airlock"
airlock_type = "/maintenance"
glass = -1
/obj/structure/door_assembly/door_assembly_ext
base_icon_state = "ext"
base_name = "External Airlock"
base_name = "External airlock"
airlock_type = "/external"
glass = -1
/obj/structure/door_assembly/door_assembly_fre
base_icon_state = "fre"
base_name = "Freezer Airlock"
base_name = "Freezer airlock"
airlock_type = "/freezer"
glass = -1
/obj/structure/door_assembly/door_assembly_hatch
base_icon_state = "hatch"
base_name = "Airtight Hatch"
base_name = "airtight hatch"
airlock_type = "/hatch"
glass = -1
/obj/structure/door_assembly/door_assembly_mhatch
base_icon_state = "mhatch"
base_name = "Maintenance Hatch"
base_name = "maintenance hatch"
airlock_type = "/maintenance_hatch"
glass = -1
/obj/structure/door_assembly/door_assembly_highsecurity // Borrowing this until WJohnston makes sprites for the assembly
base_icon_state = "highsec"
base_name = "High Security Airlock"
base_name = "high security airlock"
airlock_type = "/highsecurity"
glass = -1
@@ -221,7 +221,6 @@
W.loc = src
user << "<span class='notice'>You installed the airlock electronics!</span>"
src.state = 2
src.name = "Near finished Airlock Assembly"
src.electronics = W
else if(istype(W, /obj/item/weapon/crowbar) && state == 2 )
@@ -238,7 +237,6 @@
if(!src) return
user << "<span class='notice'>You removed the airlock electronics!</span>"
src.state = 1
src.name = "Wired Airlock Assembly"
electronics.loc = src.loc
electronics = null
@@ -294,9 +292,9 @@
switch (state)
if(0)
if (anchored)
name = "Secured "
name = "secured "
if(1)
name = "Wired "
name = "wired "
if(2)
name = "Near Finished "
name += "[glass == 1 ? "Window " : ""][istext(glass) ? "[glass] Airlock" : base_name] Assembly"
name = "near finished "
name += "[glass == 1 ? "window " : ""][istext(glass) ? "[glass] airlock" : base_name] assembly ([created_name])"

View File

@@ -78,6 +78,11 @@
icon = 'icons/obj/plants.dmi'
icon_state = "plant-26"
/obj/structure/flora/pottedplant/xmas/New()
..()
icon_state = "plant-xmas"
//newbushes
/obj/structure/flora/ausbushes

View File

@@ -65,7 +65,7 @@
else if(!anchored)
playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1)
user << "<span class='notice'>Now securing the girder...</span>"
if(get_turf(user, 40))
if(do_after(user, 40,src))
user << "<span class='notice'>You secured the girder!</span>"
reset_girder()
@@ -126,7 +126,8 @@
return ..()
/obj/structure/girder/proc/construct_wall(obj/item/stack/material/S, mob/user)
if(S.get_amount() < 2)
var/amount_to_use = reinf_material ? 1 : 2
if(S.get_amount() < amount_to_use)
user << "<span class='notice'>There isn't enough material here to construct a wall.</span>"
return 0
@@ -143,7 +144,6 @@
user << "<span class='notice'>You begin adding the plating...</span>"
var/amount_to_use = reinf_material ? 1 : 2
if(!do_after(user,40) || !S.use(amount_to_use))
return 1 //once we've gotten this far don't call parent attackby()

View File

@@ -328,9 +328,6 @@
desc = "Rubber ducky you're so fine, you make bathtime lots of fuuun. Rubber ducky I'm awfully fooooond of yooooouuuu~" //thanks doohl
icon = 'icons/obj/watercloset.dmi'
icon_state = "rubberducky"
item_state = "rubberducky"
/obj/structure/sink
name = "sink"
@@ -388,7 +385,6 @@
for(var/mob/V in viewers(src, null))
V.show_message("<span class='notice'>[user] washes their hands using \the [src].</span>")
/obj/structure/sink/attackby(obj/item/O as obj, mob/user as mob)
if(busy)
user << "<span class='warning'>Someone's already washing here.</span>"
@@ -444,7 +440,6 @@
"<span class='notice'>[user] washes \a [I] using \the [src].</span>", \
"<span class='notice'>You wash \a [I] using \the [src].</span>")
/obj/structure/sink/kitchen
name = "kitchen sink"
icon_state = "sink_alt"

View File

@@ -19,12 +19,18 @@ obj/structure/windoor_assembly
w_class = 3
var/obj/item/weapon/airlock_electronics/electronics = null
var/created_name = null
//Vars to help with the icon's name
var/facing = "l" //Does the windoor open to the left or right?
var/secure = "" //Whether or not this creates a secure windoor
var/state = "01" //How far the door assembly has progressed in terms of sprites
obj/structure/windoor_assembly/secure
name = "secure windoor assembly"
secure = "secure_"
icon_state = "l_secure_windoor_assembly01"
obj/structure/windoor_assembly/New(Loc, start_dir=NORTH, constructed=0)
..()
if(constructed)
@@ -65,24 +71,31 @@ obj/structure/windoor_assembly/Destroy()
/obj/structure/windoor_assembly/attackby(obj/item/W as obj, mob/user as mob)
//I really should have spread this out across more states but thin little windoors are hard to sprite.
if(istype(W, /obj/item/weapon/pen))
var/t = sanitizeSafe(input(user, "Enter the name for the windoor.", src.name, src.created_name), MAX_NAME_LEN)
if(!t) return
if(!in_range(src, usr) && src.loc != usr) return
created_name = t
return
switch(state)
if("01")
if(istype(W, /obj/item/weapon/weldingtool) && !anchored )
var/obj/item/weapon/weldingtool/WT = W
if (WT.remove_fuel(0,user))
user.visible_message("[user] dissassembles the windoor assembly.", "You start to dissassemble the windoor assembly.")
user.visible_message("[user] disassembles the windoor assembly.", "You start to disassemble the windoor assembly.")
playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1)
if(do_after(user, 40))
if(!src || !WT.isOn()) return
user << "<span class='notice'>You dissasembled the windoor assembly!</span>"
new /obj/item/stack/material/glass/reinforced(get_turf(src), 5)
user << "<span class='notice'>You disassembled the windoor assembly!</span>"
if(secure)
PoolOrNew(/obj/item/stack/rods, list(get_turf(src), 4))
new /obj/item/stack/material/glass/reinforced(get_turf(src), 2)
else
new /obj/item/stack/material/glass(get_turf(src), 2)
qdel(src)
else
user << "<span class='notice'>You need more welding fuel to dissassemble the windoor assembly.</span>"
user << "<span class='notice'>You need more welding fuel to disassemble the windoor assembly.</span>"
return
//Wrenching an unsecure assembly anchors it in place. Step 4 complete
@@ -95,9 +108,9 @@ obj/structure/windoor_assembly/Destroy()
user << "<span class='notice'>You've secured the windoor assembly!</span>"
src.anchored = 1
if(src.secure)
src.name = "Secure Anchored Windoor Assembly"
src.name = "secure anchored windoor assembly"
else
src.name = "Anchored Windoor Assembly"
src.name = "anchored windoor assembly"
//Unwrenching an unsecure assembly un-anchors it. Step 4 undone
else if(istype(W, /obj/item/weapon/wrench) && anchored)
@@ -109,26 +122,9 @@ obj/structure/windoor_assembly/Destroy()
user << "<span class='notice'>You've unsecured the windoor assembly!</span>"
src.anchored = 0
if(src.secure)
src.name = "Secure Windoor Assembly"
src.name = "secure windoor assembly"
else
src.name = "Windoor Assembly"
//Adding plasteel makes the assembly a secure windoor assembly. Step 2 (optional) complete.
else if(istype(W, /obj/item/stack/rods) && !secure)
var/obj/item/stack/rods/R = W
if(R.get_amount() < 4)
user << "<span class='warning'>You need more rods to do this.</span>"
return
user << "<span class='notice'>You start to reinforce the windoor with rods.</span>"
if(do_after(user,40) && !secure)
if (R.use(4))
user << "<span class='notice'>You reinforce the windoor.</span>"
src.secure = "secure_"
if(src.anchored)
src.name = "Secure Anchored Windoor Assembly"
else
src.name = "Secure Windoor Assembly"
src.name = "windoor assembly"
//Adding cable to the assembly. Step 5 complete.
else if(istype(W, /obj/item/stack/cable_coil) && anchored)
@@ -140,9 +136,9 @@ obj/structure/windoor_assembly/Destroy()
user << "<span class='notice'>You wire the windoor!</span>"
src.state = "02"
if(src.secure)
src.name = "Secure Wired Windoor Assembly"
src.name = "secure wired windoor assembly"
else
src.name = "Wired Windoor Assembly"
src.name = "wired windoor assembly"
else
..()
@@ -160,9 +156,9 @@ obj/structure/windoor_assembly/Destroy()
new/obj/item/stack/cable_coil(get_turf(user), 1)
src.state = "01"
if(src.secure)
src.name = "Secure Anchored Windoor Assembly"
src.name = "secure anchored windoor assembly"
else
src.name = "Anchored Windoor Assembly"
src.name = "anchored windoor assembly"
//Adding airlock electronics for access. Step 6 complete.
else if(istype(W, /obj/item/weapon/airlock_electronics) && W:icon_state != "door_electronics_smoked")
@@ -175,7 +171,7 @@ obj/structure/windoor_assembly/Destroy()
user.drop_item()
W.loc = src
user << "<span class='notice'>You've installed the airlock electronics!</span>"
src.name = "Near finished Windoor Assembly"
src.name = "near finished windoor assembly"
src.electronics = W
else
W.loc = src.loc
@@ -189,9 +185,9 @@ obj/structure/windoor_assembly/Destroy()
if(!src || !src.electronics) return
user << "<span class='notice'>You've removed the airlock electronics!</span>"
if(src.secure)
src.name = "Secure Wired Windoor Assembly"
src.name = "secure wired windoor assembly"
else
src.name = "Wired Windoor Assembly"
src.name = "wired windoor assembly"
var/obj/item/weapon/airlock_electronics/ae = electronics
electronics = null
ae.loc = src.loc
@@ -222,6 +218,9 @@ obj/structure/windoor_assembly/Destroy()
windoor.base_state = "rightsecure"
windoor.set_dir(src.dir)
windoor.density = 0
windoor.name = created_name
spawn(0)
windoor.close()
if(src.electronics.one_access)
windoor.req_access = null
@@ -240,6 +239,9 @@ obj/structure/windoor_assembly/Destroy()
windoor.base_state = "right"
windoor.set_dir(src.dir)
windoor.density = 0
windoor.name = created_name
spawn(0)
windoor.close()
if(src.electronics.one_access)
windoor.req_access = null
@@ -257,8 +259,11 @@ obj/structure/windoor_assembly/Destroy()
..()
//Update to reflect changes(if applicable)
update_icon()
update_state()
/obj/structure/windoor_assembly/proc/update_state()
update_icon()
name += " ([created_name])"
//Rotates the windoor assembly clockwise
/obj/structure/windoor_assembly/verb/revrotate()

View File

@@ -161,6 +161,7 @@
if(reinf) tforce *= 0.25
if(health - tforce <= 7 && !reinf)
anchored = 0
update_verbs()
update_nearby_icons()
step(src, get_dir(AM, src))
take_damage(tforce)

View File

@@ -6,4 +6,10 @@
/obj/item/weapon/Bump(mob/M as mob)
spawn(0)
..()
return
return
/obj/item/weapon/melee
item_icons = list(
slot_l_hand_str = 'icons/mob/items/lefthand_melee.dmi',
slot_r_hand_str = 'icons/mob/items/righthand_melee.dmi',
)