mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2026-08-21 04:06:55 +01:00
Merge branch 'master' into projectile_hit_sounds
This commit is contained in:
@@ -17,7 +17,7 @@
|
||||
|
||||
gravity_is_on = !gravity_is_on
|
||||
for(var/area/A in all_areas)
|
||||
A.gravitychange(gravity_is_on,A)
|
||||
A.gravitychange(gravity_is_on)
|
||||
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
feedback_add_details("admin_secrets_fun_used","Grav")
|
||||
|
||||
@@ -116,6 +116,12 @@ var/list/_client_preferences_by_type
|
||||
enabled_description = "Audible"
|
||||
disabled_description = "Silent"
|
||||
|
||||
/datum/client_preference/drop_sounds
|
||||
description = "Dropped Item Sounds"
|
||||
key = "SOUND_DROPPED"
|
||||
enabled_description = "Enabled"
|
||||
disabled_description = "Disabled"
|
||||
|
||||
/datum/client_preference/mob_tooltips
|
||||
description ="Mob tooltips"
|
||||
key = "MOB_TOOLTIPS"
|
||||
|
||||
@@ -54,23 +54,56 @@
|
||||
if(alt_title && !(alt_title in job.alt_titles))
|
||||
pref.player_alt_titles -= job.title
|
||||
|
||||
/datum/category_item/player_setup_item/occupation/content(mob/user, limit = 18, list/splitJobs = list("Chief Engineer"))
|
||||
/datum/category_item/player_setup_item/occupation/content(mob/user, limit = 20, list/splitJobs = list())
|
||||
if(!job_master)
|
||||
return
|
||||
|
||||
. = list()
|
||||
. += "<tt><center>"
|
||||
. += "<b>Choose occupation chances</b><br>Unavailable occupations are crossed out.<br>"
|
||||
. += "<table width='100%' cellpadding='1' cellspacing='0'><tr><td width='20%'>" // Table within a table for alignment, also allows you to easily add more columns.
|
||||
. += "<table width='100%' cellpadding='1' cellspacing='0'><tr><td width='20%' valign='top'>" // Table within a table for alignment, also allows you to easily add more columns.
|
||||
. += "<table width='100%' cellpadding='1' cellspacing='0'>"
|
||||
var/index = -1
|
||||
|
||||
//The job before the current job. I only use this to get the previous jobs color when I'm filling in blank rows.
|
||||
var/datum/job/lastJob
|
||||
if (!job_master) return
|
||||
for(var/datum/job/job in job_master.occupations)
|
||||
var/datum/department/last_department = null // Used to avoid repeating the look-ahead check for if a whole department can fit.
|
||||
|
||||
if((++index >= limit) || (job.title in splitJobs))
|
||||
var/list/all_valid_jobs = list()
|
||||
// If the occupation window gets opened before SSJob initializes, then it'll just be blank, with no runtimes.
|
||||
// It will work once init is finished.
|
||||
|
||||
for(var/D in SSjob.department_datums)
|
||||
var/datum/department/department = SSjob.department_datums[D]
|
||||
if(department.centcom_only) // No joining as a centcom role, if any are ever added.
|
||||
continue
|
||||
|
||||
for(var/J in department.primary_jobs)
|
||||
all_valid_jobs += department.jobs[J]
|
||||
|
||||
for(var/datum/job/job in all_valid_jobs)
|
||||
var/datum/department/current_department = SSjob.get_primary_department_of_job(job)
|
||||
|
||||
// Should we add a new column?
|
||||
var/make_new_column = FALSE
|
||||
if(++index > limit)
|
||||
// Ran out of rows, make a new column.
|
||||
make_new_column = TRUE
|
||||
|
||||
else if(job.title in splitJobs)
|
||||
// Is hardcoded to split at this job title.
|
||||
make_new_column = TRUE
|
||||
|
||||
else if(current_department != last_department)
|
||||
// If the department is bigger than the limit then we have to split.
|
||||
if(limit >= current_department.primary_jobs.len)
|
||||
// Look ahead to see if we would need to split, and if so, avoid it.
|
||||
if(index + current_department.primary_jobs.len > limit)
|
||||
// Looked ahead, and determined that a new column is needed to avoid splitting the department into two.
|
||||
make_new_column = TRUE
|
||||
|
||||
|
||||
if(make_new_column)
|
||||
/*******
|
||||
if((index < limit) && (lastJob != null))
|
||||
//If the cells were broken up by a job in the splitJob list then it will fill in the rest of the cells with
|
||||
@@ -78,8 +111,9 @@
|
||||
for(var/i = 0, i < (limit - index), i++)
|
||||
. += "<tr bgcolor='[lastJob.selection_color]'><td width='60%' align='right'>//> </a></td><td><a> </a></td></tr>"
|
||||
*******/
|
||||
. += "</table></td><td width='20%'><table width='100%' cellpadding='1' cellspacing='0'>"
|
||||
. += "</table></td><td width='20%' valign='top'><table width='100%' cellpadding='1' cellspacing='0'>"
|
||||
index = 0
|
||||
last_department = current_department
|
||||
|
||||
. += "<tr bgcolor='[job.selection_color]'><td width='60%' align='right'>"
|
||||
|
||||
|
||||
@@ -239,6 +239,21 @@
|
||||
|
||||
feedback_add_details("admin_verb","TAirPumpNoise")
|
||||
|
||||
/client/verb/toggle_drop_sounds()
|
||||
set name = "Toggle Dropped Item Sounds"
|
||||
set category = "Preferences"
|
||||
set desc = "Toggles sounds when items are dropped or thrown."
|
||||
|
||||
var/pref_path = /datum/client_preference/drop_sounds
|
||||
|
||||
toggle_preference(pref_path)
|
||||
|
||||
to_chat(src, "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear sounds when items are dropped or thrown.")
|
||||
|
||||
SScharacter_setup.queue_preferences_save(prefs)
|
||||
|
||||
feedback_add_details("admin_verb", "TDropSounds")
|
||||
|
||||
/client/verb/toggle_safe_firing()
|
||||
set name = "Toggle Gun Firing Intent Requirement"
|
||||
set category = "Preferences"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/obj/item/clothing
|
||||
name = "clothing"
|
||||
siemens_coefficient = 0.9
|
||||
drop_sound = 'sound/items/drop/clothing.ogg'
|
||||
var/list/species_restricted = null //Only these species can wear this kit.
|
||||
var/gunshot_residue //Used by forensics.
|
||||
|
||||
@@ -530,6 +531,7 @@
|
||||
|
||||
if(usr.put_in_hands(holding))
|
||||
usr.visible_message("<span class='danger'>\The [usr] pulls a knife out of their boot!</span>")
|
||||
playsound(get_turf(src), 'sound/weapons/holster/sheathout.ogg', 25)
|
||||
holding = null
|
||||
overlays -= image(icon, "[icon_state]_knife")
|
||||
else
|
||||
|
||||
@@ -53,6 +53,7 @@
|
||||
desc = "A delicate golden chain worn by female skrell to decorate their head tails."
|
||||
icon_state = "skrell_chain"
|
||||
item_state_slots = list(slot_r_hand_str = "egg5", slot_l_hand_str = "egg5")
|
||||
drop_sound = 'sound/items/drop/accessory.ogg'
|
||||
|
||||
/obj/item/clothing/ears/skrell/chain/silver
|
||||
name = "Silver headtail chains"
|
||||
@@ -83,6 +84,7 @@
|
||||
desc = "Golden metallic bands worn by male skrell to adorn their head tails."
|
||||
icon_state = "skrell_band"
|
||||
item_state_slots = list(slot_r_hand_str = "egg5", slot_l_hand_str = "egg5")
|
||||
drop_sound = 'sound/items/drop/accessory.ogg'
|
||||
|
||||
/obj/item/clothing/ears/skrell/band/silver
|
||||
name = "Silver headtail bands"
|
||||
|
||||
@@ -27,6 +27,7 @@ BLIND // can't see anything
|
||||
var/activation_sound = 'sound/items/goggles_charge.ogg'
|
||||
var/obj/screen/overlay = null
|
||||
var/list/away_planes //Holder for disabled planes
|
||||
drop_sound = 'sound/items/drop/accessory.ogg'
|
||||
|
||||
sprite_sheets = list(
|
||||
"Teshari" = 'icons/mob/species/seromi/eyes.dmi',
|
||||
@@ -159,6 +160,7 @@ BLIND // can't see anything
|
||||
item_state_slots = list(slot_r_hand_str = "blindfold", slot_l_hand_str = "blindfold")
|
||||
body_parts_covered = 0
|
||||
var/eye = null
|
||||
drop_sound = 'sound/items/drop/gloves.ogg'
|
||||
|
||||
/obj/item/clothing/glasses/eyepatch/verb/switcheye()
|
||||
set name = "Switch Eyepatch"
|
||||
@@ -340,6 +342,7 @@ BLIND // can't see anything
|
||||
item_state_slots = list(slot_r_hand_str = "blindfold", slot_l_hand_str = "blindfold")
|
||||
flash_protection = FLASH_PROTECTION_MAJOR
|
||||
tint = BLIND
|
||||
drop_sound = 'sound/items/drop/gloves.ogg'
|
||||
|
||||
/obj/item/clothing/glasses/sunglasses/blindfold/tape
|
||||
name = "length of tape"
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
overgloves = 1
|
||||
punch_force = 3
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
drop_sound = 'sound/items/drop/metalshield.ogg'
|
||||
|
||||
/obj/item/clothing/gloves/arm_guard/mob_can_equip(var/mob/living/carbon/human/H, slot)
|
||||
if(..()) //This will only run if no other problems occured when equiping.
|
||||
|
||||
@@ -1,9 +1,17 @@
|
||||
/obj/item/clothing/gloves
|
||||
desc = "you aren't supposed to see this."
|
||||
name = "strange gloves"
|
||||
icon_state = "black"
|
||||
item_state = "bgloves"
|
||||
drop_sound = 'sound/items/drop/gloves.ogg'
|
||||
|
||||
/obj/item/clothing/gloves/yellow
|
||||
desc = "These gloves will protect the wearer from electric shock."
|
||||
name = "insulated gloves"
|
||||
icon_state = "yellow"
|
||||
siemens_coefficient = 0
|
||||
permeability_coefficient = 0.05
|
||||
drop_sound = 'sound/items/drop/rubber.ogg'
|
||||
|
||||
/obj/item/clothing/gloves/fyellow //Cheap Chinese Crap
|
||||
desc = "These gloves are cheap copies of proper insulated gloves. No way this can end badly."
|
||||
@@ -11,6 +19,7 @@
|
||||
icon_state = "yellow"
|
||||
siemens_coefficient = 1 //Set to a default of 1, gets overridden in initialize()
|
||||
permeability_coefficient = 0.05
|
||||
drop_sound = 'sound/items/drop/rubber.ogg'
|
||||
|
||||
/obj/item/clothing/gloves/fyellow/Initialize()
|
||||
. = ..()
|
||||
|
||||
@@ -56,6 +56,7 @@
|
||||
permeability_coefficient = 0.01
|
||||
germ_level = 0
|
||||
fingerprint_chance = 25
|
||||
drop_sound = 'sound/items/drop/rubber.ogg'
|
||||
// var/balloonPath = /obj/item/latexballon
|
||||
|
||||
//TODO: Make inflating gloves a thing
|
||||
@@ -81,6 +82,7 @@
|
||||
item_state_slots = list(slot_r_hand_str = "lightbrown", slot_l_hand_str = "lightbrown")
|
||||
permeability_coefficient = 0.05
|
||||
siemens_coefficient = 0.75 //thick work gloves
|
||||
drop_sound = 'sound/items/drop/leather.ogg'
|
||||
|
||||
/obj/item/clothing/gloves/duty
|
||||
desc = "These brown duty gloves are made from a durable synthetic."
|
||||
@@ -109,6 +111,7 @@
|
||||
siemens_coefficient = 0
|
||||
permeability_coefficient = 0.05
|
||||
species_restricted = list("Vox")
|
||||
drop_sound = 'sound/items/drop/metalboots.ogg'
|
||||
|
||||
cold_protection = HANDS
|
||||
min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE
|
||||
@@ -127,6 +130,7 @@
|
||||
overgloves = 1
|
||||
force = 5
|
||||
punch_force = 5
|
||||
drop_sound = 'sound/items/drop/metalboots.ogg'
|
||||
|
||||
/obj/item/clothing/gloves/ranger
|
||||
var/glovecolor = "white"
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
|
||||
//Hat Station 13
|
||||
|
||||
/obj/item/clothing/head/
|
||||
name = "hat"
|
||||
desc = "Apply on head."
|
||||
drop_sound = 'sound/items/drop/hat.ogg'
|
||||
|
||||
/obj/item/clothing/head/collectable
|
||||
name = "collectable hat"
|
||||
desc = "A rare collectable hat."
|
||||
@@ -37,6 +42,7 @@
|
||||
desc = "What looks like an ordinary paper hat, is actually a rare and valuable collector's edition paper hat. Keep away from water, fire and Librarians."
|
||||
icon_state = "paper"
|
||||
body_parts_covered = 0
|
||||
drop_sound = 'sound/items/drop/paper.ogg'
|
||||
|
||||
/obj/item/clothing/head/collectable/tophat
|
||||
name = "collectable top hat"
|
||||
|
||||
@@ -36,21 +36,25 @@
|
||||
desc = "A flower crown weaved with sunflowers."
|
||||
icon_state = "sunflower_crown"
|
||||
body_parts_covered = 0
|
||||
drop_sound = 'sound/items/drop/herb.ogg'
|
||||
|
||||
/obj/item/clothing/head/lavender_crown
|
||||
name = "lavender crown"
|
||||
desc = "A flower crown weaved with lavender."
|
||||
icon_state = "lavender_crown"
|
||||
body_parts_covered = 0
|
||||
drop_sound = 'sound/items/drop/herb.ogg'
|
||||
|
||||
/obj/item/clothing/head/poppy_crown
|
||||
name = "poppy crown"
|
||||
desc = "A flower crown weaved with poppies."
|
||||
icon_state = "poppy_crown"
|
||||
body_parts_covered = 0
|
||||
drop_sound = 'sound/items/drop/herb.ogg'
|
||||
|
||||
/obj/item/clothing/head/rose_crown
|
||||
name = "rose crown"
|
||||
desc = "A flower crown weaved with roses."
|
||||
icon_state = "poppy_crown"
|
||||
body_parts_covered = 0
|
||||
drop_sound = 'sound/items/drop/herb.ogg'
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
action_button_name = "Toggle Head-light"
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
ear_protection = 1
|
||||
drop_sound = 'sound/items/drop/helm.ogg'
|
||||
|
||||
/obj/item/clothing/head/hardhat/orange
|
||||
icon_state = "hardhat0_orange"
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
siemens_coefficient = 0.7
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
ear_protection = 1
|
||||
drop_sound = 'sound/items/drop/helm.ogg'
|
||||
|
||||
/obj/item/clothing/head/helmet/solgov
|
||||
name = "\improper Solar Confederate Government helmet"
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
desc = "A nice hair pin."
|
||||
slot_flags = SLOT_HEAD | SLOT_EARS
|
||||
body_parts_covered = 0
|
||||
drop_sound = 'sound/items/drop/ring.ogg'
|
||||
|
||||
/obj/item/clothing/head/pin/pink
|
||||
icon_state = "pinkpin"
|
||||
@@ -168,6 +169,7 @@
|
||||
icon_state = "cardborg_h"
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
|
||||
body_parts_covered = HEAD|FACE|EYES
|
||||
drop_sound = 'sound/items/drop/box.ogg'
|
||||
|
||||
/obj/item/clothing/head/justice
|
||||
name = "justice hat"
|
||||
@@ -420,6 +422,7 @@
|
||||
desc = "A jeweled headpiece originating in India."
|
||||
icon_state = "maangtikka"
|
||||
body_parts_covered = 0
|
||||
drop_sound = 'sound/items/drop/accessory.ogg'
|
||||
|
||||
/obj/item/clothing/head/jingasa
|
||||
name = "jingasa"
|
||||
@@ -427,7 +430,7 @@
|
||||
icon_state = "jingasa"
|
||||
body_parts_covered = 0
|
||||
item_state_slots = list(slot_r_hand_str = "taq", slot_l_hand_str = "taq")
|
||||
|
||||
|
||||
/obj/item/clothing/head/cowl
|
||||
name = "black cowl"
|
||||
desc = "A gold-lined black cowl. It gives off uncomfortable cult vibes, but fancy."
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
var/base_state
|
||||
flash_protection = FLASH_PROTECTION_MAJOR
|
||||
tint = TINT_HEAVY
|
||||
drop_sound = 'sound/items/drop/helm.ogg'
|
||||
|
||||
/obj/item/clothing/head/welding/attack_self()
|
||||
toggle()
|
||||
@@ -167,6 +168,7 @@
|
||||
brightness_on = 2
|
||||
light_overlay = "helmet_light"
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
drop_sound = 'sound/items/drop/herb.ogg'
|
||||
|
||||
/*
|
||||
* Kitty ears
|
||||
|
||||
@@ -1,3 +1,11 @@
|
||||
//Generic Ring
|
||||
|
||||
/obj/item/clothing/ring
|
||||
name = "generic ring"
|
||||
desc = "Torus shaped finger decoration."
|
||||
icon_state = "material"
|
||||
drop_sound = 'sound/items/drop/ring.ogg'
|
||||
|
||||
/////////////////////////////////////////
|
||||
//Standard Rings
|
||||
/obj/item/clothing/gloves/ring/engagement
|
||||
|
||||
@@ -5,11 +5,13 @@
|
||||
force = 3
|
||||
can_hold_knife = 1
|
||||
step_volume_mod = 1.2
|
||||
drop_sound = 'sound/items/drop/boots.ogg'
|
||||
|
||||
/obj/item/clothing/shoes/boots/cowboy
|
||||
name = "cowboy boots"
|
||||
desc = "Lacking a durasteel horse to ride."
|
||||
icon_state = "cowboy"
|
||||
drop_sound = 'sound/items/drop/leather.ogg'
|
||||
|
||||
/obj/item/clothing/shoes/boots/cowboy/classic
|
||||
name = "classic cowboy boots"
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
/obj/item/clothing/shoes
|
||||
name = "shoes"
|
||||
icon_state = "white"
|
||||
desc = "A pair of shoes."
|
||||
drop_sound = 'sound/items/drop/shoes.ogg'
|
||||
|
||||
/obj/item/clothing/shoes/black
|
||||
name = "black shoes"
|
||||
icon_state = "black"
|
||||
@@ -38,6 +44,7 @@
|
||||
name = "leather shoes"
|
||||
desc = "A sturdy pair of leather shoes."
|
||||
icon_state = "leather"
|
||||
drop_sound = 'sound/items/drop/leather.ogg'
|
||||
|
||||
/obj/item/clothing/shoes/rainbow
|
||||
name = "rainbow shoes"
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
step_volume_mod = 1.3
|
||||
can_hold_knife = TRUE
|
||||
drop_sound = 'sound/items/drop/boots.ogg'
|
||||
|
||||
/obj/item/clothing/shoes/leg_guard/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
|
||||
if(..()) //This will only run if no other problems occured when equiping.
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
var/obj/item/clothing/shoes/shoes = null //Undershoes
|
||||
var/mob/living/carbon/human/wearer = null //For shoe procs
|
||||
step_volume_mod = 1.3
|
||||
drop_sound = 'sound/items/drop/metalboots.ogg'
|
||||
|
||||
/obj/item/clothing/shoes/magboots/proc/set_slowdown()
|
||||
slowdown = shoes? max(SHOES_SLOWDOWN, shoes.slowdown): SHOES_SLOWDOWN //So you can't put on magboots to make you walk faster.
|
||||
@@ -36,6 +37,7 @@
|
||||
set_slowdown()
|
||||
force = 5
|
||||
if(icon_base) icon_state = "[icon_base]1"
|
||||
playsound(get_turf(src), 'sound/effects/magnetclamp.ogg', 20)
|
||||
to_chat(user, "You enable the mag-pulse traction system.")
|
||||
user.update_inv_shoes() //so our mob-overlays update
|
||||
user.update_action_buttons()
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
item_flags = NOSLIP
|
||||
slowdown = SHOES_SLOWDOWN+1
|
||||
species_restricted = null
|
||||
drop_sound = 'sound/items/drop/rubber.ogg'
|
||||
|
||||
/obj/item/clothing/shoes/dress
|
||||
name = "dress shoes"
|
||||
@@ -98,6 +99,7 @@
|
||||
force = 0
|
||||
species_restricted = null
|
||||
w_class = ITEMSIZE_SMALL
|
||||
drop_sound = 'sound/items/drop/clothing.ogg'
|
||||
|
||||
/obj/item/clothing/shoes/slippers_worn
|
||||
name = "worn bunny slippers"
|
||||
@@ -155,6 +157,7 @@
|
||||
force = 0
|
||||
w_class = ITEMSIZE_SMALL
|
||||
species_restricted = null
|
||||
drop_sound = 'sound/items/drop/clothing.ogg'
|
||||
|
||||
/obj/item/clothing/shoes/boots/ranger
|
||||
var/bootcolor = "white"
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
can_be_placed_into = null
|
||||
flags = OPENCONTAINER | NOBLUDGEON
|
||||
unacidable = 0
|
||||
drop_sound = 'sound/items/drop/clothing.ogg'
|
||||
|
||||
var/on_fire = 0
|
||||
var/burn_time = 20 //if the rag burns for too long it turns to ashes
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
var/access = list()
|
||||
access = access_crate_cash
|
||||
var/worth = 0
|
||||
drop_sound = 'sound/items/drop/paper.ogg'
|
||||
|
||||
/obj/item/weapon/spacecash/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/spacecash))
|
||||
@@ -150,6 +151,7 @@ proc/spawn_money(var/sum, spawnloc, mob/living/carbon/human/human_user as mob)
|
||||
name = "charge card"
|
||||
icon_state = "efundcard"
|
||||
desc = "A card that holds an amount of money."
|
||||
drop_sound = 'sound/items/drop/card.ogg'
|
||||
var/owner_name = "" //So the ATM can set it so the EFTPOS can put a valid name on transactions.
|
||||
attack_self() return //Don't act
|
||||
attackby() return //like actual
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
gravity_is_on = 0
|
||||
for(var/area/A in all_areas)
|
||||
if(A.z in zLevels)
|
||||
A.gravitychange(gravity_is_on, A)
|
||||
A.gravitychange(gravity_is_on)
|
||||
|
||||
/datum/event/gravity/end()
|
||||
if(!gravity_is_on)
|
||||
@@ -25,6 +25,6 @@
|
||||
|
||||
for(var/area/A in all_areas)
|
||||
if(A.z in zLevels)
|
||||
A.gravitychange(gravity_is_on, A)
|
||||
A.gravitychange(gravity_is_on)
|
||||
|
||||
command_announcement.Announce("Gravity generators are again functioning within normal parameters. Sorry for any inconvenience.", "Gravity Restored")
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
possible_transfer_amounts = null
|
||||
volume = 50 //Sets the default container amount for all food items.
|
||||
var/filling_color = "#FFFFFF" //Used by sandwiches.
|
||||
drop_sound = 'sound/items/drop/food.ogg'
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/Initialize()
|
||||
. = ..()
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
volume = 40 //just over one and a half cups
|
||||
amount_per_transfer_from_this = 5
|
||||
flags = 0 //starts closed
|
||||
drop_sound = 'sound/items/drop/soda.ogg'
|
||||
|
||||
//DRINKS
|
||||
|
||||
@@ -20,6 +21,7 @@
|
||||
desc = "Introduced to the vending machines by Skrellian request, this water comes straight from the Martian poles."
|
||||
icon_state = "waterbottle"
|
||||
center_of_mass = list("x"=16, "y"=8)
|
||||
drop_sound = 'sound/items/drop/food.ogg'
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle/Initialize()
|
||||
. = ..()
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
name = "drink"
|
||||
desc = "yummy"
|
||||
icon = 'icons/obj/drinks.dmi'
|
||||
drop_sound = 'sound/items/drop/bottle.ogg'
|
||||
icon_state = null
|
||||
flags = OPENCONTAINER
|
||||
amount_per_transfer_from_this = 5
|
||||
@@ -116,6 +117,7 @@
|
||||
icon_state = "milk"
|
||||
item_state = "carton"
|
||||
center_of_mass = list("x"=16, "y"=9)
|
||||
drop_sound = 'sound/items/drop/box.ogg'
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/milk/Initialize()
|
||||
. = ..()
|
||||
@@ -127,6 +129,8 @@
|
||||
icon_state = "soymilk"
|
||||
item_state = "carton"
|
||||
center_of_mass = list("x"=16, "y"=9)
|
||||
drop_sound = 'sound/items/drop/box.ogg'
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/soymilk/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("soymilk", 50)
|
||||
@@ -138,6 +142,8 @@
|
||||
icon_state = "mini-milk"
|
||||
item_state = "carton"
|
||||
center_of_mass = list("x"=16, "y"=9)
|
||||
drop_sound = 'sound/items/drop/box.ogg'
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/smallmilk/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("milk", 30)
|
||||
@@ -149,6 +155,8 @@
|
||||
icon_state = "mini-milk_choco"
|
||||
item_state = "carton"
|
||||
center_of_mass = list("x"=16, "y"=9)
|
||||
drop_sound = 'sound/items/drop/box.ogg'
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/smallchocmilk/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("chocolate_milk", 30)
|
||||
@@ -158,6 +166,8 @@
|
||||
desc = "Careful, the beverage you're about to enjoy is extremely hot."
|
||||
icon_state = "coffee"
|
||||
center_of_mass = list("x"=15, "y"=10)
|
||||
drop_sound = 'sound/items/drop/box.ogg'
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/coffee/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("coffee", 30)
|
||||
@@ -209,6 +219,7 @@
|
||||
possible_transfer_amounts = null
|
||||
volume = 10
|
||||
center_of_mass = list("x"=16, "y"=12)
|
||||
drop_sound = 'sound/items/drop/paper.ogg'
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/sillycup/Initialize()
|
||||
. = ..()
|
||||
|
||||
@@ -16,7 +16,9 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/Initialize()
|
||||
. = ..()
|
||||
if(isGlass) unacidable = 1
|
||||
if(isGlass)
|
||||
unacidable = 1
|
||||
drop_sound = 'sound/items/drop/bottle.ogg'
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/Destroy()
|
||||
if(rag)
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
gravity_is_on = 0
|
||||
for(var/area/A in all_areas)
|
||||
if(A.z in zLevels)
|
||||
A.gravitychange(gravity_is_on, A)
|
||||
A.gravitychange(gravity_is_on)
|
||||
|
||||
/datum/gm_action/gravity/end()
|
||||
if(!gravity_is_on)
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
for(var/area/A in all_areas)
|
||||
if(A.z in zLevels)
|
||||
A.gravitychange(gravity_is_on, A)
|
||||
A.gravitychange(gravity_is_on)
|
||||
|
||||
command_announcement.Announce("Gravity generators are again functioning within normal parameters. Sorry for any inconvenience.", "Gravity Restored")
|
||||
|
||||
|
||||
@@ -268,7 +268,7 @@
|
||||
loadProgram(powerdown_program, 0)
|
||||
|
||||
if(!linkedholodeck.has_gravity)
|
||||
linkedholodeck.gravitychange(1,linkedholodeck)
|
||||
linkedholodeck.gravitychange(1)
|
||||
|
||||
active = 0
|
||||
use_power = 1
|
||||
@@ -365,16 +365,16 @@
|
||||
use_power = 1
|
||||
|
||||
if(A.has_gravity)
|
||||
A.gravitychange(0,A)
|
||||
A.gravitychange(0)
|
||||
else
|
||||
A.gravitychange(1,A)
|
||||
A.gravitychange(1)
|
||||
|
||||
/obj/machinery/computer/HolodeckControl/proc/emergencyShutdown()
|
||||
//Turn it back to the regular non-holographic room
|
||||
loadProgram(powerdown_program, 0)
|
||||
|
||||
if(!linkedholodeck.has_gravity)
|
||||
linkedholodeck.gravitychange(1,linkedholodeck)
|
||||
linkedholodeck.gravitychange(1)
|
||||
|
||||
active = 0
|
||||
use_power = 1
|
||||
|
||||
@@ -340,6 +340,7 @@ datum/unarmed_attack/holopugilism/unarmed_override(var/mob/living/carbon/human/u
|
||||
name = "basketball"
|
||||
desc = "Here's your chance, do your dance at the Space Jam."
|
||||
w_class = ITEMSIZE_LARGE //Stops people from hiding it in their bags/pockets
|
||||
drop_sound = 'sound/items/drop/basketball.ogg'
|
||||
|
||||
/obj/structure/holohoop
|
||||
name = "basketball hoop"
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
desc = "Nutritious! Probably."
|
||||
flags = NOCONDUCT
|
||||
slot_flags = SLOT_HOLSTER
|
||||
drop_sound = 'sound/items/drop/herb.ogg'
|
||||
|
||||
var/plantname
|
||||
var/datum/seed/seed
|
||||
@@ -361,6 +362,7 @@ var/list/fruit_icon_cache = list()
|
||||
|
||||
name = "[S.seed_name] slice"
|
||||
desc = "A slice of \a [S.seed_name]. Tasty, probably."
|
||||
drop_sound = 'sound/items/drop/herb.ogg'
|
||||
|
||||
var/rind_colour = S.get_trait(TRAIT_PRODUCT_COLOUR)
|
||||
var/flesh_colour = S.get_trait(TRAIT_FLESH_COLOUR)
|
||||
|
||||
@@ -180,6 +180,7 @@ Book Cart End
|
||||
var/title // The real name of the book.
|
||||
var/carved = 0 // Has the book been hollowed out for use as a secret storage item?
|
||||
var/obj/item/store //What's in the book?
|
||||
drop_sound = 'sound/bureaucracy/bookclose.ogg'
|
||||
|
||||
/obj/item/weapon/book/attack_self(var/mob/user as mob)
|
||||
if(carved)
|
||||
@@ -194,7 +195,9 @@ Book Cart End
|
||||
if(src.dat)
|
||||
user << browse("<TT><I>Penned by [author].</I></TT> <BR>" + "[dat]", "window=book")
|
||||
user.visible_message("[user] opens a book titled \"[src.title]\" and begins reading intently.")
|
||||
playsound(loc, 'sound/bureaucracy/bookopen.ogg', 50, 1)
|
||||
onclose(user, "book")
|
||||
playsound(loc, 'sound/bureaucracy/bookclose.ogg', 50, 1)
|
||||
else
|
||||
to_chat(user, "This book is completely blank!")
|
||||
|
||||
@@ -277,6 +280,8 @@ Book Cart End
|
||||
to_chat(user, "<span class='notice'>You begin to carve out [title].</span>")
|
||||
if(do_after(user, 30))
|
||||
to_chat(user, "<span class='notice'>You carve out the pages from [title]! You didn't want to read it anyway.</span>")
|
||||
playsound(loc, 'sound/bureaucracy/papercrumple.ogg', 50, 1)
|
||||
new /obj/item/weapon/shreddedp(get_turf(src))
|
||||
carved = 1
|
||||
return
|
||||
else
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
w_class = ITEMSIZE_SMALL
|
||||
root_type = /datum/lore/codex/category/main_news
|
||||
libcategory = "Reference"
|
||||
|
||||
drop_sound = 'sound/items/drop/device.ogg'
|
||||
// Combines SOP/Regs/Law
|
||||
/obj/item/weapon/book/codex/corp_regs
|
||||
name = "NanoTrasen Regulatory Compendium"
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
var/material/material
|
||||
var/perunit = SHEET_MATERIAL_AMOUNT
|
||||
var/apply_colour //temp pending icon rewrite
|
||||
drop_sound = 'sound/items/drop/axe.ogg'
|
||||
|
||||
/obj/item/stack/material/New()
|
||||
..()
|
||||
@@ -106,17 +107,20 @@
|
||||
icon_state = "sheet-sandstone"
|
||||
default_type = "sandstone"
|
||||
no_variants = FALSE
|
||||
drop_sound = 'sound/items/drop/boots.ogg'
|
||||
|
||||
/obj/item/stack/material/marble
|
||||
name = "marble brick"
|
||||
icon_state = "sheet-marble"
|
||||
default_type = "marble"
|
||||
no_variants = FALSE
|
||||
drop_sound = 'sound/items/drop/boots.ogg'
|
||||
|
||||
/obj/item/stack/material/diamond
|
||||
name = "diamond"
|
||||
icon_state = "sheet-diamond"
|
||||
default_type = "diamond"
|
||||
drop_sound = 'sound/items/drop/glass.ogg'
|
||||
|
||||
/obj/item/stack/material/uranium
|
||||
name = "uranium"
|
||||
@@ -129,6 +133,7 @@
|
||||
icon_state = "sheet-phoron"
|
||||
default_type = "phoron"
|
||||
no_variants = FALSE
|
||||
drop_sound = 'sound/items/drop/glass.ogg'
|
||||
|
||||
/obj/item/stack/material/plastic
|
||||
name = "plastic"
|
||||
@@ -324,6 +329,7 @@
|
||||
icon_state = "sheet-wood"
|
||||
default_type = MAT_WOOD
|
||||
strict_color_stacking = TRUE
|
||||
drop_sound = 'sound/items/drop/wooden.ogg'
|
||||
|
||||
/obj/item/stack/material/wood/sif
|
||||
name = "alien wooden plank"
|
||||
@@ -340,6 +346,7 @@
|
||||
w_class = ITEMSIZE_HUGE
|
||||
description_info = "Use inhand to craft things, or use a sharp and edged object on this to convert it into two wooden planks."
|
||||
var/plank_type = /obj/item/stack/material/wood
|
||||
drop_sound = 'sound/items/drop/wooden.ogg'
|
||||
|
||||
/obj/item/stack/material/log/sif
|
||||
name = "alien log"
|
||||
@@ -377,6 +384,7 @@
|
||||
no_variants = FALSE
|
||||
pass_color = TRUE
|
||||
strict_color_stacking = TRUE
|
||||
drop_sound = 'sound/items/drop/clothing.ogg'
|
||||
|
||||
/obj/item/stack/material/resin
|
||||
name = "resin"
|
||||
@@ -394,6 +402,7 @@
|
||||
no_variants = FALSE
|
||||
pass_color = TRUE
|
||||
strict_color_stacking = TRUE
|
||||
drop_sound = 'sound/items/drop/box.ogg'
|
||||
|
||||
/obj/item/stack/material/snow
|
||||
name = "snow"
|
||||
@@ -415,12 +424,14 @@
|
||||
no_variants = FALSE
|
||||
pass_color = TRUE
|
||||
strict_color_stacking = TRUE
|
||||
drop_sound = 'sound/items/drop/clothing.ogg'
|
||||
|
||||
/obj/item/stack/material/glass
|
||||
name = "glass"
|
||||
icon_state = "sheet-glass"
|
||||
default_type = "glass"
|
||||
no_variants = FALSE
|
||||
drop_sound = 'sound/items/drop/glass.ogg'
|
||||
|
||||
/obj/item/stack/material/glass/reinforced
|
||||
name = "reinforced glass"
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
slot_flags = SLOT_EARS
|
||||
var/string_attached
|
||||
var/sides = 2
|
||||
drop_sound = 'sound/items/drop/ring.ogg'
|
||||
|
||||
/obj/item/weapon/coin/New()
|
||||
randpixel_xy()
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
var/digspeed = 40 //moving the delay to an item var so R&D can make improved picks. --NEO
|
||||
origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINEERING = 1)
|
||||
attack_verb = list("hit", "pierced", "sliced", "attacked")
|
||||
var/drill_sound = 'sound/weapons/Genhit.ogg'
|
||||
var/drill_sound = "pickaxe"
|
||||
var/drill_verb = "drilling"
|
||||
sharp = 1
|
||||
|
||||
|
||||
@@ -416,7 +416,7 @@ turf/simulated/mineral/floor/light_corner
|
||||
var/datum/find/F = finds[1]
|
||||
if(newDepth > F.excavation_required) // Digging too deep can break the item. At least you won't summon a Balrog (probably)
|
||||
fail_message = ". <b>[pick("There is a crunching noise","[W] collides with some different rock","Part of the rock face crumbles away","Something breaks under [W]")]</b>"
|
||||
wreckfinds(P.destroy_artefacts)
|
||||
wreckfinds(P.destroy_artefacts)
|
||||
to_chat(user, "<span class='notice'>You start [P.drill_verb][fail_message].</span>")
|
||||
|
||||
if(do_after(user,P.digspeed))
|
||||
|
||||
@@ -156,7 +156,6 @@ var/list/slot_equipment_priority = list( \
|
||||
//Drops the item in our active hand. TODO: rename this to drop_active_hand or something
|
||||
/mob/proc/drop_item(var/atom/Target)
|
||||
return
|
||||
|
||||
/*
|
||||
Removes the object from any slots the mob might have, calling the appropriate icon update proc.
|
||||
Does nothing else.
|
||||
|
||||
@@ -178,9 +178,28 @@
|
||||
for(var/obj/item/W in src)
|
||||
drop_from_inventory(W)
|
||||
|
||||
visible_message("<span class='warning'>\The [src] quivers slightly, then splits apart with a wet slithering noise.</span>")
|
||||
var/obj/item/organ/external/Chest = organs_by_name[BP_TORSO]
|
||||
|
||||
qdel(src)
|
||||
if(Chest.robotic >= 2)
|
||||
visible_message("<span class='warning'>\The [src] shudders slightly, then ejects a cluster of nymphs with a wet slithering noise.</span>")
|
||||
species = GLOB.all_species[SPECIES_HUMAN] // This is hard-set to default the body to a normal FBP, without changing anything.
|
||||
|
||||
// Bust it
|
||||
src.death()
|
||||
|
||||
for(var/obj/item/organ/internal/diona/Org in internal_organs) // Remove Nymph organs.
|
||||
qdel(Org)
|
||||
|
||||
// Purge the diona verbs.
|
||||
verbs -= /mob/living/carbon/human/proc/diona_split_nymph
|
||||
verbs -= /mob/living/carbon/human/proc/regenerate
|
||||
|
||||
for(var/obj/item/organ/external/E in organs) // Just fall apart.
|
||||
E.droplimb(TRUE)
|
||||
|
||||
else
|
||||
visible_message("<span class='warning'>\The [src] quivers slightly, then splits apart with a wet slithering noise.</span>")
|
||||
qdel(src)
|
||||
|
||||
/mob/living/carbon/human/proc/self_diagnostics()
|
||||
set name = "Self-Diagnostics"
|
||||
|
||||
@@ -482,6 +482,7 @@
|
||||
has_organ = list(
|
||||
O_NUTRIENT = /obj/item/organ/internal/diona/nutrients,
|
||||
O_STRATA = /obj/item/organ/internal/diona/strata,
|
||||
O_BRAIN = /obj/item/organ/internal/brain/cephalon,
|
||||
O_RESPONSE = /obj/item/organ/internal/diona/node,
|
||||
O_GBLADDER = /obj/item/organ/internal/diona/bladder,
|
||||
O_POLYP = /obj/item/organ/internal/diona/polyp,
|
||||
@@ -555,6 +556,16 @@
|
||||
|
||||
if(H.isSynthetic())
|
||||
H.visible_message("<span class='danger'>\The [H] collapses into parts, revealing a solitary diona nymph at the core.</span>")
|
||||
|
||||
H.species = GLOB.all_species[SPECIES_HUMAN] // This is hard-set to default the body to a normal FBP, without changing anything.
|
||||
|
||||
for(var/obj/item/organ/internal/diona/Org in H.internal_organs) // Remove Nymph organs.
|
||||
qdel(Org)
|
||||
|
||||
// Purge the diona verbs.
|
||||
H.verbs -= /mob/living/carbon/human/proc/diona_split_nymph
|
||||
H.verbs -= /mob/living/carbon/human/proc/regenerate
|
||||
|
||||
return
|
||||
|
||||
for(var/mob/living/carbon/alien/diona/D in H.contents)
|
||||
|
||||
@@ -33,8 +33,25 @@
|
||||
|
||||
//Drops the item in our active hand. TODO: rename this to drop_active_hand or something
|
||||
/mob/living/drop_item(var/atom/Target)
|
||||
if(hand) return drop_l_hand(Target)
|
||||
else return drop_r_hand(Target)
|
||||
var/obj/item/item_dropped = null
|
||||
|
||||
if (hand)
|
||||
item_dropped = l_hand
|
||||
. = drop_l_hand(Target)
|
||||
else
|
||||
item_dropped = r_hand
|
||||
. = drop_r_hand(Target)
|
||||
|
||||
if (istype(item_dropped) && !QDELETED(item_dropped) && is_preference_enabled(/datum/client_preference/drop_sounds))
|
||||
addtimer(CALLBACK(src, .proc/make_item_drop_sound, item_dropped), 1)
|
||||
|
||||
/mob/proc/make_item_drop_sound(obj/item/I)
|
||||
if(QDELETED(I))
|
||||
return
|
||||
|
||||
if(I.drop_sound)
|
||||
playsound(I, I.drop_sound, 25, 0, preference = /datum/client_preference/drop_sounds)
|
||||
|
||||
|
||||
//Drops the item in our left hand
|
||||
/mob/living/drop_l_hand(var/atom/Target)
|
||||
|
||||
@@ -411,7 +411,7 @@ default behaviour is:
|
||||
if(!isnull(M.incoming_hal_damage_percent))
|
||||
amount *= M.incoming_hal_damage_percent
|
||||
if(!isnull(M.disable_duration_percent))
|
||||
amount *= M.incoming_hal_damage_percent
|
||||
amount *= M.disable_duration_percent
|
||||
else if(amount < 0)
|
||||
for(var/datum/modifier/M in modifiers)
|
||||
if(!isnull(M.incoming_healing_percent))
|
||||
|
||||
@@ -9,4 +9,13 @@
|
||||
return (!mover.density || !density || lying)
|
||||
|
||||
/mob/CanZASPass(turf/T, is_zone)
|
||||
return ATMOS_PASS_YES
|
||||
return ATMOS_PASS_YES
|
||||
|
||||
/mob/living/SelfMove(turf/n, direct)
|
||||
// If on walk intent, don't willingly step into hazardous tiles.
|
||||
// Unless the walker is confused.
|
||||
if(m_intent == "walk" && confused <= 0)
|
||||
if(!n.is_safe_to_enter(src))
|
||||
to_chat(src, span("warning", "\The [n] is dangerous to move into."))
|
||||
return FALSE // In case any code wants to know if movement happened.
|
||||
return ..() // Parent call should make the mob move.
|
||||
@@ -8,6 +8,7 @@ var/list/department_radio_keys = list(
|
||||
":n" = "Science", ".n" = "Science",
|
||||
":m" = "Medical", ".m" = "Medical",
|
||||
":e" = "Engineering", ".e" = "Engineering",
|
||||
":k" = "Response Team", ".k" = "Response Team", //TFF 11/3/20 - Add Response Team to channels usable rather than resorting to :H or such.,
|
||||
":s" = "Security", ".s" = "Security",
|
||||
":w" = "whisper", ".w" = "whisper",
|
||||
":t" = "Mercenary", ".t" = "Mercenary",
|
||||
@@ -25,6 +26,7 @@ var/list/department_radio_keys = list(
|
||||
":N" = "Science", ".N" = "Science",
|
||||
":M" = "Medical", ".M" = "Medical",
|
||||
":E" = "Engineering", ".E" = "Engineering",
|
||||
":k" = "Response Team", ".k" = "Response Team", //TFF 11/3/20 - Add Response Team to channels usable rather than resorting to :H or such.,
|
||||
":S" = "Security", ".S" = "Security",
|
||||
":W" = "whisper", ".W" = "whisper",
|
||||
":T" = "Mercenary", ".T" = "Mercenary",
|
||||
|
||||
@@ -119,6 +119,11 @@
|
||||
icon_state = "hair_long_bedhead"
|
||||
flags = HAIR_TIEABLE
|
||||
|
||||
bedheadlongest
|
||||
name = "Bedhead Longest"
|
||||
icon_state = "hair_longest_bedhead"
|
||||
flags = HAIR_TIEABLE
|
||||
|
||||
beehive
|
||||
name = "Beehive"
|
||||
icon_state = "hair_beehive"
|
||||
@@ -743,6 +748,11 @@
|
||||
icon_state = "hair_rowbraid"
|
||||
flags = HAIR_TIEABLE
|
||||
|
||||
sabitsuki
|
||||
name = "Sabitsuki"
|
||||
icon_state = "hair_sabitsuki"
|
||||
flags = HAIR_VERY_SHORT
|
||||
|
||||
scully
|
||||
name = "Scully"
|
||||
icon_state = "hair_scully"
|
||||
|
||||
@@ -115,7 +115,7 @@
|
||||
if(incapacitated())
|
||||
return FALSE
|
||||
|
||||
if(hovering)
|
||||
if(hovering || is_incorporeal())
|
||||
return TRUE
|
||||
|
||||
if(Process_Spacemove())
|
||||
|
||||
@@ -152,6 +152,9 @@
|
||||
|
||||
/turf/simulated/open/is_safe_to_enter(mob/living/L)
|
||||
if(L.can_fall())
|
||||
for(var/obj/O in contents)
|
||||
if(!O.CanFallThru(L, GetBelow(src)))
|
||||
return TRUE // Can't fall through this, like lattice or catwalk.
|
||||
if(!locate(/obj/structure/stairs) in GetBelow(src))
|
||||
return FALSE
|
||||
return FALSE // Falling on stairs is safe.
|
||||
return ..()
|
||||
@@ -4,6 +4,7 @@ var/list/organ_cache = list()
|
||||
name = "organ"
|
||||
icon = 'icons/obj/surgery.dmi'
|
||||
germ_level = 0
|
||||
drop_sound = 'sound/items/drop/flesh.ogg'
|
||||
|
||||
// Strings.
|
||||
var/organ_tag = "organ" // Unique identifier.
|
||||
|
||||
@@ -18,7 +18,7 @@ var/global/list/limb_icon_cache = list()
|
||||
h_col = null
|
||||
if(robotic >= ORGAN_ROBOT)
|
||||
var/datum/robolimb/franchise = all_robolimbs[model]
|
||||
if(!(franchise && franchise.skin_tone))
|
||||
if(!(franchise && franchise.skin_tone) && !(franchise && franchise.skin_color))
|
||||
if(human.synth_color)
|
||||
s_col = list(human.r_synth, human.g_synth, human.b_synth)
|
||||
return
|
||||
@@ -36,7 +36,7 @@ var/global/list/limb_icon_cache = list()
|
||||
h_col = null
|
||||
if(robotic >= ORGAN_ROBOT)
|
||||
var/datum/robolimb/franchise = all_robolimbs[model]
|
||||
if(!(franchise && franchise.skin_tone))
|
||||
if(!(franchise && franchise.skin_tone) && !(franchise && franchise.skin_color))
|
||||
return
|
||||
if(!isnull(dna.GetUIValue(DNA_UI_SKIN_TONE)) && (species.appearance_flags & HAS_SKIN_TONE))
|
||||
s_tone = dna.GetUIValue(DNA_UI_SKIN_TONE)
|
||||
|
||||
@@ -33,6 +33,14 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
|
||||
if(!R.unavailable_at_chargen)
|
||||
chargen_robolimbs[R.company] = R //List only main brands and solo parts.
|
||||
|
||||
for(var/company in all_robolimbs)
|
||||
var/datum/robolimb/R = all_robolimbs[company]
|
||||
if(R.species_alternates)
|
||||
for(var/species in R.species_alternates)
|
||||
var/species_company = R.species_alternates[species]
|
||||
if(species_company in all_robolimbs)
|
||||
R.species_alternates[species] = all_robolimbs[species_company]
|
||||
|
||||
/datum/robolimb
|
||||
var/company = "Unbranded" // Shown when selecting the limb.
|
||||
var/desc = "A generic unbranded robotic prosthesis." // Seen when examining a limb.
|
||||
@@ -40,9 +48,11 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
|
||||
var/unavailable_at_chargen // If set, not available at chargen.
|
||||
var/unavailable_to_build // If set, can't be constructed.
|
||||
var/lifelike // If set, appears organic.
|
||||
var/skin_tone // If set, applies skin tone rather than part color
|
||||
var/skin_tone // If set, applies skin tone rather than part color Overrides color.
|
||||
var/skin_color // If set, applies skin color rather than part color.
|
||||
var/blood_color = "#030303"
|
||||
var/list/species_cannot_use = list(SPECIES_TESHARI, SPECIES_PROMETHEAN, SPECIES_DIONA)
|
||||
var/list/species_alternates = list(SPECIES_TAJ = "Unbranded - Tajaran", SPECIES_UNATHI = "Unbranded - Unathi") //"Species Name" = "Robolimb Company" , List, when initialized, will become "Species Name" = RobolimbDatum, used for alternate species sprites.
|
||||
var/list/monitor_styles //If empty, the model of limbs offers a head compatible with monitors.
|
||||
var/parts = BP_ALL //Defines what parts said brand can replace on a body.
|
||||
var/health_hud_intensity = 1 // Intensity modifier for the health GUI indicator.
|
||||
@@ -72,10 +82,45 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
|
||||
icon = 'icons/mob/human_races/cyberlimbs/unbranded/unbranded_alt2.dmi'
|
||||
unavailable_to_build = 1
|
||||
|
||||
/datum/robolimb/unbranded_tajaran
|
||||
company = "Unbranded - Tajaran"
|
||||
species_cannot_use = list(SPECIES_TESHARI, SPECIES_PROMETHEAN, SPECIES_DIONA, SPECIES_HUMAN, SPECIES_VOX, SPECIES_HUMAN_VATBORN, SPECIES_UNATHI, SPECIES_SKRELL, SPECIES_ZADDAT)
|
||||
suggested_species = SPECIES_TAJ
|
||||
desc = "A simple robotic limb with feline design. Seems rather stiff."
|
||||
icon = 'icons/mob/human_races/cyberlimbs/unbranded/unbranded_tajaran.dmi'
|
||||
unavailable_to_build = 1
|
||||
|
||||
/datum/robolimb/unbranded_unathi
|
||||
company = "Unbranded - Unathi"
|
||||
species_cannot_use = list(SPECIES_TESHARI, SPECIES_PROMETHEAN, SPECIES_DIONA, SPECIES_HUMAN, SPECIES_VOX, SPECIES_HUMAN_VATBORN, SPECIES_TAJ, SPECIES_SKRELL, SPECIES_ZADDAT)
|
||||
suggested_species = SPECIES_UNATHI
|
||||
desc = "A simple robotic limb with reptilian design. Seems rather stiff."
|
||||
icon = 'icons/mob/human_races/cyberlimbs/unbranded/unbranded_unathi.dmi'
|
||||
unavailable_to_build = 1
|
||||
|
||||
/datum/robolimb/nanotrasen
|
||||
company = "NanoTrasen"
|
||||
desc = "A simple but efficient robotic limb, created by NanoTrasen."
|
||||
icon = 'icons/mob/human_races/cyberlimbs/nanotrasen/nanotrasen_main.dmi'
|
||||
species_alternates = list(SPECIES_TAJ = "NanoTrasen - Tajaran", SPECIES_UNATHI = "NanoTrasen - Unathi")
|
||||
|
||||
/datum/robolimb/nanotrasen_tajaran
|
||||
company = "NanoTrasen - Tajaran"
|
||||
species_cannot_use = list(SPECIES_TESHARI, SPECIES_PROMETHEAN, SPECIES_DIONA, SPECIES_HUMAN, SPECIES_VOX, SPECIES_HUMAN_VATBORN, SPECIES_UNATHI, SPECIES_SKRELL, SPECIES_ZADDAT)
|
||||
species_alternates = list(SPECIES_HUMAN = "NanoTrasen")
|
||||
suggested_species = SPECIES_TAJ
|
||||
desc = "A simple but efficient robotic limb, created by NanoTrasen."
|
||||
icon = 'icons/mob/human_races/cyberlimbs/nanotrasen/nanotrasen_tajaran.dmi'
|
||||
unavailable_to_build = 1
|
||||
|
||||
/datum/robolimb/nanotrasen_unathi
|
||||
company = "NanoTrasen - Unathi"
|
||||
species_cannot_use = list(SPECIES_TESHARI, SPECIES_PROMETHEAN, SPECIES_DIONA, SPECIES_HUMAN, SPECIES_VOX, SPECIES_HUMAN_VATBORN, SPECIES_TAJ, SPECIES_SKRELL, SPECIES_ZADDAT)
|
||||
species_alternates = list(SPECIES_HUMAN = "NanoTrasen")
|
||||
suggested_species = SPECIES_UNATHI
|
||||
desc = "A simple but efficient robotic limb, created by NanoTrasen."
|
||||
icon = 'icons/mob/human_races/cyberlimbs/nanotrasen/nanotrasen_unathi.dmi'
|
||||
unavailable_to_build = 1
|
||||
|
||||
/datum/robolimb/bishop
|
||||
company = "Bishop"
|
||||
@@ -104,6 +149,19 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
|
||||
parts = list(BP_HEAD)
|
||||
monitor_styles = standard_monitor_styles
|
||||
|
||||
/datum/robolimb/gestaltframe
|
||||
company = "Skrellian Exoskeleton"
|
||||
desc = "This limb looks to be more like a strange.. puppet, than a prosthetic."
|
||||
icon = 'icons/mob/human_races/cyberlimbs/veymed/dionaea/skrellian.dmi'
|
||||
blood_color = "#63b521"
|
||||
speech_bubble_appearance = "machine"
|
||||
unavailable_to_build = 1
|
||||
species_cannot_use = list(SPECIES_TESHARI, SPECIES_PROMETHEAN, SPECIES_TAJ, SPECIES_HUMAN, SPECIES_VOX, SPECIES_HUMAN_VATBORN, SPECIES_UNATHI, SPECIES_SKRELL, SPECIES_ZADDAT)
|
||||
suggested_species = SPECIES_DIONA
|
||||
// Dionaea are naturally very tanky, so the robotic limbs are actually far weaker than their normal bodies.
|
||||
robo_brute_mod = 1.3
|
||||
robo_burn_mod = 1.3
|
||||
|
||||
/datum/robolimb/cybersolutions
|
||||
company = "Cyber Solutions"
|
||||
desc = "This limb is grey and rough, with little in the way of aesthetic."
|
||||
@@ -224,11 +282,25 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
|
||||
unavailable_to_build = 1
|
||||
lifelike = 1
|
||||
skin_tone = 1
|
||||
species_alternates = list(SPECIES_SKRELL = "Vey-Med - Skrell")
|
||||
blood_color = "#CCCCCC"
|
||||
speech_bubble_appearance = "normal"
|
||||
robo_brute_mod = 1.1
|
||||
robo_burn_mod = 1.1
|
||||
|
||||
/datum/robolimb/veymed_skrell
|
||||
company = "Vey-Med - Skrell"
|
||||
desc = "This high quality limb is nearly indistinguishable from an organic one."
|
||||
icon = 'icons/mob/human_races/cyberlimbs/veymed/veymed_skrell.dmi'
|
||||
unavailable_to_build = 1
|
||||
lifelike = 1
|
||||
skin_color = TRUE
|
||||
species_cannot_use = list(SPECIES_TESHARI, SPECIES_PROMETHEAN, SPECIES_TAJ, SPECIES_HUMAN, SPECIES_VOX, SPECIES_HUMAN_VATBORN, SPECIES_UNATHI, SPECIES_DIONA, SPECIES_ZADDAT)
|
||||
blood_color = "#4451cf"
|
||||
speech_bubble_appearance = "normal"
|
||||
robo_brute_mod = 1.05
|
||||
robo_burn_mod = 1.05
|
||||
|
||||
/datum/robolimb/wardtakahashi
|
||||
company = "Ward-Takahashi"
|
||||
desc = "This limb features sleek black and white polymers."
|
||||
@@ -343,6 +415,10 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
|
||||
company = "Vey-Med"
|
||||
catalogue_data = list(/datum/category_item/catalogue/information/organization/vey_med)
|
||||
|
||||
// Bus disk for Diona mech parts.
|
||||
/obj/item/weapon/disk/limb/veymed/diona
|
||||
company = "Skrellian Exoskeleton"
|
||||
|
||||
/obj/item/weapon/disk/limb/wardtakahashi
|
||||
company = "Ward-Takahashi"
|
||||
catalogue_data = list(/datum/category_item/catalogue/information/organization/ward_takahashi)
|
||||
@@ -358,3 +434,34 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
|
||||
/obj/item/weapon/disk/limb/nanotrasen
|
||||
company = "NanoTrasen"
|
||||
catalogue_data = list(/datum/category_item/catalogue/information/organization/nanotrasen)
|
||||
|
||||
/obj/item/weapon/disk/species
|
||||
name = "Species Bioprints"
|
||||
desc = "A disk containing the blueprints for species-specific prosthetics."
|
||||
icon = 'icons/obj/cloning.dmi'
|
||||
icon_state = "datadisk2"
|
||||
var/species = SPECIES_HUMAN
|
||||
|
||||
/obj/item/weapon/disk/species/Initialize()
|
||||
..()
|
||||
if(species)
|
||||
name = "[species] [initial(name)]"
|
||||
|
||||
/obj/item/weapon/disk/species/skrell
|
||||
species = SPECIES_SKRELL
|
||||
|
||||
/obj/item/weapon/disk/species/unathi
|
||||
species = SPECIES_UNATHI
|
||||
|
||||
/obj/item/weapon/disk/species/tajaran
|
||||
species = SPECIES_TAJ
|
||||
|
||||
/obj/item/weapon/disk/species/teshari
|
||||
species = SPECIES_TESHARI
|
||||
|
||||
// In case of bus, presently.
|
||||
/obj/item/weapon/disk/species/diona
|
||||
species = SPECIES_DIONA
|
||||
|
||||
/obj/item/weapon/disk/species/zaddat
|
||||
species = SPECIES_ZADDAT
|
||||
|
||||
@@ -205,6 +205,37 @@
|
||||
/obj/item/organ/internal/diona/node/removed()
|
||||
return
|
||||
|
||||
// A 'brain' for the tree, still becomes a mindless nymph when removed like any other. Satisfies the FBP code.
|
||||
/obj/item/organ/internal/brain/cephalon
|
||||
name = "cephalon mass"
|
||||
parent_organ = BP_TORSO
|
||||
vital = TRUE
|
||||
|
||||
/obj/item/organ/internal/brain/cephalon/Initialize()
|
||||
..()
|
||||
spawn(30 SECONDS) // FBP Dionaea need some way to be disassembled through surgery, if absolutely necessary.
|
||||
if(!owner.isSynthetic())
|
||||
vital = FALSE
|
||||
|
||||
/obj/item/organ/internal/brain/cephalon/robotize()
|
||||
return
|
||||
|
||||
/obj/item/organ/internal/brain/cephalon/mechassist()
|
||||
return
|
||||
|
||||
/obj/item/organ/internal/brain/cephalon/digitize()
|
||||
return
|
||||
|
||||
/obj/item/organ/internal/brain/cephalon/removed(var/mob/living/user, var/skip_nymph)
|
||||
if(robotic >= ORGAN_ROBOT)
|
||||
return ..()
|
||||
var/mob/living/carbon/human/H = owner
|
||||
..()
|
||||
if(!istype(H) || !H.organs || !H.organs.len)
|
||||
H.death()
|
||||
if(prob(50) && !skip_nymph && spawn_diona_nymph(get_turf(src)))
|
||||
qdel(src)
|
||||
|
||||
/obj/item/organ/external/head/no_eyes/diona
|
||||
max_damage = 50
|
||||
min_broken_damage = 25
|
||||
|
||||
@@ -37,7 +37,9 @@
|
||||
user.drop_item()
|
||||
P.loc = src
|
||||
icon_state = "[initial(icon_state)]-open"
|
||||
sleep(5)
|
||||
flick("[initial(icon_state)]-open",src)
|
||||
playsound(loc, 'sound/bureaucracy/filingcabinet.ogg', 50, 1)
|
||||
sleep(40)
|
||||
icon_state = initial(icon_state)
|
||||
updateUsrDialog()
|
||||
else if(P.is_wrench())
|
||||
@@ -98,9 +100,10 @@
|
||||
if(istype(P) && (P.loc == src) && src.Adjacent(usr))
|
||||
usr.put_in_hands(P)
|
||||
updateUsrDialog()
|
||||
icon_state = "[initial(icon_state)]-open"
|
||||
flick("[initial(icon_state)]-open",src)
|
||||
playsound(loc, 'sound/bureaucracy/filingcabinet.ogg', 50, 1)
|
||||
spawn(0)
|
||||
sleep(5)
|
||||
sleep(20)
|
||||
icon_state = initial(icon_state)
|
||||
|
||||
/*
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
icon_state = "folder"
|
||||
w_class = ITEMSIZE_SMALL
|
||||
pressure_resistance = 2
|
||||
drop_sound = 'sound/items/drop/paper.ogg'
|
||||
|
||||
/obj/item/weapon/folder/blue
|
||||
desc = "A blue folder."
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
slot_flags = SLOT_HEAD
|
||||
body_parts_covered = HEAD
|
||||
attack_verb = list("bapped")
|
||||
drop_sound = 'sound/items/drop/paper.ogg'
|
||||
|
||||
var/info //What's actually written on the paper.
|
||||
var/info_links //A different version of the paper which includes html links at fields and EOF
|
||||
@@ -177,6 +178,7 @@
|
||||
//crumple dat paper
|
||||
info = stars(info,85)
|
||||
user.visible_message("\The [user] crumples \the [src] into a ball!")
|
||||
playsound(src, 'sound/bureaucracy/papercrumple.ogg', 50, 1)
|
||||
icon_state = "scrap"
|
||||
return
|
||||
user.examinate(src)
|
||||
@@ -368,6 +370,7 @@
|
||||
|
||||
user.visible_message("<span class='[class]'>[user] holds \the [P] up to \the [src], it looks like [TU.hes] trying to burn it!</span>", \
|
||||
"<span class='[class]'>You hold \the [P] up to \the [src], burning it slowly.</span>")
|
||||
playsound(src.loc, 'sound/bureaucracy/paperburn.ogg', 50, 1)
|
||||
|
||||
spawn(20)
|
||||
if(get_dist(src, user) < 2 && user.get_active_hand() == P && P.lit)
|
||||
@@ -461,6 +464,8 @@
|
||||
|
||||
usr << browse("<HTML><HEAD><TITLE>[name]</TITLE></HEAD><BODY>[info_links][stamps]</BODY></HTML>", "window=[name]") // Update the window
|
||||
|
||||
playsound(src, pick('sound/bureaucracy/pen1.ogg','sound/bureaucracy/pen2.ogg'), 10)
|
||||
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/paper/get_worn_icon_state(var/slot_name)
|
||||
@@ -573,6 +578,7 @@
|
||||
stamped += P.type
|
||||
overlays += stampoverlay
|
||||
|
||||
playsound(src, 'sound/bureaucracy/stamp.ogg', 50, 1)
|
||||
to_chat(user, "<span class='notice'>You stamp the paper with your rubber stamp.</span>")
|
||||
|
||||
else if(istype(P, /obj/item/weapon/flame))
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
layer = MOB_LAYER
|
||||
pressure_resistance = 1
|
||||
attack_verb = list("bapped")
|
||||
drop_sound = 'sound/items/drop/paper.ogg'
|
||||
var/page = 1 // current page
|
||||
var/list/pages = list() // Ordered list of pages as they are to be displayed. Can be different order than src.contents.
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 10)
|
||||
var/colour = "black" //what colour the ink is!
|
||||
pressure_resistance = 2
|
||||
drop_sound = 'sound/items/drop/accessory.ogg'
|
||||
|
||||
/obj/item/weapon/pen/attack_self(var/mob/user)
|
||||
to_chat(user, "<span class='notice'>Click.</span>")
|
||||
|
||||
@@ -515,6 +515,7 @@ obj/structure/cable/proc/cableColor(var/colorC)
|
||||
item_state = "coil"
|
||||
attack_verb = list("whipped", "lashed", "disciplined", "flogged")
|
||||
stacktype = /obj/item/stack/cable_coil
|
||||
drop_sound = 'sound/items/drop/accessory.ogg'
|
||||
|
||||
/obj/item/stack/cable_coil/cyborg
|
||||
name = "cable coil synthesizer"
|
||||
|
||||
@@ -127,13 +127,13 @@
|
||||
if((A in G.localareas) && (G.on))
|
||||
break
|
||||
if(!G)
|
||||
A.gravitychange(0,A)
|
||||
A.gravitychange(0)
|
||||
|
||||
|
||||
else
|
||||
for(var/area/A in gravity_generator:localareas)
|
||||
gravity_generator:on = 1
|
||||
A.gravitychange(1,A)
|
||||
A.gravitychange(1)
|
||||
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
throwforce = 1
|
||||
w_class = ITEMSIZE_TINY
|
||||
preserve_item = 1
|
||||
drop_sound = 'sound/items/drop/ring.ogg'
|
||||
|
||||
var/leaves_residue = 1
|
||||
var/caliber = "" //Which kind of guns it can be loaded into
|
||||
|
||||
@@ -49,6 +49,7 @@
|
||||
origin_tech = list(TECH_COMBAT = 1)
|
||||
attack_verb = list("struck", "hit", "bashed")
|
||||
zoomdevicename = "scope"
|
||||
drop_sound = 'sound/items/drop/gun.ogg'
|
||||
|
||||
var/automatic = 0
|
||||
var/burst = 1
|
||||
|
||||
@@ -150,7 +150,7 @@
|
||||
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
|
||||
slowdown_held = 0
|
||||
slowdown_held = 0.1
|
||||
|
||||
initial_cell_type = /obj/item/weapon/cell/device/weapon
|
||||
initial_capacitor_type = /obj/item/weapon/stock_parts/capacitor
|
||||
@@ -159,7 +159,7 @@
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="lethal", power_cost = 500, projectile_type = /obj/item/projectile/bullet/magnetic/heated, burst=1, fire_delay=10, move_delay=null, one_handed_penalty=0),
|
||||
list(mode_name="stun", power_cost = 350, projectile_type = /obj/item/projectile/energy/electrode/stunshot, burst=1, fire_delay=7, move_delay=null, one_handed_penalty=0),
|
||||
list(mode_name="stun", power_cost = 350, projectile_type = /obj/item/projectile/energy/electrode/strong, burst=1, fire_delay=7, move_delay=null, one_handed_penalty=0),
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/magnetic/railgun/heater/pistol/hos
|
||||
@@ -171,7 +171,7 @@
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="lethal", power_cost = 400, projectile_type = /obj/item/projectile/bullet/magnetic/heated, burst=1, fire_delay=8, move_delay=null, one_handed_penalty=0),
|
||||
list(mode_name="stun", power_cost = 300, projectile_type = /obj/item/projectile/energy/electrode/stunshot, burst=1, fire_delay=5, move_delay=null, one_handed_penalty=0),
|
||||
list(mode_name="stun", power_cost = 300, projectile_type = /obj/item/projectile/energy/electrode/strong, burst=1, fire_delay=5, move_delay=null, one_handed_penalty=0),
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/magnetic/railgun/flechette/sif
|
||||
|
||||
@@ -36,13 +36,16 @@
|
||||
damage = 30
|
||||
damage_type = SEARING
|
||||
embed_chance = 0
|
||||
armor_penetration = 40
|
||||
penetrating = 1
|
||||
|
||||
/obj/item/projectile/bullet/magnetic/heated/weak
|
||||
icon_state = "gauss_silenced"
|
||||
damage = 15
|
||||
agony = 5
|
||||
embed_chance = 0
|
||||
armor_penetration = 50
|
||||
armor_penetration = 30
|
||||
penetrating = 0
|
||||
|
||||
/obj/item/projectile/bullet/magnetic/fuelrod
|
||||
name = "fuel rod"
|
||||
|
||||
@@ -160,6 +160,7 @@
|
||||
var/label = href_list["dispense"]
|
||||
if(cartridges[label] && container && container.is_open_container())
|
||||
var/obj/item/weapon/reagent_containers/chem_disp_cartridge/C = cartridges[label]
|
||||
playsound(src.loc, 'sound/machines/reagent_dispense.ogg', 25, 1)
|
||||
C.reagents.trans_to(container, amount)
|
||||
|
||||
else if(href_list["ejectBeaker"])
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
icon = 'icons/obj/bloodpack.dmi'
|
||||
icon_state = "empty"
|
||||
item_state = "bloodpack_empty"
|
||||
drop_sound = 'sound/items/drop/food.ogg'
|
||||
volume = 200
|
||||
var/label_text = ""
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
w_class = ITEMSIZE_TINY
|
||||
slot_flags = SLOT_EARS
|
||||
volume = 5
|
||||
drop_sound = 'sound/items/drop/glass.ogg'
|
||||
|
||||
/obj/item/weapon/reagent_containers/dropper/examine(var/mob/user)
|
||||
if(!..(user, 2))
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = null
|
||||
item_state = "pill"
|
||||
drop_sound = 'sound/items/drop/food.ogg'
|
||||
|
||||
var/base_state = "pill"
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
var/visible_name = "a syringe"
|
||||
var/time = 30
|
||||
var/drawing = 0
|
||||
drop_sound = 'sound/items/drop/glass.ogg'
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/on_reagent_change()
|
||||
update_icon()
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
unwrap()
|
||||
|
||||
proc/unwrap()
|
||||
playsound(loc, 'sound/items/package_unwrap.ogg', 50, 1)
|
||||
// Destroy will drop our wrapped object on the turf, so let it.
|
||||
qdel(src)
|
||||
|
||||
@@ -48,6 +49,7 @@
|
||||
user.visible_message("\The [user] titles \the [src] with \a [W], marking down: \"[str]\"",\
|
||||
"<span class='notice'>You title \the [src]: \"[str]\"</span>",\
|
||||
"You hear someone scribbling a note.")
|
||||
playsound(src, pick('sound/bureaucracy/pen1.ogg','sound/bureaucracy/pen2.ogg'), 20)
|
||||
name = "[name] ([str])"
|
||||
if(!examtext && !nameset)
|
||||
nameset = 1
|
||||
@@ -67,6 +69,7 @@
|
||||
user.visible_message("\The [user] labels \the [src] with \a [W], scribbling down: \"[examtext]\"",\
|
||||
"<span class='notice'>You label \the [src]: \"[examtext]\"</span>",\
|
||||
"You hear someone scribbling a note.")
|
||||
playsound(src, pick('sound/bureaucracy/pen1.ogg','sound/bureaucracy/pen2.ogg'), 20)
|
||||
return
|
||||
|
||||
update_icon()
|
||||
@@ -111,6 +114,7 @@
|
||||
name = "small parcel"
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon_state = "deliverycrate3"
|
||||
drop_sound = 'sound/items/drop/box.ogg'
|
||||
var/obj/item/wrapped = null
|
||||
var/sortTag = null
|
||||
var/examtext = null
|
||||
@@ -155,6 +159,7 @@
|
||||
user.visible_message("\The [user] titles \the [src] with \a [W], marking down: \"[str]\"",\
|
||||
"<span class='notice'>You title \the [src]: \"[str]\"</span>",\
|
||||
"You hear someone scribbling a note.")
|
||||
playsound(src, pick('sound/bureaucracy/pen1.ogg','sound/bureaucracy/pen2.ogg'), 20)
|
||||
name = "[name] ([str])"
|
||||
if(!examtext && !nameset)
|
||||
nameset = 1
|
||||
@@ -175,6 +180,7 @@
|
||||
user.visible_message("\The [user] labels \the [src] with \a [W], scribbling down: \"[examtext]\"",\
|
||||
"<span class='notice'>You label \the [src]: \"[examtext]\"</span>",\
|
||||
"You hear someone scribbling a note.")
|
||||
playsound(src, pick('sound/bureaucracy/pen1.ogg','sound/bureaucracy/pen2.ogg'), 20)
|
||||
return
|
||||
|
||||
update_icon()
|
||||
@@ -217,6 +223,7 @@
|
||||
icon_state = "deliveryPaper"
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
var/amount = 25.0
|
||||
drop_sound = 'sound/items/drop/wrapper.ogg'
|
||||
|
||||
|
||||
afterattack(var/obj/target as obj, mob/user as mob, proximity)
|
||||
@@ -267,6 +274,7 @@
|
||||
user.visible_message("\The [user] wraps \a [target] with \a [src].",\
|
||||
"<span class='notice'>You wrap \the [target], leaving [amount] units of paper on \the [src].</span>",\
|
||||
"You hear someone taping paper around a small object.")
|
||||
playsound(loc, 'sound/items/package_wrap.ogg', 50, 1)
|
||||
else if (istype(target, /obj/structure/closet/crate))
|
||||
var/obj/structure/closet/crate/O = target
|
||||
if (src.amount > 3 && !O.opened)
|
||||
@@ -278,6 +286,7 @@
|
||||
user.visible_message("\The [user] wraps \a [target] with \a [src].",\
|
||||
"<span class='notice'>You wrap \the [target], leaving [amount] units of paper on \the [src].</span>",\
|
||||
"You hear someone taping paper around a large object.")
|
||||
playsound(loc, 'sound/items/package_wrap.ogg', 50, 1)
|
||||
else if(src.amount < 3)
|
||||
to_chat(user, "<span class='warning'>You need more paper.</span>")
|
||||
else if (istype (target, /obj/structure/closet))
|
||||
@@ -291,6 +300,7 @@
|
||||
user.visible_message("\The [user] wraps \a [target] with \a [src].",\
|
||||
"<span class='notice'>You wrap \the [target], leaving [amount] units of paper on \the [src].</span>",\
|
||||
"You hear someone taping paper around a large object.")
|
||||
playsound(loc, 'sound/items/package_wrap.ogg', 50, 1)
|
||||
else if(src.amount < 3)
|
||||
to_chat(user, "<span class='warning'>You need more paper.</span>")
|
||||
else
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
|
||||
/datum/design/circuit/disk
|
||||
build_type = IMPRINTER
|
||||
req_tech = list(TECH_DATA = 3)
|
||||
materials = list(MAT_PLASTIC = 2000, MAT_GLASS = 1000)
|
||||
chemicals = list("pacid" = 10)
|
||||
time = 5
|
||||
|
||||
/datum/design/circuit/disk/AssembleDesignName()
|
||||
..()
|
||||
if(build_path)
|
||||
var/obj/item/weapon/disk/D = build_path
|
||||
if(istype(D, /obj/item/weapon/disk/species))
|
||||
name = "Species Prosthetic design ([item_name])"
|
||||
else if(istype(D, /obj/item/weapon/disk/limb))
|
||||
name = "Transtellar Prosthetic design ([item_name])"
|
||||
else
|
||||
name = "Disk design ([item_name])"
|
||||
|
||||
/datum/design/circuit/disk/skrellprint
|
||||
name = SPECIES_SKRELL
|
||||
id = "prosthetic_skrell"
|
||||
req_tech = list(TECH_DATA = 3, TECH_BIO = 3)
|
||||
build_path = /obj/item/weapon/disk/species/skrell
|
||||
sort_string = "DBAAA"
|
||||
|
||||
/datum/design/circuit/disk/tajprint
|
||||
name = SPECIES_TAJ
|
||||
id = "prosthetic_tajaran"
|
||||
req_tech = list(TECH_DATA = 3, TECH_BIO = 3)
|
||||
build_path = /obj/item/weapon/disk/species/tajaran
|
||||
sort_string = "DBAAB"
|
||||
|
||||
/datum/design/circuit/disk/unathiprint
|
||||
name = SPECIES_UNATHI
|
||||
id = "prosthetic_unathi"
|
||||
req_tech = list(TECH_DATA = 3, TECH_BIO = 4)
|
||||
build_path = /obj/item/weapon/disk/species/unathi
|
||||
sort_string = "DBAAC"
|
||||
|
||||
/datum/design/circuit/disk/teshariprint
|
||||
name = SPECIES_TESHARI
|
||||
id = "prosthetic_teshari"
|
||||
req_tech = list(TECH_DATA = 3, TECH_BIO = 4)
|
||||
build_path = /obj/item/weapon/disk/species/teshari
|
||||
sort_string = "DBAAD"
|
||||
@@ -13,7 +13,17 @@
|
||||
var/obj/item/organ/O = new build_path(newloc)
|
||||
if(prosfab.manufacturer)
|
||||
var/datum/robolimb/manf = all_robolimbs[prosfab.manufacturer]
|
||||
O.species = GLOB.all_species["[manf.suggested_species]"]
|
||||
|
||||
if(!(O.organ_tag in manf.parts)) // Make sure we're using an actually present icon.
|
||||
manf = all_robolimbs["Unbranded"]
|
||||
|
||||
if(prosfab.species in manf.species_alternates) // If the prosthetics fab is set to say, Unbranded, and species set to 'Tajaran', it will make the Taj variant of Unbranded, if it exists.
|
||||
manf = manf.species_alternates[prosfab.species]
|
||||
|
||||
if(!prosfab.species || (prosfab.species in manf.species_cannot_use)) // Fabricator ensures the manufacturer can make parts for the species we're set to.
|
||||
O.species = GLOB.all_species["[manf.suggested_species]"]
|
||||
else
|
||||
O.species = GLOB.all_species[prosfab.species]
|
||||
else
|
||||
O.species = GLOB.all_species["Human"]
|
||||
O.robotize(prosfab.manufacturer)
|
||||
@@ -30,9 +40,18 @@
|
||||
if(istype(fabricator, /obj/machinery/pros_fabricator))
|
||||
var/obj/machinery/pros_fabricator/prosfab = fabricator
|
||||
var/newspecies = "Human"
|
||||
if(prosfab.manufacturer)
|
||||
var/datum/robolimb/manf = all_robolimbs[prosfab.manufacturer]
|
||||
newspecies = manf.suggested_species
|
||||
|
||||
var/datum/robolimb/manf = all_robolimbs[prosfab.manufacturer]
|
||||
|
||||
if(manf)
|
||||
if(prosfab.species in manf.species_alternates) // If the prosthetics fab is set to say, Unbranded, and species set to 'Tajaran', it will make the Taj variant of Unbranded, if it exists.
|
||||
manf = manf.species_alternates[prosfab.species]
|
||||
|
||||
if(!prosfab.species || (prosfab.species in manf.species_cannot_use))
|
||||
newspecies = manf.suggested_species
|
||||
else
|
||||
newspecies = prosfab.species
|
||||
|
||||
var/mob/living/carbon/human/H = new(newloc,newspecies)
|
||||
H.stat = DEAD
|
||||
H.gender = gender
|
||||
@@ -44,11 +63,26 @@
|
||||
|
||||
for(var/obj/item/organ/external/O in H.organs)
|
||||
O.species = GLOB.all_species[newspecies]
|
||||
O.robotize(prosfab.manufacturer)
|
||||
|
||||
if(!(O.organ_tag in manf.parts)) // Make sure we're using an actually present icon.
|
||||
manf = all_robolimbs["Unbranded"]
|
||||
|
||||
O.robotize(manf.company)
|
||||
O.dna = new/datum/dna()
|
||||
O.dna.ResetUI()
|
||||
O.dna.ResetSE()
|
||||
|
||||
// Skincolor weirdness.
|
||||
O.s_col[1] = 0
|
||||
O.s_col[2] = 0
|
||||
O.s_col[3] = 0
|
||||
|
||||
// Resetting the UI does strange things for the skin of a non-human robot, which should be controlled by a whole different thing.
|
||||
H.r_skin = 0
|
||||
H.g_skin = 0
|
||||
H.b_skin = 0
|
||||
H.dna.ResetUIFrom(H)
|
||||
|
||||
H.real_name = "Synthmorph #[rand(100,999)]"
|
||||
H.name = H.real_name
|
||||
H.dir = 2
|
||||
|
||||
@@ -481,3 +481,96 @@
|
||||
/datum/surgery_step/robotics/install_mmi/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<span class='warning'>[user]'s hand slips.</span>", \
|
||||
"<span class='warning'>Your hand slips.</span>")
|
||||
|
||||
/*
|
||||
* Install a Diona Nymph into a Nymph Mech
|
||||
*/
|
||||
|
||||
/datum/surgery_step/robotics/install_nymph
|
||||
allowed_tools = list(
|
||||
/obj/item/weapon/holder/diona = 100
|
||||
)
|
||||
|
||||
min_duration = 60
|
||||
max_duration = 80
|
||||
|
||||
/datum/surgery_step/robotics/install_nymph/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(target_zone != BP_TORSO)
|
||||
return
|
||||
|
||||
var/obj/item/weapon/holder/diona/N = tool
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
|
||||
if(!(affected && affected.open == 3))
|
||||
return 0
|
||||
|
||||
if(!istype(N))
|
||||
return 0
|
||||
|
||||
if(!N.held_mob.client || N.held_mob.stat >= DEAD)
|
||||
to_chat(user, "<span class='danger'>That nymph is not viable.</span>")
|
||||
return SURGERY_FAILURE
|
||||
|
||||
if(!(affected.robotic >= ORGAN_ROBOT))
|
||||
to_chat(user, "<span class='danger'>You cannot install a nymph into a meat puppet.</span>")
|
||||
return SURGERY_FAILURE
|
||||
|
||||
if(!(affected.model != "Skrellian Exoskeleton"))
|
||||
to_chat(user, "<span class='dangerou'>You're fairly certain a nymph can't pilot a normal robot.</span>")
|
||||
return SURGERY_FAILURE
|
||||
|
||||
if(!target.should_have_organ("brain"))
|
||||
to_chat(user, "<span class='danger'>You're pretty sure [target.species.name_plural] don't normally have a brain.</span>")
|
||||
return SURGERY_FAILURE
|
||||
|
||||
if(!isnull(target.internal_organs["brain"]))
|
||||
to_chat(user, "<span class='danger'>Your subject already has a cephalon.</span>")
|
||||
return SURGERY_FAILURE
|
||||
|
||||
return 1
|
||||
|
||||
/datum/surgery_step/robotics/install_nymph/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("[user] starts setting \the [tool] into [target]'s [affected.name].", \
|
||||
"You start setting \the [tool] into [target]'s [affected.name].")
|
||||
..()
|
||||
|
||||
/datum/surgery_step/robotics/install_nymph/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<span class='notice'>[user] has installed \the [tool] into [target]'s [affected.name].</span>", \
|
||||
"<span class='notice'>You have installed \the [tool] into [target]'s [affected.name].</span>")
|
||||
|
||||
var/obj/item/weapon/holder/diona/N = tool
|
||||
var/obj/item/organ/internal/brain/cephalon/cephalon = new(target, 1)
|
||||
target.internal_organs_by_name["brain"] = cephalon
|
||||
var/mob/living/carbon/alien/diona/D = N.held_mob
|
||||
user.drop_from_inventory(tool)
|
||||
|
||||
if(D && D.mind)
|
||||
D.mind.transfer_to(target)
|
||||
target.languages |= D.languages
|
||||
|
||||
qdel(D)
|
||||
|
||||
target.species = GLOB.all_species[SPECIES_DIONA]
|
||||
|
||||
target.verbs |= /mob/living/carbon/human/proc/diona_split_nymph
|
||||
target.verbs |= /mob/living/carbon/human/proc/regenerate
|
||||
|
||||
spawn(0) //Name yourself on your own damn time
|
||||
var/new_name = ""
|
||||
while(!new_name)
|
||||
if(!target) return
|
||||
var/try_name = input(target,"Pick a name for your new form!", "New Name", target.name)
|
||||
var/clean_name = sanitizeName(try_name, allow_numbers = TRUE)
|
||||
if(clean_name)
|
||||
var/okay = alert(target,"New name will be '[clean_name]', ok?", "Confirmation","Cancel","Ok")
|
||||
if(okay == "Ok")
|
||||
new_name = clean_name
|
||||
|
||||
target.name = new_name
|
||||
target.real_name = target.name
|
||||
|
||||
/datum/surgery_step/robotics/install_nymph/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<span class='warning'>[user]'s hand slips.</span>", \
|
||||
"<span class='warning'>Your hand slips.</span>")
|
||||
|
||||
Reference in New Issue
Block a user