Merge remote-tracking branch 'VOREStation/master' into upstream-merge-7791
@@ -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/////
|
||||
|
||||
@@ -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()
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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)
|
||||
|
||||
@@ -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 won’t 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 Tomato’s 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>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
@@ -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.
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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~
|
||||
@@ -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
|
||||
|
||||
@@ -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."
|
||||
|
Before Width: | Height: | Size: 727 KiB After Width: | Height: | Size: 727 KiB |
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 111 KiB After Width: | Height: | Size: 110 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 8.4 KiB After Width: | Height: | Size: 8.4 KiB |
|
After Width: | Height: | Size: 14 KiB |
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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()
|
||||
. = ..()
|
||||
|
||||
@@ -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"
|
||||
|
||||