Merge remote-tracking branch 'VOREStation/master' into upstream-merge-7791

This commit is contained in:
Unknown
2021-02-27 13:23:23 -05:00
58 changed files with 377796 additions and 64780 deletions
+7 -7
View File
@@ -94,13 +94,13 @@ var/global/list/string_slot_flags = list(
"holster" = SLOT_HOLSTER
)
/proc/get_mannequin(var/ckey)
if(!mannequins_)
mannequins_ = new()
. = mannequins_[ckey]
if(!.)
. = new/mob/living/carbon/human/dummy/mannequin()
mannequins_[ckey] = .
GLOBAL_LIST_EMPTY(mannequins)
/proc/get_mannequin(var/ckey = "NULL")
var/mob/living/carbon/human/dummy/mannequin/M = GLOB.mannequins[ckey]
if(!istype(M))
GLOB.mannequins[ckey] = new /mob/living/carbon/human/dummy/mannequin(null)
M = GLOB.mannequins[ckey]
return M
//////////////////////////
/////Initial Building/////
+18
View File
@@ -537,4 +537,22 @@ var/global/list/remainless_species = list(SPECIES_PROMETHEAN,
for(var/species_name in whitelisted_icons)
custom_species_bases += species_name
// Weaver recipe stuff
paths = typesof(/datum/weaver_recipe/structure) - /datum/weaver_recipe/structure
for(var/path in paths)
var/datum/weaver_recipe/instance = new path()
if(!instance.title)
continue //A prototype or something
weavable_structures[instance.title] = instance
paths = typesof(/datum/weaver_recipe/item) - /datum/weaver_recipe/item
for(var/path in paths)
var/datum/weaver_recipe/instance = new path()
if(!instance.title)
continue //A prototype or something
weavable_items[instance.title] = instance
return 1 // Hooks must return 1
var/global/list/weavable_structures = list()
var/global/list/weavable_items = list()
-5
View File
@@ -183,11 +183,6 @@ var/global/datum/controller/subsystem/ticker/ticker
if(adm["total"] == 0)
send2adminirc("A round has started with no admins online.")
/* supply_controller.process() //Start the supply shuttle regenerating points -- TLE // handled in scheduler
master_controller.process() //Start master_controller.process()
lighting_controller.process() //Start processing DynamicAreaLighting updates
*/
current_state = GAME_STATE_PLAYING
Master.SetRunLevel(RUNLEVEL_GAME)
+11 -1
View File
@@ -186,4 +186,14 @@
/datum/category_item/underwear/undershirt/pinkblack_tshirt
name = "Pink and Black T-Shirt"
icon_state = "pinkblack_tshirt"
icon_state = "pinkblack_tshirt"
/datum/category_item/underwear/undershirt/turtle
name = "Turtleneck"
icon_state = "turtleneck"
has_color = TRUE
/datum/category_item/underwear/undershirt/sleevelessturtle
name = "Turtleneck, Sleeveless"
icon_state = "sleevelessturtle"
has_color = TRUE
+1 -1
View File
@@ -134,7 +134,7 @@
for(var/i in loc)
var/atom/movable/thing = i
// We don't call parent so we are calling this for byond
thing.Crossed(src)
thing.Crossed(src, oldloc)
// We're a multi-tile object (multiple locs)
else if(. && newloc)
+22 -22
View File
@@ -75,61 +75,61 @@
<center><h1>Food for Dummies 2</h1></center>
<h5>Penned by Ali Big</h5>
<p><b>Hello Newbie</b>, congratz on deciding to make food! This guide assumes you know absolutely nothing, so fret not, the information here will help you prepare food for your hungry crewmates!</p>
<h3>Workspace prep:</h3>
<h3>Workspace prep:</h3>
This step is simple: merely go to the Grill, Oven, and Fryer and turn everything on so you do not need to wait for them to warm up later; they wont start a fire unless food is left in them unchecked. It is also highly suggested to lay out at least a few Measuring Cups on the counters for ease of use.
<h3>Basic ingredient prep:</h3>
<h3>Basic ingredient prep:</h3>
In the lockers and fridges, you have all your needed supplies for this guide, so look through them and familiarize yourself! This guide will only use ingredients you already have access to, so don't worry about missing items!
<h2>Part 1: How to Create Various Essential Ingredients with What You Have</h2>
<h3>Dough Creation:</h3>
<h3>Dough Creation:</h3>
The basis for a large quantity of meals. Simply take an Egg, crack it into a Beaker or Measuring Cup, and then add 10 units of Flour to create Dough.
<h3>Dough Creation part 2:</h3>
<h3>Dough Creation part 2:</h3>
With Dough, you can make a wide variety of base ingredients. Flattening it with a Rolling Pin makes Flat Dough. Flat Dough can be cooked in a Microwave for Flatbread, or if one adds Water and Flour in with the Flat Dough in the Microwave you get a Tortilla. Water can be obtained by filling a Cup at the Sink or Soda Machine.
<h3>Dough Creation Part 3:</h3>
<h3>Dough Creation Part 3:</h3>
Alternatively, Flat Dough can be cut with a Knife to make Dough Slices, and those can be cut to make Spaghetti.
<h3>Cheese Creation:</h3>
<h3>Cheese Creation:</h3>
A common topping. Take a bottle of Universal Enzyme, put it in a Beaker or Measuring Cup, and add Milk until a Cheese Wheel pops out. Then cut the Cheese Wheel with a Knife to make Cheese Wedges, all recipes use Wedges not the full Wheel.
<h3>Tofu Creation:</h3>
Same as cheese, but with Soymilk!
<h3>Meatball Creation:</h3>
<h3>Meatball Creation:</h3>
Mix Animal protein and Flour, to create Animal Protein grind down some Meat in the grinder, then remove the beaker and add Flour.
<h3>Meat Uses:</h3>
<h3>Meat Uses:</h3>
Full pieces of Meat can be cut for Raw Cutlets, which can be cut once more to make Raw Bacon. Though be sure not to cut all of your meat, plenty of recipes need a full uncut piece!
<h2>Part 2: Putting It All Together</h2>
<p>Now that you know the fundamentals of how to make the base ingredients, here are some fairly easy recipes to put them together into something enjoyable for the crew.</p>
<h4>Warning: recipes are upscale able, so you can add multiple of the same ingredients in the same ratio to cook lots of food at once!</h4>
<h4>Warning: recipes are upscale able, so you can add multiple of the same ingredients in the same ratio to cook lots of food at once!</h4>
<h4>Warning: do not try and cook multiple recipes at once as it is very likely it will default to a different recipe or will just cook the one and just "grill, bake, etc." the rest of the ingredients.</h4>
<h2>Burgers:</h2>
<h2>Burgers:</h2>
<b>The cornerstone of basic food:</b> to prepare these, microwave a piece of Dough to get a bun and grab a piece of Meat. Open the Grill, remove the Rack, and add both Bun and Meat to the Rack. Then, place the Rack back into the Grill to cook and remove it once finished. If you feel fancy, you can add cheese afterwards for a cheeseburger.
<h2>Meat Pie:</h2>
<h2>Meat Pie:</h2>
Flat Dough and Meat in an Oven Pan, same way you use the Grill; take the Pan out, put the ingredients in, and place it back to cook. Simple, but very good looking and tasty!
<h2>Burritos:</h2>
<h2>Burritos:</h2>
Burritos: A personal favorite due to flexibility of options: Use a Tortilla as a base for all of these. For a Chili one, add 2 Meatballs and 1 Space Spice (found near the Flour) to the Microwave; very simple and filling! Add a Cheese Wedge instead of the spice to make a queso burrito. For a Breakfast Wrap, add a whole Egg, Cooked Bacon (Raw Bacon cooked in the Microwave), and Cheese in with the Tortilla. For Vegan Burritos, just cook a Tortilla and Tofu together in the Microwave.
<h2>Tacos:</h2>
<h2>Tacos:</h2>
Use a tortilla then 1 cooked Cutlet, and a Cheese Wedge. Very easy to mass produce, great in a pinch!
<h2>Cheesy Nachos:</h2>
<h2>Cheesy Nachos:</h2>
Tortilla, Cheese and 1 unit of Salt in the microwave, the perfect Finger Food!
<h2>Spaghetti:</h2>
<h2>Spaghetti:</h2>
Without Tomatos from Botany it's not going to be the flashiest, but one can make Boiled Spaghetti with Spaghetti and Water in the Microwave. Kitsune Udon can be made with Spaghetti, Egg Yolk (crack egg in beaker then add to microwave), and Tofu. Spaghetti and Meatballs can be made by doing the Boiled Spaghetti Recipe and adding 2 Meatballs; adding 4 Meatballs into the initial mix makes Spesslaw. Lastly, Spaghetti, Milk, and Cheese in the Oven makes Macaroni and Cheese.
<h2>Steak:</h2>
For the pure meat eaters, just add Meat, 1 Salt, and 1 Pepper into the grill for them, and try not to cry as they use up all your Meat quickly. (There's a second Meat Locker in the freezer room if you do run out!)
<h2>Donk Pockets:</h2>
<h2>Donk Pockets:</h2>
Dough and Meatball in the Microwave, though we already have plenty lying around the station.
<h2>Eggs:</h2>
<h2>Eggs:</h2>
Fried Egg, 1 Egg 1 Salt, 1 Pepper in a Microwave. Bacon and Eggs if you combine Cooked Bacon and Fried Egg in the Microwave. Great way to start the shift!
<h2>Part 3: Final Notes</h2>
<p>These recipes only scratch the surface, but it's all things that can be done with what is pre-provided. If you have a partner in Botany, feel free to request more meat or any other supplies to try new recipes!</p>
<p>These recipes only scratch the surface, but it's all things that can be done with what is pre-provided. If you have a partner in Botany, feel free to request more meat or any other supplies to try new recipes!</p>
<p>The Fryer, CondiMaster3000, and other nearby devices have been deliberately left out of this guide; as you get more advanced feel free to experiment with them, though be careful with the Fryer especially as it's the #1 source of fires for learning chefs, myself included. The one other machine that is worth understanding is the <b>Gibber</b> in the freezer room. If you are delivered fish or such they can be gibbed for extra Meat, though you may need to butcher the parts with a Knife afterwards to get usable Meat! Though if the meat is purple or comes from Koi or Spacecarp <b>do not directly serve it to crew!</b> It contains toxins that are better taken care of by other departments. </p>
<p>Some wonderful websites share recipes and tips for learning chefs on the Extranet! Look on your PDA or preferred device at https://wiki.vore-station.net/Guide_to_Food_and_Drink and https://vore-station.net/infodump/recipes_food.html for further tips, though do note the latter is more accurate in regard to recipes. Happy cooking!</p>
<h4>Pro Tips:</h4>
<h4>((The Food Bags in the Chef's Closet are great for moving a lot of food at once!))</h4>
<h4>((The Food Bags in the Chef's Closet are great for moving a lot of food at once!))</h4>
<h4>((Stay out of the Freezer if you're Cold Blooded!))</h4>
<h4>((The websites linked above are also on our stations wiki. Which is always in need of helping heads to fix it up. The recipes listed on the web link may not be fully accurate so please don't be afraid to pop into the discord wiki channel and lend a hand!))</h4>
</body>
</html>
"}
//accurate as of 2/17/21
/obj/item/weapon/book/manual//bar_guide
//accurate as of 2/23/21
/obj/item/weapon/book/manual/bar_guide
name = "How to Alcohol (And other Drinks)"
desc = "A helpful guide to the world of barkeeping."
icon_state = "bar-guide"
@@ -213,7 +213,7 @@
1 part Beer, 2 parts Ale
<h3>Whiskey Cola:</h3>
2 parts Whiskey, 1 part Space Cola
<h3>Binman Bliss:
<h3>Binman Bliss:</h3>
1 part Sake, 1 part Tequila
<h1>High Alcohol</h1>
+2 -2
View File
@@ -148,7 +148,7 @@ var/list/flooring_types
icon_base = "grass_sif"
build_type = /obj/item/stack/tile/grass/sif
has_base_range = 1
/decl/flooring/grass/sif/forest
name = "thick growth"
desc = "A natural moss that has adapted to the sheer cold climate."
@@ -379,7 +379,7 @@ var/list/flooring_types
/decl/flooring/linoleum
name = "linoleum"
desc = "It's like the 2390's all over again."
desc = "It's like the 2090's all over again." // VOREStation Lore Edit - we're not past 2390's yet
icon = 'icons/turf/flooring/linoleum.dmi'
icon_base = "lino"
can_paint = 1
+1 -6
View File
@@ -57,12 +57,8 @@
// Create robolimbs for chargen.
populate_robolimb_list()
//Must be done now, otherwise ZAS zones and lighting overlays need to be recreated.
//createRandomZlevel() //VOREStation Removal: Deprecated
master_controller = new /datum/controller/game_controller()
Master.Initialize(10, FALSE, TRUE)
Master.Initialize(10, FALSE)
spawn(1)
master_controller.setup()
@@ -408,7 +404,6 @@ var/world_topic_spam_protect_time = world.timeofday
to_world("<span class='boldannounce'>Rebooting world immediately due to host request</span>")
else
Master.Shutdown() //run SS shutdowns
//processScheduler.stop() //VOREStation Removal
for(var/client/C in GLOB.clients)
if(config.server) //if you set a server location in config.txt, it sends you there instead of trying to reconnect to the same world address. -- NeoFite
C << link("byond://[config.server]")
@@ -45,7 +45,6 @@
character.weight_gain = pref.weight_gain
character.weight_loss = pref.weight_loss
character.fuzzy = pref.fuzzy
character.appearance_flags -= pref.fuzzy*PIXEL_SCALE
character.resize(pref.size_multiplier, animate = FALSE)
/datum/category_item/player_setup_item/vore/size/content(var/mob/user)
@@ -70,7 +69,7 @@
else if(href_list["toggle_fuzzy"])
pref.fuzzy = pref.fuzzy ? 0 : 1;
return TOPIC_REFRESH
return TOPIC_REFRESH_UPDATE_PREVIEW
else if(href_list["weight"])
var/new_weight = input(user, "Choose your character's relative body weight.\n\
@@ -286,6 +286,9 @@
pref.gross_meatbag = 0 //Just to be sure
return TOPIC_REFRESH
if(pref.species in instance.banned_species)
alert("The trait you've selected cannot be taken by the species you've chosen!","Error")
return TOPIC_REFRESH
if(trait_choice in pref.pos_traits + pref.neu_traits + pref.neg_traits)
conflict = instance.name
@@ -130,14 +130,40 @@
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 100, rad = 100)
siemens_coefficient = 0.5
icon = 'icons/obj/clothing/hats_vr.dmi'
enables_planes = list(VIS_CH_ID,VIS_CH_HEALTH_VR,VIS_AUGMENTED)
var/away_planes = null
plane_slots = list(slot_head)
var/hud_active = 1
var/activation_sound = 'sound/items/nif_click.ogg'
/obj/item/clothing/head/helmet/space/void/responseteam/verb/toggle()
set category = "Object"
set name = "Toggle Mark 7 Suit HUD"
set src in usr
if(usr.canmove && !usr.stat && !usr.restrained())
if(src.hud_active)
away_planes = enables_planes
enables_planes = null
to_chat(usr, "You disable the inbuilt heads-up display.")
hud_active = 0
else
enables_planes = away_planes
away_planes = null
to_chat(usr, "You enable the inbuilt heads-up display.")
hud_active = 1
usr << activation_sound
usr.recalculate_vis()
/obj/item/clothing/head/helmet/space/void/responseteam/command
name = "Mark VII-C Emergency Response Team Commander Helmet"
enables_planes = list(VIS_CH_ID,VIS_CH_HEALTH_VR,VIS_CH_STATUS_R,VIS_CH_BACKUP,VIS_CH_WANTED,VIS_AUGMENTED)
/obj/item/clothing/head/helmet/space/void/responseteam/medical
name = "Mark VII-M Emergency Medical Response Helmet"
icon_state = "erthelmet_m"
item_state = "erthelmet_m"
enables_planes = list(VIS_CH_ID,VIS_CH_HEALTH_VR,VIS_CH_STATUS_R,VIS_CH_BACKUP,VIS_AUGMENTED)
/obj/item/clothing/head/helmet/space/void/responseteam/engineer
name = "Mark VII-E Emergency Engineering Response Helmet"
@@ -148,6 +174,7 @@
name = "Mark VII-S Emergency Security Response Helmet"
icon_state = "erthelmet_s"
item_state = "erthelmet_s"
enables_planes = list(VIS_CH_ID,VIS_CH_HEALTH_VR,VIS_CH_WANTED,VIS_AUGMENTED)
/obj/item/clothing/head/helmet/space/void/responseteam/janitor
name = "Mark VII-J Emergency Cleanup Response Helmet"
@@ -44,6 +44,7 @@
/obj/item/seeds/watermelonseed = 3,
/obj/item/seeds/wheatseed = 3,
/obj/item/seeds/whitebeetseed = 3,
/obj/item/seeds/wurmwoad = 3,
/obj/item/seeds/shrinkshroom = 3,
/obj/item/seeds/megashroom = 3)
@@ -101,5 +102,6 @@
/obj/item/seeds/watermelonseed = 3,
/obj/item/seeds/wheatseed = 3,
/obj/item/seeds/whitebeetseed = 3,
/obj/item/seeds/wurmwoad = 3,
/obj/item/seeds/shrinkshroom = 3,
/obj/item/seeds/megashroom = 3)
@@ -913,3 +913,8 @@ mob/observer/dead/MayRespawn(var/feedback = 0)
to_chat(src, "<span class='ghostalert'><a href=?src=[REF(src)];reenter=1>(Click to re-enter)</a></span>")
if(sound)
SEND_SOUND(src, sound(sound))
/mob/observer/dead/verb/respawn()
set name = "Respawn"
set category = "Ghost"
src.abandon_mob()
+4 -3
View File
@@ -69,7 +69,8 @@
//Organs and blood
handle_organs()
stabilize_body_temperature() //Body temperature adjusts itself (self-regulation)
weightgain() //VORESTATION EDIT
weightgain() //VOREStation Addition
process_weaver_silk() //VOREStation Addition
handle_shock()
handle_pain()
@@ -77,7 +78,7 @@
handle_medical_side_effects()
handle_heartbeat()
handle_nif() //VOREStation Add
handle_nif() //VOREStation Addition
if(!client)
species.handle_npc(src)
@@ -1291,7 +1292,7 @@
clear_alert("blind")
var/apply_nearsighted_overlay = FALSE
if(disabilities & NEARSIGHTED)
if(disabilities & NEARSIGHTED)
apply_nearsighted_overlay = TRUE
if(glasses)
@@ -6,6 +6,14 @@
else if (nutrition <= MAX_NUTRITION_TO_LOSE && stat != 2 && weight > MIN_MOB_WEIGHT && weight_loss)
weight -= species.metabolism*(0.01*weight_loss) // starvation weight loss
/mob/living/carbon/human/proc/process_weaver_silk()
if(!species || !(species.is_weaver))
return
if(species.silk_reserve < species.silk_max_reserve && species.silk_production == TRUE && nutrition > 100)
species.silk_reserve = min(species.silk_reserve + 2, species.silk_max_reserve)
adjust_nutrition(-0.4)
/mob/living/carbon/human/proc/handle_hud_list_vr()
//Right-side status hud updates with left side one.
@@ -60,13 +68,13 @@
//Overriding carbon move proc that forces default hunger factor
/mob/living/carbon/Moved(atom/old_loc, direction, forced = FALSE)
. = ..()
// Technically this does mean being dragged takes nutrition
if(stat != DEAD)
adjust_nutrition(hunger_rate/-10)
if(m_intent == "run")
adjust_nutrition(hunger_rate/-10)
// Moving around increases germ_level faster
if(germ_level < GERM_LEVEL_MOVE_CAP && prob(8))
germ_level++
@@ -20,6 +20,11 @@
var/wikilink = null //link to wiki page for species
var/icon_height = 32
var/agility = 20 //prob() to do agile things
var/is_weaver = FALSE
var/silk_production = FALSE
var/silk_reserve = 100
var/silk_max_reserve = 500
var/silk_color = "#FFFFFF"
var/list/traits = list()
@@ -850,3 +850,150 @@
set category = "Abilities"
pass_flags ^= PASSTABLE //I dunno what this fancy ^= is but Aronai gave it to me.
to_chat(src, "You [pass_flags&PASSTABLE ? "will" : "will NOT"] move over tables/railings/trays!")
/mob/living/carbon/human/proc/check_silk_amount()
set name = "Check Silk Amount"
set category = "Abilities"
if(species.is_weaver)
to_chat(src, "Your silk reserves are at [species.silk_reserve]/[species.silk_max_reserve].")
else
to_chat(src, "<span class='warning'>You are not a weaver! How are you doing this? Tell a developer!</span>")
/mob/living/carbon/human/proc/toggle_silk_production()
set name = "Toggle Silk Production"
set category = "Abilities"
if(species.is_weaver)
species.silk_production = !(species.silk_production)
to_chat(src, "You are [species.silk_production ? "now" : "no longer"] producing silk.")
else
to_chat(src, "<span class='warning'>You are not a weaver! How are you doing this? Tell a developer!</span>")
/mob/living/carbon/human/proc/weave_structure()
set name = "Weave Structure"
set category = "Abilities"
if(!(species.is_weaver))
to_chat(src, "<span class='warning'>You are not a weaver! How are you doing this? Tell a developer!</span>")
return
var/choice
var/datum/weaver_recipe/structure/desired_result
var/finalized = "No"
while(finalized == "No" && src.client)
choice = input(src,"What would you like to weave?") as null|anything in weavable_structures
desired_result = weavable_structures[choice]
if(!desired_result || !istype(desired_result))
return
if(choice)
finalized = alert(src, "Are you sure you want to weave [desired_result.title]? It will cost you [desired_result.cost] silk.","Confirmation","Yes","No")
if(!desired_result || !istype(desired_result))
return
if(desired_result.cost > species.silk_reserve)
to_chat(src, "<span class='warning'>You don't have enough silk to weave that!</span>")
return
if(stat)
to_chat(src, "<span class='warning'>You can't do that in your current state!</span>")
return
if(locate(desired_result.result_type) in src.loc)
to_chat(src, "<span class='warning'>You can't create another weaversilk [desired_result.title] here!</span>")
return
if(!isturf(src.loc))
to_chat(src, "<span class='warning'>You can't weave here!</span>")
return
if(do_after(src, desired_result.time, exclusive = TRUE))
if(desired_result.cost > species.silk_reserve)
to_chat(src, "<span class='warning'>You don't have enough silk to weave that!</span>")
return
if(locate(desired_result.result_type) in src.loc)
to_chat(src, "<span class='warning'>You can't create another weaversilk [desired_result.title] here!</span>")
return
if(!isturf(src.loc))
to_chat(src, "<span class='warning'>You can't weave here!</span>")
return
species.silk_reserve = max(species.silk_reserve - desired_result.cost, 0)
//new desired_result.result_type(src.loc)
var/atom/O = new desired_result.result_type(src.loc)
O.color = species.silk_color
/mob/living/carbon/human/proc/weave_item()
set name = "Weave Item"
set category = "Abilities"
if(!(species.is_weaver))
return
var/choice
var/datum/weaver_recipe/item/desired_result
var/finalized = "No"
while(finalized == "No" && src.client)
choice = input(src,"What would you like to weave?") as null|anything in weavable_items
desired_result = weavable_items[choice]
if(!desired_result || !istype(desired_result))
return
if(choice)
finalized = alert(src, "Are you sure you want to weave [desired_result.title]? It will cost you [desired_result.cost] silk.","Confirmation","Yes","No")
if(!desired_result || !istype(desired_result))
return
if(!(species.is_weaver))
to_chat(src, "<span class='warning'>You are not a weaver! How are you doing this? Tell a developer!</span>")
return
if(desired_result.cost > species.silk_reserve)
to_chat(src, "<span class='warning'>You don't have enough silk to weave that!</span>")
return
if(stat)
to_chat(src, "<span class='warning'>You can't do that in your current state!</span>")
return
if(!isturf(src.loc))
to_chat(src, "<span class='warning'>You can't weave here!</span>")
return
if(do_after(src, desired_result.time, exclusive = TRUE))
if(desired_result.cost > species.silk_reserve)
to_chat(src, "<span class='warning'>You don't have enough silk to weave that!</span>")
return
if(!isturf(src.loc))
to_chat(src, "<span class='warning'>You can't weave here!</span>")
return
species.silk_reserve = max(species.silk_reserve - desired_result.cost, 0)
//new desired_result.result_type(src.loc)
var/atom/O = new desired_result.result_type(src.loc)
O.color = species.silk_color
/mob/living/carbon/human/proc/set_silk_color()
set name = "Set Silk Color"
set category = "Abilities"
if(!(species.is_weaver))
to_chat(src, "<span class='warning'>You are not a weaver! How are you doing this? Tell a developer!</span>")
return
var/new_silk_color = input("Pick a color for your woven products:","Silk Color", species.silk_color) as null|color
if(new_silk_color)
species.silk_color = new_silk_color
@@ -380,7 +380,11 @@
icobase_tail = 1
inherent_verbs = list(
/mob/living/proc/weaveWebBindings)
/mob/living/carbon/human/proc/check_silk_amount,
/mob/living/carbon/human/proc/toggle_silk_production,
/mob/living/carbon/human/proc/weave_structure,
/mob/living/carbon/human/proc/weave_item,
/mob/living/carbon/human/proc/set_silk_color)
min_age = 18
max_age = 80
@@ -412,6 +416,10 @@
base_color = "#333333" //Blackish-gray
blood_color = "#0952EF" //Spiders have blue blood.
is_weaver = TRUE
silk_reserve = 500
silk_max_reserve = 1000
/datum/species/spider/handle_environment_special(var/mob/living/carbon/human/H)
if(H.stat == DEAD) // If they're dead they won't need anything.
return
@@ -145,6 +145,36 @@
H.verbs |= /mob/living/proc/glow_toggle
H.verbs |= /mob/living/proc/glow_color
/*
//Allergen traits! Not available to any species with a base allergens var.
/datum/trait/allergy_gluten
name = "Allergy: Gluten"
desc = "You're highly allergic to gluten proteins, which are found in most common grains. This trait cannot be taken by skrell or tajara."
cost = 0
custom_only = FALSE
banned_species = list(SPECIES_SKRELL,SPECIES_TAJ)
var_changes = list("allergens" = 16)
excludes = list(/datum/trait/allergy_nuts,/datum/trait/allergy_soy)
/datum/trait/allergy_nuts
name = "Allergy: Nuts"
desc = "You're highly allergic to hard-shell seeds, such as peanuts. This trait cannot be taken by skrell or tajara."
cost = 0
custom_only = FALSE
banned_species = list(SPECIES_SKRELL,SPECIES_TAJ)
var_changes = list("allergens" = 64)
excludes = list(/datum/trait/allergy_gluten,/datum/trait/allergy_soy)
/datum/trait/allergy_soy
name = "Allergy: Soy"
desc = "You're highly allergic to soybeans, and some other kinds of bean. This trait cannot be taken by skrell or tajara."
cost = 0
custom_only = FALSE
banned_species = list(SPECIES_SKRELL,SPECIES_TAJ)
var_changes = list("allergens" = 32)
excludes = list(/datum/trait/allergy_gluten,/datum/trait/allergy_nuts)
*/
// Spicy Food Traits, from negative to positive.
/datum/trait/spice_intolerance_extreme
name = "Extreme Spice Intolerance"
@@ -126,7 +126,7 @@
/datum/trait/antiseptic_saliva/apply(var/datum/species/S,var/mob/living/carbon/human/H)
..()
H.verbs |= /mob/living/carbon/human/proc/lick_wounds
H.verbs |= /mob/living/carbon/human/proc/lick_wounds
/datum/trait/traceur
name = "Traceur"
@@ -139,3 +139,17 @@
desc = "You are able to move unhindered on snow."
cost = 1
var_changes = list("snow_movement" = -2)
/datum/trait/weaver
name = "Weaver"
desc = "You can produce silk and create various articles of clothing and objects."
cost = 2
var_changes = list("is_weaver" = 1)
/datum/trait/weaver/apply(var/datum/species/S,var/mob/living/carbon/human/H)
..()
H.verbs |= /mob/living/carbon/human/proc/check_silk_amount
H.verbs |= /mob/living/carbon/human/proc/toggle_silk_production
H.verbs |= /mob/living/carbon/human/proc/weave_structure
H.verbs |= /mob/living/carbon/human/proc/weave_item
H.verbs |= /mob/living/carbon/human/proc/set_silk_color
@@ -6,9 +6,10 @@
var/desc = "Contact a developer if you see this trait."
var/cost = 0 // 0 is neutral, negative cost means negative, positive cost means positive.
var/list/var_changes // A list to apply to the custom species vars.
var/list/var_changes // A list to apply to the custom species vars.
var/list/excludes // Store a list of paths of traits to exclude, but done automatically if they change the same vars.
var/can_take = ORGANICS|SYNTHETICS // Can freaking synths use those.
var/list/banned_species // A list of species that can't take this trait
var/custom_only = TRUE // Trait only available for custom species
//Proc can be overridden lower to include special changes, make sure to call up though for the vars changes
@@ -0,0 +1,108 @@
// Structures
/obj/effect/weaversilk
name = "weaversilk web"
desc = "A thin layer of fiberous webs. It looks like it can be torn down with one strong hit."
icon = 'icons/vore/weaver_icons_vr.dmi'
anchored = 1
density = 0
/obj/effect/weaversilk/attack_hand(mob/user as mob)
..()
if(user.a_intent == I_HURT)
to_chat(user,"<span class='warning'>You easily tear down [name].</span>")
qdel(src)
/obj/effect/weaversilk/floor
var/possible_icon_states = list("floorweb1", "floorweb2", "floorweb3", "floorweb4", "floorweb5", "floorweb6", "floorweb7", "floorweb8")
plane = DIRTY_PLANE
/obj/effect/weaversilk/floor/Initialize()
..()
icon_state = pick(possible_icon_states)
/obj/effect/weaversilk/wall
name = "weaversilk web wall"
desc = "A thin layer of fiberous webs, but just thick enough to block your way. It looks like it can be torn down with one strong hit."
icon_state = "wallweb1"
var/possible_icon_states = list("wallweb1", "wallweb2", "wallweb3")
density = 1
/obj/effect/weaversilk/wall/Initialize()
..()
icon_state = pick(possible_icon_states)
/obj/effect/weaversilk/wall/CanPass(atom/movable/mover, turf/target)
if(istype(mover, /mob/living/carbon/human))
var/mob/living/carbon/human/H = mover
if(H.species.is_weaver)
return TRUE
..()
/obj/structure/bed/double/weaversilk_nest
name = "weaversilk nest"
desc = "A nest of some kind, made of fiberous material."
icon = 'icons/vore/weaver_icons_vr.dmi'
icon_state = "nest"
base_icon = "nest"
/obj/structure/bed/double/weaversilk_nest/update_icon()
return
/obj/structure/bed/double/weaversilk_nest/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(W.is_wrench() || istype(W,/obj/item/stack) || W.is_wirecutter())
return
..()
/obj/structure/bed/double/weaversilk_nest/attack_hand(mob/user as mob)
..()
if(user.a_intent == I_HURT && !has_buckled_mobs())
to_chat(user,"<span class='warning'>You easily tear down [name].</span>")
qdel(src)
/obj/effect/weaversilk/trap
name = "weaversilk trap"
desc = "A silky, yet firm trap. Be careful not to step into it! Or don't..."
icon_state = "trap"
var/trap_active = TRUE
/obj/effect/weaversilk/trap/Crossed(atom/movable/AM as mob|obj)
if(AM.is_incorporeal())
return
if(istype(AM, /mob/living/carbon/human))
var/mob/living/carbon/human/H = AM
if(H.species.is_weaver)
return
if(isliving(AM) && trap_active)
var/mob/living/L = AM
if(L.m_intent == "run")
L.visible_message(
"<span class='danger'>[L] steps on \the [src].</span>",
"<span class='danger'>You step on \the [src]!</span>",
"<b>You hear a squishy noise!</b>"
)
set_dir(L.dir)
can_buckle = 1
buckle_mob(L)
L.Stun(1 SECOND)
to_chat(L, "<span class='danger'>The sticky fibers of \the [src] ensnare, trapping you in place!</span>")
trap_active = 0
can_buckle = initial(can_buckle)
desc += " Actually, it looks like it's been all spent."
..()
// Items
// TODO: Spidersilk clothing and actual bindings, once sprites are ready.
/obj/item/clothing/suit/weaversilk_bindings
icon = 'icons/vore/custom_clothes_vr.dmi'
icon_override = 'icons/vore/custom_clothes_vr.dmi'
name = "weaversilk bindings"
desc = "A webbed cocoon that completely restrains the wearer."
icon_state = "web_bindings"
item_state = "web_bindings_mob"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL
@@ -0,0 +1,36 @@
/datum/weaver_recipe
var/title = null
var/result_type
var/cost = 0
var/time = 5 SECONDS
/datum/weaver_recipe/structure
/datum/weaver_recipe/structure/floor
title = "floor"
result_type = /obj/effect/weaversilk/floor
cost = 25
time = 1 SECOND
/datum/weaver_recipe/structure/wall
title = "wall"
result_type = /obj/effect/weaversilk/wall
cost = 100
/datum/weaver_recipe/structure/nest
title = "nest"
result_type = /obj/structure/bed/double/weaversilk_nest
cost = 100
/datum/weaver_recipe/structure/trap
title = "trap"
result_type = /obj/effect/weaversilk/trap
cost = 250
time = 15 SECONDS
/datum/weaver_recipe/item
cost = 50
/datum/weaver_recipe/item/bindings
title = "bindings"
result_type = /obj/item/clothing/suit/weaversilk_bindings
@@ -141,6 +141,9 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
var/desired_scale_y = size_multiplier * icon_scale_y
desired_scale_x *= species.icon_scale_x
desired_scale_y *= species.icon_scale_y
appearance_flags |= PIXEL_SCALE
if(fuzzy)
appearance_flags &= ~PIXEL_SCALE
//VOREStation Edit End
// Regular stuff again.
-379
View File
@@ -74,214 +74,6 @@
usr.visible_message("<b>[src]</b> points to [A]")
return 1
/*one proc, four uses
swapping: if it's 1, the mobs are trying to switch, if 0, non-passive is pushing passive
default behaviour is:
- non-passive mob passes the passive version
- passive mob checks to see if its mob_bump_flag is in the non-passive's mob_bump_flags
- if si, the proc returns
*/
/mob/living/proc/can_move_mob(var/mob/living/swapped, swapping = 0, passive = 0)
if(!swapped)
return 1
if(!passive)
return swapped.can_move_mob(src, swapping, 1)
else
var/context_flags = 0
if(swapping)
context_flags = swapped.mob_swap_flags
else
context_flags = swapped.mob_push_flags
if(!mob_bump_flag) //nothing defined, go wild
return 1
if(mob_bump_flag & context_flags)
return 1
return 0
/mob/living/Bump(atom/movable/AM)
if(now_pushing || !loc || buckled == AM)
return
now_pushing = 1
if (istype(AM, /mob/living))
var/mob/living/tmob = AM
//Even if we don't push/swap places, we "touched" them, so spread fire
spread_fire(tmob)
for(var/mob/living/M in range(tmob, 1))
if(tmob.pinned.len || ((M.pulling == tmob && ( tmob.restrained() && !( M.restrained() ) && M.stat == 0)) || locate(/obj/item/weapon/grab, tmob.grabbed_by.len)) )
if ( !(world.time % 5) )
to_chat(src, "<span class='warning'>[tmob] is restrained, you cannot push past</span>")
now_pushing = 0
return
if( tmob.pulling == M && ( M.restrained() && !( tmob.restrained() ) && tmob.stat == 0) )
if ( !(world.time % 5) )
to_chat(src, "<span class='warning'>[tmob] is restraining [M], you cannot push past</span>")
now_pushing = 0
return
//BubbleWrap: people in handcuffs are always switched around as if they were on 'help' intent to prevent a person being pulled from being seperated from their puller
var/can_swap = 1
if(loc.density || tmob.loc.density)
can_swap = 0
if(can_swap)
for(var/atom/movable/A in loc)
if(A == src)
continue
if(!A.CanPass(tmob, loc))
can_swap = 0
if(!can_swap) break
if(can_swap)
for(var/atom/movable/A in tmob.loc)
if(A == tmob)
continue
if(!A.CanPass(src, tmob.loc))
can_swap = 0
if(!can_swap) break
//Leaping mobs just land on the tile, no pushing, no anything.
if(status_flags & LEAPING)
loc = tmob.loc
status_flags &= ~LEAPING
now_pushing = 0
return
if((tmob.mob_always_swap || (tmob.a_intent == I_HELP || tmob.restrained()) && (a_intent == I_HELP || src.restrained())) && tmob.canmove && canmove && !tmob.buckled && !buckled && can_swap && can_move_mob(tmob, 1, 0)) // mutual brohugs all around!
var/turf/oldloc = loc
//VOREstation Edit - Begin
//check bumpnom chance, if it's a simplemob that's doing the bumping
var/mob/living/simple_mob/srcsimp = src
if(istype(srcsimp))
if(srcsimp.tryBumpNom(tmob))
now_pushing = 0
return
//if it's a simplemob being bumped, and the above didn't make them start getting bumpnommed, they get a chance to bumpnom
var/mob/living/simple_mob/tmobsimp = tmob
if(istype(tmobsimp))
if(tmobsimp.tryBumpNom(src))
now_pushing = 0
return
//VOREstation Edit - End
forceMove(tmob.loc)
//VOREstation Edit - Begin
// In case of micros, we don't swap positions; instead occupying the same square!
if (handle_micro_bump_helping(tmob))
now_pushing = 0
return
// TODO - Check if we need to do something about the slime.UpdateFeed() we are skipping below.
// VOREStation Edit - End
tmob.forceMove(oldloc)
now_pushing = 0
return
//VOREStation Edit - Begin
else if((tmob.mob_always_swap || (tmob.a_intent == I_HELP || tmob.restrained()) && (a_intent == I_HELP || src.restrained())) && canmove && can_swap && handle_micro_bump_helping(tmob))
forceMove(tmob.loc)
now_pushing = 0
return
//VOREStation Edit - End
if(!can_move_mob(tmob, 0, 0))
now_pushing = 0
return
if(a_intent == I_HELP || src.restrained())
now_pushing = 0
return
// VOREStation Edit - Begin
// Plow that nerd.
if(ishuman(tmob))
var/mob/living/carbon/human/H = tmob
if(H.species.lightweight == 1 && prob(50))
H.visible_message("<span class='warning'>[src] bumps into [H], knocking them off balance!</span>")
H.Weaken(5)
now_pushing = 0
return
// Handle grabbing, stomping, and such of micros!
if(handle_micro_bump_other(tmob)) return
// VOREStation Edit - End
if(istype(tmob, /mob/living/carbon/human) && (FAT in tmob.mutations))
if(prob(40) && !(FAT in src.mutations))
to_chat(src, "<span class='danger'>You fail to push [tmob]'s fat ass out of the way.</span>")
now_pushing = 0
return
if(tmob.r_hand && istype(tmob.r_hand, /obj/item/weapon/shield/riot))
if(prob(99))
now_pushing = 0
return
if(tmob.l_hand && istype(tmob.l_hand, /obj/item/weapon/shield/riot))
if(prob(99))
now_pushing = 0
return
if(!(tmob.status_flags & CANPUSH))
now_pushing = 0
return
tmob.LAssailant = src
now_pushing = 0
. = ..()
if (!istype(AM, /atom/movable) || AM.anchored)
//VOREStation Edit - object-specific proc for running into things
if(((confused || is_blind()) && stat == CONSCIOUS && prob(50) && m_intent=="run") || flying)
AM.stumble_into(src)
//VOREStation Edit End
/* VOREStation Removal - See above
if(confused && prob(50) && m_intent=="run")
Weaken(2)
playsound(src, "punch", 25, 1, -1)
visible_message("<span class='warning'>[src] [pick("ran", "slammed")] into \the [AM]!</span>")
src.apply_damage(5, BRUTE)
to_chat(src, "<span class='warning'>You just [pick("ran", "slammed")] into \the [AM]!</span>")
*/ // VOREStation Removal End
return
if (!now_pushing)
if(isobj(AM))
var/obj/I = AM
if(!can_pull_size || can_pull_size < I.w_class)
return
now_pushing = 1
var/t = get_dir(src, AM)
if (istype(AM, /obj/structure/window))
for(var/obj/structure/window/win in get_step(AM,t))
now_pushing = 0
return
var/turf/T = AM.loc
var/turf/T2 = get_step(AM,t)
if(!T2) // Map edge
now_pushing = 0
return
var/move_time = movement_delay(loc, t)
move_time = DS2NEARESTTICK(move_time)
if(AM.Move(T2, t, move_time))
Move(T, t, move_time)
if(ishuman(AM) && AM:grabbed_by)
for(var/obj/item/weapon/grab/G in AM:grabbed_by)
step(G:assailant, get_dir(G:assailant, AM))
G.adjust_position()
now_pushing = 0
/mob/living/CanPass(atom/movable/mover, turf/target)
if(istype(mover, /obj/structure/blob) && faction == "blob") //Blobs should ignore things on their faction.
return TRUE
return ..()
// Called when something steps onto us. This allows for mulebots and vehicles to run things over. <3
/mob/living/Crossed(var/atom/movable/AM) // Transplanting this from /mob/living/carbon/human/Crossed()
if(AM == src || AM.is_incorporeal()) // We're not going to run over ourselves or ghosts
return
if(istype(AM, /mob/living/bot/mulebot))
var/mob/living/bot/mulebot/MB = AM
MB.runOver(src)
if(istype(AM, /obj/vehicle))
var/obj/vehicle/V = AM
V.RunOver(src)
/mob/living/verb/succumb()
set hidden = 1
if ((src.health < 0 && src.health > (5-src.getMaxHealth()))) // Health below Zero but above 5-away-from-death, as before, but variable
@@ -682,36 +474,6 @@ default behaviour is:
// ++++ROCKDTBEN++++ MOB PROCS //END
// Applies direct "cold" damage while checking protection against the cold.
/mob/living/proc/inflict_cold_damage(amount)
amount *= 1 - get_cold_protection(50) // Within spacesuit protection.
if(amount > 0)
adjustFireLoss(amount)
// Ditto, but for "heat".
/mob/living/proc/inflict_heat_damage(amount)
amount *= 1 - get_heat_protection(10000) // Within firesuit protection.
if(amount > 0)
adjustFireLoss(amount)
// and one for electricity because why not
/mob/living/proc/inflict_shock_damage(amount)
electrocute_act(amount, null, 1 - get_shock_protection(), pick(BP_HEAD, BP_TORSO, BP_GROIN))
// also one for water (most things resist it entirely, except for slimes)
/mob/living/proc/inflict_water_damage(amount)
amount *= 1 - get_water_protection()
if(amount > 0)
adjustToxLoss(amount)
// one for abstracted away ""poison"" (mostly because simplemobs shouldn't handle reagents)
/mob/living/proc/inflict_poison_damage(amount)
if(isSynthetic())
return
amount *= 1 - get_poison_protection()
if(amount > 0)
adjustToxLoss(amount)
/mob/proc/get_contents()
@@ -762,50 +524,6 @@ default behaviour is:
return 1
return 0
/mob/living/proc/can_inject()
return 1
/mob/living/proc/get_organ_target()
var/mob/shooter = src
var/t = shooter:zone_sel.selecting
if ((t in list( O_EYES, O_MOUTH )))
t = BP_HEAD
var/obj/item/organ/external/def_zone = ran_zone(t)
return def_zone
// heal ONE external organ, organ gets randomly selected from damaged ones.
/mob/living/proc/heal_organ_damage(var/brute, var/burn)
adjustBruteLoss(-brute)
adjustFireLoss(-burn)
src.updatehealth()
// damage ONE external organ, organ gets randomly selected from damaged ones.
/mob/living/proc/take_organ_damage(var/brute, var/burn, var/emp=0)
if(status_flags & GODMODE) return 0 //godmode
adjustBruteLoss(brute)
adjustFireLoss(burn)
src.updatehealth()
// heal MANY external organs, in random order
/mob/living/proc/heal_overall_damage(var/brute, var/burn)
adjustBruteLoss(-brute)
adjustFireLoss(-burn)
src.updatehealth()
// damage MANY external organs, in random order
/mob/living/proc/take_overall_damage(var/brute, var/burn, var/used_weapon = null)
if(status_flags & GODMODE) return 0 //godmode
adjustBruteLoss(brute)
adjustFireLoss(burn)
src.updatehealth()
/mob/living/proc/restore_all_organs()
return
/mob/living/proc/revive()
rejuvenate()
if(buckled)
@@ -903,103 +621,6 @@ default behaviour is:
return
// Almost all of this handles pulling movables behind us
/mob/living/Move(atom/newloc, direct, movetime)
if(buckled && buckled.loc != newloc) //not updating position
if(!buckled.anchored && buckled.buckle_movable)
return buckled.Move(newloc, direct)
else
return 0
var/atom/movable/pullee = pulling
// Prior to our move it's already too far away
if(pullee && get_dist(src, pullee) > 1)
stop_pulling()
// Shenanigans! Pullee closed into locker for eg.
if(pullee && !isturf(pullee.loc) && pullee.loc != loc)
stop_pulling()
// Can't pull with no hands
if(restrained())
stop_pulling()
// Will move our mob (probably)
. = ..() // Moved() called at this point if successful
if(pulledby && moving_diagonally != FIRST_DIAG_STEP && get_dist(src, pulledby) > 1) //seperated from our puller and not in the middle of a diagonal move
pulledby.stop_pulling()
if(s_active && !(s_active in contents) && get_turf(s_active) != get_turf(src)) //check !( s_active in contents ) first so we hopefully don't have to call get_turf() so much.
s_active.close(src)
/mob/living/proc/dragged(var/mob/living/dragger, var/oldloc)
var/area/A = get_area(src)
if(lying && !buckled && pull_damage() && A.has_gravity() && (prob(getBruteLoss() * 200 / maxHealth)))
adjustBruteLoss(2)
visible_message("<span class='danger'>\The [src]'s [isSynthetic() ? "state" : "wounds"] worsen terribly from being dragged!</span>")
/mob/living/Moved(var/atom/oldloc, direct, forced, movetime)
. = ..()
handle_footstep(loc)
// Begin VOREstation edit
if(is_shifted)
is_shifted = FALSE
pixel_x = default_pixel_x
pixel_y = default_pixel_y
// End VOREstation edit
if(pulling) // we were pulling a thing and didn't lose it during our move.
var/pull_dir = get_dir(src, pulling)
if(pulling.anchored || !isturf(pulling.loc))
stop_pulling()
else if(get_dist(src, pulling) > 1 || (moving_diagonally != SECOND_DIAG_STEP && ((pull_dir - 1) & pull_dir))) // puller and pullee more than one tile away or in diagonal position
// If it is too far away or across z-levels from old location, stop pulling.
if(get_dist(pulling.loc, oldloc) > 1 || pulling.loc.z != oldloc?.z)
stop_pulling()
// living might take damage from drags
else if(isliving(pulling))
var/mob/living/M = pulling
M.dragged(src, oldloc)
pulling.Move(oldloc, 0, movetime) // the pullee tries to reach our previous position
if(pulling && get_dist(src, pulling) > 1) // the pullee couldn't keep up
stop_pulling()
if(!isturf(loc))
return
else if(lastarea?.has_gravity == 0)
inertial_drift()
//VOREStation Edit Start
else if(flying)
inertial_drift()
make_floating(1)
//VOREStation Edit End
else if(!isspace(loc))
inertia_dir = 0
make_floating(0)
/mob/living/proc/inertial_drift()
if(x > 1 && x < (world.maxx) && y > 1 && y < (world.maxy))
if(Process_Spacemove(1))
inertia_dir = 0
return
var/locthen = loc
spawn(5)
if(!anchored && !pulledby && loc == locthen)
var/stepdir = inertia_dir ? inertia_dir : last_move
if(!stepdir)
return
var/turf/T = get_step(src, stepdir)
if(!T)
return
Move(T, stepdir, 5)
/mob/living/proc/handle_footstep(turf/T)
return FALSE
/mob/living/verb/resist()
set name = "Resist"
set category = "IC"
+71 -1
View File
@@ -571,4 +571,74 @@
if(confused)
accuracy_penalty += 45
return accuracy_penalty
return accuracy_penalty
// Applies direct "cold" damage while checking protection against the cold.
/mob/living/proc/inflict_cold_damage(amount)
amount *= 1 - get_cold_protection(50) // Within spacesuit protection.
if(amount > 0)
adjustFireLoss(amount)
// Ditto, but for "heat".
/mob/living/proc/inflict_heat_damage(amount)
amount *= 1 - get_heat_protection(10000) // Within firesuit protection.
if(amount > 0)
adjustFireLoss(amount)
// and one for electricity because why not
/mob/living/proc/inflict_shock_damage(amount)
electrocute_act(amount, null, 1 - get_shock_protection(), pick(BP_HEAD, BP_TORSO, BP_GROIN))
// also one for water (most things resist it entirely, except for slimes)
/mob/living/proc/inflict_water_damage(amount)
amount *= 1 - get_water_protection()
if(amount > 0)
adjustToxLoss(amount)
// one for abstracted away ""poison"" (mostly because simplemobs shouldn't handle reagents)
/mob/living/proc/inflict_poison_damage(amount)
if(isSynthetic())
return
amount *= 1 - get_poison_protection()
if(amount > 0)
adjustToxLoss(amount)
/mob/living/proc/can_inject()
return 1
/mob/living/proc/get_organ_target()
var/mob/shooter = src
var/t = shooter:zone_sel.selecting
if ((t in list( O_EYES, O_MOUTH )))
t = BP_HEAD
var/obj/item/organ/external/def_zone = ran_zone(t)
return def_zone
// heal ONE external organ, organ gets randomly selected from damaged ones.
/mob/living/proc/heal_organ_damage(var/brute, var/burn)
adjustBruteLoss(-brute)
adjustFireLoss(-burn)
src.updatehealth()
// damage ONE external organ, organ gets randomly selected from damaged ones.
/mob/living/proc/take_organ_damage(var/brute, var/burn, var/emp=0)
if(status_flags & GODMODE) return 0 //godmode
adjustBruteLoss(brute)
adjustFireLoss(burn)
src.updatehealth()
// heal MANY external organs, in random order
/mob/living/proc/heal_overall_damage(var/brute, var/burn)
adjustBruteLoss(-brute)
adjustFireLoss(-burn)
src.updatehealth()
// damage MANY external organs, in random order
/mob/living/proc/take_overall_damage(var/brute, var/burn, var/used_weapon = null)
if(status_flags & GODMODE) return 0 //godmode
adjustBruteLoss(brute)
adjustFireLoss(burn)
src.updatehealth()
/mob/living/proc/restore_all_organs()
return
+299 -1
View File
@@ -18,4 +18,302 @@
if(!n.is_safe_to_enter(src))
to_chat(src, span("warning", "\The [n] is dangerous to move into."))
return FALSE // In case any code wants to know if movement happened.
return ..() // Parent call should make the mob move.
return ..() // Parent call should make the mob move.
/*one proc, four uses
swapping: if it's 1, the mobs are trying to switch, if 0, non-passive is pushing passive
default behaviour is:
- non-passive mob passes the passive version
- passive mob checks to see if its mob_bump_flag is in the non-passive's mob_bump_flags
- if si, the proc returns
*/
/mob/living/proc/can_move_mob(var/mob/living/swapped, swapping = 0, passive = 0)
if(!swapped)
return 1
if(!passive)
return swapped.can_move_mob(src, swapping, 1)
else
var/context_flags = 0
if(swapping)
context_flags = swapped.mob_swap_flags
else
context_flags = swapped.mob_push_flags
if(!mob_bump_flag) //nothing defined, go wild
return 1
if(mob_bump_flag & context_flags)
return 1
return 0
/mob/living/Bump(atom/movable/AM)
if(now_pushing || !loc || buckled == AM)
return
now_pushing = 1
if (istype(AM, /mob/living))
var/mob/living/tmob = AM
//Even if we don't push/swap places, we "touched" them, so spread fire
spread_fire(tmob)
for(var/mob/living/M in range(tmob, 1))
if(tmob.pinned.len || ((M.pulling == tmob && ( tmob.restrained() && !( M.restrained() ) && M.stat == 0)) || locate(/obj/item/weapon/grab, tmob.grabbed_by.len)) )
if ( !(world.time % 5) )
to_chat(src, "<span class='warning'>[tmob] is restrained, you cannot push past</span>")
now_pushing = 0
return
if( tmob.pulling == M && ( M.restrained() && !( tmob.restrained() ) && tmob.stat == 0) )
if ( !(world.time % 5) )
to_chat(src, "<span class='warning'>[tmob] is restraining [M], you cannot push past</span>")
now_pushing = 0
return
//BubbleWrap: people in handcuffs are always switched around as if they were on 'help' intent to prevent a person being pulled from being seperated from their puller
var/can_swap = 1
if(loc.density || tmob.loc.density)
can_swap = 0
if(can_swap)
for(var/atom/movable/A in loc)
if(A == src)
continue
if(!A.CanPass(tmob, loc))
can_swap = 0
if(!can_swap) break
if(can_swap)
for(var/atom/movable/A in tmob.loc)
if(A == tmob)
continue
if(!A.CanPass(src, tmob.loc))
can_swap = 0
if(!can_swap) break
//Leaping mobs just land on the tile, no pushing, no anything.
if(status_flags & LEAPING)
loc = tmob.loc
status_flags &= ~LEAPING
now_pushing = 0
return
if((tmob.mob_always_swap || (tmob.a_intent == I_HELP || tmob.restrained()) && (a_intent == I_HELP || src.restrained())) && tmob.canmove && canmove && !tmob.buckled && !buckled && can_swap && can_move_mob(tmob, 1, 0)) // mutual brohugs all around!
var/turf/oldloc = loc
//VOREstation Edit - Begin
//check bumpnom chance, if it's a simplemob that's doing the bumping
var/mob/living/simple_mob/srcsimp = src
if(istype(srcsimp))
if(srcsimp.tryBumpNom(tmob))
now_pushing = 0
return
//if it's a simplemob being bumped, and the above didn't make them start getting bumpnommed, they get a chance to bumpnom
var/mob/living/simple_mob/tmobsimp = tmob
if(istype(tmobsimp))
if(tmobsimp.tryBumpNom(src))
now_pushing = 0
return
//VOREstation Edit - End
forceMove(tmob.loc)
//VOREstation Edit - Begin
// In case of micros, we don't swap positions; instead occupying the same square!
if (handle_micro_bump_helping(tmob))
now_pushing = 0
return
// TODO - Check if we need to do something about the slime.UpdateFeed() we are skipping below.
// VOREStation Edit - End
tmob.forceMove(oldloc)
now_pushing = 0
return
//VOREStation Edit - Begin
else if((tmob.mob_always_swap || (tmob.a_intent == I_HELP || tmob.restrained()) && (a_intent == I_HELP || src.restrained())) && canmove && can_swap && handle_micro_bump_helping(tmob))
forceMove(tmob.loc)
now_pushing = 0
return
//VOREStation Edit - End
if(!can_move_mob(tmob, 0, 0))
now_pushing = 0
return
if(a_intent == I_HELP || src.restrained())
now_pushing = 0
return
// VOREStation Edit - Begin
// Plow that nerd.
if(ishuman(tmob))
var/mob/living/carbon/human/H = tmob
if(H.species.lightweight == 1 && prob(50))
H.visible_message("<span class='warning'>[src] bumps into [H], knocking them off balance!</span>")
H.Weaken(5)
now_pushing = 0
return
// Handle grabbing, stomping, and such of micros!
if(handle_micro_bump_other(tmob)) return
// VOREStation Edit - End
if(istype(tmob, /mob/living/carbon/human) && (FAT in tmob.mutations))
if(prob(40) && !(FAT in src.mutations))
to_chat(src, "<span class='danger'>You fail to push [tmob]'s fat ass out of the way.</span>")
now_pushing = 0
return
if(tmob.r_hand && istype(tmob.r_hand, /obj/item/weapon/shield/riot))
if(prob(99))
now_pushing = 0
return
if(tmob.l_hand && istype(tmob.l_hand, /obj/item/weapon/shield/riot))
if(prob(99))
now_pushing = 0
return
if(!(tmob.status_flags & CANPUSH))
now_pushing = 0
return
tmob.LAssailant = src
now_pushing = 0
. = ..()
if (!istype(AM, /atom/movable) || AM.anchored)
//VOREStation Edit - object-specific proc for running into things
if(((confused || is_blind()) && stat == CONSCIOUS && prob(50) && m_intent=="run") || flying)
AM.stumble_into(src)
//VOREStation Edit End
/* VOREStation Removal - See above
if(confused && prob(50) && m_intent=="run")
Weaken(2)
playsound(src, "punch", 25, 1, -1)
visible_message("<span class='warning'>[src] [pick("ran", "slammed")] into \the [AM]!</span>")
src.apply_damage(5, BRUTE)
to_chat(src, "<span class='warning'>You just [pick("ran", "slammed")] into \the [AM]!</span>")
*/ // VOREStation Removal End
return
if (!now_pushing)
if(isobj(AM))
var/obj/I = AM
if(!can_pull_size || can_pull_size < I.w_class)
return
now_pushing = 1
var/t = get_dir(src, AM)
if (istype(AM, /obj/structure/window))
for(var/obj/structure/window/win in get_step(AM,t))
now_pushing = 0
return
step(AM, t)
if(ishuman(AM) && AM:grabbed_by)
for(var/obj/item/weapon/grab/G in AM:grabbed_by)
step(G:assailant, get_dir(G:assailant, AM))
G.adjust_position()
now_pushing = 0
/mob/living/CanPass(atom/movable/mover, turf/target)
if(istype(mover, /obj/structure/blob) && faction == "blob") //Blobs should ignore things on their faction.
return TRUE
return ..()
// Called when something steps onto us. This allows for mulebots and vehicles to run things over. <3
/mob/living/Crossed(var/atom/movable/AM) // Transplanting this from /mob/living/carbon/human/Crossed()
if(AM == src || AM.is_incorporeal()) // We're not going to run over ourselves or ghosts
return
if(istype(AM, /mob/living/bot/mulebot))
var/mob/living/bot/mulebot/MB = AM
MB.runOver(src)
if(istype(AM, /obj/vehicle))
var/obj/vehicle/V = AM
V.RunOver(src)
// Almost all of this handles pulling movables behind us
/mob/living/Move(atom/newloc, direct, movetime)
if(buckled && buckled.loc != newloc) //not updating position
if(!buckled.anchored && buckled.buckle_movable)
return buckled.Move(newloc, direct)
else
return 0
var/atom/movable/pullee = pulling
// Prior to our move it's already too far away
if(pullee && get_dist(src, pullee) > 1)
stop_pulling()
// Shenanigans! Pullee closed into locker for eg.
if(pullee && !isturf(pullee.loc) && pullee.loc != loc)
stop_pulling()
// Can't pull with no hands
if(restrained())
stop_pulling()
// Will move our mob (probably)
. = ..() // Moved() called at this point if successful
if(pulledby && moving_diagonally != FIRST_DIAG_STEP && get_dist(src, pulledby) > 1) //seperated from our puller and not in the middle of a diagonal move
pulledby.stop_pulling()
if(s_active && !(s_active in contents) && get_turf(s_active) != get_turf(src)) //check !( s_active in contents ) first so we hopefully don't have to call get_turf() so much.
s_active.close(src)
/mob/living/proc/dragged(var/mob/living/dragger, var/oldloc)
var/area/A = get_area(src)
if(lying && !buckled && pull_damage() && A.has_gravity() && (prob(getBruteLoss() * 200 / maxHealth)))
adjustBruteLoss(2)
visible_message("<span class='danger'>\The [src]'s [isSynthetic() ? "state" : "wounds"] worsen terribly from being dragged!</span>")
/mob/living/Moved(var/atom/oldloc, direct, forced, movetime)
. = ..()
handle_footstep(loc)
// Begin VOREstation edit
if(is_shifted)
is_shifted = FALSE
pixel_x = default_pixel_x
pixel_y = default_pixel_y
// End VOREstation edit
if(pulling) // we were pulling a thing and didn't lose it during our move.
var/pull_dir = get_dir(src, pulling)
if(pulling.anchored || !isturf(pulling.loc))
stop_pulling()
else if(get_dist(src, pulling) > 1 || (moving_diagonally != SECOND_DIAG_STEP && ((pull_dir - 1) & pull_dir))) // puller and pullee more than one tile away or in diagonal position
// If it is too far away or across z-levels from old location, stop pulling.
if(get_dist(pulling.loc, oldloc) > 1 || pulling.loc.z != oldloc?.z)
stop_pulling()
// living might take damage from drags
else if(isliving(pulling))
var/mob/living/M = pulling
M.dragged(src, oldloc)
pulling.Move(oldloc, 0, movetime) // the pullee tries to reach our previous position
if(pulling && get_dist(src, pulling) > 1) // the pullee couldn't keep up
stop_pulling()
if(!isturf(loc))
return
else if(lastarea?.has_gravity == 0)
inertial_drift()
//VOREStation Edit Start
else if(flying)
inertial_drift()
make_floating(1)
//VOREStation Edit End
else if(!isspace(loc))
inertia_dir = 0
make_floating(0)
/mob/living/proc/inertial_drift()
if(x > 1 && x < (world.maxx) && y > 1 && y < (world.maxy))
if(Process_Spacemove(1))
inertia_dir = 0
return
var/locthen = loc
spawn(5)
if(!anchored && !pulledby && loc == locthen)
var/stepdir = inertia_dir ? inertia_dir : last_move
if(!stepdir)
return
var/turf/T = get_step(src, stepdir)
if(!T)
return
Move(T, stepdir, 5)
/mob/living/proc/handle_footstep(turf/T)
return FALSE
@@ -36,11 +36,13 @@
data["drones"] = list()
for(var/mob/living/silicon/robot/drone/D in mob_list)
if(D.z != z)
//VOREStation Edit - multiz lol
if(!(D.z in using_map.get_map_levels(z, TRUE, 0)))
continue
//VOREStation Edit - multiz lol
if(D.foreign_droid)
continue
data["drones"].Add(list(list(
"name" = D.real_name,
"active" = D.stat != 2,
@@ -171,7 +171,7 @@
else if(T.dead) //It's probably dead otherwise.
T.remove_dead(user)
else
to_chat(user, "Harvesting \a [target] is not the purpose of this tool. The [src] is for plants being grown.")
to_chat(user, "Harvesting \a [target] is not the purpose of this tool. [src] is for plants being grown.")
// A special tray for the service droid. Allow droid to pick up and drop items as if they were using the tray normally
// Click on table to unload, click on item to load. Otherwise works identically to a tray.
@@ -1,12 +1,8 @@
//////////////////////////////
//Contents: Ladders, Stairs.//
//////////////////////////////
/obj/structure/ladder
name = "ladder"
desc = "A ladder. You can climb it up and down."
icon_state = "ladder01"
icon = 'icons/obj/structures.dmi'
icon = 'icons/obj/structures/multiz.dmi'
density = 0
opacity = 0
anchored = 1
@@ -125,65 +121,3 @@
/obj/structure/ladder/updown
allowed_directions = UP|DOWN
icon_state = "ladder11"
/obj/structure/stairs
name = "Stairs"
desc = "Stairs leading to another deck. Not too useful if the gravity goes out."
icon = 'icons/obj/stairs.dmi'
density = 0
opacity = 0
anchored = 1
flags = ON_BORDER
layer = STAIRS_LAYER
/obj/structure/stairs/Initialize()
. = ..()
for(var/turf/turf in locs)
var/turf/simulated/open/above = GetAbove(turf)
if(!above)
warning("Stair created without level above: ([loc.x], [loc.y], [loc.z])")
return qdel(src)
if(!istype(above))
above.ChangeTurf(/turf/simulated/open)
/obj/structure/stairs/CheckExit(atom/movable/mover as mob|obj, turf/target as turf)
if(get_dir(loc, target) == dir && upperStep(mover.loc))
return FALSE
. = ..()
/obj/structure/stairs/Bumped(atom/movable/A)
// This is hackish but whatever.
var/turf/target = get_step(GetAbove(A), dir)
if(target.Enter(A, src)) // Pass src to be ignored to avoid infinate loop
A.forceMove(target)
if(isliving(A))
var/mob/living/L = A
if(L.pulling && !L.pulling.anchored)
L.pulling.forceMove(target)
/obj/structure/stairs/proc/upperStep(var/turf/T)
return (T == loc)
/obj/structure/stairs/CanPass(obj/mover, turf/source, height, airflow)
return airflow || !density
// type paths to make mapping easier.
/obj/structure/stairs/north
dir = NORTH
bound_height = 64
bound_y = -32
pixel_y = -32
/obj/structure/stairs/south
dir = SOUTH
bound_height = 64
/obj/structure/stairs/east
dir = EAST
bound_width = 64
bound_x = -32
pixel_x = -32
/obj/structure/stairs/west
dir = WEST
bound_width = 64
+4 -20
View File
@@ -358,24 +358,16 @@
for(var/atom/A in landing)
if(!A.CanPass(src, src.loc, 1, 0))
return FALSE
// TODO - Stairs should operate thru a different mechanism, not falling, to allow side-bumping.
// Now lets move there!
if(!Move(landing))
return 1
// Detect if we made a silent landing.
if(locate(/obj/structure/stairs) in landing)
if(isliving(src))
var/mob/living/L = src
if(L.pulling)
L.pulling.forceMove(landing)
return 1
else
var/atom/A = find_fall_target(oldloc, landing)
if(special_fall_handle(A) || !A || !A.check_impact(src))
return
fall_impact(A)
var/atom/A = find_fall_target(oldloc, landing)
if(special_fall_handle(A) || !A || !A.check_impact(src))
return
fall_impact(A)
/atom/movable/proc/special_fall_handle(var/atom/A)
return FALSE
@@ -446,14 +438,6 @@
/turf/space/check_impact(var/atom/movable/falling_atom)
return FALSE
// We return 1 without calling fall_impact in order to provide a soft landing. So nice.
// Note this really should never even get this far
/obj/structure/stairs/CheckFall(var/atom/movable/falling_atom)
return TRUE
/obj/structure/stairs/check_impact(var/atom/movable/falling_atom)
return FALSE
// Can't fall onto ghosts
/mob/observer/dead/CheckFall()
return FALSE
+10 -4
View File
@@ -55,8 +55,16 @@
GLOB.turf_entered_event.register(T, src, .proc/BelowOpenUpdated)
GLOB.turf_exited_event.register(T, src, .proc/BelowOpenUpdated)
/turf/simulated/open/Entered(var/atom/movable/mover)
/turf/simulated/open/Entered(var/atom/movable/mover, var/atom/oldloc)
. = ..()
// Going down stairs from the topstair piece
var/obj/structure/stairs/top/T = locate(/obj/structure/stairs/top) in oldloc
if(T && mover.dir == turn(T.dir, 180) && T.check_integrity())
T.use_stairs(mover, oldloc)
return
mover.fall()
/turf/simulated/open/proc/BelowOpenUpdated(turf/T, atom/movable/AM, old_loc)
@@ -187,6 +195,4 @@
for(var/obj/O in contents)
if(!O.CanFallThru(L, GetBelow(src)))
return TRUE // Can't fall through this, like lattice or catwalk.
if(!locate(/obj/structure/stairs) in GetBelow(src))
return FALSE // Falling on stairs is safe.
return ..()
return ..()
@@ -1,21 +0,0 @@
/obj/item/clothing/suit/web_bindings
icon = 'icons/vore/custom_clothes_vr.dmi'
icon_override = 'icons/vore/custom_clothes_vr.dmi'
name = "web bindings"
desc = "A webbed cocoon that completely restrains the wearer."
icon_state = "web_bindings"
item_state = "web_bindings_mob"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL
/mob/living/proc/weaveWebBindings()
set name = "Weave Web Bindings"
set category = "Species Powers"
if(nutrition >= 30) //This isn't a huge problem. This is so you can bind people up.
src.visible_message("<span class='notice'>\the [src] pulls silk from their manibles and delicately weaves it into bindings.</span>")
adjust_nutrition(-30)
spawn(30) //5 seconds to weave the bindings~
var/obj/item/clothing/suit/web_bindings/bindings = new() //This sprite is amazing, I must say.
src.put_in_hands(bindings)
else
to_chat(src, "You do not have enough nutrition to create webbing!") //CK~
+1
View File
@@ -82,6 +82,7 @@ varonis - Xenochimera
verkister - Xenochimera
verysoft - Black-Eyed Shadekin
vitoras - Protean
voidalynx - Black-Eyed Shadekin
voidalynx - Protean
wickedtemp - Shadekin Empathy
xioen - Diona
+8
View File
@@ -0,0 +1,8 @@
author: Atermonera
delete-after: True
changes:
- tweak: "Stairs have been completely reworked, and now consist of multi-tile constructs built from lower, middle, and upper stair pieces, and an openspace in the floor."
- rscadd: "To go up and down stairs, simply step upon the lower/upper stair pieces, and you'll be moved automatically if the stairs are in working condition. Any grabbed or dragged items will be brought with you."
- rscadd: "If the lower stair piece is missing (or even if it's not), but the middle and upper sections are present, you can climb up the middle section by click-dragging from your character to the middle stair."
- rscadd: "If you step onto the open space, you will fall down the stairs. Teshari players, consider yourselves warned."
- rscadd: "Stairs remain unconstructable in-round (Doing so would also require a way to make openspaces), but there are spawners rooted on the middle stair (as with old stairs) that will create a completed stair and can be spawned in by admins/mappers."
Binary file not shown.

Before

Width:  |  Height:  |  Size: 727 KiB

After

Width:  |  Height:  |  Size: 727 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 111 KiB

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Before

Width:  |  Height:  |  Size: 8.4 KiB

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

+1396 -75
View File
File diff suppressed because it is too large Load Diff
+1321 -66
View File
File diff suppressed because it is too large Load Diff
+12 -12
View File
@@ -462,6 +462,10 @@
/obj/structure/catwalk,
/turf/simulated/floor/plating/eris/under/airless,
/area/talon/maintenance/deckone_starboard_fore_wing)
"bb" = (
/obj/structure/stairs/spawner/east,
/turf/simulated/floor/tiled/eris/steel,
/area/talon/deckone/central_hallway)
"bc" = (
/obj/structure/catwalk,
/obj/structure/handrail{
@@ -1553,6 +1557,10 @@
},
/turf/simulated/floor/tiled/eris/white/bluecorner,
/area/talon/deckone/medical)
"dh" = (
/obj/structure/stairs/spawner/west,
/turf/simulated/floor/tiled/eris/steel,
/area/talon/deckone/central_hallway)
"dj" = (
/obj/structure/table/standard,
/obj/item/weapon/storage/box/handcuffs,
@@ -2227,10 +2235,6 @@
},
/turf/simulated/floor/tiled/eris/dark/cyancorner,
/area/talon/deckone/starboard_solar)
"kE" = (
/obj/structure/stairs/west,
/turf/simulated/floor/tiled/eris/steel,
/area/talon/deckone/central_hallway)
"kG" = (
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 1
@@ -2554,10 +2558,6 @@
/obj/item/clothing/accessory/holster/waist,
/turf/simulated/floor/tiled/eris/white/danger,
/area/talon/deckone/armory)
"oe" = (
/obj/structure/stairs/east,
/turf/simulated/floor/tiled/eris/steel,
/area/talon/deckone/central_hallway)
"oh" = (
/obj/effect/shuttle_landmark{
landmark_tag = "talon_aft";
@@ -15159,7 +15159,7 @@ Pg
dH
Bj
Ae
kE
dh
iT
sz
tr
@@ -15566,7 +15566,7 @@ UP
aM
xK
aM
oe
bb
Nc
YK
YK
@@ -16134,7 +16134,7 @@ gR
aO
nN
aO
kE
dh
DO
yo
yo
@@ -16579,7 +16579,7 @@ kw
fJ
Bj
Jw
oe
bb
AU
IW
Zq
File diff suppressed because it is too large Load Diff
+2 -1
View File
@@ -34,7 +34,8 @@
// their 'connected' friend! Try to use the appropriate top/bottom ones for good looks.
/obj/structure/fake_stairs
name = "use a subtype! - stairs"
icon = 'icons/obj/stairs.dmi'
icon = 'icons/obj/structures/multiz.dmi'
icon_state = "stair"
density = 1
opacity = 0
anchored = 1
-1
View File
@@ -98,7 +98,6 @@
"t" = (
/obj/effect/step_trigger/teleporter/from_underdark{
dir = 4;
icon_state = "";
pixel_x = -16
},
/turf/simulated/floor/tiled/steel_dirty/virgo3b,
+114 -80
View File
@@ -366,6 +366,10 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/tiled/dark,
/area/tether/surfacebase/medical/paramed)
"aaI" = (
/obj/structure/stairs/spawner/east,
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/centralstairwell)
"aaJ" = (
/obj/structure/table/woodentable,
/obj/item/weapon/folder/white,
@@ -1418,6 +1422,11 @@
/obj/machinery/vending/loadout,
/turf/simulated/floor/tiled,
/area/crew_quarters/visitor_laundry)
"acA" = (
/obj/structure/railing,
/obj/structure/stairs/spawner/east,
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/centralstairwell)
"acB" = (
/obj/effect/floor_decal/borderfloor{
dir = 4
@@ -1682,6 +1691,10 @@
/obj/machinery/camera/network/medbay,
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/lowerhall)
"ada" = (
/obj/structure/stairs/spawner/north,
/turf/simulated/floor/tiled,
/area/tether/surfacebase/public_garden_one)
"adb" = (
/obj/effect/floor_decal/corner/paleblue{
dir = 9
@@ -1741,6 +1754,10 @@
},
/turf/simulated/floor/wood,
/area/tether/surfacebase/medical/mentalhealth)
"adg" = (
/obj/structure/stairs/spawner/north,
/turf/simulated/floor/virgo3b,
/area/tether/surfacebase/outside/outside1)
"adh" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/cable/green{
@@ -2086,6 +2103,13 @@
},
/turf/simulated/floor/tiled/white,
/area/medical/virologyaccess)
"adH" = (
/obj/structure/railing{
dir = 8
},
/obj/structure/stairs/spawner/south,
/turf/simulated/floor/tiled,
/area/tether/surfacebase/security/lowerhall)
"adI" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
@@ -2990,9 +3014,12 @@
/turf/simulated/wall,
/area/tether/surfacebase/medical/lowerhall)
"aeV" = (
/obj/structure/stairs/north,
/turf/simulated/floor/virgo3b,
/area/tether/surfacebase/outside/outside1)
/obj/structure/railing{
dir = 4
},
/obj/structure/stairs/spawner/south,
/turf/simulated/floor/tiled,
/area/tether/surfacebase/security/lowerhall)
"aeW" = (
/turf/simulated/wall,
/area/storage/primary)
@@ -4015,6 +4042,9 @@
name = "north bump";
pixel_y = 28
},
/mob/living/simple_mob/vore/aggressive/rat{
ai_holder_type = /datum/ai_holder/simple_mob/retaliate
},
/turf/simulated/floor/plating,
/area/maintenance/lower/trash_pit)
"agR" = (
@@ -6366,9 +6396,9 @@
/turf/simulated/floor/tiled,
/area/tether/surfacebase/public_garden_one)
"akX" = (
/obj/structure/stairs/north,
/obj/structure/stairs/spawner/north,
/turf/simulated/floor/tiled,
/area/tether/surfacebase/public_garden_one)
/area/rnd/hallway)
"akY" = (
/obj/structure/railing{
dir = 8
@@ -6710,6 +6740,10 @@
/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,
/turf/simulated/floor/tiled,
/area/hallway/lower/first_west)
"alr" = (
/obj/structure/stairs/spawner/north,
/turf/simulated/floor/tiled,
/area/engineering/atmos)
"als" = (
/obj/effect/floor_decal/techfloor{
dir = 6
@@ -6865,6 +6899,15 @@
/obj/structure/railing{
dir = 4
},
/obj/structure/disposalpipe/broken,
/obj/effect/floor_decal/techfloor/hole{
dir = 4
},
/obj/effect/floor_decal/techfloor/hole/right{
dir = 4
},
/obj/effect/decal/cleanable/filth,
/obj/effect/landmark/teleplumb_exit,
/turf/simulated/floor/plating,
/area/maintenance/lower/trash_pit)
"alE" = (
@@ -7782,6 +7825,11 @@
/obj/structure/cable{
icon_state = "1-4"
},
/obj/structure/sink{
dir = 8;
pixel_x = -12;
pixel_y = 2
},
/turf/simulated/floor/plating,
/area/maintenance/lower/trash_pit)
"ang" = (
@@ -9234,7 +9282,7 @@
/turf/simulated/floor/tiled/techfloor,
/area/maintenance/lower/xenoflora)
"apw" = (
/obj/structure/stairs/south,
/obj/structure/stairs/spawner/south,
/turf/simulated/floor/tiled,
/area/tether/surfacebase/north_stairs_one)
"apx" = (
@@ -9631,6 +9679,10 @@
/obj/effect/floor_decal/industrial/outline/yellow,
/turf/simulated/floor/plating,
/area/maintenance/lower/vacant_site)
"aqk" = (
/obj/structure/stairs/spawner/south,
/turf/simulated/floor/tiled,
/area/tether/surfacebase/surface_one_hall)
"aql" = (
/obj/structure/catwalk,
/turf/simulated/floor/plating,
@@ -10928,6 +10980,10 @@
},
/turf/simulated/floor/tiled,
/area/crew_quarters/locker)
"asw" = (
/obj/structure/stairs/spawner/south,
/turf/simulated/floor/plating,
/area/maintenance/lower/atmos)
"asx" = (
/obj/effect/floor_decal/borderfloor{
dir = 5
@@ -11809,6 +11865,10 @@
},
/turf/simulated/floor/tiled/techfloor/grid,
/area/tether/surfacebase/tram)
"auf" = (
/obj/structure/stairs/spawner/east,
/turf/simulated/floor/outdoors/grass/sif/virgo3b,
/area/tether/surfacebase/outside/outside1)
"aug" = (
/obj/structure/cable/green{
d1 = 2;
@@ -12151,6 +12211,10 @@
},
/turf/simulated/floor/plating,
/area/maintenance/lower/solars)
"auI" = (
/obj/structure/stairs/spawner/west,
/turf/simulated/floor/outdoors/grass/sif/virgo3b,
/area/tether/surfacebase/outside/outside1)
"auK" = (
/turf/simulated/wall,
/area/maintenance/lower/solars)
@@ -15148,10 +15212,6 @@
},
/turf/simulated/floor/tiled/white,
/area/medical/virologyisolation)
"ayY" = (
/obj/structure/stairs/east,
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/centralstairwell)
"ayZ" = (
/obj/effect/floor_decal/borderfloorwhite{
dir = 8
@@ -15557,11 +15617,6 @@
},
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/centralstairwell)
"azF" = (
/obj/structure/stairs/east,
/obj/structure/railing,
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/centralstairwell)
"azG" = (
/obj/structure/sign/securearea{
desc = "A warning sign which reads 'CRUSH WARNING'.";
@@ -17901,10 +17956,6 @@
/obj/effect/floor_decal/steeldecal/steel_decals9,
/turf/simulated/floor/tiled/monotile,
/area/rnd/hallway)
"aDL" = (
/obj/structure/stairs/north,
/turf/simulated/floor/tiled,
/area/rnd/hallway)
"aDM" = (
/obj/structure/ladder/up,
/obj/effect/floor_decal/industrial/outline/yellow,
@@ -21710,10 +21761,6 @@
},
/turf/simulated/floor/tiled,
/area/engineering/atmos)
"aKq" = (
/obj/structure/stairs/north,
/turf/simulated/floor/tiled,
/area/engineering/atmos)
"aKr" = (
/obj/structure/railing,
/obj/effect/floor_decal/borderfloor{
@@ -21788,10 +21835,6 @@
/obj/item/weapon/beach_ball/holoball,
/turf/simulated/floor/plating,
/area/maintenance/lower/research)
"aKA" = (
/obj/structure/stairs/south,
/turf/simulated/floor/tiled,
/area/tether/surfacebase/surface_one_hall)
"aKB" = (
/obj/structure/railing{
dir = 8
@@ -29313,10 +29356,6 @@
/obj/structure/curtain/open/shower,
/turf/simulated/floor/plating,
/area/crew_quarters/sleep/maintDorm1)
"aZv" = (
/obj/structure/stairs/south,
/turf/simulated/floor/plating,
/area/maintenance/lower/atmos)
"aZw" = (
/obj/effect/decal/cleanable/blood,
/turf/simulated/floor/plating,
@@ -29522,14 +29561,6 @@
/obj/item/weapon/bedsheet/mimedouble,
/turf/simulated/floor/plating,
/area/crew_quarters/sleep/maintDorm1)
"baF" = (
/obj/structure/stairs/east,
/turf/simulated/floor/outdoors/grass/sif/virgo3b,
/area/tether/surfacebase/outside/outside1)
"baG" = (
/obj/structure/stairs/west,
/turf/simulated/floor/outdoors/grass/sif/virgo3b,
/area/tether/surfacebase/outside/outside1)
"baK" = (
/obj/structure/bed/chair/comfy/black{
dir = 8
@@ -31969,7 +32000,6 @@
/turf/simulated/floor/tiled/freezer,
/area/tether/surfacebase/security/brig/bathroom)
"emK" = (
/mob/living/simple_mob/animal/passive/mimepet,
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 4
},
@@ -31978,6 +32008,7 @@
d2 = 2;
icon_state = "1-2"
},
/mob/living/simple_mob/animal/passive/mimepet,
/turf/simulated/floor/carpet/bcarpet,
/area/tether/surfacebase/funny/mimeoffice)
"eow" = (
@@ -32191,6 +32222,10 @@
dir = 10
},
/area/looking_glass/lg_1)
"fgm" = (
/obj/structure/sign/biohazard,
/turf/simulated/wall,
/area/tether/surfacebase/funny/mimeoffice)
"fiP" = (
/obj/machinery/door/airlock/engineering{
name = "Civilian West Substation";
@@ -32314,6 +32349,15 @@
/obj/machinery/door/firedoor,
/turf/simulated/floor,
/area/tether/surfacebase/security/gasstorage)
"fDO" = (
/obj/structure/cable{
icon_state = "1-2"
},
/obj/machinery/door/airlock/maintenance/common,
/obj/machinery/door/firedoor/glass,
/obj/structure/catwalk,
/turf/simulated/floor/plating,
/area/maintenance/lower/trash_pit)
"fFb" = (
/obj/machinery/fitness/punching_bag/clown,
/turf/simulated/floor/plating,
@@ -36012,13 +36056,6 @@
},
/turf/simulated/floor/plating,
/area/tether/surfacebase/funny/mimeoffice)
"rww" = (
/obj/structure/stairs/south,
/obj/structure/railing{
dir = 8
},
/turf/simulated/floor/tiled,
/area/tether/surfacebase/security/lowerhall)
"rxq" = (
/obj/effect/floor_decal/borderfloor{
dir = 8
@@ -37507,13 +37544,6 @@
/obj/random/mre,
/turf/simulated/floor/carpet/bcarpet,
/area/tether/surfacebase/funny/mimeoffice)
"wRe" = (
/obj/structure/stairs/south,
/obj/structure/railing{
dir = 4
},
/turf/simulated/floor/tiled,
/area/tether/surfacebase/security/lowerhall)
"wUW" = (
/obj/effect/floor_decal/borderfloor{
dir = 8
@@ -37629,6 +37659,10 @@
},
/turf/simulated/floor/tiled,
/area/rnd/hallway)
"xik" = (
/obj/structure/sign/biohazard,
/turf/simulated/wall,
/area/maintenance/lower/trash_pit)
"xnn" = (
/obj/machinery/holoposter,
/turf/simulated/wall,
@@ -41082,7 +41116,7 @@ ajO
adK
aep
adK
aeV
adg
aeo
afq
adK
@@ -42300,9 +42334,9 @@ aad
aad
aad
baq
baF
baF
baF
auf
auf
auf
baq
aad
aad
@@ -43351,7 +43385,7 @@ akr
akx
akE
bdH
akX
ada
akN
aly
alN
@@ -44856,9 +44890,9 @@ aad
aad
aad
baq
baG
baG
baG
auI
auI
auI
baq
aad
aad
@@ -45626,7 +45660,7 @@ vSS
tTC
iqO
xVX
rww
adH
odn
aah
aah
@@ -45662,7 +45696,7 @@ abv
abm
ajW
aDf
aDL
akX
aDg
aFe
aDg
@@ -45768,7 +45802,7 @@ mvM
fLB
dMu
jIc
wRe
aeV
odn
aah
aah
@@ -45804,7 +45838,7 @@ abv
abm
ajX
aDf
aDL
akX
aDg
aFe
aDg
@@ -48086,7 +48120,7 @@ aHv
aIf
aIN
aIh
aKq
alr
aJI
aLC
acv
@@ -48228,7 +48262,7 @@ aHv
aCl
aIO
aIh
aKq
alr
aJI
aLC
aMm
@@ -48402,7 +48436,7 @@ aHx
aTZ
aTZ
aTZ
aZv
asw
aVn
aah
aah
@@ -48544,7 +48578,7 @@ aYm
aHy
aYF
aTZ
aZv
asw
aVn
aah
aah
@@ -49932,7 +49966,7 @@ aBL
aBb
aCy
aIh
aKq
alr
aJI
aJI
aMs
@@ -50074,7 +50108,7 @@ aBQ
aCp
aCz
aIh
aKq
alr
aJI
aJI
aMs
@@ -51068,7 +51102,7 @@ agM
ayG
aJd
ayG
aKA
aqk
aLg
aLM
aMx
@@ -51210,7 +51244,7 @@ agM
aeM
aJd
ayG
aKA
aqk
aLg
aLM
aLM
@@ -52859,8 +52893,8 @@ auq
ady
ayd
aff
ayY
azF
aaI
acA
axP
aeF
axK
@@ -53019,7 +53053,7 @@ ahq
ajP
akY
anq
aaU
xik
gnH
aaU
aaU
@@ -53161,7 +53195,7 @@ ahr
ajR
alu
anr
abJ
fDO
abM
abJ
abJ
@@ -53303,7 +53337,7 @@ ahz
ajZ
alD
anL
lry
fgm
ruj
lry
lry
@@ -53585,7 +53619,7 @@ bbj
aaU
aaU
aaU
aaU
xik
aBo
lry
tHb
+124 -160
View File
@@ -1014,6 +1014,12 @@
dir = 8
},
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/uppernorthstairwell{
name = "\improper North Medical Stairwell"
})
"abv" = (
/obj/structure/stairs/spawner/east,
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/uppernorthstairwell{
name = "\improper North Medical Stairwell"
})
@@ -1112,6 +1118,13 @@
},
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/recoveryward)
"abC" = (
/obj/structure/railing,
/obj/structure/stairs/spawner/east,
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/uppernorthstairwell{
name = "\improper North Medical Stairwell"
})
"abD" = (
/obj/machinery/door/firedoor/glass/hidden/steel{
dir = 1
@@ -1371,11 +1384,12 @@
name = "\improper North Medical Stairwell"
})
"abW" = (
/obj/structure/stairs/east,
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/uppernorthstairwell{
name = "\improper North Medical Stairwell"
})
/obj/structure/railing{
dir = 1
},
/obj/structure/stairs/spawner/east,
/turf/simulated/floor/tiled,
/area/tether/surfacebase/security/middlehall)
"abX" = (
/obj/effect/floor_decal/borderfloorwhite{
dir = 4
@@ -1654,12 +1668,10 @@
/turf/simulated/floor/plating,
/area/tether/surfacebase/medical/resleeving)
"acw" = (
/obj/structure/stairs/east,
/obj/structure/railing,
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/uppernorthstairwell{
name = "\improper North Medical Stairwell"
})
/obj/structure/stairs/spawner/east,
/turf/simulated/floor/tiled,
/area/tether/surfacebase/security/middlehall)
"acx" = (
/obj/machinery/vending/medical{
dir = 8
@@ -5087,12 +5099,12 @@
/turf/simulated/floor/tiled,
/area/tether/surfacebase/security/middlehall)
"aib" = (
/obj/structure/stairs/east,
/obj/structure/railing{
dir = 1
/obj/structure/window/reinforced{
dir = 4
},
/obj/structure/stairs/spawner/south,
/turf/simulated/floor/tiled,
/area/tether/surfacebase/security/middlehall)
/area/tether/surfacebase/public_garden_two)
"aic" = (
/obj/effect/floor_decal/borderfloorblack{
dir = 8
@@ -5885,10 +5897,9 @@
/turf/simulated/floor/tiled,
/area/tether/surfacebase/security/middlehall)
"aji" = (
/obj/structure/stairs/east,
/obj/structure/railing,
/turf/simulated/floor/tiled,
/area/tether/surfacebase/security/middlehall)
/obj/structure/stairs/spawner/south,
/turf/simulated/floor/virgo3b,
/area/tether/surfacebase/outside/outside2)
"ajj" = (
/obj/effect/floor_decal/borderfloorblack{
dir = 10
@@ -6974,10 +6985,10 @@
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/uppersouthstairwell)
"akV" = (
/obj/structure/stairs/west,
/obj/structure/railing{
dir = 1
},
/obj/structure/stairs/spawner/west,
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/uppersouthstairwell)
"akW" = (
@@ -7494,7 +7505,7 @@
/turf/simulated/floor/tiled/techfloor,
/area/tether/surfacebase/medical/morgue)
"alM" = (
/obj/structure/stairs/west,
/obj/structure/stairs/spawner/west,
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/uppersouthstairwell)
"alN" = (
@@ -10858,12 +10869,9 @@
/turf/simulated/floor/tiled,
/area/tether/surfacebase/public_garden_two)
"arq" = (
/obj/structure/stairs/south,
/obj/structure/window/reinforced{
dir = 4
},
/obj/structure/stairs/spawner/north,
/turf/simulated/floor/tiled,
/area/tether/surfacebase/public_garden_two)
/area/tether/surfacebase/north_staires_two)
"arr" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/effect/floor_decal/borderfloor{
@@ -12551,9 +12559,9 @@
/turf/simulated/floor/plating,
/area/maintenance/asmaint2)
"auh" = (
/obj/structure/stairs/south,
/turf/simulated/floor/virgo3b,
/area/tether/surfacebase/outside/outside2)
/obj/structure/stairs/spawner/north,
/turf/simulated/floor/tiled/dark,
/area/bridge_hallway)
"aui" = (
/obj/machinery/light,
/obj/effect/floor_decal/borderfloor{
@@ -14740,6 +14748,13 @@
},
/turf/simulated/floor/plating,
/area/maintenance/asmaint2)
"ayo" = (
/obj/structure/railing{
dir = 4
},
/obj/structure/stairs/spawner/north,
/turf/simulated/floor/tiled/dark,
/area/bridge_hallway)
"ayp" = (
/obj/effect/catwalk_plated/dark,
/turf/simulated/open,
@@ -15722,9 +15737,9 @@
/turf/simulated/open,
/area/tether/surfacebase/north_staires_two)
"aAE" = (
/obj/structure/stairs/north,
/obj/structure/stairs/spawner/south,
/turf/simulated/floor/tiled,
/area/tether/surfacebase/north_staires_two)
/area/rnd/staircase/secondfloor)
"aAF" = (
/obj/structure/railing{
dir = 8
@@ -16311,16 +16326,13 @@
/turf/simulated/floor/tiled/techmaint,
/area/tether/surfacebase/surface_two_hall)
"aBT" = (
/obj/structure/stairs/north,
/turf/simulated/floor/tiled/dark,
/area/bridge_hallway)
/obj/structure/stairs/spawner/east,
/turf/simulated/floor/tiled/techmaint,
/area/tether/surfacebase/east_stairs_two)
"aBU" = (
/obj/structure/stairs/north,
/obj/structure/railing{
dir = 4
},
/turf/simulated/floor/tiled/dark,
/area/bridge_hallway)
/obj/structure/stairs/spawner/west,
/turf/simulated/floor/tiled,
/area/tether/surfacebase/southhall)
"aBV" = (
/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 4
@@ -16895,7 +16907,7 @@
/turf/simulated/floor/tiled/techmaint,
/area/tether/surfacebase/surface_two_hall)
"aCU" = (
/obj/structure/stairs/west,
/obj/structure/stairs/spawner/west,
/turf/simulated/floor/tiled/techfloor,
/area/chapel/main)
"aCV" = (
@@ -22898,6 +22910,19 @@
/obj/random/trash_pile,
/turf/simulated/floor/plating,
/area/maintenance/lower/atmos)
"aOv" = (
/obj/structure/railing{
dir = 1
},
/obj/structure/railing{
dir = 8
},
/obj/structure/window/basic{
dir = 1
},
/obj/structure/stairs/spawner/north,
/turf/simulated/floor/tiled/dark,
/area/rnd/outpost/xenobiology/outpost_slimepens)
"aOw" = (
/obj/machinery/light_switch{
dir = 4;
@@ -23002,6 +23027,29 @@
},
/turf/simulated/floor/tiled/techmaint,
/area/tether/surfacebase/east_stairs_two)
"aOJ" = (
/obj/structure/railing{
dir = 1
},
/obj/structure/window/basic{
dir = 1
},
/obj/structure/stairs/spawner/north,
/turf/simulated/floor/tiled/dark,
/area/rnd/outpost/xenobiology/outpost_slimepens)
"aOK" = (
/obj/structure/railing{
dir = 1
},
/obj/structure/railing{
dir = 4
},
/obj/structure/window/basic{
dir = 1
},
/obj/structure/stairs/spawner/north,
/turf/simulated/floor/tiled/dark,
/area/rnd/outpost/xenobiology/outpost_slimepens)
"aOL" = (
/obj/effect/floor_decal/corner_techfloor_grid{
dir = 9
@@ -24106,10 +24154,6 @@
/obj/random/tool,
/turf/simulated/floor/plating,
/area/maintenance/asmaint2)
"aRk" = (
/obj/structure/stairs/south,
/turf/simulated/floor/tiled,
/area/rnd/staircase/secondfloor)
"aRl" = (
/obj/machinery/requests_console{
department = "Science";
@@ -28197,10 +28241,6 @@
},
/turf/simulated/floor/tiled/techmaint,
/area/tether/surfacebase/east_stairs_two)
"aZv" = (
/obj/structure/stairs/east,
/turf/simulated/floor/tiled/techmaint,
/area/tether/surfacebase/east_stairs_two)
"aZC" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
@@ -31382,13 +31422,6 @@
/obj/item/device/flashlight/lamp/green,
/turf/simulated/floor/wood,
/area/tether/surfacebase/reading_room)
"bhJ" = (
/obj/structure/railing{
dir = 4
},
/obj/structure/catwalk,
/turf/simulated/floor/plating,
/area/tether/surfacebase/fish_farm)
"bhK" = (
/obj/machinery/door/blast/regular{
density = 0;
@@ -33384,10 +33417,6 @@
temperature = 80
},
/area/tcommsat/chamber)
"blF" = (
/obj/structure/stairs/west,
/turf/simulated/floor/tiled,
/area/tether/surfacebase/southhall)
"blG" = (
/turf/simulated/floor/tiled,
/area/tether/surfacebase/southhall)
@@ -33568,42 +33597,6 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/turf/simulated/floor/tiled/dark,
/area/rnd/outpost/xenobiology/outpost_slimepens)
"blW" = (
/obj/structure/stairs/north,
/obj/structure/railing{
dir = 1
},
/obj/structure/railing{
dir = 8
},
/obj/structure/window/basic{
dir = 1
},
/turf/simulated/floor/tiled/dark,
/area/rnd/outpost/xenobiology/outpost_slimepens)
"blX" = (
/obj/structure/stairs/north,
/obj/structure/railing{
dir = 1
},
/obj/structure/window/basic{
dir = 1
},
/turf/simulated/floor/tiled/dark,
/area/rnd/outpost/xenobiology/outpost_slimepens)
"blY" = (
/obj/structure/stairs/north,
/obj/structure/railing{
dir = 1
},
/obj/structure/railing{
dir = 4
},
/obj/structure/window/basic{
dir = 1
},
/turf/simulated/floor/tiled/dark,
/area/rnd/outpost/xenobiology/outpost_slimepens)
"blZ" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/tiled/dark,
@@ -34202,14 +34195,6 @@
/obj/machinery/door/airlock/maintenance/medical,
/turf/simulated/floor/tiled/techfloor,
/area/tether/surfacebase/medical/breakroom)
"bpL" = (
/obj/effect/decal/cleanable/filth,
/obj/item/weapon/bone/skull,
/mob/living/simple_mob/vore/aggressive/rat{
ai_holder_type = /datum/ai_holder/simple_mob/retaliate
},
/turf/simulated/floor/water/indoors,
/area/tether/surfacebase/fish_farm)
"bpO" = (
/obj/structure/railing{
dir = 4
@@ -34380,14 +34365,6 @@
},
/turf/simulated/floor/tiled/techfloor,
/area/maintenance/lower/north)
"fFF" = (
/obj/structure/railing{
dir = 4
},
/obj/structure/catwalk,
/obj/effect/decal/cleanable/filth,
/turf/simulated/floor/plating,
/area/tether/surfacebase/fish_farm)
"fIS" = (
/obj/effect/floor_decal/corner/paleblue/diagonal,
/obj/structure/table/glass,
@@ -34399,14 +34376,6 @@
},
/turf/simulated/floor/plating,
/area/tether/surfacebase/fish_farm)
"fWy" = (
/obj/structure/railing{
dir = 1
},
/obj/structure/catwalk,
/obj/structure/closet/crate/trashcart,
/turf/simulated/floor/plating,
/area/tether/surfacebase/fish_farm)
"glx" = (
/obj/structure/cable/orange{
d1 = 16;
@@ -34665,15 +34634,15 @@
/obj/item/weapon/flame/lighter/zippo/moff,
/turf/simulated/floor/plating,
/area/tether/surfacebase/funny/hideyhole)
"sKR" = (
/obj/structure/disposalpipe/broken,
/obj/effect/decal/cleanable/filth,
/obj/effect/landmark/teleplumb_exit,
/turf/simulated/floor/water/indoors,
"swg" = (
/obj/structure/railing,
/obj/structure/catwalk,
/obj/structure/railing{
dir = 8
},
/turf/simulated/floor/plating,
/area/tether/surfacebase/fish_farm)
"sLx" = (
/obj/effect/decal/cleanable/filth,
/obj/item/weapon/bone,
/obj/effect/floor_decal/techfloor{
dir = 4
},
@@ -34765,7 +34734,6 @@
dir = 8
},
/obj/structure/catwalk,
/obj/effect/decal/cleanable/filth,
/turf/simulated/floor/plating,
/area/tether/surfacebase/fish_farm)
"uHy" = (
@@ -34798,10 +34766,6 @@
},
/turf/simulated/floor/water/indoors,
/area/tether/surfacebase/fish_farm)
"vje" = (
/obj/structure/sign/biohazard,
/turf/simulated/wall,
/area/tether/surfacebase/fish_farm)
"voE" = (
/obj/effect/floor_decal/corner_techfloor_grid,
/obj/effect/floor_decal/corner_techfloor_grid{
@@ -38314,7 +38278,7 @@ aac
arl
asq
arl
auh
aji
aac
aac
adt
@@ -40157,7 +40121,7 @@ anf
aog
apq
aqw
arq
aib
ast
atG
ass
@@ -40168,9 +40132,9 @@ adt
adt
adt
azs
awN
bhJ
fFF
ayw
ayw
ayw
azs
adt
adt
@@ -40310,10 +40274,10 @@ adt
adt
adt
azs
axO
bpL
sKR
vje
ayw
ayw
ayw
azs
adt
adt
adt
@@ -40384,7 +40348,7 @@ bfL
bkQ
blo
blM
blW
aOv
bme
bfL
bfL
@@ -40452,7 +40416,7 @@ adt
adt
adt
azs
axO
swg
sLx
uFL
azs
@@ -40526,7 +40490,7 @@ bkJ
bkR
blp
blN
blX
aOJ
bfL
bfL
bfL
@@ -40668,7 +40632,7 @@ bfL
bkS
blq
blO
blY
aOK
bmf
bfL
bfL
@@ -40881,7 +40845,7 @@ azs
awN
flk
gGm
vje
azs
aBd
aCn
aDk
@@ -41022,7 +40986,7 @@ adt
azs
axO
viY
fWy
bOW
azs
azq
aAw
@@ -42043,7 +42007,7 @@ aOg
aOW
aPE
aOY
aRk
aAE
aRM
aSv
aHE
@@ -42185,7 +42149,7 @@ aOh
aOX
aOY
aOY
aRk
aAE
aRM
aty
aug
@@ -43414,8 +43378,8 @@ aeS
afG
agy
ahn
aib
aji
abW
acw
ahn
all
amo
@@ -45424,7 +45388,7 @@ aoO
ayW
azA
ayW
aAE
arq
aBk
aBP
aCC
@@ -45566,7 +45530,7 @@ ayE
ayW
azA
ayW
aAE
arq
aBl
aBQ
aCD
@@ -46988,7 +46952,7 @@ azG
aAi
aAH
aAJ
aBT
auh
aCI
aDz
aEi
@@ -47130,7 +47094,7 @@ azH
aAj
aAI
aAJ
aBU
ayo
aCJ
aDA
aBo
@@ -47668,8 +47632,8 @@ aab
aab
aab
aar
abW
acw
abv
abC
acx
aaH
aaO
@@ -48728,8 +48692,8 @@ aXi
aXP
aYz
aUc
aZv
aZv
aBT
aBT
aNo
aLX
aLX
@@ -50464,8 +50428,8 @@ mDn
ekH
glx
blh
blF
blF
aBU
aBU
blh
abn
aab
File diff suppressed because it is too large Load Diff
+24 -24
View File
@@ -5323,7 +5323,7 @@
/turf/simulated/floor/tiled,
/area/gateway/prep_room)
"ajo" = (
/obj/structure/stairs/west,
/obj/structure/stairs/spawner/west,
/turf/simulated/floor/tiled,
/area/hallway/station/atrium)
"ajp" = (
@@ -7948,6 +7948,10 @@
/obj/machinery/door/firedoor/glass,
/turf/simulated/floor,
/area/engineering/hallway)
"aou" = (
/obj/structure/stairs/spawner/west,
/turf/simulated/floor/tiled,
/area/engineering/workshop)
"aov" = (
/obj/structure/disposalpipe/trunk{
dir = 4
@@ -7977,6 +7981,14 @@
},
/turf/simulated/wall/r_wall,
/area/engineering/hallway)
"aoz" = (
/obj/structure/stairs/spawner/east,
/turf/simulated/floor/tiled,
/area/engineering/foyer)
"aoA" = (
/obj/structure/stairs/spawner/south,
/turf/simulated/floor/tiled,
/area/tether/station/stairs_one)
"aoB" = (
/obj/effect/floor_decal/steeldecal/steel_decals7{
dir = 9
@@ -8007,6 +8019,10 @@
/obj/structure/table,
/turf/simulated/floor/plating,
/area/maintenance/abandonedlibrary)
"aoD" = (
/obj/structure/stairs/spawner/west,
/turf/simulated/floor,
/area/vacant/vacant_restaurant_lower)
"aoE" = (
/obj/random/junk,
/obj/effect/decal/cleanable/cobweb,
@@ -10693,10 +10709,6 @@
},
/turf/simulated/floor,
/area/maintenance/station/spacecommandmaint)
"auk" = (
/obj/structure/stairs/west,
/turf/simulated/floor/tiled,
/area/engineering/workshop)
"aul" = (
/obj/effect/floor_decal/steeldecal/steel_decals_central1{
dir = 4
@@ -13228,10 +13240,6 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/tiled/steel_grid,
/area/tether/station/stairs_one)
"ayy" = (
/obj/structure/stairs/south,
/turf/simulated/floor/tiled,
/area/tether/station/stairs_one)
"ayz" = (
/obj/structure/bed/chair/comfy/brown{
dir = 1
@@ -19366,10 +19374,6 @@
},
/turf/simulated/floor/tiled,
/area/engineering/foyer)
"bgF" = (
/obj/structure/stairs/east,
/turf/simulated/floor/tiled,
/area/engineering/foyer)
"bhc" = (
/obj/structure/extinguisher_cabinet{
dir = 4;
@@ -20708,10 +20712,6 @@
},
/turf/simulated/floor,
/area/vacant/vacant_restaurant_lower)
"bZT" = (
/obj/structure/stairs/west,
/turf/simulated/floor,
/area/vacant/vacant_restaurant_lower)
"bZZ" = (
/obj/structure/bed/chair,
/obj/machinery/atmospherics/unary/vent_scrubber/on,
@@ -29668,8 +29668,8 @@ bZv
bZv
bZH
bYP
bZT
bZT
aoD
aoD
awu
awu
awu
@@ -30497,7 +30497,7 @@ art
avh
aen
atQ
auk
aou
bZi
aJx
aJx
@@ -31655,7 +31655,7 @@ aws
fjd
oFB
axR
ayy
aoA
aws
bQa
aws
@@ -31797,7 +31797,7 @@ aws
iIr
lCi
axR
ayy
aoA
aws
bQa
aws
@@ -32213,8 +32213,8 @@ aoJ
ams
aQX
bYt
bgF
bgF
aoz
aoz
aYg
agU
acp
+38 -47
View File
@@ -2481,7 +2481,7 @@
/turf/simulated/wall,
/area/maintenance/evahallway)
"dB" = (
/obj/structure/stairs/north,
/obj/structure/stairs/spawner/north,
/turf/simulated/floor/tiled,
/area/tether/exploration/staircase)
"dC" = (
@@ -2894,11 +2894,11 @@
/obj/effect/floor_decal/techfloor{
dir = 8
},
/obj/structure/stairs/north,
/obj/structure/stairs/spawner/north,
/turf/simulated/floor/bluegrid,
/area/ai_upload)
"el" = (
/obj/structure/stairs/north,
/obj/structure/stairs/spawner/north,
/turf/simulated/floor/bluegrid,
/area/ai_upload)
"em" = (
@@ -3100,7 +3100,7 @@
/obj/effect/floor_decal/techfloor{
dir = 4
},
/obj/structure/stairs/north,
/obj/structure/stairs/spawner/north,
/turf/simulated/floor/bluegrid,
/area/ai_upload)
"eB" = (
@@ -3615,14 +3615,9 @@
/turf/simulated/floor/tiled/techfloor,
/area/ai_upload)
"fo" = (
/obj/effect/floor_decal/techfloor{
dir = 4
},
/obj/machinery/atmospherics/pipe/zpipe/up/supply{
dir = 8
},
/turf/simulated/floor/bluegrid,
/area/ai_upload)
/obj/structure/stairs/spawner/south,
/turf/simulated/floor/tiled,
/area/security/brig/visitation)
"fp" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
@@ -3767,9 +3762,9 @@
/turf/simulated/floor/tiled,
/area/tether/exploration/staircase)
"fB" = (
/obj/structure/stairs/south,
/obj/structure/stairs/spawner/west,
/turf/simulated/floor/tiled,
/area/security/brig/visitation)
/area/security/security_cell_hallway)
"fC" = (
/obj/effect/floor_decal/borderfloor{
dir = 4
@@ -5270,9 +5265,13 @@
/turf/simulated/floor/tiled,
/area/tether/exploration/staircase)
"hU" = (
/obj/structure/stairs/west,
/turf/simulated/floor/tiled,
/area/security/security_cell_hallway)
/obj/structure/shuttle/engine/propulsion{
dir = 8;
icon_state = "propulsion_l"
},
/turf/space,
/turf/simulated/shuttle/plating/airless/carry,
/area/shuttle/large_escape_pod1)
"hV" = (
/turf/simulated/floor/tiled,
/area/security/security_cell_hallway)
@@ -9093,8 +9092,7 @@
/area/ai_upload_foyer)
"nk" = (
/obj/structure/shuttle/engine/propulsion{
dir = 8;
icon_state = "propulsion_l"
dir = 8
},
/turf/space,
/turf/simulated/shuttle/plating/airless/carry,
@@ -9239,13 +9237,6 @@
/turf/simulated/floor/plating,
/area/storage/tech)
"nx" = (
/obj/structure/shuttle/engine/propulsion{
dir = 8
},
/turf/space,
/turf/simulated/shuttle/plating/airless/carry,
/area/shuttle/large_escape_pod1)
"ny" = (
/obj/structure/shuttle/engine/propulsion{
dir = 8;
icon_state = "propulsion_r"
@@ -9253,6 +9244,10 @@
/turf/space,
/turf/simulated/shuttle/plating/airless/carry,
/area/shuttle/large_escape_pod1)
"ny" = (
/obj/structure/stairs/spawner/north,
/turf/simulated/floor/tiled,
/area/tether/station/stairs_two)
"nz" = (
/obj/machinery/light_switch{
dir = 8;
@@ -9356,6 +9351,10 @@
},
/turf/simulated/floor/tiled,
/area/hallway/station/starboard)
"nK" = (
/obj/structure/stairs/spawner/west,
/turf/simulated/floor/tiled/white,
/area/medical/surgery_hallway)
"nM" = (
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
@@ -12368,10 +12367,6 @@
},
/turf/simulated/floor/tiled/dark,
/area/ai_monitored/storage/eva)
"un" = (
/obj/structure/stairs/north,
/turf/simulated/floor/tiled,
/area/tether/station/stairs_two)
"uo" = (
/obj/effect/floor_decal/borderfloor{
dir = 8
@@ -14255,7 +14250,7 @@
/turf/simulated/floor/tiled/white,
/area/medical/biostorage)
"xQ" = (
/obj/structure/stairs/west,
/turf/simulated/sky/virgo3b/west,
/turf/simulated/floor/tiled/white,
/area/medical/biostorage)
"xR" = (
@@ -15309,10 +15304,6 @@
},
/turf/simulated/floor/wood,
/area/medical/surgery_hallway)
"Ak" = (
/obj/structure/stairs/west,
/turf/simulated/floor/tiled/white,
/area/medical/surgery_hallway)
"Al" = (
/obj/effect/floor_decal/borderfloorwhite/corner{
dir = 4
@@ -27836,7 +27827,7 @@ af
XR
UT
BV
fB
fo
fX
gw
gw
@@ -27978,7 +27969,7 @@ af
bN
ep
BV
fB
fo
fX
gw
gw
@@ -28003,7 +27994,7 @@ rO
sw
tc
sw
un
ny
uP
vn
vN
@@ -28145,7 +28136,7 @@ rP
sw
tc
sw
un
ny
uP
vo
eP
@@ -29545,8 +29536,8 @@ cR
aS
gW
gV
hU
hU
fB
fB
aj
ja
kj
@@ -30858,8 +30849,8 @@ ze
zt
zL
xb
Ak
Ak
nK
nK
AK
Ba
Bv
@@ -35804,11 +35795,11 @@ hl
DI
RX
DL
hU
nk
nk
nk
nx
nx
nx
ny
oY
sW
ef
@@ -35929,7 +35920,7 @@ ac
ac
dZ
eA
fo
fS
fS
gr
dZ
-1
View File
@@ -1876,7 +1876,6 @@
"IY" = (
/obj/effect/step_trigger/teleporter/to_underdark{
dir = 4;
icon_state = "";
pixel_x = -16
},
/turf/simulated/floor/outdoors/grass/sif/virgo3b,
+4 -4
View File
@@ -72,8 +72,8 @@
teleport_y = src.y
/obj/effect/step_trigger/teleporter/to_underdark
icon = 'icons/obj/stairs.dmi'
icon_state = "stairs"
icon = 'icons/obj/structures/multiz.dmi'
icon_state = "stair"
invisibility = 0
/obj/effect/step_trigger/teleporter/to_underdark/Initialize()
. = ..()
@@ -85,8 +85,8 @@
teleport_z = Z.z
/obj/effect/step_trigger/teleporter/from_underdark
icon = 'icons/obj/stairs.dmi'
icon_state = "stairs"
icon = 'icons/obj/structures/multiz.dmi'
icon_state = "stair"
invisibility = 0
/obj/effect/step_trigger/teleporter/from_underdark/Initialize()
. = ..()
+5 -4
View File
@@ -2017,7 +2017,6 @@
#include "code\modules\clothing\under\jobs\engineering.dm"
#include "code\modules\clothing\under\jobs\medsci.dm"
#include "code\modules\clothing\under\jobs\security.dm"
#include "code\modules\clothing\under\jobs\security_vr.dm"
#include "code\modules\clothing\under\xenos\seromi.dm"
#include "code\modules\clothing\under\xenos\vox.dm"
#include "code\modules\customitems\item_spawning.dm"
@@ -2653,6 +2652,8 @@
#include "code\modules\mob\living\carbon\human\species\station\traits_vr\neutral.dm"
#include "code\modules\mob\living\carbon\human\species\station\traits_vr\positive.dm"
#include "code\modules\mob\living\carbon\human\species\station\traits_vr\trait.dm"
#include "code\modules\mob\living\carbon\human\species\station\traits_vr\weaver_objs.dm"
#include "code\modules\mob\living\carbon\human\species\station\traits_vr\weaver_recipies.dm"
#include "code\modules\mob\living\carbon\human\species\virtual_reality\avatar.dm"
#include "code\modules\mob\living\carbon\human\species\virtual_reality\opaque_form.dm"
#include "code\modules\mob\living\carbon\human\species\xenomorphs\alien_powers.dm"
@@ -3024,11 +3025,12 @@
#include "code\modules\multiz\basic.dm"
#include "code\modules\multiz\hoist.dm"
#include "code\modules\multiz\ladder_assembly_vr.dm"
#include "code\modules\multiz\ladders.dm"
#include "code\modules\multiz\ladders_vr.dm"
#include "code\modules\multiz\movement.dm"
#include "code\modules\multiz\movement_vr.dm"
#include "code\modules\multiz\pipes.dm"
#include "code\modules\multiz\structures.dm"
#include "code\modules\multiz\structures_vr.dm"
#include "code\modules\multiz\stairs.dm"
#include "code\modules\multiz\turf.dm"
#include "code\modules\multiz\zshadow.dm"
#include "code\modules\nifsoft\nif.dm"
@@ -3684,7 +3686,6 @@
#include "code\modules\vore\hook-defs_vr.dm"
#include "code\modules\vore\trycatch_vr.dm"
#include "code\modules\vore\appearance\preferences_vr.dm"
#include "code\modules\vore\appearance\spider_taur_powers_vr.dm"
#include "code\modules\vore\appearance\sprite_accessories_taur_vr.dm"
#include "code\modules\vore\appearance\sprite_accessories_vr.dm"
#include "code\modules\vore\appearance\update_icons_vr.dm"