mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-27 14:08:44 +01:00
Merge branch 'master' of https://github.com/PolarisSS13/Polaris into Slime_Rework_3
# Conflicts: # code/game/objects/items/devices/multitool.dm
This commit is contained in:
@@ -4,6 +4,9 @@
|
||||
#define UPLOAD_LIMIT 10485760 //Restricts client uploads to the server to 10MB //Boosted this thing. What's the worst that can happen?
|
||||
#define MIN_CLIENT_VERSION 0 //Just an ambiguously low version for now, I don't want to suddenly stop people playing.
|
||||
//I would just like the code ready should it ever need to be used.
|
||||
|
||||
//#define TOPIC_DEBUGGING 1
|
||||
|
||||
/*
|
||||
When somebody clicks a link in game, this Topic is called first.
|
||||
It does the stuff in this proc and then is redirected to the Topic() proc for the src=[0xWhatever]
|
||||
@@ -23,6 +26,14 @@
|
||||
if(!usr || usr != mob) //stops us calling Topic for somebody else's client. Also helps prevent usr=null
|
||||
return
|
||||
|
||||
#if defined(TOPIC_DEBUGGING)
|
||||
world << "[src]'s Topic: [href] destined for [hsrc]."
|
||||
|
||||
if(href_list["nano_err"]) //nano throwing errors
|
||||
world << "## NanoUI, Subject [src]: " + html_decode(href_list["nano_err"]) //NANO DEBUG HOOK
|
||||
|
||||
#endif
|
||||
|
||||
//search the href for script injection
|
||||
if( findtext(href,"<script",1,0) )
|
||||
world.log << "Attempted use of scripts within a topic call, by [src]"
|
||||
@@ -159,7 +170,7 @@
|
||||
|
||||
send_resources()
|
||||
nanomanager.send_resources(src)
|
||||
|
||||
|
||||
if(!void)
|
||||
void = new()
|
||||
screen += void
|
||||
|
||||
@@ -10,7 +10,7 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set
|
||||
"alien candidate" = 1, //always show // 6
|
||||
"positronic brain" = 1, // 7
|
||||
"cultist" = IS_MODE_COMPILED("cult"), // 8
|
||||
"infested monkey" = IS_MODE_COMPILED("monkey"), // 9
|
||||
"renegade" = 1, // 9
|
||||
"ninja" = "true", // 10
|
||||
"raider" = IS_MODE_COMPILED("heist"), // 11
|
||||
"diona" = 1, // 12
|
||||
|
||||
@@ -373,7 +373,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
|
||||
var/organ_tag = input(user, "Which limb do you want to change?") as null|anything in limb_selection_list
|
||||
|
||||
if(!organ_tag && !CanUseTopic(user)) return TOPIC_NOACTION
|
||||
if(!organ_tag || !CanUseTopic(user)) return TOPIC_NOACTION
|
||||
|
||||
var/limb = null
|
||||
var/second_limb = null // if you try to change the arm, the hand should also change
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
/datum/category_item/player_setup_item/player_global/ooc/save_preferences(var/savefile/S)
|
||||
S["ignored_players"] << pref.ignored_players
|
||||
|
||||
|
||||
/*
|
||||
/datum/category_item/player_setup_item/player_global/ooc/sanitize_preferences()
|
||||
if(isnull(pref.ignored_players))
|
||||
pref.ignored_players = list()
|
||||
@@ -32,7 +32,11 @@
|
||||
var/player_to_ignore = input(user, "Who do you want to ignore?","Ignore") as null|text
|
||||
if(player_to_ignore)
|
||||
player_to_ignore = sanitize(ckey(player_to_ignore))
|
||||
if(player_to_ignore == user.ckey)
|
||||
user <<"<span class='notice'>You can't ignore yourself.</span>"
|
||||
return TOPIC_REFRESH
|
||||
pref.ignored_players |= player_to_ignore
|
||||
return TOPIC_REFRESH
|
||||
|
||||
return ..()
|
||||
*/
|
||||
@@ -105,19 +105,21 @@ var/list/gear_datums = list()
|
||||
firstcat = 0
|
||||
else
|
||||
. += " |"
|
||||
|
||||
var/datum/loadout_category/LC = loadout_categories[category]
|
||||
var/category_cost = 0
|
||||
for(var/gear in LC.gear)
|
||||
if(gear in pref.gear)
|
||||
var/datum/gear/G = LC.gear[gear]
|
||||
category_cost += G.cost
|
||||
|
||||
if(category == current_tab)
|
||||
. += " <span class='linkOn'>[category]</span> "
|
||||
. += " <span class='linkOn'>[category] - [category_cost]</span> "
|
||||
else
|
||||
var/datum/loadout_category/LC = loadout_categories[category]
|
||||
var/make_orange = FALSE
|
||||
for(var/thing in LC.gear)
|
||||
if(thing in pref.gear)
|
||||
make_orange = TRUE
|
||||
break
|
||||
if(make_orange)
|
||||
. += " <a href='?src=\ref[src];select_category=[category]'><font color = '#E67300'>[category]</font></a> "
|
||||
if(category_cost)
|
||||
. += " <a href='?src=\ref[src];select_category=[category]'><font color = '#E67300'>[category] - [category_cost]</font></a> "
|
||||
else
|
||||
. += " <a href='?src=\ref[src];select_category=[category]'>[category]</a> "
|
||||
. += " <a href='?src=\ref[src];select_category=[category]'>[category] - 0</a> "
|
||||
. += "</b></center></td></tr>"
|
||||
|
||||
var/datum/loadout_category/LC = loadout_categories[current_tab]
|
||||
|
||||
@@ -244,3 +244,15 @@
|
||||
display_name = "winter coat, mining"
|
||||
path = /obj/item/clothing/suit/storage/hooded/wintercoat/miner
|
||||
allowed_roles = list("Shaft Miner")
|
||||
|
||||
/datum/gear/suit/varsity
|
||||
display_name = "varsity jacket selection"
|
||||
path = /obj/item/clothing/suit/varsity
|
||||
|
||||
/datum/gear/suit/varsity/New()
|
||||
..()
|
||||
var/list/varsities = list()
|
||||
for(var/varsity_style in typesof(/obj/item/clothing/suit/varsity))
|
||||
var/obj/item/clothing/suit/varsity/varsity = varsity_style
|
||||
varsities[initial(varsity.name)] = varsity
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(varsities))
|
||||
@@ -53,110 +53,16 @@
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(jumpclothes))
|
||||
|
||||
/datum/gear/uniform/skirt
|
||||
display_name = "plaid skirt, blue"
|
||||
path = /obj/item/clothing/under/dress/plaid_blue
|
||||
display_name = "skirt selection"
|
||||
path = /obj/item/clothing/under/skirt
|
||||
|
||||
/datum/gear/uniform/skirt/purple
|
||||
display_name = "plaid skirt, purple"
|
||||
path = /obj/item/clothing/under/dress/plaid_purple
|
||||
|
||||
/datum/gear/uniform/skirt/red
|
||||
display_name = "plaid skirt, red"
|
||||
path = /obj/item/clothing/under/dress/plaid_red
|
||||
|
||||
/datum/gear/uniform/skirt/black
|
||||
display_name = "skirt, black"
|
||||
path = /obj/item/clothing/under/blackskirt
|
||||
|
||||
/datum/gear/uniform/skirt/ce
|
||||
display_name = "skirt, ce"
|
||||
path = /obj/item/clothing/under/rank/chief_engineer/skirt
|
||||
allowed_roles = list("Chief Engineer")
|
||||
|
||||
/datum/gear/uniform/skirt/atmos
|
||||
display_name = "skirt, atmos"
|
||||
path = /obj/item/clothing/under/rank/atmospheric_technician/skirt
|
||||
allowed_roles = list("Chief Engineer","Atmospheric Technician")
|
||||
|
||||
/datum/gear/uniform/skirt/eng
|
||||
display_name = "skirt, engineer"
|
||||
path = /obj/item/clothing/under/rank/engineer/skirt
|
||||
allowed_roles = list("Chief Engineer","Station Engineer")
|
||||
|
||||
/datum/gear/uniform/skirt/roboticist
|
||||
display_name = "skirt, roboticist"
|
||||
path = /obj/item/clothing/under/rank/roboticist/skirt
|
||||
allowed_roles = list("Research Director","Roboticist")
|
||||
|
||||
/datum/gear/uniform/skirt/cmo
|
||||
display_name = "skirt, cmo"
|
||||
path = /obj/item/clothing/under/rank/chief_medical_officer
|
||||
allowed_roles = list("Chief Medical Officer")
|
||||
|
||||
/datum/gear/uniform/skirt/chem
|
||||
display_name = "skirt, chemist"
|
||||
path = /obj/item/clothing/under/rank/chemist/skirt
|
||||
allowed_roles = list("Chief Medical Officer","Chemist")
|
||||
|
||||
/datum/gear/uniform/skirt/viro
|
||||
display_name = "skirt, virologist"
|
||||
path = /obj/item/clothing/under/rank/virologist/skirt
|
||||
allowed_roles = list("Chief Medical Officer","Medical Doctor")
|
||||
|
||||
/datum/gear/uniform/skirt/med
|
||||
display_name = "skirt, medical"
|
||||
path = /obj/item/clothing/under/rank/medical/skirt
|
||||
allowed_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Psychiatrist","Paramedic")
|
||||
|
||||
/datum/gear/uniform/skirt/sci
|
||||
display_name = "skirt, scientist"
|
||||
path = /obj/item/clothing/under/rank/scientist/skirt
|
||||
allowed_roles = list("Research Director","Scientist")
|
||||
|
||||
/datum/gear/uniform/skirt/cargo
|
||||
display_name = "skirt, cargo"
|
||||
path = /obj/item/clothing/under/rank/cargotech/skirt
|
||||
allowed_roles = list("Quartermaster","Cargo Technician")
|
||||
|
||||
/datum/gear/uniform/skirt/qm
|
||||
display_name = "skirt, QM"
|
||||
path = /obj/item/clothing/under/rank/cargo/skirt
|
||||
allowed_roles = list("Quartermaster")
|
||||
|
||||
/datum/gear/uniform/skirt/warden
|
||||
display_name = "skirt, warden"
|
||||
path = /obj/item/clothing/under/rank/warden/skirt
|
||||
allowed_roles = list("Head of Security", "Warden")
|
||||
|
||||
/datum/gear/uniform/skirt/security
|
||||
display_name = "skirt, security"
|
||||
path = /obj/item/clothing/under/rank/security/skirt
|
||||
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer")
|
||||
|
||||
/datum/gear/uniform/skirt/head_of_security
|
||||
display_name = "skirt, hos"
|
||||
path = /obj/item/clothing/under/rank/head_of_security/skirt
|
||||
allowed_roles = list("Head of Security")
|
||||
|
||||
/datum/gear/uniform/jeans_qm
|
||||
display_name = "jeans, QM"
|
||||
path = /obj/item/clothing/under/rank/cargo/jeans
|
||||
allowed_roles = list("Quartermaster")
|
||||
|
||||
/datum/gear/uniform/jeans_qmf
|
||||
display_name = "female jeans, QM"
|
||||
path = /obj/item/clothing/under/rank/cargo/jeans/female
|
||||
allowed_roles = list("Quartermaster")
|
||||
|
||||
/datum/gear/uniform/jeans_cargo
|
||||
display_name = "jeans, cargo"
|
||||
path = /obj/item/clothing/under/rank/cargotech/jeans
|
||||
allowed_roles = list("Quartermaster","Cargo Technician")
|
||||
|
||||
/datum/gear/uniform/jeans_cargof
|
||||
display_name = "female jeans, cargo"
|
||||
path = /obj/item/clothing/under/rank/cargotech/jeans/female
|
||||
allowed_roles = list("Quartermaster","Cargo Technician")
|
||||
/datum/gear/uniform/skirt/New()
|
||||
..()
|
||||
var/list/skirts = list()
|
||||
for(var/skirt in (typesof(/obj/item/clothing/under/skirt)))
|
||||
var/obj/item/clothing/under/skirt/skirt_type = skirt
|
||||
skirts[initial(skirt_type.name)] = skirt_type
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(skirts))
|
||||
|
||||
/datum/gear/uniform/pants
|
||||
display_name = "pants selection"
|
||||
@@ -182,6 +88,96 @@
|
||||
shorts[initial(short_type.name)] = short_type
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(shorts))
|
||||
|
||||
/datum/gear/uniform/skirt/ce
|
||||
display_name = "skirt, ce"
|
||||
path = /obj/item/clothing/under/rank/engineer/chief_engineer/skirt
|
||||
allowed_roles = list("Chief Engineer")
|
||||
|
||||
/datum/gear/uniform/skirt/atmos
|
||||
display_name = "skirt, atmos"
|
||||
path = /obj/item/clothing/under/rank/engineer/atmospheric_technician/skirt
|
||||
allowed_roles = list("Chief Engineer","Atmospheric Technician")
|
||||
|
||||
/datum/gear/uniform/skirt/eng
|
||||
display_name = "skirt, engineer"
|
||||
path = /obj/item/clothing/under/rank/engineer/skirt
|
||||
allowed_roles = list("Chief Engineer","Station Engineer")
|
||||
|
||||
/datum/gear/uniform/skirt/roboticist
|
||||
display_name = "skirt, roboticist"
|
||||
path = /obj/item/clothing/under/rank/roboticist/skirt
|
||||
allowed_roles = list("Research Director","Roboticist")
|
||||
|
||||
/datum/gear/uniform/skirt/cmo
|
||||
display_name = "skirt, cmo"
|
||||
path = /obj/item/clothing/under/rank/medical/chief_medical_officer/skirt
|
||||
allowed_roles = list("Chief Medical Officer")
|
||||
|
||||
/datum/gear/uniform/skirt/chem
|
||||
display_name = "skirt, chemist"
|
||||
path = /obj/item/clothing/under/rank/medical/chemist/skirt
|
||||
allowed_roles = list("Chief Medical Officer","Chemist")
|
||||
|
||||
/datum/gear/uniform/skirt/viro
|
||||
display_name = "skirt, virologist"
|
||||
path = /obj/item/clothing/under/rank/medical/virologist/skirt
|
||||
allowed_roles = list("Chief Medical Officer","Medical Doctor")
|
||||
|
||||
/datum/gear/uniform/skirt/med
|
||||
display_name = "skirt, medical"
|
||||
path = /obj/item/clothing/under/rank/medical/skirt
|
||||
allowed_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Psychiatrist","Paramedic")
|
||||
|
||||
/datum/gear/uniform/skirt/sci
|
||||
display_name = "skirt, scientist"
|
||||
path = /obj/item/clothing/under/rank/scientist/skirt
|
||||
allowed_roles = list("Research Director","Scientist")
|
||||
|
||||
/datum/gear/uniform/skirt/cargo
|
||||
display_name = "skirt, cargo"
|
||||
path = /obj/item/clothing/under/rank/cargotech/skirt
|
||||
allowed_roles = list("Quartermaster","Cargo Technician")
|
||||
|
||||
/datum/gear/uniform/skirt/qm
|
||||
display_name = "skirt, QM"
|
||||
path = /obj/item/clothing/under/rank/cargo/skirt
|
||||
allowed_roles = list("Quartermaster")
|
||||
|
||||
/datum/gear/uniform/skirt/warden
|
||||
display_name = "skirt, warden"
|
||||
path = /obj/item/clothing/under/rank/security/warden/skirt
|
||||
allowed_roles = list("Head of Security", "Warden")
|
||||
|
||||
/datum/gear/uniform/skirt/security
|
||||
display_name = "skirt, security"
|
||||
path = /obj/item/clothing/under/rank/security/skirt
|
||||
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer")
|
||||
|
||||
/datum/gear/uniform/skirt/head_of_security
|
||||
display_name = "skirt, hos"
|
||||
path = /obj/item/clothing/under/rank/security/head_of_security/skirt
|
||||
allowed_roles = list("Head of Security")
|
||||
|
||||
/datum/gear/uniform/jeans_qm
|
||||
display_name = "jeans, QM"
|
||||
path = /obj/item/clothing/under/rank/cargo/jeans
|
||||
allowed_roles = list("Quartermaster")
|
||||
|
||||
/datum/gear/uniform/jeans_qmf
|
||||
display_name = "female jeans, QM"
|
||||
path = /obj/item/clothing/under/rank/cargo/jeans/female
|
||||
allowed_roles = list("Quartermaster")
|
||||
|
||||
/datum/gear/uniform/jeans_cargo
|
||||
display_name = "jeans, cargo"
|
||||
path = /obj/item/clothing/under/rank/cargotech/jeans
|
||||
allowed_roles = list("Quartermaster","Cargo Technician")
|
||||
|
||||
/datum/gear/uniform/jeans_cargof
|
||||
display_name = "female jeans, cargo"
|
||||
path = /obj/item/clothing/under/rank/cargotech/jeans/female
|
||||
allowed_roles = list("Quartermaster","Cargo Technician")
|
||||
|
||||
/datum/gear/uniform/suit //amish
|
||||
display_name = "suit, amish"
|
||||
path = /obj/item/clothing/under/sl_suit
|
||||
|
||||
@@ -12,55 +12,81 @@
|
||||
whitelisted = "Unathi"
|
||||
sort_category = "Xenowear"
|
||||
|
||||
/datum/gear/ears/skrell
|
||||
display_name = "headtail-wear, female, chain (Skrell)"
|
||||
/datum/gear/ears/skrell/chains //Chains
|
||||
display_name = "headtail chain selection (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/chain
|
||||
sort_category = "Xenowear"
|
||||
whitelisted = "Skrell"
|
||||
|
||||
/datum/gear/ears/skrell/plate
|
||||
display_name = "headtail-wear, male, bands (Skrell)"
|
||||
/datum/gear/ears/skrell/chains/New()
|
||||
..()
|
||||
var/list/chaintypes = list()
|
||||
for(var/chain_style in typesof(/obj/item/clothing/ears/skrell/chain))
|
||||
var/obj/item/clothing/ears/skrell/chain/chain = chain_style
|
||||
chaintypes[initial(chain.name)] = chain
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(chaintypes))
|
||||
|
||||
/datum/gear/ears/skrell/bands
|
||||
display_name = "headtail band selection (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/band
|
||||
sort_category = "Xenowear"
|
||||
whitelisted = "Skrell"
|
||||
|
||||
/datum/gear/ears/skrell/cloth //male/red
|
||||
display_name = "headtail-wear, male, red, cloth (Skrell)"
|
||||
/datum/gear/ears/skrell/bands/New()
|
||||
..()
|
||||
var/list/bandtypes = list()
|
||||
for(var/band_style in typesof(/obj/item/clothing/ears/skrell/band))
|
||||
var/obj/item/clothing/ears/skrell/band/band = band_style
|
||||
bandtypes[initial(band.name)] = band
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(bandtypes))
|
||||
|
||||
/datum/gear/ears/skrell/cloth/male
|
||||
display_name = "male headtail cloth selection (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/cloth_male
|
||||
sort_category = "Xenowear"
|
||||
whitelisted = "Skrell"
|
||||
|
||||
/datum/gear/ears/skrell/cloth/male //black
|
||||
display_name = "headtail-wear, male, black, cloth (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/cloth_male/black
|
||||
|
||||
/datum/gear/ears/skrell/cloth/male/blue
|
||||
display_name = "headtail-wear, male, blue, cloth (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/cloth_male/blue
|
||||
|
||||
/datum/gear/ears/skrell/cloth/male/green
|
||||
display_name = "headtail-wear, male, green, cloth (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/cloth_male/green
|
||||
|
||||
/datum/gear/ears/skrell/cloth/male/pink
|
||||
display_name = "headtail-wear, male, pink, cloth (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/cloth_male/pink
|
||||
/datum/gear/ears/skrell/cloth/male/New()
|
||||
..()
|
||||
var/list/clothtypes = list()
|
||||
for(var/cloth_style in typesof(/obj/item/clothing/ears/skrell/cloth_male))
|
||||
var/obj/item/clothing/ears/skrell/cloth_male/cloth = cloth_style
|
||||
clothtypes[initial(cloth.name)] = cloth
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(clothtypes))
|
||||
|
||||
/datum/gear/ears/skrell/cloth/female
|
||||
display_name = "headtail-wear, female, red, cloth (Skrell)"
|
||||
display_name = "female headtail cloth selection (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/cloth_female
|
||||
sort_category = "Xenowear"
|
||||
whitelisted = "Skrell"
|
||||
|
||||
/datum/gear/ears/skrell/cloth/female/black
|
||||
display_name = "headtail-wear, female, black, cloth (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/cloth_female/black
|
||||
/datum/gear/ears/skrell/cloth/female/New()
|
||||
..()
|
||||
var/list/clothtypes = list()
|
||||
for(var/cloth_style in typesof(/obj/item/clothing/ears/skrell/cloth_female))
|
||||
var/obj/item/clothing/ears/skrell/cloth_female/cloth = cloth_style
|
||||
clothtypes[initial(cloth.name)] = cloth
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(clothtypes))
|
||||
|
||||
/datum/gear/ears/skrell/cloth/female/blue
|
||||
display_name = "headtail-wear, female, blue, cloth (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/cloth_female/blue
|
||||
|
||||
/datum/gear/ears/skrell/cloth/female/green
|
||||
display_name = "headtail-wear, female, green, cloth (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/cloth_female/green
|
||||
|
||||
/datum/gear/ears/skrell/cloth/female/pink
|
||||
display_name = "headtail-wear, female, pink, cloth (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/cloth_female/pink
|
||||
/datum/gear/ears/skrell/colored/band
|
||||
display_name = "Colored bands (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/colored/band
|
||||
sort_category = "Xenowear"
|
||||
whitelisted = "Skrell"
|
||||
|
||||
/datum/gear/ears/skrell/colored/band/New()
|
||||
..()
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
|
||||
/datum/gear/ears/skrell/colored/chain
|
||||
display_name = "Colored chain (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/colored/chain
|
||||
sort_category = "Xenowear"
|
||||
whitelisted = "Skrell"
|
||||
|
||||
/datum/gear/ears/skrell/colored/chain/New()
|
||||
..()
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
|
||||
/datum/gear/uniform/teshari
|
||||
display_name = "smock, grey (Teshari)"
|
||||
|
||||
@@ -22,7 +22,7 @@ var/global/list/citizenship_choices = list(
|
||||
|
||||
var/global/list/home_system_choices = list(
|
||||
"Sol",
|
||||
"Vir",
|
||||
starsys_name,
|
||||
"Nyx",
|
||||
"Tau Ceti",
|
||||
"Epsilon Ursae Minoris",
|
||||
|
||||
@@ -11,73 +11,135 @@
|
||||
species_restricted = list("Skrell")
|
||||
|
||||
/obj/item/clothing/ears/skrell/chain
|
||||
name = "skrell headtail chains"
|
||||
name = "Gold headtail chains"
|
||||
desc = "A delicate golden chain worn by female skrell to decorate their head tails."
|
||||
icon_state = "skrell_chain"
|
||||
item_state = "skrell_chain"
|
||||
|
||||
|
||||
/obj/item/clothing/ears/skrell/chain/silver
|
||||
name = "Silver headtail chains"
|
||||
desc = "A delicate silver chain worn by female skrell to decorate their head tails."
|
||||
icon_state = "skrell_chain_sil"
|
||||
item_state = "skrell_chain_sil"
|
||||
|
||||
/obj/item/clothing/ears/skrell/chain/bluejewels
|
||||
name = "Blue jeweled golden headtail chains"
|
||||
desc = "A delicate golden chain adorned with blue jewels worn by female skrell to decorate their head tails."
|
||||
icon_state = "skrell_chain_bjewel"
|
||||
item_state = "skrell_chain_bjewel"
|
||||
|
||||
/obj/item/clothing/ears/skrell/chain/redjewels
|
||||
name = "Red jeweled golden headtail chains"
|
||||
desc = "A delicate golden chain adorned with red jewels worn by female skrell to decorate their head tails."
|
||||
icon_state = "skrell_chain_rjewel"
|
||||
item_state = "skrell_chain_rjewel"
|
||||
|
||||
/obj/item/clothing/ears/skrell/chain/ebony
|
||||
name = "Ebony headtail chains"
|
||||
desc = "A delicate ebony chain worn by female skrell to decorate their head tails."
|
||||
icon_state = "skrell_chain_ebony"
|
||||
item_state = "skrell_chain_ebony"
|
||||
|
||||
/obj/item/clothing/ears/skrell/band
|
||||
name = "skrell headtail bands"
|
||||
name = "Gold headtail bands"
|
||||
desc = "Golden metallic bands worn by male skrell to adorn their head tails."
|
||||
icon_state = "skrell_band"
|
||||
item_state = "skrell_band"
|
||||
|
||||
/obj/item/clothing/ears/skrell/band/silver
|
||||
name = "Silver headtail bands"
|
||||
desc = "Silver metallic bands worn by male skrell to adorn their head tails."
|
||||
icon_state = "skrell_band_sil"
|
||||
item_state = "skrell_band_sil"
|
||||
|
||||
/obj/item/clothing/ears/skrell/band/bluejewels
|
||||
name = "Blue jeweled golden headtail bands"
|
||||
desc = "Golden metallic bands adorned with blue jewels worn by male skrell to adorn their head tails."
|
||||
icon_state = "skrell_band_bjewel"
|
||||
item_state = "skrell_band_bjewel"
|
||||
|
||||
/obj/item/clothing/ears/skrell/band/redjewels
|
||||
name = "Red jeweled golden headtail bands"
|
||||
desc = "Golden metallic bands adorned with red jewels worn by male skrell to adorn their head tails."
|
||||
icon_state = "skrell_band_rjewel"
|
||||
item_state = "skrell_band_rjewel"
|
||||
|
||||
/obj/item/clothing/ears/skrell/band/ebony
|
||||
name = "Ebony headtail bands"
|
||||
desc = "Ebony bands worn by male skrell to adorn their head tails."
|
||||
icon_state = "skrell_band_ebony"
|
||||
item_state = "skrell_band_ebony"
|
||||
|
||||
/obj/item/clothing/ears/skrell/colored/band
|
||||
name = "Colored headtail bands"
|
||||
desc = "Metallic bands worn by male skrell to adorn their head tails."
|
||||
icon_state = "skrell_band_sil"
|
||||
item_state = "skrell_band_sil"
|
||||
|
||||
/obj/item/clothing/ears/skrell/colored/chain
|
||||
name = "Colored headtail chains"
|
||||
desc = "A delicate chain worn by female skrell to decorate their head tails."
|
||||
icon_state = "skrell_chain_sil"
|
||||
item_state = "skrell_chain_sil"
|
||||
|
||||
/obj/item/clothing/ears/skrell/cloth_female
|
||||
name = "skrell headtail cloth"
|
||||
name = "red headtail cloth"
|
||||
desc = "A cloth shawl worn by female skrell draped around their head tails."
|
||||
icon_state = "skrell_cloth_female"
|
||||
item_state = "skrell_cloth_female"
|
||||
|
||||
/obj/item/clothing/ears/skrell/cloth_female/black
|
||||
name = "skrell headtail cloth"
|
||||
desc = "A cloth shawl worn by female skrell draped around their head tails."
|
||||
name = "black headtail cloth"
|
||||
icon_state = "skrell_cloth_black_female"
|
||||
item_state = "skrell_cloth_black_female"
|
||||
|
||||
/obj/item/clothing/ears/skrell/cloth_female/blue
|
||||
name = "skrell headtail cloth"
|
||||
desc = "A cloth shawl worn by female skrell draped around their head tails."
|
||||
name = "blue headtail cloth"
|
||||
icon_state = "skrell_cloth_blue_female"
|
||||
item_state = "skrell_cloth_blue_female"
|
||||
|
||||
/obj/item/clothing/ears/skrell/cloth_female/green
|
||||
name = "skrell headtail cloth"
|
||||
desc = "A cloth shawl worn by female skrell draped around their head tails."
|
||||
name = "green headtail cloth"
|
||||
icon_state = "skrell_cloth_green_female"
|
||||
item_state = "skrell_cloth_green_female"
|
||||
|
||||
/obj/item/clothing/ears/skrell/cloth_female/pink
|
||||
name = "skrell headtail cloth"
|
||||
desc = "A cloth shawl worn by female skrell draped around their head tails."
|
||||
name = "pink headtail cloth"
|
||||
icon_state = "skrell_cloth_pink_female"
|
||||
item_state = "skrell_cloth_pink_female"
|
||||
|
||||
/obj/item/clothing/ears/skrell/cloth_female/lightblue
|
||||
name = "light blue headtail cloth"
|
||||
icon_state = "skrell_cloth_lblue_female"
|
||||
item_state = "skrell_cloth_lblue_female"
|
||||
|
||||
/obj/item/clothing/ears/skrell/cloth_male
|
||||
name = "skrell headtail cloth"
|
||||
name = "red headtail cloth"
|
||||
desc = "A cloth band worn by male skrell around their head tails."
|
||||
icon_state = "skrell_cloth_male"
|
||||
item_state = "skrell_cloth_male"
|
||||
|
||||
/obj/item/clothing/ears/skrell/cloth_male/black
|
||||
name = "skrell headtail cloth"
|
||||
desc = "A cloth band worn by male skrell around their head tails."
|
||||
name = "black headtail cloth"
|
||||
icon_state = "skrell_cloth_black_male"
|
||||
item_state = "skrell_cloth_black_male"
|
||||
|
||||
/obj/item/clothing/ears/skrell/cloth_male/blue
|
||||
name = "skrell headtail cloth"
|
||||
desc = "A cloth band worn by male skrell around their head tails."
|
||||
name = "blue headtail cloth"
|
||||
icon_state = "skrell_cloth_blue_male"
|
||||
item_state = "skrell_cloth_blue_male"
|
||||
|
||||
/obj/item/clothing/ears/skrell/cloth_male/green
|
||||
name = "skrell headtail cloth"
|
||||
desc = "A cloth band worn by male skrell around their head tails."
|
||||
name = "green headtail cloth"
|
||||
icon_state = "skrell_cloth_green_male"
|
||||
item_state = "skrell_cloth_green_male"
|
||||
|
||||
/obj/item/clothing/ears/skrell/cloth_male/pink
|
||||
name = "skrell headtail cloth"
|
||||
desc = "A cloth band worn by male skrell around their head tails."
|
||||
name = "pink headtail cloth"
|
||||
icon_state = "skrell_cloth_pink_male"
|
||||
item_state = "skrell_cloth_pink_male"
|
||||
item_state = "skrell_cloth_pink_male"
|
||||
|
||||
/obj/item/clothing/ears/skrell/cloth_male/lightblue
|
||||
name = "light blue headtail cloth"
|
||||
icon_state = "skrell_cloth_lblue_male"
|
||||
item_state = "skrell_cloth_lblue_male"
|
||||
@@ -48,7 +48,7 @@
|
||||
|
||||
/obj/item/clothing/suit/space
|
||||
name = "Space suit"
|
||||
desc = "A suit that protects against low pressure environments. \"NORTHERN STAR\" is written in large block letters on the back."
|
||||
desc = "A suit that protects against low pressure environments. \""+station_short+"\" is written in large block letters on the back."
|
||||
icon_state = "space"
|
||||
item_state = "s_suit"
|
||||
w_class = 5 // So you can't fit this in your bag and be prepared at all times.
|
||||
|
||||
@@ -656,3 +656,29 @@
|
||||
name = "mining winter coat"
|
||||
icon_state = "coatminer"
|
||||
armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/suit/varsity
|
||||
name = "black varsity jacket"
|
||||
desc = "A favorite of jocks everywhere from Sol to Nyx."
|
||||
icon_state = "varsity"
|
||||
item_state = "leather_jacket"
|
||||
|
||||
/obj/item/clothing/suit/varsity/red
|
||||
name = "red varsity jacket"
|
||||
icon_state = "varsity_red"
|
||||
|
||||
/obj/item/clothing/suit/varsity/purple
|
||||
name = "purple varsity jacket"
|
||||
icon_state = "varsity_purple"
|
||||
|
||||
/obj/item/clothing/suit/varsity/green
|
||||
name = "green varsity jacket"
|
||||
icon_state = "varsity_green"
|
||||
|
||||
/obj/item/clothing/suit/varsity/blue
|
||||
name = "blue varsity jacket"
|
||||
icon_state = "varsity_blue"
|
||||
|
||||
/obj/item/clothing/suit/varsity/brown
|
||||
name = "brown varsity jacket"
|
||||
icon_state = "varsity_brown"
|
||||
@@ -76,7 +76,7 @@
|
||||
slots = 5
|
||||
|
||||
/obj/item/clothing/accessory/storage/brown_drop_pouches
|
||||
name = "black drop pouches"
|
||||
name = "brown drop pouches"
|
||||
gender = PLURAL
|
||||
desc = "Worn brownish synthcotton bags to hold whatever you need, but cannot hold in hands."
|
||||
icon_state = "thigh_brown"
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
worn_state = "ba_suit"
|
||||
rolled_sleeves = 0
|
||||
|
||||
|
||||
/obj/item/clothing/under/rank/captain //Alright, technically not a 'civilian' but its better then giving a .dm file for a single define.
|
||||
desc = "It's a blue jumpsuit with some gold markings denoting the rank of \"Captain\"."
|
||||
name = "captain's jumpsuit"
|
||||
@@ -17,7 +16,6 @@
|
||||
worn_state = "captain"
|
||||
rolled_sleeves = 0
|
||||
|
||||
|
||||
/obj/item/clothing/under/rank/cargo
|
||||
name = "quartermaster's jumpsuit"
|
||||
desc = "It's a jumpsuit worn by the quartermaster. It's specially designed to prevent back injuries caused by pushing paper."
|
||||
@@ -26,14 +24,6 @@
|
||||
worn_state = "qm"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/cargo/skirt
|
||||
name = "quartermaster's jumpskirt"
|
||||
desc = "It's a jumpskirt worn by the quartermaster. It's specially designed to prevent back injuries caused by pushing paper."
|
||||
icon_state = "qmf"
|
||||
worn_state = "qmf"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/cargo/jeans
|
||||
name = "quartermaster's jumpjeans"
|
||||
desc = "Jeeeaaans! They're comfy!"
|
||||
@@ -56,13 +46,6 @@
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/cargotech/skirt
|
||||
name = "cargo technician's jumpskirt"
|
||||
desc = "Skirrrrrts! They're comfy and easy to wear!"
|
||||
icon_state = "cargof"
|
||||
worn_state = "cargof"
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/cargotech/jeans
|
||||
name = "cargo technician's jumpjeans"
|
||||
desc = "Jeeeaaans! They're comfy!"
|
||||
@@ -76,7 +59,6 @@
|
||||
icon_state = "cargojf"
|
||||
worn_state = "cargojf"
|
||||
|
||||
|
||||
/obj/item/clothing/under/rank/chaplain
|
||||
desc = "It's a black jumpsuit, often worn by religious folk."
|
||||
name = "chaplain's jumpsuit"
|
||||
@@ -85,7 +67,6 @@
|
||||
worn_state = "chapblack"
|
||||
rolled_sleeves = 0
|
||||
|
||||
|
||||
/obj/item/clothing/under/rank/chef
|
||||
desc = "It's an apron which is given only to the most <b>hardcore</b> chefs in space."
|
||||
name = "chef's uniform"
|
||||
@@ -94,7 +75,6 @@
|
||||
worn_state = "chef"
|
||||
rolled_sleeves = 0
|
||||
|
||||
|
||||
/obj/item/clothing/under/rank/clown
|
||||
name = "clown suit"
|
||||
desc = "<i>'HONK!'</i>"
|
||||
@@ -103,7 +83,6 @@
|
||||
worn_state = "clown"
|
||||
rolled_sleeves = -1
|
||||
|
||||
|
||||
/obj/item/clothing/under/rank/head_of_personnel
|
||||
desc = "It's a jumpsuit worn by someone who works in the position of \"Head of Personnel\"."
|
||||
name = "head of personnel's jumpsuit"
|
||||
@@ -120,7 +99,6 @@
|
||||
worn_state = "hopwhimsy"
|
||||
rolled_sleeves = -1
|
||||
|
||||
|
||||
/obj/item/clothing/under/rank/hydroponics
|
||||
desc = "It's a jumpsuit designed to protect against minor plant-related hazards."
|
||||
name = "botanist's jumpsuit"
|
||||
@@ -130,7 +108,6 @@
|
||||
permeability_coefficient = 0.50
|
||||
rolled_sleeves = 0
|
||||
|
||||
|
||||
/obj/item/clothing/under/rank/internalaffairs
|
||||
desc = "The plain, professional attire of an Internal Affairs Agent. The collar is <i>immaculately</i> starched."
|
||||
name = "Internal Affairs uniform"
|
||||
@@ -139,7 +116,6 @@
|
||||
worn_state = "internalaffairs"
|
||||
rolled_sleeves = 0
|
||||
|
||||
|
||||
/obj/item/clothing/under/rank/janitor
|
||||
desc = "It's the official uniform of the station's janitor. It has minor protection from biohazards."
|
||||
name = "janitor's jumpsuit"
|
||||
@@ -149,40 +125,34 @@
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
rolled_sleeves = 0
|
||||
|
||||
|
||||
/obj/item/clothing/under/lawyer
|
||||
desc = "Slick threads."
|
||||
name = "Lawyer suit"
|
||||
|
||||
|
||||
/obj/item/clothing/under/lawyer/black
|
||||
name = "black Lawyer suit"
|
||||
icon_state = "lawyer_black"
|
||||
item_state = "lawyer_black"
|
||||
worn_state = "lawyer_black"
|
||||
|
||||
|
||||
/obj/item/clothing/under/lawyer/female
|
||||
name = "black Lawyer suit"
|
||||
icon_state = "black_suit_fem"
|
||||
item_state = "lawyer_black"
|
||||
worn_state = "black_suit_fem"
|
||||
|
||||
|
||||
/obj/item/clothing/under/lawyer/red
|
||||
name = "red Lawyer suit"
|
||||
icon_state = "lawyer_red"
|
||||
item_state = "lawyer_red"
|
||||
worn_state = "lawyer_red"
|
||||
|
||||
|
||||
/obj/item/clothing/under/lawyer/blue
|
||||
name = "blue Lawyer suit"
|
||||
icon_state = "lawyer_blue"
|
||||
item_state = "lawyer_blue"
|
||||
worn_state = "lawyer_blue"
|
||||
|
||||
|
||||
/obj/item/clothing/under/lawyer/bluesuit
|
||||
name = "Blue Suit"
|
||||
desc = "A classy suit and tie"
|
||||
@@ -190,7 +160,6 @@
|
||||
item_state = "ba_suit"
|
||||
worn_state = "bluesuit"
|
||||
|
||||
|
||||
/obj/item/clothing/under/lawyer/purpsuit
|
||||
name = "Purple Suit"
|
||||
icon_state = "lawyer_purp"
|
||||
@@ -204,7 +173,6 @@
|
||||
item_state = "johnny"
|
||||
worn_state = "oldman"
|
||||
|
||||
|
||||
/obj/item/clothing/under/librarian
|
||||
name = "sensible suit"
|
||||
desc = "It's very... sensible."
|
||||
|
||||
@@ -8,14 +8,6 @@
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10)
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/chief_engineer/skirt
|
||||
desc = "It's a high visibility jumpskirt given to those engineers insane enough to achieve the rank of \"Chief engineer\". It has minor radiation shielding."
|
||||
name = "chief engineer's jumpskirt"
|
||||
icon_state = "chieff"
|
||||
worn_state = "chieff"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/atmospheric_technician
|
||||
desc = "It's a jumpsuit worn by atmospheric technicians."
|
||||
name = "atmospheric technician's jumpsuit"
|
||||
@@ -24,14 +16,6 @@
|
||||
worn_state = "atmos"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/atmospheric_technician/skirt
|
||||
desc = "It's a jumpskirt worn by atmospheric technicians."
|
||||
name = "atmospheric technician's jumpskirt"
|
||||
icon_state = "atmosf"
|
||||
worn_state = "atmosf"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/engineer
|
||||
desc = "It's an orange high visibility jumpsuit worn by engineers. It has minor radiation shielding."
|
||||
name = "engineer's jumpsuit"
|
||||
@@ -41,25 +25,10 @@
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10)
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/engineer/skirt
|
||||
desc = "It's an orange high visibility jumpskirt worn by engineers. It has minor radiation shielding."
|
||||
name = "engineer's jumpskirt"
|
||||
icon_state = "enginef"
|
||||
worn_state = "enginef"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/roboticist
|
||||
desc = "It's a slimming black jumpsuit with reinforced seams; great for industrial work."
|
||||
name = "roboticist's jumpsuit"
|
||||
icon_state = "robotics"
|
||||
item_state = "bl_suit"
|
||||
worn_state = "robotics"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/roboticist/skirt
|
||||
desc = "It's a slimming black jumpskirt with reinforced seams; great for industrial work."
|
||||
name = "roboticist's jumpskirt"
|
||||
icon_state = "roboticsf"
|
||||
worn_state = "roboticsf"
|
||||
rolled_sleeves = -1
|
||||
rolled_sleeves = 0
|
||||
@@ -36,13 +36,6 @@
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0)
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/scientist/skirt
|
||||
name = "scientist's jumpskirt"
|
||||
icon_state = "sciencewhitef"
|
||||
worn_state = "sciencewhitef"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/chemist
|
||||
desc = "It's made of a special fiber that gives special protection against biohazards. It has a chemist rank stripe on it."
|
||||
name = "chemist's jumpsuit"
|
||||
@@ -53,13 +46,6 @@
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/chemist/skirt
|
||||
name = "chemist's jumpskirt"
|
||||
icon_state = "chemistrywhitef"
|
||||
worn_state = "chemistrywhitef"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
rolled_sleeves = -1
|
||||
|
||||
/*
|
||||
* Medical
|
||||
*/
|
||||
@@ -73,14 +59,6 @@
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/chief_medical_officer/skirt
|
||||
desc = "It's a jumpskirt worn by those with the experience to be \"Chief Medical Officer\". It provides minor biological protection."
|
||||
name = "chief medical officer's jumpskirt"
|
||||
icon_state = "cmof"
|
||||
worn_state = "cmof"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/geneticist
|
||||
desc = "It's made of a special fiber that gives special protection against biohazards. It has a genetics rank stripe on it."
|
||||
name = "geneticist's jumpsuit"
|
||||
@@ -91,13 +69,6 @@
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/geneticist/skirt
|
||||
name = "geneticist's jumpskirt"
|
||||
icon_state = "geneticswhitef"
|
||||
worn_state = "geneticswhitef"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/virologist
|
||||
desc = "It's made of a special fiber that gives special protection against biohazards. It has a virologist rank stripe on it."
|
||||
name = "virologist's jumpsuit"
|
||||
@@ -108,13 +79,6 @@
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/virologist/skirt
|
||||
name = "virologist's jumpskirt"
|
||||
icon_state = "virologywhitef"
|
||||
worn_state = "virologywhitef"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/nursesuit
|
||||
desc = "It's a jumpsuit commonly worn by nursing staff in the medical department."
|
||||
name = "nurse's suit"
|
||||
@@ -157,13 +121,6 @@
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/medical/skirt
|
||||
name = "medical doctor's jumpskirt"
|
||||
icon_state = "medicalf"
|
||||
worn_state = "medicalf"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/medical/paramedic
|
||||
name = "short sleeve medical jumpsuit"
|
||||
desc = "It's made of a special fiber that provides minor protection against biohazards. This one has a cross on the chest denoting that the wearer is trained medical personnel."
|
||||
|
||||
@@ -18,13 +18,6 @@
|
||||
siemens_coefficient = 0.9
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/warden/skirt
|
||||
desc = "Standard feminine fashion for a Warden. It is made of sturdier material than standard jumpskirts. It has the word \"Warden\" written on the shoulders."
|
||||
name = "warden's jumpskirt"
|
||||
icon_state = "wardenf"
|
||||
item_state = "r_suit"
|
||||
worn_state = "wardenf"
|
||||
|
||||
/obj/item/clothing/head/helmet/warden
|
||||
name = "warden's hat"
|
||||
desc = "It's a special helmet issued to the Warden of a securiy force."
|
||||
@@ -41,13 +34,6 @@
|
||||
siemens_coefficient = 0.9
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/security/skirt
|
||||
name = "security officer's jumpskirt"
|
||||
desc = "Standard feminine fashion for Security Officers. It's made of sturdier material than the standard jumpskirts."
|
||||
icon_state = "secredf"
|
||||
item_state = "r_suit"
|
||||
worn_state = "secredf"
|
||||
|
||||
/obj/item/clothing/under/rank/dispatch
|
||||
name = "dispatcher's uniform"
|
||||
desc = "A dress shirt and khakis with a security patch sewn on."
|
||||
@@ -174,13 +160,6 @@
|
||||
siemens_coefficient = 0.8
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/head_of_security/skirt
|
||||
desc = "It's a fashionable jumpskirt worn by those few with the dedication to achieve the position of \"Head of Security\". It has additional armor to protect the wearer."
|
||||
name = "head of security's jumpskirt"
|
||||
icon_state = "hosredf"
|
||||
item_state = "r_suit"
|
||||
worn_state = "hosredf"
|
||||
|
||||
/obj/item/clothing/under/rank/head_of_security/corp
|
||||
icon_state = "hos_corporate"
|
||||
//item_state = "hos_corporate"
|
||||
|
||||
@@ -211,14 +211,6 @@
|
||||
item_state = "r_suit"
|
||||
worn_state = "red_suit"
|
||||
|
||||
/obj/item/clothing/under/blackskirt
|
||||
name = "black skirt"
|
||||
desc = "A black skirt, very fancy!"
|
||||
icon_state = "blackskirt"
|
||||
item_state = "bl_suit"
|
||||
worn_state = "blackskirt"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
|
||||
/obj/item/clothing/under/schoolgirl
|
||||
name = "schoolgirl uniform"
|
||||
desc = "It's just like one of my Japanese animes!"
|
||||
@@ -401,26 +393,6 @@
|
||||
worn_state = "huresource"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
|
||||
/obj/item/clothing/under/dress/plaid_blue
|
||||
name = "blue plaid skirt"
|
||||
desc = "A preppy blue skirt with a white blouse."
|
||||
icon_state = "plaid_blue"
|
||||
worn_state = "plaid_blue"
|
||||
|
||||
/obj/item/clothing/under/dress/plaid_red
|
||||
name = "red plaid skirt"
|
||||
desc = "A preppy red skirt with a white blouse."
|
||||
icon_state = "plaid_red"
|
||||
item_state = "kilt"
|
||||
worn_state = "plaid_red"
|
||||
|
||||
/obj/item/clothing/under/dress/plaid_purple
|
||||
name = "blue purple skirt"
|
||||
desc = "A preppy purple skirt with a white blouse."
|
||||
icon_state = "plaid_purple"
|
||||
item_state = "kilt"
|
||||
worn_state = "plaid_purple"
|
||||
|
||||
//wedding stuff
|
||||
/obj/item/clothing/under/wedding/
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
|
||||
|
||||
@@ -100,3 +100,152 @@
|
||||
name = "khaki short shorts"
|
||||
icon_state = "khaki_shorts_f"
|
||||
worn_state = "khaki_shorts_f"
|
||||
|
||||
//Argh, skirts be below this line -> ------------------------------
|
||||
|
||||
/obj/item/clothing/under/skirt
|
||||
name = "black skirt"
|
||||
desc = "A black skirt, very fancy!"
|
||||
icon_state = "blackskirt"
|
||||
item_state = "bl_suit"
|
||||
worn_state = "blackskirt"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/skirt/khaki
|
||||
name = "khaki skirt"
|
||||
desc = "A skirt that is a khaki color."
|
||||
icon_state = "skirt_khaki"
|
||||
|
||||
/obj/item/clothing/under/skirt/black
|
||||
name = "short black skirt"
|
||||
desc = "A skirt that is a shiny black."
|
||||
icon_state = "skirt_short_black"
|
||||
|
||||
/obj/item/clothing/under/skirt/blue
|
||||
name = "short blue skirt"
|
||||
desc = "A skirt that is a shiny blue."
|
||||
icon_state = "skirt_short_blue"
|
||||
|
||||
/obj/item/clothing/under/skirt/red
|
||||
name = "short red skirt"
|
||||
desc = "A skirt that is a shiny red."
|
||||
icon_state = "skirt_short_red"
|
||||
|
||||
/obj/item/clothing/under/skirt/swept
|
||||
name = "swept skirt"
|
||||
desc = "A skirt that is swept to one side."
|
||||
icon_state = "skirt_swept"
|
||||
|
||||
/obj/item/clothing/under/skirt/plaid_blue
|
||||
name = "blue plaid skirt"
|
||||
desc = "A preppy blue skirt with a white blouse."
|
||||
icon_state = "plaid_blue"
|
||||
worn_state = "plaid_blue"
|
||||
|
||||
/obj/item/clothing/under/skirt/plaid_red
|
||||
name = "red plaid skirt"
|
||||
desc = "A preppy red skirt with a white blouse."
|
||||
icon_state = "plaid_red"
|
||||
item_state = "kilt"
|
||||
worn_state = "plaid_red"
|
||||
|
||||
/obj/item/clothing/under/skirt/plaid_purple
|
||||
name = "blue purple skirt"
|
||||
desc = "A preppy purple skirt with a white blouse."
|
||||
icon_state = "plaid_purple"
|
||||
item_state = "kilt"
|
||||
worn_state = "plaid_purple"
|
||||
|
||||
/obj/item/clothing/under/rank/cargo/skirt
|
||||
name = "quartermaster's jumpskirt"
|
||||
desc = "It's a jumpskirt worn by the quartermaster. It's specially designed to prevent back injuries caused by pushing paper."
|
||||
icon_state = "qmf"
|
||||
worn_state = "qmf"
|
||||
|
||||
/obj/item/clothing/under/rank/cargotech/skirt
|
||||
name = "cargo technician's jumpskirt"
|
||||
desc = "Skirrrrrts! They're comfy and easy to wear!"
|
||||
icon_state = "cargof"
|
||||
worn_state = "cargof"
|
||||
|
||||
/obj/item/clothing/under/rank/engineer/skirt
|
||||
desc = "It's an orange high visibility jumpskirt worn by engineers. It has minor radiation shielding."
|
||||
name = "engineer's jumpskirt"
|
||||
icon_state = "enginef"
|
||||
worn_state = "enginef"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10)
|
||||
|
||||
/obj/item/clothing/under/rank/engineer/chief_engineer/skirt
|
||||
desc = "It's a high visibility jumpskirt given to those engineers insane enough to achieve the rank of \"Chief engineer\". It has minor radiation shielding."
|
||||
name = "chief engineer's jumpskirt"
|
||||
icon_state = "chieff"
|
||||
worn_state = "chieff"
|
||||
|
||||
/obj/item/clothing/under/rank/engineer/atmospheric_technician/skirt
|
||||
desc = "It's a jumpskirt worn by atmospheric technicians."
|
||||
name = "atmospheric technician's jumpskirt"
|
||||
icon_state = "atmosf"
|
||||
worn_state = "atmosf"
|
||||
|
||||
/obj/item/clothing/under/rank/roboticist/skirt
|
||||
desc = "It's a slimming black jumpskirt with reinforced seams; great for industrial work."
|
||||
name = "roboticist's jumpskirt"
|
||||
icon_state = "roboticsf"
|
||||
worn_state = "roboticsf"
|
||||
|
||||
/obj/item/clothing/under/rank/scientist/skirt
|
||||
name = "scientist's jumpskirt"
|
||||
icon_state = "sciencewhitef"
|
||||
worn_state = "sciencewhitef"
|
||||
permeability_coefficient = 0.50
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/under/rank/medical/skirt
|
||||
name = "medical doctor's jumpskirt"
|
||||
icon_state = "medicalf"
|
||||
worn_state = "medicalf"
|
||||
|
||||
/obj/item/clothing/under/rank/medical/chemist/skirt
|
||||
name = "chemist's jumpskirt"
|
||||
icon_state = "chemistrywhitef"
|
||||
worn_state = "chemistrywhitef"
|
||||
|
||||
/obj/item/clothing/under/rank/medical/chief_medical_officer/skirt
|
||||
desc = "It's a jumpskirt worn by those with the experience to be \"Chief Medical Officer\". It provides minor biological protection."
|
||||
name = "chief medical officer's jumpskirt"
|
||||
icon_state = "cmof"
|
||||
worn_state = "cmof"
|
||||
|
||||
/obj/item/clothing/under/rank/medical/geneticist/skirt
|
||||
name = "geneticist's jumpskirt"
|
||||
icon_state = "geneticswhitef"
|
||||
worn_state = "geneticswhitef"
|
||||
|
||||
/obj/item/clothing/under/rank/medical/virologist/skirt
|
||||
name = "virologist's jumpskirt"
|
||||
icon_state = "virologywhitef"
|
||||
worn_state = "virologywhitef"
|
||||
|
||||
/obj/item/clothing/under/rank/security/skirt
|
||||
name = "security officer's jumpskirt"
|
||||
desc = "Standard feminine fashion for Security Officers. It's made of sturdier material than the standard jumpskirts."
|
||||
icon_state = "secredf"
|
||||
item_state = "r_suit"
|
||||
worn_state = "secredf"
|
||||
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
/obj/item/clothing/under/rank/security/warden/skirt
|
||||
desc = "Standard feminine fashion for a Warden. It is made of sturdier material than standard jumpskirts. It has the word \"Warden\" written on the shoulders."
|
||||
name = "warden's jumpskirt"
|
||||
icon_state = "wardenf"
|
||||
item_state = "r_suit"
|
||||
worn_state = "wardenf"
|
||||
|
||||
/obj/item/clothing/under/rank/security/head_of_security/skirt
|
||||
desc = "It's a fashionable jumpskirt worn by those few with the dedication to achieve the position of \"Head of Security\". It has additional armor to protect the wearer."
|
||||
name = "head of security's jumpskirt"
|
||||
icon_state = "hosredf"
|
||||
item_state = "r_suit"
|
||||
worn_state = "hosredf"
|
||||
@@ -24,6 +24,7 @@
|
||||
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
|
||||
RefreshParts()
|
||||
..()
|
||||
|
||||
/obj/machinery/dnaforensics/attackby(var/obj/item/W, mob/user as mob)
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
affected_dest.temp_price_change[good_type] = rand(1,100) / 100
|
||||
|
||||
/datum/event/economic_event/announce()
|
||||
var/author = "The Vir Times"
|
||||
var/author = "The "+starsys_name+" Times"
|
||||
var/channel = author
|
||||
|
||||
//see if our location has custom event info for this event
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
if(!event_type)
|
||||
return
|
||||
|
||||
var/author = "The Vir Times"
|
||||
var/author = "The "+starsys_name+" Times"
|
||||
var/channel = author
|
||||
|
||||
//see if our location has custom event info for this event
|
||||
@@ -116,11 +116,11 @@
|
||||
else
|
||||
body += "is recovering from plastic surgery in a clinic on [affected_dest.name] for the [pick("second","third","fourth")] time, reportedly having made the decision in response to "
|
||||
body += "[pick("unkind comments by an ex","rumours started by jealous friends",\
|
||||
"the decision to be dropped by a major sponsor","a disasterous interview on Vir Tonight")]."
|
||||
"the decision to be dropped by a major sponsor","a disasterous interview on "+starsys_name+" Tonight")]."
|
||||
if(TOURISM)
|
||||
body += "Tourists are flocking to [affected_dest.name] after the surprise announcement of [pick("major shopping bargains by a wily retailer",\
|
||||
"a huge new ARG by a popular entertainment company","a secret tour by popular artiste [random_name(pick(MALE,FEMALE))]")]. \
|
||||
The Vir Times is offering discount tickets for two to see [random_name(pick(MALE,FEMALE))] live in return for eyewitness reports and up to the minute coverage."
|
||||
The "+starsys_name+" Times is offering discount tickets for two to see [random_name(pick(MALE,FEMALE))] live in return for eyewitness reports and up to the minute coverage."
|
||||
|
||||
news_network.SubmitArticle(body, author, channel, null, 1)
|
||||
|
||||
@@ -152,7 +152,7 @@
|
||||
"'Here kitty kitty' no longer preferred tajaran retrieval technique.",\
|
||||
"Man travels 7000 light years to retrieve lost hankie, 'It was my favourite'.",\
|
||||
"New bowling lane that shoots mini-meteors at bowlers very popular.",\
|
||||
"[pick("Unathi","Spacer")] gets tattoo of Vir on chest '[pick("[boss_short]","star","starship","asteroid")] tickles most'.",\
|
||||
"[pick("Unathi","Spacer")] gets tattoo of "+starsys_name+" on chest '[pick("[boss_short]","star","starship","asteroid")] tickles most'.",\
|
||||
"Skrell marries computer; wedding attended by 100 modems.",\
|
||||
"Chef reports successfully using harmonica as cheese grater.",\
|
||||
"[company_name] invents handkerchief that says 'Bless you' after sneeze.",\
|
||||
@@ -162,7 +162,7 @@
|
||||
"This space for rent.",\
|
||||
"[affected_dest.name] Baker Wins Pickled Crumpet Toss Three Years Running",\
|
||||
"Skrell Scientist Discovers Abacus Can Be Used To Dry Towels",\
|
||||
"Survey: 'Cheese Louise' Voted Best Pizza Restaurant In Vir",\
|
||||
"Survey: 'Cheese Louise' Voted Best Pizza Restaurant In "+starsys_name,\
|
||||
"I Was Framed, jokes [affected_dest.name] artist",\
|
||||
"Mysterious Loud Rumbling Noises In [affected_dest.name] Found To Be Mysterious Loud Rumblings",\
|
||||
"Alien ambassador becomes lost on [affected_dest.name], refuses to ask for directions",\
|
||||
|
||||
@@ -8,7 +8,7 @@ var/list/weighted_mundaneevent_locations = list()
|
||||
var/distance = 0
|
||||
var/list/willing_to_buy = list()
|
||||
var/list/willing_to_sell = list()
|
||||
var/can_shuttle_here = 0 //one day crew from the Northern Star will be able to travel to this destination
|
||||
var/can_shuttle_here = 0 //one day crew from the station will be able to travel to this destination
|
||||
var/list/viable_random_events = list()
|
||||
var/list/temp_price_change[BIOMEDICAL]
|
||||
var/list/viable_mundane_events = list()
|
||||
|
||||
@@ -48,11 +48,12 @@
|
||||
|
||||
|
||||
/var/list/economic_species_modifier = list(
|
||||
/datum/species/human = 10,
|
||||
/datum/species/skrell = 12,
|
||||
/datum/species/teshari = 9, // Skrell sponsored,
|
||||
/datum/species/tajaran = 7,
|
||||
/datum/species/unathi = 7
|
||||
/datum/species/human = 10,
|
||||
/datum/species/skrell = 12,
|
||||
/datum/species/teshari = 9, // Skrell sponsored,
|
||||
/datum/species/tajaran = 7,
|
||||
/datum/species/unathi = 7,
|
||||
/datum/species/diona = 7
|
||||
)
|
||||
|
||||
//---- The following corporations are friendly with NanoTrasen and loosely enable trade and travel:
|
||||
@@ -87,7 +88,7 @@ var/global/economy_init = 0
|
||||
if(economy_init)
|
||||
return 2
|
||||
|
||||
news_network.CreateFeedChannel("The Vir Times", "Vir Times ExoNode - Northern Star", 1, 1)
|
||||
news_network.CreateFeedChannel("The "+starsys_name+" Times", starsys_name+" Times ExoNode - "+station_orig, 1, 1)
|
||||
news_network.CreateFeedChannel("The Gibson Gazette", "Editor Mike Hammers", 1, 1)
|
||||
|
||||
for(var/loc_type in typesof(/datum/trade_destination) - /datum/trade_destination)
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
D.money += winner_sum
|
||||
|
||||
var/datum/transaction/T = new()
|
||||
T.target_name = "The Vir Times Grand Slam -Stellar- Lottery"
|
||||
T.target_name = "The "+starsys_name+" Times Grand Slam -Stellar- Lottery"
|
||||
T.purpose = "Winner!"
|
||||
T.amount = winner_sum
|
||||
T.date = current_date_string
|
||||
@@ -24,10 +24,10 @@
|
||||
|
||||
/datum/event/money_lotto/announce()
|
||||
var/author = "[company_name] Editor"
|
||||
var/channel = "The Vir Times"
|
||||
var/channel = "The "+starsys_name+" Times"
|
||||
|
||||
var/body = "The Vir Times wishes to congratulate <b>[winner_name]</b> for recieving the Vir Stellar Slam Lottery, and receiving the out of this world sum of [winner_sum] credits!"
|
||||
var/body = "The "+starsys_name+" Times wishes to congratulate <b>[winner_name]</b> for recieving the "+starsys_name+" Stellar Slam Lottery, and receiving the out of this world sum of [winner_sum] credits!"
|
||||
if(!deposit_success)
|
||||
body += "<br>Unfortunately, we were unable to verify the account details provided, so we were unable to transfer the money. Send a cheque containing the sum of 5000 Thalers to ND 'Stellar Slam' office on the The Vir Times gateway containing updated details, and your winnings'll be re-sent within the month."
|
||||
body += "<br>Unfortunately, we were unable to verify the account details provided, so we were unable to transfer the money. Send a cheque containing the sum of 5000 Thalers to ND 'Stellar Slam' office on the The "+starsys_name+" Times gateway containing updated details, and your winnings'll be re-sent within the month."
|
||||
|
||||
news_network.SubmitArticle(body, author, channel, null, 1)
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
"You have (1) new message!",\
|
||||
"You have (2) new profile views!")
|
||||
if(3)
|
||||
sender = pick("Galactic Payments Association","Better Business Bureau","Vir E-Payments","NAnoTransen Finance Deparmtent","Luxury Replicas")
|
||||
sender = pick("Galactic Payments Association","Better Business Bureau",starsys_name+" E-Payments","NAnoTransen Finance Deparmtent","Luxury Replicas")
|
||||
message = pick("Luxury watches for Blowout sale prices!",\
|
||||
"Watches, Jewelry & Accessories, Bags & Wallets !",\
|
||||
"Deposit 100$ and get 300$ totally free!",\
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
just your hands, due to the integrated monitor and keyboard. Synthetic units can interface with it as well, just like most other machines."
|
||||
|
||||
description_fluff = "This is one of many nodes that make up the Exonet, which services trillions of devices across space. This particular node \
|
||||
is referred to as a terminal node, servicing the Northern Star.<br>\
|
||||
is referred to as a terminal node, servicing the "+station_orig+".<br>\
|
||||
<br>\
|
||||
In the beginning of humanity's ascend into space, the Exonet didn't exist. Instead, the Exonet is the evolution to a network called the Interplanetary \
|
||||
Internet (sometimes referred to as the InterPlaNet), which was conceived and developed due to the limitations of the terrestrial Internet, mainly because \
|
||||
@@ -30,7 +30,7 @@
|
||||
Exonets at the root node(s), and is typically arranged in a tree structure. The root node(s) are generally government-owned and are very secure \
|
||||
and resilient to failure.<br>\
|
||||
<br>\
|
||||
This node is privately owned and maintained by Nanotrasen, and allows the colonists of the Northern Star to have access to the Exonet."
|
||||
This node is privately owned and maintained by Nanotrasen, and allows the colonists of the "+station_orig+" to have access to the Exonet."
|
||||
|
||||
description_antag = "An EMP will disable this device for a short period of time. A longer downage can be achieved by turning it off, or rigging \
|
||||
the APC it uses to turn off remotely, such as with a signaler in the right wire."
|
||||
@@ -16,7 +16,7 @@
|
||||
else
|
||||
var/language_type = pick(/datum/language/human,/datum/language/diona,/datum/language/tajaran,/datum/language/unathi)
|
||||
var/datum/language/L = new language_type()
|
||||
var/team = pick("Brickburn Galaxy Trekers","Mars Rovers", "Qerrbalak Saints", "Moghes Rockets", "Ahdomai Lightening", "Vir Vixens", "Euphoric-Earth Alligators")
|
||||
var/team = pick("Brickburn Galaxy Trekers","Mars Rovers", "Qerrbalak Saints", "Moghes Rockets", "Ahdomai Lightening", starsys_name+" Vixens", "Euphoric-Earth Alligators")
|
||||
P.name = "[L.get_random_name(pick(MALE,FEMALE))], [year - rand(0,50)] [team]"
|
||||
P.card_icon = "spaceball_standard"
|
||||
P.back_icon = "card_back_spaceball"
|
||||
|
||||
@@ -140,11 +140,11 @@ note dizziness decrements automatically in the mob's Life() proc.
|
||||
//reset the pixel offsets to zero
|
||||
is_floating = 0
|
||||
|
||||
/atom/movable/proc/do_attack_animation(atom/A)
|
||||
/mob/proc/do_attack_animation(mob/M)
|
||||
|
||||
var/pixel_x_diff = 0
|
||||
var/pixel_y_diff = 0
|
||||
var/direction = get_dir(src, A)
|
||||
var/direction = get_dir(src, M)
|
||||
switch(direction)
|
||||
if(NORTH)
|
||||
pixel_y_diff = 8
|
||||
@@ -167,7 +167,7 @@ note dizziness decrements automatically in the mob's Life() proc.
|
||||
pixel_x_diff = -8
|
||||
pixel_y_diff = -8
|
||||
animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff, time = 2)
|
||||
animate(pixel_x = initial(pixel_x), pixel_y = initial(pixel_y), time = 2)
|
||||
animate(pixel_x = old_x, pixel_y = old_y, time = 2)
|
||||
|
||||
/mob/do_attack_animation(atom/A)
|
||||
..()
|
||||
|
||||
@@ -85,6 +85,7 @@
|
||||
dead_mob_list |= src
|
||||
|
||||
updateicon()
|
||||
handle_regular_hud_updates()
|
||||
|
||||
if(ticker && ticker.mode)
|
||||
ticker.mode.check_win()
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
var/time = say_timestamp()
|
||||
src << "[time] [message]"
|
||||
|
||||
/mob/proc/hear_radio(var/message, var/verb="says", var/datum/language/language=null, var/part_a, var/part_b, var/mob/speaker = null, var/hard_to_hear = 0, var/vname ="")
|
||||
/mob/proc/hear_radio(var/message, var/verb="says", var/datum/language/language=null, var/part_a, var/part_b, var/part_c, var/mob/speaker = null, var/hard_to_hear = 0, var/vname ="")
|
||||
|
||||
if(!client)
|
||||
return
|
||||
@@ -184,9 +184,9 @@
|
||||
|
||||
var/formatted
|
||||
if(language)
|
||||
formatted = language.format_message_radio(message, verb)
|
||||
formatted = "[language.format_message_radio(message, verb)][part_c]"
|
||||
else
|
||||
formatted = "[verb], <span class=\"body\">\"[message]\"</span>"
|
||||
formatted = "[verb], <span class=\"body\">\"[message]\"</span>[part_c]"
|
||||
if((sdisabilities & DEAF) || ear_deaf)
|
||||
if(prob(20))
|
||||
src << "<span class='warning'>You feel your headset vibrate but can hear nothing from it!</span>"
|
||||
|
||||
@@ -18,6 +18,7 @@ var/list/holder_mob_icon_cache = list()
|
||||
slot_r_hand_str = 'icons/mob/items/righthand_holder.dmi',
|
||||
)
|
||||
pixel_y = 8
|
||||
var/mob/living/held_mob
|
||||
|
||||
/obj/item/weapon/holder/New()
|
||||
..()
|
||||
@@ -29,21 +30,26 @@ var/list/holder_mob_icon_cache = list()
|
||||
|
||||
/obj/item/weapon/holder/process()
|
||||
update_state()
|
||||
drop_items()
|
||||
|
||||
/obj/item/weapon/holder/dropped()
|
||||
..()
|
||||
spawn(1)
|
||||
update_state()
|
||||
|
||||
/obj/item/weapon/proc/update_state()
|
||||
/obj/item/weapon/holder/proc/update_state()
|
||||
if(istype(loc,/turf) || !(contents.len))
|
||||
for(var/mob/M in contents)
|
||||
var/atom/movable/mob_container
|
||||
mob_container = M
|
||||
mob_container.forceMove(get_turf(src))
|
||||
M.reset_view()
|
||||
held_mob = null
|
||||
drop_items()
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/holder/proc/drop_items()
|
||||
if(contents.len > 1)
|
||||
for(var/atom/movable/M in contents)
|
||||
if(M == held_mob)
|
||||
continue
|
||||
M.forceMove(get_turf(src))
|
||||
|
||||
/obj/item/weapon/holder/GetID()
|
||||
for(var/mob/M in contents)
|
||||
var/obj/item/I = M.GetIdCard()
|
||||
@@ -109,6 +115,7 @@ var/list/holder_mob_icon_cache = list()
|
||||
return
|
||||
|
||||
var/obj/item/weapon/holder/H = new holder_type(get_turf(src))
|
||||
H.held_mob = src
|
||||
src.forceMove(H)
|
||||
grabber.put_in_hands(H)
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
..(speaker,message,speaker_mask)
|
||||
|
||||
/datum/language/cultcommon
|
||||
name = "Cult"
|
||||
name = LANGUAGE_CULT
|
||||
desc = "The chants of the occult, the incomprehensible."
|
||||
speech_verb = "intones"
|
||||
ask_verb = "intones"
|
||||
@@ -52,8 +52,8 @@
|
||||
"mah'weyh", "pleggh", "at", "e'ntrath", "tok-lyr", "rqa'nap", "g'lt-ulotf", "ta'gh", "fara'qha", "fel", "d'amar det", \
|
||||
"yu'gular", "faras", "desdae", "havas", "mithum", "javara", "umathar", "uf'kal", "thenar", "rash'tla", \
|
||||
"sektath", "mal'zua", "zasan", "therium", "viortia", "kla'atu", "barada", "nikt'o", "fwe'sh", "mah", "erl", "nyag", "r'ya", \
|
||||
"gal'h'rfikk", "harfrandid", "mud'gib", "fuu", "ma'jin", "dedo", "ol'btoh", "n'ath", "reth", "sh'yro", "eth", \
|
||||
"d'rekkathnor", "khari'd", "gual'te", "nikka", "nikt'o", "barada", "kla'atu", "barhah", "hra" ,"zar'garis")
|
||||
"gal'h'rfikk", "harfrandid", "mud'gib", "il", "fuu", "ma'jin", "dedo", "ol'btoh", "n'ath", "reth", "sh'yro", "eth", \
|
||||
"d'rekkathnor", "khari'd", "gual'te", "nikka", "nikt'o", "barada", "kla'atu", "barhah", "hra" ,"zar'garis", "spiri", "malum")
|
||||
|
||||
/datum/language/cult
|
||||
name = "Occult"
|
||||
|
||||
@@ -23,7 +23,16 @@
|
||||
colour = "soghun"
|
||||
key = "o"
|
||||
flags = WHITELISTED
|
||||
syllables = list("ss","ss","ss","ss","skak","seeki","resh","las","esi","kor","sh")
|
||||
space_chance = 40
|
||||
syllables = list(
|
||||
"za", "az", "ze", "ez", "zi", "iz", "zo", "oz", "zu", "uz", "zs", "sz",
|
||||
"ha", "ah", "he", "eh", "hi", "ih", "ho", "oh", "hu", "uh", "hs", "sh",
|
||||
"la", "al", "le", "el", "li", "il", "lo", "ol", "lu", "ul", "ls", "sl",
|
||||
"ka", "ak", "ke", "ek", "ki", "ik", "ko", "ok", "ku", "uk", "ks", "sk",
|
||||
"sa", "as", "se", "es", "si", "is", "so", "os", "su", "us", "ss", "ss",
|
||||
"ra", "ar", "re", "er", "ri", "ir", "ro", "or", "ru", "ur", "rs", "sr",
|
||||
"a", "a", "e", "e", "i", "i", "o", "o", "u", "u", "s", "s"
|
||||
)
|
||||
|
||||
/datum/language/unathi/get_random_name()
|
||||
|
||||
|
||||
@@ -31,8 +31,6 @@
|
||||
BITSET(hud_updateflag, STATUS_HUD)
|
||||
BITSET(hud_updateflag, LIFE_HUD)
|
||||
|
||||
handle_hud_list()
|
||||
|
||||
//Handle species-specific deaths.
|
||||
species.handle_death(src)
|
||||
animate_tail_stop()
|
||||
|
||||
@@ -285,9 +285,9 @@
|
||||
else if(temp.wounds.len > 0 || temp.open)
|
||||
if(temp.is_stump() && temp.parent_organ && organs_by_name[temp.parent_organ])
|
||||
var/obj/item/organ/external/parent = organs_by_name[temp.parent_organ]
|
||||
wound_flavor_text["[temp.name]"] = "<span class='warning'>[T.He] has [temp.get_wounds_desc()] on [T.His] [parent.name].</span><br>"
|
||||
wound_flavor_text["[temp.name]"] = "<span class='warning'>[T.He] has [temp.get_wounds_desc()] on [T.his] [parent.name].</span><br>"
|
||||
else
|
||||
wound_flavor_text["[temp.name]"] = "<span class='warning'>[T.He] has [temp.get_wounds_desc()] on [T.His] [temp.name].</span><br>"
|
||||
wound_flavor_text["[temp.name]"] = "<span class='warning'>[T.He] has [temp.get_wounds_desc()] on [T.his] [temp.name].</span><br>"
|
||||
if(temp.status & ORGAN_BLEEDING)
|
||||
is_bleeding["[temp.name]"] = "<span class='danger'>[T.His] [temp.name] is bleeding!</span><br>"
|
||||
else
|
||||
|
||||
@@ -150,21 +150,21 @@
|
||||
update |= temp.take_damage(b_loss * 0.05, f_loss * 0.05, used_weapon = weapon_message)
|
||||
if(update) UpdateDamageIcon()
|
||||
|
||||
/mob/living/carbon/human/proc/implant_loyalty(mob/living/carbon/human/M, override = FALSE) // Won't override by default.
|
||||
/mob/living/carbon/human/proc/implant_loyalty(override = FALSE) // Won't override by default.
|
||||
if(!config.use_loyalty_implants && !override) return // Nuh-uh.
|
||||
|
||||
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(M)
|
||||
L.imp_in = M
|
||||
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(src)
|
||||
L.imp_in = src
|
||||
L.implanted = 1
|
||||
var/obj/item/organ/external/affected = M.organs_by_name[BP_HEAD]
|
||||
var/obj/item/organ/external/affected = src.organs_by_name[BP_HEAD]
|
||||
affected.implants += L
|
||||
L.part = affected
|
||||
L.implanted(src)
|
||||
|
||||
/mob/living/carbon/human/proc/is_loyalty_implanted(mob/living/carbon/human/M)
|
||||
for(var/L in M.contents)
|
||||
/mob/living/carbon/human/proc/is_loyalty_implanted()
|
||||
for(var/L in src.contents)
|
||||
if(istype(L, /obj/item/weapon/implant/loyalty))
|
||||
for(var/obj/item/organ/external/O in M.organs)
|
||||
for(var/obj/item/organ/external/O in src.organs)
|
||||
if(L in O.implants)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -17,6 +17,10 @@
|
||||
/mob/living/carbon/human/diona/New(var/new_loc)
|
||||
..(new_loc, "Diona")
|
||||
|
||||
/mob/living/carbon/human/teshari/New(var/new_loc)
|
||||
h_style = "Teshari Default"
|
||||
..(new_loc, "Teshari")
|
||||
|
||||
/mob/living/carbon/human/machine/New(var/new_loc)
|
||||
h_style = "blue IPC screen"
|
||||
..(new_loc, "Machine")
|
||||
|
||||
@@ -267,8 +267,6 @@ This saves us from having to call add_fingerprint() any time something is put in
|
||||
update_inv_shoes(redraw_mob)
|
||||
if(slot_wear_suit)
|
||||
src.wear_suit = W
|
||||
if((wear_suit.flags_inv & HIDESHOES) || (w_uniform.flags_inv & HIDESHOES))
|
||||
update_inv_shoes(0)
|
||||
W.equipped(src, slot)
|
||||
update_inv_wear_suit(redraw_mob)
|
||||
if(slot_w_uniform)
|
||||
|
||||
@@ -150,6 +150,10 @@
|
||||
|
||||
/mob/living/carbon/human/handle_disabilities()
|
||||
..()
|
||||
|
||||
if(stat != CONSCIOUS) //Let's not worry about tourettes if you're not conscious.
|
||||
return
|
||||
|
||||
//Vision
|
||||
if(species.vision_organ)
|
||||
if(internal_organs_by_name[species.vision_organ]) // Vision organs cut out? Permablind.
|
||||
@@ -165,7 +169,6 @@
|
||||
blinded = 0
|
||||
eye_blurry = 0
|
||||
|
||||
|
||||
if (disabilities & EPILEPSY)
|
||||
if ((prob(1) && paralysis < 1))
|
||||
src << "\red You have a seizure!"
|
||||
@@ -198,27 +201,26 @@
|
||||
if (prob(10))
|
||||
stuttering = max(10, stuttering)
|
||||
|
||||
if(stat != 2)
|
||||
var/rn = rand(0, 200)
|
||||
if(getBrainLoss() >= 5)
|
||||
if(0 <= rn && rn <= 3)
|
||||
custom_pain("Your head feels numb and painful.")
|
||||
if(getBrainLoss() >= 15)
|
||||
if(4 <= rn && rn <= 6) if(eye_blurry <= 0)
|
||||
src << "<span class='warning'>It becomes hard to see for some reason.</span>"
|
||||
eye_blurry = 10
|
||||
if(getBrainLoss() >= 35)
|
||||
if(7 <= rn && rn <= 9) if(get_active_hand())
|
||||
src << "<span class='danger'>Your hand won't respond properly, you drop what you're holding!</span>"
|
||||
drop_item()
|
||||
if(getBrainLoss() >= 45)
|
||||
if(10 <= rn && rn <= 12)
|
||||
if(prob(50))
|
||||
src << "<span class='danger'>You suddenly black out!</span>"
|
||||
Paralyse(10)
|
||||
else if(!lying)
|
||||
src << "<span class='danger'>Your legs won't respond properly, you fall down!</span>"
|
||||
Weaken(10)
|
||||
var/rn = rand(0, 200)
|
||||
if(getBrainLoss() >= 5)
|
||||
if(0 <= rn && rn <= 3)
|
||||
custom_pain("Your head feels numb and painful.")
|
||||
if(getBrainLoss() >= 15)
|
||||
if(4 <= rn && rn <= 6) if(eye_blurry <= 0)
|
||||
src << "<span class='warning'>It becomes hard to see for some reason.</span>"
|
||||
eye_blurry = 10
|
||||
if(getBrainLoss() >= 35)
|
||||
if(7 <= rn && rn <= 9) if(get_active_hand())
|
||||
src << "<span class='danger'>Your hand won't respond properly, you drop what you're holding!</span>"
|
||||
drop_item()
|
||||
if(getBrainLoss() >= 45)
|
||||
if(10 <= rn && rn <= 12)
|
||||
if(prob(50))
|
||||
src << "<span class='danger'>You suddenly black out!</span>"
|
||||
Paralyse(10)
|
||||
else if(!lying)
|
||||
src << "<span class='danger'>Your legs won't respond properly, you fall down!</span>"
|
||||
Weaken(10)
|
||||
|
||||
|
||||
|
||||
@@ -1555,7 +1557,7 @@
|
||||
/mob/living/carbon/human/proc/handle_hud_list()
|
||||
if (BITTEST(hud_updateflag, HEALTH_HUD))
|
||||
var/image/holder = hud_list[HEALTH_HUD]
|
||||
if(stat == 2)
|
||||
if(stat == DEAD)
|
||||
holder.icon_state = "hudhealth-100" // X_X
|
||||
else
|
||||
var/percentage_health = RoundHealth((health-config.health_threshold_crit)/(maxHealth-config.health_threshold_crit)*100)
|
||||
@@ -1579,7 +1581,7 @@
|
||||
|
||||
var/image/holder = hud_list[STATUS_HUD]
|
||||
var/image/holder2 = hud_list[STATUS_HUD_OOC]
|
||||
if(stat == 2)
|
||||
if(stat == DEAD)
|
||||
holder.icon_state = "huddead"
|
||||
holder2.icon_state = "huddead"
|
||||
else if(status_flags & XENO_HOST)
|
||||
|
||||
@@ -13,22 +13,22 @@
|
||||
// Handle things that are part of this interface but not removing/replacing a given item.
|
||||
if("pockets")
|
||||
visible_message("<span class='danger'>\The [user] is trying to empty \the [src]'s pockets!</span>")
|
||||
if(do_after(user,HUMAN_STRIP_DELAY))
|
||||
if(do_after(user,HUMAN_STRIP_DELAY,src))
|
||||
empty_pockets(user)
|
||||
return
|
||||
if("splints")
|
||||
visible_message("<span class='danger'>\The [user] is trying to remove \the [src]'s splints!</span>")
|
||||
if(do_after(user,HUMAN_STRIP_DELAY))
|
||||
if(do_after(user,HUMAN_STRIP_DELAY,src))
|
||||
remove_splints(user)
|
||||
return
|
||||
if("sensors")
|
||||
visible_message("<span class='danger'>\The [user] is trying to set \the [src]'s sensors!</span>")
|
||||
if(do_after(user,HUMAN_STRIP_DELAY))
|
||||
if(do_after(user,HUMAN_STRIP_DELAY,src))
|
||||
toggle_sensors(user)
|
||||
return
|
||||
if("internals")
|
||||
visible_message("<span class='danger'>\The [usr] is trying to set \the [src]'s internals!</span>")
|
||||
if(do_after(user,HUMAN_STRIP_DELAY))
|
||||
if(do_after(user,HUMAN_STRIP_DELAY,src))
|
||||
toggle_internals(user)
|
||||
return
|
||||
if("tie")
|
||||
@@ -40,7 +40,7 @@
|
||||
return
|
||||
visible_message("<span class='danger'>\The [usr] is trying to remove \the [src]'s [A.name]!</span>")
|
||||
|
||||
if(!do_after(user,HUMAN_STRIP_DELAY))
|
||||
if(!do_after(user,HUMAN_STRIP_DELAY,src))
|
||||
return
|
||||
|
||||
if(!A || suit.loc != src || !(A in suit.accessories))
|
||||
@@ -74,7 +74,7 @@
|
||||
else
|
||||
visible_message("<span class='danger'>\The [user] is trying to put \a [held] on \the [src]!</span>")
|
||||
|
||||
if(!do_after(user,HUMAN_STRIP_DELAY))
|
||||
if(!do_after(user,HUMAN_STRIP_DELAY,src))
|
||||
return
|
||||
|
||||
if(!stripping && user.get_active_hand() != held)
|
||||
|
||||
@@ -499,6 +499,9 @@ var/global/list/damage_icon_parts = list()
|
||||
else
|
||||
overlays_standing[UNIFORM_LAYER] = null
|
||||
|
||||
//hiding/revealing shoes if necessary
|
||||
update_inv_shoes(0)
|
||||
|
||||
if(update_icons)
|
||||
update_icons()
|
||||
|
||||
@@ -556,13 +559,15 @@ var/global/list/damage_icon_parts = list()
|
||||
|
||||
/mob/living/carbon/human/update_inv_glasses(var/update_icons=1)
|
||||
if(glasses)
|
||||
|
||||
var/image/standing
|
||||
if(glasses.icon_override)
|
||||
overlays_standing[GLASSES_LAYER] = image("icon" = glasses.icon_override, "icon_state" = "[glasses.icon_state]")
|
||||
standing = image("icon" = glasses.icon_override, "icon_state" = "[glasses.icon_state]")
|
||||
else if(glasses.sprite_sheets && glasses.sprite_sheets[species.get_bodytype(src)])
|
||||
overlays_standing[GLASSES_LAYER]= image("icon" = glasses.sprite_sheets[species.get_bodytype(src)], "icon_state" = "[glasses.icon_state]")
|
||||
standing = image("icon" = glasses.sprite_sheets[species.get_bodytype(src)], "icon_state" = "[glasses.icon_state]")
|
||||
else
|
||||
overlays_standing[GLASSES_LAYER]= image("icon" = 'icons/mob/eyes.dmi', "icon_state" = "[glasses.icon_state]")
|
||||
standing = image("icon" = 'icons/mob/eyes.dmi', "icon_state" = "[glasses.icon_state]")
|
||||
standing.color = glasses.color
|
||||
overlays_standing[GLASSES_LAYER] = standing
|
||||
|
||||
else
|
||||
overlays_standing[GLASSES_LAYER] = null
|
||||
@@ -575,29 +580,37 @@ var/global/list/damage_icon_parts = list()
|
||||
return
|
||||
|
||||
if(l_ear || r_ear)
|
||||
var/image/both = image("icon" = null)
|
||||
|
||||
if(l_ear)
|
||||
|
||||
var/image/standing
|
||||
var/t_type = l_ear.icon_state
|
||||
if(l_ear.icon_override)
|
||||
t_type = "[t_type]_l"
|
||||
overlays_standing[EARS_LAYER] = image("icon" = l_ear.icon_override, "icon_state" = "[t_type]")
|
||||
standing = image("icon" = l_ear.icon_override, "icon_state" = "[t_type]")
|
||||
else if(l_ear.sprite_sheets && l_ear.sprite_sheets[species.get_bodytype(src)])
|
||||
t_type = "[t_type]_l"
|
||||
overlays_standing[EARS_LAYER] = image("icon" = l_ear.sprite_sheets[species.get_bodytype(src)], "icon_state" = "[t_type]")
|
||||
standing = image("icon" = l_ear.sprite_sheets[species.get_bodytype(src)], "icon_state" = "[t_type]")
|
||||
else
|
||||
overlays_standing[EARS_LAYER] = image("icon" = 'icons/mob/ears.dmi', "icon_state" = "[t_type]")
|
||||
|
||||
standing = image("icon" = 'icons/mob/ears.dmi', "icon_state" = "[t_type]")
|
||||
standing.color = l_ear.color
|
||||
both.overlays += standing
|
||||
|
||||
if(r_ear)
|
||||
|
||||
var/image/standing
|
||||
var/t_type = r_ear.icon_state
|
||||
if(r_ear.icon_override)
|
||||
t_type = "[t_type]_r"
|
||||
overlays_standing[EARS_LAYER] = image("icon" = r_ear.icon_override, "icon_state" = "[t_type]")
|
||||
standing = image("icon" = r_ear.icon_override, "icon_state" = "[t_type]")
|
||||
else if(r_ear.sprite_sheets && r_ear.sprite_sheets[species.get_bodytype(src)])
|
||||
t_type = "[t_type]_r"
|
||||
overlays_standing[EARS_LAYER] = image("icon" = r_ear.sprite_sheets[species.get_bodytype(src)], "icon_state" = "[t_type]")
|
||||
standing = image("icon" = r_ear.sprite_sheets[species.get_bodytype(src)], "icon_state" = "[t_type]")
|
||||
else
|
||||
overlays_standing[EARS_LAYER] = image("icon" = 'icons/mob/ears.dmi', "icon_state" = "[t_type]")
|
||||
standing = image("icon" = 'icons/mob/ears.dmi', "icon_state" = "[t_type]")
|
||||
standing.color = r_ear.color
|
||||
both.overlays += standing
|
||||
|
||||
overlays_standing[EARS_LAYER] = both
|
||||
|
||||
else
|
||||
overlays_standing[EARS_LAYER] = null
|
||||
@@ -764,10 +777,12 @@ var/global/list/damage_icon_parts = list()
|
||||
else
|
||||
overlays_standing[SUIT_LAYER] = null
|
||||
update_tail_showing(0)
|
||||
update_inv_shoes(0)
|
||||
|
||||
update_collar(0)
|
||||
|
||||
//hide/show shoes if necessary
|
||||
update_inv_shoes(0)
|
||||
|
||||
if(update_icons) update_icons()
|
||||
|
||||
/mob/living/carbon/human/update_inv_pockets(var/update_icons=1)
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
speech_buffer.Add(lowertext(html_decode(message)))
|
||||
..()
|
||||
|
||||
/mob/living/carbon/slime/hear_radio(var/message, var/verb="says", var/datum/language/language=null, var/part_a, var/part_b, var/mob/speaker = null, var/hard_to_hear = 0, var/vname ="")
|
||||
/mob/living/carbon/slime/hear_radio(var/message, var/verb="says", var/datum/language/language=null, var/part_a, var/part_b, var/part_c, var/mob/speaker = null, var/hard_to_hear = 0, var/vname ="")
|
||||
if (speaker in Friends)
|
||||
speech_buffer = list()
|
||||
speech_buffer.Add(speaker)
|
||||
|
||||
@@ -53,8 +53,7 @@
|
||||
|
||||
update_canmove()
|
||||
|
||||
if(client)
|
||||
handle_regular_hud_updates()
|
||||
handle_regular_hud_updates()
|
||||
|
||||
/mob/living/proc/handle_breathing()
|
||||
return
|
||||
|
||||
@@ -52,7 +52,7 @@ var/list/ai_verbs_hidden = list( // For why this exists, refer to https://xkcd.c
|
||||
density = 1
|
||||
status_flags = CANSTUN|CANPARALYSE|CANPUSH
|
||||
shouldnt_see = list(/obj/effect/rune)
|
||||
var/list/network = list("Northern Star")
|
||||
var/list/network = list(station_short)
|
||||
var/obj/machinery/camera/camera = null
|
||||
var/list/connected_robots = list()
|
||||
var/aiRestorePowerRoutine = 0
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
idle_power_usage = 20
|
||||
active_power_usage = 5000
|
||||
|
||||
var/fabricator_tag = "Northern Star Upper Level"
|
||||
var/fabricator_tag = station_short+" Upper Level"
|
||||
var/drone_progress = 0
|
||||
var/produce_drones = 1
|
||||
var/time_last_drone = 500
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
/obj/machinery/drone_fabricator/derelict
|
||||
name = "construction drone fabricator"
|
||||
fabricator_tag = "Northern Star Depths"
|
||||
fabricator_tag = station_short+" Depths"
|
||||
drone_type = /mob/living/silicon/robot/drone/construction
|
||||
|
||||
/obj/machinery/drone_fabricator/New()
|
||||
|
||||
@@ -727,7 +727,7 @@
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_animal/parrot/hear_radio(var/message, var/verb="says", var/datum/language/language=null, var/part_a, var/part_b, var/mob/speaker = null, var/hard_to_hear = 0)
|
||||
/mob/living/simple_animal/parrot/hear_radio(var/message, var/verb="says", var/datum/language/language=null, var/part_a, var/part_b, var/part_c, var/mob/speaker = null, var/hard_to_hear = 0)
|
||||
if(prob(50))
|
||||
parrot_hear("[pick(available_channels)] [message]")
|
||||
..(message,verb,language,part_a,part_b,speaker,hard_to_hear)
|
||||
|
||||
@@ -510,7 +510,7 @@
|
||||
/mob/new_player/hear_say(var/message, var/verb = "says", var/datum/language/language = null, var/alt_name = "",var/italics = 0, var/mob/speaker = null)
|
||||
return
|
||||
|
||||
/mob/new_player/hear_radio(var/message, var/verb="says", var/datum/language/language=null, var/part_a, var/part_b, var/mob/speaker = null, var/hard_to_hear = 0)
|
||||
/mob/new_player/hear_radio()
|
||||
return
|
||||
|
||||
/mob/new_player/MayRespawn()
|
||||
|
||||
@@ -175,9 +175,11 @@ nanoui is used to open and update nano browser uis
|
||||
* @return /list config data
|
||||
*/
|
||||
/datum/nanoui/proc/get_config_data()
|
||||
var/name = "[src_object]"
|
||||
name = sanitize(name)
|
||||
var/list/config_data = list(
|
||||
"title" = title,
|
||||
"srcObject" = list("name" = "[src_object]"),
|
||||
"srcObject" = list("name" = name),
|
||||
"stateKey" = state_key,
|
||||
"status" = status,
|
||||
"autoUpdateLayout" = auto_update_layout,
|
||||
@@ -345,18 +347,20 @@ nanoui is used to open and update nano browser uis
|
||||
|
||||
var/template_data_json = "{}" // An empty JSON object
|
||||
if (templates.len > 0)
|
||||
template_data_json = json_encode(templates)
|
||||
template_data_json = strip_improper(json_encode(templates))
|
||||
|
||||
var/list/send_data = get_send_data(initial_data)
|
||||
var/initial_data_json = replacetext(replacetext(json_encode(send_data), """, "&#34;"), "'", "'")
|
||||
initial_data_json = strip_improper(initial_data_json);
|
||||
|
||||
var/url_parameters_json = json_encode(list("src" = "\ref[src]"))
|
||||
|
||||
return {"
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||
<head>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<script type='text/javascript'>
|
||||
function receiveUpdateData(jsonString)
|
||||
{
|
||||
@@ -366,6 +370,10 @@ nanoui is used to open and update nano browser uis
|
||||
{
|
||||
NanoStateManager.receiveUpdateData(jsonString);
|
||||
}
|
||||
//else
|
||||
//{
|
||||
// alert('browser.recieveUpdateData failed due to jQuery or NanoStateManager being unavailiable.');
|
||||
//}
|
||||
}
|
||||
</script>
|
||||
[head_content]
|
||||
@@ -458,8 +466,8 @@ nanoui is used to open and update nano browser uis
|
||||
|
||||
var/list/send_data = get_send_data(data)
|
||||
|
||||
//user << list2json(data) // used for debugging
|
||||
user << output(list2params(list(json_encode(send_data))),"[window_id].browser:receiveUpdateData")
|
||||
//user << list2json_usecache(send_data) // used for debugging //NANO DEBUG HOOK
|
||||
user << output(list2params(list(strip_improper(json_encode(send_data)))),"[window_id].browser:receiveUpdateData")
|
||||
|
||||
/**
|
||||
* This Topic() proc is called whenever a user clicks on a link within a Nano UI
|
||||
|
||||
@@ -349,6 +349,7 @@
|
||||
|
||||
//Sync the organ's damage with its wounds
|
||||
src.update_damages()
|
||||
src.update_wounds()
|
||||
owner.updatehealth()
|
||||
|
||||
var/result = update_icon()
|
||||
@@ -602,6 +603,9 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
/obj/item/organ/external/proc/update_wounds()
|
||||
|
||||
if((status & ORGAN_ROBOT)) //Robotic limbs don't heal or get worse.
|
||||
for(var/datum/wound/W in wounds)
|
||||
if(W.damage <= 0)
|
||||
wounds -= W
|
||||
return
|
||||
|
||||
for(var/datum/wound/W in wounds)
|
||||
@@ -1129,17 +1133,23 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
if(brute_dam)
|
||||
switch(brute_dam)
|
||||
if(0 to 20)
|
||||
. += " some dents"
|
||||
. += "some dents"
|
||||
if(21 to INFINITY)
|
||||
. += pick(" a lot of dents"," severe denting")
|
||||
. += pick("a lot of dents","severe denting")
|
||||
if(brute_dam && burn_dam)
|
||||
. += " and"
|
||||
. += " and "
|
||||
if(burn_dam)
|
||||
switch(burn_dam)
|
||||
if(0 to 20)
|
||||
. += " some burns"
|
||||
. += "some burns"
|
||||
if(21 to INFINITY)
|
||||
. += pick(" a lot of burns"," severe melting")
|
||||
. += pick("a lot of burns","severe melting")
|
||||
if(open)
|
||||
if(brute_dam || burn_dam)
|
||||
. += " and an open panel"
|
||||
else
|
||||
. += "an open panel"
|
||||
|
||||
return
|
||||
|
||||
var/list/wound_descriptors = list()
|
||||
|
||||
@@ -13,6 +13,8 @@
|
||||
var/damage = 0
|
||||
// ticks of bleeding left.
|
||||
var/bleed_timer = 0
|
||||
// Above this amount wounds you will need to treat the wound to stop bleeding, regardless of bleed_timer
|
||||
var/bleed_threshold = 30
|
||||
// amount of damage the current wound type requires(less means we need to apply the next healing stage)
|
||||
var/min_damage = 0
|
||||
|
||||
@@ -187,7 +189,7 @@
|
||||
return 0 //incompatible damage types
|
||||
|
||||
if (src.amount > 1)
|
||||
return 0
|
||||
return 0//merged wounds cannot be worsened.
|
||||
|
||||
//with 1.5*, a shallow cut will be able to carry at most 30 damage,
|
||||
//37.5 for a deep cut
|
||||
@@ -208,8 +210,8 @@
|
||||
if (bandaged||clamped)
|
||||
return 0
|
||||
|
||||
if (wound_damage() <= 30 && bleed_timer <= 0)
|
||||
return 0 //Bleed timer has run out. Wounds with more than 30 damage don't stop bleeding on their own.
|
||||
if (bleed_timer <= 0 && wound_damage() <= bleed_threshold)
|
||||
return 0 //Bleed timer has run out. Once a wound is big enough though, you'll need a bandage to stop it
|
||||
|
||||
return 1
|
||||
|
||||
@@ -264,8 +266,9 @@
|
||||
return null //no wound
|
||||
|
||||
/** CUTS **/
|
||||
/datum/wound/cut/bleeding()
|
||||
return ..() || wound_damage() >= 5
|
||||
/datum/wound/cut
|
||||
bleed_threshold = 5
|
||||
damage_type = CUT
|
||||
|
||||
/datum/wound/cut/small
|
||||
// link wound descriptions to amounts of damage
|
||||
@@ -273,40 +276,34 @@
|
||||
// The major cut types have the max_bleeding_stage set to the clot stage (which is accordingly given the "blood soaked" descriptor).
|
||||
max_bleeding_stage = 3
|
||||
stages = list("ugly ripped cut" = 20, "ripped cut" = 10, "cut" = 5, "healing cut" = 2, "small scab" = 0)
|
||||
damage_type = CUT
|
||||
|
||||
/datum/wound/cut/deep
|
||||
max_bleeding_stage = 3
|
||||
stages = list("ugly deep ripped cut" = 25, "deep ripped cut" = 20, "deep cut" = 15, "clotted cut" = 8, "scab" = 2, "fresh skin" = 0)
|
||||
damage_type = CUT
|
||||
|
||||
/datum/wound/cut/flesh
|
||||
max_bleeding_stage = 4
|
||||
stages = list("ugly ripped flesh wound" = 35, "ugly flesh wound" = 30, "flesh wound" = 25, "blood soaked clot" = 15, "large scab" = 5, "fresh skin" = 0)
|
||||
damage_type = CUT
|
||||
|
||||
/datum/wound/cut/gaping
|
||||
max_bleeding_stage = 3
|
||||
stages = list("gaping wound" = 50, "large blood soaked clot" = 25, "blood soaked clot" = 15, "small angry scar" = 5, "small straight scar" = 0)
|
||||
damage_type = CUT
|
||||
|
||||
/datum/wound/cut/gaping_big
|
||||
max_bleeding_stage = 3
|
||||
stages = list("big gaping wound" = 60, "healing gaping wound" = 40, "large blood soaked clot" = 25, "large angry scar" = 10, "large straight scar" = 0)
|
||||
damage_type = CUT
|
||||
|
||||
datum/wound/cut/massive
|
||||
max_bleeding_stage = 3
|
||||
stages = list("massive wound" = 70, "massive healing wound" = 50, "massive blood soaked clot" = 25, "massive angry scar" = 10, "massive jagged scar" = 0)
|
||||
damage_type = CUT
|
||||
|
||||
/** PUNCTURES **/
|
||||
/datum/wound/puncture
|
||||
bleed_threshold = 5
|
||||
damage_type = PIERCE
|
||||
|
||||
/datum/wound/puncture/can_worsen(damage_type, damage)
|
||||
return 0
|
||||
/datum/wound/puncture/can_merge(var/datum/wound/other)
|
||||
return 0
|
||||
/datum/wound/puncture/bleeding()
|
||||
return ..() || wound_damage() >= 5
|
||||
return 0 //puncture wounds cannot be enlargened
|
||||
|
||||
/datum/wound/puncture/small
|
||||
max_bleeding_stage = 2
|
||||
@@ -334,41 +331,36 @@ datum/wound/puncture/massive
|
||||
damage_type = PIERCE
|
||||
|
||||
/** BRUISES **/
|
||||
/datum/wound/bruise/bleeding()
|
||||
return ..() || wound_damage() >= 20
|
||||
|
||||
/datum/wound/bruise
|
||||
stages = list("monumental bruise" = 80, "huge bruise" = 50, "large bruise" = 30,
|
||||
"moderate bruise" = 20, "small bruise" = 10, "tiny bruise" = 5)
|
||||
bleed_threshold = 20
|
||||
max_bleeding_stage = 3 //only large bruise and above can bleed.
|
||||
autoheal_cutoff = 30
|
||||
damage_type = BRUISE
|
||||
|
||||
/** BURNS **/
|
||||
/datum/wound/burn
|
||||
damage_type = BURN
|
||||
max_bleeding_stage = 0
|
||||
|
||||
/datum/wound/burn/bleeding()
|
||||
return 0
|
||||
|
||||
/datum/wound/burn/moderate
|
||||
stages = list("ripped burn" = 10, "moderate burn" = 5, "healing moderate burn" = 2, "fresh skin" = 0)
|
||||
damage_type = BURN
|
||||
|
||||
/datum/wound/burn/large
|
||||
stages = list("ripped large burn" = 20, "large burn" = 15, "healing large burn" = 5, "fresh skin" = 0)
|
||||
damage_type = BURN
|
||||
|
||||
/datum/wound/burn/severe
|
||||
stages = list("ripped severe burn" = 35, "severe burn" = 30, "healing severe burn" = 10, "burn scar" = 0)
|
||||
damage_type = BURN
|
||||
|
||||
/datum/wound/burn/deep
|
||||
stages = list("ripped deep burn" = 45, "deep burn" = 40, "healing deep burn" = 15, "large burn scar" = 0)
|
||||
damage_type = BURN
|
||||
|
||||
/datum/wound/burn/carbonised
|
||||
stages = list("carbonised area" = 50, "healing carbonised area" = 20, "massive burn scar" = 0)
|
||||
damage_type = BURN
|
||||
|
||||
/** INTERNAL BLEEDING **/
|
||||
/datum/wound/internal_bleeding
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
kill_count = 15 //if the shell hasn't hit anything after travelling this far it just explodes.
|
||||
var/flash_range = 0
|
||||
var/brightness = 7
|
||||
var/light_duration = 5
|
||||
var/light_colour = "#ffffff"
|
||||
|
||||
/obj/item/projectile/energy/flash/on_impact(var/atom/A)
|
||||
var/turf/T = flash_range? src.loc : get_turf(A)
|
||||
@@ -29,16 +29,25 @@
|
||||
playsound(src, 'sound/effects/snap.ogg', 50, 1)
|
||||
src.visible_message("<span class='warning'>\The [src] explodes in a bright flash!</span>")
|
||||
|
||||
new /obj/effect/decal/cleanable/ash(src.loc) //always use src.loc so that ash doesn't end up inside windows
|
||||
new /obj/effect/effect/sparks(T)
|
||||
new /obj/effect/effect/smoke/illumination(T, brightness=max(flash_range*2, brightness), lifetime=light_duration)
|
||||
var/datum/effect/effect/system/spark_spread/sparks = PoolOrNew(/datum/effect/effect/system/spark_spread)
|
||||
sparks.set_up(2, 1, T)
|
||||
sparks.start()
|
||||
|
||||
new /obj/effect/decal/cleanable/ash(src.loc) //always use src.loc so that ash doesn't end up inside windows
|
||||
new /obj/effect/effect/smoke/illumination(T, 5, brightness, brightness, light_colour)
|
||||
//blinds people like the flash round, but can also be used for temporary illumination
|
||||
/obj/item/projectile/energy/flash/flare
|
||||
damage = 10
|
||||
flash_range = 1
|
||||
brightness = 9 //similar to a flare
|
||||
light_duration = 200
|
||||
brightness = 15
|
||||
|
||||
/obj/item/projectile/energy/flash/flare/on_impact(var/atom/A)
|
||||
light_colour = pick("#e58775", "#ffffff", "#90ff90", "#a09030")
|
||||
|
||||
..() //initial flash
|
||||
|
||||
//residual illumination
|
||||
new /obj/effect/effect/smoke/illumination(src.loc, rand(190,240) SECONDS, range=8, power=3, color=light_colour) //same lighting power as flare
|
||||
|
||||
/obj/item/projectile/energy/electrode
|
||||
name = "electrode"
|
||||
|
||||
@@ -375,6 +375,24 @@
|
||||
/datum/reagent/sugar/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
M.nutrition += removed * 3
|
||||
|
||||
var/effective_dose = dose
|
||||
if(issmall(M))
|
||||
effective_dose *= 2
|
||||
|
||||
if(alien == IS_UNATHI)
|
||||
if(effective_dose < 2)
|
||||
if(effective_dose == metabolism * 2 || prob(5))
|
||||
M.emote("yawn")
|
||||
else if(effective_dose < 5)
|
||||
M.eye_blurry = max(M.eye_blurry, 10)
|
||||
else if(effective_dose < 20)
|
||||
if(prob(50))
|
||||
M.Weaken(2)
|
||||
M.drowsyness = max(M.drowsyness, 20)
|
||||
else
|
||||
M.sleeping = max(M.sleeping, 20)
|
||||
M.drowsyness = max(M.drowsyness, 60)
|
||||
|
||||
/datum/reagent/sulfur
|
||||
name = "Sulfur"
|
||||
id = "sulfur"
|
||||
|
||||
@@ -17,6 +17,8 @@
|
||||
affect_ingest(M, alien, removed)
|
||||
|
||||
/datum/reagent/nutriment/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
switch(alien)
|
||||
if(IS_UNATHI) removed *= 0.5
|
||||
if(issmall(M)) removed *= 2 // Small bodymass, more effect from lower volume.
|
||||
M.heal_organ_damage(0.5 * removed, 0)
|
||||
M.nutrition += nutriment_factor * removed // For hunger and fatness
|
||||
@@ -42,6 +44,8 @@
|
||||
if(IS_TESHARI)
|
||||
..(M, alien, removed*1.2) // Teshari get a bit more nutrition from meat.
|
||||
return
|
||||
if(IS_UNATHI)
|
||||
..(M, alien, removed*2.25) //Unathi get most of their nutrition from meat.
|
||||
..()
|
||||
|
||||
/datum/reagent/nutriment/protein/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
@@ -62,6 +66,27 @@
|
||||
nutriment_factor = 10
|
||||
color = "#FFFF00"
|
||||
|
||||
/datum/reagent/honey/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
..()
|
||||
|
||||
var/effective_dose = dose
|
||||
if(issmall(M))
|
||||
effective_dose *= 2
|
||||
|
||||
if(alien == IS_UNATHI)
|
||||
if(effective_dose < 2)
|
||||
if(effective_dose == metabolism * 2 || prob(5))
|
||||
M.emote("yawn")
|
||||
else if(effective_dose < 5)
|
||||
M.eye_blurry = max(M.eye_blurry, 10)
|
||||
else if(effective_dose < 20)
|
||||
if(prob(50))
|
||||
M.Weaken(2)
|
||||
M.drowsyness = max(M.drowsyness, 20)
|
||||
else
|
||||
M.sleeping = max(M.sleeping, 20)
|
||||
M.drowsyness = max(M.drowsyness, 60)
|
||||
|
||||
/datum/reagent/nutriment/flour
|
||||
name = "flour"
|
||||
id = "flour"
|
||||
@@ -396,6 +421,27 @@
|
||||
glass_name = "glass of grape juice"
|
||||
glass_desc = "It's grrrrrape!"
|
||||
|
||||
/datum/reagent/juice/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
..()
|
||||
|
||||
var/effective_dose = dose/2
|
||||
if(issmall(M))
|
||||
effective_dose *= 2
|
||||
|
||||
if(alien == IS_UNATHI)
|
||||
if(effective_dose < 2)
|
||||
if(effective_dose == metabolism * 2 || prob(5))
|
||||
M.emote("yawn")
|
||||
else if(effective_dose < 5)
|
||||
M.eye_blurry = max(M.eye_blurry, 10)
|
||||
else if(effective_dose < 20)
|
||||
if(prob(50))
|
||||
M.Weaken(2)
|
||||
M.drowsyness = max(M.drowsyness, 20)
|
||||
else
|
||||
M.sleeping = max(M.sleeping, 20)
|
||||
M.drowsyness = max(M.drowsyness, 60)
|
||||
|
||||
/datum/reagent/drink/juice/lemon
|
||||
name = "Lemon Juice"
|
||||
id = "lemonjuice"
|
||||
@@ -765,6 +811,27 @@
|
||||
glass_desc = "Glorious brainfreezing mixture."
|
||||
glass_center_of_mass = list("x"=16, "y"=7)
|
||||
|
||||
/datum/reagent/milkshake/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
..()
|
||||
|
||||
var/effective_dose = dose/2
|
||||
if(issmall(M))
|
||||
effective_dose *= 2
|
||||
|
||||
if(alien == IS_UNATHI)
|
||||
if(effective_dose < 2)
|
||||
if(effective_dose == metabolism * 2 || prob(5))
|
||||
M.emote("yawn")
|
||||
else if(effective_dose < 5)
|
||||
M.eye_blurry = max(M.eye_blurry, 10)
|
||||
else if(effective_dose < 20)
|
||||
if(prob(50))
|
||||
M.Weaken(2)
|
||||
M.drowsyness = max(M.drowsyness, 20)
|
||||
else
|
||||
M.sleeping = max(M.sleeping, 20)
|
||||
M.drowsyness = max(M.drowsyness, 60)
|
||||
|
||||
/datum/reagent/drink/rewriter
|
||||
name = "Rewriter"
|
||||
description = "The secret of the sanctuary of the Libarian..."
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
name = "blood packs bags"
|
||||
desc = "This box contains blood packs."
|
||||
icon_state = "sterile"
|
||||
New()
|
||||
|
||||
/obj/item/weapon/storage/box/bloodpacks/New()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/blood/empty(src)
|
||||
new /obj/item/weapon/reagent_containers/blood/empty(src)
|
||||
@@ -21,22 +22,22 @@
|
||||
|
||||
var/blood_type = null
|
||||
|
||||
New()
|
||||
..()
|
||||
if(blood_type != null)
|
||||
name = "BloodPack [blood_type]"
|
||||
reagents.add_reagent("blood", 200, list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=blood_type,"resistances"=null,"trace_chem"=null))
|
||||
update_icon()
|
||||
|
||||
on_reagent_change()
|
||||
/obj/item/weapon/reagent_containers/blood/New()
|
||||
..()
|
||||
if(blood_type != null)
|
||||
name = "BloodPack [blood_type]"
|
||||
reagents.add_reagent("blood", 200, list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=blood_type,"resistances"=null,"trace_chem"=null))
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/blood/on_reagent_change()
|
||||
update_icon()
|
||||
var/percent = round((reagents.total_volume / volume) * 100)
|
||||
switch(percent)
|
||||
if(0 to 9) icon_state = "empty"
|
||||
if(10 to 50) icon_state = "half"
|
||||
if(51 to INFINITY) icon_state = "full"
|
||||
|
||||
/obj/item/weapon/reagent_containers/blood/update_icon()
|
||||
var/percent = round((reagents.total_volume / volume) * 100)
|
||||
switch(percent)
|
||||
if(0 to 9) icon_state = "empty"
|
||||
if(10 to 50) icon_state = "half"
|
||||
if(51 to INFINITY) icon_state = "full"
|
||||
|
||||
/obj/item/weapon/reagent_containers/blood/APlus
|
||||
blood_type = "A+"
|
||||
|
||||
@@ -12,88 +12,88 @@
|
||||
slot_flags = SLOT_EARS
|
||||
volume = 5
|
||||
|
||||
afterattack(var/obj/target, var/mob/user, var/flag)
|
||||
if(!target.reagents || !flag) return
|
||||
/obj/item/weapon/reagent_containers/dropper/afterattack(var/obj/target, var/mob/user, var/flag)
|
||||
if(!target.reagents || !flag) return
|
||||
|
||||
if(reagents.total_volume)
|
||||
if(reagents.total_volume)
|
||||
|
||||
if(!target.reagents.get_free_space())
|
||||
user << "<span class='notice'>[target] is full.</span>"
|
||||
if(!target.reagents.get_free_space())
|
||||
user << "<span class='notice'>[target] is full.</span>"
|
||||
return
|
||||
|
||||
if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/clothing/mask/smokable/cigarette)) //You can inject humans and food but you cant remove the shit.
|
||||
user << "<span class='notice'>You cannot directly fill this object.</span>"
|
||||
return
|
||||
|
||||
var/trans = 0
|
||||
|
||||
if(ismob(target))
|
||||
|
||||
var/time = 20 //2/3rds the time of a syringe
|
||||
user.visible_message("<span class='warning'>[user] is trying to squirt something into [target]'s eyes!</span>")
|
||||
|
||||
if(!do_mob(user, target, time))
|
||||
return
|
||||
|
||||
if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/clothing/mask/smokable/cigarette)) //You can inject humans and food but you cant remove the shit.
|
||||
user << "<span class='notice'>You cannot directly fill this object.</span>"
|
||||
return
|
||||
if(istype(target, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/victim = target
|
||||
|
||||
var/trans = 0
|
||||
var/obj/item/safe_thing = null
|
||||
if(victim.wear_mask)
|
||||
if (victim.wear_mask.body_parts_covered & EYES)
|
||||
safe_thing = victim.wear_mask
|
||||
if(victim.head)
|
||||
if (victim.head.body_parts_covered & EYES)
|
||||
safe_thing = victim.head
|
||||
if(victim.glasses)
|
||||
if (!safe_thing)
|
||||
safe_thing = victim.glasses
|
||||
|
||||
if(ismob(target))
|
||||
|
||||
var/time = 20 //2/3rds the time of a syringe
|
||||
user.visible_message("<span class='warning'>[user] is trying to squirt something into [target]'s eyes!</span>")
|
||||
|
||||
if(!do_mob(user, target, time))
|
||||
if(safe_thing)
|
||||
trans = reagents.trans_to_obj(safe_thing, amount_per_transfer_from_this)
|
||||
user.visible_message("<span class='warning'>[user] tries to squirt something into [target]'s eyes, but fails!</span>", "<span class='notice'>You transfer [trans] units of the solution.</span>")
|
||||
return
|
||||
|
||||
if(istype(target, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/victim = target
|
||||
var/mob/living/M = target
|
||||
var/contained = reagentlist()
|
||||
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been squirted with [name] by [user.name] ([user.ckey]). Reagents: [contained]</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [name] to squirt [M.name] ([M.key]). Reagents: [contained]</font>")
|
||||
msg_admin_attack("[user.name] ([user.ckey]) squirted [M.name] ([M.key]) with [name]. Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
|
||||
|
||||
var/obj/item/safe_thing = null
|
||||
if(victim.wear_mask)
|
||||
if (victim.wear_mask.body_parts_covered & EYES)
|
||||
safe_thing = victim.wear_mask
|
||||
if(victim.head)
|
||||
if (victim.head.body_parts_covered & EYES)
|
||||
safe_thing = victim.head
|
||||
if(victim.glasses)
|
||||
if (!safe_thing)
|
||||
safe_thing = victim.glasses
|
||||
|
||||
if(safe_thing)
|
||||
trans = reagents.trans_to_obj(safe_thing, amount_per_transfer_from_this)
|
||||
user.visible_message("<span class='warning'>[user] tries to squirt something into [target]'s eyes, but fails!</span>", "<span class='notice'>You transfer [trans] units of the solution.</span>")
|
||||
return
|
||||
|
||||
var/mob/living/M = target
|
||||
var/contained = reagentlist()
|
||||
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been squirted with [name] by [user.name] ([user.ckey]). Reagents: [contained]</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [name] to squirt [M.name] ([M.key]). Reagents: [contained]</font>")
|
||||
msg_admin_attack("[user.name] ([user.ckey]) squirted [M.name] ([M.key]) with [name]. Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
|
||||
|
||||
trans = reagents.trans_to_mob(target, reagents.total_volume, CHEM_INGEST)
|
||||
user.visible_message("<span class='warning'>[user] squirts something into [target]'s eyes!</span>", "<span class='notice'>You transfer [trans] units of the solution.</span>")
|
||||
trans = reagents.trans_to_mob(target, reagents.total_volume, CHEM_INGEST)
|
||||
user.visible_message("<span class='warning'>[user] squirts something into [target]'s eyes!</span>", "<span class='notice'>You transfer [trans] units of the solution.</span>")
|
||||
|
||||
|
||||
return
|
||||
return
|
||||
|
||||
else
|
||||
trans = reagents.trans_to(target, amount_per_transfer_from_this) //sprinkling reagents on generic non-mobs
|
||||
user << "<span class='notice'>You transfer [trans] units of the solution.</span>"
|
||||
|
||||
else // Taking from something
|
||||
|
||||
if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers))
|
||||
user << "<span class='notice'>You cannot directly remove reagents from [target].</span>"
|
||||
return
|
||||
|
||||
if(!target.reagents || !target.reagents.total_volume)
|
||||
user << "<span class='notice'>[target] is empty.</span>"
|
||||
return
|
||||
|
||||
var/trans = target.reagents.trans_to_obj(src, amount_per_transfer_from_this)
|
||||
|
||||
user << "<span class='notice'>You fill the dropper with [trans] units of the solution.</span>"
|
||||
|
||||
return
|
||||
|
||||
on_reagent_change()
|
||||
update_icon()
|
||||
|
||||
update_icon()
|
||||
if(reagents.total_volume)
|
||||
icon_state = "dropper1"
|
||||
else
|
||||
icon_state = "dropper0"
|
||||
trans = reagents.trans_to(target, amount_per_transfer_from_this) //sprinkling reagents on generic non-mobs
|
||||
user << "<span class='notice'>You transfer [trans] units of the solution.</span>"
|
||||
|
||||
else // Taking from something
|
||||
|
||||
if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers))
|
||||
user << "<span class='notice'>You cannot directly remove reagents from [target].</span>"
|
||||
return
|
||||
|
||||
if(!target.reagents || !target.reagents.total_volume)
|
||||
user << "<span class='notice'>[target] is empty.</span>"
|
||||
return
|
||||
|
||||
var/trans = target.reagents.trans_to_obj(src, amount_per_transfer_from_this)
|
||||
|
||||
user << "<span class='notice'>You fill the dropper with [trans] units of the solution.</span>"
|
||||
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/dropper/on_reagent_change()
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/dropper/update_icon()
|
||||
if(reagents.total_volume)
|
||||
icon_state = "dropper1"
|
||||
else
|
||||
icon_state = "dropper0"
|
||||
|
||||
/obj/item/weapon/reagent_containers/dropper/industrial
|
||||
name = "Industrial Dropper"
|
||||
|
||||
@@ -10,43 +10,48 @@
|
||||
desc = "Cola. in space."
|
||||
icon_state = "cola"
|
||||
center_of_mass = list("x"=16, "y"=10)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("cola", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/cola/New()
|
||||
..()
|
||||
reagents.add_reagent("cola", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle
|
||||
name = "bottled water"
|
||||
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"=15, "y"=8)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("water", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle/New()
|
||||
..()
|
||||
reagents.add_reagent("water", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind
|
||||
name = "\improper Space Mountain Wind"
|
||||
desc = "Blows right through you like a space wind."
|
||||
icon_state = "space_mountain_wind"
|
||||
center_of_mass = list("x"=16, "y"=10)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("spacemountainwind", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind/New()
|
||||
..()
|
||||
reagents.add_reagent("spacemountainwind", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/thirteenloko
|
||||
name = "\improper Thirteen Loko"
|
||||
desc = "The CMO has advised crew members that consumption of Thirteen Loko may result in seizures, blindness, drunkeness, or even death. Please Drink Responsibly."
|
||||
icon_state = "thirteen_loko"
|
||||
center_of_mass = list("x"=16, "y"=8)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("thirteenloko", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/thirteenloko/New()
|
||||
..()
|
||||
reagents.add_reagent("thirteenloko", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb
|
||||
name = "\improper Dr. Gibb"
|
||||
desc = "A delicious mixture of 42 different flavors."
|
||||
icon_state = "dr_gibb"
|
||||
center_of_mass = list("x"=16, "y"=10)
|
||||
New()
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb/New()
|
||||
..()
|
||||
reagents.add_reagent("dr_gibb", 30)
|
||||
|
||||
@@ -55,60 +60,67 @@
|
||||
desc = "The taste of a star in liquid form. And, a bit of tuna...?"
|
||||
icon_state = "starkist"
|
||||
center_of_mass = list("x"=16, "y"=10)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("brownstar", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/starkist/New()
|
||||
..()
|
||||
reagents.add_reagent("brownstar", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/space_up
|
||||
name = "\improper Space-Up"
|
||||
desc = "Tastes like a hull breach in your mouth."
|
||||
icon_state = "space-up"
|
||||
center_of_mass = list("x"=16, "y"=10)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("space_up", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/space_up/New()
|
||||
..()
|
||||
reagents.add_reagent("space_up", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/lemon_lime
|
||||
name = "\improper Lemon-Lime"
|
||||
desc = "You wanted ORANGE. It gave you Lemon Lime."
|
||||
icon_state = "lemon-lime"
|
||||
center_of_mass = list("x"=16, "y"=10)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("lemon_lime", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/lemon_lime/New()
|
||||
..()
|
||||
reagents.add_reagent("lemon_lime", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea
|
||||
name = "\improper Vrisk Serket Iced Tea"
|
||||
desc = "That sweet, refreshing southern earthy flavor. That's where it's from, right? South Earth?"
|
||||
icon_state = "ice_tea_can"
|
||||
center_of_mass = list("x"=16, "y"=10)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("icetea", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea/New()
|
||||
..()
|
||||
reagents.add_reagent("icetea", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice
|
||||
name = "\improper Grapel Juice"
|
||||
desc = "500 pages of rules of how to appropriately enter into a combat with this juice!"
|
||||
icon_state = "purple_can"
|
||||
center_of_mass = list("x"=16, "y"=10)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("grapejuice", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice/New()
|
||||
..()
|
||||
reagents.add_reagent("grapejuice", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/tonic
|
||||
name = "\improper T-Borg's Tonic Water"
|
||||
desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away."
|
||||
icon_state = "tonic"
|
||||
center_of_mass = list("x"=16, "y"=10)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("tonic", 50)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/tonic/New()
|
||||
..()
|
||||
reagents.add_reagent("tonic", 50)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/sodawater
|
||||
name = "soda water"
|
||||
desc = "A can of soda water. Still water's more refreshing cousin."
|
||||
icon_state = "sodawater"
|
||||
center_of_mass = list("x"=16, "y"=10)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("sodawater", 50)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/sodawater/New()
|
||||
..()
|
||||
reagents.add_reagent("sodawater", 50)
|
||||
|
||||
@@ -15,147 +15,152 @@
|
||||
center_of_mass = list("x"=16, "y"=6)
|
||||
volume = 50
|
||||
|
||||
attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
|
||||
/obj/item/weapon/reagent_containers/food/condiment/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/attack_self(var/mob/user as mob)
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/attack(var/mob/M as mob, var/mob/user as mob, var/def_zone)
|
||||
if(standard_feed_mob(user, M))
|
||||
return
|
||||
|
||||
attack_self(var/mob/user as mob)
|
||||
/obj/item/weapon/reagent_containers/food/condiment/afterattack(var/obj/target, var/mob/user, var/flag)
|
||||
if(standard_dispenser_refill(user, target))
|
||||
return
|
||||
if(standard_pour_into(user, target))
|
||||
return
|
||||
|
||||
attack(var/mob/M as mob, var/mob/user as mob, var/def_zone)
|
||||
if(standard_feed_mob(user, M))
|
||||
if(istype(target, /obj/item/weapon/reagent_containers/food/snacks)) // These are not opencontainers but we can transfer to them
|
||||
if(!reagents || !reagents.total_volume)
|
||||
user << "<span class='notice'>There is no condiment left in \the [src].</span>"
|
||||
return
|
||||
|
||||
afterattack(var/obj/target, var/mob/user, var/flag)
|
||||
if(standard_dispenser_refill(user, target))
|
||||
return
|
||||
if(standard_pour_into(user, target))
|
||||
if(!target.reagents.get_free_space())
|
||||
user << "<span class='notice'>You can't add more condiment to \the [target].</span>"
|
||||
return
|
||||
|
||||
if(istype(target, /obj/item/weapon/reagent_containers/food/snacks)) // These are not opencontainers but we can transfer to them
|
||||
if(!reagents || !reagents.total_volume)
|
||||
user << "<span class='notice'>There is no condiment left in \the [src].</span>"
|
||||
return
|
||||
var/trans = reagents.trans_to_obj(target, amount_per_transfer_from_this)
|
||||
user << "<span class='notice'>You add [trans] units of the condiment to \the [target].</span>"
|
||||
else
|
||||
..()
|
||||
|
||||
if(!target.reagents.get_free_space())
|
||||
user << "<span class='notice'>You can't add more condiment to \the [target].</span>"
|
||||
return
|
||||
/obj/item/weapon/reagent_containers/food/condiment/feed_sound(var/mob/user)
|
||||
playsound(user.loc, 'sound/items/drink.ogg', rand(10, 50), 1)
|
||||
|
||||
var/trans = reagents.trans_to_obj(target, amount_per_transfer_from_this)
|
||||
user << "<span class='notice'>You add [trans] units of the condiment to \the [target].</span>"
|
||||
else
|
||||
..()
|
||||
/obj/item/weapon/reagent_containers/food/condiment/self_feed_message(var/mob/user)
|
||||
user << "<span class='notice'>You swallow some of contents of \the [src].</span>"
|
||||
|
||||
feed_sound(var/mob/user)
|
||||
playsound(user.loc, 'sound/items/drink.ogg', rand(10, 50), 1)
|
||||
|
||||
self_feed_message(var/mob/user)
|
||||
user << "<span class='notice'>You swallow some of contents of \the [src].</span>"
|
||||
|
||||
on_reagent_change()
|
||||
if(reagents.reagent_list.len > 0)
|
||||
switch(reagents.get_master_reagent_id())
|
||||
if("ketchup")
|
||||
name = "Ketchup"
|
||||
desc = "You feel more American already."
|
||||
icon_state = "ketchup"
|
||||
center_of_mass = list("x"=16, "y"=6)
|
||||
if("capsaicin")
|
||||
name = "Hotsauce"
|
||||
desc = "You can almost TASTE the stomach ulcers now!"
|
||||
icon_state = "hotsauce"
|
||||
center_of_mass = list("x"=16, "y"=6)
|
||||
if("enzyme")
|
||||
name = "Universal Enzyme"
|
||||
desc = "Used in cooking various dishes."
|
||||
icon_state = "enzyme"
|
||||
center_of_mass = list("x"=16, "y"=6)
|
||||
if("soysauce")
|
||||
name = "Soy Sauce"
|
||||
desc = "A salty soy-based flavoring."
|
||||
icon_state = "soysauce"
|
||||
center_of_mass = list("x"=16, "y"=6)
|
||||
if("frostoil")
|
||||
name = "Coldsauce"
|
||||
desc = "Leaves the tongue numb in its passage."
|
||||
icon_state = "coldsauce"
|
||||
center_of_mass = list("x"=16, "y"=6)
|
||||
if("sodiumchloride")
|
||||
name = "Salt Shaker"
|
||||
desc = "Salt. From space oceans, presumably."
|
||||
icon_state = "saltshaker"
|
||||
center_of_mass = list("x"=16, "y"=10)
|
||||
if("blackpepper")
|
||||
name = "Pepper Mill"
|
||||
desc = "Often used to flavor food or make people sneeze."
|
||||
icon_state = "peppermillsmall"
|
||||
center_of_mass = list("x"=16, "y"=10)
|
||||
if("cornoil")
|
||||
name = "Corn Oil"
|
||||
desc = "A delicious oil used in cooking. Made from corn."
|
||||
icon_state = "oliveoil"
|
||||
center_of_mass = list("x"=16, "y"=6)
|
||||
if("sugar")
|
||||
name = "Sugar"
|
||||
desc = "Tastey space sugar!"
|
||||
center_of_mass = list("x"=16, "y"=6)
|
||||
/obj/item/weapon/reagent_containers/food/condiment/on_reagent_change()
|
||||
if(reagents.reagent_list.len > 0)
|
||||
switch(reagents.get_master_reagent_id())
|
||||
if("ketchup")
|
||||
name = "Ketchup"
|
||||
desc = "You feel more American already."
|
||||
icon_state = "ketchup"
|
||||
center_of_mass = list("x"=16, "y"=6)
|
||||
if("capsaicin")
|
||||
name = "Hotsauce"
|
||||
desc = "You can almost TASTE the stomach ulcers now!"
|
||||
icon_state = "hotsauce"
|
||||
center_of_mass = list("x"=16, "y"=6)
|
||||
if("enzyme")
|
||||
name = "Universal Enzyme"
|
||||
desc = "Used in cooking various dishes."
|
||||
icon_state = "enzyme"
|
||||
center_of_mass = list("x"=16, "y"=6)
|
||||
if("soysauce")
|
||||
name = "Soy Sauce"
|
||||
desc = "A salty soy-based flavoring."
|
||||
icon_state = "soysauce"
|
||||
center_of_mass = list("x"=16, "y"=6)
|
||||
if("frostoil")
|
||||
name = "Coldsauce"
|
||||
desc = "Leaves the tongue numb in its passage."
|
||||
icon_state = "coldsauce"
|
||||
center_of_mass = list("x"=16, "y"=6)
|
||||
if("sodiumchloride")
|
||||
name = "Salt Shaker"
|
||||
desc = "Salt. From space oceans, presumably."
|
||||
icon_state = "saltshaker"
|
||||
center_of_mass = list("x"=16, "y"=10)
|
||||
if("blackpepper")
|
||||
name = "Pepper Mill"
|
||||
desc = "Often used to flavor food or make people sneeze."
|
||||
icon_state = "peppermillsmall"
|
||||
center_of_mass = list("x"=16, "y"=10)
|
||||
if("cornoil")
|
||||
name = "Corn Oil"
|
||||
desc = "A delicious oil used in cooking. Made from corn."
|
||||
icon_state = "oliveoil"
|
||||
center_of_mass = list("x"=16, "y"=6)
|
||||
if("sugar")
|
||||
name = "Sugar"
|
||||
desc = "Tastey space sugar!"
|
||||
center_of_mass = list("x"=16, "y"=6)
|
||||
else
|
||||
name = "Misc Condiment Bottle"
|
||||
if (reagents.reagent_list.len==1)
|
||||
desc = "Looks like it is [reagents.get_master_reagent_name()], but you are not sure."
|
||||
else
|
||||
name = "Misc Condiment Bottle"
|
||||
if (reagents.reagent_list.len==1)
|
||||
desc = "Looks like it is [reagents.get_master_reagent_name()], but you are not sure."
|
||||
else
|
||||
desc = "A mixture of various condiments. [reagents.get_master_reagent_name()] is one of them."
|
||||
icon_state = "mixedcondiments"
|
||||
center_of_mass = list("x"=16, "y"=6)
|
||||
else
|
||||
icon_state = "emptycondiment"
|
||||
name = "Condiment Bottle"
|
||||
desc = "An empty condiment bottle."
|
||||
center_of_mass = list("x"=16, "y"=6)
|
||||
return
|
||||
desc = "A mixture of various condiments. [reagents.get_master_reagent_name()] is one of them."
|
||||
icon_state = "mixedcondiments"
|
||||
center_of_mass = list("x"=16, "y"=6)
|
||||
else
|
||||
icon_state = "emptycondiment"
|
||||
name = "Condiment Bottle"
|
||||
desc = "An empty condiment bottle."
|
||||
center_of_mass = list("x"=16, "y"=6)
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/enzyme
|
||||
name = "Universal Enzyme"
|
||||
desc = "Used in cooking various dishes."
|
||||
icon_state = "enzyme"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("enzyme", 50)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/sugar
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("sugar", 50)
|
||||
/obj/item/weapon/reagent_containers/food/condiment/enzyme/New()
|
||||
..()
|
||||
reagents.add_reagent("enzyme", 50)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/sugar/New()
|
||||
..()
|
||||
reagents.add_reagent("sugar", 50)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small
|
||||
possible_transfer_amounts = list(1,20)
|
||||
amount_per_transfer_from_this = 1
|
||||
volume = 20
|
||||
center_of_mass = list()
|
||||
on_reagent_change() return
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/on_reagent_change()
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker //Seperate from above since it's a small shaker rather then
|
||||
name = "salt shaker" // a large one.
|
||||
desc = "Salt. From space oceans, presumably."
|
||||
icon_state = "saltshakersmall"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("sodiumchloride", 20)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker/New()
|
||||
..()
|
||||
reagents.add_reagent("sodiumchloride", 20)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/peppermill
|
||||
name = "pepper mill"
|
||||
desc = "Often used to flavor food or make people sneeze."
|
||||
icon_state = "peppermillsmall"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("blackpepper", 20)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/peppermill/New()
|
||||
..()
|
||||
reagents.add_reagent("blackpepper", 20)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/sugar
|
||||
name = "sugar"
|
||||
desc = "Sweetness in a bottle"
|
||||
icon_state = "sugarsmall"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("sugar", 20)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/sugar/New()
|
||||
..()
|
||||
reagents.add_reagent("sugar", 20)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/flour
|
||||
name = "flour sack"
|
||||
@@ -163,9 +168,12 @@
|
||||
icon = 'icons/obj/food.dmi'
|
||||
icon_state = "flour"
|
||||
item_state = "flour"
|
||||
on_reagent_change() return
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("flour", 30)
|
||||
src.pixel_x = rand(-10.0, 10)
|
||||
src.pixel_y = rand(-10.0, 10)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/flour/on_reagent_change()
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/flour/New()
|
||||
..()
|
||||
reagents.add_reagent("flour", 30)
|
||||
src.pixel_x = rand(-10.0, 10)
|
||||
src.pixel_y = rand(-10.0, 10)
|
||||
|
||||
@@ -10,70 +10,70 @@
|
||||
amount_per_transfer_from_this = 5
|
||||
volume = 50
|
||||
|
||||
on_reagent_change()
|
||||
/obj/item/weapon/reagent_containers/food/drinks/on_reagent_change()
|
||||
return
|
||||
|
||||
attack_self(mob/user as mob)
|
||||
if(!is_open_container())
|
||||
open(user)
|
||||
/obj/item/weapon/reagent_containers/food/drinks/attack_self(mob/user as mob)
|
||||
if(!is_open_container())
|
||||
open(user)
|
||||
|
||||
proc/open(mob/user)
|
||||
playsound(loc,'sound/effects/canopen.ogg', rand(10,50), 1)
|
||||
user << "<span class='notice'>You open [src] with an audible pop!</span>"
|
||||
flags |= OPENCONTAINER
|
||||
/obj/item/weapon/reagent_containers/food/drinks/proc/open(mob/user)
|
||||
playsound(loc,'sound/effects/canopen.ogg', rand(10,50), 1)
|
||||
user << "<span class='notice'>You open [src] with an audible pop!</span>"
|
||||
flags |= OPENCONTAINER
|
||||
|
||||
attack(mob/M as mob, mob/user as mob, def_zone)
|
||||
if(standard_feed_mob(user, M))
|
||||
return
|
||||
|
||||
return 0
|
||||
/obj/item/weapon/reagent_containers/food/drinks/attack(mob/M as mob, mob/user as mob, def_zone)
|
||||
if(standard_feed_mob(user, M))
|
||||
return
|
||||
|
||||
afterattack(obj/target, mob/user, proximity)
|
||||
if(!proximity) return
|
||||
return 0
|
||||
|
||||
if(standard_dispenser_refill(user, target))
|
||||
return
|
||||
if(standard_pour_into(user, target))
|
||||
return
|
||||
return ..()
|
||||
/obj/item/weapon/reagent_containers/food/drinks/afterattack(obj/target, mob/user, proximity)
|
||||
if(!proximity) return
|
||||
|
||||
standard_feed_mob(var/mob/user, var/mob/target)
|
||||
if(!is_open_container())
|
||||
user << "<span class='notice'>You need to open [src]!</span>"
|
||||
return 1
|
||||
return ..()
|
||||
if(standard_dispenser_refill(user, target))
|
||||
return
|
||||
if(standard_pour_into(user, target))
|
||||
return
|
||||
return ..()
|
||||
|
||||
standard_dispenser_refill(var/mob/user, var/obj/structure/reagent_dispensers/target)
|
||||
if(!is_open_container())
|
||||
user << "<span class='notice'>You need to open [src]!</span>"
|
||||
return 1
|
||||
return ..()
|
||||
/obj/item/weapon/reagent_containers/food/drinks/standard_feed_mob(var/mob/user, var/mob/target)
|
||||
if(!is_open_container())
|
||||
user << "<span class='notice'>You need to open [src]!</span>"
|
||||
return 1
|
||||
return ..()
|
||||
|
||||
standard_pour_into(var/mob/user, var/atom/target)
|
||||
if(!is_open_container())
|
||||
user << "<span class='notice'>You need to open [src]!</span>"
|
||||
return 1
|
||||
return ..()
|
||||
/obj/item/weapon/reagent_containers/food/drinks/standard_dispenser_refill(var/mob/user, var/obj/structure/reagent_dispensers/target)
|
||||
if(!is_open_container())
|
||||
user << "<span class='notice'>You need to open [src]!</span>"
|
||||
return 1
|
||||
return ..()
|
||||
|
||||
self_feed_message(var/mob/user)
|
||||
user << "<span class='notice'>You swallow a gulp from \the [src].</span>"
|
||||
/obj/item/weapon/reagent_containers/food/drinks/standard_pour_into(var/mob/user, var/atom/target)
|
||||
if(!is_open_container())
|
||||
user << "<span class='notice'>You need to open [src]!</span>"
|
||||
return 1
|
||||
return ..()
|
||||
|
||||
feed_sound(var/mob/user)
|
||||
playsound(user.loc, 'sound/items/drink.ogg', rand(10, 50), 1)
|
||||
/obj/item/weapon/reagent_containers/food/drinks/self_feed_message(var/mob/user)
|
||||
user << "<span class='notice'>You swallow a gulp from \the [src].</span>"
|
||||
|
||||
examine(mob/user)
|
||||
if(!..(user, 1))
|
||||
return
|
||||
if(!reagents || reagents.total_volume == 0)
|
||||
user << "<span class='notice'>\The [src] is empty!</span>"
|
||||
else if (reagents.total_volume <= volume * 0.25)
|
||||
user << "<span class='notice'>\The [src] is almost empty!</span>"
|
||||
else if (reagents.total_volume <= volume * 0.66)
|
||||
user << "<span class='notice'>\The [src] is half full!</span>"
|
||||
else if (reagents.total_volume <= volume * 0.90)
|
||||
user << "<span class='notice'>\The [src] is almost full!</span>"
|
||||
else
|
||||
user << "<span class='notice'>\The [src] is full!</span>"
|
||||
/obj/item/weapon/reagent_containers/food/drinks/feed_sound(var/mob/user)
|
||||
playsound(user.loc, 'sound/items/drink.ogg', rand(10, 50), 1)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/examine(mob/user)
|
||||
if(!..(user, 1))
|
||||
return
|
||||
if(!reagents || reagents.total_volume == 0)
|
||||
user << "<span class='notice'>\The [src] is empty!</span>"
|
||||
else if (reagents.total_volume <= volume * 0.25)
|
||||
user << "<span class='notice'>\The [src] is almost empty!</span>"
|
||||
else if (reagents.total_volume <= volume * 0.66)
|
||||
user << "<span class='notice'>\The [src] is half full!</span>"
|
||||
else if (reagents.total_volume <= volume * 0.90)
|
||||
user << "<span class='notice'>\The [src] is almost full!</span>"
|
||||
else
|
||||
user << "<span class='notice'>\The [src] is full!</span>"
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -108,9 +108,10 @@
|
||||
icon_state = "milk"
|
||||
item_state = "carton"
|
||||
center_of_mass = list("x"=16, "y"=9)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("milk", 50)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/milk/New()
|
||||
..()
|
||||
reagents.add_reagent("milk", 50)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/soymilk
|
||||
name = "SoyMilk"
|
||||
@@ -118,18 +119,18 @@
|
||||
icon_state = "soymilk"
|
||||
item_state = "carton"
|
||||
center_of_mass = list("x"=16, "y"=9)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("soymilk", 50)
|
||||
/obj/item/weapon/reagent_containers/food/drinks/soymilk/New()
|
||||
..()
|
||||
reagents.add_reagent("soymilk", 50)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/coffee
|
||||
name = "Robust Coffee"
|
||||
desc = "Careful, the beverage you're about to enjoy is extremely hot."
|
||||
icon_state = "coffee"
|
||||
center_of_mass = list("x"=15, "y"=10)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("coffee", 30)
|
||||
/obj/item/weapon/reagent_containers/food/drinks/coffee/New()
|
||||
..()
|
||||
reagents.add_reagent("coffee", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/tea
|
||||
name = "Duke Purple Tea"
|
||||
@@ -137,18 +138,19 @@
|
||||
icon_state = "teacup"
|
||||
item_state = "coffee"
|
||||
center_of_mass = list("x"=16, "y"=14)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("tea", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/tea/New()
|
||||
..()
|
||||
reagents.add_reagent("tea", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/ice
|
||||
name = "Ice Cup"
|
||||
desc = "Careful, cold ice, do not chew."
|
||||
icon_state = "coffee"
|
||||
center_of_mass = list("x"=15, "y"=10)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("ice", 30)
|
||||
/obj/item/weapon/reagent_containers/food/drinks/ice/New()
|
||||
..()
|
||||
reagents.add_reagent("ice", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/h_chocolate
|
||||
name = "Dutch Hot Coco"
|
||||
@@ -156,19 +158,19 @@
|
||||
icon_state = "hot_coco"
|
||||
item_state = "coffee"
|
||||
center_of_mass = list("x"=15, "y"=13)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("hot_coco", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/h_chocolate/New()
|
||||
..()
|
||||
reagents.add_reagent("hot_coco", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/dry_ramen
|
||||
name = "Cup Ramen"
|
||||
desc = "Just add 10ml water, self heats! A taste that reminds you of your school years."
|
||||
icon_state = "ramen"
|
||||
center_of_mass = list("x"=16, "y"=11)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("dry_ramen", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/dry_ramen/New()
|
||||
..()
|
||||
reagents.add_reagent("dry_ramen", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/sillycup
|
||||
name = "Paper Cup"
|
||||
@@ -177,13 +179,14 @@
|
||||
possible_transfer_amounts = null
|
||||
volume = 10
|
||||
center_of_mass = list("x"=16, "y"=12)
|
||||
New()
|
||||
..()
|
||||
on_reagent_change()
|
||||
if(reagents.total_volume)
|
||||
icon_state = "water_cup"
|
||||
else
|
||||
icon_state = "water_cup_e"
|
||||
/obj/item/weapon/reagent_containers/food/drinks/sillycup/New()
|
||||
..()
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/sillycup/on_reagent_change()
|
||||
if(reagents.total_volume)
|
||||
icon_state = "water_cup"
|
||||
else
|
||||
icon_state = "water_cup_e"
|
||||
|
||||
|
||||
//////////////////////////drinkingglass and shaker//
|
||||
|
||||
@@ -193,7 +193,6 @@
|
||||
|
||||
//Keeping this here for now, I'll ask if I should keep it here.
|
||||
/obj/item/weapon/broken_bottle
|
||||
|
||||
name = "Broken Bottle"
|
||||
desc = "A bottle with a sharp broken bottom."
|
||||
icon = 'icons/obj/drinks.dmi'
|
||||
@@ -212,204 +211,225 @@
|
||||
playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1)
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/gin
|
||||
name = "Griffeater Gin"
|
||||
desc = "A bottle of high quality gin, produced in the New London Space Station."
|
||||
icon_state = "ginbottle"
|
||||
center_of_mass = list("x"=16, "y"=4)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("gin", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/gin/New()
|
||||
..()
|
||||
reagents.add_reagent("gin", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey
|
||||
name = "Uncle Git's Special Reserve"
|
||||
desc = "A premium single-malt whiskey, gently matured inside the tunnels of a nuclear shelter. TUNNEL WHISKEY RULES."
|
||||
icon_state = "whiskeybottle"
|
||||
center_of_mass = list("x"=16, "y"=3)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("whiskey", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey/New()
|
||||
..()
|
||||
reagents.add_reagent("whiskey", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/specialwhiskey
|
||||
name = "Special Blend Whiskey"
|
||||
desc = "Just when you thought regular station whiskey was good... This silky, amber goodness has to come along and ruin everything."
|
||||
icon_state = "whiskeybottle2"
|
||||
center_of_mass = list("x"=16, "y"=3)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("specialwhiskey", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/specialwhiskey/New()
|
||||
..()
|
||||
reagents.add_reagent("specialwhiskey", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka
|
||||
name = "Tunguska Triple Distilled"
|
||||
desc = "Aah, vodka. Prime choice of drink AND fuel by Russians worldwide."
|
||||
icon_state = "vodkabottle"
|
||||
center_of_mass = list("x"=17, "y"=3)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("vodka", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka/New()
|
||||
..()
|
||||
reagents.add_reagent("vodka", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/tequilla
|
||||
name = "Caccavo Guaranteed Quality Tequilla"
|
||||
desc = "Made from premium petroleum distillates, pure thalidomide and other fine quality ingredients!"
|
||||
icon_state = "tequillabottle"
|
||||
center_of_mass = list("x"=16, "y"=3)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("tequilla", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/tequilla/New()
|
||||
..()
|
||||
reagents.add_reagent("tequilla", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing
|
||||
name = "Bottle of Nothing"
|
||||
desc = "A bottle filled with nothing"
|
||||
icon_state = "bottleofnothing"
|
||||
center_of_mass = list("x"=17, "y"=5)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("nothing", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing/New()
|
||||
..()
|
||||
reagents.add_reagent("nothing", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/patron
|
||||
name = "Wrapp Artiste Patron"
|
||||
desc = "Silver laced tequilla, served in space night clubs across the galaxy."
|
||||
icon_state = "patronbottle"
|
||||
center_of_mass = list("x"=16, "y"=6)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("patron", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/patron/New()
|
||||
..()
|
||||
reagents.add_reagent("patron", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/rum
|
||||
name = "Captain Pete's Cuban Spiced Rum"
|
||||
desc = "This isn't just rum, oh no. It's practically GRIFF in a bottle."
|
||||
icon_state = "rumbottle"
|
||||
center_of_mass = list("x"=16, "y"=8)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("rum", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/rum/New()
|
||||
..()
|
||||
reagents.add_reagent("rum", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater
|
||||
name = "Flask of Holy Water"
|
||||
desc = "A flask of the chaplain's holy water."
|
||||
icon_state = "holyflask"
|
||||
center_of_mass = list("x"=17, "y"=10)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("holywater", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater/New()
|
||||
..()
|
||||
reagents.add_reagent("holywater", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth
|
||||
name = "Goldeneye Vermouth"
|
||||
desc = "Sweet, sweet dryness~"
|
||||
icon_state = "vermouthbottle"
|
||||
center_of_mass = list("x"=17, "y"=3)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("vermouth", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth/New()
|
||||
..()
|
||||
reagents.add_reagent("vermouth", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/kahlua
|
||||
name = "Robert Robust's Coffee Liqueur"
|
||||
desc = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936, HONK"
|
||||
icon_state = "kahluabottle"
|
||||
center_of_mass = list("x"=17, "y"=3)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("kahlua", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/kahlua/New()
|
||||
..()
|
||||
reagents.add_reagent("kahlua", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/goldschlager
|
||||
name = "College Girl Goldschlager"
|
||||
desc = "Because they are the only ones who will drink 100 proof cinnamon schnapps."
|
||||
icon_state = "goldschlagerbottle"
|
||||
center_of_mass = list("x"=15, "y"=3)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("goldschlager", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/goldschlager/New()
|
||||
..()
|
||||
reagents.add_reagent("goldschlager", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/cognac
|
||||
name = "Chateau De Baton Premium Cognac"
|
||||
desc = "A sweet and strongly alchoholic drink, made after numerous distillations and years of maturing. You might as well not scream 'SHITCURITY' this time."
|
||||
icon_state = "cognacbottle"
|
||||
center_of_mass = list("x"=16, "y"=6)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("cognac", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/cognac/New()
|
||||
..()
|
||||
reagents.add_reagent("cognac", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/wine
|
||||
name = "Doublebeard Bearded Special Wine"
|
||||
desc = "A faint aura of unease and asspainery surrounds the bottle."
|
||||
icon_state = "winebottle"
|
||||
center_of_mass = list("x"=16, "y"=4)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("wine", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/wine/New()
|
||||
..()
|
||||
reagents.add_reagent("wine", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe
|
||||
name = "Jailbreaker Verte"
|
||||
desc = "One sip of this and you just know you're gonna have a good time."
|
||||
icon_state = "absinthebottle"
|
||||
center_of_mass = list("x"=16, "y"=6)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("absinthe", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe/New()
|
||||
..()
|
||||
reagents.add_reagent("absinthe", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/melonliquor
|
||||
name = "Emeraldine Melon Liquor"
|
||||
desc = "A bottle of 46 proof Emeraldine Melon Liquor. Sweet and light."
|
||||
icon_state = "alco-green" //Placeholder.
|
||||
center_of_mass = list("x"=16, "y"=6)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("melonliquor", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/melonliquor/New()
|
||||
..()
|
||||
reagents.add_reagent("melonliquor", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/bluecuracao
|
||||
name = "Miss Blue Curacao"
|
||||
desc = "A fruity, exceptionally azure drink. Does not allow the imbiber to use the fifth magic."
|
||||
icon_state = "alco-blue" //Placeholder.
|
||||
center_of_mass = list("x"=16, "y"=6)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("bluecuracao", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/bluecuracao/New()
|
||||
..()
|
||||
reagents.add_reagent("bluecuracao", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/grenadine
|
||||
name = "Briar Rose Grenadine Syrup"
|
||||
desc = "Sweet and tangy, a bar syrup used to add color or flavor to drinks."
|
||||
icon_state = "grenadinebottle"
|
||||
center_of_mass = list("x"=16, "y"=6)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("grenadine", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/grenadine/New()
|
||||
..()
|
||||
reagents.add_reagent("grenadine", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/cola
|
||||
name = "\improper Space Cola"
|
||||
desc = "Cola. in space"
|
||||
icon_state = "colabottle"
|
||||
center_of_mass = list("x"=16, "y"=6)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("cola", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/cola/New()
|
||||
..()
|
||||
reagents.add_reagent("cola", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/space_up
|
||||
name = "\improper Space-Up"
|
||||
desc = "Tastes like a hull breach in your mouth."
|
||||
icon_state = "space-up_bottle"
|
||||
center_of_mass = list("x"=16, "y"=6)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("space_up", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/space_up/New()
|
||||
..()
|
||||
reagents.add_reagent("space_up", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/space_mountain_wind
|
||||
name = "\improper Space Mountain Wind"
|
||||
desc = "Blows right through you like a space wind."
|
||||
icon_state = "space_mountain_wind_bottle"
|
||||
center_of_mass = list("x"=16, "y"=6)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("spacemountainwind", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/space_mountain_wind/New()
|
||||
..()
|
||||
reagents.add_reagent("spacemountainwind", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/pwine
|
||||
name = "Warlock's Velvet"
|
||||
desc = "What a delightful packaging for a surely high quality wine! The vintage must be amazing!"
|
||||
icon_state = "pwinebottle"
|
||||
center_of_mass = list("x"=16, "y"=4)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("pwine", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/pwine/New()
|
||||
..()
|
||||
reagents.add_reagent("pwine", 100)
|
||||
|
||||
//////////////////////////JUICES AND STUFF ///////////////////////
|
||||
|
||||
@@ -420,9 +440,10 @@
|
||||
item_state = "carton"
|
||||
center_of_mass = list("x"=16, "y"=7)
|
||||
isGlass = 0
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("orangejuice", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice/New()
|
||||
..()
|
||||
reagents.add_reagent("orangejuice", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/cream
|
||||
name = "Milk Cream"
|
||||
@@ -431,9 +452,10 @@
|
||||
item_state = "carton"
|
||||
center_of_mass = list("x"=16, "y"=8)
|
||||
isGlass = 0
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("cream", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/cream/New()
|
||||
..()
|
||||
reagents.add_reagent("cream", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/tomatojuice
|
||||
name = "Tomato Juice"
|
||||
@@ -442,9 +464,10 @@
|
||||
item_state = "carton"
|
||||
center_of_mass = list("x"=16, "y"=8)
|
||||
isGlass = 0
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("tomatojuice", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/tomatojuice/New()
|
||||
..()
|
||||
reagents.add_reagent("tomatojuice", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/limejuice
|
||||
name = "Lime Juice"
|
||||
@@ -453,9 +476,10 @@
|
||||
item_state = "carton"
|
||||
center_of_mass = list("x"=16, "y"=8)
|
||||
isGlass = 0
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("limejuice", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/limejuice/New()
|
||||
..()
|
||||
reagents.add_reagent("limejuice", 100)
|
||||
|
||||
//Small bottles
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/small
|
||||
@@ -469,9 +493,10 @@
|
||||
desc = "Contains only water, malt and hops."
|
||||
icon_state = "beer"
|
||||
center_of_mass = list("x"=16, "y"=12)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("beer", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/New()
|
||||
..()
|
||||
reagents.add_reagent("beer", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale
|
||||
name = "\improper Magm-Ale"
|
||||
@@ -479,6 +504,7 @@
|
||||
icon_state = "alebottle"
|
||||
item_state = "beer"
|
||||
center_of_mass = list("x"=16, "y"=10)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("ale", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale/New()
|
||||
..()
|
||||
reagents.add_reagent("ale", 30)
|
||||
@@ -108,3 +108,28 @@
|
||||
..()
|
||||
reagents.add_reagent("cola", 50)
|
||||
on_reagent_change()
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass
|
||||
name = "shot glass"
|
||||
desc = "No glasses were shot in the making of this glass."
|
||||
icon_state = "shotglass"
|
||||
amount_per_transfer_from_this = 10
|
||||
volume = 10
|
||||
matter = list("glass" = 175)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass/on_reagent_change()
|
||||
overlays.Cut()
|
||||
|
||||
if(reagents.total_volume)
|
||||
var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]1")
|
||||
|
||||
switch(reagents.total_volume)
|
||||
if(0 to 3) filling.icon_state = "[icon_state]1"
|
||||
if(4 to 7) filling.icon_state = "[icon_state]5"
|
||||
if(8 to INFINITY) filling.icon_state = "[icon_state]12"
|
||||
|
||||
filling.color += reagents.get_color()
|
||||
overlays += filling
|
||||
name = "shot glass of " + reagents.get_master_reagent_name() //No matter what, the glass will tell you the reagent's name. Might be too abusable in the future.
|
||||
else
|
||||
name = "shot glass"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -5,10 +5,11 @@
|
||||
health = 180
|
||||
filling_color = "#FF1C1C"
|
||||
center_of_mass = list("x"=16, "y"=14)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("protein", 9)
|
||||
src.bitesize = 3
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat/New()
|
||||
..()
|
||||
reagents.add_reagent("protein", 9)
|
||||
src.bitesize = 3
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W,/obj/item/weapon/material/knife))
|
||||
|
||||
@@ -44,66 +44,65 @@
|
||||
/obj/machinery/radiocarbon_spectrometer
|
||||
)
|
||||
|
||||
New()
|
||||
..()
|
||||
base_name = name
|
||||
/obj/item/weapon/reagent_containers/glass/New()
|
||||
..()
|
||||
base_name = name
|
||||
|
||||
examine(var/mob/user)
|
||||
if(!..(user, 2))
|
||||
/obj/item/weapon/reagent_containers/glass/examine(var/mob/user)
|
||||
if(!..(user, 2))
|
||||
return
|
||||
if(reagents && reagents.reagent_list.len)
|
||||
user << "<span class='notice'>It contains [reagents.total_volume] units of liquid.</span>"
|
||||
else
|
||||
user << "<span class='notice'>It is empty.</span>"
|
||||
if(!is_open_container())
|
||||
user << "<span class='notice'>Airtight lid seals it completely.</span>"
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/attack_self()
|
||||
..()
|
||||
if(is_open_container())
|
||||
usr << "<span class = 'notice'>You put the lid on \the [src].</span>"
|
||||
flags ^= OPENCONTAINER
|
||||
else
|
||||
usr << "<span class = 'notice'>You take the lid off \the [src].</span>"
|
||||
flags |= OPENCONTAINER
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/afterattack(var/obj/target, var/mob/user, var/flag)
|
||||
if(!is_open_container() || !flag)
|
||||
return
|
||||
|
||||
for(var/type in can_be_placed_into)
|
||||
if(istype(target, type))
|
||||
return
|
||||
if(reagents && reagents.reagent_list.len)
|
||||
user << "<span class='notice'>It contains [reagents.total_volume] units of liquid.</span>"
|
||||
|
||||
if(standard_splash_mob(user, target))
|
||||
return
|
||||
if(standard_dispenser_refill(user, target))
|
||||
return
|
||||
if(standard_pour_into(user, target))
|
||||
return
|
||||
|
||||
if(reagents.total_volume)
|
||||
user << "<span class='notice'>You splash the solution onto [target].</span>"
|
||||
reagents.splash(target, reagents.total_volume)
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/pen) || istype(W, /obj/item/device/flashlight/pen))
|
||||
var/tmp_label = sanitizeSafe(input(user, "Enter a label for [name]", "Label", label_text), MAX_NAME_LEN)
|
||||
if(length(tmp_label) > 10)
|
||||
user << "<span class='notice'>The label can be at most 10 characters long.</span>"
|
||||
else
|
||||
user << "<span class='notice'>It is empty.</span>"
|
||||
if(!is_open_container())
|
||||
user << "<span class='notice'>Airtight lid seals it completely.</span>"
|
||||
user << "<span class='notice'>You set the label to \"[tmp_label]\".</span>"
|
||||
label_text = tmp_label
|
||||
update_name_label()
|
||||
|
||||
attack_self()
|
||||
..()
|
||||
if(is_open_container())
|
||||
usr << "<span class = 'notice'>You put the lid on \the [src].</span>"
|
||||
flags ^= OPENCONTAINER
|
||||
else
|
||||
usr << "<span class = 'notice'>You take the lid off \the [src].</span>"
|
||||
flags |= OPENCONTAINER
|
||||
update_icon()
|
||||
|
||||
afterattack(var/obj/target, var/mob/user, var/flag)
|
||||
|
||||
if(!is_open_container() || !flag)
|
||||
return
|
||||
|
||||
for(var/type in can_be_placed_into)
|
||||
if(istype(target, type))
|
||||
return
|
||||
|
||||
if(standard_splash_mob(user, target))
|
||||
return
|
||||
if(standard_dispenser_refill(user, target))
|
||||
return
|
||||
if(standard_pour_into(user, target))
|
||||
return
|
||||
|
||||
if(reagents.total_volume)
|
||||
user << "<span class='notice'>You splash the solution onto [target].</span>"
|
||||
reagents.splash(target, reagents.total_volume)
|
||||
return
|
||||
|
||||
attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/pen) || istype(W, /obj/item/device/flashlight/pen))
|
||||
var/tmp_label = sanitizeSafe(input(user, "Enter a label for [name]", "Label", label_text), MAX_NAME_LEN)
|
||||
if(length(tmp_label) > 10)
|
||||
user << "<span class='notice'>The label can be at most 10 characters long.</span>"
|
||||
else
|
||||
user << "<span class='notice'>You set the label to \"[tmp_label]\".</span>"
|
||||
label_text = tmp_label
|
||||
update_name_label()
|
||||
|
||||
proc/update_name_label()
|
||||
if(label_text == "")
|
||||
name = base_name
|
||||
else
|
||||
name = "[base_name] ([label_text])"
|
||||
/obj/item/weapon/reagent_containers/glass/proc/update_name_label()
|
||||
if(label_text == "")
|
||||
name = base_name
|
||||
else
|
||||
name = "[base_name] ([label_text])"
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/beaker
|
||||
name = "beaker"
|
||||
@@ -113,47 +112,47 @@
|
||||
item_state = "beaker"
|
||||
matter = list("glass" = 500)
|
||||
|
||||
New()
|
||||
..()
|
||||
desc += " Can hold up to [volume] units."
|
||||
|
||||
on_reagent_change()
|
||||
update_icon()
|
||||
|
||||
pickup(mob/user)
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
dropped(mob/user)
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
attack_hand()
|
||||
..()
|
||||
update_icon()
|
||||
/obj/item/weapon/reagent_containers/glass/beaker/New()
|
||||
..()
|
||||
desc += " Can hold up to [volume] units."
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/beaker/on_reagent_change()
|
||||
update_icon()
|
||||
overlays.Cut()
|
||||
|
||||
if(reagents.total_volume)
|
||||
var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10")
|
||||
/obj/item/weapon/reagent_containers/glass/beaker/pickup(mob/user)
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
var/percent = round((reagents.total_volume / volume) * 100)
|
||||
switch(percent)
|
||||
if(0 to 9) filling.icon_state = "[icon_state]-10"
|
||||
if(10 to 24) filling.icon_state = "[icon_state]10"
|
||||
if(25 to 49) filling.icon_state = "[icon_state]25"
|
||||
if(50 to 74) filling.icon_state = "[icon_state]50"
|
||||
if(75 to 79) filling.icon_state = "[icon_state]75"
|
||||
if(80 to 90) filling.icon_state = "[icon_state]80"
|
||||
if(91 to INFINITY) filling.icon_state = "[icon_state]100"
|
||||
/obj/item/weapon/reagent_containers/glass/beaker/dropped(mob/user)
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
filling.color = reagents.get_color()
|
||||
overlays += filling
|
||||
/obj/item/weapon/reagent_containers/glass/beaker/attack_hand()
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
if (!is_open_container())
|
||||
var/image/lid = image(icon, src, "lid_[initial(icon_state)]")
|
||||
overlays += lid
|
||||
/obj/item/weapon/reagent_containers/glass/beaker/update_icon()
|
||||
overlays.Cut()
|
||||
|
||||
if(reagents.total_volume)
|
||||
var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10")
|
||||
|
||||
var/percent = round((reagents.total_volume / volume) * 100)
|
||||
switch(percent)
|
||||
if(0 to 9) filling.icon_state = "[icon_state]-10"
|
||||
if(10 to 24) filling.icon_state = "[icon_state]10"
|
||||
if(25 to 49) filling.icon_state = "[icon_state]25"
|
||||
if(50 to 74) filling.icon_state = "[icon_state]50"
|
||||
if(75 to 79) filling.icon_state = "[icon_state]75"
|
||||
if(80 to 90) filling.icon_state = "[icon_state]80"
|
||||
if(91 to INFINITY) filling.icon_state = "[icon_state]100"
|
||||
|
||||
filling.color = reagents.get_color()
|
||||
overlays += filling
|
||||
|
||||
if (!is_open_container())
|
||||
var/image/lid = image(icon, src, "lid_[initial(icon_state)]")
|
||||
overlays += lid
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/beaker/large
|
||||
name = "large beaker"
|
||||
@@ -194,14 +193,12 @@
|
||||
possible_transfer_amounts = list(5,10,15,25)
|
||||
flags = OPENCONTAINER
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("cryoxadone", 30)
|
||||
update_icon()
|
||||
/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone/New()
|
||||
..()
|
||||
reagents.add_reagent("cryoxadone", 30)
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/beaker/sulphuric
|
||||
New()
|
||||
/obj/item/weapon/reagent_containers/glass/beaker/sulphuric/New()
|
||||
..()
|
||||
reagents.add_reagent("sacid", 60)
|
||||
update_icon()
|
||||
@@ -221,7 +218,6 @@
|
||||
unacidable = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/bucket/attackby(var/obj/D, mob/user as mob)
|
||||
|
||||
if(isprox(D))
|
||||
user << "You add [D] to [src]."
|
||||
qdel(D)
|
||||
@@ -256,35 +252,3 @@
|
||||
amount_per_transfer_from_this = 20
|
||||
possible_transfer_amounts = list(10,20,30,60,120)
|
||||
volume = 120
|
||||
|
||||
/*
|
||||
/obj/item/weapon/reagent_containers/glass/blender_jug
|
||||
name = "Blender Jug"
|
||||
desc = "A blender jug, part of a blender."
|
||||
icon = 'icons/obj/kitchen.dmi'
|
||||
icon_state = "blender_jug_e"
|
||||
volume = 100
|
||||
|
||||
on_reagent_change()
|
||||
switch(src.reagents.total_volume)
|
||||
if(0)
|
||||
icon_state = "blender_jug_e"
|
||||
if(1 to 75)
|
||||
icon_state = "blender_jug_h"
|
||||
if(76 to 100)
|
||||
icon_state = "blender_jug_f"
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/canister //not used apparantly
|
||||
desc = "It's a canister. Mainly used for transporting fuel."
|
||||
name = "canister"
|
||||
icon = 'icons/obj/tank.dmi'
|
||||
icon_state = "canister"
|
||||
item_state = "canister"
|
||||
m_amt = 300
|
||||
g_amt = 0
|
||||
w_class = 4.0
|
||||
|
||||
amount_per_transfer_from_this = 20
|
||||
possible_transfer_amounts = list(10,20,30,60)
|
||||
volume = 120
|
||||
*/
|
||||
|
||||
@@ -12,48 +12,48 @@
|
||||
flags = 0
|
||||
volume = 60
|
||||
|
||||
on_reagent_change()
|
||||
update_icon()
|
||||
|
||||
pickup(mob/user)
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
dropped(mob/user)
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
attack_hand()
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
New()
|
||||
..()
|
||||
if(!icon_state)
|
||||
icon_state = "bottle-[rand(1,4)]"
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/on_reagent_change()
|
||||
update_icon()
|
||||
overlays.Cut()
|
||||
|
||||
if(reagents.total_volume && (icon_state == "bottle-1" || icon_state == "bottle-2" || icon_state == "bottle-3" || icon_state == "bottle-4"))
|
||||
var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10")
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/pickup(mob/user)
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
var/percent = round((reagents.total_volume / volume) * 100)
|
||||
switch(percent)
|
||||
if(0 to 9) filling.icon_state = "[icon_state]--10"
|
||||
if(10 to 24) filling.icon_state = "[icon_state]-10"
|
||||
if(25 to 49) filling.icon_state = "[icon_state]-25"
|
||||
if(50 to 74) filling.icon_state = "[icon_state]-50"
|
||||
if(75 to 79) filling.icon_state = "[icon_state]-75"
|
||||
if(80 to 90) filling.icon_state = "[icon_state]-80"
|
||||
if(91 to INFINITY) filling.icon_state = "[icon_state]-100"
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/dropped(mob/user)
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
filling.color = reagents.get_color()
|
||||
overlays += filling
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/attack_hand()
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
if (!is_open_container())
|
||||
var/image/lid = image(icon, src, "lid_bottle")
|
||||
overlays += lid
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/New()
|
||||
..()
|
||||
if(!icon_state)
|
||||
icon_state = "bottle-[rand(1,4)]"
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/update_icon()
|
||||
overlays.Cut()
|
||||
|
||||
if(reagents.total_volume && (icon_state == "bottle-1" || icon_state == "bottle-2" || icon_state == "bottle-3" || icon_state == "bottle-4"))
|
||||
var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10")
|
||||
|
||||
var/percent = round((reagents.total_volume / volume) * 100)
|
||||
switch(percent)
|
||||
if(0 to 9) filling.icon_state = "[icon_state]--10"
|
||||
if(10 to 24) filling.icon_state = "[icon_state]-10"
|
||||
if(25 to 49) filling.icon_state = "[icon_state]-25"
|
||||
if(50 to 74) filling.icon_state = "[icon_state]-50"
|
||||
if(75 to 79) filling.icon_state = "[icon_state]-75"
|
||||
if(80 to 90) filling.icon_state = "[icon_state]-80"
|
||||
if(91 to INFINITY) filling.icon_state = "[icon_state]-100"
|
||||
|
||||
filling.color = reagents.get_color()
|
||||
overlays += filling
|
||||
|
||||
if (!is_open_container())
|
||||
var/image/lid = image(icon, src, "lid_bottle")
|
||||
overlays += lid
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline
|
||||
@@ -86,12 +86,12 @@
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "bottle-3"
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/cyanide/New()
|
||||
..()
|
||||
reagents.add_reagent("cyanide", 30) //volume changed to match chloral
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/stoxin
|
||||
name = "soporific bottle"
|
||||
desc = "A small bottle of soporific. Just the fumes make you sleepy."
|
||||
|
||||
@@ -14,10 +14,10 @@
|
||||
icon_state = "bottle-4"
|
||||
reagent = "inaprovaline"
|
||||
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("inaprovaline", 60)
|
||||
update_icon()
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/robot/inaprovaline/New()
|
||||
..()
|
||||
reagents.add_reagent("inaprovaline", 60)
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/robot/antitoxin
|
||||
@@ -27,8 +27,8 @@
|
||||
icon_state = "bottle-4"
|
||||
reagent = "anti_toxin"
|
||||
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("anti_toxin", 60)
|
||||
update_icon()
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/robot/antitoxin/New()
|
||||
..()
|
||||
reagents.add_reagent("anti_toxin", 60)
|
||||
update_icon()
|
||||
|
||||
|
||||
@@ -12,82 +12,82 @@
|
||||
slot_flags = SLOT_EARS
|
||||
volume = 60
|
||||
|
||||
New()
|
||||
..()
|
||||
if(!icon_state)
|
||||
icon_state = "pill[rand(1, 20)]"
|
||||
/obj/item/weapon/reagent_containers/pill/New()
|
||||
..()
|
||||
if(!icon_state)
|
||||
icon_state = "pill[rand(1, 20)]"
|
||||
|
||||
attack(mob/M as mob, mob/user as mob, def_zone)
|
||||
if(M == user)
|
||||
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(!H.check_has_mouth())
|
||||
user << "Where do you intend to put \the [src]? You don't have a mouth!"
|
||||
return
|
||||
var/obj/item/blocked = H.check_mouth_coverage()
|
||||
if(blocked)
|
||||
user << "<span class='warning'>\The [blocked] is in the way!</span>"
|
||||
return
|
||||
|
||||
M << "<span class='notice'>You swallow \the [src].</span>"
|
||||
M.drop_from_inventory(src) //icon update
|
||||
if(reagents.total_volume)
|
||||
reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST)
|
||||
qdel(src)
|
||||
return 1
|
||||
|
||||
else if(istype(M, /mob/living/carbon/human))
|
||||
/obj/item/weapon/reagent_containers/pill/attack(mob/M as mob, mob/user as mob, def_zone)
|
||||
if(M == user)
|
||||
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(!H.check_has_mouth())
|
||||
user << "Where do you intend to put \the [src]? \The [H] doesn't have a mouth!"
|
||||
user << "Where do you intend to put \the [src]? You don't have a mouth!"
|
||||
return
|
||||
var/obj/item/blocked = H.check_mouth_coverage()
|
||||
if(blocked)
|
||||
user << "<span class='warning'>\The [blocked] is in the way!</span>"
|
||||
return
|
||||
|
||||
user.visible_message("<span class='warning'>[user] attempts to force [M] to swallow \the [src].</span>")
|
||||
M << "<span class='notice'>You swallow \the [src].</span>"
|
||||
M.drop_from_inventory(src) //icon update
|
||||
if(reagents.total_volume)
|
||||
reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST)
|
||||
qdel(src)
|
||||
return 1
|
||||
|
||||
if(!do_mob(user, M))
|
||||
return
|
||||
else if(istype(M, /mob/living/carbon/human))
|
||||
|
||||
user.drop_from_inventory(src) //icon update
|
||||
user.visible_message("<span class='warning'>[user] forces [M] to swallow \the [src].</span>")
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(!H.check_has_mouth())
|
||||
user << "Where do you intend to put \the [src]? \The [H] doesn't have a mouth!"
|
||||
return
|
||||
var/obj/item/blocked = H.check_mouth_coverage()
|
||||
if(blocked)
|
||||
user << "<span class='warning'>\The [blocked] is in the way!</span>"
|
||||
return
|
||||
|
||||
var/contained = reagentlist()
|
||||
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been fed [name] by [key_name(user)] Reagents: [contained]</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Fed [name] to [key_name(M)] Reagents: [contained]</font>")
|
||||
msg_admin_attack("[key_name_admin(user)] fed [key_name_admin(M)] with [name] Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
|
||||
user.visible_message("<span class='warning'>[user] attempts to force [M] to swallow \the [src].</span>")
|
||||
|
||||
if(reagents.total_volume)
|
||||
reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST)
|
||||
qdel(src)
|
||||
if(!do_mob(user, M))
|
||||
return
|
||||
|
||||
return 1
|
||||
user.drop_from_inventory(src) //icon update
|
||||
user.visible_message("<span class='warning'>[user] forces [M] to swallow \the [src].</span>")
|
||||
|
||||
return 0
|
||||
var/contained = reagentlist()
|
||||
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been fed [name] by [key_name(user)] Reagents: [contained]</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Fed [name] to [key_name(M)] Reagents: [contained]</font>")
|
||||
msg_admin_attack("[key_name_admin(user)] fed [key_name_admin(M)] with [name] Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
|
||||
|
||||
afterattack(obj/target, mob/user, proximity)
|
||||
if(!proximity) return
|
||||
if(reagents.total_volume)
|
||||
reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST)
|
||||
qdel(src)
|
||||
|
||||
if(target.is_open_container() && target.reagents)
|
||||
if(!target.reagents.total_volume)
|
||||
user << "<span class='notice'>[target] is empty. Can't dissolve \the [src].</span>"
|
||||
return
|
||||
user << "<span class='notice'>You dissolve \the [src] in [target].</span>"
|
||||
return 1
|
||||
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Spiked \a [target] with a pill. Reagents: [reagentlist()]</font>")
|
||||
msg_admin_attack("[user.name] ([user.ckey]) spiked \a [target] with a pill. Reagents: [reagentlist()] (INTENT: [uppertext(user.a_intent)]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
|
||||
return 0
|
||||
|
||||
reagents.trans_to(target, reagents.total_volume)
|
||||
for(var/mob/O in viewers(2, user))
|
||||
O.show_message("<span class='warning'>[user] puts something in \the [target].</span>", 1)
|
||||
/obj/item/weapon/reagent_containers/pill/afterattack(obj/target, mob/user, proximity)
|
||||
if(!proximity) return
|
||||
|
||||
qdel(src)
|
||||
if(target.is_open_container() && target.reagents)
|
||||
if(!target.reagents.total_volume)
|
||||
user << "<span class='notice'>[target] is empty. Can't dissolve \the [src].</span>"
|
||||
return
|
||||
user << "<span class='notice'>You dissolve \the [src] in [target].</span>"
|
||||
|
||||
return
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Spiked \a [target] with a pill. Reagents: [reagentlist()]</font>")
|
||||
msg_admin_attack("[user.name] ([user.ckey]) spiked \a [target] with a pill. Reagents: [reagentlist()] (INTENT: [uppertext(user.a_intent)]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
|
||||
|
||||
reagents.trans_to(target, reagents.total_volume)
|
||||
for(var/mob/O in viewers(2, user))
|
||||
O.show_message("<span class='warning'>[user] puts something in \the [target].</span>", 1)
|
||||
|
||||
qdel(src)
|
||||
|
||||
return
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// Pills. END
|
||||
@@ -98,163 +98,199 @@
|
||||
name = "Anti-toxins pill"
|
||||
desc = "Neutralizes many common toxins."
|
||||
icon_state = "pill17"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("anti_toxin", 25)
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/antitox/New()
|
||||
..()
|
||||
reagents.add_reagent("anti_toxin", 25)
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/tox
|
||||
name = "Toxins pill"
|
||||
desc = "Highly toxic."
|
||||
icon_state = "pill5"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("toxin", 50)
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/tox/New()
|
||||
..()
|
||||
reagents.add_reagent("toxin", 50)
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/cyanide
|
||||
name = "Cyanide pill"
|
||||
desc = "Don't swallow this."
|
||||
icon_state = "pill5"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("cyanide", 50)
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/cyanide/New()
|
||||
..()
|
||||
reagents.add_reagent("cyanide", 50)
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/adminordrazine
|
||||
name = "Adminordrazine pill"
|
||||
desc = "It's magic. We don't have to explain it."
|
||||
icon_state = "pill16"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("adminordrazine", 50)
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/adminordrazine/New()
|
||||
..()
|
||||
reagents.add_reagent("adminordrazine", 50)
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/stox
|
||||
name = "Sleeping pill"
|
||||
desc = "Commonly used to treat insomnia."
|
||||
icon_state = "pill8"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("stoxin", 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/stox/New()
|
||||
..()
|
||||
reagents.add_reagent("stoxin", 15)
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/kelotane
|
||||
name = "Kelotane pill"
|
||||
desc = "Used to treat burns."
|
||||
icon_state = "pill11"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("kelotane", 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/kelotane/New()
|
||||
..()
|
||||
reagents.add_reagent("kelotane", 15)
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/paracetamol
|
||||
name = "Paracetamol pill"
|
||||
desc = "Tylenol! A painkiller for the ages. Chewables!"
|
||||
icon_state = "pill8"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("paracetamol", 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/paracetamol/New()
|
||||
..()
|
||||
reagents.add_reagent("paracetamol", 15)
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/tramadol
|
||||
name = "Tramadol pill"
|
||||
desc = "A simple painkiller."
|
||||
icon_state = "pill8"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("tramadol", 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/tramadol/New()
|
||||
..()
|
||||
reagents.add_reagent("tramadol", 15)
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/methylphenidate
|
||||
name = "Methylphenidate pill"
|
||||
desc = "Improves the ability to concentrate."
|
||||
icon_state = "pill8"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("methylphenidate", 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/methylphenidate/New()
|
||||
..()
|
||||
reagents.add_reagent("methylphenidate", 15)
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/citalopram
|
||||
name = "Citalopram pill"
|
||||
desc = "Mild anti-depressant."
|
||||
icon_state = "pill8"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("citalopram", 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/citalopram/New()
|
||||
..()
|
||||
reagents.add_reagent("citalopram", 15)
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/inaprovaline
|
||||
name = "Inaprovaline pill"
|
||||
desc = "Used to stabilize patients."
|
||||
icon_state = "pill20"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("inaprovaline", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/inaprovaline/New()
|
||||
..()
|
||||
reagents.add_reagent("inaprovaline", 30)
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/dexalin
|
||||
name = "Dexalin pill"
|
||||
desc = "Used to treat oxygen deprivation."
|
||||
icon_state = "pill16"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("dexalin", 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/dexalin/New()
|
||||
..()
|
||||
reagents.add_reagent("dexalin", 15)
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/dexalin_plus
|
||||
name = "Dexalin Plus pill"
|
||||
desc = "Used to treat extreme oxygen deprivation."
|
||||
icon_state = "pill8"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("dexalinp", 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/dexalin_plus/New()
|
||||
..()
|
||||
reagents.add_reagent("dexalinp", 15)
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/dermaline
|
||||
name = "Dermaline pill"
|
||||
desc = "Used to treat burn wounds."
|
||||
icon_state = "pill12"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("dermaline", 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/dermaline/New()
|
||||
..()
|
||||
reagents.add_reagent("dermaline", 15)
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/dylovene
|
||||
name = "Dylovene pill"
|
||||
desc = "A broad-spectrum anti-toxin."
|
||||
icon_state = "pill13"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("anti_toxin", 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/dylovene/New()
|
||||
..()
|
||||
reagents.add_reagent("anti_toxin", 15)
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/inaprovaline
|
||||
name = "Inaprovaline pill"
|
||||
desc = "Used to stabilize patients."
|
||||
icon_state = "pill20"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("inaprovaline", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/inaprovaline/New()
|
||||
..()
|
||||
reagents.add_reagent("inaprovaline", 30)
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/bicaridine
|
||||
name = "Bicaridine pill"
|
||||
desc = "Used to treat physical injuries."
|
||||
icon_state = "pill18"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("bicaridine", 20)
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/bicaridine/New()
|
||||
..()
|
||||
reagents.add_reagent("bicaridine", 20)
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/happy
|
||||
name = "Happy pill"
|
||||
desc = "Happy happy joy joy!"
|
||||
icon_state = "pill18"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("space_drugs", 15)
|
||||
reagents.add_reagent("sugar", 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/happy/New()
|
||||
..()
|
||||
reagents.add_reagent("space_drugs", 15)
|
||||
reagents.add_reagent("sugar", 15)
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/zoom
|
||||
name = "Zoom pill"
|
||||
desc = "Zoooom!"
|
||||
icon_state = "pill18"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("impedrezene", 10)
|
||||
reagents.add_reagent("synaptizine", 5)
|
||||
reagents.add_reagent("hyperzine", 5)
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/zoom/New()
|
||||
..()
|
||||
reagents.add_reagent("impedrezene", 10)
|
||||
reagents.add_reagent("synaptizine", 5)
|
||||
reagents.add_reagent("hyperzine", 5)
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/spaceacillin
|
||||
name = "Spaceacillin pill"
|
||||
desc = "Contains antiviral agents."
|
||||
icon_state = "pill19"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("spaceacillin", 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/spaceacillin/New()
|
||||
..()
|
||||
reagents.add_reagent("spaceacillin", 15)
|
||||
|
||||
@@ -24,260 +24,258 @@
|
||||
var/visible_name = "a syringe"
|
||||
var/time = 30
|
||||
|
||||
on_reagent_change()
|
||||
update_icon()
|
||||
|
||||
pickup(mob/user)
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
dropped(mob/user)
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
attack_self(mob/user as mob)
|
||||
|
||||
switch(mode)
|
||||
if(SYRINGE_DRAW)
|
||||
mode = SYRINGE_INJECT
|
||||
if(SYRINGE_INJECT)
|
||||
mode = SYRINGE_DRAW
|
||||
if(SYRINGE_BROKEN)
|
||||
return
|
||||
update_icon()
|
||||
|
||||
attack_hand()
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
attackby(obj/item/I as obj, mob/user as mob)
|
||||
return
|
||||
|
||||
afterattack(obj/target, mob/user, proximity)
|
||||
if(!proximity || !target.reagents)
|
||||
return
|
||||
|
||||
if(mode == SYRINGE_BROKEN)
|
||||
user << "<span class='warning'>This syringe is broken!</span>"
|
||||
return
|
||||
|
||||
if(user.a_intent == I_HURT && ismob(target))
|
||||
if((CLUMSY in user.mutations) && prob(50))
|
||||
target = user
|
||||
syringestab(target, user)
|
||||
return
|
||||
|
||||
|
||||
switch(mode)
|
||||
if(SYRINGE_DRAW)
|
||||
|
||||
if(!reagents.get_free_space())
|
||||
user << "<span class='warning'>The syringe is full.</span>"
|
||||
mode = SYRINGE_INJECT
|
||||
return
|
||||
|
||||
if(ismob(target))//Blood!
|
||||
if(reagents.has_reagent("blood"))
|
||||
user << "<span class='notice'>There is already a blood sample in this syringe.</span>"
|
||||
return
|
||||
if(istype(target, /mob/living/carbon))
|
||||
if(istype(target, /mob/living/carbon/slime))
|
||||
user << "<span class='warning'>You are unable to locate any blood.</span>"
|
||||
return
|
||||
var/amount = reagents.get_free_space()
|
||||
var/mob/living/carbon/T = target
|
||||
if(!T.dna)
|
||||
user << "<span class='warning'>You are unable to locate any blood. (To be specific, your target seems to be missing their DNA datum).</span>"
|
||||
return
|
||||
if(NOCLONE in T.mutations) //target done been et, no more blood in him
|
||||
user << "<span class='warning'>You are unable to locate any blood.</span>"
|
||||
return
|
||||
|
||||
var/datum/reagent/B
|
||||
if(istype(T, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = T
|
||||
if(H.species && !H.should_have_organ(O_HEART))
|
||||
H.reagents.trans_to_obj(src, amount)
|
||||
else
|
||||
B = T.take_blood(src, amount)
|
||||
else
|
||||
B = T.take_blood(src,amount)
|
||||
|
||||
if (B)
|
||||
reagents.reagent_list += B
|
||||
reagents.update_total()
|
||||
on_reagent_change()
|
||||
reagents.handle_reactions()
|
||||
user << "<span class='notice'>You take a blood sample from [target].</span>"
|
||||
for(var/mob/O in viewers(4, user))
|
||||
O.show_message("<span class='notice'>[user] takes a blood sample from [target].</span>", 1)
|
||||
|
||||
else //if not mob
|
||||
if(!target.reagents.total_volume)
|
||||
user << "<span class='notice'>[target] is empty.</span>"
|
||||
return
|
||||
|
||||
if(!target.is_open_container() && !istype(target, /obj/structure/reagent_dispensers) && !istype(target, /obj/item/slime_extract))
|
||||
user << "<span class='notice'>You cannot directly remove reagents from this object.</span>"
|
||||
return
|
||||
|
||||
var/trans = target.reagents.trans_to_obj(src, amount_per_transfer_from_this)
|
||||
user << "<span class='notice'>You fill the syringe with [trans] units of the solution.</span>"
|
||||
update_icon()
|
||||
|
||||
if(!reagents.get_free_space())
|
||||
mode = SYRINGE_INJECT
|
||||
update_icon()
|
||||
|
||||
if(SYRINGE_INJECT)
|
||||
if(!reagents.total_volume)
|
||||
user << "<span class='notice'>The syringe is empty.</span>"
|
||||
mode = SYRINGE_DRAW
|
||||
return
|
||||
if(istype(target, /obj/item/weapon/implantcase/chem))
|
||||
return
|
||||
|
||||
if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/slime_extract) && !istype(target, /obj/item/clothing/mask/smokable/cigarette) && !istype(target, /obj/item/weapon/storage/fancy/cigarettes))
|
||||
user << "<span class='notice'>You cannot directly fill this object.</span>"
|
||||
return
|
||||
if(!target.reagents.get_free_space())
|
||||
user << "<span class='notice'>[target] is full.</span>"
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/H = target
|
||||
if(istype(H))
|
||||
var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting)
|
||||
if(!affected)
|
||||
user << "<span class='danger'>\The [H] is missing that limb!</span>"
|
||||
return
|
||||
else if(affected.status & ORGAN_ROBOT)
|
||||
user << "<span class='danger'>You cannot inject a robotic limb.</span>"
|
||||
return
|
||||
|
||||
if(ismob(target) && target != user)
|
||||
|
||||
var/injtime = time //Injecting through a hardsuit takes longer due to needing to find a port.
|
||||
|
||||
if(istype(H))
|
||||
if(H.wear_suit)
|
||||
if(istype(H.wear_suit, /obj/item/clothing/suit/space))
|
||||
injtime = injtime * 2
|
||||
else if(!H.can_inject(user, 1))
|
||||
return
|
||||
|
||||
else if(isliving(target))
|
||||
|
||||
var/mob/living/M = target
|
||||
if(!M.can_inject(user, 1))
|
||||
return
|
||||
|
||||
if(injtime == time)
|
||||
user.visible_message("<span class='warning'>[user] is trying to inject [target] with [visible_name]!</span>")
|
||||
else
|
||||
user.visible_message("<span class='warning'>[user] begins hunting for an injection port on [target]'s suit!</span>")
|
||||
|
||||
if(!do_mob(user, target, injtime))
|
||||
return
|
||||
|
||||
user.visible_message("<span class='warning'>[user] injects [target] with the syringe!</span>")
|
||||
|
||||
var/trans
|
||||
if(ismob(target))
|
||||
var/contained = reagentlist()
|
||||
trans = reagents.trans_to_mob(target, amount_per_transfer_from_this, CHEM_BLOOD)
|
||||
admin_inject_log(user, target, src, contained, trans)
|
||||
else
|
||||
trans = reagents.trans_to(target, amount_per_transfer_from_this)
|
||||
user << "<span class='notice'>You inject [trans] units of the solution. The syringe now contains [src.reagents.total_volume] units.</span>"
|
||||
if (reagents.total_volume <= 0 && mode == SYRINGE_INJECT)
|
||||
mode = SYRINGE_DRAW
|
||||
update_icon()
|
||||
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/on_reagent_change()
|
||||
update_icon()
|
||||
overlays.Cut()
|
||||
|
||||
if(mode == SYRINGE_BROKEN)
|
||||
icon_state = "broken"
|
||||
/obj/item/weapon/reagent_containers/syringe/pickup(mob/user)
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/dropped(mob/user)
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/attack_self(mob/user as mob)
|
||||
switch(mode)
|
||||
if(SYRINGE_DRAW)
|
||||
mode = SYRINGE_INJECT
|
||||
if(SYRINGE_INJECT)
|
||||
mode = SYRINGE_DRAW
|
||||
if(SYRINGE_BROKEN)
|
||||
return
|
||||
update_icon()
|
||||
|
||||
var/rounded_vol = round(reagents.total_volume, round(reagents.maximum_volume / 3))
|
||||
if(ismob(loc))
|
||||
var/injoverlay
|
||||
switch(mode)
|
||||
if (SYRINGE_DRAW)
|
||||
injoverlay = "draw"
|
||||
if (SYRINGE_INJECT)
|
||||
injoverlay = "inject"
|
||||
overlays += injoverlay
|
||||
icon_state = "[rounded_vol]"
|
||||
item_state = "syringe_[rounded_vol]"
|
||||
/obj/item/weapon/reagent_containers/syringe/attack_hand()
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
if(reagents.total_volume)
|
||||
filling = image('icons/obj/reagentfillings.dmi', src, "syringe10")
|
||||
/obj/item/weapon/reagent_containers/syringe/attackby(obj/item/I as obj, mob/user as mob)
|
||||
return
|
||||
|
||||
filling.icon_state = "syringe[rounded_vol]"
|
||||
/obj/item/weapon/reagent_containers/syringe/afterattack(obj/target, mob/user, proximity)
|
||||
if(!proximity || !target.reagents)
|
||||
return
|
||||
|
||||
filling.color = reagents.get_color()
|
||||
overlays += filling
|
||||
if(mode == SYRINGE_BROKEN)
|
||||
user << "<span class='warning'>This syringe is broken!</span>"
|
||||
return
|
||||
|
||||
proc/syringestab(mob/living/carbon/target as mob, mob/living/carbon/user as mob)
|
||||
if(user.a_intent == I_HURT && ismob(target))
|
||||
if((CLUMSY in user.mutations) && prob(50))
|
||||
target = user
|
||||
syringestab(target, user)
|
||||
return
|
||||
|
||||
if(istype(target, /mob/living/carbon/human))
|
||||
|
||||
switch(mode)
|
||||
if(SYRINGE_DRAW)
|
||||
|
||||
if(!reagents.get_free_space())
|
||||
user << "<span class='warning'>The syringe is full.</span>"
|
||||
mode = SYRINGE_INJECT
|
||||
return
|
||||
|
||||
if(ismob(target))//Blood!
|
||||
if(reagents.has_reagent("blood"))
|
||||
user << "<span class='notice'>There is already a blood sample in this syringe.</span>"
|
||||
return
|
||||
if(istype(target, /mob/living/carbon))
|
||||
if(istype(target, /mob/living/carbon/slime))
|
||||
user << "<span class='warning'>You are unable to locate any blood.</span>"
|
||||
return
|
||||
var/amount = reagents.get_free_space()
|
||||
var/mob/living/carbon/T = target
|
||||
if(!T.dna)
|
||||
user << "<span class='warning'>You are unable to locate any blood. (To be specific, your target seems to be missing their DNA datum).</span>"
|
||||
return
|
||||
if(NOCLONE in T.mutations) //target done been et, no more blood in him
|
||||
user << "<span class='warning'>You are unable to locate any blood.</span>"
|
||||
return
|
||||
|
||||
var/datum/reagent/B
|
||||
if(istype(T, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = T
|
||||
if(H.species && !H.should_have_organ(O_HEART))
|
||||
H.reagents.trans_to_obj(src, amount)
|
||||
else
|
||||
B = T.take_blood(src, amount)
|
||||
else
|
||||
B = T.take_blood(src,amount)
|
||||
|
||||
if (B)
|
||||
reagents.reagent_list += B
|
||||
reagents.update_total()
|
||||
on_reagent_change()
|
||||
reagents.handle_reactions()
|
||||
user << "<span class='notice'>You take a blood sample from [target].</span>"
|
||||
for(var/mob/O in viewers(4, user))
|
||||
O.show_message("<span class='notice'>[user] takes a blood sample from [target].</span>", 1)
|
||||
|
||||
else //if not mob
|
||||
if(!target.reagents.total_volume)
|
||||
user << "<span class='notice'>[target] is empty.</span>"
|
||||
return
|
||||
|
||||
if(!target.is_open_container() && !istype(target, /obj/structure/reagent_dispensers) && !istype(target, /obj/item/slime_extract))
|
||||
user << "<span class='notice'>You cannot directly remove reagents from this object.</span>"
|
||||
return
|
||||
|
||||
var/trans = target.reagents.trans_to_obj(src, amount_per_transfer_from_this)
|
||||
user << "<span class='notice'>You fill the syringe with [trans] units of the solution.</span>"
|
||||
update_icon()
|
||||
|
||||
if(!reagents.get_free_space())
|
||||
mode = SYRINGE_INJECT
|
||||
update_icon()
|
||||
|
||||
if(SYRINGE_INJECT)
|
||||
if(!reagents.total_volume)
|
||||
user << "<span class='notice'>The syringe is empty.</span>"
|
||||
mode = SYRINGE_DRAW
|
||||
return
|
||||
if(istype(target, /obj/item/weapon/implantcase/chem))
|
||||
return
|
||||
|
||||
if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/slime_extract) && !istype(target, /obj/item/clothing/mask/smokable/cigarette) && !istype(target, /obj/item/weapon/storage/fancy/cigarettes))
|
||||
user << "<span class='notice'>You cannot directly fill this object.</span>"
|
||||
return
|
||||
if(!target.reagents.get_free_space())
|
||||
user << "<span class='notice'>[target] is full.</span>"
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/H = target
|
||||
if(istype(H))
|
||||
var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting)
|
||||
if(!affected)
|
||||
user << "<span class='danger'>\The [H] is missing that limb!</span>"
|
||||
return
|
||||
else if(affected.status & ORGAN_ROBOT)
|
||||
user << "<span class='danger'>You cannot inject a robotic limb.</span>"
|
||||
return
|
||||
|
||||
var/target_zone = ran_zone(check_zone(user.zone_sel.selecting, target))
|
||||
var/obj/item/organ/external/affecting = H.get_organ(target_zone)
|
||||
if(ismob(target) && target != user)
|
||||
|
||||
if (!affecting || affecting.is_stump())
|
||||
user << "<span class='danger'>They are missing that limb!</span>"
|
||||
return
|
||||
var/injtime = time //Injecting through a hardsuit takes longer due to needing to find a port.
|
||||
|
||||
var/hit_area = affecting.name
|
||||
if(istype(H))
|
||||
if(H.wear_suit)
|
||||
if(istype(H.wear_suit, /obj/item/clothing/suit/space))
|
||||
injtime = injtime * 2
|
||||
else if(!H.can_inject(user, 1))
|
||||
return
|
||||
|
||||
if((user != target) && H.check_shields(7, src, user, "\the [src]"))
|
||||
return
|
||||
else if(isliving(target))
|
||||
|
||||
if (target != user && H.getarmor(target_zone, "melee") > 5 && prob(50))
|
||||
for(var/mob/O in viewers(world.view, user))
|
||||
O.show_message(text("\red <B>[user] tries to stab [target] in \the [hit_area] with [src.name], but the attack is deflected by armor!</B>"), 1)
|
||||
user.remove_from_mob(src)
|
||||
qdel(src)
|
||||
var/mob/living/M = target
|
||||
if(!M.can_inject(user, 1))
|
||||
return
|
||||
|
||||
user.attack_log += "\[[time_stamp()]\]<font color='red'> Attacked [target.name] ([target.ckey]) with \the [src] (INTENT: HARM).</font>"
|
||||
target.attack_log += "\[[time_stamp()]\]<font color='orange'> Attacked by [user.name] ([user.ckey]) with [src.name] (INTENT: HARM).</font>"
|
||||
msg_admin_attack("[key_name_admin(user)] attacked [key_name_admin(target)] with [src.name] (INTENT: HARM) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
|
||||
if(injtime == time)
|
||||
user.visible_message("<span class='warning'>[user] is trying to inject [target] with [visible_name]!</span>")
|
||||
else
|
||||
user.visible_message("<span class='warning'>[user] begins hunting for an injection port on [target]'s suit!</span>")
|
||||
|
||||
return
|
||||
if(!do_mob(user, target, injtime))
|
||||
return
|
||||
|
||||
user.visible_message("<span class='danger'>[user] stabs [target] in \the [hit_area] with [src.name]!</span>")
|
||||
user.visible_message("<span class='warning'>[user] injects [target] with the syringe!</span>")
|
||||
|
||||
if(affecting.take_damage(3))
|
||||
H.UpdateDamageIcon()
|
||||
var/trans
|
||||
if(ismob(target))
|
||||
var/contained = reagentlist()
|
||||
trans = reagents.trans_to_mob(target, amount_per_transfer_from_this, CHEM_BLOOD)
|
||||
admin_inject_log(user, target, src, contained, trans)
|
||||
else
|
||||
trans = reagents.trans_to(target, amount_per_transfer_from_this)
|
||||
user << "<span class='notice'>You inject [trans] units of the solution. The syringe now contains [src.reagents.total_volume] units.</span>"
|
||||
if (reagents.total_volume <= 0 && mode == SYRINGE_INJECT)
|
||||
mode = SYRINGE_DRAW
|
||||
update_icon()
|
||||
|
||||
else
|
||||
user.visible_message("<span class='danger'>[user] stabs [target] with [src.name]!</span>")
|
||||
target.take_organ_damage(3)// 7 is the same as crowbar punch
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/update_icon()
|
||||
overlays.Cut()
|
||||
|
||||
if(mode == SYRINGE_BROKEN)
|
||||
icon_state = "broken"
|
||||
return
|
||||
|
||||
var/rounded_vol = round(reagents.total_volume, round(reagents.maximum_volume / 3))
|
||||
if(ismob(loc))
|
||||
var/injoverlay
|
||||
switch(mode)
|
||||
if (SYRINGE_DRAW)
|
||||
injoverlay = "draw"
|
||||
if (SYRINGE_INJECT)
|
||||
injoverlay = "inject"
|
||||
overlays += injoverlay
|
||||
icon_state = "[rounded_vol]"
|
||||
item_state = "syringe_[rounded_vol]"
|
||||
|
||||
if(reagents.total_volume)
|
||||
filling = image('icons/obj/reagentfillings.dmi', src, "syringe10")
|
||||
|
||||
filling.icon_state = "syringe[rounded_vol]"
|
||||
|
||||
filling.color = reagents.get_color()
|
||||
overlays += filling
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/proc/syringestab(mob/living/carbon/target as mob, mob/living/carbon/user as mob)
|
||||
if(istype(target, /mob/living/carbon/human))
|
||||
|
||||
var/mob/living/carbon/human/H = target
|
||||
|
||||
var/target_zone = ran_zone(check_zone(user.zone_sel.selecting, target))
|
||||
var/obj/item/organ/external/affecting = H.get_organ(target_zone)
|
||||
|
||||
if (!affecting || affecting.is_stump())
|
||||
user << "<span class='danger'>They are missing that limb!</span>"
|
||||
return
|
||||
|
||||
var/hit_area = affecting.name
|
||||
|
||||
if((user != target) && H.check_shields(7, src, user, "\the [src]"))
|
||||
return
|
||||
|
||||
if (target != user && H.getarmor(target_zone, "melee") > 5 && prob(50))
|
||||
for(var/mob/O in viewers(world.view, user))
|
||||
O.show_message(text("\red <B>[user] tries to stab [target] in \the [hit_area] with [src.name], but the attack is deflected by armor!</B>"), 1)
|
||||
user.remove_from_mob(src)
|
||||
qdel(src)
|
||||
|
||||
user.attack_log += "\[[time_stamp()]\]<font color='red'> Attacked [target.name] ([target.ckey]) with \the [src] (INTENT: HARM).</font>"
|
||||
target.attack_log += "\[[time_stamp()]\]<font color='orange'> Attacked by [user.name] ([user.ckey]) with [src.name] (INTENT: HARM).</font>"
|
||||
msg_admin_attack("[key_name_admin(user)] attacked [key_name_admin(target)] with [src.name] (INTENT: HARM) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
|
||||
|
||||
return
|
||||
|
||||
user.visible_message("<span class='danger'>[user] stabs [target] in \the [hit_area] with [src.name]!</span>")
|
||||
|
||||
if(affecting.take_damage(3))
|
||||
H.UpdateDamageIcon()
|
||||
|
||||
else
|
||||
user.visible_message("<span class='danger'>[user] stabs [target] with [src.name]!</span>")
|
||||
target.take_organ_damage(3)// 7 is the same as crowbar punch
|
||||
|
||||
|
||||
|
||||
var/syringestab_amount_transferred = rand(0, (reagents.total_volume - 5)) //nerfed by popular demand
|
||||
var/contained_reagents = reagents.get_reagents()
|
||||
var/trans = reagents.trans_to_mob(target, syringestab_amount_transferred, CHEM_BLOOD)
|
||||
if(isnull(trans)) trans = 0
|
||||
admin_inject_log(user, target, src, contained_reagents, trans, violent=1)
|
||||
break_syringe(target, user)
|
||||
var/syringestab_amount_transferred = rand(0, (reagents.total_volume - 5)) //nerfed by popular demand
|
||||
var/contained_reagents = reagents.get_reagents()
|
||||
var/trans = reagents.trans_to_mob(target, syringestab_amount_transferred, CHEM_BLOOD)
|
||||
if(isnull(trans)) trans = 0
|
||||
admin_inject_log(user, target, src, contained_reagents, trans, violent=1)
|
||||
break_syringe(target, user)
|
||||
|
||||
proc/break_syringe(mob/living/carbon/target, mob/living/carbon/user)
|
||||
desc += " It is broken."
|
||||
mode = SYRINGE_BROKEN
|
||||
if(target)
|
||||
add_blood(target)
|
||||
if(user)
|
||||
add_fingerprint(user)
|
||||
update_icon()
|
||||
/obj/item/weapon/reagent_containers/syringe/proc/break_syringe(mob/living/carbon/target, mob/living/carbon/user)
|
||||
desc += " It is broken."
|
||||
mode = SYRINGE_BROKEN
|
||||
if(target)
|
||||
add_blood(target)
|
||||
if(user)
|
||||
add_fingerprint(user)
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/ld50_syringe
|
||||
name = "Lethal Injection Syringe"
|
||||
@@ -287,13 +285,13 @@
|
||||
visible_name = "a giant syringe"
|
||||
time = 300
|
||||
|
||||
afterattack(obj/target, mob/user, flag)
|
||||
if(mode == SYRINGE_DRAW && ismob(target)) // No drawing 50 units of blood at once
|
||||
user << "<span class='notice'>This needle isn't designed for drawing blood.</span>"
|
||||
return
|
||||
if(user.a_intent == "hurt" && ismob(target)) // No instant injecting
|
||||
user << "<span class='notice'>This syringe is too big to stab someone with it.</span>"
|
||||
..()
|
||||
/obj/item/weapon/reagent_containers/syringe/ld50_syringe/afterattack(obj/target, mob/user, flag)
|
||||
if(mode == SYRINGE_DRAW && ismob(target)) // No drawing 50 units of blood at once
|
||||
user << "<span class='notice'>This needle isn't designed for drawing blood.</span>"
|
||||
return
|
||||
if(user.a_intent == "hurt" && ismob(target)) // No instant injecting
|
||||
user << "<span class='notice'>This syringe is too big to stab someone with it.</span>"
|
||||
..()
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// Syringes. END
|
||||
@@ -302,44 +300,47 @@
|
||||
/obj/item/weapon/reagent_containers/syringe/inaprovaline
|
||||
name = "Syringe (inaprovaline)"
|
||||
desc = "Contains inaprovaline - used to stabilize patients."
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("inaprovaline", 15)
|
||||
mode = SYRINGE_INJECT
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/inaprovaline/New()
|
||||
..()
|
||||
reagents.add_reagent("inaprovaline", 15)
|
||||
mode = SYRINGE_INJECT
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/antitoxin
|
||||
name = "Syringe (anti-toxin)"
|
||||
desc = "Contains anti-toxins."
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("anti_toxin", 15)
|
||||
mode = SYRINGE_INJECT
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/antitoxin/New()
|
||||
..()
|
||||
reagents.add_reagent("anti_toxin", 15)
|
||||
mode = SYRINGE_INJECT
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/antiviral
|
||||
name = "Syringe (spaceacillin)"
|
||||
desc = "Contains antiviral agents."
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("spaceacillin", 15)
|
||||
mode = SYRINGE_INJECT
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/antiviral/New()
|
||||
..()
|
||||
reagents.add_reagent("spaceacillin", 15)
|
||||
mode = SYRINGE_INJECT
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/drugs
|
||||
name = "Syringe (drugs)"
|
||||
desc = "Contains aggressive drugs meant for torture."
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("space_drugs", 5)
|
||||
reagents.add_reagent("mindbreaker", 5)
|
||||
reagents.add_reagent("cryptobiolin", 5)
|
||||
mode = SYRINGE_INJECT
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/ld50_syringe/choral
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("chloralhydrate", 50)
|
||||
mode = SYRINGE_INJECT
|
||||
update_icon()
|
||||
/obj/item/weapon/reagent_containers/syringe/drugs/New()
|
||||
..()
|
||||
reagents.add_reagent("space_drugs", 5)
|
||||
reagents.add_reagent("mindbreaker", 5)
|
||||
reagents.add_reagent("cryptobiolin", 5)
|
||||
mode = SYRINGE_INJECT
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/ld50_syringe/choral/New()
|
||||
..()
|
||||
reagents.add_reagent("chloralhydrate", 50)
|
||||
mode = SYRINGE_INJECT
|
||||
update_icon()
|
||||
|
||||
@@ -153,8 +153,12 @@
|
||||
max_duration = 100
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/internal/brain/sponge = target.internal_organs_by_name["brain"]
|
||||
return ..() && (!sponge || !sponge.damage)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if(affected.organ_tag == BP_HEAD)
|
||||
var/obj/item/organ/internal/brain/sponge = target.internal_organs_by_name["brain"]
|
||||
return ..() && (!sponge || !sponge.damage)
|
||||
else
|
||||
return ..()
|
||||
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user