Merge branch 'master' into upstream-merge-12635
@@ -62,6 +62,7 @@
|
|||||||
#define HOLOMAP_AREACOLOR_ARRIVALS "#0000FFCC"
|
#define HOLOMAP_AREACOLOR_ARRIVALS "#0000FFCC"
|
||||||
#define HOLOMAP_AREACOLOR_ESCAPE "#FF0000CC"
|
#define HOLOMAP_AREACOLOR_ESCAPE "#FF0000CC"
|
||||||
#define HOLOMAP_AREACOLOR_DORMS "#CCCC0099"
|
#define HOLOMAP_AREACOLOR_DORMS "#CCCC0099"
|
||||||
|
#define HOLOMAP_AREACOLOR_CIV "#3ea800" //VOREStation Addition
|
||||||
|
|
||||||
#define LIST_NUMERIC_SET(L, I, V) if(!L) { L = list(); } if (L.len < I) { L.len = I; } L[I] = V
|
#define LIST_NUMERIC_SET(L, I, V) if(!L) { L = list(); } if (L.len < I) { L.len = I; } L[I] = V
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
#define isitem(D) istype(D, /obj/item)
|
#define isitem(D) istype(D, /obj/item)
|
||||||
|
|
||||||
#define isradio(A) istype(A, /obj/item/device/radio)
|
#define isradio(A) istype(A, /obj/item/device/radio)
|
||||||
|
|
||||||
#define isairlock(A) istype(A, /obj/machinery/door/airlock)
|
#define isairlock(A) istype(A, /obj/machinery/door/airlock)
|
||||||
|
|
||||||
@@ -23,6 +23,8 @@
|
|||||||
|
|
||||||
#define ismecha(A) istype(A, /obj/mecha)
|
#define ismecha(A) istype(A, /obj/mecha)
|
||||||
|
|
||||||
|
#define isstructure(A) istype(A, /obj/structure)
|
||||||
|
|
||||||
//---------------
|
//---------------
|
||||||
//#define isarea(D) istype(D, /area) //Built in
|
//#define isarea(D) istype(D, /area) //Built in
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
/*
|
||||||
|
* Misc
|
||||||
|
*/
|
||||||
/datum/crafting_recipe/cloth
|
/datum/crafting_recipe/cloth
|
||||||
name = "Cloth bolt"
|
name = "Cloth bolt"
|
||||||
result = /obj/item/stack/material/cloth
|
result = /obj/item/stack/material/cloth
|
||||||
@@ -13,9 +16,8 @@
|
|||||||
category = CAT_PRIMAL
|
category = CAT_PRIMAL
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Clothing
|
* Primitive Clothing
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/datum/crafting_recipe/primitive_clothes
|
/datum/crafting_recipe/primitive_clothes
|
||||||
name = "primitive clothes"
|
name = "primitive clothes"
|
||||||
result = /obj/item/clothing/under/primitive
|
result = /obj/item/clothing/under/primitive
|
||||||
|
|||||||
@@ -106,3 +106,16 @@
|
|||||||
cost = 35
|
cost = 35
|
||||||
containertype = /obj/structure/closet/crate/aether
|
containertype = /obj/structure/closet/crate/aether
|
||||||
containername = "Emergency crate"
|
containername = "Emergency crate"
|
||||||
|
|
||||||
|
/datum/supply_pack/atmos/firefighting
|
||||||
|
name = "Firefighting equipment"
|
||||||
|
contains = list(
|
||||||
|
/obj/item/clothing/suit/fire/heavy = 2,
|
||||||
|
/obj/item/weapon/tank/oxygen/red = 2,
|
||||||
|
/obj/item/weapon/watertank/atmos = 2,
|
||||||
|
/obj/item/device/flashlight = 2,
|
||||||
|
/obj/item/clothing/head/hardhat/firefighter/atmos = 2
|
||||||
|
)
|
||||||
|
cost = 35
|
||||||
|
containertype = /obj/structure/closet/crate/aether
|
||||||
|
containername = "Firefighting crate"
|
||||||
@@ -288,6 +288,16 @@
|
|||||||
containername = "Riot armor crate"
|
containername = "Riot armor crate"
|
||||||
access = access_armory
|
access = access_armory
|
||||||
|
|
||||||
|
/datum/supply_pack/security/riot_sprayer
|
||||||
|
name = "Gear - Riot sprayer"
|
||||||
|
contains = list(
|
||||||
|
/obj/item/weapon/watertank/pepperspray
|
||||||
|
)
|
||||||
|
cost = 40
|
||||||
|
containertype = /obj/structure/closet/crate/secure/lawson
|
||||||
|
containername = "Riot sprayer crate"
|
||||||
|
access = access_armory
|
||||||
|
|
||||||
/datum/supply_pack/security/ablative_armor
|
/datum/supply_pack/security/ablative_armor
|
||||||
name = "Armor - Ablative"
|
name = "Armor - Ablative"
|
||||||
contains = list(
|
contains = list(
|
||||||
|
|||||||
@@ -703,7 +703,7 @@
|
|||||||
desc = "Spooky!"
|
desc = "Spooky!"
|
||||||
gender = PLURAL
|
gender = PLURAL
|
||||||
icon = 'icons/obj/wizard.dmi'
|
icon = 'icons/obj/wizard.dmi'
|
||||||
icon_state = "ectoplasm"
|
icon_state = "ectoplasm2"
|
||||||
|
|
||||||
/obj/item/weapon/research
|
/obj/item/weapon/research
|
||||||
name = "research debugging device"
|
name = "research debugging device"
|
||||||
|
|||||||
@@ -188,3 +188,6 @@
|
|||||||
|
|
||||||
/area/holodeck/source_patient_ward
|
/area/holodeck/source_patient_ward
|
||||||
name = "\improper Holodeck - Patient Ward"
|
name = "\improper Holodeck - Patient Ward"
|
||||||
|
|
||||||
|
/area/holodeck/the_uwu_zone
|
||||||
|
name = "\improper Holodeck - Inside"
|
||||||
|
|||||||
@@ -185,6 +185,7 @@
|
|||||||
icon_state = "cryo_rear"
|
icon_state = "cryo_rear"
|
||||||
anchored = TRUE
|
anchored = TRUE
|
||||||
dir = WEST
|
dir = WEST
|
||||||
|
density = TRUE
|
||||||
|
|
||||||
//Cryopods themselves.
|
//Cryopods themselves.
|
||||||
/obj/machinery/cryopod
|
/obj/machinery/cryopod
|
||||||
@@ -522,13 +523,13 @@
|
|||||||
control_computer.frozen_crew += "[to_despawn.real_name], [to_despawn.mind.role_alt_title] - [stationtime2text()]"
|
control_computer.frozen_crew += "[to_despawn.real_name], [to_despawn.mind.role_alt_title] - [stationtime2text()]"
|
||||||
control_computer._admin_logs += "[key_name(to_despawn)] ([to_despawn.mind.role_alt_title]) at [stationtime2text()]"
|
control_computer._admin_logs += "[key_name(to_despawn)] ([to_despawn.mind.role_alt_title]) at [stationtime2text()]"
|
||||||
log_and_message_admins("[key_name(to_despawn)] ([to_despawn.mind.role_alt_title]) entered cryostorage.")
|
log_and_message_admins("[key_name(to_despawn)] ([to_despawn.mind.role_alt_title]) entered cryostorage.")
|
||||||
|
|
||||||
//VOREStation Edit Start
|
//VOREStation Edit Start
|
||||||
var/depart_announce = TRUE
|
var/depart_announce = TRUE
|
||||||
|
|
||||||
if(istype(to_despawn, /mob/living/dominated_brain))
|
if(istype(to_despawn, /mob/living/dominated_brain))
|
||||||
depart_announce = FALSE
|
depart_announce = FALSE
|
||||||
|
|
||||||
if(depart_announce)
|
if(depart_announce)
|
||||||
announce.autosay("[to_despawn.real_name], [to_despawn.mind.role_alt_title], [on_store_message]", "[on_store_name]", announce_channel, using_map.get_map_levels(z, TRUE, om_range = DEFAULT_OVERMAP_RANGE))
|
announce.autosay("[to_despawn.real_name], [to_despawn.mind.role_alt_title], [on_store_message]", "[on_store_name]", announce_channel, using_map.get_map_levels(z, TRUE, om_range = DEFAULT_OVERMAP_RANGE))
|
||||||
visible_message("<span class='notice'>\The [initial(name)] [on_store_visible_message_1] [to_despawn.real_name] [on_store_visible_message_2]</span>", 3)
|
visible_message("<span class='notice'>\The [initial(name)] [on_store_visible_message_1] [to_despawn.real_name] [on_store_visible_message_2]</span>", 3)
|
||||||
|
|||||||
@@ -167,10 +167,43 @@
|
|||||||
storage_slots = 6
|
storage_slots = 6
|
||||||
drop_sound = 'sound/items/drop/box.ogg'
|
drop_sound = 'sound/items/drop/box.ogg'
|
||||||
use_sound = 'sound/items/storage/box.ogg'
|
use_sound = 'sound/items/storage/box.ogg'
|
||||||
|
var/open = 0
|
||||||
|
var/open_state
|
||||||
|
var/closed_state
|
||||||
|
|
||||||
/obj/item/weapon/storage/box/fancy/chewables/tobacco/update_icon()
|
/obj/item/weapon/storage/box/fancy/chewables/tobacco/nico/New()
|
||||||
icon_state = "[initial(icon_state)][contents.len]"
|
if(!open_state)
|
||||||
|
open_state = "[initial(icon_state)]0"
|
||||||
|
if(!closed_state)
|
||||||
|
closed_state = "[initial(icon_state)]"
|
||||||
|
..()
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/box/fancy/chewables/tobacco/nico/update_icon()
|
||||||
|
cut_overlays()
|
||||||
|
if(open)
|
||||||
|
icon_state = open_state
|
||||||
|
if(contents.len >= 1)
|
||||||
|
add_overlay("chew_nico[contents.len]")
|
||||||
|
else
|
||||||
|
icon_state = closed_state
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/box/fancy/chewables/tobacco/nico/open(mob/user as mob)
|
||||||
|
if(open)
|
||||||
|
return
|
||||||
|
open = TRUE
|
||||||
|
if(contents.len == 0)
|
||||||
|
icon_state = "[initial(icon_state)]_empty"
|
||||||
|
else
|
||||||
|
update_icon()
|
||||||
|
..()
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/box/fancy/chewables/tobacco/nico/close(mob/user as mob)
|
||||||
|
open = FALSE
|
||||||
|
if(contents.len == 0)
|
||||||
|
icon_state = "[initial(icon_state)]_empty"
|
||||||
|
else
|
||||||
|
update_icon()
|
||||||
|
..()
|
||||||
|
|
||||||
/obj/item/clothing/mask/chewable/candy
|
/obj/item/clothing/mask/chewable/candy
|
||||||
name = "wad"
|
name = "wad"
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
//cleansed 9/15/2012 17:48
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
CONTAINS:
|
CONTAINS:
|
||||||
MATCHES
|
MATCHES
|
||||||
@@ -473,6 +471,17 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
|||||||
item_state = "cobpipe"
|
item_state = "cobpipe"
|
||||||
chem_volume = 35
|
chem_volume = 35
|
||||||
|
|
||||||
|
/obj/item/clothing/mask/smokable/pipe/bonepipe
|
||||||
|
name = "Europan bone pipe"
|
||||||
|
desc = "A smoking pipe made out of the bones of the Europan bone whale."
|
||||||
|
description_fluff = "While most commonly associated with bone charms, bones from various sea creatures on Europa are used in a \
|
||||||
|
variety of goods, such as this smoking pipe. While smoking in submarines is often an uncommon occurrence, due to a lack of \
|
||||||
|
available air or space, these pipes are a common sight in the many stations of Europa. Higher-quality pipes typically have \
|
||||||
|
scenes etched into their bones, and can tell the story of their owner's time on Europa."
|
||||||
|
icon_state = "bonepipe"
|
||||||
|
item_state = "bonepipe"
|
||||||
|
chem_volume = 30
|
||||||
|
|
||||||
///////////////
|
///////////////
|
||||||
//CUSTOM CIGS//
|
//CUSTOM CIGS//
|
||||||
///////////////
|
///////////////
|
||||||
|
|||||||
@@ -9,16 +9,12 @@
|
|||||||
/obj/item/weapon/book/manual/standard_operating_procedure/New()
|
/obj/item/weapon/book/manual/standard_operating_procedure/New()
|
||||||
..()
|
..()
|
||||||
dat = {"
|
dat = {"
|
||||||
|
|
||||||
<html><head>
|
<html><head>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<iframe width='100%' height='97%' src="[config.wikiurl]Standard_Operating_Procedure&printable=yes&remove_links=1" frameborder="0" id="main_frame"></iframe>
|
<iframe width='100%' height='97%' src="[config.wikiurl]Standard_Operating_Procedure&printable=yes&remove_links=1" frameborder="0" id="main_frame"></iframe>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
|
|
||||||
"}
|
"}
|
||||||
|
|
||||||
/obj/item/weapon/book/manual/command_guide
|
/obj/item/weapon/book/manual/command_guide
|
||||||
@@ -32,16 +28,12 @@
|
|||||||
/obj/item/weapon/book/manual/command_guide/New()
|
/obj/item/weapon/book/manual/command_guide/New()
|
||||||
..()
|
..()
|
||||||
dat = {"
|
dat = {"
|
||||||
|
|
||||||
<html><head>
|
<html><head>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<iframe width='100%' height='97%' src="[config.wikiurl]Chain_of_Command&printable=yes&remove_links=1" frameborder="0" id="main_frame"></iframe>
|
<iframe width='100%' height='97%' src="[config.wikiurl]Chain_of_Command&printable=yes&remove_links=1" frameborder="0" id="main_frame"></iframe>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
|
|
||||||
"}
|
"}
|
||||||
|
|
||||||
//accurate as of 2/17/21 Extra credit to document editting and proofreading editing to Luna
|
//accurate as of 2/17/21 Extra credit to document editting and proofreading editing to Luna
|
||||||
@@ -56,19 +48,19 @@
|
|||||||
/obj/item/weapon/book/manual/cook_guide/New()
|
/obj/item/weapon/book/manual/cook_guide/New()
|
||||||
..()
|
..()
|
||||||
dat = {"
|
dat = {"
|
||||||
|
|
||||||
<html>
|
<html>
|
||||||
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<style>
|
<style>
|
||||||
h1 {font-size: 23px; margin: 15px 0px 5px; text-align: center;}
|
h1 {font-size: 23px; margin: 15px 0px 5px; text-align: center;}
|
||||||
h2 {font-size: 20px; margin: 15px 0px 5px;}
|
h2 {font-size: 20px; margin: 15px 0px 5px;}
|
||||||
h3 {font-size: 18px; margin: 15px 0px 5px;}
|
h3 {font-size: 18px; margin: 15px 0px 5px;}
|
||||||
h4 {font-size: 14px; margin: 15px 0px 5px;}
|
h4 {font-size: 14px; margin: 15px 0px 5px;}
|
||||||
h5 {font-size: 10px; margin: 15px 0px 5px; text-align: center;}
|
h5 {font-size: 10px; margin: 15px 0px 5px; text-align: center;}
|
||||||
li {margin: 2px 0px 2px 15px;}
|
li {margin: 2px 0px 2px 15px;}
|
||||||
ul {margin: 5px; padding: 0px;}
|
ul {margin: 5px; padding: 0px;}
|
||||||
ol {margin: 5px; padding: 0px 15px;}
|
ol {margin: 5px; padding: 0px 15px;}
|
||||||
body {font-size: 13px; font-family: arial;}
|
body {font-size: 13px; font-family: Garamond;}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
@@ -215,7 +207,6 @@
|
|||||||
2 parts Whiskey, 1 part Space Cola
|
2 parts Whiskey, 1 part Space Cola
|
||||||
<h3>Binman Bliss:</h3>
|
<h3>Binman Bliss:</h3>
|
||||||
1 part Sake, 1 part Tequila
|
1 part Sake, 1 part Tequila
|
||||||
|
|
||||||
<h1>High Alcohol</h1>
|
<h1>High Alcohol</h1>
|
||||||
<h3>Elysium Facepunch:</h3>
|
<h3>Elysium Facepunch:</h3>
|
||||||
1 part Kahlua, 1 part Lemon Juice
|
1 part Kahlua, 1 part Lemon Juice
|
||||||
@@ -255,7 +246,6 @@
|
|||||||
3 Margarita, 2 Mountain Wind, 1 Emeraldine Melon Liquor
|
3 Margarita, 2 Mountain Wind, 1 Emeraldine Melon Liquor
|
||||||
<h3>Mudslide:</h3>
|
<h3>Mudslide:</h3>
|
||||||
1 Black Russian, 1 Irish Cream
|
1 Black Russian, 1 Irish Cream
|
||||||
|
|
||||||
<h1>Very High Alcohol (Serve sparingly unless a patron proves they can handle a lot)</h1>
|
<h1>Very High Alcohol (Serve sparingly unless a patron proves they can handle a lot)</h1>
|
||||||
<h3>Anti-Freeze:</h3>
|
<h3>Anti-Freeze:</h3>
|
||||||
1 part Cream, 1 part Ice, 1 parts Vodka <b>(Feels cold but actually warms. Allergy Warning: Do not serve to Teshari or Promethians, or other heat vulnerable species, they will die if you do, if unsure do not serve)</b>
|
1 part Cream, 1 part Ice, 1 parts Vodka <b>(Feels cold but actually warms. Allergy Warning: Do not serve to Teshari or Promethians, or other heat vulnerable species, they will die if you do, if unsure do not serve)</b>
|
||||||
@@ -282,7 +272,6 @@
|
|||||||
<h6>Good Luck figuring out the order and ratio :)</h6>
|
<h6>Good Luck figuring out the order and ratio :)</h6>
|
||||||
<h3>Fire Punch:</h3>
|
<h3>Fire Punch:</h3>
|
||||||
1 part Sugar, 2 part Rum <b>(Technically the strongest thing you can make, but it metabolizes slowish so it's slightly less dangerous than some others)</b>
|
1 part Sugar, 2 part Rum <b>(Technically the strongest thing you can make, but it metabolizes slowish so it's slightly less dangerous than some others)</b>
|
||||||
|
|
||||||
<h1>Non Alcoholic Drinks</h1>
|
<h1>Non Alcoholic Drinks</h1>
|
||||||
<h3>Appleade:</h3>
|
<h3>Appleade:</h3>
|
||||||
1 part Apple Juice, 1 part Sugar, 1 part Soda Water
|
1 part Apple Juice, 1 part Sugar, 1 part Soda Water
|
||||||
@@ -317,7 +306,6 @@
|
|||||||
<h3>Sweet Tea:</h3>
|
<h3>Sweet Tea:</h3>
|
||||||
2 parts Ice Tea, 1 part Sugar
|
2 parts Ice Tea, 1 part Sugar
|
||||||
<p><b>Note:</b> There are many more drinks you can mix, these are just ones using resources you will almost always have available, the Extranet has good websites to check found here: https://wiki.vore-station.net/Guide_to_Food_and_Drink ass well as here: https://vore-station.net/infodump/recipes_drinks.html
|
<p><b>Note:</b> There are many more drinks you can mix, these are just ones using resources you will almost always have available, the Extranet has good websites to check found here: https://wiki.vore-station.net/Guide_to_Food_and_Drink ass well as here: https://vore-station.net/infodump/recipes_drinks.html
|
||||||
|
|
||||||
<h1>Part 1: The Basics</h1>
|
<h1>Part 1: The Basics</h1>
|
||||||
<p>First and foremost, making drinks is about understanding measurements. Drinks are measured in units a pint is 60 units, a half pint 30, and ratios of those units can create certain drinks.</p>
|
<p>First and foremost, making drinks is about understanding measurements. Drinks are measured in units a pint is 60 units, a half pint 30, and ratios of those units can create certain drinks.</p>
|
||||||
<p>The ratios of these drinks are denoted in "Parts". For example, Grog is 1 part rum and 1 part water mixed in a container that holds liquid. This means 1 unit of Rum and 1 unit of Water can make Grog, as can 30 units of Rum and 30 units of Water. Ratios aren't picky, if you have 5 units of Rum and 10 of Water in a glass, it will turn as much as possible into Grog, and the rest will remain as water (In this case, 10 units of Grog and 5 units of Water will be in the glass). When mixing drinks, you may accidentally have extra of an ingredient such as in the previous example, but this can easily be rectified by placing the drink in one of the Dispensers, and using the interface at the bottom to remove however many units you put extra, so don't worry about sloppiness as long as you clean up your mistakes!</p>
|
<p>The ratios of these drinks are denoted in "Parts". For example, Grog is 1 part rum and 1 part water mixed in a container that holds liquid. This means 1 unit of Rum and 1 unit of Water can make Grog, as can 30 units of Rum and 30 units of Water. Ratios aren't picky, if you have 5 units of Rum and 10 of Water in a glass, it will turn as much as possible into Grog, and the rest will remain as water (In this case, 10 units of Grog and 5 units of Water will be in the glass). When mixing drinks, you may accidentally have extra of an ingredient such as in the previous example, but this can easily be rectified by placing the drink in one of the Dispensers, and using the interface at the bottom to remove however many units you put extra, so don't worry about sloppiness as long as you clean up your mistakes!</p>
|
||||||
@@ -341,9 +329,6 @@
|
|||||||
<h2>Part 3: Closing Remarks</h2>
|
<h2>Part 3: Closing Remarks</h2>
|
||||||
<p>This all may seem daunting at a glance; so many recipes to learn, and a "lot" to keep in mind. But really it's not - tending the Bar is mostly about going with the flow of things and providing a good times, and drinks just provide liquid courage to make a good time easier. Take a deep breath if you ever feel overwhelmed, and handle one order at a time. You can do it! Don't feel the need to know every recipe, just learn your favorites and go from there; the rest is here or online if someone asks for it! If somebody asks you to give them anything without a specific request, don't panic: evalulate their likes and tolerance level, and try your best to give them something nice!</p>
|
<p>This all may seem daunting at a glance; so many recipes to learn, and a "lot" to keep in mind. But really it's not - tending the Bar is mostly about going with the flow of things and providing a good times, and drinks just provide liquid courage to make a good time easier. Take a deep breath if you ever feel overwhelmed, and handle one order at a time. You can do it! Don't feel the need to know every recipe, just learn your favorites and go from there; the rest is here or online if someone asks for it! If somebody asks you to give them anything without a specific request, don't panic: evalulate their likes and tolerance level, and try your best to give them something nice!</p>
|
||||||
</body>
|
</body>
|
||||||
<<<<<<< HEAD
|
|
||||||
</html> "}
|
|
||||||
=======
|
|
||||||
</html> "}
|
</html> "}
|
||||||
|
|
||||||
/obj/item/weapon/book/manual/rotary_electric_generator
|
/obj/item/weapon/book/manual/rotary_electric_generator
|
||||||
@@ -368,33 +353,24 @@
|
|||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
Technical Order (TO) 1-33-34-2 <br>
|
Technical Order (TO) 1-33-34-2 <br>
|
||||||
<h1>Operator's Manual - Rotary Electric Generator, D-Type</h1><br><br>
|
<h1>Operator's Manual - Rotary Electric Generator, D-Type</h1><br><br>
|
||||||
|
|
||||||
Supporting Data: <br>
|
Supporting Data: <br>
|
||||||
- TO 1-33-34-4-1 Illustrated Parts Breakdown - Rotary Electric Generator, D-Type <br>
|
- TO 1-33-34-4-1 Illustrated Parts Breakdown - Rotary Electric Generator, D-Type <br>
|
||||||
- TO 1-33-34-6 Inspection Work Cards - Rotary Electric Generator, D-Type <br><br>
|
- TO 1-33-34-6 Inspection Work Cards - Rotary Electric Generator, D-Type <br><br>
|
||||||
|
|
||||||
Support Equipment: <br>
|
Support Equipment: <br>
|
||||||
- Torque Wrench, 100-80,000 inch-pounds <br>
|
- Torque Wrench, 100-80,000 inch-pounds <br>
|
||||||
- Composite Tool Kit, Standard <br>
|
- Composite Tool Kit, Standard <br>
|
||||||
- Multitool with Lead Kit, Wire Kit <br> <br>
|
- Multitool with Lead Kit, Wire Kit <br> <br>
|
||||||
|
|
||||||
Required Supplies: <br>
|
Required Supplies: <br>
|
||||||
- stainless steel, 10,000cm3 <br>
|
- stainless steel, 10,000cm3 <br>
|
||||||
- lubrication, petrolatum, 6000ml <br>
|
- lubrication, petrolatum, 6000ml <br>
|
||||||
- electrical wiring, 5m <br>
|
- electrical wiring, 5m <br>
|
||||||
- component set, capacitors (any grade) <br>
|
- component set, capacitors (any grade) <br>
|
||||||
- circuitry board, REG <br> <br>
|
- circuitry board, REG <br> <br>
|
||||||
|
|
||||||
|
|
||||||
<h1>SETUP AND OPERATING PROCEDURES</h1> <br> <br>
|
<h1>SETUP AND OPERATING PROCEDURES</h1> <br> <br>
|
||||||
|
|
||||||
Setup: <br> <br>
|
Setup: <br> <br>
|
||||||
|
|
||||||
CAUTION: Do not remove too much air from the work space or personnel may be exposed to hypoxia or similar effects. <br> <br>
|
CAUTION: Do not remove too much air from the work space or personnel may be exposed to hypoxia or similar effects. <br> <br>
|
||||||
|
|
||||||
1. Prepare setup area. Remove machinery, debris, foreign objects, people, and extra air. <br> <br>
|
1. Prepare setup area. Remove machinery, debris, foreign objects, people, and extra air. <br> <br>
|
||||||
|
|
||||||
2. Lay out preliminary electrical wiring. <br>
|
2. Lay out preliminary electrical wiring. <br>
|
||||||
@@ -418,9 +394,7 @@
|
|||||||
|
|
||||||
9. Wait for assembly to finish inflating, and the unit is ready for service. <br> <br>
|
9. Wait for assembly to finish inflating, and the unit is ready for service. <br> <br>
|
||||||
|
|
||||||
|
|
||||||
Operating Procedures: <br> <br>
|
Operating Procedures: <br> <br>
|
||||||
|
|
||||||
NOTE: Operation of REG-D type generators requires significant physical effort. Ensure users are provided adequare nutrition and hydration throughout the working period. <br> <br>
|
NOTE: Operation of REG-D type generators requires significant physical effort. Ensure users are provided adequare nutrition and hydration throughout the working period. <br> <br>
|
||||||
|
|
||||||
1. Designate the individual who will be operating the REG-D. <br> <br>
|
1. Designate the individual who will be operating the REG-D. <br> <br>
|
||||||
@@ -428,7 +402,6 @@
|
|||||||
2. Provide a safety briefing regarding nutritional preparedness and physical ability. <br> <br>
|
2. Provide a safety briefing regarding nutritional preparedness and physical ability. <br> <br>
|
||||||
|
|
||||||
NOTE: Stretching is highly recommended before and after any operation session. <br> <br>
|
NOTE: Stretching is highly recommended before and after any operation session. <br> <br>
|
||||||
|
|
||||||
3. Operator shall board the REG-D track body and ensure there are no unsecured objects on the path. <br> <br>
|
3. Operator shall board the REG-D track body and ensure there are no unsecured objects on the path. <br> <br>
|
||||||
|
|
||||||
4. Once ready, Operator may begin running at own pace. Do not sprint. Maintain an even pace and proper running form for optimal energy generation. <br> <br>
|
4. Once ready, Operator may begin running at own pace. Do not sprint. Maintain an even pace and proper running form for optimal energy generation. <br> <br>
|
||||||
@@ -436,10 +409,7 @@
|
|||||||
5. Continue to run on the REG-D track body until sufficient energy is stored in systems or Operator is no longer able or willing to continue. <br> <br>
|
5. Continue to run on the REG-D track body until sufficient energy is stored in systems or Operator is no longer able or willing to continue. <br> <br>
|
||||||
|
|
||||||
6. To end a session, carefully lower forward running speed until the track body comes to a complete stop, then disembark the REG-D. <br> <br>
|
6. To end a session, carefully lower forward running speed until the track body comes to a complete stop, then disembark the REG-D. <br> <br>
|
||||||
|
|
||||||
|
|
||||||
REFER TO TO 1-33-34-6 FOR MAINTENANCE AND INSPECTION PROCEDURES
|
REFER TO TO 1-33-34-6 FOR MAINTENANCE AND INSPECTION PROCEDURES
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
"}
|
"}
|
||||||
>>>>>>> c10812a251... Merge pull request #12635 from Very-Soft/gbtweaks
|
|
||||||
@@ -1,8 +1,11 @@
|
|||||||
GLOBAL_LIST_BOILERPLATE(all_mops, /obj/item/weapon/mop)
|
GLOBAL_LIST_BOILERPLATE(all_mops, /obj/item/weapon/mop)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Mop
|
||||||
|
*/
|
||||||
/obj/item/weapon/mop
|
/obj/item/weapon/mop
|
||||||
desc = "The world of janitalia wouldn't be complete without a mop."
|
|
||||||
name = "mop"
|
name = "mop"
|
||||||
|
desc = "The world of janitalia wouldn't be complete without a mop."
|
||||||
icon = 'icons/obj/janitor.dmi'
|
icon = 'icons/obj/janitor.dmi'
|
||||||
icon_state = "mop"
|
icon_state = "mop"
|
||||||
force = 3.0
|
force = 3.0
|
||||||
@@ -39,3 +42,38 @@ GLOBAL_LIST_BOILERPLATE(all_mops, /obj/item/weapon/mop)
|
|||||||
if(istype(I, /obj/item/weapon/mop) || istype(I, /obj/item/weapon/soap))
|
if(istype(I, /obj/item/weapon/mop) || istype(I, /obj/item/weapon/soap))
|
||||||
return
|
return
|
||||||
..()
|
..()
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Advanced Mop
|
||||||
|
*/
|
||||||
|
/obj/item/weapon/mop/advanced
|
||||||
|
name = "advanced mop"
|
||||||
|
desc = "No stain will go unclean."
|
||||||
|
icon = 'icons/obj/janitor.dmi'
|
||||||
|
icon_state = "adv_mop"
|
||||||
|
force = 3.5
|
||||||
|
throwforce = 10.5
|
||||||
|
throw_speed = 4
|
||||||
|
throw_range = 10
|
||||||
|
w_class = ITEMSIZE_NORMAL
|
||||||
|
flags = NOCONDUCT
|
||||||
|
attack_verb = list("mopped", "bashed", "bludgeoned", "whacked")
|
||||||
|
|
||||||
|
/obj/item/weapon/mop/advanced/New()
|
||||||
|
create_reagents(30)
|
||||||
|
..()
|
||||||
|
|
||||||
|
/obj/item/weapon/mop/advanced/afterattack(atom/A, mob/user, proximity)
|
||||||
|
if(!proximity) return
|
||||||
|
if(istype(A, /turf) || istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/overlay) || istype(A, /obj/effect/rune))
|
||||||
|
if(reagents.total_volume < 1)
|
||||||
|
to_chat(user, "<span class='notice'>Your mop is dry!</span>")
|
||||||
|
return
|
||||||
|
|
||||||
|
user.visible_message("<span class='warning'>[user] begins to clean \the [get_turf(A)].</span>")
|
||||||
|
|
||||||
|
if(do_after(user, 20))
|
||||||
|
var/turf/T = get_turf(A)
|
||||||
|
if(T)
|
||||||
|
T.clean(src, user)
|
||||||
|
to_chat(user, "<span class='notice'>You have finished mopping!</span>")
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
sprite_sheets = list(
|
sprite_sheets = list(
|
||||||
SPECIES_TESHARI = 'icons/inventory/belt/mob_teshari.dmi',
|
SPECIES_TESHARI = 'icons/inventory/belt/mob_teshari.dmi',
|
||||||
SPECIES_WEREBEAST = 'icons/inventory/belt/mob_vr_werebeast.dmi')
|
SPECIES_WEREBEAST = 'icons/inventory/belt/mob_vr_werebeast.dmi')
|
||||||
|
|
||||||
/obj/item/weapon/storage/belt/explorer
|
/obj/item/weapon/storage/belt/explorer
|
||||||
name = "explorer's belt"
|
name = "explorer's belt"
|
||||||
desc = "A versatile belt with several pouches. It can hold a very wide variety of items, but less items overall than a dedicated belt. Still, it's useful for any explorer who wants to be prepared for anything they might find."
|
desc = "A versatile belt with several pouches. It can hold a very wide variety of items, but less items overall than a dedicated belt. Still, it's useful for any explorer who wants to be prepared for anything they might find."
|
||||||
@@ -51,7 +51,7 @@
|
|||||||
/obj/item/device/mapping_unit,
|
/obj/item/device/mapping_unit,
|
||||||
/obj/item/weapon/kinetic_crusher
|
/obj/item/weapon/kinetic_crusher
|
||||||
)
|
)
|
||||||
|
|
||||||
/obj/item/weapon/storage/belt/explorer/pathfinder
|
/obj/item/weapon/storage/belt/explorer/pathfinder
|
||||||
name = "pathfinder's belt"
|
name = "pathfinder's belt"
|
||||||
desc = "A deluxe belt with many pouches. It can hold a very wide variety of items, but less items overall than a dedicated belt. Still, it's useful for any explorer who wants to be prepared for anything they might find."
|
desc = "A deluxe belt with many pouches. It can hold a very wide variety of items, but less items overall than a dedicated belt. Still, it's useful for any explorer who wants to be prepared for anything they might find."
|
||||||
@@ -60,3 +60,46 @@
|
|||||||
item_state = "explorer_belt"
|
item_state = "explorer_belt"
|
||||||
storage_slots = 7 //two more, bringing it on par with normal belts
|
storage_slots = 7 //two more, bringing it on par with normal belts
|
||||||
max_storage_space = ITEMSIZE_COST_NORMAL * 7
|
max_storage_space = ITEMSIZE_COST_NORMAL * 7
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/belt/miner
|
||||||
|
name = "mining belt"
|
||||||
|
desc = "A versatile and durable looking belt with several pouches and straps. It can hold a very wide variety of items that any typical miner might need out in the deep."
|
||||||
|
icon = 'icons/inventory/belt/item_vr.dmi'
|
||||||
|
icon_state = "mining"
|
||||||
|
item_state = "mining"
|
||||||
|
storage_slots = 6
|
||||||
|
max_w_class = ITEMSIZE_LARGE
|
||||||
|
max_storage_space = ITEMSIZE_COST_NORMAL * 6
|
||||||
|
can_hold = list(
|
||||||
|
/obj/item/weapon/storage/box/samplebags,
|
||||||
|
/obj/item/device/core_sampler,
|
||||||
|
/obj/item/device/beacon_locator,
|
||||||
|
/obj/item/device/radio/beacon,
|
||||||
|
/obj/item/device/measuring_tape,
|
||||||
|
/obj/item/device/flashlight,
|
||||||
|
/obj/item/weapon/cell/device,
|
||||||
|
/obj/item/weapon/pickaxe,
|
||||||
|
/obj/item/weapon/shovel,
|
||||||
|
/obj/item/device/depth_scanner,
|
||||||
|
/obj/item/device/camera,
|
||||||
|
/obj/item/weapon/paper,
|
||||||
|
/obj/item/weapon/photo,
|
||||||
|
/obj/item/weapon/folder,
|
||||||
|
/obj/item/weapon/pen,
|
||||||
|
/obj/item/weapon/folder,
|
||||||
|
/obj/item/weapon/clipboard,
|
||||||
|
/obj/item/weapon/anodevice,
|
||||||
|
/obj/item/clothing/glasses,
|
||||||
|
/obj/item/weapon/tool/wrench,
|
||||||
|
/obj/item/weapon/storage/excavation,
|
||||||
|
/obj/item/weapon/anobattery,
|
||||||
|
/obj/item/device/ano_scanner,
|
||||||
|
/obj/item/weapon/pickaxe/hand,
|
||||||
|
/obj/item/device/xenoarch_multi_tool,
|
||||||
|
/obj/item/weapon/pickaxe/excavationdrill,
|
||||||
|
/obj/item/device/geiger,
|
||||||
|
/obj/item/device/gps,
|
||||||
|
/obj/item/stack/marker_beacon,
|
||||||
|
/obj/item/stack/flag,
|
||||||
|
/obj/item/weapon/melee
|
||||||
|
)
|
||||||
@@ -115,6 +115,18 @@
|
|||||||
icon_state = "sterile"
|
icon_state = "sterile"
|
||||||
starts_with = list(/obj/item/clothing/mask/surgical = 7)
|
starts_with = list(/obj/item/clothing/mask/surgical = 7)
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/box/masks/white
|
||||||
|
name = "box of sterile masks"
|
||||||
|
desc = "This box contains masks of sterility."
|
||||||
|
icon_state = "sterile"
|
||||||
|
starts_with = list(/obj/item/clothing/mask/surgical/white = 7)
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/box/masks/dust
|
||||||
|
name = "box of dust masks"
|
||||||
|
desc = "This box contains dust masks. Breathe easy."
|
||||||
|
icon_state = "sterile"
|
||||||
|
starts_with = list(/obj/item/clothing/mask/surgical/dust = 7)
|
||||||
|
|
||||||
/obj/item/weapon/storage/box/syringes
|
/obj/item/weapon/storage/box/syringes
|
||||||
name = "box of syringes"
|
name = "box of syringes"
|
||||||
desc = "A box full of syringes."
|
desc = "A box full of syringes."
|
||||||
|
|||||||
@@ -9,7 +9,10 @@
|
|||||||
* Egg Box
|
* Egg Box
|
||||||
* Candle Box
|
* Candle Box
|
||||||
* Crayon Box
|
* Crayon Box
|
||||||
* Cigarette Box
|
* Cracker Pack
|
||||||
|
* Cigarette Pack
|
||||||
|
* Cigar Box
|
||||||
|
* Extra Tobacco Bits
|
||||||
* Vial Box
|
* Vial Box
|
||||||
* Box of Chocolates
|
* Box of Chocolates
|
||||||
*/
|
*/
|
||||||
@@ -21,6 +24,9 @@
|
|||||||
var/icon_type = "donut"
|
var/icon_type = "donut"
|
||||||
drop_sound = 'sound/items/drop/cardboardbox.ogg'
|
drop_sound = 'sound/items/drop/cardboardbox.ogg'
|
||||||
pickup_sound = 'sound/items/pickup/cardboardbox.ogg'
|
pickup_sound = 'sound/items/pickup/cardboardbox.ogg'
|
||||||
|
var/open = 0
|
||||||
|
var/open_state
|
||||||
|
var/closed_state
|
||||||
|
|
||||||
/obj/item/weapon/storage/fancy/update_icon(var/itemremoved = 0)
|
/obj/item/weapon/storage/fancy/update_icon(var/itemremoved = 0)
|
||||||
var/total_contents = contents.len - itemremoved
|
var/total_contents = contents.len - itemremoved
|
||||||
@@ -41,7 +47,6 @@
|
|||||||
/*
|
/*
|
||||||
* Egg Box
|
* Egg Box
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/obj/item/weapon/storage/fancy/egg_box
|
/obj/item/weapon/storage/fancy/egg_box
|
||||||
icon = 'icons/obj/food.dmi'
|
icon = 'icons/obj/food.dmi'
|
||||||
icon_state = "eggbox"
|
icon_state = "eggbox"
|
||||||
@@ -55,10 +60,37 @@
|
|||||||
)
|
)
|
||||||
starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/egg = 12)
|
starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/egg = 12)
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/fancy/egg_box/New()
|
||||||
|
if(!open_state)
|
||||||
|
open_state = "[initial(icon_state)]0"
|
||||||
|
if(!closed_state)
|
||||||
|
closed_state = "[initial(icon_state)]"
|
||||||
|
..()
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/fancy/egg_box/update_icon()
|
||||||
|
cut_overlays()
|
||||||
|
if(open)
|
||||||
|
icon_state = open_state
|
||||||
|
if(contents.len >= 1)
|
||||||
|
add_overlay("eggbox[contents.len]")
|
||||||
|
else
|
||||||
|
icon_state = closed_state
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/fancy/egg_box/open(mob/user as mob)
|
||||||
|
if(open)
|
||||||
|
return
|
||||||
|
open = TRUE
|
||||||
|
update_icon()
|
||||||
|
..()
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/fancy/egg_box/close(mob/user as mob)
|
||||||
|
open = FALSE
|
||||||
|
update_icon()
|
||||||
|
..()
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Candle Boxes
|
* Candle Boxes
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/obj/item/weapon/storage/fancy/candle_box
|
/obj/item/weapon/storage/fancy/candle_box
|
||||||
name = "red candle pack"
|
name = "red candle pack"
|
||||||
desc = "A pack of red candles."
|
desc = "A pack of red candles."
|
||||||
@@ -102,7 +134,6 @@
|
|||||||
/*
|
/*
|
||||||
* Crayon Box
|
* Crayon Box
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/obj/item/weapon/storage/fancy/crayons
|
/obj/item/weapon/storage/fancy/crayons
|
||||||
name = "box of crayons"
|
name = "box of crayons"
|
||||||
desc = "A box of crayons for all your rune drawing needs."
|
desc = "A box of crayons for all your rune drawing needs."
|
||||||
@@ -187,9 +218,8 @@
|
|||||||
..()
|
..()
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Cracker Packet
|
* Cracker Pack
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/obj/item/weapon/storage/fancy/crackers
|
/obj/item/weapon/storage/fancy/crackers
|
||||||
name = "\improper Getmore Crackers"
|
name = "\improper Getmore Crackers"
|
||||||
icon = 'icons/obj/food.dmi'
|
icon = 'icons/obj/food.dmi'
|
||||||
@@ -201,9 +231,9 @@
|
|||||||
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/cracker)
|
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/cracker)
|
||||||
starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/cracker = 6)
|
starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/cracker = 6)
|
||||||
|
|
||||||
////////////
|
/*
|
||||||
//CIG PACK//
|
* Cigarette Pack
|
||||||
////////////
|
*/
|
||||||
/obj/item/weapon/storage/fancy/cigarettes
|
/obj/item/weapon/storage/fancy/cigarettes
|
||||||
name = "\improper pack of Trans-Stellar Duty-frees"
|
name = "\improper pack of Trans-Stellar Duty-frees"
|
||||||
desc = "A ubiquitous brand of cigarettes, found in every major spacefaring corporation in the universe. As mild and flavorless as it gets."
|
desc = "A ubiquitous brand of cigarettes, found in every major spacefaring corporation in the universe. As mild and flavorless as it gets."
|
||||||
@@ -230,9 +260,39 @@
|
|||||||
C.brand = brand
|
C.brand = brand
|
||||||
C.desc += " This one is \a [brand]."
|
C.desc += " This one is \a [brand]."
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/fancy/cigarettes/New()
|
||||||
|
if(!open_state)
|
||||||
|
open_state = "[initial(icon_state)]_open"
|
||||||
|
if(!closed_state)
|
||||||
|
closed_state = "[initial(icon_state)]"
|
||||||
|
..()
|
||||||
|
|
||||||
/obj/item/weapon/storage/fancy/cigarettes/update_icon()
|
/obj/item/weapon/storage/fancy/cigarettes/update_icon()
|
||||||
icon_state = "[initial(icon_state)][contents.len]"
|
cut_overlays()
|
||||||
return
|
if(open)
|
||||||
|
icon_state = open_state
|
||||||
|
if(contents.len >= 1)
|
||||||
|
add_overlay("cig[contents.len]")
|
||||||
|
else
|
||||||
|
icon_state = closed_state
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/fancy/cigarettes/open(mob/user as mob)
|
||||||
|
if(open)
|
||||||
|
return
|
||||||
|
open = TRUE
|
||||||
|
if(contents.len == 0)
|
||||||
|
icon_state = "[initial(icon_state)]_empty"
|
||||||
|
else
|
||||||
|
update_icon()
|
||||||
|
..()
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/fancy/cigarettes/close(mob/user as mob)
|
||||||
|
open = FALSE
|
||||||
|
if(contents.len == 0)
|
||||||
|
icon_state = "[initial(icon_state)]_empty"
|
||||||
|
else
|
||||||
|
update_icon()
|
||||||
|
..()
|
||||||
|
|
||||||
/obj/item/weapon/storage/fancy/cigarettes/remove_from_storage(obj/item/W as obj, atom/new_location)
|
/obj/item/weapon/storage/fancy/cigarettes/remove_from_storage(obj/item/W as obj, atom/new_location)
|
||||||
// Don't try to transfer reagents to lighters
|
// Don't try to transfer reagents to lighters
|
||||||
@@ -283,8 +343,6 @@
|
|||||||
icon_state = "Apacket"
|
icon_state = "Apacket"
|
||||||
brand = "\improper Acme Co. cigarette"
|
brand = "\improper Acme Co. cigarette"
|
||||||
|
|
||||||
// New exciting ways to kill your lungs! - Earthcrusher //
|
|
||||||
|
|
||||||
/obj/item/weapon/storage/fancy/cigarettes/luckystars
|
/obj/item/weapon/storage/fancy/cigarettes/luckystars
|
||||||
name = "\improper pack of Lucky Stars"
|
name = "\improper pack of Lucky Stars"
|
||||||
desc = "A mellow blend made from synthetic, pod-grown tobacco. The commercial jingle is guaranteed to get stuck in your head."
|
desc = "A mellow blend made from synthetic, pod-grown tobacco. The commercial jingle is guaranteed to get stuck in your head."
|
||||||
@@ -319,6 +377,9 @@
|
|||||||
icon_state = "P100packet"
|
icon_state = "P100packet"
|
||||||
brand = "\improper Professional 120"
|
brand = "\improper Professional 120"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Cigar Box
|
||||||
|
*/
|
||||||
/obj/item/weapon/storage/fancy/cigar
|
/obj/item/weapon/storage/fancy/cigar
|
||||||
name = "cigar case"
|
name = "cigar case"
|
||||||
desc = "A case for holding your cigars when you are not smoking them."
|
desc = "A case for holding your cigars when you are not smoking them."
|
||||||
@@ -331,23 +392,50 @@
|
|||||||
storage_slots = 7
|
storage_slots = 7
|
||||||
can_hold = list(/obj/item/clothing/mask/smokable/cigarette/cigar, /obj/item/trash/cigbutt/cigarbutt)
|
can_hold = list(/obj/item/clothing/mask/smokable/cigarette/cigar, /obj/item/trash/cigbutt/cigarbutt)
|
||||||
icon_type = "cigar"
|
icon_type = "cigar"
|
||||||
starts_with = list(/obj/item/clothing/mask/smokable/cigarette/cigar = 7)
|
starts_with = list(/obj/item/clothing/mask/smokable/cigarette/cigar = 8)
|
||||||
|
|
||||||
/obj/item/weapon/storage/fancy/cigar/Initialize()
|
/obj/item/weapon/storage/fancy/cigar/Initialize()
|
||||||
. = ..()
|
. = ..()
|
||||||
flags |= NOREACT
|
flags |= NOREACT
|
||||||
create_reagents(15 * storage_slots)
|
create_reagents(15 * storage_slots)
|
||||||
|
|
||||||
/obj/item/weapon/storage/fancy/cigar/update_icon()
|
|
||||||
icon_state = "[initial(icon_state)][contents.len]"
|
|
||||||
return
|
|
||||||
|
|
||||||
/obj/item/weapon/storage/fancy/cigar/remove_from_storage(obj/item/W as obj, atom/new_location)
|
/obj/item/weapon/storage/fancy/cigar/remove_from_storage(obj/item/W as obj, atom/new_location)
|
||||||
var/obj/item/clothing/mask/smokable/cigarette/cigar/C = W
|
var/obj/item/clothing/mask/smokable/cigarette/cigar/C = W
|
||||||
if(!istype(C)) return
|
if(!istype(C)) return
|
||||||
reagents.trans_to_obj(C, (reagents.total_volume/contents.len))
|
reagents.trans_to_obj(C, (reagents.total_volume/contents.len))
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/fancy/cigar/New()
|
||||||
|
if(!open_state)
|
||||||
|
open_state = "[initial(icon_state)]0"
|
||||||
|
if(!closed_state)
|
||||||
|
closed_state = "[initial(icon_state)]"
|
||||||
|
..()
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/fancy/cigar/update_icon()
|
||||||
|
cut_overlays()
|
||||||
|
if(open)
|
||||||
|
icon_state = open_state
|
||||||
|
if(contents.len >= 1)
|
||||||
|
add_overlay("cigarcase[contents.len]")
|
||||||
|
else
|
||||||
|
icon_state = closed_state
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/fancy/cigar/open(mob/user as mob)
|
||||||
|
if(open)
|
||||||
|
return
|
||||||
|
open = TRUE
|
||||||
|
update_icon()
|
||||||
|
..()
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/fancy/cigar/close(mob/user as mob)
|
||||||
|
open = FALSE
|
||||||
|
update_icon()
|
||||||
|
..()
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Tobacco Bits
|
||||||
|
*/
|
||||||
/obj/item/weapon/storage/rollingpapers
|
/obj/item/weapon/storage/rollingpapers
|
||||||
name = "rolling paper pack"
|
name = "rolling paper pack"
|
||||||
desc = "A small cardboard pack containing several folded rolling papers."
|
desc = "A small cardboard pack containing several folded rolling papers."
|
||||||
@@ -371,7 +459,6 @@
|
|||||||
/*
|
/*
|
||||||
* Vial Box
|
* Vial Box
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/obj/item/weapon/storage/fancy/vials
|
/obj/item/weapon/storage/fancy/vials
|
||||||
icon = 'icons/obj/vialbox.dmi'
|
icon = 'icons/obj/vialbox.dmi'
|
||||||
icon_state = "vialbox6"
|
icon_state = "vialbox6"
|
||||||
@@ -414,9 +501,8 @@
|
|||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Box of Chocolates/Heart Box
|
* Box of Chocolates
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/obj/item/weapon/storage/fancy/heartbox
|
/obj/item/weapon/storage/fancy/heartbox
|
||||||
icon_state = "heartbox"
|
icon_state = "heartbox"
|
||||||
name = "box of chocolates"
|
name = "box of chocolates"
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ var/list/random_useful_
|
|||||||
if(prob(70)) // Misc. junk
|
if(prob(70)) // Misc. junk
|
||||||
if(!random_junk_)
|
if(!random_junk_)
|
||||||
random_junk_ = subtypesof(/obj/item/trash)
|
random_junk_ = subtypesof(/obj/item/trash)
|
||||||
random_junk_ += /obj/effect/decal/cleanable/spiderling_remains
|
random_junk_ += /obj/effect/decal/cleanable/bug_remains
|
||||||
random_junk_ += /obj/effect/decal/remains/mouse
|
random_junk_ += /obj/effect/decal/remains/mouse
|
||||||
random_junk_ += /obj/effect/decal/remains/robot
|
random_junk_ += /obj/effect/decal/remains/robot
|
||||||
random_junk_ += /obj/item/weapon/paper/crumpled
|
random_junk_ += /obj/item/weapon/paper/crumpled
|
||||||
|
|||||||
@@ -287,6 +287,7 @@ something, make sure it's not in one of the other lists.*/
|
|||||||
return pick(prob(320);/obj/random/maintenance/clean,
|
return pick(prob(320);/obj/random/maintenance/clean,
|
||||||
prob(3);/obj/item/device/flashlight/lantern,
|
prob(3);/obj/item/device/flashlight/lantern,
|
||||||
prob(4);/obj/item/weapon/pickaxe,
|
prob(4);/obj/item/weapon/pickaxe,
|
||||||
|
prob(3);/obj/item/weapon/pickaxe/drill,
|
||||||
prob(5);/obj/item/weapon/storage/backpack/industrial,
|
prob(5);/obj/item/weapon/storage/backpack/industrial,
|
||||||
prob(5);/obj/item/weapon/storage/backpack/satchel/norm,
|
prob(5);/obj/item/weapon/storage/backpack/satchel/norm,
|
||||||
prob(3);/obj/item/weapon/storage/backpack/dufflebag,
|
prob(3);/obj/item/weapon/storage/backpack/dufflebag,
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
/obj/effect/decal/cleanable/blood/gibs/robot,
|
/obj/effect/decal/cleanable/blood/gibs/robot,
|
||||||
/obj/effect/decal/cleanable/blood/oil,
|
/obj/effect/decal/cleanable/blood/oil,
|
||||||
/obj/effect/decal/cleanable/blood/oil/streak,
|
/obj/effect/decal/cleanable/blood/oil/streak,
|
||||||
/obj/effect/decal/cleanable/spiderling_remains,
|
/obj/effect/decal/cleanable/bug_remains,
|
||||||
/obj/effect/decal/remains/mouse,
|
/obj/effect/decal/remains/mouse,
|
||||||
/obj/effect/decal/cleanable/vomit,
|
/obj/effect/decal/cleanable/vomit,
|
||||||
/obj/effect/decal/cleanable/blood/splatter,
|
/obj/effect/decal/cleanable/blood/splatter,
|
||||||
@@ -207,6 +207,12 @@
|
|||||||
/obj/item/weapon/flame/lighter/zippo,
|
/obj/item/weapon/flame/lighter/zippo,
|
||||||
/obj/structure/closet/crate/hydroponics
|
/obj/structure/closet/crate/hydroponics
|
||||||
),
|
),
|
||||||
|
prob(5);list(
|
||||||
|
/obj/item/weapon/pickaxe,
|
||||||
|
/obj/item/clothing/under/rank/miner,
|
||||||
|
/obj/item/clothing/head/hardhat,
|
||||||
|
/obj/structure/closet/crate/engineering
|
||||||
|
),
|
||||||
prob(5);list(
|
prob(5);list(
|
||||||
/obj/item/weapon/pickaxe/drill,
|
/obj/item/weapon/pickaxe/drill,
|
||||||
/obj/item/clothing/suit/space/void/mining,
|
/obj/item/clothing/suit/space/void/mining,
|
||||||
@@ -214,7 +220,7 @@
|
|||||||
/obj/structure/closet/crate/engineering
|
/obj/structure/closet/crate/engineering
|
||||||
),
|
),
|
||||||
prob(5);list(
|
prob(5);list(
|
||||||
/obj/item/weapon/pickaxe/drill,
|
/obj/item/weapon/pickaxe/advdrill,
|
||||||
/obj/item/clothing/suit/space/void/mining/alt,
|
/obj/item/clothing/suit/space/void/mining/alt,
|
||||||
/obj/item/clothing/head/helmet/space/void/mining/alt,
|
/obj/item/clothing/head/helmet/space/void/mining/alt,
|
||||||
/obj/structure/closet/crate/engineering
|
/obj/structure/closet/crate/engineering
|
||||||
@@ -249,7 +255,7 @@
|
|||||||
/obj/structure/closet/crate/engineering
|
/obj/structure/closet/crate/engineering
|
||||||
),
|
),
|
||||||
prob(5);list(
|
prob(5);list(
|
||||||
/obj/item/weapon/pickaxe/drill,
|
/obj/item/weapon/pickaxe,
|
||||||
/obj/item/clothing/glasses/material,
|
/obj/item/clothing/glasses/material,
|
||||||
/obj/structure/ore_box,
|
/obj/structure/ore_box,
|
||||||
/obj/structure/closet/crate
|
/obj/structure/closet/crate
|
||||||
@@ -368,7 +374,7 @@
|
|||||||
/obj/structure/closet/crate/engineering
|
/obj/structure/closet/crate/engineering
|
||||||
),
|
),
|
||||||
prob(2);list(
|
prob(2);list(
|
||||||
/obj/item/weapon/pickaxe/drill,
|
/obj/item/weapon/pickaxe/advdrill,
|
||||||
/obj/item/weapon/storage/bag/ore,
|
/obj/item/weapon/storage/bag/ore,
|
||||||
/obj/item/clothing/glasses/material,
|
/obj/item/clothing/glasses/material,
|
||||||
/obj/structure/closet/crate/engineering
|
/obj/structure/closet/crate/engineering
|
||||||
@@ -1485,6 +1491,7 @@
|
|||||||
return pick(
|
return pick(
|
||||||
prob(10);list(/obj/item/weapon/pickaxe/silver),
|
prob(10);list(/obj/item/weapon/pickaxe/silver),
|
||||||
prob(8);list(/obj/item/weapon/pickaxe/drill),
|
prob(8);list(/obj/item/weapon/pickaxe/drill),
|
||||||
|
prob(6);list(/obj/item/weapon/pickaxe/advdrill),
|
||||||
prob(6);list(/obj/item/weapon/pickaxe/jackhammer),
|
prob(6);list(/obj/item/weapon/pickaxe/jackhammer),
|
||||||
prob(5);list(/obj/item/weapon/pickaxe/gold),
|
prob(5);list(/obj/item/weapon/pickaxe/gold),
|
||||||
prob(4);list(/obj/item/weapon/pickaxe/plasmacutter),
|
prob(4);list(/obj/item/weapon/pickaxe/plasmacutter),
|
||||||
|
|||||||
@@ -771,7 +771,7 @@
|
|||||||
/obj/random/mouseremains/item_to_spawn()
|
/obj/random/mouseremains/item_to_spawn()
|
||||||
return pick(/obj/item/device/assembly/mousetrap,
|
return pick(/obj/item/device/assembly/mousetrap,
|
||||||
/obj/item/device/assembly/mousetrap/armed,
|
/obj/item/device/assembly/mousetrap/armed,
|
||||||
/obj/effect/decal/cleanable/spiderling_remains,
|
/obj/effect/decal/cleanable/bug_remains,
|
||||||
/obj/effect/decal/cleanable/ash,
|
/obj/effect/decal/cleanable/ash,
|
||||||
/obj/item/trash/cigbutt,
|
/obj/item/trash/cigbutt,
|
||||||
/obj/item/trash/cigbutt/cigarbutt,
|
/obj/item/trash/cigbutt/cigarbutt,
|
||||||
|
|||||||
@@ -8,10 +8,10 @@
|
|||||||
w_class = ITEMSIZE_HUGE
|
w_class = ITEMSIZE_HUGE
|
||||||
layer = UNDER_JUNK_LAYER
|
layer = UNDER_JUNK_LAYER
|
||||||
blocks_emissive = EMISSIVE_BLOCK_GENERIC
|
blocks_emissive = EMISSIVE_BLOCK_GENERIC
|
||||||
|
|
||||||
var/opened = 0
|
var/opened = 0
|
||||||
var/sealed = 0
|
var/sealed = 0
|
||||||
|
|
||||||
var/seal_tool = /obj/item/weapon/weldingtool //Tool used to seal the closet, defaults to welder
|
var/seal_tool = /obj/item/weapon/weldingtool //Tool used to seal the closet, defaults to welder
|
||||||
var/wall_mounted = 0 //never solid (You can always pass over it)
|
var/wall_mounted = 0 //never solid (You can always pass over it)
|
||||||
var/health = 100
|
var/health = 100
|
||||||
@@ -24,8 +24,8 @@
|
|||||||
//then open it in a populated area to crash clients.
|
//then open it in a populated area to crash clients.
|
||||||
var/storage_cost = 40 //How much space this closet takes up if it's stuffed in another closet
|
var/storage_cost = 40 //How much space this closet takes up if it's stuffed in another closet
|
||||||
|
|
||||||
var/open_sound = 'sound/machines/click.ogg'
|
var/open_sound = 'sound/effects/closet_open.ogg'
|
||||||
var/close_sound = 'sound/machines/click.ogg'
|
var/close_sound = 'sound/effects/closet_close.ogg'
|
||||||
|
|
||||||
var/store_misc = 1 //Chameleon item check
|
var/store_misc = 1 //Chameleon item check
|
||||||
var/store_items = 1 //Will the closet store items?
|
var/store_items = 1 //Will the closet store items?
|
||||||
@@ -141,7 +141,7 @@
|
|||||||
dump_contents()
|
dump_contents()
|
||||||
|
|
||||||
opened = 1
|
opened = 1
|
||||||
playsound(src, open_sound, 15, 1, -3)
|
playsound(src, open_sound, 50, 1, -3)
|
||||||
if(initial(density))
|
if(initial(density))
|
||||||
density = !density
|
density = !density
|
||||||
animate_door()
|
animate_door()
|
||||||
@@ -166,7 +166,7 @@
|
|||||||
|
|
||||||
opened = 0
|
opened = 0
|
||||||
|
|
||||||
playsound(src, close_sound, 15, 1, -3)
|
playsound(src, close_sound, 50, 1, -3)
|
||||||
if(initial(density))
|
if(initial(density))
|
||||||
density = !density
|
density = !density
|
||||||
animate_door(TRUE)
|
animate_door(TRUE)
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
name = "coffin"
|
name = "coffin"
|
||||||
desc = "It's a burial receptacle for the dearly departed."
|
desc = "It's a burial receptacle for the dearly departed."
|
||||||
icon = 'icons/obj/closets/coffin.dmi'
|
icon = 'icons/obj/closets/coffin.dmi'
|
||||||
|
|
||||||
icon_state = "closed_unlocked"
|
icon_state = "closed_unlocked"
|
||||||
seal_tool = /obj/item/weapon/tool/screwdriver
|
seal_tool = /obj/item/weapon/tool/screwdriver
|
||||||
breakout_sound = 'sound/weapons/tablehit1.ogg'
|
breakout_sound = 'sound/weapons/tablehit1.ogg'
|
||||||
@@ -20,6 +20,8 @@
|
|||||||
max_closets = 1
|
max_closets = 1
|
||||||
opened = 1
|
opened = 1
|
||||||
closet_appearance = null // Special icon for us
|
closet_appearance = null // Special icon for us
|
||||||
|
open_sound = 'sound/effects/wooden_closet_open.ogg'
|
||||||
|
close_sound = 'sound/effects/wooden_closet_close.ogg'
|
||||||
|
|
||||||
/obj/structure/closet/grave/attack_hand(mob/user as mob)
|
/obj/structure/closet/grave/attack_hand(mob/user as mob)
|
||||||
if(opened)
|
if(opened)
|
||||||
|
|||||||
@@ -4,11 +4,17 @@
|
|||||||
icon = 'icons/obj/closets/bases/cabinet.dmi'
|
icon = 'icons/obj/closets/bases/cabinet.dmi'
|
||||||
closet_appearance = /decl/closet_appearance/cabinet
|
closet_appearance = /decl/closet_appearance/cabinet
|
||||||
|
|
||||||
|
open_sound = 'sound/effects/wooden_closet_open.ogg'
|
||||||
|
close_sound = 'sound/effects/wooden_closet_close.ogg'
|
||||||
|
|
||||||
/obj/structure/closet/acloset
|
/obj/structure/closet/acloset
|
||||||
name = "strange closet"
|
name = "strange closet"
|
||||||
desc = "It looks alien!"
|
desc = "It looks alien!"
|
||||||
closet_appearance = /decl/closet_appearance/alien
|
closet_appearance = /decl/closet_appearance/alien
|
||||||
|
|
||||||
|
open_sound = 'sound/machines/click.ogg'
|
||||||
|
close_sound = 'sound/machines/click.ogg'
|
||||||
|
|
||||||
/obj/structure/closet/gimmick
|
/obj/structure/closet/gimmick
|
||||||
name = "administrative supply closet"
|
name = "administrative supply closet"
|
||||||
desc = "It's a storage unit for things that have no right being here."
|
desc = "It's a storage unit for things that have no right being here."
|
||||||
|
|||||||
@@ -243,6 +243,8 @@
|
|||||||
desc = "It's wall-mounted storage unit for an AutoLok suit."
|
desc = "It's wall-mounted storage unit for an AutoLok suit."
|
||||||
icon = 'icons/obj/closets/bases/wall_double.dmi'
|
icon = 'icons/obj/closets/bases/wall_double.dmi'
|
||||||
closet_appearance = /decl/closet_appearance/wall_double/autolok
|
closet_appearance = /decl/closet_appearance/wall_double/autolok
|
||||||
|
open_sound = 'sound/machines/click.ogg'
|
||||||
|
close_sound = 'sound/machines/click.ogg'
|
||||||
anchored = TRUE
|
anchored = TRUE
|
||||||
density = FALSE
|
density = FALSE
|
||||||
wall_mounted = 1
|
wall_mounted = 1
|
||||||
@@ -262,6 +264,8 @@
|
|||||||
desc = "It's wall-mounted storage unit for an emergency suit."
|
desc = "It's wall-mounted storage unit for an emergency suit."
|
||||||
icon = 'icons/obj/closets/bases/wall.dmi'
|
icon = 'icons/obj/closets/bases/wall.dmi'
|
||||||
closet_appearance = /decl/closet_appearance/wall/emergency
|
closet_appearance = /decl/closet_appearance/wall/emergency
|
||||||
|
open_sound = 'sound/machines/click.ogg'
|
||||||
|
close_sound = 'sound/machines/click.ogg'
|
||||||
anchored = TRUE
|
anchored = TRUE
|
||||||
density = FALSE
|
density = FALSE
|
||||||
wall_mounted = 1
|
wall_mounted = 1
|
||||||
|
|||||||
@@ -71,9 +71,10 @@
|
|||||||
/obj/item/clothing/shoes/black,
|
/obj/item/clothing/shoes/black,
|
||||||
/obj/item/device/analyzer,
|
/obj/item/device/analyzer,
|
||||||
/obj/item/weapon/storage/bag/ore,
|
/obj/item/weapon/storage/bag/ore,
|
||||||
|
/obj/item/weapon/storage/belt/miner,
|
||||||
/obj/item/device/flashlight/lantern,
|
/obj/item/device/flashlight/lantern,
|
||||||
/obj/item/weapon/shovel,
|
/obj/item/weapon/shovel,
|
||||||
/obj/item/weapon/pickaxe,
|
/obj/item/weapon/pickaxe/drill,
|
||||||
/obj/item/clothing/glasses/material,
|
/obj/item/clothing/glasses/material,
|
||||||
/obj/item/clothing/suit/storage/hooded/wintercoat/miner,
|
/obj/item/clothing/suit/storage/hooded/wintercoat/miner,
|
||||||
/obj/item/clothing/shoes/boots/winter/mining,
|
/obj/item/clothing/shoes/boots/winter/mining,
|
||||||
|
|||||||
@@ -8,6 +8,9 @@
|
|||||||
/obj/item/weapon/reagent_containers/food/condiment/spacespice = 2
|
/obj/item/weapon/reagent_containers/food/condiment/spacespice = 2
|
||||||
)
|
)
|
||||||
|
|
||||||
|
open_sound = 'sound/machines/click.ogg'
|
||||||
|
close_sound = 'sound/machines/click.ogg'
|
||||||
|
|
||||||
/obj/structure/closet/secure_closet/freezer/kitchen/mining
|
/obj/structure/closet/secure_closet/freezer/kitchen/mining
|
||||||
req_access = list()
|
req_access = list()
|
||||||
|
|
||||||
|
|||||||
@@ -210,6 +210,9 @@
|
|||||||
req_access = list(access_psychiatrist)
|
req_access = list(access_psychiatrist)
|
||||||
closet_appearance = /decl/closet_appearance/cabinet/secure
|
closet_appearance = /decl/closet_appearance/cabinet/secure
|
||||||
|
|
||||||
|
open_sound = 'sound/effects/wooden_closet_open.ogg'
|
||||||
|
close_sound = 'sound/effects/wooden_closet_close.ogg'
|
||||||
|
|
||||||
starts_with = list(
|
starts_with = list(
|
||||||
/obj/item/clothing/under/rank/psych,
|
/obj/item/clothing/under/rank/psych,
|
||||||
/obj/item/clothing/under/rank/psych/turtleneck,
|
/obj/item/clothing/under/rank/psych/turtleneck,
|
||||||
|
|||||||
@@ -31,6 +31,9 @@
|
|||||||
/obj/structure/closet/secure_closet/personal/cabinet
|
/obj/structure/closet/secure_closet/personal/cabinet
|
||||||
closet_appearance = /decl/closet_appearance/cabinet/secure
|
closet_appearance = /decl/closet_appearance/cabinet/secure
|
||||||
|
|
||||||
|
open_sound = 'sound/effects/wooden_closet_open.ogg'
|
||||||
|
close_sound = 'sound/effects/wooden_closet_close.ogg'
|
||||||
|
|
||||||
starts_with = list(
|
starts_with = list(
|
||||||
/obj/item/weapon/storage/backpack/satchel/withwallet,
|
/obj/item/weapon/storage/backpack/satchel/withwallet,
|
||||||
/obj/item/device/radio/headset
|
/obj/item/device/radio/headset
|
||||||
|
|||||||
@@ -238,6 +238,9 @@
|
|||||||
req_access = list(access_forensics_lockers)
|
req_access = list(access_forensics_lockers)
|
||||||
closet_appearance = /decl/closet_appearance/cabinet/secure
|
closet_appearance = /decl/closet_appearance/cabinet/secure
|
||||||
|
|
||||||
|
open_sound = 'sound/effects/wooden_closet_open.ogg'
|
||||||
|
close_sound = 'sound/effects/wooden_closet_close.ogg'
|
||||||
|
|
||||||
starts_with = list(
|
starts_with = list(
|
||||||
/obj/item/clothing/accessory/badge/holo/detective,
|
/obj/item/clothing/accessory/badge/holo/detective,
|
||||||
/obj/item/clothing/gloves/forensic, //CHOMP Edit replaces black gloves
|
/obj/item/clothing/gloves/forensic, //CHOMP Edit replaces black gloves
|
||||||
|
|||||||
@@ -97,7 +97,8 @@
|
|||||||
starts_with = list(
|
starts_with = list(
|
||||||
/obj/item/clothing/suit/fire/heavy,
|
/obj/item/clothing/suit/fire/heavy,
|
||||||
/obj/item/weapon/tank/oxygen/red,
|
/obj/item/weapon/tank/oxygen/red,
|
||||||
/obj/item/weapon/extinguisher/atmo,
|
/obj/item/weapon/watertank/atmos,
|
||||||
|
/obj/item/device/flashlight,
|
||||||
/obj/item/clothing/head/hardhat/firefighter/atmos)
|
/obj/item/clothing/head/hardhat/firefighter/atmos)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -11,6 +11,9 @@
|
|||||||
store_mobs = 0
|
store_mobs = 0
|
||||||
wall_mounted = 1
|
wall_mounted = 1
|
||||||
|
|
||||||
|
open_sound = 'sound/machines/click.ogg'
|
||||||
|
close_sound = 'sound/machines/click.ogg'
|
||||||
|
|
||||||
//spawns 2 sets of breathmask, emergency oxy tank and crowbar
|
//spawns 2 sets of breathmask, emergency oxy tank and crowbar
|
||||||
|
|
||||||
/obj/structure/closet/walllocker/emerglocker
|
/obj/structure/closet/walllocker/emerglocker
|
||||||
@@ -92,6 +95,9 @@
|
|||||||
plane = TURF_PLANE
|
plane = TURF_PLANE
|
||||||
layer = ABOVE_TURF_LAYER
|
layer = ABOVE_TURF_LAYER
|
||||||
|
|
||||||
|
open_sound = 'sound/machines/click.ogg'
|
||||||
|
close_sound = 'sound/machines/click.ogg'
|
||||||
|
|
||||||
/obj/structure/closet/walllocker_double/north
|
/obj/structure/closet/walllocker_double/north
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
dir = SOUTH
|
dir = SOUTH
|
||||||
|
|||||||
@@ -41,6 +41,9 @@
|
|||||||
name = "detective wardrobe"
|
name = "detective wardrobe"
|
||||||
closet_appearance = /decl/closet_appearance/cabinet
|
closet_appearance = /decl/closet_appearance/cabinet
|
||||||
|
|
||||||
|
open_sound = 'sound/effects/wooden_closet_open.ogg'
|
||||||
|
close_sound = 'sound/effects/wooden_closet_close.ogg'
|
||||||
|
|
||||||
starts_with = list(
|
starts_with = list(
|
||||||
/obj/item/clothing/head/det = 2,
|
/obj/item/clothing/head/det = 2,
|
||||||
/obj/item/clothing/head/det/grey = 2,
|
/obj/item/clothing/head/det/grey = 2,
|
||||||
@@ -460,6 +463,9 @@
|
|||||||
name = "site manager's wardrobe"
|
name = "site manager's wardrobe"
|
||||||
closet_appearance = /decl/closet_appearance/cabinet
|
closet_appearance = /decl/closet_appearance/cabinet
|
||||||
|
|
||||||
|
open_sound = 'sound/effects/wooden_closet_open.ogg'
|
||||||
|
close_sound = 'sound/effects/wooden_closet_close.ogg'
|
||||||
|
|
||||||
starts_with = list(
|
starts_with = list(
|
||||||
/obj/item/weapon/storage/backpack/captain,
|
/obj/item/weapon/storage/backpack/captain,
|
||||||
/obj/item/clothing/suit/captunic,
|
/obj/item/clothing/suit/captunic,
|
||||||
|
|||||||
@@ -10,6 +10,9 @@
|
|||||||
var/points_per_crate = 5
|
var/points_per_crate = 5
|
||||||
var/rigged = 0
|
var/rigged = 0
|
||||||
|
|
||||||
|
open_sound = 'sound/effects/crate_open.ogg'
|
||||||
|
close_sound = 'sound/effects/crate_close.ogg'
|
||||||
|
|
||||||
/obj/structure/closet/crate/can_open()
|
/obj/structure/closet/crate/can_open()
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
@@ -32,7 +35,7 @@
|
|||||||
if(usr.stunned)
|
if(usr.stunned)
|
||||||
return 2
|
return 2
|
||||||
|
|
||||||
playsound(src, 'sound/machines/click.ogg', 15, 1, -3)
|
playsound(src, open_sound, 50, 1, -3)
|
||||||
for(var/obj/O in src)
|
for(var/obj/O in src)
|
||||||
O.forceMove(get_turf(src))
|
O.forceMove(get_turf(src))
|
||||||
src.opened = 1
|
src.opened = 1
|
||||||
@@ -48,7 +51,7 @@
|
|||||||
if(!src.can_close())
|
if(!src.can_close())
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
playsound(src, 'sound/machines/click.ogg', 15, 1, -3)
|
playsound(src, close_sound, 50, 1, -3)
|
||||||
var/itemcount = 0
|
var/itemcount = 0
|
||||||
for(var/obj/O in get_turf(src))
|
for(var/obj/O in get_turf(src))
|
||||||
if(itemcount >= storage_capacity)
|
if(itemcount >= storage_capacity)
|
||||||
@@ -698,3 +701,30 @@
|
|||||||
starts_with = list(
|
starts_with = list(
|
||||||
/obj/item/weapon/reagent_containers/spray/plantbgone = 2,
|
/obj/item/weapon/reagent_containers/spray/plantbgone = 2,
|
||||||
/obj/item/weapon/material/minihoe)
|
/obj/item/weapon/material/minihoe)
|
||||||
|
|
||||||
|
//Laundry Cart
|
||||||
|
/obj/structure/closet/crate/laundry
|
||||||
|
name = "Laundry Cart"
|
||||||
|
desc = "A cart with a large fabric bin on it used for transporting large amounts of clothes."
|
||||||
|
icon = 'icons/obj/closets/laundry.dmi'
|
||||||
|
closet_appearance = null
|
||||||
|
open_sound = 'sound/effects/rustle1.ogg'
|
||||||
|
close_sound = 'sound/effects/rustle2.ogg'
|
||||||
|
|
||||||
|
//Wooden Crate
|
||||||
|
/obj/structure/closet/crate/wooden
|
||||||
|
name = "wooden crate"
|
||||||
|
desc = "A crate made from wood and lined with straw. Cheapest form of storage."
|
||||||
|
icon = 'icons/obj/closets/wooden.dmi'
|
||||||
|
closet_appearance = null
|
||||||
|
open_sound = 'sound/effects/wooden_closet_open.ogg'
|
||||||
|
close_sound = 'sound/effects/wooden_closet_close.ogg'
|
||||||
|
|
||||||
|
//Mining Cart
|
||||||
|
/obj/structure/closet/crate/miningcar
|
||||||
|
name = "mining cart"
|
||||||
|
desc = "A mining car. This one doesn't work on rails, but has to be dragged."
|
||||||
|
icon = 'icons/obj/closets/miningcar.dmi'
|
||||||
|
closet_appearance = null
|
||||||
|
open_sound = 'sound/effects/wooden_closet_open.ogg'
|
||||||
|
close_sound = 'sound/effects/wooden_closet_close.ogg'
|
||||||
@@ -357,3 +357,35 @@
|
|||||||
|
|
||||||
/obj/structure/bed/alien/attackby(obj/item/weapon/W, mob/user)
|
/obj/structure/bed/alien/attackby(obj/item/weapon/W, mob/user)
|
||||||
return // No deconning.
|
return // No deconning.
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Dirty Mattress
|
||||||
|
*/
|
||||||
|
/obj/structure/dirtybed
|
||||||
|
name = "dirty mattress"
|
||||||
|
desc = "A stained matress. Guess it's better than sleeping on the floor."
|
||||||
|
icon = 'icons/obj/furniture.dmi'
|
||||||
|
icon_state = "dirtybed"
|
||||||
|
pressure_resistance = 15
|
||||||
|
anchored = TRUE
|
||||||
|
can_buckle = TRUE
|
||||||
|
buckle_dir = SOUTH
|
||||||
|
buckle_lying = 1
|
||||||
|
|
||||||
|
/obj/structure/dirtybed/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||||
|
if(W.is_wrench())
|
||||||
|
playsound(src, W.usesound, 100, 1)
|
||||||
|
if(anchored)
|
||||||
|
user.visible_message("[user] begins unsecuring \the [src] from the floor.", "You start unsecuring \the [src] from the floor.")
|
||||||
|
else
|
||||||
|
user.visible_message("[user] begins securing \the [src] to the floor.", "You start securing \the [src] to the floor.")
|
||||||
|
|
||||||
|
if(do_after(user, 20 * W.toolspeed))
|
||||||
|
if(!src) return
|
||||||
|
to_chat(user, "<span class='notice'>You [anchored? "un" : ""]secured \the [src]!</span>")
|
||||||
|
anchored = !anchored
|
||||||
|
return
|
||||||
|
|
||||||
|
if(!anchored)
|
||||||
|
to_chat(user,"<span class='notice'> The bed isn't secured.</span>")
|
||||||
|
return
|
||||||
@@ -291,10 +291,12 @@
|
|||||||
|
|
||||||
/obj/structure/mob_spawner/mouse_nest
|
/obj/structure/mob_spawner/mouse_nest
|
||||||
name = "trash"
|
name = "trash"
|
||||||
desc = "A small heap of trash, perfect for mice to nest in."
|
desc = "A small heap of trash, perfect for mice and other pests to nest in."
|
||||||
icon = 'icons/obj/trash_piles.dmi'
|
icon = 'icons/obj/trash_piles.dmi'
|
||||||
icon_state = "randompile"
|
icon_state = "randompile"
|
||||||
spawn_types = list(/mob/living/simple_mob/animal/passive/mouse)
|
spawn_types = list(
|
||||||
|
/mob/living/simple_mob/animal/passive/mouse= 100,
|
||||||
|
/mob/living/simple_mob/animal/passive/cockroach = 25)
|
||||||
simultaneous_spawns = 1
|
simultaneous_spawns = 1
|
||||||
destructible = 1
|
destructible = 1
|
||||||
spawn_delay = 1 HOUR
|
spawn_delay = 1 HOUR
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/obj/structure/undies_wardrobe
|
/obj/structure/undies_wardrobe
|
||||||
name = "underwear wardrobe"
|
name = "underwear dresser"
|
||||||
desc = "Holds item of clothing you shouldn't be showing off in the hallways."
|
desc = "Holds item of clothing you shouldn't be showing off in the hallways."
|
||||||
icon = 'icons/obj/closets/undies_wardrobe.dmi'
|
icon = 'icons/obj/closets/undies_wardrobe.dmi'
|
||||||
icon_state = "wardrobe"
|
icon_state = "wardrobe"
|
||||||
|
|||||||
@@ -56,10 +56,10 @@
|
|||||||
/turf/simulated/floor/outdoors/newdirt_nograss/Initialize(mapload)
|
/turf/simulated/floor/outdoors/newdirt_nograss/Initialize(mapload)
|
||||||
var/possibledirts = list(
|
var/possibledirts = list(
|
||||||
"dirt0" = 200,
|
"dirt0" = 200,
|
||||||
"dirt3" = 20,
|
"dirt6" = 20,
|
||||||
"dirt4" = 3,
|
"dirt7" = 3,
|
||||||
"dirt5" = 3,
|
"dirt8" = 3,
|
||||||
"dirt6" = 1
|
"dirt9" = 1
|
||||||
)
|
)
|
||||||
flooring_override = pickweight(possibledirts)
|
flooring_override = pickweight(possibledirts)
|
||||||
return ..()
|
return ..()
|
||||||
@@ -69,7 +69,7 @@
|
|||||||
desc = "Concrete shaped into a path!"
|
desc = "Concrete shaped into a path!"
|
||||||
icon = 'icons/turf/outdoors_vr.dmi'
|
icon = 'icons/turf/outdoors_vr.dmi'
|
||||||
icon_state = "sidewalk"
|
icon_state = "sidewalk"
|
||||||
edge_blending_priority = 1
|
edge_blending_priority = -1
|
||||||
movement_cost = -0.5
|
movement_cost = -0.5
|
||||||
initial_flooring = /decl/flooring/outdoors/sidewalk
|
initial_flooring = /decl/flooring/outdoors/sidewalk
|
||||||
can_dirty = TRUE
|
can_dirty = TRUE
|
||||||
@@ -79,12 +79,31 @@
|
|||||||
desc = "Concrete shaped into a path!"
|
desc = "Concrete shaped into a path!"
|
||||||
icon = 'icons/turf/outdoors_vr.dmi'
|
icon = 'icons/turf/outdoors_vr.dmi'
|
||||||
icon_base = "sidewalk"
|
icon_base = "sidewalk"
|
||||||
|
has_damage_range = 2
|
||||||
|
damage_temperature = T0C+1400
|
||||||
|
flags = TURF_REMOVE_CROWBAR | TURF_CAN_BREAK | TURF_CAN_BURN
|
||||||
|
build_type = /obj/item/stack/tile/floor/sidewalk
|
||||||
|
can_paint = 1
|
||||||
|
can_engrave = FALSE
|
||||||
|
|
||||||
footstep_sounds = list("human" = list(
|
footstep_sounds = list("human" = list(
|
||||||
'sound/effects/footstep/LightStone1.ogg',
|
'sound/effects/footstep/LightStone1.ogg',
|
||||||
'sound/effects/footstep/LightStone2.ogg',
|
'sound/effects/footstep/LightStone2.ogg',
|
||||||
'sound/effects/footstep/LightStone3.ogg',
|
'sound/effects/footstep/LightStone3.ogg',
|
||||||
'sound/effects/footstep/LightStone4.ogg',))
|
'sound/effects/footstep/LightStone4.ogg',))
|
||||||
|
|
||||||
|
/obj/item/stack/tile/floor/sidewalk
|
||||||
|
name = "sidewalk tile"
|
||||||
|
singular_name = "floor tile"
|
||||||
|
desc = "A stone tile fit for covering a section of floor."
|
||||||
|
icon_state = "tile"
|
||||||
|
force = 6.0
|
||||||
|
matter = list(DEFAULT_WALL_MATERIAL = SHEET_MATERIAL_AMOUNT / 4)
|
||||||
|
throwforce = 15.0
|
||||||
|
throw_speed = 5
|
||||||
|
throw_range = 20
|
||||||
|
no_variants = FALSE
|
||||||
|
|
||||||
/turf/simulated/floor/outdoors/sidewalk/Initialize(mapload)
|
/turf/simulated/floor/outdoors/sidewalk/Initialize(mapload)
|
||||||
var/possibledirts = list(
|
var/possibledirts = list(
|
||||||
"[initial(icon_state)]" = 150,
|
"[initial(icon_state)]" = 150,
|
||||||
@@ -104,6 +123,21 @@
|
|||||||
|
|
||||||
/turf/simulated/floor/outdoors/sidewalk/side
|
/turf/simulated/floor/outdoors/sidewalk/side
|
||||||
icon_state = "side-walk"
|
icon_state = "side-walk"
|
||||||
|
initial_flooring = /decl/flooring/outdoors/sidewalk/side
|
||||||
|
|
||||||
|
|
||||||
|
/decl/flooring/outdoors/sidewalk/side
|
||||||
|
icon_base = "sidewalk"
|
||||||
|
build_type = /obj/item/stack/tile/floor/sidewalk/side
|
||||||
|
|
||||||
|
/obj/item/stack/tile/floor/sidewalk/side
|
||||||
|
|
||||||
/turf/simulated/floor/outdoors/sidewalk/slab
|
/turf/simulated/floor/outdoors/sidewalk/slab
|
||||||
icon_state = "slab"
|
icon_state = "slab"
|
||||||
|
initial_flooring = /decl/flooring/outdoors/sidewalk/slab
|
||||||
|
|
||||||
|
/decl/flooring/outdoors/sidewalk/slab
|
||||||
|
icon_base = "slab"
|
||||||
|
build_type = /obj/item/stack/tile/floor/sidewalk/slab
|
||||||
|
|
||||||
|
/obj/item/stack/tile/floor/sidewalk/slab
|
||||||
|
|||||||
@@ -98,6 +98,18 @@
|
|||||||
ties[initial(tie_type.name)] = tie_type
|
ties[initial(tie_type.name)] = tie_type
|
||||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(ties))
|
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(ties))
|
||||||
|
|
||||||
|
/datum/gear/accessory/bowtie
|
||||||
|
display_name = "bowtie selection"
|
||||||
|
path = /obj/item/clothing/accessory/bowtie
|
||||||
|
cost = 1
|
||||||
|
|
||||||
|
/datum/gear/accessory/bowtie/New()
|
||||||
|
..()
|
||||||
|
var/list/bowties = list()
|
||||||
|
for(var/obj/item/clothing/accessory/bowtie_type as anything in typesof(/obj/item/clothing/accessory/bowtie))
|
||||||
|
bowties[initial(bowtie_type.name)] = bowtie_type
|
||||||
|
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(bowties))
|
||||||
|
|
||||||
/datum/gear/accessory/scarf
|
/datum/gear/accessory/scarf
|
||||||
display_name = "scarf selection"
|
display_name = "scarf selection"
|
||||||
path = /obj/item/clothing/accessory/scarf
|
path = /obj/item/clothing/accessory/scarf
|
||||||
@@ -319,3 +331,21 @@
|
|||||||
var/obj/item/clothing/accessory/pridepin_type = pridepin
|
var/obj/item/clothing/accessory/pridepin_type = pridepin
|
||||||
pridepins[initial(pridepin_type.name)] = pridepin_type
|
pridepins[initial(pridepin_type.name)] = pridepin_type
|
||||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(pridepins))
|
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(pridepins))
|
||||||
|
|
||||||
|
/datum/gear/accessory/badge
|
||||||
|
display_name = "sheriff badge (Security)"
|
||||||
|
path = /obj/item/clothing/accessory/badge/holo/sheriff
|
||||||
|
allowed_roles = list("Security Officer","Detective","Head of Security","Warden")
|
||||||
|
|
||||||
|
/datum/gear/accessory/corpbadge
|
||||||
|
display_name = "investigator holobadge (IAA)"
|
||||||
|
path = /obj/item/clothing/accessory/badge/holo/investigator
|
||||||
|
allowed_roles = list("Internal affairs agent")
|
||||||
|
|
||||||
|
/datum/gear/accessory/pressbadge
|
||||||
|
display_name = "corporate press pass"
|
||||||
|
path = /obj/item/clothing/accessory/badge/press
|
||||||
|
|
||||||
|
/datum/gear/accessory/pressbadge
|
||||||
|
display_name = "freelance press pass"
|
||||||
|
path = /obj/item/clothing/accessory/badge/press/independent
|
||||||
|
|||||||
@@ -22,6 +22,19 @@
|
|||||||
path = /obj/item/clothing/mask/surgical
|
path = /obj/item/clothing/mask/surgical
|
||||||
cost = 2
|
cost = 2
|
||||||
|
|
||||||
|
/datum/gear/mask/sterile/white
|
||||||
|
display_name = "white sterile mask"
|
||||||
|
path = /obj/item/clothing/mask/surgical/white
|
||||||
|
cost = 2
|
||||||
|
|
||||||
|
/datum/gear/mask/sterile/white/dust
|
||||||
|
display_name = "dust mask"
|
||||||
|
path = /obj/item/clothing/mask/surgical/dust
|
||||||
|
|
||||||
|
/datum/gear/mask/sterile/white/cloth
|
||||||
|
display_name = "cloth face mask"
|
||||||
|
path = /obj/item/clothing/mask/surgical/cloth
|
||||||
|
|
||||||
/datum/gear/mask/plaguedoctor
|
/datum/gear/mask/plaguedoctor
|
||||||
display_name = "plague doctor's mask"
|
display_name = "plague doctor's mask"
|
||||||
path = /obj/item/clothing/mask/gas/plaguedoctor
|
path = /obj/item/clothing/mask/gas/plaguedoctor
|
||||||
|
|||||||
@@ -2,6 +2,10 @@
|
|||||||
display_name = "nudity permit"
|
display_name = "nudity permit"
|
||||||
path = /obj/item/clothing/under/permit
|
path = /obj/item/clothing/under/permit
|
||||||
|
|
||||||
|
/datum/gear/uniform/suit/natureist_talisman
|
||||||
|
display_name = "naturist talisman"
|
||||||
|
path = /obj/item/clothing/under/permit/natureist_talisman
|
||||||
|
|
||||||
//Polaris overrides
|
//Polaris overrides
|
||||||
/datum/gear/uniform/solgov/pt/sifguard
|
/datum/gear/uniform/solgov/pt/sifguard
|
||||||
display_name = "pt uniform, planetside sec"
|
display_name = "pt uniform, planetside sec"
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ var/list/preferences_datums = list()
|
|||||||
var/UI_style_color = "#ffffff"
|
var/UI_style_color = "#ffffff"
|
||||||
var/UI_style_alpha = 255
|
var/UI_style_alpha = 255
|
||||||
var/tooltipstyle = "Midnight" //Style for popup tooltips
|
var/tooltipstyle = "Midnight" //Style for popup tooltips
|
||||||
var/client_fps = 0
|
var/client_fps = 40
|
||||||
var/ambience_freq = 5 // How often we're playing repeating ambience to a client.
|
var/ambience_freq = 5 // How often we're playing repeating ambience to a client.
|
||||||
var/ambience_chance = 35 // What's the % chance we'll play ambience (in conjunction with the above frequency)
|
var/ambience_chance = 35 // What's the % chance we'll play ambience (in conjunction with the above frequency)
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,13 @@
|
|||||||
desc = "It's a hat used by chefs to keep hair out of your food. Judging by the food in the mess, they don't work."
|
desc = "It's a hat used by chefs to keep hair out of your food. Judging by the food in the mess, they don't work."
|
||||||
icon_state = "chefhat"
|
icon_state = "chefhat"
|
||||||
|
|
||||||
|
/obj/item/clothing/head/hairnet
|
||||||
|
name = "hairnet"
|
||||||
|
desc = "A hairnet used to keep the hair out of the way and out of the food."
|
||||||
|
sprite_sheets = list(
|
||||||
|
SPECIES_TAJARAN = 'icons/inventory/head/mob_tajaran.dmi'
|
||||||
|
)
|
||||||
|
|
||||||
//Captain
|
//Captain
|
||||||
/obj/item/clothing/head/caphat
|
/obj/item/clothing/head/caphat
|
||||||
name = "site manager's hat"
|
name = "site manager's hat"
|
||||||
|
|||||||
@@ -63,6 +63,24 @@
|
|||||||
|
|
||||||
adjust_mask(usr)
|
adjust_mask(usr)
|
||||||
|
|
||||||
|
/obj/item/clothing/mask/surgical/white
|
||||||
|
icon_state = "sterilew"
|
||||||
|
item_state_slots = list(slot_r_hand_str = "sterilew", slot_l_hand_str = "sterilew")
|
||||||
|
|
||||||
|
/obj/item/clothing/mask/surgical/dust
|
||||||
|
name = "dust mask"
|
||||||
|
desc = "A dust mask designed to protect the wearer against construction and/or custodial particulate."
|
||||||
|
icon_state = "dust"
|
||||||
|
item_state_slots = list(slot_r_hand_str = "dust", slot_l_hand_str = "dust")
|
||||||
|
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 30, rad = 0)
|
||||||
|
|
||||||
|
/obj/item/clothing/mask/surgical/cloth
|
||||||
|
name = "cloth mask"
|
||||||
|
desc = "A cloth mask designed to protect the wearer against allergens, illnesses, and social interaction."
|
||||||
|
icon_state = "cloth"
|
||||||
|
item_state_slots = list(slot_r_hand_str = "cloth", slot_l_hand_str = "cloth")
|
||||||
|
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 20, rad = 0)
|
||||||
|
|
||||||
/obj/item/clothing/mask/fakemoustache
|
/obj/item/clothing/mask/fakemoustache
|
||||||
name = "fake moustache"
|
name = "fake moustache"
|
||||||
desc = "Warning: moustache is fake."
|
desc = "Warning: moustache is fake."
|
||||||
|
|||||||
@@ -227,14 +227,6 @@
|
|||||||
/obj/item/clothing/shoes/boots/ranger/yellow
|
/obj/item/clothing/shoes/boots/ranger/yellow
|
||||||
bootcolor = "yellow"
|
bootcolor = "yellow"
|
||||||
|
|
||||||
/obj/item/clothing/shoes/primitive
|
|
||||||
name = "primitive shoes"
|
|
||||||
desc = "Some patched together rags. Better than being barefoot."
|
|
||||||
icon_state = "rag"
|
|
||||||
force = 0
|
|
||||||
drop_sound = 'sound/items/drop/clothing.ogg'
|
|
||||||
pickup_sound = 'sound/items/pickup/clothing.ogg'
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 80s
|
* 80s
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -157,6 +157,20 @@
|
|||||||
desc = "A neosilk clip-on tie. This one is disgusting."
|
desc = "A neosilk clip-on tie. This one is disgusting."
|
||||||
icon_state = "horribletie"
|
icon_state = "horribletie"
|
||||||
|
|
||||||
|
/obj/item/clothing/accessory/bowtie
|
||||||
|
name = "red bow tie"
|
||||||
|
desc = "Snazzy!"
|
||||||
|
icon_state = "redbowtie"
|
||||||
|
slot = ACCESSORY_SLOT_TIE
|
||||||
|
|
||||||
|
/obj/item/clothing/accessory/bowtie/black
|
||||||
|
name = "black bow tie"
|
||||||
|
icon_state = "blackbowtie"
|
||||||
|
|
||||||
|
/obj/item/clothing/accessory/bowtie/white
|
||||||
|
name = "white bow tie"
|
||||||
|
icon_state = "whitebowtie"
|
||||||
|
|
||||||
/obj/item/clothing/accessory/stethoscope
|
/obj/item/clothing/accessory/stethoscope
|
||||||
name = "stethoscope"
|
name = "stethoscope"
|
||||||
desc = "An outdated medical apparatus for listening to the sounds of the human body. It also makes you look like you know what you're doing."
|
desc = "An outdated medical apparatus for listening to the sounds of the human body. It also makes you look like you know what you're doing."
|
||||||
|
|||||||
@@ -6,19 +6,14 @@
|
|||||||
|
|
||||||
/obj/item/clothing/accessory/badge
|
/obj/item/clothing/accessory/badge
|
||||||
name = "detective's badge"
|
name = "detective's badge"
|
||||||
desc = "Security Department detective's badge, made from gold."
|
desc = "A corporate security badge, made from gold and set on false leather."
|
||||||
icon_state = "badge"
|
icon_state = "marshalbadge"
|
||||||
slot_flags = SLOT_BELT | SLOT_TIE
|
slot_flags = SLOT_BELT | SLOT_TIE
|
||||||
slot = ACCESSORY_SLOT_MEDAL
|
slot = ACCESSORY_SLOT_MEDAL
|
||||||
|
|
||||||
var/stored_name
|
var/stored_name
|
||||||
var/badge_string = "Corporate Security"
|
var/badge_string = "Corporate Security"
|
||||||
|
|
||||||
/obj/item/clothing/accessory/badge/old
|
|
||||||
name = "faded badge"
|
|
||||||
desc = "A faded badge, backed with leather. It bears the emblem of the Forensic division."
|
|
||||||
icon_state = "badge_round"
|
|
||||||
|
|
||||||
/obj/item/clothing/accessory/badge/proc/set_name(var/new_name)
|
/obj/item/clothing/accessory/badge/proc/set_name(var/new_name)
|
||||||
stored_name = new_name
|
stored_name = new_name
|
||||||
name = "[initial(name)] ([stored_name])"
|
name = "[initial(name)] ([stored_name])"
|
||||||
@@ -26,7 +21,6 @@
|
|||||||
/obj/item/clothing/accessory/badge/proc/set_desc(var/mob/living/carbon/human/H)
|
/obj/item/clothing/accessory/badge/proc/set_desc(var/mob/living/carbon/human/H)
|
||||||
|
|
||||||
/obj/item/clothing/accessory/badge/attack_self(mob/user as mob)
|
/obj/item/clothing/accessory/badge/attack_self(mob/user as mob)
|
||||||
|
|
||||||
if(!stored_name)
|
if(!stored_name)
|
||||||
to_chat(user, "You polish your old badge fondly, shining up the surface.")
|
to_chat(user, "You polish your old badge fondly, shining up the surface.")
|
||||||
set_name(user.real_name)
|
set_name(user.real_name)
|
||||||
@@ -42,26 +36,45 @@
|
|||||||
if(isliving(user))
|
if(isliving(user))
|
||||||
user.visible_message("<span class='danger'>[user] invades [M]'s personal space, thrusting [src] into their face insistently.</span>","<span class='danger'>You invade [M]'s personal space, thrusting [src] into their face insistently.</span>")
|
user.visible_message("<span class='danger'>[user] invades [M]'s personal space, thrusting [src] into their face insistently.</span>","<span class='danger'>You invade [M]'s personal space, thrusting [src] into their face insistently.</span>")
|
||||||
user.do_attack_animation(M)
|
user.do_attack_animation(M)
|
||||||
user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) //to prevent spam
|
user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) //NO SPAM
|
||||||
|
|
||||||
// Sheriff Badge (toy)
|
// General Badges
|
||||||
/obj/item/clothing/accessory/badge/sheriff
|
/obj/item/clothing/accessory/badge/old
|
||||||
name = "sheriff badge"
|
name = "faded badge"
|
||||||
desc = "This town ain't big enough for the two of us, pardner."
|
desc = "A faded badge, backed with leather."
|
||||||
icon_state = "sheriff"
|
icon_state = "badge_round"
|
||||||
item_state = "goldbadge"
|
|
||||||
|
|
||||||
/obj/item/clothing/accessory/badge/sheriff/attack_self(mob/user as mob)
|
/obj/item/clothing/accessory/badge/idbadge/nt
|
||||||
user.visible_message("[user] shows their sheriff badge. There's a new sheriff in town!",\
|
name = "\improper NT ID badge"
|
||||||
"You flash the sheriff badge to everyone around you!")
|
desc = "A descriptive identification badge with the holder's credentials. This one has red marks with the NanoTrasen logo on it."
|
||||||
|
icon_state = "ntbadge"
|
||||||
|
badge_string = null
|
||||||
|
|
||||||
/obj/item/clothing/accessory/badge/sheriff/attack(mob/living/carbon/human/M, mob/living/user)
|
/obj/item/clothing/accessory/badge/press
|
||||||
if(isliving(user))
|
name = "corporate press pass"
|
||||||
user.visible_message("<span class='danger'>[user] invades [M]'s personal space, the sheriff badge into their face!.</span>","<span class='danger'>You invade [M]'s personal space, thrusting the sheriff badge into their face insistently.</span>")
|
desc = "A corporate reporter's pass, emblazoned with the NanoTrasen logo."
|
||||||
user.do_attack_animation(M)
|
icon_state = "pressbadge"
|
||||||
user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) //to prevent spam
|
item_state = "pbadge"
|
||||||
|
badge_string = "Corporate Reporter"
|
||||||
|
w_class = ITEMSIZE_TINY
|
||||||
|
|
||||||
//.Holobadges.
|
drop_sound = 'sound/items/drop/rubber.ogg'
|
||||||
|
pickup_sound = 'sound/items/pickup/rubber.ogg'
|
||||||
|
|
||||||
|
/obj/item/clothing/accessory/badge/press/independent
|
||||||
|
name = "press pass"
|
||||||
|
desc = "A freelance journalist's pass."
|
||||||
|
icon_state = "pressbadge-i"
|
||||||
|
badge_string = "Freelance Journalist"
|
||||||
|
|
||||||
|
/obj/item/clothing/accessory/badge/press/plastic
|
||||||
|
name = "plastic press pass"
|
||||||
|
desc = "A journalist's 'pass' shaped, for whatever reason, like a security badge. It is made of plastic."
|
||||||
|
icon_state = "pbadge"
|
||||||
|
badge_string = "Sicurity Journelist"
|
||||||
|
w_class = ITEMSIZE_SMALL
|
||||||
|
|
||||||
|
// Holobadges
|
||||||
/obj/item/clothing/accessory/badge/holo
|
/obj/item/clothing/accessory/badge/holo
|
||||||
name = "holobadge"
|
name = "holobadge"
|
||||||
desc = "This glowing blue badge marks the holder as THE LAW."
|
desc = "This glowing blue badge marks the holder as THE LAW."
|
||||||
@@ -110,10 +123,17 @@
|
|||||||
name = "holobadge box"
|
name = "holobadge box"
|
||||||
desc = "A box claiming to contain holobadges."
|
desc = "A box claiming to contain holobadges."
|
||||||
starts_with = list(
|
starts_with = list(
|
||||||
/obj/item/clothing/accessory/badge/holo = 4,
|
/obj/item/clothing/accessory/badge/holo/officer = 2,
|
||||||
|
/obj/item/clothing/accessory/badge/holo = 2,
|
||||||
/obj/item/clothing/accessory/badge/holo/cord = 2
|
/obj/item/clothing/accessory/badge/holo/cord = 2
|
||||||
)
|
)
|
||||||
|
|
||||||
|
/obj/item/clothing/accessory/badge/holo/officer
|
||||||
|
name = "officer's badge"
|
||||||
|
desc = "A bronze corporate security badge. Stamped with the words 'Security Officer.'"
|
||||||
|
icon_state = "bronzebadge"
|
||||||
|
slot_flags = SLOT_TIE | SLOT_BELT
|
||||||
|
|
||||||
/obj/item/clothing/accessory/badge/holo/warden
|
/obj/item/clothing/accessory/badge/holo/warden
|
||||||
name = "warden's holobadge"
|
name = "warden's holobadge"
|
||||||
desc = "A silver corporate security badge. Stamped with the words 'Warden.'"
|
desc = "A silver corporate security badge. Stamped with the words 'Warden.'"
|
||||||
@@ -122,7 +142,7 @@
|
|||||||
|
|
||||||
/obj/item/clothing/accessory/badge/holo/hos
|
/obj/item/clothing/accessory/badge/holo/hos
|
||||||
name = "head of security's holobadge"
|
name = "head of security's holobadge"
|
||||||
desc = "An immaculately polished gold security badge. Labeled 'Head of Security.'"
|
desc = "An immaculately polished gold security badge. Stamped with the words 'Head of Security.'"
|
||||||
icon_state = "goldbadge"
|
icon_state = "goldbadge"
|
||||||
slot_flags = SLOT_TIE | SLOT_BELT
|
slot_flags = SLOT_TIE | SLOT_BELT
|
||||||
|
|
||||||
@@ -132,20 +152,48 @@
|
|||||||
icon_state = "marshalbadge"
|
icon_state = "marshalbadge"
|
||||||
slot_flags = SLOT_TIE | SLOT_BELT
|
slot_flags = SLOT_TIE | SLOT_BELT
|
||||||
|
|
||||||
|
/obj/item/clothing/accessory/badge/holo/investigator
|
||||||
|
name = "\improper investigator holobadge"
|
||||||
|
desc = "This badge marks the holder as an investigative agent."
|
||||||
|
icon_state = "invbadge"
|
||||||
|
badge_string = "Corporate Investigator"
|
||||||
|
slot_flags = SLOT_TIE | SLOT_BELT
|
||||||
|
|
||||||
|
/obj/item/clothing/accessory/badge/holo/sheriff
|
||||||
|
name = "sheriff badge"
|
||||||
|
desc = "A star-shaped brass badge denoting who the law is around these parts."
|
||||||
|
icon_state = "sheriff"
|
||||||
|
slot_flags = SLOT_TIE | SLOT_BELT
|
||||||
|
|
||||||
/obj/item/weapon/storage/box/holobadge/hos
|
/obj/item/weapon/storage/box/holobadge/hos
|
||||||
name = "holobadge box"
|
name = "holobadge box"
|
||||||
desc = "A box claiming to contain holobadges."
|
desc = "A box claiming to contain holobadges."
|
||||||
starts_with = list(
|
starts_with = list(
|
||||||
/obj/item/clothing/accessory/badge/holo = 2,
|
/obj/item/clothing/accessory/badge/holo/officer = 2,
|
||||||
/obj/item/clothing/accessory/badge/holo/warden = 1,
|
/obj/item/clothing/accessory/badge/holo/warden = 1,
|
||||||
/obj/item/clothing/accessory/badge/holo/detective = 2,
|
/obj/item/clothing/accessory/badge/holo/detective = 2,
|
||||||
/obj/item/clothing/accessory/badge/holo/hos = 1,
|
/obj/item/clothing/accessory/badge/holo/hos = 1,
|
||||||
/obj/item/clothing/accessory/badge/holo/cord = 1
|
/obj/item/clothing/accessory/badge/holo/cord = 1
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// Synthmorph bag / Corporation badges. Primarily used on the robobag, but can be worn. Default is NT.
|
// Sheriff Badge (toy)
|
||||||
|
/obj/item/clothing/accessory/badge/sheriff
|
||||||
|
name = "sheriff badge"
|
||||||
|
desc = "This town ain't big enough for the two of us, pardner."
|
||||||
|
icon_state = "sheriff_toy"
|
||||||
|
item_state = "sheriff_toy"
|
||||||
|
|
||||||
|
/obj/item/clothing/accessory/badge/sheriff/attack_self(mob/user as mob)
|
||||||
|
user.visible_message("[user] shows their sheriff badge. There's a new sheriff in town!",\
|
||||||
|
"You flash the sheriff badge to everyone around you!")
|
||||||
|
|
||||||
|
/obj/item/clothing/accessory/badge/sheriff/attack(mob/living/carbon/human/M, mob/living/user)
|
||||||
|
if(isliving(user))
|
||||||
|
user.visible_message("<span class='danger'>[user] invades [M]'s personal space, the sheriff badge into their face!.</span>","<span class='danger'>You invade [M]'s personal space, thrusting the sheriff badge into their face insistently.</span>")
|
||||||
|
user.do_attack_animation(M)
|
||||||
|
user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) //NO SPAM
|
||||||
|
|
||||||
|
// Synthmorph bag / Corporation badges. Primarily used on the robobag, but can be worn. Default is NT.
|
||||||
/obj/item/clothing/accessory/badge/corporate_tag
|
/obj/item/clothing/accessory/badge/corporate_tag
|
||||||
name = "NanoTrasen Badge"
|
name = "NanoTrasen Badge"
|
||||||
desc = "A plain metallic plate that might denote the wearer as a member of NanoTrasen."
|
desc = "A plain metallic plate that might denote the wearer as a member of NanoTrasen."
|
||||||
|
|||||||
@@ -151,6 +151,9 @@
|
|||||||
desc = "A worn-out handgun holster. Perfect for concealed carry"
|
desc = "A worn-out handgun holster. Perfect for concealed carry"
|
||||||
icon_state = "holster"
|
icon_state = "holster"
|
||||||
|
|
||||||
|
/obj/item/clothing/accessory/holster/armpit/black
|
||||||
|
icon_state = "holster_b"
|
||||||
|
|
||||||
/obj/item/clothing/accessory/holster/waist
|
/obj/item/clothing/accessory/holster/waist
|
||||||
name = "waist holster"
|
name = "waist holster"
|
||||||
desc = "A handgun holster. Made of expensive leather."
|
desc = "A handgun holster. Made of expensive leather."
|
||||||
@@ -158,15 +161,26 @@
|
|||||||
overlay_state = "holster_low"
|
overlay_state = "holster_low"
|
||||||
concealed_holster = 0
|
concealed_holster = 0
|
||||||
|
|
||||||
|
/obj/item/clothing/accessory/holster/waist/black
|
||||||
|
icon_state = "holster_b_low"
|
||||||
|
|
||||||
/obj/item/clothing/accessory/holster/hip
|
/obj/item/clothing/accessory/holster/hip
|
||||||
name = "hip holster"
|
name = "hip holster"
|
||||||
desc = "A handgun holster slung low on the hip, draw pardner!"
|
desc = "<i>No one dared to ask his business, no one dared to make a slip. The stranger there among them had a big iron on his hip.</i>"
|
||||||
icon_state = "holster_hip"
|
icon_state = "holster_hip"
|
||||||
concealed_holster = 0
|
concealed_holster = 0
|
||||||
|
|
||||||
|
/obj/item/clothing/accessory/holster/hip/black
|
||||||
|
desc = "A handgun holster slung low on the hip, draw pardner!"
|
||||||
|
icon_state = "holster_b_hip"
|
||||||
|
|
||||||
/obj/item/clothing/accessory/holster/leg
|
/obj/item/clothing/accessory/holster/leg
|
||||||
name = "leg holster"
|
name = "leg holster"
|
||||||
desc = "A tacticool handgun holster. Worn on the upper leg."
|
desc = "A drop leg holster made of a durable synthetic leather."
|
||||||
icon_state = "holster_leg"
|
icon_state = "holster_leg"
|
||||||
overlay_state = "holster_leg"
|
overlay_state = "holster_leg"
|
||||||
concealed_holster = 0
|
concealed_holster = 0
|
||||||
|
|
||||||
|
/obj/item/clothing/accessory/holster/leg/black
|
||||||
|
desc = "A tacticool handgun holster. Worn on the upper leg."
|
||||||
|
icon_state = "holster_b_leg"
|
||||||
@@ -1257,13 +1257,6 @@
|
|||||||
icon_state = "cowboy_grey"
|
icon_state = "cowboy_grey"
|
||||||
worn_state = "cowboy_grey"
|
worn_state = "cowboy_grey"
|
||||||
|
|
||||||
/obj/item/clothing/under/primitive
|
|
||||||
name = "primitive clothes"
|
|
||||||
desc = "Some patched together rags. Better than being naked."
|
|
||||||
force = 0
|
|
||||||
icon_state = "rag"
|
|
||||||
worn_state = "rag"
|
|
||||||
|
|
||||||
/obj/item/clothing/under/curator
|
/obj/item/clothing/under/curator
|
||||||
name = "curator uniform"
|
name = "curator uniform"
|
||||||
desc = "A rugged uniform suitable for treasure hunting."
|
desc = "A rugged uniform suitable for treasure hunting."
|
||||||
|
|||||||
@@ -6,8 +6,8 @@
|
|||||||
/obj/item/clothing/under/permit
|
/obj/item/clothing/under/permit
|
||||||
name = "public nudity permit"
|
name = "public nudity permit"
|
||||||
desc = "This permit entitles the bearer to conduct their duties without a uniform. Normally issued to furred crewmembers or those with nothing to hide."
|
desc = "This permit entitles the bearer to conduct their duties without a uniform. Normally issued to furred crewmembers or those with nothing to hide."
|
||||||
icon = 'icons/obj/card.dmi'
|
icon = 'icons/obj/card_new.dmi'
|
||||||
icon_state = "guest"
|
icon_state = "permit-nude"
|
||||||
body_parts_covered = 0
|
body_parts_covered = 0
|
||||||
equip_sound = null
|
equip_sound = null
|
||||||
|
|
||||||
@@ -299,7 +299,7 @@
|
|||||||
/obj/item/clothing/under/summerdress/blue
|
/obj/item/clothing/under/summerdress/blue
|
||||||
icon_state = "summerdress2"
|
icon_state = "summerdress2"
|
||||||
|
|
||||||
/obj/item/clothing/under/dress/dress_cap/femformal // formal in the loosest sense. because it's going to be taken off. or something. funnier in my head i swear
|
/obj/item/clothing/under/dress/dress_cap/femformal // formal in the loosest sense. because it's going to be taken off. or something. funnier in my head i swear
|
||||||
name = "site manager's feminine formalwear"
|
name = "site manager's feminine formalwear"
|
||||||
desc = "Essentially a skimpy...dress? Leotard? Whatever it is, it has the coloration and markings suitable for a site manager or rough equivalent."
|
desc = "Essentially a skimpy...dress? Leotard? Whatever it is, it has the coloration and markings suitable for a site manager or rough equivalent."
|
||||||
icon = 'icons/inventory/uniform/item_vr.dmi'
|
icon = 'icons/inventory/uniform/item_vr.dmi'
|
||||||
|
|||||||
70
code/modules/clothing/under/tribal.dm
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
/* Tribal Clothing
|
||||||
|
* Contains:
|
||||||
|
* Primitive Clothing
|
||||||
|
* Tribal Clothing
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Primitive Clothing
|
||||||
|
*/
|
||||||
|
/obj/item/clothing/under/primitive
|
||||||
|
name = "primitive clothes"
|
||||||
|
desc = "Some patched together rags. Better than being naked."
|
||||||
|
force = 0
|
||||||
|
icon_state = "rag"
|
||||||
|
worn_state = "rag"
|
||||||
|
|
||||||
|
/obj/item/clothing/shoes/primitive
|
||||||
|
name = "primitive shoes"
|
||||||
|
desc = "Some patched together rags. Better than being barefoot."
|
||||||
|
icon_state = "rag"
|
||||||
|
force = 0
|
||||||
|
drop_sound = 'sound/items/drop/clothing.ogg'
|
||||||
|
pickup_sound = 'sound/items/pickup/clothing.ogg'
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Tribal Clothing
|
||||||
|
*/
|
||||||
|
/obj/item/clothing/under/permit/natureist_talisman //Tribal version of the Nudity Permit
|
||||||
|
name = "naturist talisman"
|
||||||
|
desc = "This ancient talisman gives rights to those that wish to be closer to nature by casting their constricting clothes aside."
|
||||||
|
icon = 'icons/inventory/accessory/item.dmi'
|
||||||
|
icon_override = 'icons/inventory/accessory/mob.dmi'
|
||||||
|
icon_state = "talisman"
|
||||||
|
item_state = "talisman"
|
||||||
|
worn_state = "talisman"
|
||||||
|
|
||||||
|
/obj/item/clothing/under/tribalwear
|
||||||
|
item_state_slots = list(slot_r_hand_str = "tribalwear", slot_l_hand_str = "tribalwear")
|
||||||
|
|
||||||
|
/obj/item/clothing/under/tribalwear/common1
|
||||||
|
name = "tribalwear"
|
||||||
|
desc = "A traditionally woven robe made with locally sourced material."
|
||||||
|
icon_state = "tribal_common1"
|
||||||
|
|
||||||
|
/obj/item/clothing/under/tribalwear/common2
|
||||||
|
name = "tribalwear"
|
||||||
|
desc = "A traditionally woven outfit made with locally sourced material."
|
||||||
|
icon_state = "tribal_common2"
|
||||||
|
|
||||||
|
/obj/item/clothing/under/tribalwear/hunter
|
||||||
|
name = "hunting tribalwear"
|
||||||
|
desc = "Dusty rags decorated with strips of leather and small pieces of cyan colored stones."
|
||||||
|
icon_state = "tribal_hunter"
|
||||||
|
|
||||||
|
/obj/item/clothing/under/tribalwear/chief
|
||||||
|
name = "chief's tribalwear"
|
||||||
|
desc = "Well maintained robe adorned with fine leather and polished cyan stones."
|
||||||
|
icon_state = "tribal_chief"
|
||||||
|
|
||||||
|
/obj/item/clothing/under/tribalwear/shaman
|
||||||
|
name = "shaman robes"
|
||||||
|
desc = "Carefully hand wozen cloth robes with heavy colored stones jewelry drapped over top."
|
||||||
|
icon_state = "tribal_shaman"
|
||||||
|
|
||||||
|
/obj/item/clothing/shoes/tribalwear
|
||||||
|
name = "tribal sandals"
|
||||||
|
desc = "Traditionally made sandals made with local materials."
|
||||||
|
icon_state = "tribal_sandals"
|
||||||
|
species_restricted = null
|
||||||
|
body_parts_covered = 0
|
||||||
@@ -487,6 +487,7 @@
|
|||||||
/obj/item/weapon/plantspray/pests = 20,
|
/obj/item/weapon/plantspray/pests = 20,
|
||||||
/obj/item/weapon/reagent_containers/syringe = 5,
|
/obj/item/weapon/reagent_containers/syringe = 5,
|
||||||
/obj/item/weapon/reagent_containers/glass/beaker = 4,
|
/obj/item/weapon/reagent_containers/glass/beaker = 4,
|
||||||
|
/obj/item/weapon/watertank = 1,
|
||||||
/obj/item/weapon/storage/bag/plants = 5)
|
/obj/item/weapon/storage/bag/plants = 5)
|
||||||
premium = list(/obj/item/weapon/reagent_containers/glass/bottle/ammonia = 10,
|
premium = list(/obj/item/weapon/reagent_containers/glass/bottle/ammonia = 10,
|
||||||
/obj/item/weapon/reagent_containers/glass/bottle/diethylamine = 5)
|
/obj/item/weapon/reagent_containers/glass/bottle/diethylamine = 5)
|
||||||
@@ -1253,6 +1254,7 @@
|
|||||||
/obj/item/clothing/suit/chef = 5,
|
/obj/item/clothing/suit/chef = 5,
|
||||||
/obj/item/clothing/suit/chef/classic = 5,
|
/obj/item/clothing/suit/chef/classic = 5,
|
||||||
/obj/item/clothing/head/chefhat = 5,
|
/obj/item/clothing/head/chefhat = 5,
|
||||||
|
/obj/item/clothing/head/hairnet = 5,
|
||||||
/obj/item/clothing/under/waiter = 5,
|
/obj/item/clothing/under/waiter = 5,
|
||||||
/obj/item/clothing/under/sundress = 1
|
/obj/item/clothing/under/sundress = 1
|
||||||
)
|
)
|
||||||
@@ -1533,7 +1535,8 @@
|
|||||||
/obj/item/clothing/gloves/black = 5,
|
/obj/item/clothing/gloves/black = 5,
|
||||||
/obj/item/weapon/storage/belt/janitor = 5,
|
/obj/item/weapon/storage/belt/janitor = 5,
|
||||||
/obj/item/clothing/shoes/galoshes = 5,
|
/obj/item/clothing/shoes/galoshes = 5,
|
||||||
/obj/item/weapon/cartridge/janitor = 5
|
/obj/item/weapon/cartridge/janitor = 5,
|
||||||
|
/obj/item/weapon/watertank/janitor = 1
|
||||||
)
|
)
|
||||||
req_log_access = access_hop
|
req_log_access = access_hop
|
||||||
has_logs = 1
|
has_logs = 1
|
||||||
|
|||||||
@@ -2250,7 +2250,9 @@
|
|||||||
/obj/item/weapon/storage/belt/utility/chief/full = 5,
|
/obj/item/weapon/storage/belt/utility/chief/full = 5,
|
||||||
/obj/item/weapon/storage/belt/utility/alien/full = 5,
|
/obj/item/weapon/storage/belt/utility/alien/full = 5,
|
||||||
/obj/item/weapon/storage/bible = 5,
|
/obj/item/weapon/storage/bible = 5,
|
||||||
|
/obj/item/weapon/pickaxe = 5,
|
||||||
/obj/item/weapon/pickaxe/drill = 5,
|
/obj/item/weapon/pickaxe/drill = 5,
|
||||||
|
/obj/item/weapon/pickaxe/advdrill = 5,
|
||||||
/obj/item/weapon/pickaxe/diamonddrill = 5,
|
/obj/item/weapon/pickaxe/diamonddrill = 5,
|
||||||
/obj/item/weapon/pickaxe/gold = 5,
|
/obj/item/weapon/pickaxe/gold = 5,
|
||||||
/obj/item/weapon/pickaxe/diamond = 5,
|
/obj/item/weapon/pickaxe/diamond = 5,
|
||||||
|
|||||||
@@ -17,6 +17,10 @@
|
|||||||
name = "infestation - spiders"
|
name = "infestation - spiders"
|
||||||
event_type = /datum/event2/event/infestation/spiderlings
|
event_type = /datum/event2/event/infestation/spiderlings
|
||||||
|
|
||||||
|
/datum/event2/event/infestation/cockroaches
|
||||||
|
vermin_string = "cockroaches"
|
||||||
|
max_vermin = 6
|
||||||
|
things_to_spawn = list(/mob/living/simple_mob/animal/passive/cockroach)
|
||||||
|
|
||||||
/datum/event2/event/infestation
|
/datum/event2/event/infestation
|
||||||
var/vermin_string = null
|
var/vermin_string = null
|
||||||
|
|||||||
@@ -72,7 +72,8 @@
|
|||||||
|
|
||||||
var/list/restricted_programs = list(
|
var/list/restricted_programs = list(
|
||||||
"Burnoff Test Simulation" = new/datum/holodeck_program(/area/holodeck/source_burntest, list()),
|
"Burnoff Test Simulation" = new/datum/holodeck_program(/area/holodeck/source_burntest, list()),
|
||||||
"Wildlife Simulation" = new/datum/holodeck_program(/area/holodeck/source_wildlife, list())
|
"Wildlife Simulation" = new/datum/holodeck_program(/area/holodeck/source_wildlife, list()),
|
||||||
|
"Inside" = new/datum/holodeck_program(/area/holodeck/the_uwu_zone, list('sound/vore/sunesound/prey/loop.ogg')), //VOREStation add
|
||||||
)
|
)
|
||||||
|
|
||||||
/obj/machinery/computer/HolodeckControl/attack_ai(var/mob/user as mob)
|
/obj/machinery/computer/HolodeckControl/attack_ai(var/mob/user as mob)
|
||||||
|
|||||||
295
code/modules/hydroponics/backtank.dm
Normal file
@@ -0,0 +1,295 @@
|
|||||||
|
/*
|
||||||
|
* Hydroponics tank and base code
|
||||||
|
*/
|
||||||
|
/obj/item/weapon/watertank
|
||||||
|
name = "backpack water tank"
|
||||||
|
desc = "A S.U.N.S.H.I.N.E. brand watertank backpack with nozzle to water plants."
|
||||||
|
icon = 'icons/inventory/back/item.dmi'
|
||||||
|
icon_state = "waterbackpack"
|
||||||
|
item_state = "waterbackpack"
|
||||||
|
w_class = ITEMSIZE_LARGE
|
||||||
|
slot_flags = SLOT_BACK
|
||||||
|
slowdown = 0.5
|
||||||
|
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 30)
|
||||||
|
|
||||||
|
var/obj/item/noz
|
||||||
|
var/volume = 500
|
||||||
|
|
||||||
|
/obj/item/weapon/watertank/Initialize()
|
||||||
|
. = ..()
|
||||||
|
create_reagents(volume, OPENCONTAINER)
|
||||||
|
noz = make_noz()
|
||||||
|
|
||||||
|
/obj/item/weapon/watertank/MouseDrop()
|
||||||
|
if(ismob(loc))
|
||||||
|
if(!CanMouseDrop(src))
|
||||||
|
return
|
||||||
|
var/mob/M = loc
|
||||||
|
if(!M.unEquip(src))
|
||||||
|
return
|
||||||
|
add_fingerprint(usr)
|
||||||
|
M.put_in_any_hand_if_possible(src)
|
||||||
|
|
||||||
|
/obj/item/weapon/watertank/Destroy()
|
||||||
|
QDEL_NULL(noz)
|
||||||
|
return ..()
|
||||||
|
|
||||||
|
/obj/item/weapon/watertank/ui_action_click(mob/user)
|
||||||
|
toggle_mister(user)
|
||||||
|
|
||||||
|
/obj/item/weapon/watertank/attack_hand(var/mob/user)
|
||||||
|
if(loc == user)
|
||||||
|
toggle_mister()
|
||||||
|
else
|
||||||
|
..()
|
||||||
|
|
||||||
|
/obj/item/weapon/watertank/item_action_slot_check(slot, mob/user)
|
||||||
|
if(slot == user.getBackSlot())
|
||||||
|
return 1
|
||||||
|
|
||||||
|
//checks that the base unit is in the correct slot to be used
|
||||||
|
/obj/item/weapon/watertank/proc/slot_check()
|
||||||
|
var/mob/M = loc
|
||||||
|
if(!istype(M))
|
||||||
|
return 0 //not equipped
|
||||||
|
|
||||||
|
if((slot_flags & SLOT_BACK) && M.get_equipped_item(slot_back) == src)
|
||||||
|
return 1
|
||||||
|
if((slot_flags & SLOT_BACK) && M.get_equipped_item(slot_s_store) == src)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
return 0
|
||||||
|
|
||||||
|
/obj/item/weapon/watertank/verb/toggle_mister()
|
||||||
|
set name = "Toggle Mister"
|
||||||
|
set category = "Object"
|
||||||
|
|
||||||
|
var/mob/living/carbon/human/user = usr
|
||||||
|
if(!noz)
|
||||||
|
to_chat(user, "<span class='warning'>The mister is missing!</span>")
|
||||||
|
return
|
||||||
|
if(noz.loc != src)
|
||||||
|
remove_noz(user) //Remove from their hands and back onto the defib unit
|
||||||
|
return
|
||||||
|
if(!slot_check())
|
||||||
|
to_chat(user, "<span class='warning'>You need to equip [src] before taking out [noz].</span>")
|
||||||
|
else
|
||||||
|
if(!usr.put_in_hands(noz)) //Detach the handset into the user's hands
|
||||||
|
to_chat(user, "<span class='warning'>You need a free hand to hold the handset!</span>")
|
||||||
|
update_icon() //success
|
||||||
|
|
||||||
|
/obj/item/weapon/watertank/proc/make_noz()
|
||||||
|
return new /obj/item/weapon/reagent_containers/spray/mister(src)
|
||||||
|
|
||||||
|
/obj/item/weapon/watertank/equipped(mob/user, slot)
|
||||||
|
..()
|
||||||
|
if(slot != slot_back)
|
||||||
|
remove_noz()
|
||||||
|
|
||||||
|
/obj/item/weapon/watertank/proc/remove_noz(var/mob/user)
|
||||||
|
if(!noz) return
|
||||||
|
|
||||||
|
if(ismob(noz.loc))
|
||||||
|
var/mob/M = noz.loc
|
||||||
|
if(M.drop_from_inventory(noz, src))
|
||||||
|
to_chat(user, "<span class='notice'>\The [noz] snaps back into the main unit.</span>")
|
||||||
|
else
|
||||||
|
noz.forceMove(src)
|
||||||
|
|
||||||
|
/obj/item/weapon/watertank/attackby(obj/item/W, mob/user, params)
|
||||||
|
if(W == noz)
|
||||||
|
remove_noz()
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
return ..()
|
||||||
|
|
||||||
|
/obj/item/weapon/watertank/dropped(var/mob/user)
|
||||||
|
..()
|
||||||
|
remove_noz(user)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This mister item is intended as an extension of the watertank and always attached to it.
|
||||||
|
* Therefore, it's designed to be "locked" to the player's hands or extended back onto
|
||||||
|
* the watertank backpack. Allowing it to be placed elsewhere or created without a parent
|
||||||
|
* watertank object will likely lead to weird behaviour or runtimes.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Hydroponics mister
|
||||||
|
*/
|
||||||
|
/obj/item/weapon/reagent_containers/spray/mister
|
||||||
|
name = "water mister"
|
||||||
|
desc = "A mister nozzle attached to a water tank."
|
||||||
|
icon_state = "mister"
|
||||||
|
item_state = "mister"
|
||||||
|
w_class = ITEMSIZE_LARGE
|
||||||
|
amount_per_transfer_from_this = 50
|
||||||
|
possible_transfer_amounts = list(50)
|
||||||
|
volume = 500
|
||||||
|
item_flags = NOBLUDGEON
|
||||||
|
slot_flags = NONE
|
||||||
|
|
||||||
|
var/obj/item/weapon/watertank/tank
|
||||||
|
|
||||||
|
/obj/item/weapon/reagent_containers/spray/mister/Initialize()
|
||||||
|
. = ..()
|
||||||
|
tank = loc
|
||||||
|
if(!istype(tank))
|
||||||
|
return INITIALIZE_HINT_QDEL
|
||||||
|
reagents = tank.reagents //This mister is really just a proxy for the tank's reagents
|
||||||
|
|
||||||
|
/obj/item/weapon/reagent_containers/spray/mister/doMove(atom/destination)
|
||||||
|
if(destination && (destination != tank.loc || !ismob(destination)))
|
||||||
|
if (loc != tank)
|
||||||
|
to_chat(tank.loc, "<span class = 'notice'>The mister snaps back onto the watertank.</span>")
|
||||||
|
destination = tank
|
||||||
|
..()
|
||||||
|
|
||||||
|
/obj/item/weapon/reagent_containers/spray/mister/afterattack(obj/target, mob/user, proximity)
|
||||||
|
if(target.loc == loc) //Safety check so you don't fill your mister with mutagen or something and then blast yourself in the face with it
|
||||||
|
return
|
||||||
|
..()
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Janitor tank
|
||||||
|
*/
|
||||||
|
/obj/item/weapon/watertank/janitor
|
||||||
|
name = "backpack cleaner tank"
|
||||||
|
desc = "A janitorial cleaner backpack with nozzle to clean blood and graffiti."
|
||||||
|
icon_state = "waterbackpackjani"
|
||||||
|
item_state = "waterbackpackjani"
|
||||||
|
|
||||||
|
/obj/item/weapon/watertank/janitor/Initialize()
|
||||||
|
. = ..()
|
||||||
|
reagents.add_reagent("cleaner", 500)
|
||||||
|
|
||||||
|
/obj/item/weapon/watertank/janitor/make_noz()
|
||||||
|
return new /obj/item/weapon/reagent_containers/spray/mister/janitor(src)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Janitor mister
|
||||||
|
*/
|
||||||
|
/obj/item/weapon/reagent_containers/spray/mister/janitor
|
||||||
|
name = "janitor spray nozzle"
|
||||||
|
desc = "A janitorial spray nozzle attached to a watertank, designed to clean up large messes."
|
||||||
|
icon_state = "misterjani"
|
||||||
|
item_state = "misterjani"
|
||||||
|
amount_per_transfer_from_this = 5
|
||||||
|
possible_transfer_amounts = list(5,10)
|
||||||
|
spray_size = 4
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Security tank
|
||||||
|
*/
|
||||||
|
/obj/item/weapon/watertank/pepperspray
|
||||||
|
name = "ANTI-TIDER-2500 suppression backpack"
|
||||||
|
desc = "The ultimate crowd-control device; this tool allows the user to quickly and efficiently pacify groups of hostile targets."
|
||||||
|
icon_state = "pepperbackpacksec"
|
||||||
|
item_state = "pepperbackpacksec"
|
||||||
|
volume = 1000
|
||||||
|
|
||||||
|
/obj/item/weapon/watertank/pepperspray/Initialize()
|
||||||
|
. = ..()
|
||||||
|
reagents.add_reagent("condensedcapsaicin", 1000)
|
||||||
|
|
||||||
|
/obj/item/weapon/watertank/pepperspray/make_noz()
|
||||||
|
return new /obj/item/weapon/reagent_containers/spray/mister/pepperspray(src)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Security mister
|
||||||
|
*/
|
||||||
|
/obj/item/weapon/reagent_containers/spray/mister/pepperspray
|
||||||
|
name = "security spray nozzle"
|
||||||
|
desc = "A pacifying spray nozzle attached to a pepperspray tank, designed to silence perps."
|
||||||
|
icon_state = "mistersec"
|
||||||
|
item_state = "mistersec"
|
||||||
|
amount_per_transfer_from_this = 5
|
||||||
|
possible_transfer_amounts = list(5,10)
|
||||||
|
spray_size = 6
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Operative tank
|
||||||
|
*/
|
||||||
|
/obj/item/weapon/watertank/op
|
||||||
|
name = "uborka tank"
|
||||||
|
desc = "A Russian backpack spray for systematic cleansing of carbon lifeforms."
|
||||||
|
icon_state = "waterbackpackop"
|
||||||
|
item_state = "waterbackpackop"
|
||||||
|
w_class = ITEMSIZE_NORMAL
|
||||||
|
volume = 2000
|
||||||
|
slowdown = 0
|
||||||
|
|
||||||
|
/obj/item/weapon/watertank/op/Initialize()
|
||||||
|
. = ..()
|
||||||
|
reagents.add_reagent("fuel", 500)
|
||||||
|
reagents.add_reagent("cryptobiolin", 500)
|
||||||
|
reagents.add_reagent("phoron", 500)
|
||||||
|
reagents.add_reagent("condensedcapsaicin", 500)
|
||||||
|
|
||||||
|
/obj/item/weapon/watertank/op/make_noz()
|
||||||
|
return new /obj/item/weapon/reagent_containers/spray/mister/op(src)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Operative mister
|
||||||
|
*/
|
||||||
|
/obj/item/weapon/reagent_containers/spray/mister/op
|
||||||
|
name = "uborka spray nozzle"
|
||||||
|
desc = "A mister nozzle attached to several extended water tanks. It suspiciously has a compressor in the system and is labelled entirely in Cyrillic."
|
||||||
|
icon_state = "misterop"
|
||||||
|
item_state = "misterop"
|
||||||
|
w_class = ITEMSIZE_HUGE
|
||||||
|
volume = 2000
|
||||||
|
amount_per_transfer_from_this = 100
|
||||||
|
possible_transfer_amounts = list(75,100,150)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Atmos tank
|
||||||
|
*/
|
||||||
|
/obj/item/weapon/watertank/atmos
|
||||||
|
name = "backpack firefighter tank"
|
||||||
|
desc = "A pressurized backpack tank with extinguisher nozzle, intended to fight fires."
|
||||||
|
icon_state = "waterbackpackatmos"
|
||||||
|
item_state = "waterbackpackatmos"
|
||||||
|
volume = 200
|
||||||
|
|
||||||
|
/obj/item/weapon/watertank/atmos/Initialize()
|
||||||
|
. = ..()
|
||||||
|
reagents.add_reagent("water", 200)
|
||||||
|
|
||||||
|
/obj/item/weapon/watertank/atmos/make_noz()
|
||||||
|
return new /obj/item/weapon/reagent_containers/spray/mister/atmos(src)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Atmos hose
|
||||||
|
*/
|
||||||
|
/obj/item/weapon/reagent_containers/spray/mister/atmos
|
||||||
|
name = "extinguisher nozzle"
|
||||||
|
desc = "A heavy duty nozzle attached to a firefighter's backpack tank."
|
||||||
|
icon_state = "atmos_nozzle"
|
||||||
|
item_state = "nozzleatmos"
|
||||||
|
w_class = ITEMSIZE_HUGE
|
||||||
|
volume = 200
|
||||||
|
amount_per_transfer_from_this = 5
|
||||||
|
possible_transfer_amounts = list(5,10)
|
||||||
|
spray_size = null
|
||||||
|
|
||||||
|
/obj/item/weapon/reagent_containers/spray/mister/atmos/Spray_at(atom/A as mob|obj)
|
||||||
|
playsound(src, 'sound/effects/spray3.ogg', rand(50,1), -6)
|
||||||
|
var/direction = get_dir(src, A)
|
||||||
|
var/turf/T = get_turf(A)
|
||||||
|
var/turf/T1 = get_step(T,turn(direction, 90))
|
||||||
|
var/turf/T2 = get_step(T,turn(direction, -90))
|
||||||
|
var/list/the_targets = list(T, T1, T2)
|
||||||
|
|
||||||
|
for(var/a = 1 to 3)
|
||||||
|
spawn(0)
|
||||||
|
if(reagents.total_volume < 1) break
|
||||||
|
var/obj/effect/effect/water/chempuff/D = new/obj/effect/effect/water/chempuff(get_turf(src))
|
||||||
|
var/turf/my_target = the_targets[a]
|
||||||
|
D.create_reagents(amount_per_transfer_from_this)
|
||||||
|
if(!src)
|
||||||
|
return
|
||||||
|
reagents.trans_to_obj(D, amount_per_transfer_from_this)
|
||||||
|
D.set_color()
|
||||||
|
D.set_up(my_target, rand(6, 8), 2)
|
||||||
|
return
|
||||||
@@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
var/tmp/lighting_corners_initialised = FALSE
|
var/tmp/lighting_corners_initialised = FALSE
|
||||||
|
|
||||||
|
var/tmp/outdoors_adjacent = FALSE
|
||||||
///Our lighting object.
|
///Our lighting object.
|
||||||
var/tmp/datum/lighting_object/lighting_object
|
var/tmp/datum/lighting_object/lighting_object
|
||||||
///Lighting Corner datums.
|
///Lighting Corner datums.
|
||||||
@@ -96,9 +97,9 @@
|
|||||||
///Setter for the byond luminosity var
|
///Setter for the byond luminosity var
|
||||||
/turf/proc/set_luminosity(new_luminosity, force)
|
/turf/proc/set_luminosity(new_luminosity, force)
|
||||||
// SSplanets handles outdoor turfs
|
// SSplanets handles outdoor turfs
|
||||||
if(is_outdoors() && !force)
|
if((is_outdoors() && !force) || outdoors_adjacent)
|
||||||
return
|
return
|
||||||
|
|
||||||
luminosity = new_luminosity
|
luminosity = new_luminosity
|
||||||
|
|
||||||
///Calculate on which directions this turfs block view.
|
///Calculate on which directions this turfs block view.
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
new/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus(src)
|
new/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus(src)
|
||||||
new/obj/item/weapon/flame/lighter/zippo(src)
|
new/obj/item/weapon/flame/lighter/zippo(src)
|
||||||
if(6 to 10)
|
if(6 to 10)
|
||||||
new/obj/item/weapon/pickaxe/drill(src)
|
new/obj/item/weapon/pickaxe/advdrill(src)
|
||||||
new/obj/item/device/taperecorder(src)
|
new/obj/item/device/taperecorder(src)
|
||||||
new/obj/item/clothing/suit/space(src)
|
new/obj/item/clothing/suit/space(src)
|
||||||
new/obj/item/clothing/head/helmet/space(src)
|
new/obj/item/clothing/head/helmet/space(src)
|
||||||
|
|||||||
@@ -10,22 +10,22 @@
|
|||||||
/*****************************Pickaxe********************************/
|
/*****************************Pickaxe********************************/
|
||||||
|
|
||||||
/obj/item/weapon/pickaxe
|
/obj/item/weapon/pickaxe
|
||||||
name = "mining drill"
|
name = "pickaxe"
|
||||||
desc = "The most basic of mining drills, for short excavations and small mineral extractions."
|
desc = "A miner's best friend."
|
||||||
icon = 'icons/obj/items.dmi'
|
icon = 'icons/obj/items.dmi'
|
||||||
slot_flags = SLOT_BELT
|
slot_flags = SLOT_BELT
|
||||||
force = 15.0
|
force = 15.0
|
||||||
throwforce = 4.0
|
throwforce = 4.0
|
||||||
icon_state = "pickaxe"
|
icon_state = "pickaxe"
|
||||||
item_state = "jackhammer"
|
item_state = "pickaxe"
|
||||||
w_class = ITEMSIZE_LARGE
|
w_class = ITEMSIZE_LARGE
|
||||||
matter = list(MAT_STEEL = 3750)
|
matter = list(MAT_STEEL = 2500)
|
||||||
var/digspeed = 40 //moving the delay to an item var so R&D can make improved picks. --NEO
|
var/digspeed = 40 //moving the delay to an item var so R&D can make improved picks. --NEO
|
||||||
var/sand_dig = FALSE // does this thing dig sand?
|
var/sand_dig = FALSE // does this thing dig sand?
|
||||||
origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINEERING = 1)
|
origin_tech = list(TECH_MATERIAL = 1)
|
||||||
attack_verb = list("hit", "pierced", "sliced", "attacked")
|
attack_verb = list("hit", "pierced", "sliced", "attacked")
|
||||||
var/drill_sound = "pickaxe"
|
var/drill_sound = "pickaxe"
|
||||||
var/drill_verb = "drilling"
|
var/drill_verb = "picking"
|
||||||
sharp = TRUE
|
sharp = TRUE
|
||||||
|
|
||||||
var/excavation_amount = 200
|
var/excavation_amount = 200
|
||||||
@@ -39,16 +39,59 @@
|
|||||||
origin_tech = list(TECH_MATERIAL = 3)
|
origin_tech = list(TECH_MATERIAL = 3)
|
||||||
desc = "This makes no metallurgic sense."
|
desc = "This makes no metallurgic sense."
|
||||||
|
|
||||||
|
/obj/item/weapon/pickaxe/gold
|
||||||
|
name = "golden pickaxe"
|
||||||
|
icon_state = "gpickaxe"
|
||||||
|
item_state = "gpickaxe"
|
||||||
|
digspeed = 20
|
||||||
|
origin_tech = list(TECH_MATERIAL = 4)
|
||||||
|
desc = "This makes no metallurgic sense."
|
||||||
|
drill_verb = "picking"
|
||||||
|
|
||||||
|
/obj/item/weapon/pickaxe/diamond
|
||||||
|
name = "diamond pickaxe"
|
||||||
|
icon_state = "dpickaxe"
|
||||||
|
item_state = "dpickaxe"
|
||||||
|
digspeed = 10
|
||||||
|
origin_tech = list(TECH_MATERIAL = 6, TECH_ENGINEERING = 4)
|
||||||
|
desc = "A pickaxe with a diamond pick head."
|
||||||
|
drill_verb = "picking"
|
||||||
|
|
||||||
|
/*****************************Drill********************************/
|
||||||
|
|
||||||
/obj/item/weapon/pickaxe/drill
|
/obj/item/weapon/pickaxe/drill
|
||||||
|
name = "mining drill" // Can dig sand as well!
|
||||||
|
icon_state = "drill"
|
||||||
|
item_state = "jackhammer"
|
||||||
|
digspeed = 35 //Only slighty better than a pickaxe
|
||||||
|
sand_dig = TRUE
|
||||||
|
origin_tech = list(TECH_MATERIAL = 1, TECH_POWER = 2, TECH_ENGINEERING = 1)
|
||||||
|
matter = list(MAT_STEEL = 3750)
|
||||||
|
desc = "The most basic of mining drills, for short excavations and small mineral extractions."
|
||||||
|
drill_verb = "drilling"
|
||||||
|
|
||||||
|
/obj/item/weapon/pickaxe/advdrill
|
||||||
name = "advanced mining drill" // Can dig sand as well!
|
name = "advanced mining drill" // Can dig sand as well!
|
||||||
icon_state = "handdrill"
|
icon_state = "advdrill"
|
||||||
item_state = "jackhammer"
|
item_state = "jackhammer"
|
||||||
digspeed = 30
|
digspeed = 30
|
||||||
sand_dig = TRUE
|
sand_dig = TRUE
|
||||||
origin_tech = list(TECH_MATERIAL = 2, TECH_POWER = 3, TECH_ENGINEERING = 2)
|
origin_tech = list(TECH_MATERIAL = 2, TECH_POWER = 3, TECH_ENGINEERING = 2)
|
||||||
|
matter = list(MAT_STEEL = 4000, MAT_PLASTEEL = 2500)
|
||||||
desc = "Yours is the drill that will pierce through the rock walls."
|
desc = "Yours is the drill that will pierce through the rock walls."
|
||||||
drill_verb = "drilling"
|
drill_verb = "drilling"
|
||||||
|
|
||||||
|
/obj/item/weapon/pickaxe/diamonddrill //When people ask about the badass leader of the mining tools, they are talking about ME!
|
||||||
|
name = "diamond mining drill"
|
||||||
|
icon_state = "diamonddrill"
|
||||||
|
item_state = "jackhammer"
|
||||||
|
digspeed = 5 //Digs through walls, girders, and can dig up sand
|
||||||
|
sand_dig = TRUE
|
||||||
|
origin_tech = list(TECH_MATERIAL = 6, TECH_POWER = 4, TECH_ENGINEERING = 5)
|
||||||
|
matter = list(MAT_STEEL = 4500, MAT_PLASTEEL = 3000, MAT_DIAMONDS = 1000)
|
||||||
|
desc = "Yours is the drill that will pierce the heavens!"
|
||||||
|
drill_verb = "drilling"
|
||||||
|
|
||||||
/obj/item/weapon/pickaxe/jackhammer
|
/obj/item/weapon/pickaxe/jackhammer
|
||||||
name = "sonic jackhammer"
|
name = "sonic jackhammer"
|
||||||
icon_state = "jackhammer"
|
icon_state = "jackhammer"
|
||||||
@@ -58,56 +101,33 @@
|
|||||||
desc = "Cracks rocks with sonic blasts, perfect for killing cave lizards."
|
desc = "Cracks rocks with sonic blasts, perfect for killing cave lizards."
|
||||||
drill_verb = "hammering"
|
drill_verb = "hammering"
|
||||||
|
|
||||||
/obj/item/weapon/pickaxe/gold
|
/obj/item/weapon/pickaxe/borgdrill
|
||||||
name = "golden pickaxe"
|
name = "jackhammer"
|
||||||
icon_state = "gpickaxe"
|
icon_state = "borg_pick"
|
||||||
item_state = "gpickaxe"
|
item_state = "jackhammer"
|
||||||
digspeed = 20
|
digspeed = 15
|
||||||
origin_tech = list(TECH_MATERIAL = 4)
|
sand_dig = TRUE
|
||||||
desc = "This makes no metallurgic sense."
|
desc = "Cracks rocks with a hardened pneumatic bit."
|
||||||
drill_verb = "picking"
|
drill_verb = "hammering"
|
||||||
|
|
||||||
/obj/item/weapon/pickaxe/plasmacutter
|
/obj/item/weapon/pickaxe/plasmacutter
|
||||||
name = "plasma cutter"
|
name = "plasma cutter"
|
||||||
|
desc = "A rock cutter that uses bursts of hot plasma. You could use it to cut limbs off of xenos! Or, you know, mine stuff."
|
||||||
icon_state = "plasmacutter"
|
icon_state = "plasmacutter"
|
||||||
item_state = "gun"
|
item_state = "plasmacutter"
|
||||||
w_class = ITEMSIZE_NORMAL //it is smaller than the pickaxe
|
w_class = ITEMSIZE_NORMAL //it is smaller than the pickaxe
|
||||||
damtype = "fire"
|
damtype = "fire"
|
||||||
digspeed = 20 //Can slice though normal walls, all girders, or be used in reinforced wall deconstruction/ light thermite on fire
|
digspeed = 20 //Can slice though normal walls, all girders, or be used in reinforced wall deconstruction/light thermite on fire
|
||||||
origin_tech = list(TECH_MATERIAL = 4, TECH_PHORON = 3, TECH_ENGINEERING = 3)
|
origin_tech = list(TECH_MATERIAL = 4, TECH_PHORON = 3, TECH_ENGINEERING = 3)
|
||||||
desc = "A rock cutter that uses bursts of hot plasma. You could use it to cut limbs off of xenos! Or, you know, mine stuff."
|
matter = list(MAT_STEEL = 3000, MAT_PLASTEEL = 1500, MAT_DIAMONDS = 500, MAT_PHORON = 500)
|
||||||
drill_verb = "cutting"
|
drill_verb = "cutting"
|
||||||
drill_sound = 'sound/items/Welder.ogg'
|
drill_sound = 'sound/items/Welder.ogg'
|
||||||
sharp = TRUE
|
sharp = TRUE
|
||||||
edge = TRUE
|
edge = TRUE
|
||||||
|
|
||||||
/obj/item/weapon/pickaxe/diamond
|
/obj/item/weapon/pickaxe/plasmacutter/borg
|
||||||
name = "diamond pickaxe"
|
name = "mounted plasma cutter"
|
||||||
icon_state = "dpickaxe"
|
icon_state = "pcutter_borg"
|
||||||
item_state = "dpickaxe"
|
|
||||||
digspeed = 10
|
|
||||||
origin_tech = list(TECH_MATERIAL = 6, TECH_ENGINEERING = 4)
|
|
||||||
desc = "A pickaxe with a diamond pick head."
|
|
||||||
drill_verb = "picking"
|
|
||||||
|
|
||||||
/obj/item/weapon/pickaxe/diamonddrill //When people ask about the badass leader of the mining tools, they are talking about ME!
|
|
||||||
name = "diamond mining drill"
|
|
||||||
icon_state = "diamonddrill"
|
|
||||||
item_state = "jackhammer"
|
|
||||||
digspeed = 5 //Digs through walls, girders, and can dig up sand
|
|
||||||
sand_dig = TRUE
|
|
||||||
origin_tech = list(TECH_MATERIAL = 6, TECH_POWER = 4, TECH_ENGINEERING = 5)
|
|
||||||
desc = "Yours is the drill that will pierce the heavens!"
|
|
||||||
drill_verb = "drilling"
|
|
||||||
|
|
||||||
/obj/item/weapon/pickaxe/borgdrill
|
|
||||||
name = "enhanced sonic jackhammer"
|
|
||||||
icon_state = "jackhammer"
|
|
||||||
item_state = "jackhammer"
|
|
||||||
digspeed = 15
|
|
||||||
sand_dig = TRUE
|
|
||||||
desc = "Cracks rocks with sonic blasts. This one seems like an improved design."
|
|
||||||
drill_verb = "hammering"
|
|
||||||
|
|
||||||
/*****************************Shovel********************************/
|
/*****************************Shovel********************************/
|
||||||
|
|
||||||
@@ -116,10 +136,10 @@
|
|||||||
desc = "A large tool for digging and moving dirt."
|
desc = "A large tool for digging and moving dirt."
|
||||||
icon = 'icons/obj/items.dmi'
|
icon = 'icons/obj/items.dmi'
|
||||||
icon_state = "shovel"
|
icon_state = "shovel"
|
||||||
|
item_state = "shovel"
|
||||||
slot_flags = SLOT_BELT
|
slot_flags = SLOT_BELT
|
||||||
force = 8.0
|
force = 8.0
|
||||||
throwforce = 4.0
|
throwforce = 4.0
|
||||||
item_state = "shovel"
|
|
||||||
w_class = ITEMSIZE_NORMAL
|
w_class = ITEMSIZE_NORMAL
|
||||||
origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINEERING = 1)
|
origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINEERING = 1)
|
||||||
matter = list(MAT_STEEL = 50)
|
matter = list(MAT_STEEL = 50)
|
||||||
@@ -169,16 +189,6 @@
|
|||||||
sharp = 0
|
sharp = 0
|
||||||
edge = 1
|
edge = 1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**********************Mining car (Crate like thing, not the rail car)**************************/
|
|
||||||
|
|
||||||
/obj/structure/closet/crate/miningcar
|
|
||||||
desc = "A mining car. This one doesn't work on rails, but has to be dragged."
|
|
||||||
name = "Mining car (not for rails)"
|
|
||||||
icon = 'icons/obj/closets/miningcar.dmi'
|
|
||||||
density = TRUE
|
|
||||||
|
|
||||||
// Flags.
|
// Flags.
|
||||||
|
|
||||||
/obj/item/stack/flag
|
/obj/item/stack/flag
|
||||||
|
|||||||
@@ -1,30 +1,35 @@
|
|||||||
//upgrades the speed of all drills and pickaxes.
|
//upgrades the speed of all drills and pickaxes.
|
||||||
|
|
||||||
|
//Pickaxes
|
||||||
/obj/item/weapon/pickaxe
|
/obj/item/weapon/pickaxe
|
||||||
digspeed = 36
|
digspeed = 36
|
||||||
|
|
||||||
/obj/item/weapon/pickaxe/silver
|
/obj/item/weapon/pickaxe/silver
|
||||||
digspeed = 27
|
digspeed = 27
|
||||||
|
|
||||||
|
/obj/item/weapon/pickaxe/diamond
|
||||||
|
digspeed = 9
|
||||||
|
|
||||||
|
/obj/item/weapon/pickaxe/gold
|
||||||
|
digspeed = 18
|
||||||
|
|
||||||
|
//Drills
|
||||||
/obj/item/weapon/pickaxe/drill
|
/obj/item/weapon/pickaxe/drill
|
||||||
|
digspeed = 30
|
||||||
|
|
||||||
|
/obj/item/weapon/pickaxe/advdrill
|
||||||
digspeed = 27
|
digspeed = 27
|
||||||
|
|
||||||
/obj/item/weapon/pickaxe/jackhammer
|
/obj/item/weapon/pickaxe/jackhammer
|
||||||
digspeed = 18
|
digspeed = 18
|
||||||
destroy_artefacts = TRUE
|
destroy_artefacts = TRUE
|
||||||
|
|
||||||
/obj/item/weapon/pickaxe/gold
|
|
||||||
digspeed = 18
|
|
||||||
|
|
||||||
/obj/item/weapon/pickaxe/plasmacutter
|
|
||||||
digspeed = 18
|
|
||||||
|
|
||||||
/obj/item/weapon/pickaxe/diamond
|
|
||||||
digspeed = 9
|
|
||||||
|
|
||||||
/obj/item/weapon/pickaxe/diamonddrill
|
/obj/item/weapon/pickaxe/diamonddrill
|
||||||
digspeed = 4
|
digspeed = 4
|
||||||
|
|
||||||
/obj/item/weapon/pickaxe/borgdrill
|
/obj/item/weapon/pickaxe/borgdrill
|
||||||
digspeed = 13
|
digspeed = 13
|
||||||
destroy_artefacts = TRUE
|
destroy_artefacts = TRUE
|
||||||
|
|
||||||
|
/obj/item/weapon/pickaxe/plasmacutter
|
||||||
|
digspeed = 18
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ var/global/list/prevent_respawns = list()
|
|||||||
|
|
||||||
/hook/death/proc/quit_notify(mob/dead)
|
/hook/death/proc/quit_notify(mob/dead)
|
||||||
if(ishuman(dead))
|
if(ishuman(dead))
|
||||||
to_chat(dead,"<span class='notice'>You're dead! If you died as a result of vore, and no longer have a body (due to digestion), use the Auto Resleever! One can be found by using the verb in the Ghost tab. If you died to other means, wait for rescue or use the 'Notify Transcore' verb in the Ghost tab if you have a valid backup implant. If it's been 30 minutes and you're still dead, use the Auto Resleever! If you don't intend to continue playing this round as this character, please use the <b>Quit This Round</b> verb in the OOC tab to free your job slot.</span>")
|
to_chat(dead,"<span class='notice'>You're dead! If you don't intend to continue playing this round as this character, please use the <b>Quit This Round</b> verb in the OOC tab to free your job slot. Otherwise, you can use the <b>Notify Transcore</b> verb to let medical know you need resleeving, or <b>Find Auto Resleever</b> verb to be taken to an auto resleever, which you can click on to be resleeved automatically after a time.</span>")
|
||||||
|
|
||||||
return TRUE
|
return TRUE
|
||||||
|
|
||||||
|
|||||||
@@ -202,6 +202,23 @@ var/list/slot_equipment_priority = list( \
|
|||||||
drop_from_inventory(I, target)
|
drop_from_inventory(I, target)
|
||||||
return TRUE
|
return TRUE
|
||||||
|
|
||||||
|
//visibly unequips I but it is NOT MOVED AND REMAINS IN SRC
|
||||||
|
//item MUST BE FORCEMOVE'D OR QDEL'D
|
||||||
|
/mob/proc/temporarilyRemoveItemFromInventory(obj/item/I, force = FALSE, idrop = TRUE)
|
||||||
|
return u_equip(I, force, null, TRUE, idrop)
|
||||||
|
|
||||||
|
///sometimes we only want to grant the item's action if it's equipped in a specific slot.
|
||||||
|
/obj/item/proc/item_action_slot_check(slot, mob/user)
|
||||||
|
if(slot == SLOT_BACK || slot == LEGS) //these aren't true slots, so avoid granting actions there
|
||||||
|
return FALSE
|
||||||
|
return TRUE
|
||||||
|
|
||||||
|
///Get the item on the mob in the storage slot identified by the id passed in
|
||||||
|
/mob/proc/get_item_by_slot(slot_id)
|
||||||
|
return null
|
||||||
|
|
||||||
|
/mob/proc/getBackSlot()
|
||||||
|
return SLOT_BACK
|
||||||
|
|
||||||
//Attemps to remove an object on a mob.
|
//Attemps to remove an object on a mob.
|
||||||
/mob/proc/remove_from_mob(var/obj/O, var/atom/target)
|
/mob/proc/remove_from_mob(var/obj/O, var/atom/target)
|
||||||
|
|||||||
@@ -127,7 +127,7 @@
|
|||||||
. += shoes.slowdown
|
. += shoes.slowdown
|
||||||
|
|
||||||
//VOREStation Addition Start
|
//VOREStation Addition Start
|
||||||
if(buckled && istype(buckled, /obj/machinery/power/rtg/d_type_reg))
|
if(buckled && istype(buckled, /obj/machinery/power/rtg/reg))
|
||||||
. += shoes.slowdown
|
. += shoes.slowdown
|
||||||
//VOREStation Addition End
|
//VOREStation Addition End
|
||||||
|
|
||||||
|
|||||||
@@ -144,14 +144,14 @@
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
heat_discomfort_level = 295
|
heat_discomfort_level = 320 //VOREStation Edit - 46c (higher than normal humans) Don't spam red text if you're slightly warm.
|
||||||
heat_discomfort_strings = list(
|
heat_discomfort_strings = list(
|
||||||
"You feel soothingly warm.",
|
"You feel soothingly warm.",
|
||||||
"You feel the heat sink into your bones.",
|
"You feel the heat sink into your bones.",
|
||||||
"You feel warm enough to take a nap."
|
"You feel warm enough to take a nap."
|
||||||
)
|
)
|
||||||
|
|
||||||
cold_discomfort_level = 292
|
cold_discomfort_level = 288.15 //VOREStation Edit - 15c Give a little bit of wiggle room here come on.
|
||||||
cold_discomfort_strings = list(
|
cold_discomfort_strings = list(
|
||||||
"You feel chilly.",
|
"You feel chilly.",
|
||||||
"You feel sluggish and cold.",
|
"You feel sluggish and cold.",
|
||||||
|
|||||||
@@ -62,7 +62,7 @@
|
|||||||
category = 0
|
category = 0
|
||||||
custom_only = FALSE
|
custom_only = FALSE
|
||||||
|
|
||||||
// CHOMPEdits Start - Adding Xenochimera traits. TODO - Port these to VORE.
|
/* // Commented out in lieu of finding a better solution.
|
||||||
/datum/trait/neutral/coldadapt/xenochimera
|
/datum/trait/neutral/coldadapt/xenochimera
|
||||||
sort = TRAIT_SORT_SPECIES
|
sort = TRAIT_SORT_SPECIES
|
||||||
allowed_species = list(SPECIES_XENOCHIMERA)
|
allowed_species = list(SPECIES_XENOCHIMERA)
|
||||||
@@ -73,7 +73,7 @@
|
|||||||
can_take = ORGANICS // (Not sure if this is needed for Xenochimera-specific sub-version.)
|
can_take = ORGANICS // (Not sure if this is needed for Xenochimera-specific sub-version.)
|
||||||
custom_only = FALSE
|
custom_only = FALSE
|
||||||
excludes = list(/datum/trait/neutral/hotadapt, /datum/trait/neutral/hotadapt/xenochimera)
|
excludes = list(/datum/trait/neutral/hotadapt, /datum/trait/neutral/hotadapt/xenochimera)
|
||||||
|
|
||||||
/datum/trait/neutral/hotadapt/xenochimera
|
/datum/trait/neutral/hotadapt/xenochimera
|
||||||
sort = TRAIT_SORT_SPECIES
|
sort = TRAIT_SORT_SPECIES
|
||||||
allowed_species = list(SPECIES_XENOCHIMERA)
|
allowed_species = list(SPECIES_XENOCHIMERA)
|
||||||
@@ -84,7 +84,8 @@
|
|||||||
can_take = ORGANICS // negates the need for suit coolers entirely for synths, so no. (Not sure if this is needed for Xenochimera-specific sub-version.)
|
can_take = ORGANICS // negates the need for suit coolers entirely for synths, so no. (Not sure if this is needed for Xenochimera-specific sub-version.)
|
||||||
custom_only = FALSE
|
custom_only = FALSE
|
||||||
excludes = list(/datum/trait/neutral/coldadapt, /datum/trait/neutral/coldadapt/xenochimera)
|
excludes = list(/datum/trait/neutral/coldadapt, /datum/trait/neutral/coldadapt/xenochimera)
|
||||||
|
*/
|
||||||
|
|
||||||
/datum/trait/neutral/autohiss_unathi/xenochimera
|
/datum/trait/neutral/autohiss_unathi/xenochimera
|
||||||
sort = TRAIT_SORT_SPECIES
|
sort = TRAIT_SORT_SPECIES
|
||||||
allowed_species = list(SPECIES_XENOCHIMERA)
|
allowed_species = list(SPECIES_XENOCHIMERA)
|
||||||
@@ -133,4 +134,4 @@
|
|||||||
"r" = list("rk")
|
"r" = list("rk")
|
||||||
),
|
),
|
||||||
autohiss_exempt = list("Vespinae"))
|
autohiss_exempt = list("Vespinae"))
|
||||||
excludes = list(/datum/trait/neutral/autohiss_tajaran, /datum/trait/neutral/autohiss_unathi)
|
excludes = list(/datum/trait/neutral/autohiss_tajaran, /datum/trait/neutral/autohiss_unathi)
|
||||||
|
|||||||
@@ -430,7 +430,7 @@ var/global/list/robot_modules = list(
|
|||||||
src.emag = new /obj/item/weapon/melee/baton/robot/arm(src)
|
src.emag = new /obj/item/weapon/melee/baton/robot/arm(src)
|
||||||
src.modules += new /obj/item/device/geiger(src)
|
src.modules += new /obj/item/device/geiger(src)
|
||||||
src.modules += new /obj/item/weapon/rcd/electric/mounted/borg(src)
|
src.modules += new /obj/item/weapon/rcd/electric/mounted/borg(src)
|
||||||
src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src)
|
src.modules += new /obj/item/weapon/pickaxe/plasmacutter/borg(src)
|
||||||
src.modules += new /obj/item/weapon/gripper/no_use/loader(src)
|
src.modules += new /obj/item/weapon/gripper/no_use/loader(src)
|
||||||
|
|
||||||
var/datum/matter_synth/metal = new /datum/matter_synth/metal(40000)
|
var/datum/matter_synth/metal = new /datum/matter_synth/metal(40000)
|
||||||
@@ -757,7 +757,7 @@ var/global/list/robot_modules = list(
|
|||||||
src.emag = new /obj/item/weapon/kinetic_crusher/machete/dagger(src)
|
src.emag = new /obj/item/weapon/kinetic_crusher/machete/dagger(src)
|
||||||
|
|
||||||
// No reason for these, upgrade modules replace them.
|
// No reason for these, upgrade modules replace them.
|
||||||
//src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src)
|
//src.emag = new /obj/item/weapon/pickaxe/plasmacutter/borg(src)
|
||||||
//src.emag = new /obj/item/weapon/pickaxe/diamonddrill(src)
|
//src.emag = new /obj/item/weapon/pickaxe/diamonddrill(src)
|
||||||
|
|
||||||
/obj/item/weapon/robot_module/robot/research
|
/obj/item/weapon/robot_module/robot/research
|
||||||
@@ -852,7 +852,7 @@ var/global/list/robot_modules = list(
|
|||||||
src.modules += new /obj/item/device/flash(src)
|
src.modules += new /obj/item/device/flash(src)
|
||||||
//src.modules += new /obj/item/borg/sight/thermal(src) // VOREStation Edit
|
//src.modules += new /obj/item/borg/sight/thermal(src) // VOREStation Edit
|
||||||
src.modules += new /obj/item/weapon/gun/energy/laser/mounted(src)
|
src.modules += new /obj/item/weapon/gun/energy/laser/mounted(src)
|
||||||
src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src)
|
src.modules += new /obj/item/weapon/pickaxe/plasmacutter/borg(src)
|
||||||
src.modules += new /obj/item/borg/combat/shield(src)
|
src.modules += new /obj/item/borg/combat/shield(src)
|
||||||
src.modules += new /obj/item/borg/combat/mobility(src)
|
src.modules += new /obj/item/borg/combat/mobility(src)
|
||||||
src.emag = new /obj/item/weapon/gun/energy/lasercannon/mounted(src)
|
src.emag = new /obj/item/weapon/gun/energy/lasercannon/mounted(src)
|
||||||
@@ -887,7 +887,7 @@ var/global/list/robot_modules = list(
|
|||||||
robot.internals = new/obj/item/weapon/tank/jetpack/carbondioxide(src)
|
robot.internals = new/obj/item/weapon/tank/jetpack/carbondioxide(src)
|
||||||
src.modules += robot.internals
|
src.modules += robot.internals
|
||||||
|
|
||||||
src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src)
|
src.emag = new /obj/item/weapon/pickaxe/plasmacutter/borg(src)
|
||||||
src.emag.name = "Plasma Cutter"
|
src.emag.name = "Plasma Cutter"
|
||||||
|
|
||||||
var/datum/matter_synth/metal = new /datum/matter_synth/metal(25000)
|
var/datum/matter_synth/metal = new /datum/matter_synth/metal(25000)
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
/datum/category_item/catalogue/fauna/catslug
|
/datum/category_item/catalogue/fauna/catslug
|
||||||
name = "Alien Wildlife - Catslug"
|
name = "Alien Wildlife - Catslug"
|
||||||
desc = "The catslug is an omnivorous terrestrial creature.\
|
desc = "The Catslug is an omnivorous terrestrial creature.\
|
||||||
Exhibiting properties of both a cat and a slug (hence its name)\
|
Exhibiting properties of both a cat and a slug (hence its name)\
|
||||||
it moves somewhat awkwardly. However, the unique qualities of\
|
it moves somewhat awkwardly. However, the unique qualities of\
|
||||||
its body make it exceedingly flexible and smooth, allowing it to\
|
its body make it exceedingly flexible and smooth, allowing it to\
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
/mob/living/simple_mob/vore/alienanimals/catslug
|
/mob/living/simple_mob/vore/alienanimals/catslug
|
||||||
name = "catslug"
|
name = "catslug"
|
||||||
desc = "A noodley bodied creature with thin arms and legs, and gloomy dark eyes."
|
desc = "A noodley bodied creature with thin arms and legs, and gloomy dark eyes."
|
||||||
tt_desc = "Mollusca Feline"
|
tt_desc = "Mollusca Feline"
|
||||||
icon_state = "catslug"
|
icon_state = "catslug"
|
||||||
icon_living = "catslug"
|
icon_living = "catslug"
|
||||||
icon_dead = "catslug_dead"
|
icon_dead = "catslug_dead"
|
||||||
@@ -48,7 +48,7 @@
|
|||||||
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive/catslug
|
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive/catslug
|
||||||
say_list_type = /datum/say_list/catslug
|
say_list_type = /datum/say_list/catslug
|
||||||
player_msg = "You have escaped the foul weather, into this much more pleasant place. You are an intelligent creature capable of more than most think. You can pick up and use many things, and even carry some of them with you into the vents, which you can use to move around quickly. You're quiet and capable, you speak with your hands and your deeds! <br>- - - - -<br> <span class='notice'>Keep in mind, your goal should generally be to survive. You're expected to follow the same rules as everyone else, so don't go self antagging without permission from the staff team, but you are able and capable of defending yourself from those who would attack you for no reason.</span>"
|
player_msg = "You have escaped the foul weather, into this much more pleasant place. You are an intelligent creature capable of more than most think. You can pick up and use many things, and even carry some of them with you into the vents, which you can use to move around quickly. You're quiet and capable, you speak with your hands and your deeds! <br>- - - - -<br> <span class='notice'>Keep in mind, your goal should generally be to survive. You're expected to follow the same rules as everyone else, so don't go self antagging without permission from the staff team, but you are able and capable of defending yourself from those who would attack you for no reason.</span>"
|
||||||
|
|
||||||
has_langs = list("Sign Language")
|
has_langs = list("Sign Language")
|
||||||
|
|
||||||
var/picked_color = FALSE
|
var/picked_color = FALSE
|
||||||
@@ -160,9 +160,9 @@
|
|||||||
if(user != src)
|
if(user != src)
|
||||||
to_chat(user, "<span class='notice'>\The [user] feeds \the [O] to you.</span>")
|
to_chat(user, "<span class='notice'>\The [user] feeds \the [O] to you.</span>")
|
||||||
playsound(src, 'sound/items/eatfood.ogg', 75, 1)
|
playsound(src, 'sound/items/eatfood.ogg', 75, 1)
|
||||||
|
|
||||||
/mob/living/simple_mob/vore/alienanimals/catslug/attack_hand(mob/living/carbon/human/M as mob)
|
/mob/living/simple_mob/vore/alienanimals/catslug/attack_hand(mob/living/carbon/human/M as mob)
|
||||||
|
|
||||||
if(stat == DEAD)
|
if(stat == DEAD)
|
||||||
return ..()
|
return ..()
|
||||||
if(M.a_intent != I_HELP)
|
if(M.a_intent != I_HELP)
|
||||||
@@ -211,7 +211,7 @@
|
|||||||
else
|
else
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/mob/living/simple_mob/vore/alienanimals/catslug/Login() //If someone plays as us let's just be a passive mob in case accidents happen if the player D/Cs
|
/mob/living/simple_mob/vore/alienanimals/catslug/Login() //If someone plays as us let's just be a passive mob in case accidents happen if the player D/Cs
|
||||||
. = ..()
|
. = ..()
|
||||||
ai_holder.hostile = FALSE
|
ai_holder.hostile = FALSE
|
||||||
ai_holder.wander = FALSE
|
ai_holder.wander = FALSE
|
||||||
@@ -227,6 +227,7 @@
|
|||||||
if(newcolor)
|
if(newcolor)
|
||||||
color = newcolor
|
color = newcolor
|
||||||
picked_color = TRUE
|
picked_color = TRUE
|
||||||
|
update_icon()
|
||||||
|
|
||||||
/datum/ai_holder/simple_mob/melee/evasive/catslug/proc/consider_awakening()
|
/datum/ai_holder/simple_mob/melee/evasive/catslug/proc/consider_awakening()
|
||||||
if(holder.resting)
|
if(holder.resting)
|
||||||
@@ -240,7 +241,7 @@
|
|||||||
holder.lay_down()
|
holder.lay_down()
|
||||||
go_sleep()
|
go_sleep()
|
||||||
addtimer(CALLBACK(src, .proc/consider_awakening), rand(1 MINUTE, 5 MINUTES), TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE)
|
addtimer(CALLBACK(src, .proc/consider_awakening), rand(1 MINUTE, 5 MINUTES), TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE)
|
||||||
else
|
else
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
|
|
||||||
@@ -307,12 +308,12 @@
|
|||||||
holder_type = /obj/item/weapon/holder/catslug/spaceslug
|
holder_type = /obj/item/weapon/holder/catslug/spaceslug
|
||||||
makes_dirt = 0
|
makes_dirt = 0
|
||||||
say_list_type = /datum/say_list/catslug/spaceslug
|
say_list_type = /datum/say_list/catslug/spaceslug
|
||||||
|
|
||||||
minbodytemp = 0 // Shamelessly stolen temp & atmos tolerances from the space cat.
|
minbodytemp = 0 // Shamelessly stolen temp & atmos tolerances from the space cat.
|
||||||
maxbodytemp = 900
|
maxbodytemp = 900
|
||||||
heat_damage_per_tick = 3
|
heat_damage_per_tick = 3
|
||||||
cold_damage_per_tick = 2
|
cold_damage_per_tick = 2
|
||||||
|
|
||||||
min_oxy = 0
|
min_oxy = 0
|
||||||
max_oxy = 0
|
max_oxy = 0
|
||||||
min_tox = 0
|
min_tox = 0
|
||||||
@@ -321,9 +322,9 @@
|
|||||||
max_co2 = 0
|
max_co2 = 0
|
||||||
min_n2 = 0
|
min_n2 = 0
|
||||||
max_n2 = 0
|
max_n2 = 0
|
||||||
|
|
||||||
player_msg = "You are an intelligent creature capable of more than most think, clad in a spacesuit that protects you from the ravages of vacuum and hostile atmospheres alike. You can pick up and use many things, and even carry some of them with you into the vents, which you can use to move around quickly. You're quiet and capable, you speak with your hands and your deeds! <br>- - - - -<br> <span class='notice'>Keep in mind, your goal should generally be to survive. You're expected to follow the same rules as everyone else, so don't go self antagging without permission from the staff team, but you are able and capable of defending yourself from those who would attack you for no reason.</span>"
|
player_msg = "You are an intelligent creature capable of more than most think, clad in a spacesuit that protects you from the ravages of vacuum and hostile atmospheres alike. You can pick up and use many things, and even carry some of them with you into the vents, which you can use to move around quickly. You're quiet and capable, you speak with your hands and your deeds! <br>- - - - -<br> <span class='notice'>Keep in mind, your goal should generally be to survive. You're expected to follow the same rules as everyone else, so don't go self antagging without permission from the staff team, but you are able and capable of defending yourself from those who would attack you for no reason.</span>"
|
||||||
|
|
||||||
has_langs = list("Sign Language")
|
has_langs = list("Sign Language")
|
||||||
|
|
||||||
/datum/say_list/catslug/spaceslug
|
/datum/say_list/catslug/spaceslug
|
||||||
@@ -332,11 +333,11 @@
|
|||||||
/mob/living/simple_mob/vore/alienanimals/catslug/spaceslug/Initialize()
|
/mob/living/simple_mob/vore/alienanimals/catslug/spaceslug/Initialize()
|
||||||
. = ..()
|
. = ..()
|
||||||
verbs += /mob/living/proc/ventcrawl
|
verbs += /mob/living/proc/ventcrawl
|
||||||
verbs += /mob/living/proc/hide
|
verbs += /mob/living/proc/hide
|
||||||
verbs -= /mob/living/simple_mob/vore/alienanimals/catslug/proc/catslug_color //I don't even want to imagine what the colour change proc would do to their sprite, not to mention ghosts would need to be forced into the catslug so this is more just a safety net than anything
|
verbs -= /mob/living/simple_mob/vore/alienanimals/catslug/proc/catslug_color //I don't even want to imagine what the colour change proc would do to their sprite, not to mention ghosts would need to be forced into the catslug so this is more just a safety net than anything
|
||||||
|
|
||||||
/mob/living/simple_mob/vore/alienanimals/catslug/spaceslug/attack_hand(mob/living/carbon/human/M as mob)
|
/mob/living/simple_mob/vore/alienanimals/catslug/spaceslug/attack_hand(mob/living/carbon/human/M as mob)
|
||||||
|
|
||||||
if(stat == DEAD)
|
if(stat == DEAD)
|
||||||
return ..()
|
return ..()
|
||||||
if(M.a_intent != I_HELP)
|
if(M.a_intent != I_HELP)
|
||||||
@@ -387,4 +388,444 @@
|
|||||||
|
|
||||||
/obj/item/weapon/holder/catslug/spaceslug
|
/obj/item/weapon/holder/catslug/spaceslug
|
||||||
item_state = "spaceslug"
|
item_state = "spaceslug"
|
||||||
|
|
||||||
|
//Engineer catslug
|
||||||
|
/datum/category_item/catalogue/fauna/catslug/engislug
|
||||||
|
name = "Alien Wildlife - Catslug - Engineer O'Brimn"
|
||||||
|
desc = "A resident worker at the NSB Rascal's Pass, Engineer O'Brimn \
|
||||||
|
keeps the facilities pipework and machinery maintained between shifts. - \
|
||||||
|
The Catslug is an omnivorous terrestrial creature.\
|
||||||
|
Exhibiting properties of both a cat and a slug (hence its name)\
|
||||||
|
it moves somewhat awkwardly. However, the unique qualities of\
|
||||||
|
its body make it exceedingly flexible and smooth, allowing it to\
|
||||||
|
wiggle into and move effectively in even extremely tight spaces.\
|
||||||
|
Additionally, it has surprisingly capable hands, and moves quite\
|
||||||
|
well on two legs or four. Caution is advised when interacting\
|
||||||
|
with these creatures, they are quite intelligent, and proficient\
|
||||||
|
tool users."
|
||||||
|
value = CATALOGUER_REWARD_TRIVIAL //Local catslugs worth less than rarer ones
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/catslug/engislug
|
||||||
|
name = "Engineer O'Brimn"
|
||||||
|
desc = "A yellow-furred noodley bodied creature with thin arms and legs, and gloomy dark eyes. This one seems to be wearing a too-big high visibility vest and a full-face hardhat."
|
||||||
|
tt_desc = "Mollusca Felis Munitor"
|
||||||
|
icon_state = "engislug"
|
||||||
|
icon_living = "engislug"
|
||||||
|
icon_rest = "engislug_rest"
|
||||||
|
icon_dead = "engislug_dead"
|
||||||
|
digestable = 0
|
||||||
|
catalogue_data = list(/datum/category_item/catalogue/fauna/catslug/engislug)
|
||||||
|
holder_type = /obj/item/weapon/holder/catslug/engislug
|
||||||
|
makes_dirt = 0
|
||||||
|
say_list_type = /datum/say_list/catslug/engislug
|
||||||
|
|
||||||
|
minbodytemp = 200
|
||||||
|
maxbodytemp = 600 //engislug can survive a little heat, as a treat
|
||||||
|
heat_damage_per_tick = 1
|
||||||
|
cold_damage_per_tick = 2
|
||||||
|
|
||||||
|
min_oxy = 16 //Require atleast 16kPA oxygen
|
||||||
|
max_oxy = 0
|
||||||
|
min_tox = 0 //should still suffer hypoxia, but the mask ought to filter out not-nice gases for them
|
||||||
|
max_tox = 0
|
||||||
|
min_co2 = 0
|
||||||
|
max_co2 = 0
|
||||||
|
min_n2 = 0
|
||||||
|
max_n2 = 0
|
||||||
|
|
||||||
|
has_langs = list("Sign Language")
|
||||||
|
|
||||||
|
/datum/say_list/catslug/engislug
|
||||||
|
speak = list("Have any porl?", "What is that?", "Phoroncheck!", "Thump is mean work fine!", "What are you doing?", "How did you get here?", "Don't breathe in the spicy purple.", "Zap-zap ball bad.", "WAOW!", "The pipes make sense.")
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/catslug/engislug/Initialize()
|
||||||
|
. = ..()
|
||||||
|
verbs += /mob/living/proc/ventcrawl
|
||||||
|
verbs += /mob/living/proc/hide
|
||||||
|
verbs -= /mob/living/simple_mob/vore/alienanimals/catslug/proc/catslug_color //I don't even want to imagine what the colour change proc would do to their sprite, not to mention ghosts would need to be forced into the catslug so this is more just a safety net than anything
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/catslug/engislug/attack_hand(mob/living/carbon/human/M as mob)
|
||||||
|
|
||||||
|
if(stat == DEAD)
|
||||||
|
return ..()
|
||||||
|
if(M.a_intent != I_HELP)
|
||||||
|
return ..()
|
||||||
|
playsound(src, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
|
||||||
|
if(resting)
|
||||||
|
M.visible_message("<span class='notice'>\The [M.name] shakes \the [src] awake from their nap.</span>","<span class='notice'>You shake \the [src] awake!</span>")
|
||||||
|
lay_down()
|
||||||
|
ai_holder.go_wake()
|
||||||
|
return
|
||||||
|
if(M.zone_sel.selecting == BP_HEAD)
|
||||||
|
M.visible_message( \
|
||||||
|
"<span class='notice'>[M] pats \the [src] on their helmet.</span>", \
|
||||||
|
"<span class='notice'>You pat \the [src] on their helmet.</span>", )
|
||||||
|
if(client)
|
||||||
|
return
|
||||||
|
if(prob(10))
|
||||||
|
visible_message("<span class='notice'>\The [src] purrs and leans into [M]'s hand.</span>")
|
||||||
|
else if(M.zone_sel.selecting == BP_R_HAND || M.zone_sel.selecting == BP_L_HAND)
|
||||||
|
M.visible_message( \
|
||||||
|
"<span class='notice'>[M] shakes \the [src]'s hand.</span>", \
|
||||||
|
"<span class='notice'>You shake \the [src]'s hand.</span>", )
|
||||||
|
if(client)
|
||||||
|
return
|
||||||
|
if(prob(10))
|
||||||
|
visible_message("<span class='notice'>\The [src]'s looks a little confused and bonks their helmet's faceplate against [M]'s hand experimentally, attempting to nibble at it.</span>")
|
||||||
|
else if(M.zone_sel.selecting == "mouth")
|
||||||
|
M.visible_message( \
|
||||||
|
"<span class='notice'>[M] attempts to boop \the [src]'s nose, defeated only by the helmet they wear.</span>", \
|
||||||
|
"<span class='notice'>You attempt to boop \the [src] on the nose, stopped only by that helmet they wear.</span>", )
|
||||||
|
if(client)
|
||||||
|
return
|
||||||
|
if(prob(10))
|
||||||
|
visible_message("<span class='notice'>\The [src]'s eyes widen as they stare at [M]. After a moment they rub at the faint mark [M]'s digit left upon the surface of their helmet's faceplate.</span>")
|
||||||
|
else if(M.zone_sel.selecting == BP_GROIN)
|
||||||
|
M.visible_message( \
|
||||||
|
"<span class='notice'>[M] rubs \the [src]'s tummy...</span>", \
|
||||||
|
"<span class='notice'>You rub \the [src]'s tummy... You feel the danger.</span>", )
|
||||||
|
if(client)
|
||||||
|
return
|
||||||
|
visible_message("<span class='notice'>\The [src] pushes [M]'s hand away from their tummy and furrows their brow!</span>")
|
||||||
|
if(prob(5))
|
||||||
|
ai_holder.target = M
|
||||||
|
ai_holder.track_target_position()
|
||||||
|
ai_holder.set_stance(STANCE_FIGHT)
|
||||||
|
else
|
||||||
|
return ..()
|
||||||
|
|
||||||
|
/obj/item/weapon/holder/catslug/engislug
|
||||||
|
item_state = "engislug"
|
||||||
|
|
||||||
|
//Security catslug
|
||||||
|
/datum/category_item/catalogue/fauna/catslug/gatslug
|
||||||
|
name = "Alien Wildlife - Catslug - Officer Gatslug"
|
||||||
|
desc = "A resident worker at the NSB Rascal's Pass, Officer Gatslug \
|
||||||
|
served with distinction during upheaval at the NSB Adephagia in 2321. \
|
||||||
|
After their recovery from the wreckage afterwards, they were awarded \
|
||||||
|
several commendations and an offer to serve aboard the latest NT venture \
|
||||||
|
in the Virgo-Erigone system. - \
|
||||||
|
The Catslug is an omnivorous terrestrial creature.\
|
||||||
|
Exhibiting properties of both a cat and a slug (hence its name)\
|
||||||
|
it moves somewhat awkwardly. However, the unique qualities of\
|
||||||
|
its body make it exceedingly flexible and smooth, allowing it to\
|
||||||
|
wiggle into and move effectively in even extremely tight spaces.\
|
||||||
|
Additionally, it has surprisingly capable hands, and moves quite\
|
||||||
|
well on two legs or four. Caution is advised when interacting\
|
||||||
|
with these creatures, they are quite intelligent, and proficient\
|
||||||
|
tool users."
|
||||||
|
value = CATALOGUER_REWARD_TRIVIAL //Local catslugs worth less than rarer ones
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/catslug/gatslug
|
||||||
|
name = "Officer Gatslug"
|
||||||
|
desc = "A light red-furred noodley bodied creature with thin arms and legs, and gloomy dark eyes. This one seems to be wearing a security cap, bandolier and holobadge."
|
||||||
|
tt_desc = "Mollusca Felis Magistratus"
|
||||||
|
icon_state = "gatslug"
|
||||||
|
icon_living = "gatslug"
|
||||||
|
icon_rest = "gatslug_rest"
|
||||||
|
icon_dead = "gatslug_dead"
|
||||||
|
digestable = 0
|
||||||
|
catalogue_data = list(/datum/category_item/catalogue/fauna/catslug/gatslug)
|
||||||
|
holder_type = /obj/item/weapon/holder/catslug/gatslug
|
||||||
|
maxHealth = 75
|
||||||
|
health = 75
|
||||||
|
makes_dirt = 0
|
||||||
|
say_list_type = /datum/say_list/catslug/gatslug
|
||||||
|
melee_damage_upper = 10 //"Trained" security member, so they can hit that little bit harder
|
||||||
|
armor = list(
|
||||||
|
"melee" = 15,
|
||||||
|
"bullet" = 0,
|
||||||
|
"laser" = 0,
|
||||||
|
"energy" = 0,
|
||||||
|
"bomb" = 0,
|
||||||
|
"bio" = 0,
|
||||||
|
"rad" = 0
|
||||||
|
) //Similarly, \some\ armour values for a smidge more survivability compared to other catslugs.
|
||||||
|
|
||||||
|
has_langs = list("Sign Language")
|
||||||
|
|
||||||
|
|
||||||
|
/datum/say_list/catslug/gatslug
|
||||||
|
speak = list("Have any flashbangs?", "Valids!", "Heard spiders?", "What is that?", "Freeze!", "What are you doing?", "How did you get here?", "Red alert means big bangsticks.", "No being naughty now.", "WAOW!", "Who ate all the donuts?")
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/catslug/gatslug/Initialize()
|
||||||
|
. = ..()
|
||||||
|
verbs += /mob/living/proc/ventcrawl
|
||||||
|
verbs += /mob/living/proc/hide
|
||||||
|
verbs -= /mob/living/simple_mob/vore/alienanimals/catslug/proc/catslug_color //I don't even want to imagine what the colour change proc would do to their sprite, not to mention ghosts would need to be forced into the catslug so this is more just a safety net than anything
|
||||||
|
|
||||||
|
/obj/item/weapon/holder/catslug/gatslug
|
||||||
|
item_state = "gatslug"
|
||||||
|
|
||||||
|
//Medical catslug
|
||||||
|
/datum/category_item/catalogue/fauna/catslug/medislug
|
||||||
|
name = "Alien Wildlife - Catslug - Doctor Mlemulon"
|
||||||
|
desc = "A resident worker at the NSB Rascal's Pass, Doctor Mlemulon \
|
||||||
|
works hard to drink and eat all the remaining medicine stocks in \
|
||||||
|
the smartfridge after the end of a shift. Rumour has it they have \
|
||||||
|
a side business of trading advanced surgical tools for \"tasty yummers\" too. - \
|
||||||
|
The Catslug is an omnivorous terrestrial creature.\
|
||||||
|
Exhibiting properties of both a cat and a slug (hence its name)\
|
||||||
|
it moves somewhat awkwardly. However, the unique qualities of\
|
||||||
|
its body make it exceedingly flexible and smooth, allowing it to\
|
||||||
|
wiggle into and move effectively in even extremely tight spaces.\
|
||||||
|
Additionally, it has surprisingly capable hands, and moves quite\
|
||||||
|
well on two legs or four. Caution is advised when interacting\
|
||||||
|
with these creatures, they are quite intelligent, and proficient\
|
||||||
|
tool users."
|
||||||
|
value = CATALOGUER_REWARD_TRIVIAL //Local catslugs worth less than rarer ones
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/catslug/medislug
|
||||||
|
name = "Doctor Mlemulon"
|
||||||
|
desc = "A pale blue-furred noodley bodied creature with thin arms and legs, and gloomy dark eyes. This one appears to have a nurses hat perched upon it's head and a medi-hud."
|
||||||
|
tt_desc = "Mollusca Felis Medicus"
|
||||||
|
icon_state = "medislug"
|
||||||
|
icon_living = "medislug"
|
||||||
|
icon_rest = "medislug_rest"
|
||||||
|
icon_dead = "medislug_dead"
|
||||||
|
digestable = 0
|
||||||
|
catalogue_data = list(/datum/category_item/catalogue/fauna/catslug/medislug)
|
||||||
|
holder_type = /obj/item/weapon/holder/catslug/medislug
|
||||||
|
makes_dirt = 0
|
||||||
|
say_list_type = /datum/say_list/catslug/medislug
|
||||||
|
|
||||||
|
has_langs = list("Sign Language")
|
||||||
|
|
||||||
|
/datum/say_list/catslug/medislug
|
||||||
|
speak = list("Have any osteodaxon?", "What is that?", "Suit sensors!", "What are you doing?", "How did you get here?", "Put a mask on!", "No smoking!", "WAOW!", "Stop getting blood everywhere!", "WHERE IN MAINT?")
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/catslug/medislug/Initialize()
|
||||||
|
. = ..()
|
||||||
|
verbs += /mob/living/proc/ventcrawl
|
||||||
|
verbs += /mob/living/proc/hide
|
||||||
|
verbs -= /mob/living/simple_mob/vore/alienanimals/catslug/proc/catslug_color //I don't even want to imagine what the colour change proc would do to their sprite, not to mention ghosts would need to be forced into the catslug so this is more just a safety net than anything
|
||||||
|
|
||||||
|
/obj/item/weapon/holder/catslug/medislug
|
||||||
|
item_state = "medislug"
|
||||||
|
|
||||||
|
//Science catslug
|
||||||
|
/datum/category_item/catalogue/fauna/catslug/scienceslug
|
||||||
|
name = "Alien Wildlife - Catslug - Professor Nubbins"
|
||||||
|
desc = "A resident worker at the NSB Rascal's Pass, Professor Nubbins \
|
||||||
|
is tasked with the periodic maintenance of the R&D servers. \
|
||||||
|
Unfortunately, they take this to mean \"wipe all stored research\". - \
|
||||||
|
The Catslug is an omnivorous terrestrial creature.\
|
||||||
|
Exhibiting properties of both a cat and a slug (hence its name)\
|
||||||
|
it moves somewhat awkwardly. However, the unique qualities of\
|
||||||
|
its body make it exceedingly flexible and smooth, allowing it to\
|
||||||
|
wiggle into and move effectively in even extremely tight spaces.\
|
||||||
|
Additionally, it has surprisingly capable hands, and moves quite\
|
||||||
|
well on two legs or four. Caution is advised when interacting\
|
||||||
|
with these creatures, they are quite intelligent, and proficient\
|
||||||
|
tool users."
|
||||||
|
value = CATALOGUER_REWARD_TRIVIAL //Local catslugs worth less than rarer ones
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/catslug/scienceslug
|
||||||
|
name = "Professor Nubbins"
|
||||||
|
desc = "A purple-furred noodley bodied creature with thin arms and legs, and gloomy dark eyes. This one looks to be wearing a swanky white science beret, as well as a pair of goggles."
|
||||||
|
tt_desc = "Mollusca Felis Inquisitorem"
|
||||||
|
icon_state = "scienceslug"
|
||||||
|
icon_living = "scienceslug"
|
||||||
|
icon_rest = "scienceslug_rest"
|
||||||
|
icon_dead = "scienceslug_dead"
|
||||||
|
digestable = 0
|
||||||
|
catalogue_data = list(/datum/category_item/catalogue/fauna/catslug/scienceslug)
|
||||||
|
holder_type = /obj/item/weapon/holder/catslug/scienceslug
|
||||||
|
makes_dirt = 0
|
||||||
|
say_list_type = /datum/say_list/catslug/scienceslug
|
||||||
|
|
||||||
|
has_langs = list("Sign Language")
|
||||||
|
|
||||||
|
/datum/say_list/catslug/scienceslug
|
||||||
|
speak = list("Slimes, squish!", "What is that?", "Smoking in Toxins is not advised.", "What are you doing?", "How did you get here?", "Do not deconstruct the cube!", "WAOW!", "Where are our materials?", "The acid dispenser is not full of juice. Must remember that.")
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/catslug/scienceslug/Initialize()
|
||||||
|
. = ..()
|
||||||
|
verbs += /mob/living/proc/ventcrawl
|
||||||
|
verbs += /mob/living/proc/hide
|
||||||
|
verbs -= /mob/living/simple_mob/vore/alienanimals/catslug/proc/catslug_color //I don't even want to imagine what the colour change proc would do to their sprite, not to mention ghosts would need to be forced into the catslug so this is more just a safety net than anything
|
||||||
|
|
||||||
|
/obj/item/weapon/holder/catslug/scienceslug
|
||||||
|
item_state = "scienceslug"
|
||||||
|
|
||||||
|
//Cargo catslug
|
||||||
|
/datum/category_item/catalogue/fauna/catslug/cargoslug
|
||||||
|
name = "Alien Wildlife - Catslug - Technician Nermley"
|
||||||
|
desc = "A resident worker at the NSB Rascal's Pass, Technician Nermley \
|
||||||
|
is something of a mystery. No one is sure where they came from, \
|
||||||
|
local scuttlebutt is that they just turned up one day and started \
|
||||||
|
moving crates around. - \
|
||||||
|
The Catslug is an omnivorous terrestrial creature.\
|
||||||
|
Exhibiting properties of both a cat and a slug (hence its name)\
|
||||||
|
it moves somewhat awkwardly. However, the unique qualities of\
|
||||||
|
its body make it exceedingly flexible and smooth, allowing it to\
|
||||||
|
wiggle into and move effectively in even extremely tight spaces.\
|
||||||
|
Additionally, it has surprisingly capable hands, and moves quite\
|
||||||
|
well on two legs or four. Caution is advised when interacting\
|
||||||
|
with these creatures, they are quite intelligent, and proficient\
|
||||||
|
tool users."
|
||||||
|
value = CATALOGUER_REWARD_TRIVIAL //Local catslugs worth less than rarer ones
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/catslug/cargoslug
|
||||||
|
name = "Technician Nermley"
|
||||||
|
desc = "A brown-furred noodley bodied creature with thin arms and legs, and gloomy dark eyes. This one has a flipped-round baseball cap on their head and a pair of black mittens."
|
||||||
|
tt_desc = "Mollusca Felis Quisquiliae"
|
||||||
|
icon_state = "cargoslug"
|
||||||
|
icon_living = "cargoslug"
|
||||||
|
icon_rest = "cargoslug_rest"
|
||||||
|
icon_dead = "cargoslug_dead"
|
||||||
|
digestable = 0
|
||||||
|
catalogue_data = list(/datum/category_item/catalogue/fauna/catslug/cargoslug)
|
||||||
|
holder_type = /obj/item/weapon/holder/catslug/cargoslug
|
||||||
|
makes_dirt = 0
|
||||||
|
say_list_type = /datum/say_list/catslug/cargoslug
|
||||||
|
|
||||||
|
has_langs = list("Sign Language")
|
||||||
|
|
||||||
|
/datum/say_list/catslug/cargoslug
|
||||||
|
speak = list("Disposals is not for slip and slide.", "What is that?", "Stamp those manifests!", "What are you doing?", "How did you get here?", "Can order pizza crate?", "WAOW!", "Where are all of our materials?", "Got glubbs?")
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/catslug/cargoslug/Initialize()
|
||||||
|
. = ..()
|
||||||
|
verbs += /mob/living/proc/ventcrawl
|
||||||
|
verbs += /mob/living/proc/hide
|
||||||
|
verbs -= /mob/living/simple_mob/vore/alienanimals/catslug/proc/catslug_color //I don't even want to imagine what the colour change proc would do to their sprite, not to mention ghosts would need to be forced into the catslug so this is more just a safety net than anything
|
||||||
|
|
||||||
|
/obj/item/weapon/holder/catslug/cargoslug
|
||||||
|
item_state = "cargoslug"
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/catslug/suslug
|
||||||
|
name = "suslug"
|
||||||
|
desc = "A noodley bodied creature wearing a colorful space suit. Suspicious..."
|
||||||
|
tt_desc = "Mollusca Felis Amogus"
|
||||||
|
icon_state = "suslug"
|
||||||
|
icon_living = "suslug"
|
||||||
|
icon_rest = "suslug_rest"
|
||||||
|
icon_dead = "suslug_dead"
|
||||||
|
var/image/eye_image
|
||||||
|
var/is_impostor = FALSE
|
||||||
|
var/kill_cooldown
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/catslug/suslug/impostor
|
||||||
|
is_impostor = TRUE
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/catslug/suslug/Initialize()
|
||||||
|
. = ..()
|
||||||
|
verbs += /mob/living/simple_mob/vore/alienanimals/catslug/suslug/proc/assussinate
|
||||||
|
update_icon()
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/catslug/suslug/update_icon()
|
||||||
|
..()
|
||||||
|
update_suslug_eyes()
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/catslug/suslug/proc/update_suslug_eyes()
|
||||||
|
cut_overlay(eye_image)
|
||||||
|
eye_image = image(icon,null,"[icon_state]-eyes")
|
||||||
|
eye_image.appearance_flags = RESET_COLOR|KEEP_APART|PIXEL_SCALE
|
||||||
|
add_overlay(eye_image)
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/catslug/suslug/can_ventcrawl()
|
||||||
|
if(!is_impostor)
|
||||||
|
to_chat(src, "<span class='notice'>You are not an impostor! You can't vent!</span>")
|
||||||
|
return FALSE
|
||||||
|
.=..()
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/catslug/suslug/examine(mob/user)
|
||||||
|
. = ..()
|
||||||
|
|
||||||
|
if(istype(user, /mob/living/simple_mob/vore/alienanimals/catslug/suslug))
|
||||||
|
var/mob/living/simple_mob/vore/alienanimals/catslug/suslug/us = user
|
||||||
|
if(us.is_impostor)
|
||||||
|
if(src.is_impostor)
|
||||||
|
. += "<span class='notice'>They appear to be a fellow impostor!</span>"
|
||||||
|
else
|
||||||
|
. += "<span class='notice'>They appear to be a filthy innocent!</span>"
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/catslug/suslug/proc/assussinate()
|
||||||
|
set name = "Kill Innocent"
|
||||||
|
set category = "Abilities"
|
||||||
|
set desc = "Kill an innocent suslug!"
|
||||||
|
if(!is_impostor)
|
||||||
|
to_chat(src, "<span class='notice'>You are not an impostor! You can't kill like that!</span>")
|
||||||
|
return
|
||||||
|
if((world.time - kill_cooldown) < 1 MINUTE)
|
||||||
|
to_chat(src, "<span class='notice'>You cannot kill so soon after previous kill!</span>")
|
||||||
|
return
|
||||||
|
|
||||||
|
var/mob/living/simple_mob/vore/alienanimals/catslug/suslug/target
|
||||||
|
var/list/victims = list()
|
||||||
|
for(var/mob/living/simple_mob/vore/alienanimals/catslug/suslug/S in range(1))
|
||||||
|
if(!S.is_impostor)
|
||||||
|
victims += S
|
||||||
|
if(!victims || !victims.len)
|
||||||
|
to_chat(src, "<span class='warning'>There are no innocent suslugs nearby!</span>")
|
||||||
|
return
|
||||||
|
if(victims.len == 1)
|
||||||
|
target = victims[1]
|
||||||
|
else
|
||||||
|
target = tgui_input_list(usr, "Kill", "Pick a victim", victims)
|
||||||
|
|
||||||
|
if(target && istype(target))
|
||||||
|
target.adjustBruteLoss(3000)
|
||||||
|
visible_message("<span class='warning'>\The [src] kills \the [target]!</span>")
|
||||||
|
kill_cooldown = world.time
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/catslug/suslug/color
|
||||||
|
picked_color = TRUE
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/catslug/suslug/color/white
|
||||||
|
color = COLOR_WHITE
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/catslug/suslug/color/red
|
||||||
|
color = COLOR_RED
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/catslug/suslug/color/blue
|
||||||
|
color = COLOR_BLUE
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/catslug/suslug/color/lime
|
||||||
|
color = COLOR_LIME
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/catslug/suslug/color/cyan
|
||||||
|
color = COLOR_CYAN
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/catslug/suslug/color/pink
|
||||||
|
color = COLOR_PINK
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/catslug/suslug/color/yellow
|
||||||
|
color = COLOR_YELLOW
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/catslug/suslug/color/orange
|
||||||
|
color = COLOR_ORANGE
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/catslug/suslug/color/green
|
||||||
|
color = COLOR_GREEN
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/catslug/suslug/color/violet
|
||||||
|
color = COLOR_VIOLET
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/catslug/suslug/color/orange
|
||||||
|
color = COLOR_ORANGE
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/catslug/suslug/color/brown
|
||||||
|
color = COLOR_DARK_BROWN
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/catslug/suslug/color/grey
|
||||||
|
color = COLOR_GRAY
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/catslug/suslug/color/black
|
||||||
|
color = COLOR_DARK_GRAY
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/catslug/suslug/color/beige
|
||||||
|
color = COLOR_BEIGE
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/catslug/suslug/color/maroon
|
||||||
|
color = COLOR_MAROON
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/catslug/suslug/color/navy
|
||||||
|
color = COLOR_NAVY
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/catslug/suslug/color/light_pink
|
||||||
|
color = COLOR_LIGHT_PINK
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/catslug/suslug/color/light_yellow
|
||||||
|
color = COLOR_WHEAT
|
||||||
|
|||||||
@@ -1,7 +1,16 @@
|
|||||||
/datum/category_item/catalogue/fauna/skeleton
|
/datum/category_item/catalogue/fauna/skeleton
|
||||||
name = "Alien Wildlife - Space Skeleton"
|
name = "Alien Wildlife - Space Skeleton"
|
||||||
desc = "A creature consisting primarily of what appears to be bones with no apparent connective tissue, muscle, or organs.\
|
desc = "Classification: Sentientis osseous\
|
||||||
It is not clear at all how this creature even operates."
|
<br><br>\
|
||||||
|
No one, not scientist or wildlife expert can properly explain these spacial skeletons with any solid \
|
||||||
|
certanty. They are not human, despite the clear simularites to a human's skeleton, nor are they made of \
|
||||||
|
calcium like normal bones. Samples taken from the corpses of these strange creatures have yieled little \
|
||||||
|
in the form of answers and have only raised more questions with regards to their general existence. \
|
||||||
|
Scientist are still studying these beings, a difficult task as they are difficult to come by in the \
|
||||||
|
vaccum of space. The only information that scientist are able to gather about these so-called 'Space \
|
||||||
|
Skeletons' as people have come to call them is that their structure is comprised of a strange cell \
|
||||||
|
structure that is similar to plants - likely because these creatures are known to feed of the UV \
|
||||||
|
rays of nearby stars."
|
||||||
value = CATALOGUER_REWARD_MEDIUM
|
value = CATALOGUER_REWARD_MEDIUM
|
||||||
|
|
||||||
/mob/living/simple_mob/vore/alienanimals/skeleton
|
/mob/living/simple_mob/vore/alienanimals/skeleton
|
||||||
@@ -67,6 +76,11 @@
|
|||||||
vore_default_contamination_color = "grey"
|
vore_default_contamination_color = "grey"
|
||||||
vore_default_item_mode = IM_DIGEST
|
vore_default_item_mode = IM_DIGEST
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/skeleton/alt
|
||||||
|
icon_state = "altskeleton"
|
||||||
|
icon_living = "altskeleton"
|
||||||
|
icon_dead = "altskeleton_dead"
|
||||||
|
|
||||||
/datum/say_list/skeleton
|
/datum/say_list/skeleton
|
||||||
speak = list("Nyeh heh heeeh","NYAAAAHHHH", "Books are the real treasures of the world!", "Why are skeletons so calm? Because nothing gets under their skin.","When does a skeleton laugh? When someone tickels their funny bone!","What is a skeleton’s favorite mode of transport? A scare-plane.", "What did the skeleton say to the vampire? 'You suck.'","What is a skeleton’s favorite thing to do with their cell phone? Take skelfies.", "How did the skeleton know the other skeleton was lying? He could see right through him.","What’s a skeleton’s least favorite room in the house? The living room.", "How much does an elephant skeleton weigh? Skele-tons.", "Why do skeletons drink so much milk? It’s good for the bones!", "Where do bad jokes about skeletons belong? In the skelebin.","What does a skeleton use to cut through objects? A shoulder blade.", "What kind of jokes do skeletons tell? Humerus ones.")
|
speak = list("Nyeh heh heeeh","NYAAAAHHHH", "Books are the real treasures of the world!", "Why are skeletons so calm? Because nothing gets under their skin.","When does a skeleton laugh? When someone tickels their funny bone!","What is a skeleton’s favorite mode of transport? A scare-plane.", "What did the skeleton say to the vampire? 'You suck.'","What is a skeleton’s favorite thing to do with their cell phone? Take skelfies.", "How did the skeleton know the other skeleton was lying? He could see right through him.","What’s a skeleton’s least favorite room in the house? The living room.", "How much does an elephant skeleton weigh? Skele-tons.", "Why do skeletons drink so much milk? It’s good for the bones!", "Where do bad jokes about skeletons belong? In the skelebin.","What does a skeleton use to cut through objects? A shoulder blade.", "What kind of jokes do skeletons tell? Humerus ones.")
|
||||||
emote_see = list("spins its head around", "shuffles","shambles","practices on the xylophone","drinks some milk","looks at you. Its hollow, bottomless sockets gaze into you greedily.")
|
emote_see = list("spins its head around", "shuffles","shambles","practices on the xylophone","drinks some milk","looks at you. Its hollow, bottomless sockets gaze into you greedily.")
|
||||||
|
|||||||
@@ -71,7 +71,7 @@
|
|||||||
"rad" = 100
|
"rad" = 100
|
||||||
)
|
)
|
||||||
|
|
||||||
loot_list = list(/obj/item/weapon/ore/diamond = 100)
|
loot_list = list(/obj/item/weapon/ore/diamond = 100, /obj/item/weapon/ectoplasm = 3)
|
||||||
|
|
||||||
speak_emote = list("rumbles")
|
speak_emote = list("rumbles")
|
||||||
|
|
||||||
@@ -101,14 +101,14 @@
|
|||||||
|
|
||||||
/mob/living/simple_mob/vore/alienanimals/space_ghost/shoot(atom/A) //We're shooting ghosts at people and need them to have the same faction as their parent, okay?
|
/mob/living/simple_mob/vore/alienanimals/space_ghost/shoot(atom/A) //We're shooting ghosts at people and need them to have the same faction as their parent, okay?
|
||||||
if(!projectiletype)
|
if(!projectiletype)
|
||||||
return
|
return
|
||||||
if(A == get_turf(src))
|
if(A == get_turf(src))
|
||||||
return
|
return
|
||||||
face_atom(A)
|
face_atom(A)
|
||||||
if(reload_count >= reload_max)
|
if(reload_count >= reload_max)
|
||||||
return
|
return
|
||||||
var/mob/living/simple_mob/P = new projectiletype(loc, src)
|
var/mob/living/simple_mob/P = new projectiletype(loc, src)
|
||||||
|
|
||||||
if(!P)
|
if(!P)
|
||||||
return
|
return
|
||||||
if(needs_reload)
|
if(needs_reload)
|
||||||
|
|||||||
@@ -0,0 +1,76 @@
|
|||||||
|
//Base cockroach
|
||||||
|
/mob/living/simple_mob/animal/passive/cockroach
|
||||||
|
name = "cockroach"
|
||||||
|
real_name = "cockroach"
|
||||||
|
desc = "This station is just crawling with bugs."
|
||||||
|
tt_desc = "E Blattella germanica"
|
||||||
|
icon_state = "cockroach"
|
||||||
|
item_state = "cockroach"
|
||||||
|
icon_living = "cockroach"
|
||||||
|
icon_dead = "cockroach_rest" //No real 'dead' sprite
|
||||||
|
icon_rest = "cockroach_rest"
|
||||||
|
|
||||||
|
maxHealth = 1
|
||||||
|
health = 1
|
||||||
|
|
||||||
|
movement_cooldown = 2.5
|
||||||
|
|
||||||
|
mob_size = MOB_MINISCULE
|
||||||
|
pass_flags = PASSTABLE
|
||||||
|
can_pull_mobs = MOB_PULL_NONE
|
||||||
|
layer = MOB_LAYER
|
||||||
|
density = FALSE
|
||||||
|
|
||||||
|
response_help = "pokes"
|
||||||
|
response_disarm = "shoos"
|
||||||
|
response_harm = "splats"
|
||||||
|
|
||||||
|
speak_emote = list("chitters")
|
||||||
|
|
||||||
|
//Cockroaches are enviromentally superior
|
||||||
|
min_oxy = 0
|
||||||
|
max_oxy = 0
|
||||||
|
min_tox = 0
|
||||||
|
max_tox = 0
|
||||||
|
min_co2 = 0
|
||||||
|
max_co2 = 0
|
||||||
|
min_n2 = 0
|
||||||
|
max_n2 = 0
|
||||||
|
minbodytemp = 0
|
||||||
|
maxbodytemp = 999999
|
||||||
|
|
||||||
|
var/squish_chance = 25
|
||||||
|
|
||||||
|
//Deletes the body upon death
|
||||||
|
/mob/living/simple_mob/animal/passive/cockroach/death()
|
||||||
|
new /obj/effect/decal/cleanable/bug_remains(src.loc)
|
||||||
|
qdel(src)
|
||||||
|
|
||||||
|
//Squish code
|
||||||
|
/mob/living/simple_mob/animal/passive/cockroach/Crossed(var/atom/movable/AM)
|
||||||
|
if(ismob(AM))
|
||||||
|
if(isliving(AM))
|
||||||
|
var/mob/living/A = AM
|
||||||
|
if(A.mob_size > MOB_SMALL)
|
||||||
|
if(prob(squish_chance))
|
||||||
|
A.visible_message("<span class='notice'>[A] squashed [src].</span>", "<span class='notice'>You squashed [src].</span>")
|
||||||
|
adjustBruteLoss(1) //kills a normal cockroach
|
||||||
|
else
|
||||||
|
visible_message("<span class='notice'>[src] avoids getting crushed.</span>")
|
||||||
|
else
|
||||||
|
if(isstructure(AM))
|
||||||
|
if(prob(squish_chance))
|
||||||
|
AM.visible_message("<span class='notice'>[src] was crushed under [AM].</span>")
|
||||||
|
adjustBruteLoss(1)
|
||||||
|
else
|
||||||
|
visible_message("<span class='notice'>[src] avoids getting crushed.</span>")
|
||||||
|
|
||||||
|
/mob/living/simple_mob/animal/passive/cockroach/ex_act() //Explosions are a terrible way to handle a cockroach.
|
||||||
|
return
|
||||||
|
|
||||||
|
//Custom stain so it's not "spiderling remains"
|
||||||
|
/obj/effect/decal/cleanable/bug_remains
|
||||||
|
name = "bug remains"
|
||||||
|
desc = "Green squishy mess."
|
||||||
|
icon = 'icons/effects/effects.dmi'
|
||||||
|
icon_state = "greenshatter"
|
||||||
@@ -47,6 +47,16 @@
|
|||||||
icon_dead = "wah_fae_dead"
|
icon_dead = "wah_fae_dead"
|
||||||
icon_rest = "wah_fae_rest"
|
icon_rest = "wah_fae_rest"
|
||||||
|
|
||||||
|
/mob/living/simple_mob/vore/redpanda/blue
|
||||||
|
name = "blue wah"
|
||||||
|
desc = "Blue, but still cute!"
|
||||||
|
tt_desc = "Ailurus tribotum"
|
||||||
|
|
||||||
|
icon_state = "wah_bloo"
|
||||||
|
icon_living = "wah_bloo"
|
||||||
|
icon_dead = "wah_bloo_dead"
|
||||||
|
icon_rest = "wah_bloo_rest"
|
||||||
|
|
||||||
vore_ignores_undigestable = 0 // wah don't care you're edible or not, you still go in
|
vore_ignores_undigestable = 0 // wah don't care you're edible or not, you still go in
|
||||||
vore_digest_chance = 0 // instead of digesting if you struggle...
|
vore_digest_chance = 0 // instead of digesting if you struggle...
|
||||||
vore_absorb_chance = 20 // you get to become adorable purple wahpudge.
|
vore_absorb_chance = 20 // you get to become adorable purple wahpudge.
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
// Doesn't save much work, but might save a smidge of client work
|
// Doesn't save much work, but might save a smidge of client work
|
||||||
if(our_color == new_color)
|
if(our_color == new_color)
|
||||||
return
|
return
|
||||||
|
|
||||||
// Visible change
|
// Visible change
|
||||||
our_color = new_color
|
our_color = new_color
|
||||||
sun.set_color(new_color)
|
sun.set_color(new_color)
|
||||||
@@ -22,19 +22,19 @@
|
|||||||
// Doesn't save much work, but might save a smidge of client work
|
// Doesn't save much work, but might save a smidge of client work
|
||||||
if(our_brightness == new_brightness)
|
if(our_brightness == new_brightness)
|
||||||
return
|
return
|
||||||
|
|
||||||
// Store the old for math
|
// Store the old for math
|
||||||
. = our_brightness
|
. = our_brightness
|
||||||
our_brightness = new_brightness
|
our_brightness = new_brightness
|
||||||
|
|
||||||
// Visible change
|
// Visible change
|
||||||
sun.set_alpha(round(CLAMP01(our_brightness)*255,1))
|
sun.set_alpha(round(CLAMP01(our_brightness)*255,1))
|
||||||
|
|
||||||
// Update dynamic lumcount so darksight and stuff works
|
// Update dynamic lumcount so darksight and stuff works
|
||||||
var/difference = . - our_brightness
|
var/difference = . - our_brightness
|
||||||
for(var/turf/T as anything in turfs)
|
for(var/turf/T as anything in turfs)
|
||||||
T.dynamic_lumcount -= difference
|
T.dynamic_lumcount -= difference
|
||||||
|
|
||||||
/datum/sun_holder/proc/apply_to_turf(turf/T)
|
/datum/sun_holder/proc/apply_to_turf(turf/T)
|
||||||
if(sun in T.vis_contents)
|
if(sun in T.vis_contents)
|
||||||
warning("Was asked to add fake sun to [T.x], [T.y], [T.z] despite already having us in it's vis contents")
|
warning("Was asked to add fake sun to [T.x], [T.y], [T.z] despite already having us in it's vis contents")
|
||||||
@@ -49,21 +49,21 @@
|
|||||||
|
|
||||||
/datum/sun_holder/proc/rainbow()
|
/datum/sun_holder/proc/rainbow()
|
||||||
var/end = world.time + 30 SECONDS
|
var/end = world.time + 30 SECONDS
|
||||||
|
|
||||||
var/col_index = 1
|
var/col_index = 1
|
||||||
|
|
||||||
var/list/colors = list("#ff5d5d","#ffd17b","#ffff5e","#7eff7e","#6868ff","#b753ff","#d08fff","#ffffff")
|
var/list/colors = list("#ff5d5d","#ffd17b","#ffff5e","#7eff7e","#6868ff","#b753ff","#d08fff","#ffffff")
|
||||||
var/original_brightness = sun.alpha/255
|
var/original_brightness = sun.alpha/255
|
||||||
var/original_color = sun.color
|
var/original_color = sun.color
|
||||||
|
|
||||||
update_brightness(0.8)
|
update_brightness(0.8)
|
||||||
|
|
||||||
while(world.time < end)
|
while(world.time < end)
|
||||||
update_color(colors[col_index])
|
update_color(colors[col_index])
|
||||||
if(++col_index > colors.len)
|
if(++col_index > colors.len)
|
||||||
col_index = 1
|
col_index = 1
|
||||||
sleep(3)
|
sleep(3)
|
||||||
|
|
||||||
update_brightness(original_brightness)
|
update_brightness(original_brightness)
|
||||||
update_color(original_color)
|
update_color(original_color)
|
||||||
|
|
||||||
@@ -75,7 +75,7 @@
|
|||||||
mouse_opacity = 0
|
mouse_opacity = 0
|
||||||
alpha = 0
|
alpha = 0
|
||||||
color = "#FFFFFF"
|
color = "#FFFFFF"
|
||||||
|
|
||||||
var/turfs_providing_spreads = list()
|
var/turfs_providing_spreads = list()
|
||||||
var/spreads = list()
|
var/spreads = list()
|
||||||
|
|
||||||
@@ -112,7 +112,7 @@
|
|||||||
T.vis_contents += src
|
T.vis_contents += src
|
||||||
T.dynamic_lumcount += 0.5
|
T.dynamic_lumcount += 0.5
|
||||||
T.set_luminosity(1, TRUE)
|
T.set_luminosity(1, TRUE)
|
||||||
|
|
||||||
var/list/localspreads
|
var/list/localspreads
|
||||||
// Test for corners
|
// Test for corners
|
||||||
for(var/direction in cornerdirs)
|
for(var/direction in cornerdirs)
|
||||||
@@ -120,7 +120,7 @@
|
|||||||
if(dirturf && !dirturf.is_outdoors())
|
if(dirturf && !dirturf.is_outdoors())
|
||||||
var/turf/TL = get_step(T, turn(direction, -45))
|
var/turf/TL = get_step(T, turn(direction, -45))
|
||||||
var/turf/TR = get_step(T, turn(direction, 45))
|
var/turf/TR = get_step(T, turn(direction, 45))
|
||||||
|
|
||||||
// If outdoors at 45 degrees are the same, then this is a corner
|
// If outdoors at 45 degrees are the same, then this is a corner
|
||||||
if(TL && TR && TL.is_outdoors() == TR.is_outdoors())
|
if(TL && TR && TL.is_outdoors() == TR.is_outdoors())
|
||||||
var/atom/movable/sun_visuals_overlap/OL
|
var/atom/movable/sun_visuals_overlap/OL
|
||||||
@@ -132,10 +132,11 @@
|
|||||||
OL = spreads["i[direction]"]
|
OL = spreads["i[direction]"]
|
||||||
dirturf.vis_contents += OL
|
dirturf.vis_contents += OL
|
||||||
dirturf.set_luminosity(1)
|
dirturf.set_luminosity(1)
|
||||||
|
dirturf.outdoors_adjacent = TRUE
|
||||||
LAZYINITLIST(localspreads)
|
LAZYINITLIST(localspreads)
|
||||||
LAZYINITLIST(localspreads[dirturf])
|
LAZYINITLIST(localspreads[dirturf])
|
||||||
LAZYADD(localspreads[dirturf], OL)
|
LAZYADD(localspreads[dirturf], OL)
|
||||||
|
|
||||||
// Take all orthagonals
|
// Take all orthagonals
|
||||||
for(var/direction in cardinal)
|
for(var/direction in cardinal)
|
||||||
var/turf/dirturf = get_step(T, direction)
|
var/turf/dirturf = get_step(T, direction)
|
||||||
@@ -148,6 +149,7 @@
|
|||||||
var/atom/movable/sun_visuals_overlap/OL = spreads["[direction]"]
|
var/atom/movable/sun_visuals_overlap/OL = spreads["[direction]"]
|
||||||
dirturf.vis_contents += OL
|
dirturf.vis_contents += OL
|
||||||
dirturf.set_luminosity(1)
|
dirturf.set_luminosity(1)
|
||||||
|
dirturf.outdoors_adjacent = TRUE
|
||||||
LAZYINITLIST(localspreads)
|
LAZYINITLIST(localspreads)
|
||||||
LAZYINITLIST(localspreads[dirturf])
|
LAZYINITLIST(localspreads[dirturf])
|
||||||
LAZYADD(localspreads[dirturf], OL)
|
LAZYADD(localspreads[dirturf], OL)
|
||||||
@@ -163,6 +165,14 @@
|
|||||||
if(LAZYLEN(applied))
|
if(LAZYLEN(applied))
|
||||||
for(var/turf/old as anything in applied)
|
for(var/turf/old as anything in applied)
|
||||||
old.vis_contents -= applied[old]
|
old.vis_contents -= applied[old]
|
||||||
|
var/old_lit = FALSE
|
||||||
|
for(var/direction in alldirs)
|
||||||
|
var/turf/CT = get_step(old, direction)
|
||||||
|
if(CT && CT.is_outdoors())
|
||||||
|
old_lit = TRUE
|
||||||
|
if(!old_lit)
|
||||||
|
old.outdoors_adjacent = TRUE
|
||||||
|
old.set_luminosity(0)
|
||||||
applied -= old
|
applied -= old
|
||||||
turfs_providing_spreads -= T
|
turfs_providing_spreads -= T
|
||||||
applied.Cut()
|
applied.Cut()
|
||||||
|
|||||||
590
code/modules/planet/virgo3c_vr.dm
Normal file
@@ -0,0 +1,590 @@
|
|||||||
|
#define VIRGO3C_ONE_ATMOSPHERE 92.5 //kPa
|
||||||
|
#define VIRGO3C_AVG_TEMP 288.15 //kelvin
|
||||||
|
|
||||||
|
#define VIRGO3C_PER_N2 0.78 //percent
|
||||||
|
#define VIRGO3C_PER_O2 0.21
|
||||||
|
#define VIRGO3C_PER_N2O 0.00 //Currently no capacity to 'start' a turf with this. See turf.dm
|
||||||
|
#define VIRGO3C_PER_CO2 0.01
|
||||||
|
#define VIRGO3C_PER_PHORON 0.00
|
||||||
|
|
||||||
|
//Math only beyond this point
|
||||||
|
#define VIRGO3C_MOL_PER_TURF (VIRGO3C_ONE_ATMOSPHERE*CELL_VOLUME/(VIRGO3C_AVG_TEMP*R_IDEAL_GAS_EQUATION))
|
||||||
|
#define VIRGO3C_MOL_N2 (VIRGO3C_MOL_PER_TURF * VIRGO3C_PER_N2)
|
||||||
|
#define VIRGO3C_MOL_O2 (VIRGO3C_MOL_PER_TURF * VIRGO3C_PER_O2)
|
||||||
|
#define VIRGO3C_MOL_N2O (VIRGO3C_MOL_PER_TURF * VIRGO3C_PER_N2O)
|
||||||
|
#define VIRGO3C_MOL_CO2 (VIRGO3C_MOL_PER_TURF * VIRGO3C_PER_CO2)
|
||||||
|
#define VIRGO3C_MOL_PHORON (VIRGO3C_MOL_PER_TURF * VIRGO3C_PER_PHORON)
|
||||||
|
|
||||||
|
//Turfmakers
|
||||||
|
#define VIRGO3C_SET_ATMOS nitrogen=VIRGO3C_MOL_N2;oxygen=VIRGO3C_MOL_O2;carbon_dioxide=VIRGO3C_MOL_CO2;phoron=VIRGO3C_MOL_PHORON;temperature=VIRGO3C_AVG_TEMP
|
||||||
|
#define VIRGO3C_TURF_CREATE(x) x/virgo3c/nitrogen=VIRGO3C_MOL_N2;x/virgo3c/oxygen=VIRGO3C_MOL_O2;x/virgo3c/carbon_dioxide=VIRGO3C_MOL_CO2;x/virgo3c/phoron=VIRGO3C_MOL_PHORON;x/virgo3c/temperature=VIRGO3C_AVG_TEMP;x/virgo3c/outdoors=TRUE;x/virgo3c/update_graphic(list/graphic_add = null, list/graphic_remove = null) return 0
|
||||||
|
#define VIRGO3C_TURF_CREATE_UN(x) x/virgo3c/nitrogen=VIRGO3C_MOL_N2;x/virgo3c/oxygen=VIRGO3C_MOL_O2;x/virgo3c/carbon_dioxide=VIRGO3C_MOL_CO2;x/virgo3c/phoron=VIRGO3C_MOL_PHORON;x/virgo3c/temperature=VIRGO3C_AVG_TEMP
|
||||||
|
|
||||||
|
var/datum/planet/virgo3c/planet_virgo3c = null
|
||||||
|
|
||||||
|
/datum/time/virgo3c
|
||||||
|
seconds_in_day = 6 HOURS
|
||||||
|
|
||||||
|
/datum/planet/virgo3c
|
||||||
|
name = "Virgo-3c"
|
||||||
|
desc = "A habitable moon of the gas giant Virgo 3. The volcanic activity of this moon keeps its atmosphere warm enough for life to flourish."
|
||||||
|
current_time = new /datum/time/virgo3c()
|
||||||
|
planetary_wall_type = /turf/unsimulated/wall/planetary/virgo3c
|
||||||
|
|
||||||
|
/datum/planet/virgo3c/New()
|
||||||
|
..()
|
||||||
|
planet_virgo3c = src
|
||||||
|
weather_holder = new /datum/weather_holder/virgo3c(src)
|
||||||
|
|
||||||
|
/datum/planet/virgo3c/update_sun()
|
||||||
|
..()
|
||||||
|
var/datum/time/time = current_time
|
||||||
|
var/length_of_day = time.seconds_in_day / 10 / 60 / 60
|
||||||
|
var/noon = length_of_day / 2
|
||||||
|
var/distance_from_noon = abs(text2num(time.show_time("hh")) - noon)
|
||||||
|
sun_position = distance_from_noon / noon
|
||||||
|
sun_position = abs(sun_position - 1)
|
||||||
|
|
||||||
|
var/low_brightness = null
|
||||||
|
var/high_brightness = null
|
||||||
|
|
||||||
|
var/low_color = null
|
||||||
|
var/high_color = null
|
||||||
|
var/min = 0
|
||||||
|
|
||||||
|
switch(sun_position)
|
||||||
|
if(0 to 0.45) // Night
|
||||||
|
low_brightness = 0.1
|
||||||
|
low_color = "#000066"
|
||||||
|
|
||||||
|
high_brightness = 0.2
|
||||||
|
high_color = "#66004D"
|
||||||
|
min = 0
|
||||||
|
|
||||||
|
if(0.45 to 0.50) // Twilight
|
||||||
|
low_brightness = 0.5
|
||||||
|
low_color = "#66004D"
|
||||||
|
|
||||||
|
high_brightness = 0.9
|
||||||
|
high_color = "#CC3300"
|
||||||
|
min = 0.40
|
||||||
|
|
||||||
|
if(0.50 to 0.55) // Sunrise/set
|
||||||
|
low_brightness = 0.9
|
||||||
|
low_color = "#CC3300"
|
||||||
|
|
||||||
|
high_brightness = 3.0
|
||||||
|
high_color = "#FF9933"
|
||||||
|
min = 0.50
|
||||||
|
|
||||||
|
if(0.55 to 1.00) // Noon
|
||||||
|
low_brightness = 3.0
|
||||||
|
low_color = "#DDDDDD"
|
||||||
|
|
||||||
|
high_brightness = 10.0
|
||||||
|
high_color = "#FFFFFF"
|
||||||
|
min = 0.70
|
||||||
|
|
||||||
|
var/interpolate_weight = (abs(min - sun_position)) * 4
|
||||||
|
var/weather_light_modifier = 1
|
||||||
|
if(weather_holder && weather_holder.current_weather)
|
||||||
|
weather_light_modifier = weather_holder.current_weather.light_modifier
|
||||||
|
|
||||||
|
var/new_brightness = (LERP(low_brightness, high_brightness, interpolate_weight) ) * weather_light_modifier
|
||||||
|
|
||||||
|
var/new_color = null
|
||||||
|
if(weather_holder && weather_holder.current_weather && weather_holder.current_weather.light_color)
|
||||||
|
new_color = weather_holder.current_weather.light_color
|
||||||
|
else
|
||||||
|
var/list/low_color_list = hex2rgb(low_color)
|
||||||
|
var/low_r = low_color_list[1]
|
||||||
|
var/low_g = low_color_list[2]
|
||||||
|
var/low_b = low_color_list[3]
|
||||||
|
|
||||||
|
var/list/high_color_list = hex2rgb(high_color)
|
||||||
|
var/high_r = high_color_list[1]
|
||||||
|
var/high_g = high_color_list[2]
|
||||||
|
var/high_b = high_color_list[3]
|
||||||
|
|
||||||
|
var/new_r = LERP(low_r, high_r, interpolate_weight)
|
||||||
|
var/new_g = LERP(low_g, high_g, interpolate_weight)
|
||||||
|
var/new_b = LERP(low_b, high_b, interpolate_weight)
|
||||||
|
|
||||||
|
new_color = rgb(new_r, new_g, new_b)
|
||||||
|
|
||||||
|
spawn(1)
|
||||||
|
update_sun_deferred(new_brightness, new_color)
|
||||||
|
|
||||||
|
|
||||||
|
/datum/weather_holder/virgo3c
|
||||||
|
temperature = T0C
|
||||||
|
allowed_weather_types = list(
|
||||||
|
WEATHER_CLEAR = new /datum/weather/virgo3c/clear(),
|
||||||
|
WEATHER_OVERCAST = new /datum/weather/virgo3c/overcast(),
|
||||||
|
WEATHER_LIGHT_SNOW = new /datum/weather/virgo3c/light_snow(),
|
||||||
|
WEATHER_SNOW = new /datum/weather/virgo3c/snow(),
|
||||||
|
WEATHER_BLIZZARD = new /datum/weather/virgo3c/blizzard(),
|
||||||
|
WEATHER_RAIN = new /datum/weather/virgo3c/rain(),
|
||||||
|
WEATHER_STORM = new /datum/weather/virgo3c/storm(),
|
||||||
|
WEATHER_HAIL = new /datum/weather/virgo3c/hail(),
|
||||||
|
WEATHER_BLOOD_MOON = new /datum/weather/virgo3c/blood_moon(),
|
||||||
|
WEATHER_EMBERFALL = new /datum/weather/virgo3c/emberfall(),
|
||||||
|
WEATHER_ASH_STORM = new /datum/weather/virgo3c/ash_storm(),
|
||||||
|
WEATHER_FALLOUT = new /datum/weather/virgo3c/fallout()
|
||||||
|
)
|
||||||
|
roundstart_weather_chances = list(
|
||||||
|
WEATHER_CLEAR = 50,
|
||||||
|
WEATHER_OVERCAST = 10,
|
||||||
|
WEATHER_RAIN = 1,
|
||||||
|
WEATHER_LIGHT_SNOW = 1
|
||||||
|
)
|
||||||
|
|
||||||
|
/datum/weather/virgo3c
|
||||||
|
name = "virgo3c"
|
||||||
|
temp_high = 283.15 // 10c
|
||||||
|
temp_low = 273.15 // 0c
|
||||||
|
|
||||||
|
/datum/weather/virgo3c/clear
|
||||||
|
name = "clear"
|
||||||
|
transition_chances = list(
|
||||||
|
WEATHER_CLEAR = 60,
|
||||||
|
WEATHER_OVERCAST = 20,
|
||||||
|
WEATHER_LIGHT_SNOW = 1,
|
||||||
|
WEATHER_BLOODMOON = 1,
|
||||||
|
WEATHER_EMBERFALL = 0.5)
|
||||||
|
transition_messages = list(
|
||||||
|
"The sky clears up.",
|
||||||
|
"The sky is visible.",
|
||||||
|
"The weather is calm."
|
||||||
|
)
|
||||||
|
sky_visible = TRUE
|
||||||
|
observed_message = "The sky is clear."
|
||||||
|
|
||||||
|
/datum/weather/virgo3c/overcast
|
||||||
|
name = "overcast"
|
||||||
|
temp_high = 283.15 // 10c
|
||||||
|
temp_low = 273.15 // 0c
|
||||||
|
light_modifier = 0.8
|
||||||
|
transition_chances = list(
|
||||||
|
WEATHER_CLEAR = 25,
|
||||||
|
WEATHER_OVERCAST = 50,
|
||||||
|
WEATHER_RAIN = 5,
|
||||||
|
WEATHER_LIGHT_SNOW = 5
|
||||||
|
)
|
||||||
|
observed_message = "It is overcast, all you can see are clouds."
|
||||||
|
transition_messages = list(
|
||||||
|
"All you can see above are clouds.",
|
||||||
|
"Clouds cut off your view of the sky.",
|
||||||
|
"It's very cloudy."
|
||||||
|
)
|
||||||
|
|
||||||
|
/datum/weather/virgo3c/light_snow
|
||||||
|
name = "light snow"
|
||||||
|
icon_state = "snowfall_light"
|
||||||
|
temp_high = 268.15 // -5c
|
||||||
|
temp_low = 263.15 // -10c
|
||||||
|
light_modifier = 0.7
|
||||||
|
transition_chances = list(
|
||||||
|
WEATHER_LIGHT_SNOW = 75,
|
||||||
|
WEATHER_OVERCAST = 25,
|
||||||
|
WEATHER_SNOW = 10,
|
||||||
|
WEATHER_RAIN = 5
|
||||||
|
)
|
||||||
|
observed_message = "It is snowing lightly."
|
||||||
|
transition_messages = list(
|
||||||
|
"Small snowflakes begin to fall from above.",
|
||||||
|
"It begins to snow lightly.",
|
||||||
|
)
|
||||||
|
|
||||||
|
/datum/weather/virgo3c/snow
|
||||||
|
name = "moderate snow"
|
||||||
|
icon_state = "snowfall_med"
|
||||||
|
temp_high = 268.15 // -5c
|
||||||
|
temp_low = 263.15 // -10c
|
||||||
|
wind_high = 2
|
||||||
|
wind_low = 0
|
||||||
|
light_modifier = 0.5
|
||||||
|
flight_failure_modifier = 5
|
||||||
|
transition_chances = list(
|
||||||
|
WEATHER_SNOW = 75,
|
||||||
|
WEATHER_LIGHT_SNOW = 25,
|
||||||
|
WEATHER_BLIZZARD = 5
|
||||||
|
)
|
||||||
|
observed_message = "It is snowing."
|
||||||
|
transition_messages = list(
|
||||||
|
"It's starting to snow.",
|
||||||
|
"The air feels much colder as snowflakes fall from above."
|
||||||
|
)
|
||||||
|
outdoor_sounds_type = /datum/looping_sound/weather/outside_snow
|
||||||
|
indoor_sounds_type = /datum/looping_sound/weather/inside_snow
|
||||||
|
|
||||||
|
/datum/weather/virgo3c/blizzard
|
||||||
|
name = "blizzard"
|
||||||
|
icon_state = "snowfall_heavy"
|
||||||
|
temp_high = 268.15 // -5c
|
||||||
|
temp_low = 263.15 // -10c
|
||||||
|
wind_high = 4
|
||||||
|
wind_low = 2
|
||||||
|
light_modifier = 0.3
|
||||||
|
flight_failure_modifier = 10
|
||||||
|
transition_chances = list(
|
||||||
|
WEATHER_BLIZZARD = 50,
|
||||||
|
WEATHER_SNOW = 50
|
||||||
|
)
|
||||||
|
observed_message = "A blizzard blows snow everywhere."
|
||||||
|
transition_messages = list(
|
||||||
|
"Strong winds howl around you as a blizzard appears.",
|
||||||
|
"It starts snowing heavily, and it feels extremly cold now."
|
||||||
|
)
|
||||||
|
outdoor_sounds_type = /datum/looping_sound/weather/outside_blizzard
|
||||||
|
indoor_sounds_type = /datum/looping_sound/weather/inside_blizzard
|
||||||
|
|
||||||
|
/datum/weather/virgo3c/rain
|
||||||
|
name = "rain"
|
||||||
|
icon_state = "rain"
|
||||||
|
temp_high = 283.15 // 10c
|
||||||
|
temp_low = 273.15 // 0c
|
||||||
|
wind_high = 2
|
||||||
|
wind_low = 1
|
||||||
|
light_modifier = 0.5
|
||||||
|
effect_message = "<span class='warning'>Rain falls on you.</span>"
|
||||||
|
|
||||||
|
transition_chances = list(
|
||||||
|
WEATHER_OVERCAST = 25,
|
||||||
|
WEATHER_RAIN = 50,
|
||||||
|
WEATHER_STORM = 10,
|
||||||
|
WEATHER_LIGHT_SNOW = 5
|
||||||
|
)
|
||||||
|
observed_message = "It is raining."
|
||||||
|
transition_messages = list(
|
||||||
|
"The sky is dark, and rain falls down upon you."
|
||||||
|
)
|
||||||
|
|
||||||
|
/datum/weather/virgo3c/rain/process_effects()
|
||||||
|
..()
|
||||||
|
for(var/mob/living/L as anything in living_mob_list)
|
||||||
|
if(L.z in holder.our_planet.expected_z_levels)
|
||||||
|
var/turf/T = get_turf(L)
|
||||||
|
if(!T.is_outdoors())
|
||||||
|
continue // They're indoors, so no need to rain on them.
|
||||||
|
|
||||||
|
// If they have an open umbrella, it'll guard from rain
|
||||||
|
var/obj/item/weapon/melee/umbrella/U = L.get_active_hand()
|
||||||
|
if(!istype(U) || !U.open)
|
||||||
|
U = L.get_inactive_hand()
|
||||||
|
|
||||||
|
if(istype(U) && U.open)
|
||||||
|
if(show_message)
|
||||||
|
to_chat(L, "<span class='notice'>Rain patters softly onto your umbrella.</span>")
|
||||||
|
continue
|
||||||
|
|
||||||
|
L.water_act(1)
|
||||||
|
if(show_message)
|
||||||
|
to_chat(L, effect_message)
|
||||||
|
|
||||||
|
/datum/weather/virgo3c/storm
|
||||||
|
name = "storm"
|
||||||
|
icon_state = "storm"
|
||||||
|
temp_high = 283.15 // 10c
|
||||||
|
temp_low = 273.15 // 0c
|
||||||
|
wind_high = 4
|
||||||
|
wind_low = 2
|
||||||
|
light_modifier = 0.3
|
||||||
|
flight_failure_modifier = 10
|
||||||
|
effect_message = "<span class='warning'>Rain falls on you, drenching you in water.</span>"
|
||||||
|
|
||||||
|
var/next_lightning_strike = 0 // world.time when lightning will strike.
|
||||||
|
var/min_lightning_cooldown = 5 SECONDS
|
||||||
|
var/max_lightning_cooldown = 1 MINUTE
|
||||||
|
observed_message = "An intense storm pours down over the region."
|
||||||
|
transition_messages = list(
|
||||||
|
"You feel intense winds hit you as the weather takes a turn for the worst.",
|
||||||
|
"Loud thunder is heard in the distance.",
|
||||||
|
"A bright flash heralds the approach of a storm."
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
transition_chances = list(
|
||||||
|
WEATHER_STORM = 50,
|
||||||
|
WEATHER_RAIN = 50,
|
||||||
|
WEATHER_BLIZZARD = 5,
|
||||||
|
WEATHER_HAIL = 5
|
||||||
|
)
|
||||||
|
|
||||||
|
/datum/weather/virgo3c/storm/process_effects()
|
||||||
|
..()
|
||||||
|
for(var/mob/living/L as anything in living_mob_list)
|
||||||
|
if(L.z in holder.our_planet.expected_z_levels)
|
||||||
|
var/turf/T = get_turf(L)
|
||||||
|
if(!T.is_outdoors())
|
||||||
|
continue // They're indoors, so no need to rain on them.
|
||||||
|
|
||||||
|
// If they have an open umbrella, it'll guard from rain
|
||||||
|
var/obj/item/weapon/melee/umbrella/U = L.get_active_hand()
|
||||||
|
if(!istype(U) || !U.open)
|
||||||
|
U = L.get_inactive_hand()
|
||||||
|
|
||||||
|
if(istype(U) && U.open)
|
||||||
|
if(show_message)
|
||||||
|
to_chat(L, "<span class='notice'>Rain showers loudly onto your umbrella!</span>")
|
||||||
|
continue
|
||||||
|
|
||||||
|
|
||||||
|
L.water_act(2)
|
||||||
|
if(show_message)
|
||||||
|
to_chat(L, effect_message)
|
||||||
|
|
||||||
|
handle_lightning()
|
||||||
|
|
||||||
|
// This gets called to do lightning periodically.
|
||||||
|
// There is a seperate function to do the actual lightning strike, so that badmins can play with it.
|
||||||
|
/datum/weather/virgo3c/storm/proc/handle_lightning()
|
||||||
|
if(world.time < next_lightning_strike)
|
||||||
|
return // It's too soon to strike again.
|
||||||
|
next_lightning_strike = world.time + rand(min_lightning_cooldown, max_lightning_cooldown)
|
||||||
|
var/turf/T = pick(holder.our_planet.planet_floors) // This has the chance to 'strike' the sky, but that might be a good thing, to scare reckless pilots.
|
||||||
|
lightning_strike(T)
|
||||||
|
|
||||||
|
/datum/weather/virgo3c/hail
|
||||||
|
name = "hail"
|
||||||
|
icon_state = "hail"
|
||||||
|
temp_high = 268.15 // -5c
|
||||||
|
temp_low = 263.15 // -10c
|
||||||
|
light_modifier = 0.3
|
||||||
|
flight_failure_modifier = 15
|
||||||
|
timer_low_bound = 2
|
||||||
|
timer_high_bound = 5
|
||||||
|
effect_message = "<span class='warning'>The hail smacks into you!</span>"
|
||||||
|
|
||||||
|
transition_chances = list(
|
||||||
|
WEATHER_HAIL = 25,
|
||||||
|
WEATHER_RAIN = 75
|
||||||
|
)
|
||||||
|
observed_message = "Ice is falling from the sky."
|
||||||
|
transition_messages = list(
|
||||||
|
"Ice begins to fall from the sky.",
|
||||||
|
"It begins to hail.",
|
||||||
|
"An intense chill is felt, and chunks of ice start to fall from the sky, towards you."
|
||||||
|
)
|
||||||
|
|
||||||
|
/datum/weather/virgo3c/hail/process_effects()
|
||||||
|
..()
|
||||||
|
for(var/mob/living/carbon/H as anything in human_mob_list)
|
||||||
|
if(H.z in holder.our_planet.expected_z_levels)
|
||||||
|
var/turf/T = get_turf(H)
|
||||||
|
if(!T.is_outdoors())
|
||||||
|
continue // They're indoors, so no need to pelt them with ice.
|
||||||
|
|
||||||
|
// If they have an open umbrella, it'll guard from hail
|
||||||
|
var/obj/item/weapon/melee/umbrella/U = H.get_active_hand()
|
||||||
|
if(!istype(U) || !U.open)
|
||||||
|
U = H.get_inactive_hand()
|
||||||
|
|
||||||
|
if(istype(U) && U.open)
|
||||||
|
if(show_message)
|
||||||
|
to_chat(H, "<span class='notice'>Hail patters onto your umbrella.</span>")
|
||||||
|
continue
|
||||||
|
|
||||||
|
var/target_zone = pick(BP_ALL)
|
||||||
|
var/amount_blocked = H.run_armor_check(target_zone, "melee")
|
||||||
|
var/amount_soaked = H.get_armor_soak(target_zone, "melee")
|
||||||
|
|
||||||
|
var/damage = rand(1,3)
|
||||||
|
|
||||||
|
if(amount_blocked >= 30)
|
||||||
|
continue // No need to apply damage. Hardhats are 30. They should probably protect you from hail on your head.
|
||||||
|
//Voidsuits are likewise 40, and riot, 80. Clothes are all less than 30.
|
||||||
|
|
||||||
|
if(amount_soaked >= damage)
|
||||||
|
continue // No need to apply damage.
|
||||||
|
|
||||||
|
H.apply_damage(damage, BRUTE, target_zone, amount_blocked, amount_soaked, used_weapon = "hail")
|
||||||
|
if(show_message)
|
||||||
|
to_chat(H, effect_message)
|
||||||
|
|
||||||
|
/datum/weather/virgo3c/blood_moon
|
||||||
|
name = "blood moon"
|
||||||
|
light_modifier = 0.5
|
||||||
|
light_color = "#FF0000"
|
||||||
|
temp_high = 283.15 // 10c
|
||||||
|
temp_low = 273.15 // 0c
|
||||||
|
flight_failure_modifier = 25
|
||||||
|
transition_chances = list(
|
||||||
|
WEATHER_BLOODMOON = 75,
|
||||||
|
WEATHER_CLEAR = 25
|
||||||
|
)
|
||||||
|
observed_message = "Everything is red. Something really ominous is going on."
|
||||||
|
transition_messages = list(
|
||||||
|
"The sky turns blood red!"
|
||||||
|
)
|
||||||
|
outdoor_sounds_type = /datum/looping_sound/weather/wind
|
||||||
|
indoor_sounds_type = /datum/looping_sound/weather/wind/indoors
|
||||||
|
|
||||||
|
// Ash and embers fall forever, such as from a volcano or something.
|
||||||
|
/datum/weather/virgo3c/emberfall
|
||||||
|
name = "emberfall"
|
||||||
|
icon_state = "ashfall_light"
|
||||||
|
light_modifier = 0.7
|
||||||
|
light_color = "#880000"
|
||||||
|
temp_high = 293.15 // 20c
|
||||||
|
temp_low = 283.15 // 10c
|
||||||
|
flight_failure_modifier = 20
|
||||||
|
transition_chances = list(
|
||||||
|
WEATHER_ASH_STORM = 100
|
||||||
|
)
|
||||||
|
observed_message = "Soot, ash, and embers float down from above."
|
||||||
|
transition_messages = list(
|
||||||
|
"Gentle embers waft down around you like black snow. A wall of dark, glowing ash approaches in the distance..."
|
||||||
|
)
|
||||||
|
outdoor_sounds_type = /datum/looping_sound/weather/wind
|
||||||
|
indoor_sounds_type = /datum/looping_sound/weather/wind/indoors
|
||||||
|
|
||||||
|
// Like the above but a lot more harmful.
|
||||||
|
/datum/weather/virgo3c/ash_storm
|
||||||
|
name = "ash storm"
|
||||||
|
icon_state = "ashfall_heavy"
|
||||||
|
light_modifier = 0.1
|
||||||
|
light_color = "#FF0000"
|
||||||
|
temp_high = 313.15 // 40c
|
||||||
|
temp_low = 303.15 // 30c
|
||||||
|
wind_high = 6
|
||||||
|
wind_low = 3
|
||||||
|
flight_failure_modifier = 50
|
||||||
|
transition_chances = list(
|
||||||
|
WEATHER_ASH_STORM = 5,
|
||||||
|
WEATHER_CLEAR = 95
|
||||||
|
)
|
||||||
|
observed_message = "All that can be seen is black smoldering ash."
|
||||||
|
transition_messages = list(
|
||||||
|
"Smoldering clouds of scorching ash billow down around you!"
|
||||||
|
)
|
||||||
|
// Lets recycle.
|
||||||
|
outdoor_sounds_type = /datum/looping_sound/weather/outside_blizzard
|
||||||
|
indoor_sounds_type = /datum/looping_sound/weather/inside_blizzard
|
||||||
|
|
||||||
|
/datum/weather/virgo3c/ash_storm/process_effects()
|
||||||
|
..()
|
||||||
|
for(var/mob/living/L as anything in living_mob_list)
|
||||||
|
if(L.z in holder.our_planet.expected_z_levels)
|
||||||
|
var/turf/T = get_turf(L)
|
||||||
|
if(!T.is_outdoors())
|
||||||
|
continue // They're indoors, so no need to burn them with ash.
|
||||||
|
else if (isanimal(L))
|
||||||
|
continue //Don't murder the wildlife, they live here it's fine
|
||||||
|
|
||||||
|
L.inflict_heat_damage(1)
|
||||||
|
to_chat(L, "<span class='warning'>Smoldering ash singes you!</span>")
|
||||||
|
|
||||||
|
// Totally radical.
|
||||||
|
/datum/weather/virgo3c/fallout
|
||||||
|
name = "fallout"
|
||||||
|
icon_state = "fallout"
|
||||||
|
light_modifier = 0.7
|
||||||
|
light_color = "#CCFFCC"
|
||||||
|
flight_failure_modifier = 30
|
||||||
|
transition_chances = list(
|
||||||
|
WEATHER_FALLOUT = 100
|
||||||
|
)
|
||||||
|
observed_message = "Radioactive soot and ash rains down from the heavens."
|
||||||
|
transition_messages = list(
|
||||||
|
"Radioactive soot and ash start to float down around you, contaminating whatever they touch."
|
||||||
|
)
|
||||||
|
outdoor_sounds_type = /datum/looping_sound/weather/wind
|
||||||
|
indoor_sounds_type = /datum/looping_sound/weather/wind/indoors
|
||||||
|
|
||||||
|
// How much radiation a mob gets while on an outside tile.
|
||||||
|
var/direct_rad_low = RAD_LEVEL_LOW
|
||||||
|
var/direct_rad_high = RAD_LEVEL_MODERATE
|
||||||
|
|
||||||
|
// How much radiation is bursted onto a random tile near a mob.
|
||||||
|
var/fallout_rad_low = RAD_LEVEL_HIGH
|
||||||
|
var/fallout_rad_high = RAD_LEVEL_VERY_HIGH
|
||||||
|
|
||||||
|
/datum/weather/virgo3c/fallout/process_effects()
|
||||||
|
..()
|
||||||
|
for(var/mob/living/L as anything in living_mob_list)
|
||||||
|
if(L.z in holder.our_planet.expected_z_levels)
|
||||||
|
irradiate_nearby_turf(L)
|
||||||
|
var/turf/T = get_turf(L)
|
||||||
|
if(!T.is_outdoors())
|
||||||
|
continue // They're indoors, so no need to irradiate them with fallout.
|
||||||
|
|
||||||
|
L.rad_act(rand(direct_rad_low, direct_rad_high))
|
||||||
|
|
||||||
|
// This makes random tiles near people radioactive for awhile.
|
||||||
|
// Tiles far away from people are left alone, for performance.
|
||||||
|
/datum/weather/virgo3c/fallout/proc/irradiate_nearby_turf(mob/living/L)
|
||||||
|
if(!istype(L))
|
||||||
|
return
|
||||||
|
var/list/turfs = RANGE_TURFS(world.view, L)
|
||||||
|
var/turf/T = pick(turfs) // We get one try per tick.
|
||||||
|
if(!istype(T))
|
||||||
|
return
|
||||||
|
if(T.is_outdoors())
|
||||||
|
SSradiation.radiate(T, rand(fallout_rad_low, fallout_rad_high))
|
||||||
|
|
||||||
|
/turf/unsimulated/wall/planetary/virgo3c
|
||||||
|
name = "impassable rock"
|
||||||
|
desc = "It's quite impassable"
|
||||||
|
icon = 'icons/turf/walls.dmi'
|
||||||
|
icon_state = "rock-dark"
|
||||||
|
alpha = 0xFF
|
||||||
|
VIRGO3C_SET_ATMOS
|
||||||
|
|
||||||
|
VIRGO3C_TURF_CREATE(/turf/simulated/mineral/cave)
|
||||||
|
VIRGO3C_TURF_CREATE(/turf/simulated/floor/outdoors/newdirt)
|
||||||
|
VIRGO3C_TURF_CREATE(/turf/simulated/floor/outdoors/newdirt_nograss)
|
||||||
|
VIRGO3C_TURF_CREATE(/turf/simulated/floor/outdoors/sidewalk)
|
||||||
|
VIRGO3C_TURF_CREATE(/turf/simulated/floor/outdoors/sidewalk/side)
|
||||||
|
VIRGO3C_TURF_CREATE(/turf/simulated/floor/outdoors/sidewalk/slab)
|
||||||
|
VIRGO3C_TURF_CREATE(/turf/simulated/floor/water)
|
||||||
|
VIRGO3C_TURF_CREATE(/turf/simulated/floor/tiled)
|
||||||
|
VIRGO3C_TURF_CREATE(/turf/simulated/floor/reinforced)
|
||||||
|
VIRGO3C_TURF_CREATE(/turf/simulated/floor/glass/reinforced)
|
||||||
|
VIRGO3C_TURF_CREATE(/turf/simulated/open)
|
||||||
|
VIRGO3C_TURF_CREATE(/turf/simulated/floor/tiled/dark)
|
||||||
|
VIRGO3C_TURF_CREATE(/turf/simulated/mineral)
|
||||||
|
VIRGO3C_TURF_CREATE(/turf/simulated/floor)
|
||||||
|
|
||||||
|
/turf/simulated/floor/outdoors/grass/virgo3c
|
||||||
|
VIRGO3C_SET_ATMOS
|
||||||
|
|
||||||
|
grass_types = list(
|
||||||
|
/obj/structure/flora/ausbushes/sparsegrass = 50,
|
||||||
|
/obj/structure/flora/ausbushes/fullgrass = 50,
|
||||||
|
/obj/structure/flora/ausbushes/brflowers = 1,
|
||||||
|
/obj/structure/flora/ausbushes/ppflowers = 1,
|
||||||
|
/obj/structure/flora/ausbushes/ywflowers = 1
|
||||||
|
)
|
||||||
|
|
||||||
|
/turf/simulated/floor/outdoors/grass/forest/virgo3c
|
||||||
|
VIRGO3C_SET_ATMOS
|
||||||
|
var/tree_chance = 5
|
||||||
|
|
||||||
|
var/animal_chance = 0.5
|
||||||
|
var/animal_types = list(
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/teppi = 5,
|
||||||
|
/mob/living/simple_mob/vore/redpanda = 20,
|
||||||
|
/mob/living/simple_mob/vore/redpanda/fae = 1,
|
||||||
|
/mob/living/simple_mob/vore/sheep = 10,
|
||||||
|
/mob/living/simple_mob/vore/rabbit/black = 10,
|
||||||
|
/mob/living/simple_mob/vore/rabbit/white = 10,
|
||||||
|
/mob/living/simple_mob/vore/rabbit/brown = 10,
|
||||||
|
/mob/living/simple_mob/vore/leopardmander = 1,
|
||||||
|
/mob/living/simple_mob/vore/horse/big = 5,
|
||||||
|
/mob/living/simple_mob/vore/bigdragon/friendly = 0.5,
|
||||||
|
/mob/living/simple_mob/vore/alienanimals/dustjumper = 10
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
/turf/simulated/floor/outdoors/grass/forest/virgo3c/Initialize()
|
||||||
|
if(tree_chance && prob(tree_chance) && !check_density())
|
||||||
|
new /obj/structure/flora/tree/bigtree(src)
|
||||||
|
|
||||||
|
if(animal_chance && prob(animal_chance) && !check_density())
|
||||||
|
var/animal_type = pickweight(animal_types)
|
||||||
|
new animal_type(src)
|
||||||
|
|
||||||
|
. = ..()
|
||||||
|
|
||||||
|
//VIRGO3C_SET_ATMOS()
|
||||||
@@ -32,35 +32,35 @@ var/datum/planet/virgo4/planet_virgo4 = null
|
|||||||
var/min = 0
|
var/min = 0
|
||||||
|
|
||||||
switch(sun_position)
|
switch(sun_position)
|
||||||
if(0 to 0.30) // Night
|
if(0 to 0.20) // Night
|
||||||
low_brightness = 0.1
|
low_brightness = 0.3
|
||||||
low_color = "#000066"
|
low_color = "#000066"
|
||||||
|
|
||||||
high_brightness = 0.2
|
high_brightness = 0.5
|
||||||
high_color = "#66004D"
|
high_color = "#66004D"
|
||||||
min = 0
|
min = 0
|
||||||
|
|
||||||
if(0.30 to 0.40) // Twilight
|
if(0.20 to 0.30) // Twilight
|
||||||
low_brightness = 0.4
|
low_brightness = 0.5
|
||||||
low_color = "#66004D"
|
low_color = "#66004D"
|
||||||
|
|
||||||
high_brightness = 0.6
|
high_brightness = 0.9
|
||||||
high_color = "#CC3300"
|
high_color = "#CC3300"
|
||||||
min = 0.40
|
min = 0.40
|
||||||
|
|
||||||
if(0.40 to 0.50) // Sunrise/set
|
if(0.30 to 0.40) // Sunrise/set
|
||||||
low_brightness = 0.7
|
low_brightness = 0.9
|
||||||
low_color = "#CC3300"
|
low_color = "#CC3300"
|
||||||
|
|
||||||
high_brightness = 0.9
|
high_brightness = 3.0
|
||||||
high_color = "#FF9933"
|
high_color = "#FF9933"
|
||||||
min = 0.50
|
min = 0.50
|
||||||
|
|
||||||
if(0.50 to 1.00) // Noon
|
if(0.40 to 1.00) // Noon
|
||||||
low_brightness = 1
|
low_brightness = 3.0
|
||||||
low_color = "#DDDDDD"
|
low_color = "#DDDDDD"
|
||||||
|
|
||||||
high_brightness = 2
|
high_brightness = 10.0
|
||||||
high_color = "#FFFFFF"
|
high_color = "#FFFFFF"
|
||||||
min = 0.70
|
min = 0.70
|
||||||
|
|
||||||
@@ -92,7 +92,7 @@ var/datum/planet/virgo4/planet_virgo4 = null
|
|||||||
new_color = rgb(new_r, new_g, new_b)
|
new_color = rgb(new_r, new_g, new_b)
|
||||||
|
|
||||||
spawn(1)
|
spawn(1)
|
||||||
update_sun_deferred(2, new_brightness, new_color)
|
update_sun_deferred(new_brightness, new_color)
|
||||||
|
|
||||||
|
|
||||||
/datum/weather_holder/virgo4
|
/datum/weather_holder/virgo4
|
||||||
@@ -187,15 +187,17 @@ var/datum/planet/virgo4/planet_virgo4 = null
|
|||||||
outdoor_sounds_type = /datum/looping_sound/weather/outside_snow
|
outdoor_sounds_type = /datum/looping_sound/weather/outside_snow
|
||||||
indoor_sounds_type = /datum/looping_sound/weather/inside_snow
|
indoor_sounds_type = /datum/looping_sound/weather/inside_snow
|
||||||
|
|
||||||
|
/*
|
||||||
/datum/weather/virgo4/snow/process_effects()
|
/datum/weather/virgo4/snow/process_effects()
|
||||||
..()
|
..()
|
||||||
for(var/turf/simulated/floor/outdoors/snow/S in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either
|
for(var/turf/simulated/floor/outdoors/snow/S as anything in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either
|
||||||
if(S.z in holder.our_planet.expected_z_levels)
|
if(S.z in holder.our_planet.expected_z_levels)
|
||||||
for(var/dir_checked in cardinal)
|
for(var/dir_checked in cardinal)
|
||||||
var/turf/simulated/floor/T = get_step(S, dir_checked)
|
var/turf/simulated/floor/T = get_step(S, dir_checked)
|
||||||
if(istype(T))
|
if(istype(T))
|
||||||
if(istype(T, /turf/simulated/floor/outdoors) && prob(33))
|
if(istype(T, /turf/simulated/floor/outdoors) && prob(33))
|
||||||
T.chill()
|
T.chill()
|
||||||
|
*/
|
||||||
|
|
||||||
/datum/weather/virgo4/blizzard
|
/datum/weather/virgo4/blizzard
|
||||||
name = "blizzard"
|
name = "blizzard"
|
||||||
@@ -217,15 +219,17 @@ var/datum/planet/virgo4/planet_virgo4 = null
|
|||||||
outdoor_sounds_type = /datum/looping_sound/weather/outside_blizzard
|
outdoor_sounds_type = /datum/looping_sound/weather/outside_blizzard
|
||||||
indoor_sounds_type = /datum/looping_sound/weather/inside_blizzard
|
indoor_sounds_type = /datum/looping_sound/weather/inside_blizzard
|
||||||
|
|
||||||
|
/*
|
||||||
/datum/weather/virgo4/blizzard/process_effects()
|
/datum/weather/virgo4/blizzard/process_effects()
|
||||||
..()
|
..()
|
||||||
for(var/turf/simulated/floor/outdoors/snow/S in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either
|
for(var/turf/simulated/floor/outdoors/snow/S as anything in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either
|
||||||
if(S.z in holder.our_planet.expected_z_levels)
|
if(S.z in holder.our_planet.expected_z_levels)
|
||||||
for(var/dir_checked in cardinal)
|
for(var/dir_checked in cardinal)
|
||||||
var/turf/simulated/floor/T = get_step(S, dir_checked)
|
var/turf/simulated/floor/T = get_step(S, dir_checked)
|
||||||
if(istype(T))
|
if(istype(T))
|
||||||
if(istype(T, /turf/simulated/floor/outdoors) && prob(50))
|
if(istype(T, /turf/simulated/floor/outdoors) && prob(50))
|
||||||
T.chill()
|
T.chill()
|
||||||
|
*/
|
||||||
|
|
||||||
/datum/weather/virgo4/rain
|
/datum/weather/virgo4/rain
|
||||||
name = "rain"
|
name = "rain"
|
||||||
@@ -248,25 +252,21 @@ var/datum/planet/virgo4/planet_virgo4 = null
|
|||||||
|
|
||||||
/datum/weather/virgo4/rain/process_effects()
|
/datum/weather/virgo4/rain/process_effects()
|
||||||
..()
|
..()
|
||||||
for(var/mob/living/L in living_mob_list)
|
for(var/mob/living/L as anything in living_mob_list)
|
||||||
if(L.z in holder.our_planet.expected_z_levels)
|
if(L.z in holder.our_planet.expected_z_levels)
|
||||||
var/turf/T = get_turf(L)
|
var/turf/T = get_turf(L)
|
||||||
if(!T.outdoors)
|
if(!T.is_outdoors())
|
||||||
continue // They're indoors, so no need to rain on them.
|
continue // They're indoors, so no need to rain on them.
|
||||||
|
|
||||||
// If they have an open umbrella, it'll guard from rain
|
// If they have an open umbrella, it'll guard from rain
|
||||||
if(istype(L.get_active_hand(), /obj/item/weapon/melee/umbrella))
|
var/obj/item/weapon/melee/umbrella/U = L.get_active_hand()
|
||||||
var/obj/item/weapon/melee/umbrella/U = L.get_active_hand()
|
if(!istype(U) || !U.open)
|
||||||
if(U.open)
|
U = L.get_inactive_hand()
|
||||||
if(show_message)
|
|
||||||
to_chat(L, "<span class='notice'>Rain patters softly onto your umbrella.</span>")
|
if(istype(U) && U.open)
|
||||||
continue
|
if(show_message)
|
||||||
else if(istype(L.get_inactive_hand(), /obj/item/weapon/melee/umbrella))
|
to_chat(L, "<span class='notice'>Rain patters softly onto your umbrella.</span>")
|
||||||
var/obj/item/weapon/melee/umbrella/U = L.get_inactive_hand()
|
continue
|
||||||
if(U.open)
|
|
||||||
if(show_message)
|
|
||||||
to_chat(L, "<span class='notice'>Rain patters softly onto your umbrella.</span>")
|
|
||||||
continue
|
|
||||||
|
|
||||||
L.water_act(1)
|
L.water_act(1)
|
||||||
if(show_message)
|
if(show_message)
|
||||||
@@ -298,25 +298,21 @@ var/datum/planet/virgo4/planet_virgo4 = null
|
|||||||
|
|
||||||
/datum/weather/virgo4/storm/process_effects()
|
/datum/weather/virgo4/storm/process_effects()
|
||||||
..()
|
..()
|
||||||
for(var/mob/living/L in living_mob_list)
|
for(var/mob/living/L as anything in living_mob_list)
|
||||||
if(L.z in holder.our_planet.expected_z_levels)
|
if(L.z in holder.our_planet.expected_z_levels)
|
||||||
var/turf/T = get_turf(L)
|
var/turf/T = get_turf(L)
|
||||||
if(!T.outdoors)
|
if(!T.is_outdoors())
|
||||||
continue // They're indoors, so no need to rain on them.
|
continue // They're indoors, so no need to rain on them.
|
||||||
|
|
||||||
// If they have an open umbrella, it'll guard from rain
|
// If they have an open umbrella, it'll guard from rain
|
||||||
if(istype(L.get_active_hand(), /obj/item/weapon/melee/umbrella))
|
var/obj/item/weapon/melee/umbrella/U = L.get_active_hand()
|
||||||
var/obj/item/weapon/melee/umbrella/U = L.get_active_hand()
|
if(!istype(U) || !U.open)
|
||||||
if(U.open)
|
U = L.get_inactive_hand()
|
||||||
if(show_message)
|
|
||||||
to_chat(L, "<span class='notice'>Rain showers loudly onto your umbrella!</span>")
|
if(istype(U) && U.open)
|
||||||
continue
|
if(show_message)
|
||||||
else if(istype(L.get_inactive_hand(), /obj/item/weapon/melee/umbrella))
|
to_chat(L, "<span class='notice'>Rain showers loudly onto your umbrella!</span>")
|
||||||
var/obj/item/weapon/melee/umbrella/U = L.get_inactive_hand()
|
continue
|
||||||
if(U.open)
|
|
||||||
if(show_message)
|
|
||||||
to_chat(L, "<span class='notice'>Rain showers loudly onto your umbrella!</span>")
|
|
||||||
continue
|
|
||||||
|
|
||||||
|
|
||||||
L.water_act(2)
|
L.water_act(2)
|
||||||
@@ -355,20 +351,18 @@ var/datum/planet/virgo4/planet_virgo4 = null
|
|||||||
|
|
||||||
/datum/weather/virgo4/hail/process_effects()
|
/datum/weather/virgo4/hail/process_effects()
|
||||||
..()
|
..()
|
||||||
for(var/humie in human_mob_list)
|
for(var/mob/living/carbon/H as anything in human_mob_list)
|
||||||
var/mob/living/carbon/human/H = humie
|
|
||||||
if(H.z in holder.our_planet.expected_z_levels)
|
if(H.z in holder.our_planet.expected_z_levels)
|
||||||
var/turf/T = get_turf(H)
|
var/turf/T = get_turf(H)
|
||||||
if(!T.outdoors)
|
if(!T.is_outdoors())
|
||||||
continue // They're indoors, so no need to pelt them with ice.
|
continue // They're indoors, so no need to pelt them with ice.
|
||||||
|
|
||||||
// If they have an open umbrella, it'll guard from hail
|
// If they have an open umbrella, it'll guard from hail
|
||||||
var/obj/item/weapon/melee/umbrella/U
|
var/obj/item/weapon/melee/umbrella/U = H.get_active_hand()
|
||||||
if(istype(H.get_active_hand(), /obj/item/weapon/melee/umbrella))
|
if(!istype(U) || !U.open)
|
||||||
U = H.get_active_hand()
|
|
||||||
else if(istype(H.get_inactive_hand(), /obj/item/weapon/melee/umbrella))
|
|
||||||
U = H.get_inactive_hand()
|
U = H.get_inactive_hand()
|
||||||
if(U && U.open)
|
|
||||||
|
if(istype(U) && U.open)
|
||||||
if(show_message)
|
if(show_message)
|
||||||
to_chat(H, "<span class='notice'>Hail patters onto your umbrella.</span>")
|
to_chat(H, "<span class='notice'>Hail patters onto your umbrella.</span>")
|
||||||
continue
|
continue
|
||||||
@@ -450,11 +444,10 @@ var/datum/planet/virgo4/planet_virgo4 = null
|
|||||||
|
|
||||||
/datum/weather/virgo4/ash_storm/process_effects()
|
/datum/weather/virgo4/ash_storm/process_effects()
|
||||||
..()
|
..()
|
||||||
for(var/thing in living_mob_list)
|
for(var/mob/living/L as anything in living_mob_list)
|
||||||
var/mob/living/L = thing
|
|
||||||
if(L.z in holder.our_planet.expected_z_levels)
|
if(L.z in holder.our_planet.expected_z_levels)
|
||||||
var/turf/T = get_turf(L)
|
var/turf/T = get_turf(L)
|
||||||
if(!T.outdoors)
|
if(!T.is_outdoors())
|
||||||
continue // They're indoors, so no need to burn them with ash.
|
continue // They're indoors, so no need to burn them with ash.
|
||||||
|
|
||||||
L.inflict_heat_damage(rand(1, 3))
|
L.inflict_heat_damage(rand(1, 3))
|
||||||
@@ -487,12 +480,11 @@ var/datum/planet/virgo4/planet_virgo4 = null
|
|||||||
|
|
||||||
/datum/weather/virgo4/fallout/process_effects()
|
/datum/weather/virgo4/fallout/process_effects()
|
||||||
..()
|
..()
|
||||||
for(var/thing in living_mob_list)
|
for(var/mob/living/L as anything in living_mob_list)
|
||||||
var/mob/living/L = thing
|
|
||||||
if(L.z in holder.our_planet.expected_z_levels)
|
if(L.z in holder.our_planet.expected_z_levels)
|
||||||
irradiate_nearby_turf(L)
|
irradiate_nearby_turf(L)
|
||||||
var/turf/T = get_turf(L)
|
var/turf/T = get_turf(L)
|
||||||
if(!T.outdoors)
|
if(!T.is_outdoors())
|
||||||
continue // They're indoors, so no need to irradiate them with fallout.
|
continue // They're indoors, so no need to irradiate them with fallout.
|
||||||
|
|
||||||
L.rad_act(rand(direct_rad_low, direct_rad_high))
|
L.rad_act(rand(direct_rad_low, direct_rad_high))
|
||||||
@@ -506,7 +498,7 @@ var/datum/planet/virgo4/planet_virgo4 = null
|
|||||||
var/turf/T = pick(turfs) // We get one try per tick.
|
var/turf/T = pick(turfs) // We get one try per tick.
|
||||||
if(!istype(T))
|
if(!istype(T))
|
||||||
return
|
return
|
||||||
if(T.outdoors)
|
if(T.is_outdoors())
|
||||||
SSradiation.radiate(T, rand(fallout_rad_low, fallout_rad_high))
|
SSradiation.radiate(T, rand(fallout_rad_low, fallout_rad_high))
|
||||||
|
|
||||||
/turf/unsimulated/wall/planetary/normal/virgo4
|
/turf/unsimulated/wall/planetary/normal/virgo4
|
||||||
@@ -519,4 +511,4 @@ var/datum/planet/virgo4/planet_virgo4 = null
|
|||||||
RCon = TRUE
|
RCon = TRUE
|
||||||
input_level = input_level_max
|
input_level = input_level_max
|
||||||
output_level = output_level_max
|
output_level = output_level_max
|
||||||
input_attempt = TRUE
|
input_attempt = TRUE
|
||||||
@@ -282,16 +282,17 @@
|
|||||||
log_and_message_admins("[ADMIN_LOOKUPFLW(Proj.firer)] triggered a kugelblitz core explosion at [x],[y],[z] via projectile.")
|
log_and_message_admins("[ADMIN_LOOKUPFLW(Proj.firer)] triggered a kugelblitz core explosion at [x],[y],[z] via projectile.")
|
||||||
asplod()
|
asplod()
|
||||||
|
|
||||||
/obj/machinery/power/rtg/d_type_reg
|
/obj/machinery/power/rtg/reg
|
||||||
name = "d-type rotary electric generator"
|
name = "d-type rotary electric generator"
|
||||||
desc = "It looks kind of like a large hamster wheel."
|
desc = "It looks kind of like a large hamster wheel."
|
||||||
icon = 'icons/obj/power_vrx96.dmi'
|
icon = 'icons/obj/power_vrx96.dmi'
|
||||||
icon_state = "reg"
|
icon_state = "reg"
|
||||||
circuit = /obj/item/weapon/circuitboard/machine/reg
|
circuit = /obj/item/weapon/circuitboard/machine/reg_d
|
||||||
irradiate = FALSE
|
irradiate = FALSE
|
||||||
power_gen = 0 //It's big but it gets adjusted based on what you put into it!!!
|
power_gen = 0
|
||||||
var/default_power_gen = 1000000
|
var/default_power_gen = 1000000 //It's big but it gets adjusted based on what you put into it!!!
|
||||||
var/part_mult = 0
|
var/part_mult = 0
|
||||||
|
var/nutrition_drain = 1
|
||||||
pixel_x = -32
|
pixel_x = -32
|
||||||
plane = ABOVE_MOB_PLANE
|
plane = ABOVE_MOB_PLANE
|
||||||
layer = ABOVE_MOB_LAYER
|
layer = ABOVE_MOB_LAYER
|
||||||
@@ -299,36 +300,38 @@
|
|||||||
interact_offline = TRUE
|
interact_offline = TRUE
|
||||||
density = FALSE
|
density = FALSE
|
||||||
|
|
||||||
/obj/machinery/power/rtg/d_type_reg/Initialize()
|
/obj/machinery/power/rtg/reg/Initialize()
|
||||||
. = ..()
|
|
||||||
pixel_x = -32
|
pixel_x = -32
|
||||||
|
. = ..()
|
||||||
|
|
||||||
/obj/machinery/power/rtg/d_type_reg/Destroy()
|
/obj/machinery/power/rtg/reg/Destroy()
|
||||||
. = ..()
|
. = ..()
|
||||||
|
|
||||||
/obj/machinery/power/rtg/d_type_reg/user_buckle_mob(mob/living/M, mob/user, var/forced = FALSE, var/silent = TRUE)
|
/obj/machinery/power/rtg/reg/user_buckle_mob(mob/living/M, mob/user, var/forced = FALSE, var/silent = TRUE)
|
||||||
. = ..()
|
. = ..()
|
||||||
M.pixel_y = 8
|
M.pixel_y = 8
|
||||||
M.visible_message("<span class='notice'>\The [M], hops up onto \the [src] and begins running!</span>")
|
M.visible_message("<span class='notice'>\The [M], hops up onto \the [src] and begins running!</span>")
|
||||||
|
|
||||||
/obj/machinery/power/rtg/d_type_reg/unbuckle_mob(mob/living/buckled_mob, force = FALSE)
|
/obj/machinery/power/rtg/reg/unbuckle_mob(mob/living/buckled_mob, force = FALSE)
|
||||||
. = ..()
|
. = ..()
|
||||||
buckled_mob.pixel_y = initial(buckled_mob.pixel_y)
|
buckled_mob.pixel_y = initial(buckled_mob.pixel_y)
|
||||||
|
|
||||||
/obj/machinery/power/rtg/d_type_reg/RefreshParts()
|
/obj/machinery/power/rtg/reg/RefreshParts()
|
||||||
var/n = 0
|
var/n = 0
|
||||||
for(var/obj/item/weapon/stock_parts/SP in component_parts)
|
for(var/obj/item/weapon/stock_parts/SP in component_parts)
|
||||||
n += SP.rating
|
n += SP.rating
|
||||||
part_mult = n
|
part_mult = n
|
||||||
|
|
||||||
/obj/machinery/power/rtg/d_type_reg/attackby(obj/item/I, mob/user, params)
|
/obj/machinery/power/rtg/reg/attackby(obj/item/I, mob/user, params)
|
||||||
|
pixel_x = -32
|
||||||
if(default_deconstruction_screwdriver(user, I))
|
if(default_deconstruction_screwdriver(user, I))
|
||||||
return
|
return
|
||||||
else if(default_deconstruction_crowbar(user, I))
|
else if(default_deconstruction_crowbar(user, I))
|
||||||
return
|
return
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/obj/machinery/power/rtg/d_type_reg/update_icon()
|
/obj/machinery/power/rtg/reg/update_icon()
|
||||||
|
pixel_x = -32
|
||||||
if(panel_open)
|
if(panel_open)
|
||||||
icon_state = "reg-o"
|
icon_state = "reg-o"
|
||||||
else if(buckled_mobs && buckled_mobs.len > 0)
|
else if(buckled_mobs && buckled_mobs.len > 0)
|
||||||
@@ -336,7 +339,7 @@
|
|||||||
else
|
else
|
||||||
icon_state = "reg"
|
icon_state = "reg"
|
||||||
|
|
||||||
/obj/machinery/power/rtg/d_type_reg/process()
|
/obj/machinery/power/rtg/reg/process()
|
||||||
..()
|
..()
|
||||||
if(buckled_mobs && buckled_mobs.len > 0)
|
if(buckled_mobs && buckled_mobs.len > 0)
|
||||||
for(var/mob/living/L in buckled_mobs)
|
for(var/mob/living/L in buckled_mobs)
|
||||||
@@ -345,7 +348,7 @@
|
|||||||
power_gen = 0
|
power_gen = 0
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
/obj/machinery/power/rtg/d_type_reg/proc/runner_process(var/mob/living/runner)
|
/obj/machinery/power/rtg/reg/proc/runner_process(var/mob/living/runner)
|
||||||
if(runner.stat != CONSCIOUS)
|
if(runner.stat != CONSCIOUS)
|
||||||
unbuckle_mob(runner)
|
unbuckle_mob(runner)
|
||||||
runner.visible_message("<span class='warning'>\The [runner], topples off of \the [src]!</span>")
|
runner.visible_message("<span class='warning'>\The [runner], topples off of \the [src]!</span>")
|
||||||
@@ -379,16 +382,31 @@
|
|||||||
if(part_mult > 1)
|
if(part_mult > 1)
|
||||||
cool_rotations += (cool_rotations * (part_mult - 1)) / 4
|
cool_rotations += (cool_rotations * (part_mult - 1)) / 4
|
||||||
power_gen = cool_rotations
|
power_gen = cool_rotations
|
||||||
runner.nutrition --
|
runner.nutrition -= nutrition_drain
|
||||||
|
|
||||||
/obj/machinery/power/rtg/d_type_reg/emp_act(severity)
|
/obj/machinery/power/rtg/reg/emp_act(severity)
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/item/weapon/circuitboard/machine/reg
|
/obj/item/weapon/circuitboard/machine/reg_d
|
||||||
name = T_BOARD("REG")
|
name = T_BOARD("D-Type-REG")
|
||||||
build_path = /obj/machinery/power/rtg/d_type_reg
|
build_path = /obj/machinery/power/rtg/reg
|
||||||
board_type = new /datum/frame/frame_types/machine
|
board_type = new /datum/frame/frame_types/machine
|
||||||
origin_tech = list(TECH_DATA = 2, TECH_POWER = 4, TECH_ENGINEERING = 4)
|
origin_tech = list(TECH_DATA = 2, TECH_POWER = 4, TECH_ENGINEERING = 4)
|
||||||
req_components = list(
|
req_components = list(
|
||||||
/obj/item/stack/cable_coil = 5,
|
/obj/item/stack/cable_coil = 5,
|
||||||
/obj/item/weapon/stock_parts/capacitor = 1)
|
/obj/item/weapon/stock_parts/capacitor = 1)
|
||||||
|
|
||||||
|
/obj/item/weapon/circuitboard/machine/reg_c
|
||||||
|
name = T_BOARD("C-Type-REG")
|
||||||
|
build_path = /obj/machinery/power/rtg/reg/c
|
||||||
|
board_type = new /datum/frame/frame_types/machine
|
||||||
|
origin_tech = list(TECH_DATA = 2, TECH_POWER = 4, TECH_ENGINEERING = 4)
|
||||||
|
req_components = list(
|
||||||
|
/obj/item/stack/cable_coil = 5,
|
||||||
|
/obj/item/weapon/stock_parts/capacitor = 1)
|
||||||
|
|
||||||
|
/obj/machinery/power/rtg/reg/c
|
||||||
|
name = "c-type rotary electric generator"
|
||||||
|
circuit = /obj/item/weapon/circuitboard/machine/reg_c
|
||||||
|
default_power_gen = 500000 //Half power
|
||||||
|
nutrition_drain = 0.5 //for half cost - EQUIVALENT EXCHANGE >:O
|
||||||
@@ -6,8 +6,8 @@
|
|||||||
name = "hypospray"
|
name = "hypospray"
|
||||||
desc = "The DeForest Medical Corporation hypospray is a sterile, air-needle autoinjector for rapid administration of drugs to patients."
|
desc = "The DeForest Medical Corporation hypospray is a sterile, air-needle autoinjector for rapid administration of drugs to patients."
|
||||||
icon = 'icons/obj/syringe.dmi'
|
icon = 'icons/obj/syringe.dmi'
|
||||||
item_state = "hypo"
|
|
||||||
icon_state = "hypo"
|
icon_state = "hypo"
|
||||||
|
item_state = "hypo"
|
||||||
amount_per_transfer_from_this = 5
|
amount_per_transfer_from_this = 5
|
||||||
unacidable = TRUE
|
unacidable = TRUE
|
||||||
volume = 30
|
volume = 30
|
||||||
@@ -88,13 +88,15 @@
|
|||||||
|
|
||||||
//A vial-loaded hypospray. Cartridge-based!
|
//A vial-loaded hypospray. Cartridge-based!
|
||||||
/obj/item/weapon/reagent_containers/hypospray/vial
|
/obj/item/weapon/reagent_containers/hypospray/vial
|
||||||
name = "hypospray mkII"
|
name = "advanced hypospray"
|
||||||
|
icon_state = "advhypo"
|
||||||
desc = "A new development from DeForest Medical, this new hypospray takes 30-unit vials as the drug supply for easy swapping."
|
desc = "A new development from DeForest Medical, this new hypospray takes 30-unit vials as the drug supply for easy swapping."
|
||||||
var/obj/item/weapon/reagent_containers/glass/beaker/vial/loaded_vial //Wow, what a name.
|
var/obj/item/weapon/reagent_containers/glass/beaker/vial/loaded_vial //Wow, what a name.
|
||||||
volume = 0
|
volume = 0
|
||||||
|
|
||||||
/obj/item/weapon/reagent_containers/hypospray/vial/Initialize()
|
/obj/item/weapon/reagent_containers/hypospray/vial/Initialize()
|
||||||
. = ..()
|
. = ..()
|
||||||
|
icon_state = "[initial(icon_state)]"
|
||||||
loaded_vial = new /obj/item/weapon/reagent_containers/glass/beaker/vial(src) //Comes with an empty vial
|
loaded_vial = new /obj/item/weapon/reagent_containers/glass/beaker/vial(src) //Comes with an empty vial
|
||||||
volume = loaded_vial.volume
|
volume = loaded_vial.volume
|
||||||
reagents.maximum_volume = loaded_vial.reagents.maximum_volume
|
reagents.maximum_volume = loaded_vial.reagents.maximum_volume
|
||||||
@@ -115,6 +117,13 @@
|
|||||||
else
|
else
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
|
/obj/item/weapon/reagent_containers/hypospray/vial/update_icon()
|
||||||
|
..()
|
||||||
|
if(loaded_vial)
|
||||||
|
icon_state = "[initial(icon_state)]"
|
||||||
|
else
|
||||||
|
icon_state = "[initial(icon_state)]_empty"
|
||||||
|
|
||||||
/obj/item/weapon/reagent_containers/hypospray/vial/attackby(obj/item/weapon/W, mob/user as mob)
|
/obj/item/weapon/reagent_containers/hypospray/vial/attackby(obj/item/weapon/W, mob/user as mob)
|
||||||
if(istype(W, /obj/item/weapon/reagent_containers/glass/beaker/vial))
|
if(istype(W, /obj/item/weapon/reagent_containers/glass/beaker/vial))
|
||||||
if(!loaded_vial)
|
if(!loaded_vial)
|
||||||
|
|||||||
@@ -5,7 +5,8 @@
|
|||||||
anchored = TRUE
|
anchored = TRUE
|
||||||
|
|
||||||
var/working = FALSE
|
var/working = FALSE
|
||||||
|
var/negative_dir = null //VOREStation Addition
|
||||||
|
|
||||||
/obj/machinery/recycling/process()
|
/obj/machinery/recycling/process()
|
||||||
return PROCESS_KILL // these are all stateful
|
return PROCESS_KILL // these are all stateful
|
||||||
|
|
||||||
@@ -85,7 +86,12 @@
|
|||||||
/obj/machinery/recycling/crusher/can_accept_item(obj/item/O)
|
/obj/machinery/recycling/crusher/can_accept_item(obj/item/O)
|
||||||
if(LAZYLEN(O.matter))
|
if(LAZYLEN(O.matter))
|
||||||
return ..()
|
return ..()
|
||||||
return FALSE
|
//VOREStation Addition Start - Let's the machine decide to put things it can't accept somewhere else.
|
||||||
|
else if(negative_dir && isitem(O) && !ishuman(O.loc))
|
||||||
|
O.forceMove(get_step(src, negative_dir))
|
||||||
|
else
|
||||||
|
return FALSE
|
||||||
|
//VOREStation Addition End
|
||||||
|
|
||||||
/obj/machinery/recycling/crusher/take_item(obj/item/O)
|
/obj/machinery/recycling/crusher/take_item(obj/item/O)
|
||||||
. = ..()
|
. = ..()
|
||||||
|
|||||||
@@ -6,38 +6,45 @@
|
|||||||
|
|
||||||
/datum/design/item/weapon/mining/drill
|
/datum/design/item/weapon/mining/drill
|
||||||
id = "drill"
|
id = "drill"
|
||||||
req_tech = list(TECH_MATERIAL = 2, TECH_POWER = 3, TECH_ENGINEERING = 2)
|
req_tech = list(TECH_MATERIAL = 1, TECH_POWER = 2, TECH_ENGINEERING = 1)
|
||||||
materials = list(MAT_STEEL = 6000, MAT_GLASS = 1000) //expensive, but no need for miners.
|
materials = list(MAT_STEEL = 4000, MAT_GLASS = 500) //expensive, but no need for miners.
|
||||||
build_path = /obj/item/weapon/pickaxe/drill
|
build_path = /obj/item/weapon/pickaxe/drill
|
||||||
sort_string = "FAAAA"
|
sort_string = "FAAAA"
|
||||||
|
|
||||||
|
/datum/design/item/weapon/mining/advdrill
|
||||||
|
id = "advanced_drill"
|
||||||
|
req_tech = list(TECH_MATERIAL = 2, TECH_POWER = 3, TECH_ENGINEERING = 2)
|
||||||
|
materials = list(MAT_STEEL = 6000, MAT_GLASS = 1000) //expensive, but no need for miners.
|
||||||
|
build_path = /obj/item/weapon/pickaxe/advdrill
|
||||||
|
sort_string = "FAAAB"
|
||||||
|
|
||||||
/datum/design/item/weapon/mining/jackhammer
|
/datum/design/item/weapon/mining/jackhammer
|
||||||
id = "jackhammer"
|
id = "jackhammer"
|
||||||
req_tech = list(TECH_MATERIAL = 3, TECH_POWER = 2, TECH_ENGINEERING = 2)
|
req_tech = list(TECH_MATERIAL = 3, TECH_POWER = 2, TECH_ENGINEERING = 2)
|
||||||
materials = list(MAT_STEEL = 2000, MAT_GLASS = 500, MAT_SILVER = 500)
|
materials = list(MAT_STEEL = 2000, MAT_GLASS = 500, MAT_SILVER = 500)
|
||||||
build_path = /obj/item/weapon/pickaxe/jackhammer
|
build_path = /obj/item/weapon/pickaxe/jackhammer
|
||||||
sort_string = "FAAAB"
|
sort_string = "FAAAC"
|
||||||
|
|
||||||
/datum/design/item/weapon/mining/plasmacutter
|
/datum/design/item/weapon/mining/plasmacutter
|
||||||
id = "plasmacutter"
|
id = "plasmacutter"
|
||||||
req_tech = list(TECH_MATERIAL = 4, TECH_PHORON = 3, TECH_ENGINEERING = 3)
|
req_tech = list(TECH_MATERIAL = 4, TECH_PHORON = 3, TECH_ENGINEERING = 3)
|
||||||
materials = list(MAT_STEEL = 1500, MAT_GLASS = 500, MAT_GOLD = 500, MAT_PHORON = 500)
|
materials = list(MAT_STEEL = 1500, MAT_GLASS = 500, MAT_GOLD = 500, MAT_PHORON = 500)
|
||||||
build_path = /obj/item/weapon/pickaxe/plasmacutter
|
build_path = /obj/item/weapon/pickaxe/plasmacutter
|
||||||
sort_string = "FAAAC"
|
sort_string = "FAAAD"
|
||||||
|
|
||||||
/datum/design/item/weapon/mining/pick_diamond
|
/datum/design/item/weapon/mining/pick_diamond
|
||||||
id = "pick_diamond"
|
id = "pick_diamond"
|
||||||
req_tech = list(TECH_MATERIAL = 6)
|
req_tech = list(TECH_MATERIAL = 6)
|
||||||
materials = list(MAT_DIAMOND = 3000)
|
materials = list(MAT_DIAMOND = 3000)
|
||||||
build_path = /obj/item/weapon/pickaxe/diamond
|
build_path = /obj/item/weapon/pickaxe/diamond
|
||||||
sort_string = "FAAAD"
|
sort_string = "FAAAE"
|
||||||
|
|
||||||
/datum/design/item/weapon/mining/drill_diamond
|
/datum/design/item/weapon/mining/drill_diamond
|
||||||
id = "drill_diamond"
|
id = "drill_diamond"
|
||||||
req_tech = list(TECH_MATERIAL = 6, TECH_POWER = 4, TECH_ENGINEERING = 4)
|
req_tech = list(TECH_MATERIAL = 6, TECH_POWER = 4, TECH_ENGINEERING = 4)
|
||||||
materials = list(MAT_STEEL = 3000, MAT_GLASS = 1000, MAT_DIAMOND = 2000)
|
materials = list(MAT_STEEL = 3000, MAT_GLASS = 1000, MAT_DIAMOND = 2000)
|
||||||
build_path = /obj/item/weapon/pickaxe/diamonddrill
|
build_path = /obj/item/weapon/pickaxe/diamonddrill
|
||||||
sort_string = "FAAAE"
|
sort_string = "FAAAF"
|
||||||
|
|
||||||
// Mining other equipment
|
// Mining other equipment
|
||||||
|
|
||||||
|
|||||||
@@ -80,4 +80,13 @@
|
|||||||
req_tech = list(TECH_ILLEGAL = 2, TECH_MATERIAL = 2)
|
req_tech = list(TECH_ILLEGAL = 2, TECH_MATERIAL = 2)
|
||||||
materials = list(MAT_STEEL = 4000, MAT_GLASS = 4000)
|
materials = list(MAT_STEEL = 4000, MAT_GLASS = 4000)
|
||||||
build_path = /obj/item/device/binoculars/scope
|
build_path = /obj/item/device/binoculars/scope
|
||||||
sort_string = "TBAAD"
|
sort_string = "TBAAD"
|
||||||
|
|
||||||
|
/datum/design/item/general/advmop
|
||||||
|
name = "advanced mop"
|
||||||
|
desc = "An advanced mop with pressured water jets that break away the toughest stains."
|
||||||
|
id = "advmop"
|
||||||
|
req_tech = list(TECH_MATERIAL = 3, TECH_ENGINEERING = 5, TECH_BIO = 1)
|
||||||
|
materials = list(MAT_STEEL = 5000, MAT_GLASS = 2000, MAT_GOLD = 1000)
|
||||||
|
build_path = /obj/item/weapon/mop/advanced
|
||||||
|
sort_string = "TBAAE"
|
||||||
@@ -1367,6 +1367,34 @@ End CHOMP Removal*/
|
|||||||
w_class = ITEMSIZE_TINY
|
w_class = ITEMSIZE_TINY
|
||||||
starts_with = list(/obj/item/clothing/mask/smokable/cigarette = 7)
|
starts_with = list(/obj/item/clothing/mask/smokable/cigarette = 7)
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/fancy/fluff/charlotte/New()
|
||||||
|
if(!open_state)
|
||||||
|
open_state = "[initial(icon_state)]0"
|
||||||
|
if(!closed_state)
|
||||||
|
closed_state = "[initial(icon_state)]"
|
||||||
|
..()
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/fancy/fluff/charlotte/update_icon()
|
||||||
|
cut_overlays()
|
||||||
|
if(open)
|
||||||
|
icon_state = open_state
|
||||||
|
if(contents.len >= 1)
|
||||||
|
add_overlay("charlottebox[contents.len]")
|
||||||
|
else
|
||||||
|
icon_state = closed_state
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/fancy/fluff/charlotte/open(mob/user as mob)
|
||||||
|
if(open)
|
||||||
|
return
|
||||||
|
open = TRUE
|
||||||
|
update_icon()
|
||||||
|
..()
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/fancy/fluff/charlotte/close(mob/user as mob)
|
||||||
|
open = FALSE
|
||||||
|
update_icon()
|
||||||
|
..()
|
||||||
|
|
||||||
//Ashling - Antoinette deKaultieste
|
//Ashling - Antoinette deKaultieste
|
||||||
/obj/item/weapon/material/knife/machete/hatchet/unathiknife/fluff/antoinette
|
/obj/item/weapon/material/knife/machete/hatchet/unathiknife/fluff/antoinette
|
||||||
name = "sawtooth ritual knife"
|
name = "sawtooth ritual knife"
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 73 KiB |
|
Before Width: | Height: | Size: 104 KiB After Width: | Height: | Size: 105 KiB |
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 124 KiB After Width: | Height: | Size: 126 KiB |
|
Before Width: | Height: | Size: 613 B After Width: | Height: | Size: 814 B |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.6 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 124 KiB After Width: | Height: | Size: 124 KiB |
|
Before Width: | Height: | Size: 250 KiB After Width: | Height: | Size: 253 KiB |
|
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 66 KiB |
|
Before Width: | Height: | Size: 144 KiB After Width: | Height: | Size: 145 KiB |
|
Before Width: | Height: | Size: 500 KiB After Width: | Height: | Size: 504 KiB |
|
Before Width: | Height: | Size: 1.9 MiB After Width: | Height: | Size: 2.1 MiB |
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 98 KiB |
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 78 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 30 KiB |