mirror of
https://github.com/CHOMPstation/CHOMPstation.git
synced 2026-08-28 06:26:29 +01:00
Merge branch 'master' of https://github.com/PolarisSS13/Polaris into attackcall
This commit is contained in:
@@ -86,6 +86,17 @@
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/structure/closet/body_bag/proc/get_occupants()
|
||||
var/list/occupants = list()
|
||||
for(var/mob/living/carbon/human/H in contents)
|
||||
occupants += H
|
||||
return occupants
|
||||
|
||||
/obj/structure/closet/body_bag/proc/update(var/broadcast=0)
|
||||
if(istype(loc, /obj/structure/morgue))
|
||||
var/obj/structure/morgue/M = loc
|
||||
M.update(broadcast)
|
||||
|
||||
/obj/structure/closet/body_bag/update_icon()
|
||||
if(opened)
|
||||
icon_state = icon_opened
|
||||
|
||||
@@ -163,6 +163,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
|
||||
/obj/item/device/pda/shaftminer
|
||||
icon_state = "pda-miner"
|
||||
default_cartridge = /obj/item/weapon/cartridge/miner
|
||||
|
||||
/obj/item/device/pda/syndicate
|
||||
default_cartridge = /obj/item/weapon/cartridge/syndicate
|
||||
@@ -172,6 +173,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
hidden = 1
|
||||
|
||||
/obj/item/device/pda/chaplain
|
||||
default_cartridge = /obj/item/weapon/cartridge/service
|
||||
icon_state = "pda-holy"
|
||||
ttone = "holy"
|
||||
|
||||
@@ -181,13 +183,15 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
ttone = "..."
|
||||
|
||||
/obj/item/device/pda/botanist
|
||||
//default_cartridge = /obj/item/weapon/cartridge/botanist
|
||||
default_cartridge = /obj/item/weapon/cartridge/service
|
||||
icon_state = "pda-hydro"
|
||||
|
||||
/obj/item/device/pda/roboticist
|
||||
default_cartridge = /obj/item/weapon/cartridge/signal/science
|
||||
icon_state = "pda-robot"
|
||||
|
||||
/obj/item/device/pda/librarian
|
||||
default_cartridge = /obj/item/weapon/cartridge/service
|
||||
icon_state = "pda-libb"
|
||||
desc = "A portable microcomputer by Thinktronic Systems, LTD. This is model is a WGW-11 series e-reader."
|
||||
note = "Congratulations, your station has chosen the Thinktronic 5290 WGW-11 Series E-reader and Personal Data Assistant!"
|
||||
@@ -200,9 +204,11 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
note = "Congratulations, you have chosen the Thinktronic 5230 Personal Data Assistant Deluxe Special Max Turbo Limited Edition!"
|
||||
|
||||
/obj/item/device/pda/chef
|
||||
default_cartridge = /obj/item/weapon/cartridge/service
|
||||
icon_state = "pda-chef"
|
||||
|
||||
/obj/item/device/pda/bar
|
||||
default_cartridge = /obj/item/weapon/cartridge/service
|
||||
icon_state = "pda-bar"
|
||||
|
||||
/obj/item/device/pda/atmos
|
||||
@@ -304,6 +310,99 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
ttone = "assist"
|
||||
|
||||
|
||||
// Used for the PDA multicaster, which mirrors messages sent to it to a specific department,
|
||||
/obj/item/device/pda/multicaster
|
||||
ownjob = "Relay"
|
||||
icon_state = "NONE"
|
||||
ttone = "data"
|
||||
detonate = 0
|
||||
news_silent = 1
|
||||
var/list/cartridges_to_send_to = list()
|
||||
|
||||
// This is what actually mirrors the message,
|
||||
/obj/item/device/pda/multicaster/new_message(var/sending_unit, var/sender, var/sender_job, var/message)
|
||||
if(sender)
|
||||
var/list/targets = list()
|
||||
for(var/obj/item/device/pda/pda in PDAs)
|
||||
if(pda.cartridge && pda.owner && is_type_in_list(pda.cartridge, cartridges_to_send_to))
|
||||
targets |= pda
|
||||
if(targets.len)
|
||||
for(var/obj/item/device/pda/target in targets)
|
||||
create_message(target, sender, sender_job, message)
|
||||
|
||||
// This has so much copypasta,
|
||||
/obj/item/device/pda/multicaster/create_message(var/obj/item/device/pda/P, var/original_sender, var/original_job, var/t)
|
||||
t = sanitize(t, MAX_MESSAGE_LEN, 0)
|
||||
t = replace_characters(t, list(""" = "\""))
|
||||
if (!t || !istype(P))
|
||||
return
|
||||
|
||||
if (isnull(P)||P.toff || toff)
|
||||
return
|
||||
|
||||
last_text = world.time
|
||||
var/datum/reception/reception = get_reception(src, P, t)
|
||||
t = reception.message
|
||||
|
||||
if(reception.message_server && (reception.telecomms_reception & TELECOMMS_RECEPTION_SENDER)) // only send the message if it's stable,
|
||||
if(reception.telecomms_reception & TELECOMMS_RECEPTION_RECEIVER == 0) // Does our recipient have a broadcaster on their level?,
|
||||
return
|
||||
var/send_result = reception.message_server.send_pda_message("[P.owner]","[owner]","[t]")
|
||||
if (send_result)
|
||||
return
|
||||
|
||||
P.tnote.Add(list(list("sent" = 0, "owner" = "[owner]", "job" = "[ownjob]", "message" = "[t]", "target" = "\ref[src]")))
|
||||
|
||||
if(!P.conversations.Find("\ref[src]"))
|
||||
P.conversations.Add("\ref[src]")
|
||||
|
||||
P.new_message(src, "[original_sender] \[Relayed\]", original_job, t, 0)
|
||||
|
||||
else
|
||||
return
|
||||
|
||||
/obj/item/device/pda/multicaster/command/New()
|
||||
..()
|
||||
owner = "Command Department"
|
||||
name = "Command Department (Relay)"
|
||||
cartridges_to_send_to = command_cartridges
|
||||
|
||||
/obj/item/device/pda/multicaster/security/New()
|
||||
..()
|
||||
owner = "Security Department"
|
||||
name = "Security Department (Relay)"
|
||||
cartridges_to_send_to = security_cartridges
|
||||
|
||||
/obj/item/device/pda/multicaster/engineering/New()
|
||||
..()
|
||||
owner = "Engineering Department"
|
||||
name = "Engineering Department (Relay)"
|
||||
cartridges_to_send_to = engineering_cartridges
|
||||
|
||||
/obj/item/device/pda/multicaster/medical/New()
|
||||
..()
|
||||
owner = "Medical Department"
|
||||
name = "Medical Department (Relay)"
|
||||
cartridges_to_send_to = medical_cartridges
|
||||
|
||||
/obj/item/device/pda/multicaster/research/New()
|
||||
..()
|
||||
owner = "Research Department"
|
||||
name = "Research Department (Relay)"
|
||||
cartridges_to_send_to = research_cartridges
|
||||
|
||||
/obj/item/device/pda/multicaster/cargo/New()
|
||||
..()
|
||||
owner = "Cargo Department"
|
||||
name = "Cargo Department (Relay)"
|
||||
cartridges_to_send_to = cargo_cartridges
|
||||
|
||||
/obj/item/device/pda/multicaster/civilian/New()
|
||||
..()
|
||||
owner = "Civilian Services Department"
|
||||
name = "Civilian Services Department (Relay)"
|
||||
cartridges_to_send_to = civilian_cartridges
|
||||
|
||||
/*
|
||||
* The Actual PDA
|
||||
*/
|
||||
@@ -932,7 +1031,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
message += "Your [P] bleeps loudly."
|
||||
j = prob(10)
|
||||
|
||||
if(j) //This kills the PDA
|
||||
if(j && detonate) //This kills the PDA
|
||||
qdel(P)
|
||||
if(message)
|
||||
message += "It melts in a puddle of plastic."
|
||||
@@ -1046,8 +1145,8 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
/obj/item/device/pda/proc/new_message_from_pda(var/obj/item/device/pda/sending_device, var/message)
|
||||
new_message(sending_device, sending_device.owner, sending_device.ownjob, message)
|
||||
|
||||
/obj/item/device/pda/proc/new_message(var/sending_unit, var/sender, var/sender_job, var/message)
|
||||
var/reception_message = "\icon[src] <b>Message from [sender] ([sender_job]), </b>\"[message]\" (<a href='byond://?src=\ref[src];choice=Message;notap=[istype(loc, /mob/living/silicon)];skiprefresh=1;target=\ref[sending_unit]'>Reply</a>)"
|
||||
/obj/item/device/pda/proc/new_message(var/sending_unit, var/sender, var/sender_job, var/message, var/reply = 1)
|
||||
var/reception_message = "\icon[src] <b>Message from [sender] ([sender_job]), </b>\"[message]\" ([reply ? "<a href='byond://?src=\ref[src];choice=Message;notap=[istype(loc, /mob/living/silicon)];skiprefresh=1;target=\ref[sending_unit]'>Reply</a>" : "Unable to Reply"])"
|
||||
new_info(message_silent, ttone, reception_message)
|
||||
|
||||
log_pda("[usr] (PDA: [sending_unit]) sent \"[message]\" to [name]")
|
||||
@@ -1152,13 +1251,15 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
return 1
|
||||
else
|
||||
var/obj/item/I = user.get_active_hand()
|
||||
if (istype(I, /obj/item/weapon/card/id) && user.removeItem(I, src))
|
||||
if (istype(I, /obj/item/weapon/card/id) && user.unEquip(I))
|
||||
I.loc = src
|
||||
id = I
|
||||
return 1
|
||||
else
|
||||
var/obj/item/weapon/card/I = user.get_active_hand()
|
||||
if (istype(I, /obj/item/weapon/card/id) && I:registered_name && user.removeItem(I, src))
|
||||
if (istype(I, /obj/item/weapon/card/id) && I:registered_name && user.unEquip(I))
|
||||
var/obj/old_id = id
|
||||
I.loc = src
|
||||
id = I
|
||||
user.put_in_hands(old_id)
|
||||
return 1
|
||||
|
||||
@@ -1,3 +1,48 @@
|
||||
var/list/command_cartridges = list(
|
||||
/obj/item/weapon/cartridge/captain,
|
||||
/obj/item/weapon/cartridge/hop,
|
||||
/obj/item/weapon/cartridge/hos,
|
||||
/obj/item/weapon/cartridge/ce,
|
||||
/obj/item/weapon/cartridge/rd,
|
||||
/obj/item/weapon/cartridge/head,
|
||||
/obj/item/weapon/cartridge/lawyer // Internal Affaris,
|
||||
)
|
||||
|
||||
var/list/security_cartridges = list(
|
||||
/obj/item/weapon/cartridge/security,
|
||||
/obj/item/weapon/cartridge/detective,
|
||||
/obj/item/weapon/cartridge/hos
|
||||
)
|
||||
|
||||
var/list/engineering_cartridges = list(
|
||||
/obj/item/weapon/cartridge/engineering,
|
||||
/obj/item/weapon/cartridge/atmos,
|
||||
/obj/item/weapon/cartridge/ce
|
||||
)
|
||||
|
||||
var/list/medical_cartridges = list(
|
||||
/obj/item/weapon/cartridge/medical,
|
||||
/obj/item/weapon/cartridge/chemistry,
|
||||
/obj/item/weapon/cartridge/cmo
|
||||
)
|
||||
|
||||
var/list/research_cartridges = list(
|
||||
/obj/item/weapon/cartridge/signal/science,
|
||||
/obj/item/weapon/cartridge/rd
|
||||
)
|
||||
|
||||
var/list/cargo_cartridges = list(
|
||||
/obj/item/weapon/cartridge/quartermaster, // This also covers cargo-techs, apparently,
|
||||
/obj/item/weapon/cartridge/miner,
|
||||
/obj/item/weapon/cartridge/hop
|
||||
)
|
||||
|
||||
var/list/civilian_cartridges = list(
|
||||
/obj/item/weapon/cartridge/janitor,
|
||||
/obj/item/weapon/cartridge/service,
|
||||
/obj/item/weapon/cartridge/hop
|
||||
)
|
||||
|
||||
/obj/item/weapon/cartridge
|
||||
name = "generic cartridge"
|
||||
desc = "A data cartridge for portable microcomputers."
|
||||
@@ -98,6 +143,10 @@
|
||||
access_flora = 1
|
||||
*/
|
||||
|
||||
/obj/item/weapon/cartridge/service
|
||||
name = "\improper Serv-U Pro"
|
||||
desc = "A data cartridge designed to serve YOU!"
|
||||
|
||||
/obj/item/weapon/cartridge/signal
|
||||
name = "generic signaler cartridge"
|
||||
desc = "A data cartridge with an integrated radio signaler module."
|
||||
@@ -124,6 +173,11 @@
|
||||
icon_state = "cart-q"
|
||||
access_quartermaster = 1
|
||||
|
||||
/obj/item/weapon/cartridge/miner
|
||||
name = "\improper Drill-Jockey 4.5"
|
||||
desc = "It's covered in some sort of sand."
|
||||
icon_state = "cart-q"
|
||||
|
||||
/obj/item/weapon/cartridge/head
|
||||
name = "\improper Easy-Record DELUXE"
|
||||
icon_state = "cart-h"
|
||||
|
||||
@@ -20,13 +20,32 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
|
||||
var/list/voice_mobs = list()
|
||||
var/list/voice_requests = list()
|
||||
var/list/voice_invites = list()
|
||||
var/selected_tab = 1 //1 equals dialing, 2 equals reviewing requests/invites.
|
||||
|
||||
var/list/im_contacts = list()
|
||||
var/list/im_list = list()
|
||||
|
||||
var/note = "Thank you for choosing the T-14.2 Communicator, this is your notepad!" //Current note in the notepad function
|
||||
var/notehtml = ""
|
||||
|
||||
var/obj/item/weapon/cartridge/cartridge = null //current cartridge
|
||||
var/list/modules = list(
|
||||
list("module" = "Phone", "icon" = "phone64", "number" = 2),
|
||||
list("module" = "Contacts", "icon" = "person64", "number" = 3),
|
||||
list("module" = "Messaging", "icon" = "comment64", "number" = 4),
|
||||
list("module" = "Note", "icon" = "note64", "number" = 5),
|
||||
list("module" = "Settings", "icon" = "gear64", "number" = 6)
|
||||
) //list("module" = "Name of Module", "icon" = "icon name64", "number" = "what tab is the module")
|
||||
|
||||
var/selected_tab = 1
|
||||
var/owner = ""
|
||||
var/occupation = ""
|
||||
var/alert_called = 0
|
||||
var/obj/machinery/exonet_node/node = null //Reference to the Exonet node, to avoid having to look it up so often.
|
||||
|
||||
var/target_address = ""
|
||||
var/target_address_name = ""
|
||||
var/network_visibility = 1
|
||||
var/ringer = 1
|
||||
var/list/known_devices = list()
|
||||
var/datum/exonet_protocol/exonet = null
|
||||
var/list/communicating = list()
|
||||
@@ -151,6 +170,24 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
|
||||
if(!node || !node.on || !node.allow_external_communicators)
|
||||
close_connection(reason = "Connection timed out")
|
||||
|
||||
// Proc: attackby()
|
||||
// Parameters: 2 (C - what is used on the communicator. user - the mob that has the communicator)
|
||||
// Description: When an ID is swiped on the communicator, the communicator reads the job and checks it against the Owner name, if success, the occupation is added.
|
||||
/obj/item/device/communicator/attackby(obj/item/C as obj, mob/user as mob)
|
||||
if(istype(C, /obj/item/weapon/card/id))
|
||||
var/obj/item/weapon/card/id/idcard = C
|
||||
if(!idcard.registered_name || !idcard.assignment)
|
||||
user << "<span class='notice'>\The [src] rejects the ID.</span>"
|
||||
return
|
||||
if(!owner)
|
||||
user << "<span class='notice'>\The [src] rejects the ID.</span>"
|
||||
return
|
||||
if(owner == idcard.registered_name)
|
||||
occupation = idcard.assignment
|
||||
user << "<span class='notice'>Occupation updated.</span>"
|
||||
return
|
||||
else return
|
||||
|
||||
// Proc: attack_self()
|
||||
// Parameters: 1 (user - the mob that clicked the device in their hand)
|
||||
// Description: Makes an exonet datum if one does not exist, allocates an address for it, maintains the lists of all devies, clears the alert icon, and
|
||||
@@ -205,6 +242,11 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
|
||||
var/voices[0] //Current /mob/living/voice s inside the device.
|
||||
var/connected_communicators[0] //Current communicators connected to the device.
|
||||
|
||||
var/im_contacts_ui[0] //List of communicators that have been messaged.
|
||||
var/im_list_ui[0] //List of messages.
|
||||
|
||||
var/modules_ui[0] //Home screen info.
|
||||
|
||||
//First we add other 'local' communicators.
|
||||
for(var/obj/item/device/communicator/comm in known_devices)
|
||||
if(comm.network_visibility && comm.exonet)
|
||||
@@ -243,18 +285,38 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
|
||||
for(var/obj/item/device/communicator/comm in communicating)
|
||||
connected_communicators[++connected_communicators.len] = list("name" = sanitize(comm.name), "true_name" = sanitize(comm.name))
|
||||
|
||||
//Devices that have been messaged or recieved messages from.
|
||||
for(var/obj/item/device/communicator/comm in im_contacts)
|
||||
if(comm.exonet)
|
||||
im_contacts_ui[++im_contacts_ui.len] = list("name" = sanitize(comm.name), "address" = comm.exonet.address)
|
||||
|
||||
//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"])
|
||||
|
||||
//Modules for homescreen.
|
||||
for(var/list/R in modules)
|
||||
modules_ui[++modules_ui.len] = R
|
||||
|
||||
data["owner"] = owner ? owner : "Unset"
|
||||
data["occupation"] = occupation ? occupation : "Swipe ID to set."
|
||||
data["connectionStatus"] = get_connection_to_tcomms()
|
||||
data["visible"] = network_visibility
|
||||
data["address"] = exonet.address ? exonet.address : "Unallocated"
|
||||
data["targetAddress"] = target_address
|
||||
data["targetAddressName"] = target_address_name
|
||||
data["currentTab"] = selected_tab
|
||||
data["knownDevices"] = communicators
|
||||
data["invitesSent"] = invites
|
||||
data["requestsReceived"] = requests
|
||||
data["voice_mobs"] = voices
|
||||
data["communicating"] = connected_communicators
|
||||
data["imContacts"] = im_contacts_ui
|
||||
data["imList"] = im_list_ui
|
||||
data["time"] = worldtime2text()
|
||||
data["ring"] = ringer
|
||||
data["homeScreen"] = modules_ui
|
||||
data["note"] = note // current notes
|
||||
|
||||
// update the ui if it exists, returns null if no ui is passed/found
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
@@ -284,6 +346,9 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
|
||||
if(href_list["toggle_visibility"])
|
||||
network_visibility = !network_visibility
|
||||
|
||||
if(href_list["toggle_ringer"])
|
||||
ringer = !ringer
|
||||
|
||||
if(href_list["add_hex"])
|
||||
var/hex = href_list["add_hex"]
|
||||
add_to_EPv2(hex)
|
||||
@@ -304,6 +369,16 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
|
||||
var/their_address = href_list["dial"]
|
||||
exonet.send_message(their_address, "voice")
|
||||
|
||||
if(href_list["message"])
|
||||
if(!get_connection_to_tcomms())
|
||||
usr << "<span class='danger'>Error: Cannot connect to Exonet node.</span>"
|
||||
return
|
||||
var/their_address = href_list["message"]
|
||||
var/text = sanitizeSafe(input(usr,"Enter your message.","Text Message"))
|
||||
if(text)
|
||||
exonet.send_message(their_address, "text", text)
|
||||
im_list += list(list("address" = exonet.address, "to_address" = their_address, "im" = text))
|
||||
|
||||
if(href_list["disconnect"])
|
||||
var/name_to_disconnect = href_list["disconnect"]
|
||||
for(var/mob/living/voice/V in contents)
|
||||
@@ -316,6 +391,9 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
|
||||
if(href_list["copy"])
|
||||
target_address = href_list["copy"]
|
||||
|
||||
if(href_list["copy_name"])
|
||||
target_address_name = href_list["copy_name"]
|
||||
|
||||
if(href_list["hang_up"])
|
||||
for(var/mob/living/voice/V in contents)
|
||||
close_connection(usr, V, "[usr] hung up.")
|
||||
@@ -325,13 +403,25 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
|
||||
if(href_list["switch_tab"])
|
||||
selected_tab = href_list["switch_tab"]
|
||||
|
||||
if(href_list["edit"])
|
||||
var/n = input(usr, "Please enter message", name, notehtml)
|
||||
n = sanitizeSafe(n, extra = 0)
|
||||
if(n)
|
||||
note = html_decode(n)
|
||||
notehtml = note
|
||||
note = replacetext(note, "\n", "<br>")
|
||||
else
|
||||
note = ""
|
||||
notehtml = note
|
||||
|
||||
nanomanager.update_uis(src)
|
||||
add_fingerprint(usr)
|
||||
|
||||
// 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.
|
||||
/obj/item/device/communicator/receive_exonet_message(var/atom/origin_atom, origin_address, message)
|
||||
// Parameters: 4 (origin atom - the source of the message's holder, origin_address - where the message came from, message - the message received,
|
||||
// text - message text to send if message is of type "text")
|
||||
// Description: Handles voice requests and invite messages originating from both real communicators and ghosts. Also includes a ping response and IM function.
|
||||
/obj/item/device/communicator/receive_exonet_message(var/atom/origin_atom, origin_address, message, text)
|
||||
if(message == "voice")
|
||||
if(isobserver(origin_atom) || istype(origin_atom, /obj/item/device/communicator))
|
||||
if(origin_atom in voice_invites)
|
||||
@@ -349,6 +439,9 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
|
||||
var/random = rand(200,350)
|
||||
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")
|
||||
request_im(origin_atom, origin_address, text)
|
||||
return
|
||||
|
||||
// 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)
|
||||
@@ -368,6 +461,8 @@ 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.
|
||||
return
|
||||
|
||||
// Proc: register_device()
|
||||
// Parameters: 1 (user - the person to use their name for)
|
||||
@@ -514,9 +609,10 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
|
||||
|
||||
voice_requests |= candidate
|
||||
|
||||
playsound(loc, 'sound/machines/twobeep.ogg', 50, 1)
|
||||
for (var/mob/O in hearers(2, loc))
|
||||
O.show_message(text("\icon[src] *beep*"))
|
||||
if(ringer)
|
||||
playsound(loc, 'sound/machines/twobeep.ogg', 50, 1)
|
||||
for (var/mob/O in hearers(2, loc))
|
||||
O.show_message(text("\icon[src] *beep*"))
|
||||
|
||||
alert_called = 1
|
||||
update_icon()
|
||||
@@ -529,6 +625,42 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
|
||||
if(L)
|
||||
L << "<span class='notice'>\icon[src] Communications request from [who].</span>"
|
||||
|
||||
// Proc: request_im()
|
||||
// Parameters: 3 (candidate - the communicator wanting to message the device, origin_address - the address of the sender, text - the message)
|
||||
// Description: Response to a communicator trying to message the device.
|
||||
// Adds them to the list of people that have messaged this device and adds the message to the message list.
|
||||
/obj/item/device/communicator/proc/request_im(var/atom/candidate, var/origin_address, var/text)
|
||||
var/who = null
|
||||
if(isobserver(candidate))
|
||||
return
|
||||
else if(istype(candidate, /obj/item/device/communicator))
|
||||
var/obj/item/device/communicator/comm = candidate
|
||||
who = comm.owner
|
||||
comm.im_contacts |= src
|
||||
im_list += list(list("address" = origin_address, "to_address" = exonet.address, "im" = text))
|
||||
else return
|
||||
|
||||
im_contacts |= candidate
|
||||
|
||||
if(!who)
|
||||
return
|
||||
|
||||
if(ringer)
|
||||
playsound(loc, 'sound/machines/twobeep.ogg', 50, 1)
|
||||
for (var/mob/O in hearers(2, loc))
|
||||
O.show_message(text("\icon[src] *beep*"))
|
||||
|
||||
alert_called = 1
|
||||
update_icon()
|
||||
|
||||
//Search for holder of the device.
|
||||
var/mob/living/L = null
|
||||
if(loc && isliving(loc))
|
||||
L = loc
|
||||
|
||||
if(L)
|
||||
L << "<span class='notice'>\icon[src] Message from [who].</span>"
|
||||
|
||||
// Proc: Destroy()
|
||||
// Parameters: None
|
||||
// Description: Deletes all the voice mobs, disconnects all linked communicators, and cuts lists to allow successful qdel()
|
||||
|
||||
@@ -63,6 +63,10 @@
|
||||
else //can only use it 5 times a minute
|
||||
user << "<span class='warning'>*click* *click*</span>"
|
||||
return
|
||||
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
user.do_attack_animation(M)
|
||||
|
||||
playsound(src.loc, 'sound/weapons/flash.ogg', 100, 1)
|
||||
var/flashfail = 0
|
||||
|
||||
@@ -115,9 +119,9 @@
|
||||
|
||||
/obj/item/device/flash/attack_self(mob/living/carbon/user as mob, flag = 0, emp = 0)
|
||||
if(!user || !clown_check(user)) return
|
||||
|
||||
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
|
||||
|
||||
if(broken)
|
||||
user.show_message("<span class='warning'>The [src.name] is broken</span>", 2)
|
||||
return
|
||||
|
||||
@@ -201,7 +201,7 @@
|
||||
src.force = on_damage
|
||||
src.damtype = "fire"
|
||||
processing_objects += src
|
||||
|
||||
|
||||
/obj/item/device/flashlight/flare/proc/ignite() //Used for flare launchers.
|
||||
on = !on
|
||||
update_icon()
|
||||
@@ -210,6 +210,76 @@
|
||||
processing_objects += src
|
||||
return 1
|
||||
|
||||
//Glowsticks
|
||||
|
||||
/obj/item/device/flashlight/glowstick
|
||||
name = "green glowstick"
|
||||
desc = "A green military-grade glowstick."
|
||||
w_class = 2.0
|
||||
brightness_on = 4
|
||||
light_power = 2
|
||||
light_color = "#49F37C"
|
||||
icon_state = "glowstick"
|
||||
item_state = "glowstick"
|
||||
var/fuel = 0
|
||||
|
||||
/obj/item/device/flashlight/glowstick/New()
|
||||
fuel = rand(1600, 2000)
|
||||
..()
|
||||
|
||||
/obj/item/device/flashlight/glowstick/process()
|
||||
fuel = max(fuel - 1, 0)
|
||||
if(!fuel || !on)
|
||||
turn_off()
|
||||
if(!fuel)
|
||||
src.icon_state = "[initial(icon_state)]-empty"
|
||||
processing_objects -= src
|
||||
|
||||
/obj/item/device/flashlight/glowstick/proc/turn_off()
|
||||
on = 0
|
||||
update_icon()
|
||||
|
||||
/obj/item/device/flashlight/glowstick/attack_self(mob/user)
|
||||
|
||||
if(!fuel)
|
||||
user << "<span class='notice'>The glowstick has already been turned on.</span>"
|
||||
return
|
||||
if(on)
|
||||
return
|
||||
|
||||
. = ..()
|
||||
if(.)
|
||||
user.visible_message("<span class='notice'>[user] cracks and shakes the glowstick.</span>", "<span class='notice'>You crack and shake the glowstick, turning it on!</span>")
|
||||
processing_objects += src
|
||||
|
||||
/obj/item/device/flashlight/glowstick/red
|
||||
name = "red glowstick"
|
||||
desc = "A red military-grade glowstick."
|
||||
light_color = "#FC0F29"
|
||||
icon_state = "glowstick_red"
|
||||
item_state = "glowstick_red"
|
||||
|
||||
/obj/item/device/flashlight/glowstick/blue
|
||||
name = "blue glowstick"
|
||||
desc = "A blue military-grade glowstick."
|
||||
light_color = "#599DFF"
|
||||
icon_state = "glowstick_blue"
|
||||
item_state = "glowstick_blue"
|
||||
|
||||
/obj/item/device/flashlight/glowstick/orange
|
||||
name = "orange glowstick"
|
||||
desc = "A orange military-grade glowstick."
|
||||
light_color = "#FA7C0B"
|
||||
icon_state = "glowstick_orange"
|
||||
item_state = "glowstick_orange"
|
||||
|
||||
/obj/item/device/flashlight/glowstick/yellow
|
||||
name = "yellow glowstick"
|
||||
desc = "A yellow military-grade glowstick."
|
||||
light_color = "#FEF923"
|
||||
icon_state = "glowstick_yellow"
|
||||
item_state = "glowstick_yellow"
|
||||
|
||||
/obj/item/device/flashlight/slime
|
||||
gender = PLURAL
|
||||
name = "glowing slime extract"
|
||||
|
||||
@@ -0,0 +1,100 @@
|
||||
/obj/item/device/multitool/hacktool
|
||||
var/is_hacking = 0
|
||||
var/max_known_targets
|
||||
|
||||
var/in_hack_mode = 0
|
||||
var/list/known_targets
|
||||
var/list/supported_types
|
||||
var/datum/topic_state/default/must_hack/hack_state
|
||||
|
||||
/obj/item/device/multitool/hacktool/New()
|
||||
..()
|
||||
known_targets = list()
|
||||
max_known_targets = 5 + rand(1,3)
|
||||
supported_types = list(/obj/machinery/door/airlock)
|
||||
hack_state = new(src)
|
||||
|
||||
/obj/item/device/multitool/hacktool/Destroy()
|
||||
for(var/T in known_targets)
|
||||
var/atom/target = T
|
||||
target.unregister(OBSERVER_EVENT_DESTROY, src)
|
||||
known_targets.Cut()
|
||||
qdel(hack_state)
|
||||
hack_state = null
|
||||
return ..()
|
||||
|
||||
/obj/item/device/multitool/hacktool/attackby(var/obj/W, var/mob/user)
|
||||
if(isscrewdriver(W))
|
||||
in_hack_mode = !in_hack_mode
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/device/multitool/hacktool/resolve_attackby(atom/A, mob/user)
|
||||
sanity_check()
|
||||
|
||||
if(!in_hack_mode)
|
||||
return ..()
|
||||
|
||||
if(!attempt_hack(user, A))
|
||||
return 0
|
||||
|
||||
A.ui_interact(user, state = hack_state)
|
||||
return 1
|
||||
|
||||
/obj/item/device/multitool/hacktool/proc/attempt_hack(var/mob/user, var/atom/target)
|
||||
if(is_hacking)
|
||||
user << "<span class='warning'>You are already hacking!</span>"
|
||||
return 0
|
||||
if(!is_type_in_list(target, supported_types))
|
||||
user << "\icon[src] <span class='warning'>Unable to hack this target!</span>"
|
||||
return 0
|
||||
var/found = known_targets.Find(target)
|
||||
if(found)
|
||||
known_targets.Swap(1, found) // Move the last hacked item first
|
||||
return 1
|
||||
|
||||
user << "<span class='notice'>You begin hacking \the [target]...</span>"
|
||||
is_hacking = 1
|
||||
// On average hackin takes ~30 seconds. Fairly small random span to avoid people simply aborting and trying again
|
||||
var/hack_result = do_after(user, (20 SECONDS + rand(0, 10 SECONDS) + rand(0, 10 SECONDS)))
|
||||
is_hacking = 0
|
||||
|
||||
if(hack_result && in_hack_mode)
|
||||
user << "<span class='notice'>Your hacking attempt was succesful!</span>"
|
||||
playsound(src.loc, 'sound/piano/A#6.ogg', 75)
|
||||
else
|
||||
user << "<span class='warning'>Your hacking attempt failed!</span>"
|
||||
return 0
|
||||
|
||||
known_targets.Insert(1, target) // Insert the newly hacked target first,
|
||||
target.register(OBSERVER_EVENT_DESTROY, src, /obj/item/device/multitool/hacktool/proc/on_target_destroy)
|
||||
return 1
|
||||
|
||||
/obj/item/device/multitool/hacktool/proc/sanity_check()
|
||||
if(max_known_targets < 1) max_known_targets = 1
|
||||
// Cut away the oldest items if the capacity has been reached
|
||||
if(known_targets.len > max_known_targets)
|
||||
for(var/i = (max_known_targets + 1) to known_targets.len)
|
||||
var/atom/A = known_targets[i]
|
||||
A.unregister(OBSERVER_EVENT_DESTROY, src)
|
||||
known_targets.Cut(max_known_targets + 1)
|
||||
|
||||
/obj/item/device/multitool/hacktool/proc/on_target_destroy(var/target)
|
||||
known_targets -= target
|
||||
|
||||
/datum/topic_state/default/must_hack
|
||||
var/obj/item/device/multitool/hacktool/hacktool
|
||||
|
||||
/datum/topic_state/default/must_hack/New(var/hacktool)
|
||||
src.hacktool = hacktool
|
||||
..()
|
||||
|
||||
/datum/topic_state/default/must_hack/Destroy()
|
||||
hacktool = null
|
||||
return ..()
|
||||
|
||||
/datum/topic_state/default/must_hack/can_use_topic(var/src_object, var/mob/user)
|
||||
if(!hacktool || !hacktool.in_hack_mode || !(src_object in hacktool.known_targets))
|
||||
return STATUS_CLOSE
|
||||
return ..()
|
||||
@@ -0,0 +1,140 @@
|
||||
/obj/item/device/closet_painter
|
||||
name = "closet painter"
|
||||
icon = 'icons/obj/bureaucracy.dmi'
|
||||
icon_state = "labeler1"
|
||||
item_state = "flight"
|
||||
|
||||
var/colour = "plain"
|
||||
var/colour_secure = "plain"
|
||||
|
||||
var/list/colours = list(
|
||||
"plain" = list("open" = "open", "closed" = "closed"),
|
||||
"blue" = list("open" = "open", "closed" = "blue"),
|
||||
"mixed" = list("open" = "open", "closed" = "mixed"),
|
||||
"grey" = list("open" = "open", "closed" = "grey"),
|
||||
"green" = list("open" = "open", "closed" = "green"),
|
||||
"orange" = list("open" = "open", "closed" = "orange"),
|
||||
"pink" = list("open" = "open", "closed" = "pink"),
|
||||
"red" = list("open" = "open", "closed" = "red"),
|
||||
"white" = list("open" = "open", "closed" = "white"),
|
||||
"yellow" = list("open" = "open", "closed" = "yellow"),
|
||||
"black" = list("open" = "open", "closed" = "black"),
|
||||
"bio" = list("open" = "bioopen", "closed" = "bio"),
|
||||
"bio-virology" = list("open" = "bio_virologyopen", "closed" = "bio_virology"),
|
||||
"bio-security" = list("open" = "bio_securityopen", "closed" = "bio_security"),
|
||||
"bio-janitor" = list("open" = "bio_janitoropen", "closed" = "bio_janitor"),
|
||||
"bio-scientist" = list("open" = "bio_scientistopen", "closed" = "bio_scientist"),
|
||||
"bombsuit" = list("open" = "bombsuitopen", "closed" = "bombsuit"),
|
||||
"bombsuit-security" = list("open" = "bombsuitsecopen", "closed" = "bombsuitsec"),
|
||||
"full-red" = list("open" = "syndicateopen", "closed" = "syndicate"),
|
||||
"full-green" = list("open" = "syndicate1open", "closed" = "syndicate1"),
|
||||
"full-purple" = list("open" = "aclosetopen", "closed" = "acloset"),
|
||||
"mining" = list("open" = "miningopen", "closed" = "mining"),
|
||||
"emergency" = list("open" = "emergencyopen", "closed" = "emergency"),
|
||||
"fire" = list("open" = "fireclosetopen", "closed" = "firecloset"),
|
||||
"tool" = list("open" = "toolclosetopen", "closed" = "toolcloset"),
|
||||
"radiation" = list("open" = "toolclosetopen", "closed" = "radsuitcloset")
|
||||
)
|
||||
|
||||
var/list/colours_secure = list(
|
||||
"plain" = list("open" = "open", "closed" = "secure", "locked" = "secure1", "broken" = "securebroken", "off" = "secureoff"),
|
||||
"medical-red" = list("open" = "medicalopen", "closed" = "medical", "locked" = "medical1", "broken" = "medicalbroken", "off" = "medicaloff"),
|
||||
"medical-green" = list("open" = "securemedopen", "closed" = "securemed", "locked" = "securemed1", "broken" = "securemedbroken", "off" = "securemedoff"),
|
||||
"CMO" = list("open" = "cmosecureopen", "closed" = "cmosecure", "locked" = "cmosecure1", "broken" = "cmosecurebroken", "off" = "cmosecureoff"),
|
||||
"cargo" = list("open" = "securecargoopen", "closed" = "securecargo", "locked" = "securecargo1", "broken" = "securecargobroken", "off" = "securecargooff"),
|
||||
"mining" = list("open" = "miningsecopen", "closed" = "miningsec", "locked" = "miningsec1", "broken" = "miningsecbroken", "off" = "miningsecoff"),
|
||||
"QM" = list("open" = "secureqmopen", "closed" = "secureqm", "locked" = "secureqm1", "broken" = "secureqmbroken", "off" = "secureqmoff"),
|
||||
"hydroponics" = list("open" = "hydrosecureopen", "closed" = "hydrosecure", "locked" = "hydrosecure1", "broken" = "hydrosecurebroken", "off" = "hydrosecureoff"),
|
||||
"atmospherics" = list("open" = "secureatmopen", "closed" = "secureatm", "locked" = "secureatm1", "broken" = "secureatmbroken", "off" = "secureatmoff"),
|
||||
"engineer" = list("open" = "secureengopen", "closed" = "secureeng", "locked" = "secureeng1", "broken" = "secureengbroken", "off" = "secureengoff"),
|
||||
"CE" = list("open" = "secureceopen", "closed" = "securece", "locked" = "securece1", "broken" = "securecebroken", "off" = "secureceoff"),
|
||||
"electrical" = list("open" = "toolclosetopen", "closed" = "secureengelec", "locked" = "secureengelec1", "broken" = "secureengelecbroken", "off" = "secureengelecoff"),
|
||||
"welding" = list("open" = "toolclosetopen", "closed" = "secureengweld", "locked" = "secureengweld1", "broken" = "secureengweldbroken", "off" = "secureengweldoff"),
|
||||
"research" = list("open" = "secureresopen", "closed" = "secureres", "locked" = "secureres1", "broken" = "secureresbroken", "off" = "secureresoff"),
|
||||
"RD" = list("open" = "rdsecureopen", "closed" = "rdsecure", "locked" = "rdsecure1", "broken" = "rdsecurebroken", "off" = "rdsecureoff"),
|
||||
"security" = list("open" = "secopen", "closed" = "sec", "locked" = "sec1", "broken" = "secbroken", "off" = "secoff"),
|
||||
"warden" = list("open" = "wardensecureopen", "closed" = "wardensecure", "locked" = "wardensecure1", "broken" = "wardensecurebroken", "off" = "wardensecureoff"),
|
||||
"HoS" = list("open" = "hossecureopen", "closed" = "hossecure", "locked" = "hossecure1", "broken" = "hossecurebroken", "off" = "hossecureoff"),
|
||||
"HoP" = list("open" = "hopsecureopen", "closed" = "hopsecure", "locked" = "hopsecure1", "broken" = "hopsecurebroken", "off" = "hopsecureoff"),
|
||||
"Captain" = list("open" = "capsecureopen", "closed" = "capsecure", "locked" = "capsecure1", "broken" = "capsecurebroken", "off" = "capsecureoff")
|
||||
)
|
||||
|
||||
/obj/item/device/closet_painter/afterattack(atom/A, var/mob/user, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
|
||||
if(!istype(A,/obj/structure/closet))
|
||||
user << "<span class='warning'>\The [src] can only be used on closets.</span>"
|
||||
return
|
||||
|
||||
var/config_error
|
||||
|
||||
if(istype(A,/obj/structure/closet/secure_closet))
|
||||
var/obj/structure/closet/secure_closet/F = A
|
||||
if(F.broken)
|
||||
user << "<span class='warning'>\The [src] cannot paint broken closets.</span>"
|
||||
return
|
||||
|
||||
var/list/colour_data = colours_secure[colour_secure]
|
||||
if(!islist(colour_data))
|
||||
config_error = 1
|
||||
if(!config_error)
|
||||
F.icon_opened = colour_data["open"]
|
||||
F.icon_closed = colour_data["closed"]
|
||||
F.icon_locked = colour_data["locked"]
|
||||
F.icon_broken = colour_data["broken"]
|
||||
F.icon_off = colour_data["off"]
|
||||
F.update_icon()
|
||||
|
||||
else
|
||||
var/obj/structure/closet/F = A
|
||||
var/list/colour_data = colours[colour]
|
||||
if(!islist(colour_data))
|
||||
config_error = 1
|
||||
if(!config_error)
|
||||
F.icon_opened = colour_data["open"]
|
||||
F.icon_closed = colour_data["closed"]
|
||||
F.update_icon()
|
||||
|
||||
if(config_error)
|
||||
user << "<span class='warning'>\The [src] flashes an error light. You might need to reconfigure it.</span>"
|
||||
return
|
||||
|
||||
/obj/item/device/closet_painter/attack_self(var/mob/user)
|
||||
var/choice = input("Do you wish to change the regular closet colour or the secure closet colour?") as null|anything in list("Regular Closet Colour","Secure Closet Colour")
|
||||
if(choice == "Regular Closet Colour")
|
||||
choose_colour()
|
||||
else if(choice == "Secure Closet Colour")
|
||||
choose_colour_secure()
|
||||
|
||||
/obj/item/device/closet_painter/examine(mob/user)
|
||||
..(user)
|
||||
user << "It is configured to produce the '[colour]' paint scheme or the '[colour_secure]' secure closet paint scheme."
|
||||
|
||||
/obj/item/device/closet_painter/verb/choose_colour()
|
||||
set name = "Choose Colour"
|
||||
set desc = "Choose a regular closet painter colour."
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
if(usr.incapacitated())
|
||||
return
|
||||
|
||||
var/new_colour = input("Select a colour.") as null|anything in colours
|
||||
if(new_colour && !isnull(colours[new_colour]))
|
||||
colour = new_colour
|
||||
usr << "<span class='notice'>You set \the [src] regular closet colour to '[colour]'.</span>"
|
||||
|
||||
/obj/item/device/closet_painter/verb/choose_colour_secure()
|
||||
set name = "Choose Secure Colour"
|
||||
set desc = "Choose a secure closet painter colour."
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
if(usr.incapacitated())
|
||||
return
|
||||
|
||||
var/new_colour_secure = input("Select a colour.") as null|anything in colours_secure
|
||||
if(new_colour_secure && !isnull(colours_secure[new_colour_secure]))
|
||||
colour_secure = new_colour_secure
|
||||
usr << "<span class='notice'>You set \the [src] secure closet colour to '[colour_secure]'.</span>"
|
||||
@@ -23,7 +23,8 @@
|
||||
|
||||
if(!parts)
|
||||
user << "<span class='warning'>This kit has no parts for this modification left.</span>"
|
||||
user.deleteItem(src)
|
||||
user.drop_from_inventory(src)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
var/allowed = 0
|
||||
@@ -58,7 +59,8 @@
|
||||
parts &= ~MODKIT_SUIT
|
||||
|
||||
if(!parts)
|
||||
user.deleteItem(src)
|
||||
user.drop_from_inventory(src)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/device/modkit/examine(mob/user)
|
||||
..(user)
|
||||
|
||||
@@ -20,4 +20,4 @@
|
||||
|
||||
origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1)
|
||||
var/obj/machinery/telecomms/buffer // simple machine buffer for device linkage
|
||||
var/obj/machinery/clonepod/connecting //same for cryopod linkage
|
||||
var/obj/machinery/clonepod/connecting //same for cryopod linkage
|
||||
|
||||
@@ -27,11 +27,13 @@
|
||||
var/obj/item/assembly/shock_kit/A = new /obj/item/assembly/shock_kit( user )
|
||||
A.icon = 'icons/obj/assemblies.dmi'
|
||||
|
||||
user.removeItem(W, A)
|
||||
user.drop_from_inventory(W)
|
||||
W.loc = A
|
||||
W.master = A
|
||||
A.part1 = W
|
||||
|
||||
user.removeItem(src, A)
|
||||
user.drop_from_inventory(src)
|
||||
loc = A
|
||||
master = A
|
||||
A.part2 = src
|
||||
|
||||
|
||||
@@ -75,7 +75,7 @@ REAGENT SCANNER
|
||||
for(var/obj/item/organ/external/org in damaged)
|
||||
user.show_message(text("<span class='notice'> [][]: [][] - []</span>",
|
||||
capitalize(org.name),
|
||||
(org.status & ORGAN_ROBOT) ? "(Cybernetic)" : "",
|
||||
(org.robotic >= ORGAN_ROBOT) ? "(Cybernetic)" : "",
|
||||
(org.brute_dam > 0) ? "<span class='warning'>[org.brute_dam]</span>" : 0,
|
||||
(org.status & ORGAN_BLEEDING)?"<span class='danger'>\[Bleeding\]</span>":"",
|
||||
(org.burn_dam > 0) ? "<font color='#FFA500'>[org.burn_dam]</font>" : 0),1)
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
/obj/item/device/suit_cooling_unit/New()
|
||||
processing_objects |= src
|
||||
cell = new/obj/item/weapon/cell() //comes with the crappy default power cell - high-capacity ones shouldn't be hard to find
|
||||
cell = new/obj/item/weapon/cell/high() //comes not with the crappy default power cell - because this is dedicated EVA equipment
|
||||
cell.loc = src
|
||||
|
||||
/obj/item/device/suit_cooling_unit/process()
|
||||
|
||||
@@ -15,6 +15,7 @@ For new antags, make sure to add "player.mind.accept_tcrystals = 1" if you want
|
||||
/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.deleteItem(src)
|
||||
user.drop_from_inventory(src)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
@@ -47,8 +47,9 @@
|
||||
if(attached_device)
|
||||
user << "<span class='warning'>There is already an device attached to the valve, remove it first.</span>"
|
||||
return
|
||||
user.removeItem(A, src)
|
||||
user.remove_from_mob(item)
|
||||
attached_device = A
|
||||
A.loc = src
|
||||
user << "<span class='notice'>You attach the [item] to the valve controls and secure it.</span>"
|
||||
A.holder = src
|
||||
A.toggle_secure() //this calls update_icon(), which calls update_icon() on the holder (i.e. the bomb).
|
||||
|
||||
@@ -1,11 +1,3 @@
|
||||
//This could either be split into the proper DM files or placed somewhere else all together, but it'll do for now -Nodrak
|
||||
|
||||
/*
|
||||
|
||||
A list of items and costs is stored under the datum of every game mode, alongside the number of crystals, and the welcoming message.
|
||||
|
||||
*/
|
||||
|
||||
/obj/item/device/uplink
|
||||
var/welcome = "Welcome, Operative" // Welcoming menu message
|
||||
var/uses // Numbers of crystals
|
||||
@@ -18,6 +10,10 @@ A list of items and costs is stored under the datum of every game mode, alongsid
|
||||
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/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
|
||||
|
||||
/obj/item/device/uplink/nano_host()
|
||||
return loc
|
||||
@@ -28,10 +24,15 @@ A list of items and costs is stored under the datum of every game mode, alongsid
|
||||
purchase_log = list()
|
||||
world_uplinks += src
|
||||
uses = owner.tcrystals
|
||||
processing_objects += src
|
||||
|
||||
/obj/item/device/uplink/Destroy()
|
||||
world_uplinks -= src
|
||||
..()
|
||||
processing_objects -= src
|
||||
return ..()
|
||||
|
||||
/obj/item/device/uplink/get_item_cost(var/item_type, var/item_cost)
|
||||
return (discount_item && (item_type == discount_item)) ? max(1, round(item_cost*discount_amount)) : item_cost
|
||||
|
||||
// HIDDEN UPLINK - Can be stored in anything but the host item has to have a trigger for it.
|
||||
/* How to create an uplink in 3 easy steps!
|
||||
@@ -52,7 +53,6 @@ A list of items and costs is stored under the datum of every game mode, alongsid
|
||||
var/datum/uplink_category/category = 0 // The current category we are in
|
||||
var/exploit_id // Id of the current exploit record we are viewing
|
||||
|
||||
|
||||
// The hidden uplink MUST be inside an obj/item's contents.
|
||||
/obj/item/device/uplink/hidden/New()
|
||||
spawn(2)
|
||||
@@ -62,6 +62,14 @@ A list of items and costs is stored under the datum of every game mode, alongsid
|
||||
nanoui_data = list()
|
||||
update_nano_data()
|
||||
|
||||
/obj/item/device/uplink/hidden/process()
|
||||
if(world.time > next_offer_time)
|
||||
discount_item = default_uplink_selection.get_random_item(INFINITY)
|
||||
discount_amount = pick(90;0.9, 80;0.8, 70;0.7, 60;0.6, 50;0.5, 40;0.4, 30;0.3, 20;0.2, 10;0.1)
|
||||
next_offer_time = world.time + offer_time
|
||||
update_nano_data()
|
||||
nanomanager.update_uis(src)
|
||||
|
||||
// Toggles the uplink on and off. Normally this will bypass the item's normal functions and go to the uplink menu, if activated.
|
||||
/obj/item/device/uplink/hidden/proc/toggle()
|
||||
active = !active
|
||||
@@ -107,6 +115,11 @@ A list of items and costs is stored under the datum of every game mode, alongsid
|
||||
/obj/item/device/uplink/hidden/interact(mob/user)
|
||||
ui_interact(user)
|
||||
|
||||
/obj/item/device/uplink/hidden/CanUseTopic()
|
||||
if(!active)
|
||||
return STATUS_CLOSE
|
||||
return ..()
|
||||
|
||||
// The purchasing code.
|
||||
/obj/item/device/uplink/hidden/Topic(href, href_list)
|
||||
if(..())
|
||||
@@ -139,11 +152,14 @@ A list of items and costs is stored under the datum of every game mode, alongsid
|
||||
if(category.can_view(src))
|
||||
categories[++categories.len] = list("name" = category.name, "ref" = "\ref[category]")
|
||||
nanoui_data["categories"] = categories
|
||||
nanoui_data["discount_name"] = discount_item ? discount_item.name : ""
|
||||
nanoui_data["discount_amount"] = (1-discount_amount)*100
|
||||
nanoui_data["offer_expiry"] = worldtime2text(next_offer_time)
|
||||
else if(nanoui_menu == 1)
|
||||
var/items[0]
|
||||
for(var/datum/uplink_item/item in category.items)
|
||||
if(item.can_view(src))
|
||||
var/cost = item.cost(uses)
|
||||
var/cost = item.cost(uses, src)
|
||||
if(!cost) cost = "???"
|
||||
items[++items.len] = list("name" = item.name, "description" = replacetext(item.description(), "\n", "<br>"), "can_buy" = item.can_buy(src), "cost" = cost, "ref" = "\ref[item]")
|
||||
nanoui_data["items"] = items
|
||||
|
||||
@@ -1,49 +0,0 @@
|
||||
/datum/uplink_category
|
||||
var/name = ""
|
||||
var/list/datum/uplink_item/items
|
||||
|
||||
/datum/uplink_category/New()
|
||||
..()
|
||||
items = list()
|
||||
|
||||
/datum/uplink_category/proc/can_view(obj/item/device/uplink/U)
|
||||
for(var/datum/uplink_item/item in items)
|
||||
if(item.can_view(U))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/datum/uplink_category/ammunition
|
||||
name = "Ammunition"
|
||||
|
||||
/datum/uplink_category/grenades
|
||||
name = "Grenades and Thrown Objects"
|
||||
|
||||
/datum/uplink_category/visible_weapons
|
||||
name = "Highly Visible and Dangerous Weapons"
|
||||
|
||||
/datum/uplink_category/stealthy_weapons
|
||||
name = "Stealthy and Inconspicuous Weapons"
|
||||
|
||||
/datum/uplink_category/stealth_items
|
||||
name = "Stealth and Camouflage Items"
|
||||
|
||||
/datum/uplink_category/armor
|
||||
name = "Armor"
|
||||
|
||||
/datum/uplink_category/tools
|
||||
name = "Devices and Tools"
|
||||
|
||||
/datum/uplink_category/implants
|
||||
name = "Implants"
|
||||
|
||||
/datum/uplink_category/medical
|
||||
name = "Medical"
|
||||
|
||||
/datum/uplink_category/hardsuit_modules
|
||||
name = "Hardsuit Modules"
|
||||
|
||||
/datum/uplink_category/services
|
||||
name = "Services"
|
||||
|
||||
/datum/uplink_category/badassery
|
||||
name = "Badassery"
|
||||
@@ -1,725 +0,0 @@
|
||||
var/datum/uplink/uplink = new()
|
||||
|
||||
/datum/uplink
|
||||
var/list/items_assoc
|
||||
var/list/datum/uplink_item/items
|
||||
var/list/datum/uplink_category/categories
|
||||
|
||||
/datum/uplink/New()
|
||||
items_assoc = list()
|
||||
items = init_subtypes(/datum/uplink_item)
|
||||
categories = init_subtypes(/datum/uplink_category)
|
||||
categories = dd_sortedObjectList(categories)
|
||||
|
||||
for(var/datum/uplink_item/item in items)
|
||||
if(!item.name)
|
||||
items -= item
|
||||
continue
|
||||
|
||||
items_assoc[item.type] = item
|
||||
|
||||
for(var/datum/uplink_category/category in categories)
|
||||
if(item.category == category.type)
|
||||
category.items += item
|
||||
|
||||
for(var/datum/uplink_category/category in categories)
|
||||
category.items = dd_sortedObjectList(category.items)
|
||||
|
||||
/datum/uplink_item
|
||||
var/name
|
||||
var/desc
|
||||
var/item_cost = 0
|
||||
var/datum/uplink_category/category // Item category
|
||||
var/list/datum/antagonist/antag_roles // Antag roles this item is displayed to. If empty, display to all.
|
||||
|
||||
/datum/uplink_item/item
|
||||
var/path = null
|
||||
|
||||
/datum/uplink_item/New()
|
||||
..()
|
||||
antag_roles = list()
|
||||
|
||||
|
||||
|
||||
/datum/uplink_item/proc/buy(var/obj/item/device/uplink/U, var/mob/user)
|
||||
var/extra_args = extra_args(user)
|
||||
if(!extra_args)
|
||||
return
|
||||
|
||||
if(!can_buy(U))
|
||||
return
|
||||
|
||||
var/cost = cost(U.uses)
|
||||
|
||||
var/goods = get_goods(U, get_turf(user), user, extra_args)
|
||||
if(!goods)
|
||||
return
|
||||
|
||||
purchase_log(U)
|
||||
user.mind.tcrystals -= cost
|
||||
U.used_TC += cost
|
||||
return goods
|
||||
|
||||
// Any additional arguments you wish to send to the get_goods
|
||||
/datum/uplink_item/proc/extra_args(var/mob/user)
|
||||
return 1
|
||||
|
||||
/datum/uplink_item/proc/can_buy(obj/item/device/uplink/U)
|
||||
if(cost(U.uses) > U.uses)
|
||||
return 0
|
||||
|
||||
return can_view(U)
|
||||
|
||||
/datum/uplink_item/proc/can_view(obj/item/device/uplink/U)
|
||||
// Making the assumption that if no uplink was supplied, then we don't care about antag roles
|
||||
if(!U || !antag_roles.len)
|
||||
return 1
|
||||
|
||||
// With no owner, there's no need to check antag status.
|
||||
if(!U.uplink_owner)
|
||||
return 0
|
||||
|
||||
for(var/antag_role in antag_roles)
|
||||
var/datum/antagonist/antag = all_antag_types[antag_role]
|
||||
if(antag.is_antagonist(U.uplink_owner))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/datum/uplink_item/proc/cost(var/telecrystals)
|
||||
return item_cost
|
||||
|
||||
/datum/uplink_item/proc/description()
|
||||
return desc
|
||||
|
||||
// get_goods does not necessarily return physical objects, it is simply a way to acquire the uplink item without paying
|
||||
/datum/uplink_item/proc/get_goods(var/obj/item/device/uplink/U, var/loc)
|
||||
return 0
|
||||
|
||||
/datum/uplink_item/proc/log_icon()
|
||||
return
|
||||
|
||||
/datum/uplink_item/proc/purchase_log(obj/item/device/uplink/U)
|
||||
feedback_add_details("traitor_uplink_items_bought", "[src]")
|
||||
log_and_message_admins("used \the [U.loc] to buy \a [src]")
|
||||
U.purchase_log[src] = U.purchase_log[src] + 1
|
||||
|
||||
datum/uplink_item/dd_SortValue()
|
||||
return cost(INFINITY)
|
||||
|
||||
/********************************
|
||||
* *
|
||||
* Physical Uplink Entries *
|
||||
* *
|
||||
********************************/
|
||||
/datum/uplink_item/item/buy(var/obj/item/device/uplink/U, var/mob/user)
|
||||
var/obj/item/I = ..()
|
||||
if(!I)
|
||||
return
|
||||
|
||||
if(istype(I, /list))
|
||||
var/list/L = I
|
||||
if(L.len) I = L[1]
|
||||
|
||||
if(istype(I) && ishuman(user))
|
||||
var/mob/living/carbon/human/A = user
|
||||
A.put_in_any_hand_if_possible(I)
|
||||
return I
|
||||
|
||||
/datum/uplink_item/item/get_goods(var/obj/item/device/uplink/U, var/loc)
|
||||
var/obj/item/I = new path(loc)
|
||||
return I
|
||||
|
||||
/datum/uplink_item/item/description()
|
||||
if(!desc)
|
||||
// Fallback description
|
||||
var/obj/temp = src.path
|
||||
desc = initial(temp.desc)
|
||||
return ..()
|
||||
|
||||
/datum/uplink_item/item/log_icon()
|
||||
var/obj/I = path
|
||||
return "\icon[I]"
|
||||
|
||||
/*************
|
||||
* Ammunition *
|
||||
*************/
|
||||
/datum/uplink_item/item/ammo
|
||||
item_cost = 2
|
||||
category = /datum/uplink_category/ammunition
|
||||
|
||||
/datum/uplink_item/item/ammo/a357
|
||||
name = ".357"
|
||||
path = /obj/item/ammo_magazine/a357
|
||||
|
||||
/datum/uplink_item/item/ammo/mc9mm
|
||||
name = "9mm"
|
||||
path = /obj/item/ammo_magazine/mc9mm
|
||||
|
||||
/datum/uplink_item/item/ammo/darts
|
||||
name = "Darts"
|
||||
path = /obj/item/ammo_magazine/chemdart
|
||||
|
||||
/datum/uplink_item/item/ammo/sniperammo
|
||||
name = "14.5mm"
|
||||
path = /obj/item/weapon/storage/box/sniperammo
|
||||
|
||||
/datum/uplink_item/item/ammo/a10mm
|
||||
name = "10mm"
|
||||
path = /obj/item/ammo_magazine/a10mm
|
||||
|
||||
/datum/uplink_item/item/ammo/a762
|
||||
name = "7.62mm"
|
||||
path = /obj/item/ammo_magazine/a762
|
||||
|
||||
/***************************************
|
||||
* Highly Visible and Dangerous Weapons *
|
||||
***************************************/
|
||||
/datum/uplink_item/item/visible_weapons
|
||||
category = /datum/uplink_category/visible_weapons
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/energy_sword
|
||||
name = "Energy Sword"
|
||||
item_cost = 4
|
||||
path = /obj/item/weapon/melee/energy/sword
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/dartgun
|
||||
name = "Dart Gun"
|
||||
item_cost = 5
|
||||
path = /obj/item/weapon/gun/projectile/dartgun
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/crossbow
|
||||
name = "Energy Crossbow"
|
||||
item_cost = 5
|
||||
path = /obj/item/weapon/gun/energy/crossbow
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/g9mm
|
||||
name = "Silenced 9mm"
|
||||
item_cost = 5
|
||||
path = /obj/item/weapon/storage/box/syndie_kit/g9mm
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/riggedlaser
|
||||
name = "Exosuit Rigged Laser"
|
||||
item_cost = 6
|
||||
path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/riggedlaser
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/revolver
|
||||
name = "Revolver"
|
||||
item_cost = 6
|
||||
path = /obj/item/weapon/gun/projectile/revolver
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/heavysniper
|
||||
name = "Anti-materiel Rifle"
|
||||
item_cost = DEFAULT_TELECRYSTAL_AMOUNT
|
||||
path = /obj/item/weapon/gun/projectile/heavysniper
|
||||
|
||||
//These are for traitors (or other antags, perhaps) to have the option of purchasing some merc gear.
|
||||
/datum/uplink_item/item/visible_weapons/submachinegun
|
||||
name = "Submachine Gun"
|
||||
item_cost = 6
|
||||
path = /obj/item/weapon/gun/projectile/automatic/c20r
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/assaultrifle
|
||||
name = "Assault Rifle"
|
||||
item_cost = 7
|
||||
path = /obj/item/weapon/gun/projectile/automatic/sts35
|
||||
|
||||
/*************************************
|
||||
* Stealthy and Inconspicuous Weapons *
|
||||
*************************************/
|
||||
/datum/uplink_item/item/stealthy_weapons
|
||||
category = /datum/uplink_category/stealthy_weapons
|
||||
|
||||
/datum/uplink_item/item/stealthy_weapons/soap
|
||||
name = "Subversive Soap"
|
||||
item_cost = 1
|
||||
path = /obj/item/weapon/soap/syndie
|
||||
|
||||
/datum/uplink_item/item/stealthy_weapons/concealed_cane
|
||||
name = "Concealed Cane Sword"
|
||||
item_cost = 1
|
||||
path = /obj/item/weapon/cane/concealed
|
||||
|
||||
/datum/uplink_item/item/stealthy_weapons/detomatix
|
||||
name = "Detomatix PDA Cartridge"
|
||||
item_cost = 3
|
||||
path = /obj/item/weapon/cartridge/syndicate
|
||||
|
||||
/datum/uplink_item/item/stealthy_weapons/parapen
|
||||
name = "Paralysis Pen"
|
||||
item_cost = 3
|
||||
path = /obj/item/weapon/pen/reagent/paralysis
|
||||
|
||||
/datum/uplink_item/item/stealthy_weapons/cigarette_kit
|
||||
name = "Cigarette Kit"
|
||||
item_cost = 3
|
||||
path = /obj/item/weapon/storage/box/syndie_kit/cigarette
|
||||
|
||||
/datum/uplink_item/item/stealthy_weapons/random_toxin
|
||||
name = "Random Toxin - Beaker"
|
||||
item_cost = 3
|
||||
path = /obj/item/weapon/storage/box/syndie_kit/toxin
|
||||
|
||||
/*******************************
|
||||
* Stealth and Camouflage Items *
|
||||
*******************************/
|
||||
/datum/uplink_item/item/stealth_items
|
||||
category = /datum/uplink_category/stealth_items
|
||||
|
||||
/datum/uplink_item/item/stealth_items/id
|
||||
name = "Agent ID card"
|
||||
item_cost = 2
|
||||
path = /obj/item/weapon/card/id/syndicate
|
||||
|
||||
/datum/uplink_item/item/stealth_items/syndigaloshes
|
||||
name = "No-Slip Shoes"
|
||||
item_cost = 2
|
||||
path = /obj/item/clothing/shoes/syndigaloshes
|
||||
|
||||
/datum/uplink_item/item/stealth_items/spy
|
||||
name = "Bug Kit"
|
||||
item_cost = 2
|
||||
path = /obj/item/weapon/storage/box/syndie_kit/spy
|
||||
|
||||
/datum/uplink_item/item/stealth_items/chameleon_kit
|
||||
name = "Chameleon Kit"
|
||||
item_cost = 3
|
||||
path = /obj/item/weapon/storage/box/syndie_kit/chameleon
|
||||
|
||||
/datum/uplink_item/item/stealth_items/chameleon_projector
|
||||
name = "Chameleon-Projector"
|
||||
item_cost = 4
|
||||
path = /obj/item/device/chameleon
|
||||
|
||||
/datum/uplink_item/item/stealth_items/chameleon_projector
|
||||
name = "Chameleon-Projector"
|
||||
item_cost = 4
|
||||
path = /obj/item/device/chameleon
|
||||
|
||||
/datum/uplink_item/item/stealth_items/voice
|
||||
name = "Voice Changer"
|
||||
item_cost = 4
|
||||
path = /obj/item/clothing/mask/gas/voice
|
||||
|
||||
/datum/uplink_item/item/stealth_items/camera_floppy
|
||||
name = "Camera Network Access - Floppy"
|
||||
item_cost = 6
|
||||
path = /obj/item/weapon/disk/file/cameras/syndicate
|
||||
|
||||
/********
|
||||
* Armor *
|
||||
********/
|
||||
/datum/uplink_item/item/armor
|
||||
category = /datum/uplink_category/armor
|
||||
|
||||
/datum/uplink_item/item/armor/combat
|
||||
name = "Combat Armor Set"
|
||||
item_cost = 5
|
||||
path = /obj/item/weapon/storage/box/syndie_kit/combat_armor
|
||||
|
||||
/datum/uplink_item/item/armor/heavy_vest
|
||||
name = "Heavy Armor Vest"
|
||||
item_cost = 4
|
||||
path = /obj/item/clothing/suit/storage/vest/heavy/merc
|
||||
|
||||
/********************
|
||||
* Devices and Tools *
|
||||
********************/
|
||||
/datum/uplink_item/item/tools
|
||||
category = /datum/uplink_category/tools
|
||||
|
||||
/datum/uplink_item/item/tools/toolbox
|
||||
name = "Fully Loaded Toolbox"
|
||||
item_cost = 1
|
||||
path = /obj/item/weapon/storage/toolbox/syndicate
|
||||
|
||||
/datum/uplink_item/item/tools/plastique
|
||||
name = "C-4 (Destroys walls)"
|
||||
item_cost = 2
|
||||
path = /obj/item/weapon/plastique
|
||||
|
||||
/datum/uplink_item/item/tools/encryptionkey_radio
|
||||
name = "Encrypted Radio Channel Key"
|
||||
item_cost = 2
|
||||
path = /obj/item/device/encryptionkey/syndicate
|
||||
|
||||
/datum/uplink_item/item/tools/encryptionkey_binary
|
||||
name = "Binary Translator Key"
|
||||
item_cost = 3
|
||||
path = /obj/item/device/encryptionkey/binary
|
||||
|
||||
/datum/uplink_item/item/tools/emag
|
||||
name = "Cryptographic Sequencer"
|
||||
item_cost = 3
|
||||
path = /obj/item/weapon/card/emag
|
||||
|
||||
/datum/uplink_item/item/tools/clerical
|
||||
name = "Morphic Clerical Kit"
|
||||
item_cost = 3
|
||||
path = /obj/item/weapon/storage/box/syndie_kit/clerical
|
||||
|
||||
/datum/uplink_item/item/tools/space_suit
|
||||
name = "Space Suit"
|
||||
item_cost = 3
|
||||
path = /obj/item/weapon/storage/box/syndie_kit/space
|
||||
|
||||
/datum/uplink_item/item/tools/thermal
|
||||
name = "Thermal Imaging Glasses"
|
||||
item_cost = 3
|
||||
path = /obj/item/clothing/glasses/thermal/syndi
|
||||
|
||||
/datum/uplink_item/item/tools/powersink
|
||||
name = "Powersink (DANGER!)"
|
||||
item_cost = 5
|
||||
path = /obj/item/device/powersink
|
||||
|
||||
/datum/uplink_item/item/tools/ai_module
|
||||
name = "Hacked AI Upload Module"
|
||||
item_cost = 7
|
||||
path = /obj/item/weapon/aiModule/syndicate
|
||||
|
||||
/datum/uplink_item/item/tools/supply_beacon
|
||||
name = "Hacked Supply Beacon (DANGER!)"
|
||||
item_cost = 7
|
||||
path = /obj/item/supply_beacon
|
||||
|
||||
/datum/uplink_item/item/tools/teleporter
|
||||
name = "Teleporter Circuit Board"
|
||||
item_cost = 20
|
||||
path = /obj/item/weapon/circuitboard/teleporter
|
||||
|
||||
/datum/uplink_item/item/tools/teleporter/New()
|
||||
..()
|
||||
antag_roles = list(MODE_MERCENARY)
|
||||
|
||||
/datum/uplink_item/item/tools/money
|
||||
name = "Operations Funding"
|
||||
item_cost = 3
|
||||
path = /obj/item/weapon/storage/secure/briefcase/money
|
||||
desc = "A briefcase with 10,000 untraceable thalers for funding your sneaky activities."
|
||||
|
||||
/datum/uplink_item/item/tools/crystal
|
||||
name = "Tradable Crystal"
|
||||
item_cost = 1
|
||||
path = /obj/item/device/telecrystal
|
||||
desc = "A telecrystal that can be transferred from one user to another. Be sure not to give it to just anyone."
|
||||
|
||||
/***********
|
||||
* Implants *
|
||||
***********/
|
||||
/datum/uplink_item/item/implants
|
||||
category = /datum/uplink_category/implants
|
||||
|
||||
/datum/uplink_item/item/implants/imp_freedom
|
||||
name = "Freedom Implant"
|
||||
item_cost = 3
|
||||
path = /obj/item/weapon/storage/box/syndie_kit/imp_freedom
|
||||
|
||||
/datum/uplink_item/item/implants/imp_compress
|
||||
name = "Compressed Matter Implant"
|
||||
item_cost = 4
|
||||
path = /obj/item/weapon/storage/box/syndie_kit/imp_compress
|
||||
|
||||
/datum/uplink_item/item/implants/imp_explosive
|
||||
name = "Explosive Implant (DANGER!)"
|
||||
item_cost = 6
|
||||
path = /obj/item/weapon/storage/box/syndie_kit/imp_explosive
|
||||
|
||||
/datum/uplink_item/item/implants/imp_uplink
|
||||
name = "Uplink Implant" //Original name: "Uplink Implant (Contains 5 Telecrystals)"
|
||||
item_cost = 5 //Original cost: 10
|
||||
path = /obj/item/weapon/storage/box/syndie_kit/imp_uplink
|
||||
|
||||
/**********
|
||||
* Medical *
|
||||
**********/
|
||||
/datum/uplink_item/item/medical
|
||||
category = /datum/uplink_category/medical
|
||||
|
||||
/datum/uplink_item/item/medical/sinpockets
|
||||
name = "Box of Sin-Pockets"
|
||||
item_cost = 1
|
||||
path = /obj/item/weapon/storage/box/sinpockets
|
||||
|
||||
/datum/uplink_item/item/medical/surgery
|
||||
name = "Surgery kit"
|
||||
item_cost = 6
|
||||
path = /obj/item/weapon/storage/firstaid/surgery
|
||||
|
||||
/datum/uplink_item/item/medical/combat
|
||||
name = "Combat medical kit"
|
||||
item_cost = 6
|
||||
path = /obj/item/weapon/storage/firstaid/combat
|
||||
|
||||
/*******************
|
||||
* Hardsuit Modules *
|
||||
*******************/
|
||||
/datum/uplink_item/item/hardsuit_modules
|
||||
category = /datum/uplink_category/hardsuit_modules
|
||||
|
||||
/datum/uplink_item/item/hardsuit_modules/thermal
|
||||
name = "Thermal Scanner"
|
||||
item_cost = 2
|
||||
path = /obj/item/rig_module/vision/thermal
|
||||
|
||||
/datum/uplink_item/item/hardsuit_modules/energy_net
|
||||
name = "Net Projector"
|
||||
item_cost = 3
|
||||
path = /obj/item/rig_module/fabricator/energy_net
|
||||
|
||||
/datum/uplink_item/item/ewar_voice
|
||||
name = "Electrowarfare Suite and Voice Synthesiser"
|
||||
item_cost = 4
|
||||
path = /obj/item/weapon/storage/box/syndie_kit/ewar_voice
|
||||
|
||||
/datum/uplink_item/item/hardsuit_modules/maneuvering_jets
|
||||
name = "Maneuvering Jets"
|
||||
item_cost = 4
|
||||
path = /obj/item/rig_module/maneuvering_jets
|
||||
|
||||
/datum/uplink_item/item/hardsuit_modules/egun
|
||||
name = "Mounted Energy Gun"
|
||||
item_cost = 6
|
||||
path = /obj/item/rig_module/mounted/egun
|
||||
|
||||
/datum/uplink_item/item/hardsuit_modules/power_sink
|
||||
name = "Power Sink"
|
||||
item_cost = 6
|
||||
path = /obj/item/rig_module/power_sink
|
||||
|
||||
/datum/uplink_item/item/hardsuit_modules/laser_canon
|
||||
name = "Mounted Laser Cannon"
|
||||
item_cost = 8
|
||||
path = /obj/item/rig_module/mounted
|
||||
|
||||
/***********
|
||||
* Grenades *
|
||||
************/
|
||||
/datum/uplink_item/item/grenades
|
||||
category = /datum/uplink_category/grenades
|
||||
|
||||
/datum/uplink_item/item/grenades/anti_photon
|
||||
name = "5xPhoton Disruption Grenades"
|
||||
item_cost = 2
|
||||
path = /obj/item/weapon/storage/box/anti_photons
|
||||
|
||||
/datum/uplink_item/item/grenades/emp
|
||||
name = "5xEMP Grenades"
|
||||
item_cost = 3
|
||||
path = /obj/item/weapon/storage/box/emps
|
||||
|
||||
/datum/uplink_item/item/grenades/smoke
|
||||
name = "5xSmoke Grenades"
|
||||
item_cost = 2
|
||||
path = /obj/item/weapon/storage/box/smokes
|
||||
|
||||
/************
|
||||
* Badassery *
|
||||
************/
|
||||
/datum/uplink_item/item/badassery
|
||||
category = /datum/uplink_category/badassery
|
||||
|
||||
/datum/uplink_item/item/badassery/balloon
|
||||
name = "For showing that You Are The BOSS (Useless Balloon)"
|
||||
item_cost = DEFAULT_TELECRYSTAL_AMOUNT
|
||||
path = /obj/item/toy/syndicateballoon
|
||||
|
||||
/datum/uplink_item/item/badassery/balloon/NT
|
||||
name = "For showing that you love NT SOO much (Useless Balloon)"
|
||||
path = /obj/item/toy/nanotrasenballoon
|
||||
|
||||
/**************
|
||||
* Random Item *
|
||||
**************/
|
||||
/datum/uplink_item/item/badassery/random_one
|
||||
name = "Random Item"
|
||||
desc = "Buys you one random item."
|
||||
|
||||
/datum/uplink_item/item/badassery/random_one/buy(var/obj/item/device/uplink/U, var/mob/user)
|
||||
var/datum/uplink_item/item = default_uplink_selection.get_random_item(U.uses)
|
||||
return item.buy(U, user)
|
||||
|
||||
/datum/uplink_item/item/badassery/random_one/can_buy(obj/item/device/uplink/U)
|
||||
return default_uplink_selection.get_random_item(U.uses, U) != null
|
||||
|
||||
/datum/uplink_item/item/badassery/random_many
|
||||
name = "Random Items"
|
||||
desc = "Buys you as many random items you can afford. Convenient packaging NOT included."
|
||||
|
||||
/datum/uplink_item/item/badassery/random_many/cost(var/telecrystals)
|
||||
return max(1, telecrystals)
|
||||
|
||||
/datum/uplink_item/item/badassery/random_many/get_goods(var/obj/item/device/uplink/U, var/loc)
|
||||
var/list/bought_items = list()
|
||||
for(var/datum/uplink_item/UI in get_random_uplink_items(U, U.uses, loc))
|
||||
UI.purchase_log(U)
|
||||
var/obj/item/I = UI.get_goods(U, loc)
|
||||
if(istype(I))
|
||||
bought_items += I
|
||||
|
||||
return bought_items
|
||||
|
||||
/datum/uplink_item/item/badassery/random_many/purchase_log(obj/item/device/uplink/U)
|
||||
feedback_add_details("traitor_uplink_items_bought", "[src]")
|
||||
log_and_message_admins("used \the [U.loc] to buy \a [src]")
|
||||
|
||||
/****************
|
||||
* Surplus Crate *
|
||||
****************/
|
||||
/datum/uplink_item/item/badassery/surplus
|
||||
name = "Surplus Crate"
|
||||
item_cost = 40
|
||||
var/item_worth = 60
|
||||
var/icon
|
||||
|
||||
/datum/uplink_item/item/badassery/surplus/New()
|
||||
..()
|
||||
antag_roles = list(MODE_MERCENARY)
|
||||
desc = "A crate containing [item_worth] telecrystal\s worth of surplus leftovers."
|
||||
|
||||
/datum/uplink_item/item/badassery/surplus/get_goods(var/obj/item/device/uplink/U, var/loc)
|
||||
var/obj/structure/largecrate/C = new(loc)
|
||||
var/random_items = get_random_uplink_items(null, item_worth, C)
|
||||
for(var/datum/uplink_item/I in random_items)
|
||||
I.purchase_log(U)
|
||||
I.get_goods(U, C)
|
||||
|
||||
return C
|
||||
|
||||
/datum/uplink_item/item/badassery/surplus/log_icon()
|
||||
if(!icon)
|
||||
var/obj/structure/largecrate/C = /obj/structure/largecrate
|
||||
icon = image(initial(C.icon), initial(C.icon_state))
|
||||
|
||||
return "\icon[icon]"
|
||||
|
||||
/********************************
|
||||
* *
|
||||
* Abstract Uplink Entries *
|
||||
* *
|
||||
********************************/
|
||||
var/image/default_abstract_uplink_icon
|
||||
/datum/uplink_item/abstract/log_icon()
|
||||
if(!default_abstract_uplink_icon)
|
||||
default_abstract_uplink_icon = image('icons/obj/pda.dmi', "pda-syn")
|
||||
|
||||
return "\icon[default_abstract_uplink_icon]"
|
||||
|
||||
/****************
|
||||
* Announcements *
|
||||
*****************/
|
||||
/datum/uplink_item/abstract/announcements
|
||||
category = /datum/uplink_category/services
|
||||
|
||||
/datum/uplink_item/abstract/announcements/buy(var/obj/item/device/uplink/U, var/mob/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
log_and_message_admins("has triggered a falsified [src]", user)
|
||||
|
||||
/datum/uplink_item/abstract/announcements/fake_centcom
|
||||
item_cost = DEFAULT_TELECRYSTAL_AMOUNT / 2
|
||||
|
||||
/datum/uplink_item/abstract/announcements/fake_centcom/New()
|
||||
..()
|
||||
name = "[command_name()] Update Announcement"
|
||||
desc = "Causes a falsified [command_name()] Update. Triggers immediately after supplying additional data."
|
||||
antag_roles = list(MODE_MERCENARY)
|
||||
|
||||
/datum/uplink_item/abstract/announcements/fake_centcom/get_goods(var/obj/item/device/uplink/U, var/loc, var/mob/user, var/list/args)
|
||||
command_announcement.Announce(args.["message"], args.["title"])
|
||||
return 1
|
||||
|
||||
/datum/uplink_item/abstract/announcements/fake_crew_arrival
|
||||
name = "Crew Arrival Announcement/Records"
|
||||
desc = "Creates a fake crew arrival announcement as well as fake crew records, using your current appearance (including held items!) and worn id card. Trigger with care!"
|
||||
item_cost = 4
|
||||
|
||||
/datum/uplink_item/abstract/announcements/fake_crew_arrival/New()
|
||||
..()
|
||||
antag_roles = list(MODE_MERCENARY)
|
||||
|
||||
/datum/uplink_item/abstract/announcements/fake_crew_arrival/get_goods(var/obj/item/device/uplink/U, var/loc, var/mob/user, var/list/args)
|
||||
if(!user)
|
||||
return 0
|
||||
|
||||
var/obj/item/weapon/card/id/I = user.GetIdCard()
|
||||
var/datum/data/record/random_general_record
|
||||
var/datum/data/record/random_medical_record
|
||||
if(data_core.general.len)
|
||||
random_general_record = pick(data_core.general)
|
||||
random_medical_record = find_medical_record("id", random_general_record.fields["id"])
|
||||
|
||||
var/datum/data/record/general = data_core.CreateGeneralRecord(user)
|
||||
if(I)
|
||||
general.fields["age"] = I.age
|
||||
general.fields["rank"] = I.assignment
|
||||
general.fields["real_rank"] = I.assignment
|
||||
general.fields["name"] = I.registered_name
|
||||
general.fields["sex"] = I.sex
|
||||
else
|
||||
var/mob/living/carbon/human/H
|
||||
if(istype(user,/mob/living/carbon/human))
|
||||
H = user
|
||||
general.fields["age"] = H.age
|
||||
else
|
||||
general.fields["age"] = initial(H.age)
|
||||
var/assignment = GetAssignment(user)
|
||||
general.fields["rank"] = assignment
|
||||
general.fields["real_rank"] = assignment
|
||||
general.fields["name"] = user.real_name
|
||||
general.fields["sex"] = capitalize(user.gender)
|
||||
|
||||
general.fields["species"] = user.get_species()
|
||||
var/datum/data/record/medical = data_core.CreateMedicalRecord(general.fields["name"], general.fields["id"])
|
||||
data_core.CreateSecurityRecord(general.fields["name"], general.fields["id"])
|
||||
|
||||
if(!random_general_record)
|
||||
general.fields["citizenship"] = random_general_record.fields["citizenship"]
|
||||
general.fields["faction"] = random_general_record.fields["faction"]
|
||||
general.fields["fingerprint"] = random_general_record.fields["fingerprint"]
|
||||
general.fields["home_system"] = random_general_record.fields["home_system"]
|
||||
general.fields["religion"] = random_general_record.fields["religion"]
|
||||
if(random_medical_record)
|
||||
medical.fields["b_type"] = random_medical_record.fields["b_type"]
|
||||
medical.fields["b_dna"] = random_medical_record.fields["b_type"]
|
||||
|
||||
if(I)
|
||||
general.fields["fingerprint"] = I.fingerprint_hash
|
||||
medical.fields["b_type"] = I.blood_type
|
||||
medical.fields["b_dna"] = I.dna_hash
|
||||
|
||||
AnnounceArrivalSimple(general.fields["name"], general.fields["rank"])
|
||||
return 1
|
||||
|
||||
/datum/uplink_item/abstract/announcements/fake_ion_storm
|
||||
name = "Ion Storm Announcement"
|
||||
desc = "Interferes with the station's ion sensors. Triggers immediately upon investment."
|
||||
item_cost = 1
|
||||
|
||||
/datum/uplink_item/abstract/announcements/fake_ion_storm/get_goods(var/obj/item/device/uplink/U, var/loc)
|
||||
ion_storm_announcement()
|
||||
return 1
|
||||
|
||||
/datum/uplink_item/abstract/announcements/fake_radiation
|
||||
name = "Radiation Storm Announcement"
|
||||
desc = "Interferes with the station's radiation sensors. Triggers immediately upon investment."
|
||||
item_cost = 3
|
||||
|
||||
/datum/uplink_item/abstract/announcements/fake_radiation/get_goods(var/obj/item/device/uplink/U, var/loc)
|
||||
var/datum/event_meta/EM = new(EVENT_LEVEL_MUNDANE, "Fake Radiation Storm", add_to_queue = 0)
|
||||
new/datum/event/radiation_storm/syndicate(EM)
|
||||
return 1
|
||||
|
||||
|
||||
/****************
|
||||
* Support procs *
|
||||
****************/
|
||||
/proc/get_random_uplink_items(var/obj/item/device/uplink/U, var/remaining_TC, var/loc)
|
||||
var/list/bought_items = list()
|
||||
while(remaining_TC)
|
||||
var/datum/uplink_item/I = default_uplink_selection.get_random_item(remaining_TC, U, bought_items)
|
||||
if(!I)
|
||||
break
|
||||
bought_items += I
|
||||
remaining_TC -= I.cost(remaining_TC)
|
||||
|
||||
return bought_items
|
||||
@@ -27,7 +27,7 @@ var/datum/uplink_random_selection/default_uplink_selection = new/datum/uplink_ra
|
||||
if(!prob(RI.keep_probability))
|
||||
continue
|
||||
var/datum/uplink_item/I = uplink.items_assoc[RI.uplink_item]
|
||||
if(I.cost(telecrystals) > telecrystals)
|
||||
if(I.cost(telecrystals, U) > telecrystals)
|
||||
continue
|
||||
if(bought_items && (I in bought_items) && !prob(RI.reselect_probability))
|
||||
continue
|
||||
@@ -38,7 +38,7 @@ var/datum/uplink_random_selection/default_uplink_selection = new/datum/uplink_ra
|
||||
/datum/uplink_random_selection/default/New()
|
||||
..()
|
||||
|
||||
items += new/datum/uplink_random_item(/datum/uplink_item/item/visible_weapons/g9mm)
|
||||
items += new/datum/uplink_random_item(/datum/uplink_item/item/visible_weapons/silenced_45)
|
||||
items += new/datum/uplink_random_item(/datum/uplink_item/item/ammo/mc9mm)
|
||||
items += new/datum/uplink_random_item(/datum/uplink_item/item/visible_weapons/revolver)
|
||||
items += new/datum/uplink_random_item(/datum/uplink_item/item/ammo/a357)
|
||||
|
||||
@@ -72,7 +72,8 @@
|
||||
return
|
||||
var/obj/item/weapon/spacecash/S = W
|
||||
user.visible_message("<span class='notice'>[user] puts [S.worth] [S.worth > 1 ? "thalers" : "thaler"] into \the [src].</span>")
|
||||
user.removeItem(S, src)
|
||||
user.drop_from_inventory(S)
|
||||
S.loc = src
|
||||
update_icon()
|
||||
|
||||
/obj/item/glass_jar/update_icon() // Also updates name and desc
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
if(!istype(user))
|
||||
var/mob/living/temp = user
|
||||
if(istype(temp))
|
||||
temp.removeItem(src, force = 1)
|
||||
temp.drop_from_inventory(src)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -118,7 +118,7 @@
|
||||
B.loc = get_turf(src)
|
||||
user << "<span class='notice'>You armed the robot frame.</span>"
|
||||
if (user.get_inactive_hand()==src)
|
||||
user.removeItem(src)
|
||||
user.remove_from_mob(src)
|
||||
user.put_in_inactive_hand(B)
|
||||
qdel(src)
|
||||
else
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
name = "medical pack"
|
||||
singular_name = "medical pack"
|
||||
icon = 'icons/obj/items.dmi'
|
||||
amount = 5
|
||||
max_amount = 5
|
||||
amount = 10
|
||||
max_amount = 10
|
||||
w_class = 2
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
@@ -24,6 +24,10 @@
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
|
||||
|
||||
if(!affecting)
|
||||
user << "<span class='warning'>No body part there to work on!</span>"
|
||||
return 1
|
||||
|
||||
if(affecting.organ_tag == BP_HEAD)
|
||||
if(H.head && istype(H.head,/obj/item/clothing/head/helmet/space))
|
||||
user << "<span class='warning'>You can't apply [src] through [H.head]!</span>"
|
||||
@@ -33,7 +37,7 @@
|
||||
user << "<span class='warning'>You can't apply [src] through [H.wear_suit]!</span>"
|
||||
return 1
|
||||
|
||||
if(affecting.status & ORGAN_ROBOT)
|
||||
if(affecting.robotic >= ORGAN_ROBOT)
|
||||
user << "<span class='warning'>This isn't useful at all on a robotic limb..</span>"
|
||||
return 1
|
||||
|
||||
@@ -65,24 +69,43 @@
|
||||
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
|
||||
|
||||
if(affecting.open == 0)
|
||||
if(!affecting.bandage())
|
||||
if(affecting.is_bandaged())
|
||||
user << "<span class='warning'>The wounds on [M]'s [affecting.name] have already been bandaged.</span>"
|
||||
return 1
|
||||
else
|
||||
user.visible_message("<span class='notice'>\The [user] starts treating [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You start treating [M]'s [affecting.name].</span>" )
|
||||
var/used = 0
|
||||
for (var/datum/wound/W in affecting.wounds)
|
||||
if (W.internal)
|
||||
continue
|
||||
if(W.bandaged)
|
||||
continue
|
||||
if(used == amount)
|
||||
break
|
||||
if(!do_mob(user, M, W.damage/5))
|
||||
user << "<span class='notice'>You must stand still to bandage wounds.</span>"
|
||||
break
|
||||
|
||||
if (W.current_stage <= W.max_bleeding_stage)
|
||||
user.visible_message("<span class='notice'>\The [user] bandages [W.desc] on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You bandage [W.desc] on [M]'s [affecting.name].</span>" )
|
||||
user.visible_message("<span class='notice'>\The [user] bandages \a [W.desc] on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You bandage \a [W.desc] on [M]'s [affecting.name].</span>" )
|
||||
//H.add_side_effect("Itch")
|
||||
else if (istype(W,/datum/wound/bruise))
|
||||
user.visible_message("<span class='notice'>\The [user] places a bruise patch over [W.desc] on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You place a bruise patch over [W.desc] on [M]'s [affecting.name].</span>" )
|
||||
else if (W.damage_type == BRUISE)
|
||||
user.visible_message("<span class='notice'>\The [user] places a bruise patch over \a [W.desc] on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You place a bruise patch over \a [W.desc] on [M]'s [affecting.name].</span>" )
|
||||
else
|
||||
user.visible_message("<span class='notice'>\The [user] places a bandaid over [W.desc] on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You place a bandaid over [W.desc] on [M]'s [affecting.name].</span>" )
|
||||
use(1)
|
||||
user.visible_message("<span class='notice'>\The [user] places a bandaid over \a [W.desc] on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You place a bandaid over \a [W.desc] on [M]'s [affecting.name].</span>" )
|
||||
W.bandage()
|
||||
used++
|
||||
affecting.update_damages()
|
||||
if(used == amount)
|
||||
if(affecting.is_bandaged())
|
||||
user << "<span class='warning'>\The [src] is used up.</span>"
|
||||
else
|
||||
user << "<span class='warning'>\The [src] is used up, but there are more wounds to treat on \the [affecting.name].</span>"
|
||||
use(used)
|
||||
else
|
||||
if (can_operate(H)) //Checks if mob is lying down on table for surgery
|
||||
if (do_surgery(H,user,src))
|
||||
@@ -108,13 +131,19 @@
|
||||
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
|
||||
|
||||
if(affecting.open == 0)
|
||||
if(!affecting.salve())
|
||||
if(affecting.is_salved())
|
||||
user << "<span class='warning'>The wounds on [M]'s [affecting.name] have already been salved.</span>"
|
||||
return 1
|
||||
else
|
||||
user.visible_message("<span class='notice'>[user] salves wounds on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You salve wounds on [M]'s [affecting.name].</span>" )
|
||||
user.visible_message("<span class='notice'>\The [user] starts salving wounds on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You start salving the wounds on [M]'s [affecting.name].</span>" )
|
||||
if(!do_mob(user, M, 10))
|
||||
user << "<span class='notice'>You must stand still to salve wounds.</span>"
|
||||
return 1
|
||||
user.visible_message("<span class='notice'>[user] salved wounds on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You salved wounds on [M]'s [affecting.name].</span>" )
|
||||
use(1)
|
||||
affecting.salve()
|
||||
else
|
||||
if (can_operate(H)) //Checks if mob is lying down on table for surgery
|
||||
if (do_surgery(H,user,src))
|
||||
@@ -127,7 +156,7 @@
|
||||
singular_name = "advanced trauma kit"
|
||||
desc = "An advanced trauma kit for severe injuries."
|
||||
icon_state = "traumakit"
|
||||
heal_brute = 12
|
||||
heal_brute = 0
|
||||
origin_tech = list(TECH_BIO = 1)
|
||||
|
||||
/obj/item/stack/medical/advanced/bruise_pack/attack(mob/living/carbon/M as mob, mob/user as mob)
|
||||
@@ -139,29 +168,43 @@
|
||||
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
|
||||
|
||||
if(affecting.open == 0)
|
||||
var/bandaged = affecting.bandage()
|
||||
var/disinfected = affecting.disinfect()
|
||||
|
||||
if(!(bandaged || disinfected))
|
||||
if(affecting.is_bandaged() && affecting.is_disinfected())
|
||||
user << "<span class='warning'>The wounds on [M]'s [affecting.name] have already been treated.</span>"
|
||||
return 1
|
||||
else
|
||||
user.visible_message("<span class='notice'>\The [user] starts treating [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You start treating [M]'s [affecting.name].</span>" )
|
||||
var/used = 0
|
||||
for (var/datum/wound/W in affecting.wounds)
|
||||
if (W.internal)
|
||||
continue
|
||||
if (W.bandaged && W.disinfected)
|
||||
continue
|
||||
if(used == amount)
|
||||
break
|
||||
if(!do_mob(user, M, W.damage/5))
|
||||
user << "<span class='notice'>You must stand still to bandage wounds.</span>"
|
||||
break
|
||||
if (W.current_stage <= W.max_bleeding_stage)
|
||||
user.visible_message("<span class='notice'>\The [user] cleans [W.desc] on [M]'s [affecting.name] and seals the edges with bioglue.</span>", \
|
||||
"<span class='notice'>You clean and seal [W.desc] on [M]'s [affecting.name].</span>" )
|
||||
//H.add_side_effect("Itch")
|
||||
else if (istype(W,/datum/wound/bruise))
|
||||
user.visible_message("<span class='notice'>\The [user] places a medical patch over [W.desc] on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You place a medical patch over [W.desc] on [M]'s [affecting.name].</span>" )
|
||||
user.visible_message("<span class='notice'>\The [user] cleans \a [W.desc] on [M]'s [affecting.name] and seals the edges with bioglue.</span>", \
|
||||
"<span class='notice'>You clean and seal \a [W.desc] on [M]'s [affecting.name].</span>" )
|
||||
else if (W.damage_type == BRUISE)
|
||||
user.visible_message("<span class='notice'>\The [user] places a medical patch over \a [W.desc] on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You place a medical patch over \a [W.desc] on [M]'s [affecting.name].</span>" )
|
||||
else
|
||||
user.visible_message("<span class='notice'>\The [user] smears some bioglue over [W.desc] on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You smear some bioglue over [W.desc] on [M]'s [affecting.name].</span>" )
|
||||
if (bandaged)
|
||||
affecting.heal_damage(heal_brute,0)
|
||||
use(1)
|
||||
user.visible_message("<span class='notice'>\The [user] smears some bioglue over \a [W.desc] on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You smear some bioglue over \a [W.desc] on [M]'s [affecting.name].</span>" )
|
||||
W.bandage()
|
||||
W.disinfect()
|
||||
W.heal_damage(heal_brute)
|
||||
used++
|
||||
affecting.update_damages()
|
||||
if(used == amount)
|
||||
if(affecting.is_bandaged())
|
||||
user << "<span class='warning'>\The [src] is used up.</span>"
|
||||
else
|
||||
user << "<span class='warning'>\The [src] is used up, but there are more wounds to treat on \the [affecting.name].</span>"
|
||||
use(used)
|
||||
else
|
||||
if (can_operate(H)) //Checks if mob is lying down on table for surgery
|
||||
if (do_surgery(H,user,src))
|
||||
@@ -174,7 +217,7 @@
|
||||
singular_name = "advanced burn kit"
|
||||
desc = "An advanced treatment kit for severe burns."
|
||||
icon_state = "burnkit"
|
||||
heal_burn = 12
|
||||
heal_burn = 0
|
||||
origin_tech = list(TECH_BIO = 1)
|
||||
|
||||
|
||||
@@ -187,14 +230,20 @@
|
||||
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
|
||||
|
||||
if(affecting.open == 0)
|
||||
if(!affecting.salve())
|
||||
if(affecting.is_salved())
|
||||
user << "<span class='warning'>The wounds on [M]'s [affecting.name] have already been salved.</span>"
|
||||
return 1
|
||||
else
|
||||
user.visible_message("<span class='notice'>\The [user] starts salving wounds on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You start salving the wounds on [M]'s [affecting.name].</span>" )
|
||||
if(!do_mob(user, M, 10))
|
||||
user << "<span class='notice'>You must stand still to salve wounds.</span>"
|
||||
return 1
|
||||
user.visible_message( "<span class='notice'>[user] covers wounds on [M]'s [affecting.name] with regenerative membrane.</span>", \
|
||||
"<span class='notice'>You cover wounds on [M]'s [affecting.name] with regenerative membrane.</span>" )
|
||||
affecting.heal_damage(0,heal_burn)
|
||||
use(1)
|
||||
affecting.salve()
|
||||
else
|
||||
if (can_operate(H)) //Checks if mob is lying down on table for surgery
|
||||
if (do_surgery(H,user,src))
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
var/obj/item/organ/external/S = H.get_organ(user.zone_sel.selecting)
|
||||
|
||||
if(S.open == 1)
|
||||
if (S && (S.status & ORGAN_ROBOT))
|
||||
if (S && (S.robotic >= ORGAN_ROBOT))
|
||||
if(S.get_damage())
|
||||
S.heal_damage(15, 15, robo_repair = 1)
|
||||
H.updatehealth()
|
||||
|
||||
@@ -187,7 +187,7 @@
|
||||
amount -= used
|
||||
if (amount <= 0)
|
||||
if(usr)
|
||||
usr.removeItem(src)
|
||||
usr.remove_from_mob(src)
|
||||
qdel(src) //should be safe to qdel immediately since if someone is still using this stack it will persist for a little while longer
|
||||
return 1
|
||||
else
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
* Grass
|
||||
* Wood
|
||||
* Carpet
|
||||
* Blue Carpet
|
||||
* Linoleum
|
||||
*/
|
||||
|
||||
@@ -70,6 +71,12 @@
|
||||
throw_range = 20
|
||||
flags = 0
|
||||
|
||||
/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/floor
|
||||
name = "floor tile"
|
||||
singular_name = "floor tile"
|
||||
|
||||
@@ -9,11 +9,15 @@
|
||||
|
||||
/obj/item/trash/raisins
|
||||
name = "\improper 4no raisins"
|
||||
icon_state= "4no_raisins"
|
||||
icon_state = "4no_raisins"
|
||||
|
||||
/obj/item/trash/candy
|
||||
name = "candy"
|
||||
icon_state= "candy"
|
||||
icon_state = "candy"
|
||||
|
||||
/obj/item/trash/candy/proteinbar
|
||||
name = "protein bar"
|
||||
icon_state = "proteinbar"
|
||||
|
||||
/obj/item/trash/cheesie
|
||||
name = "\improper Cheesie Honkers"
|
||||
|
||||
@@ -51,7 +51,8 @@
|
||||
if((stored_matter + 10) > 30)
|
||||
user << "<span class='notice'>The RCD can't hold any more matter-units.</span>"
|
||||
return
|
||||
user.deleteItem(W)
|
||||
user.drop_from_inventory(W)
|
||||
qdel(W)
|
||||
stored_matter += 10
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
|
||||
user << "<span class='notice'>The RCD now holds [stored_matter]/30 matter-units.</span>"
|
||||
|
||||
@@ -68,6 +68,7 @@
|
||||
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)
|
||||
@@ -87,6 +88,12 @@
|
||||
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
|
||||
usr << "<span class='notice'>You add \the [O] to \the [src]. Increasing the uses of \the [src] to [uses].</span>"
|
||||
qdel(O)
|
||||
|
||||
|
||||
/obj/item/weapon/card/id
|
||||
name = "identification card"
|
||||
|
||||
@@ -156,7 +156,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
var/mob/living/M = loc
|
||||
if (!nomessage)
|
||||
M << "<span class='notice'>Your [name] goes out.</span>"
|
||||
M.removeItem(src) //un-equip it so the overlays can update
|
||||
M.remove_from_mob(src) //un-equip it so the overlays can update
|
||||
M.update_inv_wear_mask(0)
|
||||
M.update_inv_l_hand(0)
|
||||
M.update_inv_r_hand(1)
|
||||
|
||||
@@ -36,6 +36,12 @@
|
||||
board_type = "atm"
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
|
||||
|
||||
/obj/item/weapon/circuitboard/request
|
||||
name = T_BOARD("reques console")
|
||||
build_path = /obj/machinery/requests_console
|
||||
board_type = "request"
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
|
||||
|
||||
//Alarm
|
||||
|
||||
/obj/item/weapon/circuitboard/firealarm
|
||||
@@ -70,6 +76,18 @@
|
||||
board_type = "holopad"
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
|
||||
|
||||
/obj/item/weapon/circuitboard/scanner_console
|
||||
name = T_BOARD("body scanner console")
|
||||
build_path = /obj/machinery/body_scanconsole
|
||||
board_type = "console"
|
||||
origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2)
|
||||
|
||||
/obj/item/weapon/circuitboard/sleeper_console
|
||||
name = T_BOARD("sleeper console")
|
||||
build_path = /obj/machinery/sleep_console
|
||||
board_type = "console"
|
||||
origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2)
|
||||
|
||||
//Machine
|
||||
|
||||
/obj/item/weapon/circuitboard/photocopier
|
||||
@@ -78,10 +96,10 @@
|
||||
board_type = "photocopier"
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/scanning_module" = 1,
|
||||
"/obj/item/weapon/stock_parts/motor" = 1,
|
||||
"/obj/item/weapon/stock_parts/micro_laser" = 1,
|
||||
"/obj/item/weapon/stock_parts/matter_bin" = 1)
|
||||
/obj/item/weapon/stock_parts/scanning_module = 1,
|
||||
/obj/item/weapon/stock_parts/motor = 1,
|
||||
/obj/item/weapon/stock_parts/micro_laser = 1,
|
||||
/obj/item/weapon/stock_parts/matter_bin = 1)
|
||||
|
||||
/obj/item/weapon/circuitboard/fax
|
||||
name = T_BOARD("fax")
|
||||
@@ -89,19 +107,19 @@
|
||||
board_type = "fax"
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/scanning_module" = 1,
|
||||
"/obj/item/weapon/stock_parts/motor" = 1,
|
||||
"/obj/item/weapon/stock_parts/micro_laser" = 1,
|
||||
"/obj/item/weapon/stock_parts/matter_bin" = 1)
|
||||
/obj/item/weapon/stock_parts/scanning_module = 1,
|
||||
/obj/item/weapon/stock_parts/motor = 1,
|
||||
/obj/item/weapon/stock_parts/micro_laser = 1,
|
||||
/obj/item/weapon/stock_parts/matter_bin = 1)
|
||||
|
||||
/obj/item/weapon/circuitboard/conveyor
|
||||
name = T_BOARD("conveyor")
|
||||
build_path = /obj/machinery/conveyor
|
||||
board_type = "conveyor"
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/gear" = 2,
|
||||
"/obj/item/weapon/stock_parts/motor" = 2,
|
||||
"/obj/item/stack/cable_coil" = 5)
|
||||
/obj/item/weapon/stock_parts/gear = 2,
|
||||
/obj/item/weapon/stock_parts/motor = 2,
|
||||
/obj/item/stack/cable_coil = 5)
|
||||
|
||||
/obj/item/weapon/circuitboard/microwave
|
||||
name = T_BOARD("microwave")
|
||||
@@ -109,29 +127,17 @@
|
||||
board_type = "microwave"
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/console_screen" = 1,
|
||||
"/obj/item/weapon/stock_parts/motor" = 1,
|
||||
"/obj/item/weapon/stock_parts/capacitor" = 1)
|
||||
|
||||
/obj/item/weapon/circuitboard/vending
|
||||
name = T_BOARD("vending")
|
||||
build_path = /obj/machinery/vending
|
||||
board_type = "vending"
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/console_screen" = 1,
|
||||
"/obj/item/weapon/stock_parts/motor" = 2,
|
||||
"/obj/item/weapon/stock_parts/spring" = 2,
|
||||
"/obj/item/stack/material/glass/reinforced" = 2)
|
||||
/obj/item/weapon/stock_parts/console_screen = 1,
|
||||
/obj/item/weapon/stock_parts/motor = 1,
|
||||
/obj/item/weapon/stock_parts/capacitor = 1)
|
||||
|
||||
/obj/item/weapon/circuitboard/recharger
|
||||
name = T_BOARD("recharger")
|
||||
build_path = /obj/machinery/recharger
|
||||
board_type = "recharger"
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/capacitor" = 1,
|
||||
"/obj/item/stack/cable_coil" = 5)
|
||||
/obj/item/weapon/stock_parts/capacitor = 1,
|
||||
/obj/item/stack/cable_coil = 5)
|
||||
|
||||
/obj/item/weapon/circuitboard/recharger/wrecharger
|
||||
name = T_BOARD("wall recharger")
|
||||
@@ -144,18 +150,78 @@
|
||||
board_type = "washing"
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/motor" = 1,
|
||||
"/obj/item/weapon/stock_parts/gear" = 2)
|
||||
/obj/item/weapon/stock_parts/motor = 1,
|
||||
/obj/item/weapon/stock_parts/gear = 2)
|
||||
|
||||
/obj/item/weapon/circuitboard/grinder
|
||||
name = T_BOARD("reagent grinder")
|
||||
build_path = /obj/machinery/reagentgrinder
|
||||
board_type = "grinder"
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/motor" = 1,
|
||||
"/obj/item/weapon/stock_parts/gear" = 1,
|
||||
"/obj/item/weapon/reagent_containers/glass/beaker/large" = 1)
|
||||
/obj/item/weapon/stock_parts/motor = 1,
|
||||
/obj/item/weapon/stock_parts/gear = 1,
|
||||
/obj/item/weapon/reagent_containers/glass/beaker/large = 1)
|
||||
|
||||
/obj/item/weapon/circuitboard/teleporter_hub
|
||||
name = T_BOARD("teleporter hub")
|
||||
build_path = /obj/machinery/teleport/hub
|
||||
board_type = "teleporter_hub"
|
||||
// origin_tech = list(TECH_DATA = 2, TECH_BLUESPACE = 4)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/scanning_module = 4,
|
||||
/obj/item/weapon/stock_parts/micro_laser = 4,
|
||||
/obj/item/stack/cable_coil = 10)
|
||||
|
||||
/obj/item/weapon/circuitboard/teleporter_station
|
||||
name = T_BOARD("teleporter station")
|
||||
build_path = /obj/machinery/teleport/station
|
||||
board_type = "teleporter_station"
|
||||
// origin_tech = list(TECH_DATA = 2, TECH_BLUESPACE = 3)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/console_screen = 1,
|
||||
/obj/item/weapon/stock_parts/capacitor = 2,
|
||||
/obj/item/stack/cable_coil = 10)
|
||||
|
||||
/obj/item/weapon/circuitboard/body_scanner
|
||||
name = T_BOARD("body scanner")
|
||||
build_path = /obj/machinery/bodyscanner
|
||||
board_type = "medpod"
|
||||
origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/scanning_module = 3,
|
||||
/obj/item/stack/material/glass/reinforced = 2)
|
||||
|
||||
/obj/item/weapon/circuitboard/sleeper
|
||||
name = T_BOARD("sleeper")
|
||||
build_path = /obj/machinery/sleeper
|
||||
board_type = "medpod"
|
||||
origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/scanning_module = 1,
|
||||
/obj/item/weapon/reagent_containers/glass/beaker = 3,
|
||||
/obj/item/weapon/reagent_containers/syringe = 3,
|
||||
/obj/item/stack/material/glass/reinforced = 2)
|
||||
|
||||
/obj/item/weapon/circuitboard/dna_analyzer
|
||||
name = T_BOARD("dna analyzer")
|
||||
build_path = /obj/machinery/dnaforensics
|
||||
board_type = "dna_analyzer"
|
||||
origin_tech = list(TECH_MAGNET = 4, TECH_BIO = 2, TECH_DATA = 2)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/scanning_module = 2,
|
||||
/obj/item/weapon/stock_parts/micro_laser = 1,
|
||||
/obj/item/weapon/stock_parts/console_screen = 1)
|
||||
|
||||
/obj/item/weapon/circuitboard/mass_driver
|
||||
name = T_BOARD("mass driver")
|
||||
build_path = /obj/machinery/mass_driver
|
||||
board_type = "massdriver"
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/gear = 2,
|
||||
/obj/item/weapon/stock_parts/motor = 2,
|
||||
/obj/item/weapon/stock_parts/capacitor = 1,
|
||||
/obj/item/weapon/stock_parts/spring = 1,
|
||||
/obj/item/stack/cable_coil = 5)
|
||||
|
||||
//for testing - If this is still in when I commit, someone shoot me. --leaving in for now, shouldn't be able to get these on station anyways.
|
||||
/obj/item/weapon/storage/box/frame_parts
|
||||
@@ -175,7 +241,6 @@
|
||||
new /obj/item/weapon/circuitboard/photocopier( src )
|
||||
new /obj/item/weapon/circuitboard/fax( src )
|
||||
new /obj/item/weapon/circuitboard/microwave( src )
|
||||
new /obj/item/weapon/circuitboard/vending( src )
|
||||
new /obj/item/weapon/circuitboard/washing( src )
|
||||
new /obj/item/weapon/stock_parts/scanning_module( src )
|
||||
new /obj/item/weapon/stock_parts/motor( src )
|
||||
|
||||
@@ -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/biogenerator
|
||||
@@ -8,5 +8,5 @@
|
||||
board_type = "machine"
|
||||
origin_tech = list(TECH_DATA = 2)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/matter_bin" = 1,
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 1)
|
||||
/obj/item/weapon/stock_parts/matter_bin = 1,
|
||||
/obj/item/weapon/stock_parts/manipulator = 1)
|
||||
@@ -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/clonepod
|
||||
@@ -8,10 +8,10 @@
|
||||
board_type = "machine"
|
||||
origin_tech = list(TECH_DATA = 3, TECH_BIO = 3)
|
||||
req_components = list(
|
||||
"/obj/item/stack/cable_coil" = 2,
|
||||
"/obj/item/weapon/stock_parts/scanning_module" = 2,
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 2,
|
||||
"/obj/item/weapon/stock_parts/console_screen" = 1)
|
||||
/obj/item/stack/cable_coil = 2,
|
||||
/obj/item/weapon/stock_parts/scanning_module = 2,
|
||||
/obj/item/weapon/stock_parts/manipulator = 2,
|
||||
/obj/item/weapon/stock_parts/console_screen = 1)
|
||||
|
||||
/obj/item/weapon/circuitboard/clonescanner
|
||||
name = T_BOARD("cloning scanner")
|
||||
@@ -19,8 +19,8 @@
|
||||
board_type = "machine"
|
||||
origin_tech = list(TECH_DATA = 2, TECH_BIO = 2)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/scanning_module" = 1,
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 1,
|
||||
"/obj/item/weapon/stock_parts/micro_laser" = 1,
|
||||
"/obj/item/weapon/stock_parts/console_screen" = 1,
|
||||
"/obj/item/stack/cable_coil" = 2)
|
||||
/obj/item/weapon/stock_parts/scanning_module = 1,
|
||||
/obj/item/weapon/stock_parts/manipulator = 1,
|
||||
/obj/item/weapon/stock_parts/micro_laser = 1,
|
||||
/obj/item/weapon/stock_parts/console_screen = 1,
|
||||
/obj/item/stack/cable_coil = 2)
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
#ifndef T_BOARD
|
||||
#error T_BOARD macro is not defined but we need it!
|
||||
#endif
|
||||
|
||||
/obj/item/weapon/circuitboard/jukebox
|
||||
name = T_BOARD("jukebox")
|
||||
build_path = "/obj/machinery/media/jukebox"
|
||||
board_type = "machine"
|
||||
origin_tech = list(TECH_MAGNET = 2, TECH_DATA = 1)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/capacitor = 1,
|
||||
/obj/item/weapon/stock_parts/console_screen = 1,
|
||||
/obj/item/stack/cable_coil = 5)
|
||||
@@ -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/mech_recharger
|
||||
@@ -8,6 +8,6 @@
|
||||
board_type = "machine"
|
||||
origin_tech = list(TECH_DATA = 2, TECH_POWER = 2, TECH_ENGINEERING = 2)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/capacitor" = 2,
|
||||
"/obj/item/weapon/stock_parts/scanning_module" = 1,
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 2)
|
||||
/obj/item/weapon/stock_parts/capacitor = 2,
|
||||
/obj/item/weapon/stock_parts/scanning_module = 1,
|
||||
/obj/item/weapon/stock_parts/manipulator = 2)
|
||||
@@ -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/miningdrill
|
||||
@@ -8,10 +8,10 @@
|
||||
board_type = "machine"
|
||||
origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/capacitor" = 1,
|
||||
"/obj/item/weapon/cell" = 1,
|
||||
"/obj/item/weapon/stock_parts/matter_bin" = 1,
|
||||
"/obj/item/weapon/stock_parts/micro_laser" = 1)
|
||||
/obj/item/weapon/stock_parts/capacitor = 1,
|
||||
/obj/item/weapon/cell = 1,
|
||||
/obj/item/weapon/stock_parts/matter_bin = 1,
|
||||
/obj/item/weapon/stock_parts/micro_laser = 1)
|
||||
|
||||
/obj/item/weapon/circuitboard/miningdrillbrace
|
||||
name = T_BOARD("mining drill brace")
|
||||
|
||||
@@ -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/pacman
|
||||
@@ -8,10 +8,10 @@
|
||||
board_type = "machine"
|
||||
origin_tech = list(TECH_DATA = 3, TECH_POWER = 3, TECH_PHORON = 3, TECH_ENGINEERING = 3)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/matter_bin" = 1,
|
||||
"/obj/item/weapon/stock_parts/micro_laser" = 1,
|
||||
"/obj/item/stack/cable_coil" = 2,
|
||||
"/obj/item/weapon/stock_parts/capacitor" = 1)
|
||||
/obj/item/weapon/stock_parts/matter_bin = 1,
|
||||
/obj/item/weapon/stock_parts/micro_laser = 1,
|
||||
/obj/item/stack/cable_coil = 2,
|
||||
/obj/item/weapon/stock_parts/capacitor = 1)
|
||||
|
||||
/obj/item/weapon/circuitboard/pacman/super
|
||||
name = T_BOARD("SUPERPACMAN-type generator")
|
||||
|
||||
@@ -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/smes
|
||||
@@ -7,18 +7,18 @@
|
||||
build_path = "/obj/machinery/power/smes/buildable"
|
||||
board_type = "machine"
|
||||
origin_tech = list(TECH_POWER = 6, TECH_ENGINEERING = 4)
|
||||
req_components = list("/obj/item/weapon/smes_coil" = 1, "/obj/item/stack/cable_coil" = 30)
|
||||
req_components = list(/obj/item/weapon/smes_coil = 1, /obj/item/stack/cable_coil = 30)
|
||||
|
||||
/obj/item/weapon/circuitboard/batteryrack
|
||||
name = T_BOARD("battery rack PSU")
|
||||
build_path = "/obj/machinery/power/smes/batteryrack"
|
||||
board_type = "machine"
|
||||
origin_tech = list(TECH_POWER = 3, TECH_ENGINEERING = 2)
|
||||
req_components = list("/obj/item/weapon/cell" = 3)
|
||||
req_components = list(/obj/item/weapon/cell = 3)
|
||||
|
||||
/obj/item/weapon/circuitboard/ghettosmes
|
||||
name = T_BOARD("makeshift PSU")
|
||||
desc = "An APC circuit repurposed into some power storage device controller"
|
||||
build_path = "/obj/machinery/power/smes/batteryrack/makeshift"
|
||||
board_type = "machine"
|
||||
req_components = list("/obj/item/weapon/cell" = 3)
|
||||
req_components = list(/obj/item/weapon/cell = 3)
|
||||
|
||||
@@ -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/recharge_station
|
||||
@@ -8,7 +8,7 @@
|
||||
board_type = "machine"
|
||||
origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3)
|
||||
req_components = list(
|
||||
"/obj/item/stack/cable_coil" = 5,
|
||||
"/obj/item/weapon/stock_parts/capacitor" = 2,
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 2,
|
||||
"/obj/item/weapon/cell" = 1)
|
||||
/obj/item/stack/cable_coil = 5,
|
||||
/obj/item/weapon/stock_parts/capacitor = 2,
|
||||
/obj/item/weapon/stock_parts/manipulator = 2,
|
||||
/obj/item/weapon/cell = 1)
|
||||
@@ -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/rdserver
|
||||
@@ -8,8 +8,8 @@ obj/item/weapon/circuitboard/rdserver
|
||||
board_type = "machine"
|
||||
origin_tech = list(TECH_DATA = 3)
|
||||
req_components = list(
|
||||
"/obj/item/stack/cable_coil" = 2,
|
||||
"/obj/item/weapon/stock_parts/scanning_module" = 1)
|
||||
/obj/item/stack/cable_coil = 2,
|
||||
/obj/item/weapon/stock_parts/scanning_module = 1)
|
||||
|
||||
/obj/item/weapon/circuitboard/destructive_analyzer
|
||||
name = T_BOARD("destructive analyzer")
|
||||
@@ -17,9 +17,9 @@ obj/item/weapon/circuitboard/rdserver
|
||||
board_type = "machine"
|
||||
origin_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2, TECH_DATA = 2)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/scanning_module" = 1,
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 1,
|
||||
"/obj/item/weapon/stock_parts/micro_laser" = 1)
|
||||
/obj/item/weapon/stock_parts/scanning_module = 1,
|
||||
/obj/item/weapon/stock_parts/manipulator = 1,
|
||||
/obj/item/weapon/stock_parts/micro_laser = 1)
|
||||
|
||||
/obj/item/weapon/circuitboard/autolathe
|
||||
name = T_BOARD("autolathe")
|
||||
@@ -27,9 +27,9 @@ obj/item/weapon/circuitboard/rdserver
|
||||
board_type = "machine"
|
||||
origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/matter_bin" = 3,
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 1,
|
||||
"/obj/item/weapon/stock_parts/console_screen" = 1)
|
||||
/obj/item/weapon/stock_parts/matter_bin = 3,
|
||||
/obj/item/weapon/stock_parts/manipulator = 1,
|
||||
/obj/item/weapon/stock_parts/console_screen = 1)
|
||||
|
||||
/obj/item/weapon/circuitboard/protolathe
|
||||
name = T_BOARD("protolathe")
|
||||
@@ -37,10 +37,9 @@ obj/item/weapon/circuitboard/rdserver
|
||||
board_type = "machine"
|
||||
origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/matter_bin" = 2,
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 2,
|
||||
"/obj/item/weapon/reagent_containers/glass/beaker" = 2)
|
||||
|
||||
/obj/item/weapon/stock_parts/matter_bin = 2,
|
||||
/obj/item/weapon/stock_parts/manipulator = 2,
|
||||
/obj/item/weapon/reagent_containers/glass/beaker = 2)
|
||||
|
||||
/obj/item/weapon/circuitboard/circuit_imprinter
|
||||
name = T_BOARD("circuit imprinter")
|
||||
@@ -48,9 +47,9 @@ obj/item/weapon/circuitboard/rdserver
|
||||
board_type = "machine"
|
||||
origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/matter_bin" = 1,
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 1,
|
||||
"/obj/item/weapon/reagent_containers/glass/beaker" = 2)
|
||||
/obj/item/weapon/stock_parts/matter_bin = 1,
|
||||
/obj/item/weapon/stock_parts/manipulator = 1,
|
||||
/obj/item/weapon/reagent_containers/glass/beaker = 2)
|
||||
|
||||
/obj/item/weapon/circuitboard/mechfab
|
||||
name = "Circuit board (Exosuit Fabricator)"
|
||||
@@ -58,7 +57,7 @@ obj/item/weapon/circuitboard/rdserver
|
||||
board_type = "machine"
|
||||
origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/matter_bin" = 2,
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 1,
|
||||
"/obj/item/weapon/stock_parts/micro_laser" = 1,
|
||||
"/obj/item/weapon/stock_parts/console_screen" = 1)
|
||||
/obj/item/weapon/stock_parts/matter_bin = 2,
|
||||
/obj/item/weapon/stock_parts/manipulator = 1,
|
||||
/obj/item/weapon/stock_parts/micro_laser = 1,
|
||||
/obj/item/weapon/stock_parts/console_screen = 1)
|
||||
|
||||
@@ -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/shield_gen_ex
|
||||
@@ -8,12 +8,12 @@
|
||||
build_path = "/obj/machinery/shield_gen/external"
|
||||
origin_tech = list(TECH_BLUESPACE = 4, TECH_PHORON = 3)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/manipulator/pico" = 2,
|
||||
"/obj/item/weapon/stock_parts/subspace/transmitter" = 1,
|
||||
"/obj/item/weapon/stock_parts/subspace/crystal" = 1,
|
||||
"/obj/item/weapon/stock_parts/subspace/amplifier" = 1,
|
||||
"/obj/item/weapon/stock_parts/console_screen" = 1,
|
||||
"/obj/item/stack/cable_coil" = 5)
|
||||
/obj/item/weapon/stock_parts/manipulator/pico = 2,
|
||||
/obj/item/weapon/stock_parts/subspace/transmitter = 1,
|
||||
/obj/item/weapon/stock_parts/subspace/crystal = 1,
|
||||
/obj/item/weapon/stock_parts/subspace/amplifier = 1,
|
||||
/obj/item/weapon/stock_parts/console_screen = 1,
|
||||
/obj/item/stack/cable_coil = 5)
|
||||
|
||||
/obj/item/weapon/circuitboard/shield_gen
|
||||
name = T_BOARD("bubble shield generator")
|
||||
@@ -21,12 +21,12 @@
|
||||
build_path = "/obj/machinery/shield_gen"
|
||||
origin_tech = list(TECH_BLUESPACE = 4, TECH_PHORON = 3)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/manipulator/pico" = 2,
|
||||
"/obj/item/weapon/stock_parts/subspace/transmitter" = 1,
|
||||
"/obj/item/weapon/stock_parts/subspace/crystal" = 1,
|
||||
"/obj/item/weapon/stock_parts/subspace/amplifier" = 1,
|
||||
"/obj/item/weapon/stock_parts/console_screen" = 1,
|
||||
"/obj/item/stack/cable_coil" = 5)
|
||||
/obj/item/weapon/stock_parts/manipulator/pico = 2,
|
||||
/obj/item/weapon/stock_parts/subspace/transmitter = 1,
|
||||
/obj/item/weapon/stock_parts/subspace/crystal = 1,
|
||||
/obj/item/weapon/stock_parts/subspace/amplifier = 1,
|
||||
/obj/item/weapon/stock_parts/console_screen = 1,
|
||||
/obj/item/stack/cable_coil = 5)
|
||||
|
||||
/obj/item/weapon/circuitboard/shield_cap
|
||||
name = T_BOARD("shield capacitor")
|
||||
@@ -34,9 +34,9 @@
|
||||
build_path = "/obj/machinery/shield_capacitor"
|
||||
origin_tech = list(TECH_MAGNET = 3, TECH_POWER = 4)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/manipulator/pico" = 2,
|
||||
"/obj/item/weapon/stock_parts/subspace/filter" = 1,
|
||||
"/obj/item/weapon/stock_parts/subspace/treatment" = 1,
|
||||
"/obj/item/weapon/stock_parts/subspace/analyzer" = 1,
|
||||
"/obj/item/weapon/stock_parts/console_screen" = 1,
|
||||
"/obj/item/stack/cable_coil" = 5)
|
||||
/obj/item/weapon/stock_parts/manipulator/pico = 2,
|
||||
/obj/item/weapon/stock_parts/subspace/filter = 1,
|
||||
/obj/item/weapon/stock_parts/subspace/treatment = 1,
|
||||
/obj/item/weapon/stock_parts/subspace/analyzer = 1,
|
||||
/obj/item/weapon/stock_parts/console_screen = 1,
|
||||
/obj/item/stack/cable_coil = 5)
|
||||
|
||||
@@ -10,69 +10,69 @@
|
||||
build_path = "/obj/machinery/telecomms/receiver"
|
||||
origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 3, TECH_BLUESPACE = 2)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/subspace/ansible" = 1,
|
||||
"/obj/item/weapon/stock_parts/subspace/filter" = 1,
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 2,
|
||||
"/obj/item/weapon/stock_parts/micro_laser" = 1)
|
||||
/obj/item/weapon/stock_parts/subspace/ansible = 1,
|
||||
/obj/item/weapon/stock_parts/subspace/filter = 1,
|
||||
/obj/item/weapon/stock_parts/manipulator = 2,
|
||||
/obj/item/weapon/stock_parts/micro_laser = 1)
|
||||
|
||||
/obj/item/weapon/circuitboard/telecomms/hub
|
||||
name = T_BOARD("hub mainframe")
|
||||
build_path = "/obj/machinery/telecomms/hub"
|
||||
origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 2,
|
||||
"/obj/item/stack/cable_coil" = 2,
|
||||
"/obj/item/weapon/stock_parts/subspace/filter" = 2)
|
||||
/obj/item/weapon/stock_parts/manipulator = 2,
|
||||
/obj/item/stack/cable_coil = 2,
|
||||
/obj/item/weapon/stock_parts/subspace/filter = 2)
|
||||
|
||||
/obj/item/weapon/circuitboard/telecomms/relay
|
||||
name = T_BOARD("relay mainframe")
|
||||
build_path = "/obj/machinery/telecomms/relay"
|
||||
origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 4, TECH_BLUESPACE = 3)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 2,
|
||||
"/obj/item/stack/cable_coil" = 2,
|
||||
"/obj/item/weapon/stock_parts/subspace/filter" = 2)
|
||||
/obj/item/weapon/stock_parts/manipulator = 2,
|
||||
/obj/item/stack/cable_coil = 2,
|
||||
/obj/item/weapon/stock_parts/subspace/filter = 2)
|
||||
|
||||
/obj/item/weapon/circuitboard/telecomms/bus
|
||||
name = T_BOARD("bus mainframe")
|
||||
build_path = "/obj/machinery/telecomms/bus"
|
||||
origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 2,
|
||||
"/obj/item/stack/cable_coil" = 1,
|
||||
"/obj/item/weapon/stock_parts/subspace/filter" = 1)
|
||||
/obj/item/weapon/stock_parts/manipulator = 2,
|
||||
/obj/item/stack/cable_coil = 1,
|
||||
/obj/item/weapon/stock_parts/subspace/filter = 1)
|
||||
|
||||
/obj/item/weapon/circuitboard/telecomms/processor
|
||||
name = T_BOARD("processor unit")
|
||||
build_path = "/obj/machinery/telecomms/processor"
|
||||
origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 3,
|
||||
"/obj/item/weapon/stock_parts/subspace/filter" = 1,
|
||||
"/obj/item/weapon/stock_parts/subspace/treatment" = 2,
|
||||
"/obj/item/weapon/stock_parts/subspace/analyzer" = 1,
|
||||
"/obj/item/stack/cable_coil" = 2,
|
||||
"/obj/item/weapon/stock_parts/subspace/amplifier" = 1)
|
||||
/obj/item/weapon/stock_parts/manipulator = 3,
|
||||
/obj/item/weapon/stock_parts/subspace/filter = 1,
|
||||
/obj/item/weapon/stock_parts/subspace/treatment = 2,
|
||||
/obj/item/weapon/stock_parts/subspace/analyzer = 1,
|
||||
/obj/item/stack/cable_coil = 2,
|
||||
/obj/item/weapon/stock_parts/subspace/amplifier = 1)
|
||||
|
||||
/obj/item/weapon/circuitboard/telecomms/server
|
||||
name = T_BOARD("telecommunication server")
|
||||
build_path = "/obj/machinery/telecomms/server"
|
||||
origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 2,
|
||||
"/obj/item/stack/cable_coil" = 1,
|
||||
"/obj/item/weapon/stock_parts/subspace/filter" = 1)
|
||||
/obj/item/weapon/stock_parts/manipulator = 2,
|
||||
/obj/item/stack/cable_coil = 1,
|
||||
/obj/item/weapon/stock_parts/subspace/filter = 1)
|
||||
|
||||
/obj/item/weapon/circuitboard/telecomms/broadcaster
|
||||
name = T_BOARD("subspace broadcaster")
|
||||
build_path = "/obj/machinery/telecomms/broadcaster"
|
||||
origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4, TECH_BLUESPACE = 2)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 2,
|
||||
"/obj/item/stack/cable_coil" = 1,
|
||||
"/obj/item/weapon/stock_parts/subspace/filter" = 1,
|
||||
"/obj/item/weapon/stock_parts/subspace/crystal" = 1,
|
||||
"/obj/item/weapon/stock_parts/micro_laser/high" = 2)
|
||||
/obj/item/weapon/stock_parts/manipulator = 2,
|
||||
/obj/item/stack/cable_coil = 1,
|
||||
/obj/item/weapon/stock_parts/subspace/filter = 1,
|
||||
/obj/item/weapon/stock_parts/subspace/crystal = 1,
|
||||
/obj/item/weapon/stock_parts/micro_laser/high = 2)
|
||||
|
||||
//This isn't a real telecomms board but I don't want to make a whole file to hold only one circuitboard.
|
||||
/obj/item/weapon/circuitboard/telecomms/exonet_node
|
||||
@@ -80,10 +80,21 @@
|
||||
build_path = "/obj/machinery/exonet_node"
|
||||
origin_tech = list(TECH_DATA = 5, TECH_ENGINEERING = 5, TECH_BLUESPACE = 4)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/subspace/ansible" = 1,
|
||||
"/obj/item/weapon/stock_parts/subspace/filter" = 1,
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 2,
|
||||
"/obj/item/weapon/stock_parts/micro_laser" = 1,
|
||||
"/obj/item/weapon/stock_parts/subspace/crystal" = 1,
|
||||
"/obj/item/weapon/stock_parts/subspace/treatment" = 2,
|
||||
"/obj/item/stack/cable_coil" = 2)
|
||||
/obj/item/weapon/stock_parts/subspace/ansible = 1,
|
||||
/obj/item/weapon/stock_parts/subspace/filter = 1,
|
||||
/obj/item/weapon/stock_parts/manipulator = 2,
|
||||
/obj/item/weapon/stock_parts/micro_laser = 1,
|
||||
/obj/item/weapon/stock_parts/subspace/crystal = 1,
|
||||
/obj/item/weapon/stock_parts/subspace/treatment = 2,
|
||||
/obj/item/stack/cable_coil = 2)
|
||||
|
||||
/obj/item/weapon/circuitboard/telecomms/pda_multicaster
|
||||
name = T_BOARD("pda multicaster")
|
||||
build_path = "/obj/machinery/pda_multicaster"
|
||||
origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 2, TECH_BLUESPACE = 2)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/subspace/ansible = 1,
|
||||
/obj/item/weapon/stock_parts/subspace/filter = 1,
|
||||
/obj/item/weapon/stock_parts/manipulator = 1,
|
||||
/obj/item/weapon/stock_parts/subspace/treatment = 1,
|
||||
/obj/item/stack/cable_coil = 2)
|
||||
|
||||
@@ -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/unary_atmos
|
||||
@@ -18,16 +18,16 @@
|
||||
build_path = "/obj/machinery/atmospherics/unary/heater"
|
||||
origin_tech = list(TECH_POWER = 2, TECH_ENGINEERING = 1)
|
||||
req_components = list(
|
||||
"/obj/item/stack/cable_coil" = 5,
|
||||
"/obj/item/weapon/stock_parts/matter_bin" = 1,
|
||||
"/obj/item/weapon/stock_parts/capacitor" = 2)
|
||||
/obj/item/stack/cable_coil = 5,
|
||||
/obj/item/weapon/stock_parts/matter_bin = 1,
|
||||
/obj/item/weapon/stock_parts/capacitor = 2)
|
||||
|
||||
/obj/item/weapon/circuitboard/unary_atmos/cooler
|
||||
name = T_BOARD("gas cooling system")
|
||||
build_path = "/obj/machinery/atmospherics/unary/freezer"
|
||||
origin_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2)
|
||||
req_components = list(
|
||||
"/obj/item/stack/cable_coil" = 2,
|
||||
"/obj/item/weapon/stock_parts/matter_bin" = 1,
|
||||
"/obj/item/weapon/stock_parts/capacitor" = 2,
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 1)
|
||||
/obj/item/stack/cable_coil = 2,
|
||||
/obj/item/weapon/stock_parts/matter_bin = 1,
|
||||
/obj/item/weapon/stock_parts/capacitor = 2,
|
||||
/obj/item/weapon/stock_parts/manipulator = 1)
|
||||
|
||||
@@ -34,6 +34,10 @@
|
||||
//So this is a workaround. This also makes more sense from an IC standpoint. ~Carn
|
||||
if(user.client && (target in user.client.screen))
|
||||
user << "<span class='notice'>You need to take that [target.name] off before cleaning it.</span>"
|
||||
else if(istype(target,/obj/effect/decal/cleanable/blood))
|
||||
user << "<span class='notice'>You scrub \the [target.name] out.</span>"
|
||||
target.clean_blood()
|
||||
return //Blood is a cleanable decal, therefore needs to be accounted for before all cleanable decals.
|
||||
else if(istype(target,/obj/effect/decal/cleanable))
|
||||
user << "<span class='notice'>You scrub \the [target.name] out.</span>"
|
||||
qdel(target)
|
||||
|
||||
@@ -93,7 +93,7 @@
|
||||
|
||||
spawn(0)//this prevents the collapse of space-time continuum
|
||||
if (user)
|
||||
user.removeItem(src, force = 1)
|
||||
user.drop_from_inventory(src)
|
||||
qdel(src)
|
||||
return uses
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
wires = new(src)
|
||||
image_overlay = image('icons/obj/assemblies.dmi', "plastic-explosive2")
|
||||
..()
|
||||
|
||||
|
||||
/obj/item/weapon/plastique/Destroy()
|
||||
qdel(wires)
|
||||
wires = null
|
||||
@@ -79,7 +79,7 @@
|
||||
if(target)
|
||||
if (istype(target, /turf/simulated/wall))
|
||||
var/turf/simulated/wall/W = target
|
||||
W.dismantle_wall(1)
|
||||
W.dismantle_wall(1,1,1)
|
||||
else if(istype(target, /mob/living))
|
||||
target.ex_act(2) // c4 can't gib mobs anymore.
|
||||
else
|
||||
|
||||
@@ -108,7 +108,7 @@
|
||||
if(!ispath(gift_type,/obj/item)) return
|
||||
|
||||
var/obj/item/I = new gift_type(M)
|
||||
M.removeItem(src)
|
||||
M.remove_from_mob(src)
|
||||
M.put_in_hands(I)
|
||||
I.add_fingerprint(M)
|
||||
qdel(src)
|
||||
|
||||
@@ -59,7 +59,8 @@
|
||||
path = 1
|
||||
user << "<span class='notice'>You add [W] to the metal casing.</span>"
|
||||
playsound(src.loc, 'sound/items/Screwdriver2.ogg', 25, -3)
|
||||
user.removeItem(det, src)
|
||||
user.remove_from_mob(det)
|
||||
det.loc = src
|
||||
detonator = det
|
||||
if(istimer(detonator.a_left))
|
||||
var/obj/item/device/assembly/timer/T = detonator.a_left
|
||||
@@ -175,7 +176,7 @@
|
||||
|
||||
if(istype(loc, /mob/living/carbon)) //drop dat grenade if it goes off in your hand
|
||||
var/mob/living/carbon/C = loc
|
||||
C.removeItem(src)
|
||||
C.drop_from_inventory(src)
|
||||
C.throw_mode_off()
|
||||
|
||||
invisibility = INVISIBILITY_MAXIMUM //Why am i doing this?
|
||||
|
||||
@@ -22,13 +22,13 @@
|
||||
B.update_icon()
|
||||
|
||||
new/obj/effect/effect/sparks(src.loc)
|
||||
new/obj/effect/effect/smoke/illumination(src.loc, brightness=15)
|
||||
new/obj/effect/effect/smoke/illumination(src.loc, 5, range=30, power=30, color="#FFFFFF")
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
proc/bang(var/turf/T , var/mob/living/carbon/M) // Added a new proc called 'bang' that takes a location and a person to be banged.
|
||||
M << "<span class='danger'>BANG</span>" // Called during the loop that bangs people in lockers/containers and when banging
|
||||
playsound(src.loc, 'sound/effects/bang.ogg', 50, 1, 5) // people in normal view. Could theroetically be called during other explosions.
|
||||
playsound(src.loc, 'sound/effects/bang.ogg', 50, 1, 30) // people in normal view. Could theroetically be called during other explosions.
|
||||
// -- Polymorph
|
||||
|
||||
//Checking for protections
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/obj/item/weapon/grenade/smokebomb
|
||||
desc = "It is set to detonate in 2 seconds."
|
||||
desc = "It is set to detonate in 2 seconds. These high-tech grenades can have their color adapted on the fly with a multitool!"
|
||||
name = "smoke bomb"
|
||||
icon = 'icons/obj/grenade.dmi'
|
||||
icon_state = "flashbang"
|
||||
@@ -7,6 +7,8 @@
|
||||
item_state = "flashbang"
|
||||
slot_flags = SLOT_BELT
|
||||
var/datum/effect/effect/system/smoke_spread/bad/smoke
|
||||
var/smoke_color
|
||||
var/smoke_strength = 8
|
||||
|
||||
/obj/item/weapon/grenade/smokebomb/New()
|
||||
..()
|
||||
@@ -22,18 +24,15 @@
|
||||
playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3)
|
||||
src.smoke.set_up(10, 0, usr.loc)
|
||||
spawn(0)
|
||||
src.smoke.start()
|
||||
sleep(10)
|
||||
src.smoke.start()
|
||||
sleep(10)
|
||||
src.smoke.start()
|
||||
sleep(10)
|
||||
src.smoke.start()
|
||||
for(var/i = 1 to smoke_strength)
|
||||
src.smoke.start(smoke_color)
|
||||
sleep(10)
|
||||
qdel(src)
|
||||
|
||||
for(var/obj/effect/blob/B in view(8,src))
|
||||
var/damage = round(30/(get_dist(B,src)+1))
|
||||
B.health -= damage
|
||||
B.update_icon()
|
||||
sleep(80)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/item/weapon/grenade/smokebomb/attackby(obj/item/I as obj, mob/user as mob)
|
||||
if(istype(I,/obj/item/device/multitool))
|
||||
var/new_smoke_color = input(user, "Choose a color for the smoke:", "Smoke Color", smoke_color) as color|null
|
||||
if(new_smoke_color)
|
||||
smoke_color = new_smoke_color
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
if(dispenser)
|
||||
cuffs = new(get_turf(user))
|
||||
else
|
||||
user.removeItem(cuffs)
|
||||
user.drop_from_inventory(cuffs)
|
||||
cuffs.loc = target
|
||||
target.handcuffed = cuffs
|
||||
target.update_inv_handcuffed()
|
||||
|
||||
@@ -417,22 +417,26 @@ the implant may become unstable and either pre-maturely inject the subject or si
|
||||
var/area/t = get_area(M)
|
||||
switch (cause)
|
||||
if("death")
|
||||
var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null)
|
||||
var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset/heads/captain(null)
|
||||
if(istype(t, /area/syndicate_station) || istype(t, /area/syndicate_mothership) || istype(t, /area/shuttle/syndicate_elite) )
|
||||
//give the syndies a bit of stealth
|
||||
a.autosay("[mobname] has died in Space!", "[mobname]'s Death Alarm")
|
||||
a.autosay("[mobname] has died in Space!", "[mobname]'s Death Alarm", "Security")
|
||||
a.autosay("[mobname] has died in Space!", "[mobname]'s Death Alarm", "Medical")
|
||||
else
|
||||
a.autosay("[mobname] has died in [t.name]!", "[mobname]'s Death Alarm")
|
||||
a.autosay("[mobname] has died in [t.name]!", "[mobname]'s Death Alarm", "Security")
|
||||
a.autosay("[mobname] has died in [t.name]!", "[mobname]'s Death Alarm", "Medical")
|
||||
qdel(a)
|
||||
processing_objects.Remove(src)
|
||||
if ("emp")
|
||||
var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null)
|
||||
var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset/heads/captain(null)
|
||||
var/name = prob(50) ? t.name : pick(teleportlocs)
|
||||
a.autosay("[mobname] has died in [name]!", "[mobname]'s Death Alarm")
|
||||
a.autosay("[mobname] has died in [name]!", "[mobname]'s Death Alarm", "Security")
|
||||
a.autosay("[mobname] has died in [name]!", "[mobname]'s Death Alarm", "Medical")
|
||||
qdel(a)
|
||||
else
|
||||
var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null)
|
||||
a.autosay("[mobname] has died-zzzzt in-in-in...", "[mobname]'s Death Alarm")
|
||||
var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset/heads/captain(null)
|
||||
a.autosay("[mobname] has died-zzzzt in-in-in...", "[mobname]'s Death Alarm", "Security")
|
||||
a.autosay("[mobname] has died-zzzzt in-in-in...", "[mobname]'s Death Alarm", "Medical")
|
||||
qdel(a)
|
||||
processing_objects.Remove(src)
|
||||
|
||||
|
||||
@@ -126,7 +126,7 @@
|
||||
c.scanned = A
|
||||
if(istype(A.loc,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = A.loc
|
||||
H.removeItem(A)
|
||||
H.remove_from_mob(A)
|
||||
else if(istype(A.loc,/obj/item/weapon/storage))
|
||||
var/obj/item/weapon/storage/S = A.loc
|
||||
S.remove_from_storage(A)
|
||||
|
||||
@@ -62,7 +62,9 @@
|
||||
finished = new /obj/item/weapon/melee/baton/cattleprod(get_turf(user))
|
||||
user << "<span class='notice'>You fasten the wirecutters to the top of the rod with the cable, prongs outward.</span>"
|
||||
if(finished)
|
||||
user.deleteItem(src)
|
||||
user.deleteItem(I)
|
||||
user.drop_from_inventory(src)
|
||||
user.drop_from_inventory(I)
|
||||
qdel(I)
|
||||
qdel(src)
|
||||
user.put_in_hands(finished)
|
||||
update_icon(user)
|
||||
|
||||
@@ -50,7 +50,8 @@ var/global/list/ashtray_cache = list()
|
||||
if (contents.len >= max_butts)
|
||||
user << "\The [src] is full."
|
||||
return
|
||||
user.removeItem(W, src)
|
||||
user.remove_from_mob(W)
|
||||
W.loc = src
|
||||
|
||||
if (istype(W,/obj/item/clothing/mask/smokable/cigarette))
|
||||
var/obj/item/clothing/mask/smokable/cigarette/cig = W
|
||||
|
||||
@@ -57,6 +57,8 @@
|
||||
name = "fork"
|
||||
desc = "It's a fork. Sure is pointy."
|
||||
icon_state = "fork"
|
||||
sharp = 1
|
||||
edge = 0
|
||||
|
||||
/obj/item/weapon/material/kitchen/utensil/fork/plastic
|
||||
default_material = "plastic"
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
T.visible_message("<span class='danger'>\The [src] [material.destruction_desc]!</span>")
|
||||
if(istype(loc, /mob/living))
|
||||
var/mob/living/M = loc
|
||||
M.removeItem(src, force = 1)
|
||||
M.drop_from_inventory(src)
|
||||
playsound(src, "shatter", 70, 1)
|
||||
if(!consumed && drops_debris) material.place_shard(T)
|
||||
qdel(src)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/item/weapon/material/harpoon
|
||||
name = "harpoon"
|
||||
sharp = 1
|
||||
edge = 1
|
||||
edge = 0
|
||||
desc = "Tharr she blows!"
|
||||
icon_state = "harpoon"
|
||||
item_state = "harpoon"
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
var/picked = pick(check)
|
||||
var/obj/item/organ/external/affecting = H.get_organ(picked)
|
||||
if(affecting)
|
||||
if(affecting.status & ORGAN_ROBOT)
|
||||
if(affecting.robotic >= ORGAN_ROBOT)
|
||||
return
|
||||
if(affecting.take_damage(5, 0))
|
||||
H.UpdateDamageIcon()
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
/obj/item/weapon/material/twohanded/update_icon()
|
||||
icon_state = "[base_icon][wielded]"
|
||||
item_state = icon_state
|
||||
|
||||
|
||||
/obj/item/weapon/material/twohanded/dropped()
|
||||
..()
|
||||
if(wielded)
|
||||
@@ -119,7 +119,7 @@
|
||||
unwielded_force_divisor = 0.65 // 14 when unwielded based on above
|
||||
thrown_force_divisor = 1.5 // 20 when thrown with weight 15 (glass)
|
||||
throw_speed = 3
|
||||
edge = 1
|
||||
edge = 0
|
||||
sharp = 1
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
attack_verb = list("attacked", "poked", "jabbed", "torn", "gored")
|
||||
|
||||
@@ -207,7 +207,7 @@
|
||||
..()
|
||||
|
||||
/obj/item/weapon/melee/energy/blade/attack_self(mob/user as mob)
|
||||
user.removeItem(src, force = 1)
|
||||
user.drop_from_inventory(src)
|
||||
spawn(1) if(src) qdel(src)
|
||||
|
||||
/obj/item/weapon/melee/energy/blade/dropped()
|
||||
@@ -225,5 +225,5 @@
|
||||
organ.implants -= src
|
||||
host.pinned -= src
|
||||
host.embedded -= src
|
||||
host.removeItem(src, force = 1)
|
||||
host.drop_from_inventory(src)
|
||||
spawn(1) if(src) qdel(src)
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
..()
|
||||
|
||||
/obj/item/weapon/mop_deploy/attack_self(mob/user as mob)
|
||||
user.removeItem(src, force = 1)
|
||||
user.drop_from_inventory(src)
|
||||
spawn(1) if(src) del(src)
|
||||
|
||||
/obj/item/weapon/mop_deploy/dropped()
|
||||
@@ -70,5 +70,5 @@
|
||||
organ.implants -= src
|
||||
host.pinned -= src
|
||||
host.embedded -= src
|
||||
host.removeItem(src, force = 1)
|
||||
host.drop_from_inventory(src)
|
||||
spawn(1) if(src) del(src)
|
||||
@@ -9,6 +9,20 @@
|
||||
var/tape_type = /obj/item/tape
|
||||
var/icon_base
|
||||
|
||||
var/apply_tape = FALSE
|
||||
|
||||
/obj/item/taperoll/initialize()
|
||||
..()
|
||||
if(apply_tape)
|
||||
var/turf/T = get_turf(src)
|
||||
if(!T)
|
||||
return
|
||||
var/obj/machinery/door/airlock/airlock = locate(/obj/machinery/door/airlock) in T
|
||||
if(airlock)
|
||||
afterattack(airlock, null, TRUE)
|
||||
qdel(src)
|
||||
|
||||
|
||||
var/list/image/hazard_overlays
|
||||
var/list/tape_roll_applications = list()
|
||||
|
||||
@@ -63,6 +77,9 @@ var/list/tape_roll_applications = list()
|
||||
tape_type = /obj/item/tape/engineering
|
||||
icon_base = "engineering"
|
||||
|
||||
/obj/item/taperoll/engineering/applied
|
||||
apply_tape = TRUE
|
||||
|
||||
/obj/item/tape/engineering
|
||||
name = "engineering tape"
|
||||
desc = "A length of engineering tape. Better not cross it."
|
||||
@@ -220,8 +237,7 @@ var/list/tape_roll_applications = list()
|
||||
|
||||
if (istype(A, /obj/machinery/door/airlock))
|
||||
var/turf/T = get_turf(A)
|
||||
var/obj/item/tape/P = new tape_type(T.x,T.y,T.z)
|
||||
P.loc = locate(T.x,T.y,T.z)
|
||||
var/obj/item/tape/P = new tape_type(T)
|
||||
P.update_icon()
|
||||
P.layer = 3.2
|
||||
user << "<span class='notice'>You finish placing \the [src].</span>"
|
||||
|
||||
@@ -244,12 +244,12 @@
|
||||
..()
|
||||
new /obj/item/weapon/storage/wallet/random( src )
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel_norm
|
||||
/obj/item/weapon/storage/backpack/satchel/norm
|
||||
name = "satchel"
|
||||
desc = "A trendy looking satchel."
|
||||
icon_state = "satchel-norm"
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel_eng
|
||||
/obj/item/weapon/storage/backpack/satchel/eng
|
||||
name = "industrial satchel"
|
||||
desc = "A tough satchel with extra pockets."
|
||||
icon_state = "satchel-eng"
|
||||
@@ -258,7 +258,7 @@
|
||||
slot_r_hand_str = "engiepack",
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel_med
|
||||
/obj/item/weapon/storage/backpack/satchel/med
|
||||
name = "medical satchel"
|
||||
desc = "A sterile satchel used in medical departments."
|
||||
icon_state = "satchel-med"
|
||||
@@ -267,27 +267,27 @@
|
||||
slot_r_hand_str = "medicalpack",
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel_vir
|
||||
/obj/item/weapon/storage/backpack/satchel/vir
|
||||
name = "virologist satchel"
|
||||
desc = "A sterile satchel with virologist colours."
|
||||
icon_state = "satchel-vir"
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel_chem
|
||||
/obj/item/weapon/storage/backpack/satchel/chem
|
||||
name = "chemist satchel"
|
||||
desc = "A sterile satchel with chemist colours."
|
||||
icon_state = "satchel-chem"
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel_gen
|
||||
/obj/item/weapon/storage/backpack/satchel/gen
|
||||
name = "geneticist satchel"
|
||||
desc = "A sterile satchel with geneticist colours."
|
||||
icon_state = "satchel-gen"
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel_tox
|
||||
/obj/item/weapon/storage/backpack/satchel/tox
|
||||
name = "scientist satchel"
|
||||
desc = "Useful for holding research materials."
|
||||
icon_state = "satchel-tox"
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel_sec
|
||||
/obj/item/weapon/storage/backpack/satchel/sec
|
||||
name = "security satchel"
|
||||
desc = "A robust satchel for security related needs."
|
||||
icon_state = "satchel-sec"
|
||||
@@ -296,12 +296,12 @@
|
||||
slot_r_hand_str = "securitypack",
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel_hyd
|
||||
/obj/item/weapon/storage/backpack/satchel/hyd
|
||||
name = "hydroponics satchel"
|
||||
desc = "A green satchel for plant related work."
|
||||
icon_state = "satchel_hyd"
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel_cap
|
||||
/obj/item/weapon/storage/backpack/satchel/cap
|
||||
name = "captain's satchel"
|
||||
desc = "An exclusive satchel for officers."
|
||||
icon_state = "satchel-cap"
|
||||
|
||||
@@ -153,7 +153,7 @@
|
||||
break
|
||||
|
||||
if(!inserted || !S.amount)
|
||||
usr.removeItem(S)
|
||||
usr.remove_from_mob(S)
|
||||
usr.update_icons() //update our overlays
|
||||
if (usr.client && usr.s_active != src)
|
||||
usr.client.screen -= S
|
||||
|
||||
@@ -187,7 +187,8 @@
|
||||
/obj/item/device/flash,
|
||||
/obj/item/weapon/flame/lighter,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/donut/,
|
||||
/obj/item/ammo_magazine
|
||||
/obj/item/ammo_magazine,
|
||||
/obj/item/weapon/gun/projectile/colt/detective
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/belt/soulstone
|
||||
|
||||
@@ -51,31 +51,24 @@
|
||||
new src.foldable(get_turf(src))
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/storage/box/survival/
|
||||
New()
|
||||
..()
|
||||
new /obj/item/clothing/mask/breath( src )
|
||||
new /obj/item/weapon/tank/emergency_oxygen( src )
|
||||
/obj/item/weapon/storage/box/survival/New()
|
||||
..()
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
new /obj/item/weapon/tank/emergency_oxygen(src)
|
||||
|
||||
/obj/item/weapon/storage/box/engineer/
|
||||
New()
|
||||
..()
|
||||
new /obj/item/clothing/mask/breath( src )
|
||||
new /obj/item/weapon/tank/emergency_oxygen/engi( src )
|
||||
/obj/item/weapon/storage/box/engineer/New()
|
||||
..()
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
new /obj/item/weapon/tank/emergency_oxygen/engi(src)
|
||||
|
||||
/obj/item/weapon/storage/box/gloves
|
||||
name = "box of latex gloves"
|
||||
desc = "Contains white gloves."
|
||||
icon_state = "latex"
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/clothing/gloves/latex(src)
|
||||
new /obj/item/clothing/gloves/latex(src)
|
||||
new /obj/item/clothing/gloves/latex(src)
|
||||
new /obj/item/clothing/gloves/latex(src)
|
||||
new /obj/item/clothing/gloves/latex(src)
|
||||
new /obj/item/clothing/gloves/latex(src)
|
||||
/obj/item/weapon/storage/box/gloves/New()
|
||||
..()
|
||||
for(var/i = 1 to 7)
|
||||
new /obj/item/clothing/gloves/latex(src)
|
||||
|
||||
/obj/item/weapon/storage/box/masks
|
||||
@@ -83,75 +76,50 @@
|
||||
desc = "This box contains masks of sterility."
|
||||
icon_state = "sterile"
|
||||
|
||||
New()
|
||||
..()
|
||||
/obj/item/weapon/storage/box/masks/New()
|
||||
..()
|
||||
for(var/i = 1 to 7)
|
||||
new /obj/item/clothing/mask/surgical(src)
|
||||
new /obj/item/clothing/mask/surgical(src)
|
||||
new /obj/item/clothing/mask/surgical(src)
|
||||
new /obj/item/clothing/mask/surgical(src)
|
||||
new /obj/item/clothing/mask/surgical(src)
|
||||
new /obj/item/clothing/mask/surgical(src)
|
||||
new /obj/item/clothing/mask/surgical(src)
|
||||
|
||||
|
||||
/obj/item/weapon/storage/box/syringes
|
||||
name = "box of syringes"
|
||||
desc = "A box full of syringes."
|
||||
icon_state = "syringe"
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/syringe( src )
|
||||
new /obj/item/weapon/reagent_containers/syringe( src )
|
||||
new /obj/item/weapon/reagent_containers/syringe( src )
|
||||
new /obj/item/weapon/reagent_containers/syringe( src )
|
||||
new /obj/item/weapon/reagent_containers/syringe( src )
|
||||
new /obj/item/weapon/reagent_containers/syringe( src )
|
||||
new /obj/item/weapon/reagent_containers/syringe( src )
|
||||
/obj/item/weapon/storage/box/syringes/New()
|
||||
..()
|
||||
for(var/i = 1 to 7)
|
||||
new /obj/item/weapon/reagent_containers/syringe(src)
|
||||
|
||||
/obj/item/weapon/storage/box/syringegun
|
||||
name = "box of syringe gun cartridges"
|
||||
desc = "A box full of compressed gas cartridges."
|
||||
icon_state = "syringe"
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/weapon/syringe_cartridge( src )
|
||||
new /obj/item/weapon/syringe_cartridge( src )
|
||||
new /obj/item/weapon/syringe_cartridge( src )
|
||||
new /obj/item/weapon/syringe_cartridge( src )
|
||||
new /obj/item/weapon/syringe_cartridge( src )
|
||||
new /obj/item/weapon/syringe_cartridge( src )
|
||||
new /obj/item/weapon/syringe_cartridge( src )
|
||||
|
||||
/obj/item/weapon/storage/box/syringegun/New()
|
||||
..()
|
||||
for(var/i = 1 to 7)
|
||||
new /obj/item/weapon/syringe_cartridge(src)
|
||||
|
||||
/obj/item/weapon/storage/box/beakers
|
||||
name = "box of beakers"
|
||||
icon_state = "beaker"
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/glass/beaker( src )
|
||||
new /obj/item/weapon/reagent_containers/glass/beaker( src )
|
||||
new /obj/item/weapon/reagent_containers/glass/beaker( src )
|
||||
new /obj/item/weapon/reagent_containers/glass/beaker( src )
|
||||
new /obj/item/weapon/reagent_containers/glass/beaker( src )
|
||||
new /obj/item/weapon/reagent_containers/glass/beaker( src )
|
||||
new /obj/item/weapon/reagent_containers/glass/beaker( src )
|
||||
/obj/item/weapon/storage/box/beakers/New()
|
||||
..()
|
||||
for(var/i = 1 to 7)
|
||||
new /obj/item/weapon/reagent_containers/glass/beaker(src)
|
||||
|
||||
/obj/item/weapon/storage/box/injectors
|
||||
name = "box of DNA injectors"
|
||||
desc = "This box contains injectors it seems."
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/weapon/dnainjector/h2m(src)
|
||||
new /obj/item/weapon/dnainjector/h2m(src)
|
||||
/obj/item/weapon/storage/box/injectors/New()
|
||||
..()
|
||||
for(var/i = 1 to 3)
|
||||
new /obj/item/weapon/dnainjector/h2m(src)
|
||||
for(var/i = 1 to 3)
|
||||
new /obj/item/weapon/dnainjector/m2h(src)
|
||||
new /obj/item/weapon/dnainjector/m2h(src)
|
||||
new /obj/item/weapon/dnainjector/m2h(src)
|
||||
|
||||
|
||||
/obj/item/weapon/storage/box/blanks
|
||||
name = "box of blank shells"
|
||||
@@ -159,14 +127,9 @@
|
||||
icon_state = "blankshot_box"
|
||||
item_state = "syringe_kit"
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/ammo_casing/shotgun/blank(src)
|
||||
new /obj/item/ammo_casing/shotgun/blank(src)
|
||||
new /obj/item/ammo_casing/shotgun/blank(src)
|
||||
new /obj/item/ammo_casing/shotgun/blank(src)
|
||||
new /obj/item/ammo_casing/shotgun/blank(src)
|
||||
new /obj/item/ammo_casing/shotgun/blank(src)
|
||||
/obj/item/weapon/storage/box/blanks/New()
|
||||
..()
|
||||
for(var/i = 1 to 7)
|
||||
new /obj/item/ammo_casing/shotgun/blank(src)
|
||||
|
||||
/obj/item/weapon/storage/box/beanbags
|
||||
@@ -175,14 +138,9 @@
|
||||
icon_state = "beanshot_box"
|
||||
item_state = "syringe_kit"
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/ammo_casing/shotgun/beanbag(src)
|
||||
new /obj/item/ammo_casing/shotgun/beanbag(src)
|
||||
new /obj/item/ammo_casing/shotgun/beanbag(src)
|
||||
new /obj/item/ammo_casing/shotgun/beanbag(src)
|
||||
new /obj/item/ammo_casing/shotgun/beanbag(src)
|
||||
new /obj/item/ammo_casing/shotgun/beanbag(src)
|
||||
/obj/item/weapon/storage/box/beanbags/New()
|
||||
..()
|
||||
for(var/i = 1 to 7)
|
||||
new /obj/item/ammo_casing/shotgun/beanbag(src)
|
||||
|
||||
/obj/item/weapon/storage/box/shotgunammo
|
||||
@@ -191,14 +149,9 @@
|
||||
icon_state = "lethalshellshot_box"
|
||||
item_state = "syringe_kit"
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/ammo_casing/shotgun(src)
|
||||
new /obj/item/ammo_casing/shotgun(src)
|
||||
new /obj/item/ammo_casing/shotgun(src)
|
||||
new /obj/item/ammo_casing/shotgun(src)
|
||||
new /obj/item/ammo_casing/shotgun(src)
|
||||
new /obj/item/ammo_casing/shotgun(src)
|
||||
/obj/item/weapon/storage/box/shotgunammo/New()
|
||||
..()
|
||||
for(var/i = 1 to 7)
|
||||
new /obj/item/ammo_casing/shotgun(src)
|
||||
|
||||
/obj/item/weapon/storage/box/shotgunshells
|
||||
@@ -207,14 +160,9 @@
|
||||
icon_state = "lethalslug_box"
|
||||
item_state = "syringe_kit"
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/ammo_casing/shotgun/pellet(src)
|
||||
new /obj/item/ammo_casing/shotgun/pellet(src)
|
||||
new /obj/item/ammo_casing/shotgun/pellet(src)
|
||||
new /obj/item/ammo_casing/shotgun/pellet(src)
|
||||
new /obj/item/ammo_casing/shotgun/pellet(src)
|
||||
new /obj/item/ammo_casing/shotgun/pellet(src)
|
||||
/obj/item/weapon/storage/box/shotgunshells/New()
|
||||
..()
|
||||
for(var/i = 1 to 7)
|
||||
new /obj/item/ammo_casing/shotgun/pellet(src)
|
||||
|
||||
/obj/item/weapon/storage/box/flashshells
|
||||
@@ -223,14 +171,9 @@
|
||||
icon_state = "illumshot_box"
|
||||
item_state = "syringe_kit"
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/ammo_casing/shotgun/flash(src)
|
||||
new /obj/item/ammo_casing/shotgun/flash(src)
|
||||
new /obj/item/ammo_casing/shotgun/flash(src)
|
||||
new /obj/item/ammo_casing/shotgun/flash(src)
|
||||
new /obj/item/ammo_casing/shotgun/flash(src)
|
||||
new /obj/item/ammo_casing/shotgun/flash(src)
|
||||
/obj/item/weapon/storage/box/flashshells/New()
|
||||
..()
|
||||
for(var/i = 1 to 7)
|
||||
new /obj/item/ammo_casing/shotgun/flash(src)
|
||||
|
||||
/obj/item/weapon/storage/box/stunshells
|
||||
@@ -239,14 +182,9 @@
|
||||
icon_state = "stunshot_box"
|
||||
item_state = "syringe_kit"
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/ammo_casing/shotgun/stunshell(src)
|
||||
new /obj/item/ammo_casing/shotgun/stunshell(src)
|
||||
new /obj/item/ammo_casing/shotgun/stunshell(src)
|
||||
new /obj/item/ammo_casing/shotgun/stunshell(src)
|
||||
new /obj/item/ammo_casing/shotgun/stunshell(src)
|
||||
new /obj/item/ammo_casing/shotgun/stunshell(src)
|
||||
/obj/item/weapon/storage/box/stunshells/New()
|
||||
..()
|
||||
for(var/i = 1 to 7)
|
||||
new /obj/item/ammo_casing/shotgun/stunshell(src)
|
||||
|
||||
/obj/item/weapon/storage/box/practiceshells
|
||||
@@ -255,28 +193,18 @@
|
||||
icon_state = "blankshot_box"
|
||||
item_state = "syringe_kit"
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/ammo_casing/shotgun/practice(src)
|
||||
new /obj/item/ammo_casing/shotgun/practice(src)
|
||||
new /obj/item/ammo_casing/shotgun/practice(src)
|
||||
new /obj/item/ammo_casing/shotgun/practice(src)
|
||||
new /obj/item/ammo_casing/shotgun/practice(src)
|
||||
new /obj/item/ammo_casing/shotgun/practice(src)
|
||||
/obj/item/weapon/storage/box/practiceshells/New()
|
||||
..()
|
||||
for(var/i = 1 to 7)
|
||||
new /obj/item/ammo_casing/shotgun/practice(src)
|
||||
|
||||
/obj/item/weapon/storage/box/sniperammo
|
||||
name = "box of 14.5mm shells"
|
||||
desc = "It has a picture of a gun and several warning symbols on the front.<br>WARNING: Live ammunition. Misuse may result in serious injury or death."
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/ammo_casing/a145(src)
|
||||
new /obj/item/ammo_casing/a145(src)
|
||||
new /obj/item/ammo_casing/a145(src)
|
||||
new /obj/item/ammo_casing/a145(src)
|
||||
new /obj/item/ammo_casing/a145(src)
|
||||
new /obj/item/ammo_casing/a145(src)
|
||||
/obj/item/weapon/storage/box/sniperammo/New()
|
||||
..()
|
||||
for(var/i = 1 to 7)
|
||||
new /obj/item/ammo_casing/a145(src)
|
||||
|
||||
/obj/item/weapon/storage/box/flashbangs
|
||||
@@ -284,14 +212,9 @@
|
||||
desc = "<B>WARNING: These devices are extremely dangerous and can cause blindness or deafness in repeated use.</B>"
|
||||
icon_state = "flashbang"
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/weapon/grenade/flashbang(src)
|
||||
new /obj/item/weapon/grenade/flashbang(src)
|
||||
new /obj/item/weapon/grenade/flashbang(src)
|
||||
new /obj/item/weapon/grenade/flashbang(src)
|
||||
new /obj/item/weapon/grenade/flashbang(src)
|
||||
new /obj/item/weapon/grenade/flashbang(src)
|
||||
/obj/item/weapon/storage/box/flashbangs/New()
|
||||
..()
|
||||
for(var/i = 1 to 7)
|
||||
new /obj/item/weapon/grenade/flashbang(src)
|
||||
|
||||
/obj/item/weapon/storage/box/emps
|
||||
@@ -299,39 +222,29 @@
|
||||
desc = "A box containing 5 military grade EMP grenades.<br> WARNING: Do not use near unshielded electronics or biomechanical augmentations, death or permanent paralysis may occur."
|
||||
icon_state = "emp"
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/weapon/grenade/empgrenade(src)
|
||||
new /obj/item/weapon/grenade/empgrenade(src)
|
||||
new /obj/item/weapon/grenade/empgrenade(src)
|
||||
new /obj/item/weapon/grenade/empgrenade(src)
|
||||
new /obj/item/weapon/grenade/empgrenade(src)
|
||||
/obj/item/weapon/storage/box/emps/New()
|
||||
..()
|
||||
for(var/i = 1 to 5)
|
||||
new /obj/item/weapon/grenade/empgrenade(src)
|
||||
|
||||
/obj/item/weapon/storage/box/empslite
|
||||
name = "box of low yield emp grenades"
|
||||
desc = "A box containing 5 low yield EMP grenades.<br> WARNING: Do not use near unshielded electronics or biomechanical augmentations, death or permanent paralysis may occur."
|
||||
icon_state = "emp"
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/weapon/grenade/empgrenade/low_yield(src)
|
||||
new /obj/item/weapon/grenade/empgrenade/low_yield(src)
|
||||
new /obj/item/weapon/grenade/empgrenade/low_yield(src)
|
||||
new /obj/item/weapon/grenade/empgrenade/low_yield(src)
|
||||
/obj/item/weapon/storage/box/empslite/New()
|
||||
..()
|
||||
for(var/i = 1 to 5)
|
||||
new /obj/item/weapon/grenade/empgrenade/low_yield(src)
|
||||
|
||||
/obj/item/weapon/storage/box/smokes
|
||||
name = "box of smoke bombs"
|
||||
desc = "A box containing 5 smoke bombs."
|
||||
desc = "A box containing 7 smoke bombs."
|
||||
icon_state = "flashbang"
|
||||
|
||||
|
||||
/obj/item/weapon/storage/box/smokes/New()
|
||||
..()
|
||||
new /obj/item/weapon/grenade/smokebomb(src)
|
||||
new /obj/item/weapon/grenade/smokebomb(src)
|
||||
new /obj/item/weapon/grenade/smokebomb(src)
|
||||
new /obj/item/weapon/grenade/smokebomb(src)
|
||||
..()
|
||||
for(var/i = 1 to 7)
|
||||
new /obj/item/weapon/grenade/smokebomb(src)
|
||||
|
||||
/obj/item/weapon/storage/box/anti_photons
|
||||
@@ -340,11 +253,8 @@
|
||||
icon_state = "flashbang"
|
||||
|
||||
/obj/item/weapon/storage/box/anti_photons/New()
|
||||
..()
|
||||
new /obj/item/weapon/grenade/anti_photon(src)
|
||||
new /obj/item/weapon/grenade/anti_photon(src)
|
||||
new /obj/item/weapon/grenade/anti_photon(src)
|
||||
new /obj/item/weapon/grenade/anti_photon(src)
|
||||
..()
|
||||
for(var/i = 1 to 5)
|
||||
new /obj/item/weapon/grenade/anti_photon(src)
|
||||
|
||||
/obj/item/weapon/storage/box/frags
|
||||
@@ -352,73 +262,63 @@
|
||||
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."
|
||||
icon_state = "frag"
|
||||
|
||||
/obj/item/weapon/storage/box/frags/New()
|
||||
..()
|
||||
for(var/i = 1 to 5)
|
||||
new /obj/item/weapon/grenade/explosive(src)
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/weapon/grenade/explosive(src)
|
||||
new /obj/item/weapon/grenade/explosive(src)
|
||||
new /obj/item/weapon/grenade/explosive(src)
|
||||
new /obj/item/weapon/grenade/explosive(src)
|
||||
new /obj/item/weapon/grenade/explosive(src)
|
||||
/obj/item/weapon/storage/box/metalfoam
|
||||
name = "box of metal foam grenades."
|
||||
desc = "A box containing 7 metal foam grenades."
|
||||
icon_state = "flashbang"
|
||||
|
||||
/obj/item/weapon/storage/box/metalfoam/New()
|
||||
..()
|
||||
for(var/i = 1 to 7)
|
||||
new /obj/item/weapon/grenade/chem_grenade/metalfoam
|
||||
|
||||
/obj/item/weapon/storage/box/trackimp
|
||||
name = "boxed tracking implant kit"
|
||||
desc = "Box full of scum-bag tracking utensils."
|
||||
icon_state = "implant"
|
||||
|
||||
New()
|
||||
..()
|
||||
/obj/item/weapon/storage/box/trackimp/New()
|
||||
..()
|
||||
for(var/i = 1 to 4)
|
||||
new /obj/item/weapon/implantcase/tracking(src)
|
||||
new /obj/item/weapon/implantcase/tracking(src)
|
||||
new /obj/item/weapon/implantcase/tracking(src)
|
||||
new /obj/item/weapon/implantcase/tracking(src)
|
||||
new /obj/item/weapon/implanter(src)
|
||||
new /obj/item/weapon/implantpad(src)
|
||||
new /obj/item/weapon/locator(src)
|
||||
new /obj/item/weapon/implanter(src)
|
||||
new /obj/item/weapon/implantpad(src)
|
||||
new /obj/item/weapon/locator(src)
|
||||
|
||||
/obj/item/weapon/storage/box/chemimp
|
||||
name = "boxed chemical implant kit"
|
||||
desc = "Box of stuff used to implant chemicals."
|
||||
icon_state = "implant"
|
||||
|
||||
New()
|
||||
..()
|
||||
/obj/item/weapon/storage/box/chemimp/New()
|
||||
..()
|
||||
for(var/i = 1 to 5)
|
||||
new /obj/item/weapon/implantcase/chem(src)
|
||||
new /obj/item/weapon/implantcase/chem(src)
|
||||
new /obj/item/weapon/implantcase/chem(src)
|
||||
new /obj/item/weapon/implantcase/chem(src)
|
||||
new /obj/item/weapon/implantcase/chem(src)
|
||||
new /obj/item/weapon/implanter(src)
|
||||
new /obj/item/weapon/implantpad(src)
|
||||
|
||||
|
||||
new /obj/item/weapon/implanter(src)
|
||||
new /obj/item/weapon/implantpad(src)
|
||||
|
||||
/obj/item/weapon/storage/box/rxglasses
|
||||
name = "box of prescription glasses"
|
||||
desc = "This box contains nerd glasses."
|
||||
icon_state = "glasses"
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/clothing/glasses/regular(src)
|
||||
new /obj/item/clothing/glasses/regular(src)
|
||||
new /obj/item/clothing/glasses/regular(src)
|
||||
new /obj/item/clothing/glasses/regular(src)
|
||||
new /obj/item/clothing/glasses/regular(src)
|
||||
new /obj/item/clothing/glasses/regular(src)
|
||||
/obj/item/weapon/storage/box/rxglasses/New()
|
||||
..()
|
||||
for(var/i = 1 to 7)
|
||||
new /obj/item/clothing/glasses/regular(src)
|
||||
|
||||
/obj/item/weapon/storage/box/drinkingglasses
|
||||
name = "box of drinking glasses"
|
||||
desc = "It has a picture of drinking glasses on it."
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src)
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src)
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src)
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src)
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src)
|
||||
/obj/item/weapon/storage/box/drinkingglasses/New()
|
||||
..()
|
||||
for(var/i = 1 to 7)
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src)
|
||||
|
||||
/obj/item/weapon/storage/box/cdeathalarm_kit
|
||||
@@ -427,57 +327,38 @@
|
||||
icon_state = "implant"
|
||||
item_state = "syringe_kit"
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/weapon/implanter(src)
|
||||
new /obj/item/weapon/implantcase/death_alarm(src)
|
||||
new /obj/item/weapon/implantcase/death_alarm(src)
|
||||
new /obj/item/weapon/implantcase/death_alarm(src)
|
||||
new /obj/item/weapon/implantcase/death_alarm(src)
|
||||
new /obj/item/weapon/implantcase/death_alarm(src)
|
||||
/obj/item/weapon/storage/box/cdeathalarm_kit/New()
|
||||
..()
|
||||
for(var/i = 1 to 7)
|
||||
new /obj/item/weapon/implantcase/death_alarm(src)
|
||||
new /obj/item/weapon/implanter(src)
|
||||
|
||||
/obj/item/weapon/storage/box/condimentbottles
|
||||
name = "box of condiment bottles"
|
||||
desc = "It has a large ketchup smear on it."
|
||||
|
||||
New()
|
||||
..()
|
||||
/obj/item/weapon/storage/box/condimentbottles/New()
|
||||
..()
|
||||
for(var/i = 1 to 7)
|
||||
new /obj/item/weapon/reagent_containers/food/condiment(src)
|
||||
new /obj/item/weapon/reagent_containers/food/condiment(src)
|
||||
new /obj/item/weapon/reagent_containers/food/condiment(src)
|
||||
new /obj/item/weapon/reagent_containers/food/condiment(src)
|
||||
new /obj/item/weapon/reagent_containers/food/condiment(src)
|
||||
new /obj/item/weapon/reagent_containers/food/condiment(src)
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/storage/box/cups
|
||||
name = "box of paper cups"
|
||||
desc = "It has pictures of paper cups on the front."
|
||||
New()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src )
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src )
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src )
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src )
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src )
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src )
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src )
|
||||
|
||||
/obj/item/weapon/storage/box/cups/New()
|
||||
..()
|
||||
for(var/i = 1 to 7)
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/sillycup(src)
|
||||
|
||||
/obj/item/weapon/storage/box/donkpockets
|
||||
name = "box of donk-pockets"
|
||||
desc = "<B>Instructions:</B> <I>Heat in microwave. Product will cool if not eaten within seven minutes.</I>"
|
||||
icon_state = "donk_kit"
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src)
|
||||
/obj/item/weapon/storage/box/donkpockets/New()
|
||||
..()
|
||||
for(var/i = 1 to 7)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src)
|
||||
|
||||
/obj/item/weapon/storage/box/sinpockets
|
||||
@@ -485,13 +366,9 @@
|
||||
desc = "<B>Instructions:</B> <I>Crush bottom of package to initiate chemical heating. Wait for 20 seconds before consumption. Product will cool if not eaten within seven minutes.</I>"
|
||||
icon_state = "donk_kit"
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket(src)
|
||||
/obj/item/weapon/storage/box/sinpockets/New()
|
||||
..()
|
||||
for(var/i = 1 to 7)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket(src)
|
||||
|
||||
/obj/item/weapon/storage/box/monkeycubes
|
||||
@@ -500,112 +377,88 @@
|
||||
icon = 'icons/obj/food.dmi'
|
||||
icon_state = "monkeycubebox"
|
||||
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/monkeycube)
|
||||
New()
|
||||
..()
|
||||
if(src.type == /obj/item/weapon/storage/box/monkeycubes)
|
||||
for(var/i = 1 to 5)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped(src)
|
||||
|
||||
/obj/item/weapon/storage/box/monkeycubes/New()
|
||||
..()
|
||||
if(src.type == /obj/item/weapon/storage/box/monkeycubes)
|
||||
for(var/i = 1 to 4)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped(src)
|
||||
|
||||
/obj/item/weapon/storage/box/monkeycubes/farwacubes
|
||||
name = "farwa cube box"
|
||||
desc = "Drymate brand farwa cubes, shipped from Ahdomai. Just add water!"
|
||||
New()
|
||||
..()
|
||||
for(var/i = 1 to 5)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/farwacube(src)
|
||||
|
||||
/obj/item/weapon/storage/box/monkeycubes/farwacubes/New()
|
||||
..()
|
||||
for(var/i = 1 to 4)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/farwacube(src)
|
||||
|
||||
/obj/item/weapon/storage/box/monkeycubes/stokcubes
|
||||
name = "stok cube box"
|
||||
desc = "Drymate brand stok cubes, shipped from Moghes. Just add water!"
|
||||
New()
|
||||
..()
|
||||
for(var/i = 1 to 5)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/stokcube(src)
|
||||
|
||||
/obj/item/weapon/storage/box/monkeycubes/stokcubes/New()
|
||||
..()
|
||||
for(var/i = 1 to 4)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/stokcube(src)
|
||||
|
||||
/obj/item/weapon/storage/box/monkeycubes/neaeracubes
|
||||
name = "neaera cube box"
|
||||
desc = "Drymate brand neaera cubes, shipped from Jargon 4. Just add water!"
|
||||
New()
|
||||
..()
|
||||
for(var/i = 1 to 5)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/neaeracube(src)
|
||||
|
||||
/obj/item/weapon/storage/box/monkeycubes/neaeracubes/New()
|
||||
..()
|
||||
for(var/i = 1 to 4)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/neaeracube(src)
|
||||
|
||||
/obj/item/weapon/storage/box/ids
|
||||
name = "box of spare IDs"
|
||||
desc = "Has so many empty IDs."
|
||||
icon_state = "id"
|
||||
|
||||
New()
|
||||
..()
|
||||
/obj/item/weapon/storage/box/ids/New()
|
||||
..()
|
||||
for(var/i = 1 to 7)
|
||||
new /obj/item/weapon/card/id(src)
|
||||
new /obj/item/weapon/card/id(src)
|
||||
new /obj/item/weapon/card/id(src)
|
||||
new /obj/item/weapon/card/id(src)
|
||||
new /obj/item/weapon/card/id(src)
|
||||
new /obj/item/weapon/card/id(src)
|
||||
new /obj/item/weapon/card/id(src)
|
||||
|
||||
|
||||
/obj/item/weapon/storage/box/seccarts
|
||||
name = "box of spare R.O.B.U.S.T. Cartridges"
|
||||
desc = "A box full of R.O.B.U.S.T. Cartridges, used by Security."
|
||||
icon_state = "pda"
|
||||
|
||||
New()
|
||||
..()
|
||||
/obj/item/weapon/storage/box/seccarts/New()
|
||||
..()
|
||||
for(var/i = 1 to 7)
|
||||
new /obj/item/weapon/cartridge/security(src)
|
||||
new /obj/item/weapon/cartridge/security(src)
|
||||
new /obj/item/weapon/cartridge/security(src)
|
||||
new /obj/item/weapon/cartridge/security(src)
|
||||
new /obj/item/weapon/cartridge/security(src)
|
||||
new /obj/item/weapon/cartridge/security(src)
|
||||
new /obj/item/weapon/cartridge/security(src)
|
||||
|
||||
|
||||
/obj/item/weapon/storage/box/handcuffs
|
||||
name = "box of spare handcuffs"
|
||||
desc = "A box full of handcuffs."
|
||||
icon_state = "handcuff"
|
||||
|
||||
New()
|
||||
..()
|
||||
/obj/item/weapon/storage/box/handcuffs/New()
|
||||
..()
|
||||
for(var/i = 1 to 7)
|
||||
new /obj/item/weapon/handcuffs(src)
|
||||
new /obj/item/weapon/handcuffs(src)
|
||||
new /obj/item/weapon/handcuffs(src)
|
||||
new /obj/item/weapon/handcuffs(src)
|
||||
new /obj/item/weapon/handcuffs(src)
|
||||
new /obj/item/weapon/handcuffs(src)
|
||||
new /obj/item/weapon/handcuffs(src)
|
||||
|
||||
|
||||
/obj/item/weapon/storage/box/mousetraps
|
||||
name = "box of Pest-B-Gon mousetraps"
|
||||
desc = "<B><FONT color='red'>WARNING:</FONT></B> <I>Keep out of reach of children</I>."
|
||||
icon_state = "mousetraps"
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/device/assembly/mousetrap( src )
|
||||
new /obj/item/device/assembly/mousetrap( src )
|
||||
new /obj/item/device/assembly/mousetrap( src )
|
||||
new /obj/item/device/assembly/mousetrap( src )
|
||||
new /obj/item/device/assembly/mousetrap( src )
|
||||
new /obj/item/device/assembly/mousetrap( src )
|
||||
/obj/item/weapon/storage/box/mousetraps/New()
|
||||
..()
|
||||
for(var/i = 1 to 7)
|
||||
new /obj/item/device/assembly/mousetrap(src)
|
||||
|
||||
/obj/item/weapon/storage/box/pillbottles
|
||||
name = "box of pill bottles"
|
||||
desc = "It has pictures of pill bottles on its front."
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/weapon/storage/pill_bottle( src )
|
||||
new /obj/item/weapon/storage/pill_bottle( src )
|
||||
new /obj/item/weapon/storage/pill_bottle( src )
|
||||
new /obj/item/weapon/storage/pill_bottle( src )
|
||||
new /obj/item/weapon/storage/pill_bottle( src )
|
||||
new /obj/item/weapon/storage/pill_bottle( src )
|
||||
new /obj/item/weapon/storage/pill_bottle( src )
|
||||
|
||||
/obj/item/weapon/storage/box/pillbottles/New()
|
||||
..()
|
||||
for(var/i = 1 to 7)
|
||||
new /obj/item/weapon/storage/pill_bottle(src)
|
||||
|
||||
/obj/item/weapon/storage/box/snappops
|
||||
name = "snap pop box"
|
||||
@@ -613,10 +466,11 @@
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "spbox"
|
||||
can_hold = list(/obj/item/toy/snappop)
|
||||
New()
|
||||
..()
|
||||
for(var/i = 1 to 8)
|
||||
new /obj/item/toy/snappop(src)
|
||||
|
||||
/obj/item/weapon/storage/box/snappops/New()
|
||||
..()
|
||||
for(var/i = 1 to 8)
|
||||
new /obj/item/toy/snappop(src)
|
||||
|
||||
/obj/item/weapon/storage/box/matches
|
||||
name = "matchbox"
|
||||
@@ -628,28 +482,29 @@
|
||||
slot_flags = SLOT_BELT
|
||||
can_hold = list(/obj/item/weapon/flame/match)
|
||||
|
||||
New()
|
||||
..()
|
||||
for(var/i=1 to 10)
|
||||
new /obj/item/weapon/flame/match(src)
|
||||
/obj/item/weapon/storage/box/matches/New()
|
||||
..()
|
||||
for(var/i=1 to 10)
|
||||
new /obj/item/weapon/flame/match(src)
|
||||
|
||||
attackby(obj/item/weapon/flame/match/W as obj, mob/user as mob)
|
||||
if(istype(W) && !W.lit && !W.burnt)
|
||||
W.lit = 1
|
||||
W.damtype = "burn"
|
||||
W.icon_state = "match_lit"
|
||||
processing_objects.Add(W)
|
||||
W.update_icon()
|
||||
return
|
||||
/obj/item/weapon/storage/box/matches/attackby(obj/item/weapon/flame/match/W as obj, mob/user as mob)
|
||||
if(istype(W) && !W.lit && !W.burnt)
|
||||
W.lit = 1
|
||||
W.damtype = "burn"
|
||||
W.icon_state = "match_lit"
|
||||
processing_objects.Add(W)
|
||||
W.update_icon()
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/box/autoinjectors
|
||||
name = "box of injectors"
|
||||
desc = "Contains autoinjectors."
|
||||
icon_state = "syringe"
|
||||
New()
|
||||
..()
|
||||
for (var/i = 1 to 7)
|
||||
new /obj/item/weapon/reagent_containers/hypospray/autoinjector(src)
|
||||
|
||||
/obj/item/weapon/storage/box/autoinjectors/New()
|
||||
..()
|
||||
for (var/i = 1 to 7)
|
||||
new /obj/item/weapon/reagent_containers/hypospray/autoinjector(src)
|
||||
|
||||
/obj/item/weapon/storage/box/lights
|
||||
name = "box of replacement bulbs"
|
||||
@@ -664,7 +519,7 @@
|
||||
|
||||
/obj/item/weapon/storage/box/lights/bulbs/New()
|
||||
..()
|
||||
for(var/i = 0; i < 21; i++)
|
||||
for(var/i = 1 to 24)
|
||||
new /obj/item/weapon/light/bulb(src)
|
||||
|
||||
/obj/item/weapon/storage/box/lights/tubes
|
||||
@@ -673,7 +528,7 @@
|
||||
|
||||
/obj/item/weapon/storage/box/lights/tubes/New()
|
||||
..()
|
||||
for(var/i = 0; i < 21; i++)
|
||||
for(var/i = 1 to 24)
|
||||
new /obj/item/weapon/light/tube(src)
|
||||
|
||||
/obj/item/weapon/storage/box/lights/mixed
|
||||
@@ -682,9 +537,9 @@
|
||||
|
||||
/obj/item/weapon/storage/box/lights/mixed/New()
|
||||
..()
|
||||
for(var/i = 0; i < 14; i++)
|
||||
for(var/i = 1 to 16)
|
||||
new /obj/item/weapon/light/tube(src)
|
||||
for(var/i = 0; i < 7; i++)
|
||||
for(var/i = 1 to 8)
|
||||
new /obj/item/weapon/light/bulb(src)
|
||||
|
||||
/obj/item/weapon/storage/box/freezer
|
||||
@@ -699,3 +554,20 @@
|
||||
max_storage_space = 21
|
||||
use_to_pickup = 1 // for picking up broken bulbs, not that most people will try
|
||||
|
||||
/obj/item/weapon/storage/box/ambrosia
|
||||
name = "ambrosia seeds box"
|
||||
desc = "Contains the seeds you need to get a little high."
|
||||
|
||||
/obj/item/weapon/storage/box/ambrosia/New()
|
||||
..()
|
||||
for(var/i = 1 to 7)
|
||||
new /obj/item/seeds/ambrosiavulgarisseed(src)
|
||||
|
||||
/obj/item/weapon/storage/box/ambrosiadeus
|
||||
name = "ambrosia deus seeds box"
|
||||
desc = "Contains the seeds you need to get a proper healthy high."
|
||||
|
||||
/obj/item/weapon/storage/box/ambrosiadeus/New()
|
||||
..()
|
||||
for(var/i = 1 to 7)
|
||||
new /obj/item/seeds/ambrosiadeusseed(src)
|
||||
@@ -82,6 +82,6 @@
|
||||
use_to_pickup = 0
|
||||
|
||||
/obj/item/weapon/storage/laundry_basket/offhand/dropped(mob/user as mob)
|
||||
user.removeItem(linked, force = 1)
|
||||
user.drop_from_inventory(linked)
|
||||
return
|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
if(src.locked)
|
||||
src.icon_state = src.icon_locked
|
||||
user << "<span class='notice'>You lock \the [src]!</span>"
|
||||
close_all()
|
||||
return
|
||||
else
|
||||
src.icon_state = src.icon_closed
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
icon_state = "donutbox"
|
||||
name = "donut box"
|
||||
var/startswith = 6
|
||||
max_storage_space = 12
|
||||
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/donut)
|
||||
foldable = /obj/item/stack/material/cardboard
|
||||
|
||||
|
||||
@@ -45,7 +45,6 @@
|
||||
..()
|
||||
|
||||
/obj/item/weapon/storage/MouseDrop(obj/over_object as obj)
|
||||
|
||||
if(!canremove)
|
||||
return
|
||||
|
||||
@@ -69,7 +68,7 @@
|
||||
if (( usr.restrained() ) || ( usr.stat ))
|
||||
return
|
||||
|
||||
if ((src.loc == usr) && !usr.removeItem(src))
|
||||
if ((src.loc == usr) && !(istype(over_object, /obj/screen)) && !usr.unEquip(src))
|
||||
return
|
||||
|
||||
switch(over_object.name)
|
||||
@@ -347,7 +346,7 @@
|
||||
/obj/item/weapon/storage/proc/handle_item_insertion(obj/item/W as obj, prevent_warning = 0)
|
||||
if(!istype(W)) return 0
|
||||
if(usr)
|
||||
usr.removeItem(W)
|
||||
usr.remove_from_mob(W)
|
||||
usr.update_icons() //update our overlays
|
||||
W.loc = src
|
||||
W.on_enter_storage(src)
|
||||
|
||||
@@ -136,10 +136,10 @@
|
||||
filled = TRUE
|
||||
|
||||
/obj/item/weapon/storage/toolbox/lunchbox/mars
|
||||
name = "\improper Mars university lunchbox"
|
||||
name = "\improper Mojave university lunchbox"
|
||||
icon_state = "lunchbox_marsuniversity"
|
||||
item_state = "toolbox_red"
|
||||
desc = "A little lunchbox. This one is branded with the Mars university logo!"
|
||||
desc = "A little lunchbox. This one is branded with the Mojave university logo!"
|
||||
|
||||
/obj/item/weapon/storage/toolbox/lunchbox/mars/filled
|
||||
filled = TRUE
|
||||
|
||||
@@ -155,6 +155,9 @@
|
||||
..()
|
||||
|
||||
//secborg stun baton module
|
||||
/obj/item/weapon/melee/baton/robot
|
||||
hitcost = 500
|
||||
|
||||
/obj/item/weapon/melee/baton/robot/attack_self(mob/user)
|
||||
//try to find our power cell
|
||||
var/mob/living/silicon/robot/R = loc
|
||||
|
||||
@@ -1,71 +0,0 @@
|
||||
/obj/item/robot_parts/attack(mob/living/carbon/human/M as mob, mob/living/carbon/user as mob)
|
||||
var/limbloc = null
|
||||
|
||||
if(!istype(M))
|
||||
return ..()
|
||||
|
||||
if(!((locate(/obj/machinery/optable, M.loc) && M.resting) || (locate(/obj/structure/bed/roller, M.loc) && (M.buckled || M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat)) && prob(75) || (locate(/obj/structure/table/, M.loc) && (M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat) && prob(66))))
|
||||
return ..()
|
||||
|
||||
if(!istype(M, /mob/living/carbon/human))
|
||||
return ..()
|
||||
|
||||
if((user.zone_sel.selecting == "l_arm") && (istype(src, /obj/item/robot_parts/l_arm)))
|
||||
limbloc = "l_hand"
|
||||
else if((user.zone_sel.selecting == "r_arm") && (istype(src, /obj/item/robot_parts/r_arm)))
|
||||
limbloc = "r_hand"
|
||||
else if((user.zone_sel.selecting == "r_leg") && (istype(src, /obj/item/robot_parts/r_leg)))
|
||||
limbloc = "r_foot"
|
||||
else if((user.zone_sel.selecting == "l_leg") && (istype(src, /obj/item/robot_parts/l_leg)))
|
||||
limbloc = "l_foot"
|
||||
else
|
||||
user << "<span class='warning'>That doesn't fit there!</span>"
|
||||
return ..()
|
||||
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/datum/organ/external/S = H.organs[user.zone_sel.selecting]
|
||||
if(S.status & ORGAN_DESTROYED)
|
||||
if(!(S.status & ORGAN_ATTACHABLE))
|
||||
user << "<span class='warning'>The wound is not ready for a replacement!</span>"
|
||||
return 0
|
||||
if(M != user)
|
||||
M.visible_message( \
|
||||
"<span class='notice'>\The [user] is beginning to attach \the [src] where [H]'s [S.display_name] used to be.</span>", \
|
||||
"<span class='notice'>\The [user] begins to attach \the [src] where your [S.display_name] used to be.</span>")
|
||||
else
|
||||
M.visible_message( \
|
||||
"<span class='notice'>\The [user] begins to attach a robotic limb where \his [S.display_name] used to be with [src].</span>", \
|
||||
"<span class='notice'>You begin to attach \the [src] where your [S.display_name] used to be.</span>")
|
||||
|
||||
if(do_mob(user, H, 100))
|
||||
if(M != user)
|
||||
M.visible_message( \
|
||||
"<span class='notice'>\The [user] finishes attaching [H]'s new [S.display_name].</span>", \
|
||||
"<span class='notice'>\The [user] finishes attaching your new [S.display_name].</span>")
|
||||
else
|
||||
M.visible_message( \
|
||||
"<span class='notice'>\The [user] finishes attaching \his new [S.display_name].</span>", \
|
||||
"<span class='notice'>You finish attaching your new [S.display_name].</span>")
|
||||
|
||||
if(H == user && prob(25))
|
||||
user << "<span class='warning'>You mess up!</span>"
|
||||
S.take_damage(15)
|
||||
|
||||
S.status &= ~ORGAN_BROKEN
|
||||
S.status &= ~ORGAN_SPLINTED
|
||||
S.status &= ~ORGAN_ATTACHABLE
|
||||
S.status &= ~ORGAN_DESTROYED
|
||||
S.status |= ORGAN_ROBOT
|
||||
var/datum/organ/external/T = H.organs["[limbloc]"]
|
||||
T.status &= ~ORGAN_BROKEN
|
||||
T.status &= ~ORGAN_SPLINTED
|
||||
T.status &= ~ORGAN_ATTACHABLE
|
||||
T.status &= ~ORGAN_DESTROYED
|
||||
T.status |= ORGAN_ROBOT
|
||||
H.update_body()
|
||||
M.updatehealth()
|
||||
M.UpdateDamageIcon()
|
||||
qdel(src)
|
||||
|
||||
return 1
|
||||
return 0
|
||||
@@ -104,7 +104,8 @@
|
||||
if ((!F.status)||(F.ptank)) return
|
||||
src.master = F
|
||||
F.ptank = src
|
||||
user.removeItem(src, F)
|
||||
user.remove_from_mob(src)
|
||||
src.loc = F
|
||||
return
|
||||
|
||||
/*
|
||||
|
||||
@@ -62,7 +62,8 @@
|
||||
else if(user.zone_sel.selecting == "r_hand" || user.zone_sel.selecting == "l_hand")
|
||||
var/obj/item/weapon/handcuffs/cable/tape/T = new(user)
|
||||
if(!T.place_handcuffs(H, user))
|
||||
user.deleteItem(T)
|
||||
user.unEquip(T)
|
||||
qdel(T)
|
||||
else
|
||||
return ..()
|
||||
return 1
|
||||
@@ -70,7 +71,7 @@
|
||||
/obj/item/weapon/tape_roll/proc/stick(var/obj/item/weapon/W, mob/user)
|
||||
if(!istype(W, /obj/item/weapon/paper))
|
||||
return
|
||||
user.removeItem(W)
|
||||
user.drop_from_inventory(W)
|
||||
var/obj/item/weapon/ducttape/tape = new(get_turf(src))
|
||||
tape.attach(W)
|
||||
user.put_in_hands(tape)
|
||||
@@ -106,7 +107,7 @@
|
||||
|
||||
user << "You remove \the [initial(name)] from [stuck]."
|
||||
|
||||
user.removeItem(src)
|
||||
user.drop_from_inventory(src)
|
||||
stuck.forceMove(get_turf(src))
|
||||
user.put_in_hands(stuck)
|
||||
stuck = null
|
||||
@@ -128,7 +129,8 @@
|
||||
user << "You cannot reach that from here." // can only place stuck papers in cardinal directions, to
|
||||
return // reduce papers around corners issue.
|
||||
|
||||
user.removeItem(src, source_turf)
|
||||
user.drop_from_inventory(src)
|
||||
forceMove(source_turf)
|
||||
|
||||
if(params)
|
||||
var/list/mouse_control = params2list(params)
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
throw_range = 5
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 75)
|
||||
attack_verb = list("stabbed")
|
||||
sharp = 1
|
||||
|
||||
suicide_act(mob/user)
|
||||
viewers(user) << pick("<span class='danger'>\The [user] is stabbing the [src.name] into \his temple! It looks like \he's trying to commit suicide.</span>", \
|
||||
@@ -195,12 +196,12 @@
|
||||
if (user.client)
|
||||
user.client.screen -= src
|
||||
if (user.r_hand == src)
|
||||
user.removeItem(src)
|
||||
user.remove_from_mob(src)
|
||||
else
|
||||
user.removeItem(src)
|
||||
user.remove_from_mob(src)
|
||||
src.master = F
|
||||
src.layer = initial(src.layer)
|
||||
user.removeItem(src)
|
||||
user.remove_from_mob(src)
|
||||
if (user.client)
|
||||
user.client.screen -= src
|
||||
src.loc = F
|
||||
@@ -427,21 +428,18 @@
|
||||
var/mob/living/carbon/human/H = A
|
||||
var/obj/item/organ/external/S = H.organs_by_name[user.zone_sel.selecting]
|
||||
|
||||
if(!S || !(S.status & ORGAN_ROBOT))
|
||||
if(!S || S.robotic < ORGAN_ROBOT || S.open == 3)
|
||||
return ..()
|
||||
|
||||
if(S.brute_dam)
|
||||
if(S.brute_dam < ROBOLIMB_SELF_REPAIR_CAP)
|
||||
S.heal_damage(15,0,0,1)
|
||||
user.visible_message("<span class='notice'>\The [user] patches some dents on \the [H]'s [S.name] with \the [src].</span>")
|
||||
else if(S.open < 3)
|
||||
user << "<span class='danger'>The damage is far too severe to patch over externally.</span>"
|
||||
else
|
||||
return ..()
|
||||
else
|
||||
user << "<span class='notice'>Nothing to fix!</span>"
|
||||
return
|
||||
return ..()
|
||||
if(!welding)
|
||||
user << "<span class='warning'>You'll need to turn [src] on to patch the damage on [H]'s [S.name]!</span>"
|
||||
return 1
|
||||
|
||||
if(S.robo_repair(15, BRUTE, "some dents", src, user))
|
||||
remove_fuel(1, user)
|
||||
|
||||
else
|
||||
return ..()
|
||||
|
||||
/*/obj/item/weapon/combitool
|
||||
name = "combi-tool"
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
/obj/item/weapon/towel
|
||||
name = "towel"
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "towel"
|
||||
slot_flags = SLOT_HEAD | SLOT_BELT | SLOT_OCLOTHING
|
||||
force = 3.0
|
||||
w_class = 3.0
|
||||
attack_verb = list("whipped")
|
||||
hitsound = 'sound/weapons/towelwhip.ogg'
|
||||
desc = "A soft cotton towel."
|
||||
|
||||
/obj/item/weapon/towel/attack_self(mob/living/user as mob)
|
||||
user.visible_message(text("<span class='notice'>[] uses [] to towel themselves off.</span>", user, src))
|
||||
playsound(user, 'sound/weapons/towelwipe.ogg', 25, 1)
|
||||
@@ -36,7 +36,7 @@
|
||||
)
|
||||
|
||||
deployed = 1
|
||||
user.removeItem(src)
|
||||
user.drop_from_inventory(src)
|
||||
update_icon()
|
||||
anchored = 1
|
||||
|
||||
|
||||
Reference in New Issue
Block a user