Merge branch 'master' of https://github.com/tgstation/-tg-station into thespookisreal

Conflicts:
	code/modules/events/carp_migration.dm
This commit is contained in:
Miauw62
2014-10-25 11:29:07 +00:00
574 changed files with 15270 additions and 12037 deletions

View File

@@ -14,7 +14,11 @@ But first we want to make it clear how you can contribute, if contributing is a
At /tg/station we do not have a list of goals and features to add, we instead allow freedom for contributors to suggest and create their ideas for the game. That does not mean we aren't determined to squash bugs, which unfortunately pop up a lot due to the deep complexity of the game. Here are some useful getting started guides, if you want to contribute or if you want to know what challenges you can tackle with zero knowledge about the game's code structure.
We have a [list of guides on the wiki](http://www.tgstation13.org/wiki/index.php/Guides#Development_and_Contribution_Guides) which will help you get started contributing to /tg/station with git and Dream Maker. For beginners, it is recommended you work on small projects, at first. There is an easy list of issues which are [contributor friendly, here](https://github.com/tgstation/-tg-station/issues?labels=Contributor+Friendly&page=1&state=open).
If you want to contribute the first thing you'll need to do is [set up Git](http://tgstation13.org/wiki/Setting_up_git) so you can download the source code.
We have a [list of guides on the wiki](http://www.tgstation13.org/wiki/index.php/Guides#Development_and_Contribution_Guides) which will help you get started contributing to /tg/station with git and Dream Maker. For beginners, it is recommended you work on small projects, at first. If you need help learning to program in BYOND check out this [repository of resources](http://www.byond.com/developer/articles/resources).
There is an easy list of issues which are [contributor friendly, here](https://github.com/tgstation/-tg-station/issues?labels=Contributor+Friendly&page=1&state=open).
You can of course, as always, ask for help at [#coderbus](irc://irc.rizon.net/coderbus) on irc.rizon.net. We are just here to have fun and help so do not expect professional support please.
@@ -86,6 +90,8 @@ var/path_type = "/obj/item/weapon/baseball_bat"
There is no strict process when it comes to merging pull requests, pull requests will sometimes take a while before they are looked at by a maintainer, the bigger the change the more time it will take before they are accepted into the code. Every team member is a volunteer who is giving up their own time to help maintain and contribute, so please be nice. Here are some helpful ways to make it easier for you and for the maintainer when making a pull request.
* Make sure your pull request complies to the requirements outlined in [this guide](http://tgstation13.org/wiki/Getting_Your_Pull_Accepted)
* You are going to be expected to document all your changes in the pull request, failing to do so will mean delaying it as we will have to question why you made the change. On the other hand you can speed up the process by making the pull request readable and easy to understand, with diagrams or before/after data.
* We ask that you use the changelog system to document your change, this prevents our players from being caught unaware by changes - you can find more information about this here http://tgstation13.org/wiki/Guide_to_Changelogs

View File

@@ -5,18 +5,15 @@
**Website:** http://www.tgstation13.org <BR>
**Code:** https://github.com/tgstation/-tg-station <BR>
**Wiki** http://tgstation13.org/wiki/Main_Page<BR>
**IRC:** irc://irc.rizon.net/coderbus <BR>
##DOWNLOADING
There are a number of ways to download the source code. Some are described here, an alternative all-inclusive guide is also located at http://www.tgstation13.org/wiki/Downloading_the_source_code
Option 1: Download the source code as a zip by clicking the ZIP button in the
code tab of https://github.com/tgstation/-tg-station
(note: this will use a lot of bandwidth if you wish to update and is a lot of
hassle if you want to make any changes at all, so it's not recommended.)
(Options 2/3): Install Git-scm from here first: http://git-scm.com/download/win
Option 1:
Follow this: http://www.tgstation13.org/wiki/Setting_up_git
Option 2:
Install GitHub::windows from http://windows.github.com/
@@ -24,10 +21,10 @@ It handles most of the setup and configuraton of Git for you.
Then you simply search for the -tg-station repository and click the big clone
button.
Option 3:
Follow this: http://www.tgstation13.org/wiki/Setting_up_git
(It's recommended that you use git-scm, as above, rather than the git CLI
suggested by the guide)
Option 3: Download the source code as a zip by clicking the ZIP button in the
code tab of https://github.com/tgstation/-tg-station
(note: this will use a lot of bandwidth if you wish to update and is a lot of
hassle if you want to make any changes at all, so it's not recommended.)
##INSTALLATION
@@ -97,6 +94,8 @@ All maps have their own code file that is in the base of the _maps directory. In
If you want to load a different map, just open the corresponding map's code file in Dream Maker, make sure all of the other map code files are unticked in the file tree, in the left side of the screen, and then make sure the map code file you want is ticked.
Anytime you want to make changes to a map it's imperative you use the [Map Merging tools](http://tgstation13.org/wiki/Map_Merger)
##AWAY MISSIONS
/tg/station supports loading away missions however they are disabled by default.

View File

@@ -1,6 +1,6 @@
"aa" = (/turf/space,/area/space)
"ab" = (/turf/simulated/wall/r_wall,/area/awaymission/academy/headmaster)
"ac" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/floor/plating,/area/awaymission/academy/headmaster)
"ac" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/headmaster)
"ad" = (/obj/structure/filingcabinet/filingcabinet,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
"ae" = (/obj/structure/computerframe{anchored = 1},/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
"af" = (/obj/structure/table/reinforced,/obj/item/weapon/pen/red,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
@@ -92,7 +92,7 @@
"bN" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/headmaster)
"bO" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/academy/headmaster)
"bP" = (/obj/effect/decal/cleanable/cobweb2,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/headmaster)
"bQ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating,/area/awaymission/academy/headmaster)
"bQ" = (/obj/structure/table/reinforced,/obj/item/device/laser_pointer/upgraded,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
"bR" = (/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/academy/headmaster)
"bS" = (/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/academy/headmaster)
"bT" = (/obj/machinery/autolathe,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor,/area/awaymission/academy/classrooms)
@@ -106,7 +106,7 @@
"cb" = (/obj/structure/table,/obj/item/weapon/lighter/random,/turf/simulated/floor,/area/awaymission/academy/headmaster)
"cc" = (/turf/simulated/floor{icon_state = "dark"},/area/awaymission/academy/headmaster)
"cd" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/headmaster)
"ce" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/awaymission/academy/headmaster)
"ce" = (/obj/item/seeds/eggyseed,/obj/machinery/hydroponics/constructable,/turf/simulated/floor,/area/awaymission/academy/classrooms)
"cf" = (/obj/machinery/portable_atmospherics/canister/toxins,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/academy/headmaster)
"cg" = (/obj/structure/stool,/obj/machinery/light/small{dir = 4},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/academy/headmaster)
"ch" = (/obj/structure/table,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor{icon_state = "floorgrime"},/area/awaymission/academy/classrooms)
@@ -148,7 +148,7 @@
"cR" = (/obj/machinery/light{dir = 8},/obj/machinery/portable_atmospherics/pump,/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/headmaster)
"cS" = (/obj/structure/closet/crate/internals,/obj/item/weapon/tank/oxygen,/obj/item/weapon/tank/oxygen/red,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/academy/headmaster)
"cT" = (/obj/structure/closet/crate,/obj/item/weapon/crowbar/red,/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/headmaster)
"cU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/cable,/turf/simulated/floor/plating,/area/awaymission/academy/headmaster)
"cU" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/headmaster)
"cV" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor,/area/awaymission/academy/classrooms)
"cW" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor,/area/awaymission/academy/classrooms)
"cX" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{icon_state = "floorgrime"},/area/awaymission/academy/classrooms)
@@ -158,7 +158,7 @@
"db" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
"dc" = (/turf/simulated/floor/greengrid,/area/awaymission/academy/classrooms)
"dd" = (/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
"de" = (/obj/structure/table/woodentable,/obj/item/weapon/staff,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
"de" = (/obj/machinery/hydroponics/constructable,/turf/simulated/floor,/area/awaymission/academy/classrooms)
"df" = (/turf/simulated/floor{dir = 9; icon_state = "green"},/area/awaymission/academy/classrooms)
"dg" = (/turf/simulated/floor{dir = 1; icon_state = "green"},/area/awaymission/academy/classrooms)
"dh" = (/obj/machinery/light{dir = 1},/turf/simulated/floor{dir = 1; icon_state = "green"},/area/awaymission/academy/classrooms)
@@ -173,8 +173,8 @@
"dq" = (/obj/structure/stool/bed/chair/wood/normal{dir = 1},/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
"dr" = (/turf/simulated/floor{icon_state = "green"; dir = 8},/area/awaymission/academy/classrooms)
"ds" = (/obj/structure/stool,/turf/simulated/floor,/area/awaymission/academy/classrooms)
"dt" = (/obj/machinery/hydroponics,/obj/item/seeds/eggyseed,/turf/simulated/floor,/area/awaymission/academy/classrooms)
"du" = (/obj/machinery/hydroponics,/turf/simulated/floor,/area/awaymission/academy/classrooms)
"dt" = (/obj/structure/table/woodentable,/obj/item/weapon/gun/magic/wand/fireball,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
"du" = (/obj/machinery/hydroponics/constructable,/obj/item/seeds/replicapod,/turf/simulated/floor,/area/awaymission/academy/classrooms)
"dv" = (/turf/simulated/floor{icon_state = "green"; dir = 4},/area/awaymission/academy/classrooms)
"dw" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/effect/landmark{name = "awaystart"},/obj/item/weapon/weldingtool,/turf/simulated/floor/greengrid,/area/awaymission/academy/classrooms)
"dx" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/greengrid,/area/awaymission/academy/classrooms)
@@ -184,13 +184,13 @@
"dB" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor,/area/awaymission/academy/classrooms)
"dC" = (/obj/structure/closet/crate/hydroponics/prespawned,/turf/simulated/floor,/area/awaymission/academy/classrooms)
"dD" = (/obj/machinery/door/airlock/freezer,/turf/simulated/floor{icon_state = "white"},/area/awaymission/academy/classrooms)
"dE" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/awaymission/academy/classrooms)
"dE" = (/obj/machinery/light/small{dir = 4},/obj/machinery/chem_master/condimaster,/turf/simulated/floor{icon_state = "white"},/area/awaymission/academy/classrooms)
"dF" = (/obj/machinery/mech_bay_recharge_port,/obj/structure/cable,/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
"dG" = (/obj/machinery/computer/mech_bay_power_console,/obj/structure/cable,/turf/simulated/floor/greengrid,/area/awaymission/academy/classrooms)
"dH" = (/obj/machinery/hydroponics,/obj/item/seeds/replicapod,/turf/simulated/floor,/area/awaymission/academy/classrooms)
"dH" = (/obj/machinery/hydroponics/constructable,/obj/item/seeds/bluespacetomatoseed,/turf/simulated/floor,/area/awaymission/academy/classrooms)
"dI" = (/obj/structure/table/woodentable,/turf/simulated/floor,/area/awaymission/academy/classrooms)
"dJ" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor,/area/awaymission/academy/classrooms)
"dK" = (/obj/machinery/hydroponics,/obj/item/seeds/bluespacetomatoseed,/turf/simulated/floor,/area/awaymission/academy/classrooms)
"dK" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/bag/tray,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/academy/classrooms)
"dL" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor,/area/awaymission/academy/classrooms)
"dM" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{icon_state = "green"; dir = 4},/area/awaymission/academy/classrooms)
"dN" = (/obj/machinery/door/airlock/freezer,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/awaymission/academy/classrooms)
@@ -222,7 +222,7 @@
"en" = (/obj/machinery/vending/hydroseeds{slogan_delay = 700},/turf/simulated/floor,/area/awaymission/academy/classrooms)
"eo" = (/obj/machinery/vending/hydronutrients,/turf/simulated/floor{icon_state = "green"; dir = 6},/area/awaymission/academy/classrooms)
"ep" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/simulated/floor{icon_state = "white"},/area/awaymission/academy/classrooms)
"eq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
"eq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
"er" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{dir = 6; icon_state = "yellow"},/area/awaymission/academy/classrooms)
"es" = (/obj/machinery/singularity/academy,/turf/space,/area/space)
"et" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "yellow"; dir = 10},/area/awaymission/academy/classrooms)
@@ -284,13 +284,13 @@
"fx" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/academy/classrooms)
"fy" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/carpet,/area/awaymission/academy/classrooms)
"fz" = (/obj/machinery/light,/turf/simulated/floor{icon_state = "escape"; dir = 6},/area/awaymission/academy/classrooms)
"fA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
"fB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
"fC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
"fA" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/headmaster)
"fB" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable,/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/headmaster)
"fC" = (/obj/machinery/door/airlock/plasma,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
"fD" = (/turf/simulated/wall,/area/awaymission/academy/academyaft)
"fE" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
"fF" = (/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
"fG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
"fG" = (/obj/structure/grille,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/structure/cable,/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
"fH" = (/obj/machinery/shieldwallgen,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/awaymission/academy/classrooms)
"fI" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{icon_state = "whitehall"; dir = 1},/area/awaymission/academy/classrooms)
"fJ" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor{icon_state = "whitehall"; dir = 1},/area/awaymission/academy/classrooms)
@@ -308,10 +308,10 @@
"fV" = (/obj/structure/target_stake,/turf/simulated/floor,/area/awaymission/academy/classrooms)
"fW" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
"fX" = (/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
"fY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
"fY" = (/obj/structure/grille,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
"fZ" = (/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/awaymission/academy/classrooms)
"ga" = (/obj/structure/table,/obj/item/weapon/pen/red,/turf/simulated/floor,/area/awaymission/academy/classrooms)
"gb" = (/obj/structure/table,/obj/item/weapon/scalpel,/turf/simulated/floor{icon_state = "whitehall"; dir = 4},/area/awaymission/academy/classrooms)
"gb" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor{icon_state = "red"; dir = 5},/area/awaymission/academy/academyaft)
"gc" = (/obj/structure/stool/bed/chair/wood/normal,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
"gd" = (/obj/structure/bookcase,/obj/item/weapon/book/manual/wiki/engineering_hacking,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
"ge" = (/obj/structure/bookcase,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
@@ -452,28 +452,28 @@
"iJ" = (/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/engine,/area/awaymission/academy/academyaft)
"iK" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
"iL" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/beach_ball/holoball,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/awaymission/academy/academyaft)
"iM" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{icon_state = "red"; dir = 5},/area/awaymission/academy/academyaft)
"iN" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
"iM" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
"iN" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
"iO" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
"iP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
"iP" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable,/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
"iQ" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/airless{tag = "icon-white (EAST)"; icon_state = "white"; dir = 4},/area/awaymission/academy/academyaft)
"iR" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/device/soulstone,/turf/simulated/floor/airless{tag = "icon-whitered (EAST)"; icon_state = "whitered"; dir = 4},/area/awaymission/academy/academyaft)
"iS" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_l"; icon_state = "propulsion_l"},/turf/space,/area/awaymission/academy/academyaft)
"iT" = (/obj/structure/shuttle/engine/propulsion,/turf/space,/area/awaymission/academy/academyaft)
"iU" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_r"; icon_state = "propulsion_r"},/turf/space,/area/awaymission/academy/academyaft)
"iV" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
"iW" = (/turf/simulated/floor{icon_state = "red"; dir = 4},/area/awaymission/academy/academyaft)
"iX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
"iV" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
"iW" = (/obj/effect/landmark{name = "awaystart"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/awaymission/academy/academyaft)
"iX" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/awaymission/academy/academyaft)
"iY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/airless{tag = "icon-white (EAST)"; icon_state = "white"; dir = 4},/area/awaymission/academy/academyaft)
"iZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/airless{tag = "icon-whitered (EAST)"; icon_state = "whitered"; dir = 4},/area/awaymission/academy/academyaft)
"ja" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
"ja" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
"jb" = (/obj/structure/table,/obj/item/clothing/glasses/meson/truesight,/turf/simulated/floor,/area/awaymission/academy/academyaft)
"jc" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
"jd" = (/obj/structure/noticeboard,/turf/simulated/wall,/area/awaymission/academy/academyaft)
"je" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
"jf" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/airless{tag = "icon-white (EAST)"; icon_state = "white"; dir = 4},/area/awaymission/academy/academyaft)
"jg" = (/obj/structure/table,/obj/item/organ/brain{name = "The preserved brain of Harry Houdini"},/turf/simulated/floor/airless{tag = "icon-whitered (EAST)"; icon_state = "whitered"; dir = 4},/area/awaymission/academy/academyaft)
"jh" = (/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/awaymission/academy/academyaft)
"jh" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/awaymission/academy/academyaft)
"ji" = (/turf/simulated/floor{dir = 8; icon_state = "yellow"},/area/awaymission/academy/academyaft)
"jj" = (/turf/simulated/floor{dir = 4; icon_state = "yellow"},/area/awaymission/academy/academyaft)
"jk" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/airless{tag = "icon-white (EAST)"; icon_state = "white"; dir = 4},/area/awaymission/academy/academyaft)
@@ -488,7 +488,7 @@
"jt" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/space,/area/space)
"ju" = (/obj/machinery/igniter,/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
"jv" = (/obj/structure/window/reinforced,/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
"jw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/cable,/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
"jw" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
"jx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
"jy" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
"jz" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
@@ -506,7 +506,7 @@
"jL" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/carpet,/area/awaymission/academy/academygate)
"jM" = (/turf/simulated/floor/grass,/area/awaymission/academy/academygate)
"jN" = (/turf/simulated/floor/carpet,/area/awaymission/academy/academygate)
"jO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/floor/plating,/area/awaymission/academy/academygate)
"jO" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable,/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
"jP" = (/obj/structure/window/reinforced,/turf/simulated/floor/grass,/area/awaymission/academy/academygate)
"jQ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/door/window,/turf/simulated/floor/carpet,/area/awaymission/academy/academygate)
"jR" = (/obj/machinery/door/window,/turf/simulated/floor/carpet,/area/awaymission/academy/academygate)
@@ -534,7 +534,16 @@
"kn" = (/obj/machinery/door_control{id = "AcademyGate"; pixel_y = -24},/turf/simulated/floor/carpet{icon_state = "carpetsymbol"},/area/awaymission/academy/academygate)
"ko" = (/turf/simulated/floor/carpet{icon_state = "carpetsymbol"},/area/awaymission/academy/academygate)
"kp" = (/obj/machinery/door/poddoor/shutters{id = "AcademyGate"},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/awaymission/academy/academygate)
"kq" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
"kr" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
"ks" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
"kt" = (/obj/structure/table,/obj/item/weapon/scalpel,/turf/simulated/floor,/area/awaymission/academy/classrooms)
"ku" = (/obj/structure/table,/obj/item/weapon/lazarus_injector,/turf/simulated/floor{icon_state = "whitehall"; dir = 4},/area/awaymission/academy/classrooms)
"kv" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
"kw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/academygate)
"kx" = (/obj/structure/closet/crate/trashcart,/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/academy/academyaft)
"ky" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -561,7 +570,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacakahahahahalamananaoapaqacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacarahahasasatasasasauavawacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaxahasayazaAaBasapaxaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaCahaDasaEaFaFaGasaHahakacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaCahaDasaEaFaFaGasaHahbQacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaxahasaIaJaFaKasapaxaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaLahahasasasasasasapahakacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaMahahahahaNahalanavahafacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -577,37 +586,37 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaRaaaaaaaaaRaRaRaRaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaRaRaaaaaRaRaRaRaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaOaOaOaaaaabasasasasbobpasasasasabaaaaaOaOaOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaaaaaaaRaRaRaRaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaOaOaaaOaaaaabbqbqbqbqahapbqbqbqbqabaaaaaOaaaOaOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaRaRaaaaaaaaaaaaaaaaaabrbsbtbububvbsbrbrbrbrbrbrbrbrbrbrabbqbwbxbqahapbqbwbxbqababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaRaaaaaaaaaaaaaaaaaabrbrbybzbAbAbBbybCbDbEbFbFbFbFbFbFbGasbHbIbJbqahapbqbIbJbKasbLbMbNbObPbQbRbSababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrbTbybAbAbAbAbUbybDbVbWbXbYbYbZbYbVasbqcacbbqahapbqbqbqbqabcccdccasascebScfcgabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrchbybAcibAbAbybybDbVbYbYbYbWbYbYbVasbqbqbqbqahapahahahahcjckclcmascncebSbRcoabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaRaaaaaaaaaaaaaaaaaabrbrbybzbAbAbBbybCbDbEbFbFbFbFbFbFbGasbHbIbJbqahapbqbIbJbKasbLbMbNbObPfAbRbSababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrbTbybAbAbAbAbUbybDbVbWbXbYbYbZbYbVasbqcacbbqahapbqbqbqbqabcccdccasasfBbScfcgabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrchbybAcibAbAbybybDbVbYbYbYbWbYbYbVasbqbqbqbqahapahahahahcjckclcmascnfBbSbRcoabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrcpbUbAbAbAbAbycqbDcrbYbYbYbYbYbYcrasbqcscsbqahapctahctahabcccdcccucvcwbSbScxabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrcybybAbAbAbAbybybDczcAbYbYbYbYbYcBasbqcCcCbqahcDanananancjbNcEckcFascebSbRcoabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrcGbybAbAcHbAbybUbDczcIcIcIcIcIcIcBasbqcJbqbqahapbqbqbqbqabccckccckcccecfbScgabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrcybybAbAbAbAbybybDczcAbYbYbYbYbYcBasbqcCcCbqahcDananananfCbNcEckcFasfBbSbRcoabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrcGbybAbAcHbAbybUbDczcIcIcIcIcIcIcBasbqcJbqbqahapbqbqbqbqabccckccckccfBcfbScgabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrcKbycLbAbAcMbybUbDcNcOcOcOcOcOcOcPascQbwbxbqahapbqbwbxbKascRccckcScTcUbSbSababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrcVcWcXcXcXcXcYbybDcZdadadadadadadbasbqbIbJbqahapbqbIbJbqasasasasasasasasasabbrbrbrbrbrbraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrdcdcdcbUbUbycKbybDdadadddadddadedaasbqbqbqbqahapbqbqbqbqasdfdgdhdidgdgdgdhdgdjbDdkdkdlbrbraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrdmdndobUbybycKdpbDdadadqdadqdadqdaasaFaFaFaFahapaFaFaFaFasdrdsdtbydsdubybybydvbDdkdkdkdkbraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrdcdcdcbUbUbycKbybDdadadddadddadtdaasbqbqbqbqahapbqbqbqbqasdfdgdhdidgdgdgdhdgdjbDdkdkdlbrbraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrdmdndobUbybycKdpbDdadadqdadqdadqdaasaFaFaFaFahapaFaFaFaFasdrdscebydsdebybybydvbDdkdkdkdkbraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrdwdxdycWcWcWdzbybDdadadadadddadddaasaFdAdAaFahapaFdAdAaFasdrbybybybybybydBdCdvdDdkdkdkdEbraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrdFdndGbUbybycKbybDdadadadadqdadqdaasaFdAdAaFahapaFdAdAaFasdrdsdubydsdHbydIdJdvbDdkdkdkdkbraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrdcdcdcbybUbycKbybDdadadadadadadadaasaFdAdAaFahapaFdAdAaFasdrbybybybybybydKdLdMdNdOdPdkdQbraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrbrbrbrbDbDbDdRdSbDbDbDdTdTbDbDbDbDbDasasasasasahapasasasasasdrdsdubybydUbybydVdvbDdWdXdkdQbraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrdFdndGbUbybycKbybDdadadadadqdadqdaasaFdAdAaFahapaFdAdAaFasdrdsdebydsdubydIdJdvbDdkdkdkdkbraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrdcdcdcbybUbycKbybDdadadadadadadadaasaFdAdAaFahapaFdAdAaFasdrbybybybybybydHdLdMdNdOdPdkdQbraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrbrbrbrbDbDbDdRdSbDbDbDdTdTbDbDbDbDbDasasasasasahapasasasasasdrdsdebybydUbybydVdvbDdWdXdkdQbraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrdYdYbrdZeaebecedeeefegeheheheheheiehefehehehehejekehehehehbDelememememembybyeneobDdWdXdkepbraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabreqeqbreresetecedeheheheheheheheheueheheheheheheheuehehehehbDbDbDbDbDbDbDevevbDbDbDbDewbDbrbraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaexeybAbAezbyeAbybyedehejejejejejejejekejejejejejejejekejejejehbDeBeBeBeCeDeBeBeBeBeEeFeFeGeFbrbraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHbrbAbAeqeIeIeIeJedehejeKeLejeKeLejeMeLejeKeLejeKeLekeKeLejeNbDeBeBeBeOeBeBeBeBeBeEeFeFeGePbraOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHbrbAbAeqeIeIeIeJedehejeKeLejeKeLejeMeLejeKeLejeKeLekeKeLejeNbDeBeBeBeOeBeBeBeBeBdKeFeFeGePbraOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHbrbAbAeqeQeQeQeRedehejeSeTejeSeTejeUeTejeSeTejeSeTekeSeTejeheVeBeBeBeWeBeCeBeBeBeEeFeFeGeXbraOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeYeybAbAezbyeZbybyedehejejejejejejejekejejejfafbfbfbfcfbfbfbfdfefffffffffffgfffffffhfififjfkbraOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabreqeqbrflesfmecedeheheheheheheheheueheheheuehehehehehehehehbDeBfnfofpeBeWeBeBeBeEeFeFeFfqbraOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrdYdYbrfrfsftecfufvfdfdfdfdfwehehfxfdfdfdfyejehehejejehehehbDeBeBeBeBfzeBeBeBeBeEeFeFeFbrbraOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrbrbrbrbrbrbDdRdSbDbDbDbDbDfAfBfBfCbDbDfDfEfFfDfDfFfFfDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbrbraOaOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrbAbAbAfGfHfIfJfKfKfLbDfMdadadadadabDfNfEfFfNfNfFfFfNbDfOfPfQfOfOczfRfSfTfUbybyfVbrbraOaaaOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrfWfXbAfYfZbybybygagbbDdagcdagdgedafGgfggfFfNfNfFfFfNbDghgigjgkghczbyglbybybybybrbraOaOaaaOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaaaaaaaaaaaaaaaaaaaaaabrgmbAbAgnfZbygobybygpbDdadddadadadafYfNfFfFfNfNfFfFfNbDghgqghghghczfRfSbybyfVbrbraOaaaOaaaOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaRaRaaaaaaaaaaaaaaaaaabrgrgrgrfYfZbydsbybygsbDgtdqdagegudafYfNfFfFfNfNfFfFgvbDgwgqghghghczbygxbygybrbraOaaaaaOaaaOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaRaRaaaaaaaaaaaaaaaaaabrgzgzgzfYfZbygobygogpbDdagcdadadadafAgfgAgBfNfNfFfFfNbDghgqgCgDgEczgFfSfVbrbraOaaaaaaaOaaaOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrbrbrbrbrbrbDdRdSbDbDbDbDbDeqeqeqeqbDbDfDfEfFfDfDfFfFfDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbrbraOaOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrbAbAbAksfHfIfJfKfKfLbDfMdadadadadabDfNfEfFfNfNfFfFkxbDfOfPfQfOfOczfRfSfTfUbybyfVbrbraOaaaOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrfWfXbAjwfZbybybygakubDdagcdagdgedakrgfggfFfNfNfFfFfNbDghgigjgkghczbyglbybybybybrbraOaOaaaOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaaaaaaaaaaaaaaaaaaaaaabrgmbAbAgnfZbygobybygpbDdadddadadadajOfNfFfFfNfNfFfFfNbDghgqghghghczfRfSbybyfVbrbraOaaaOaaaOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaRaRaaaaaaaaaaaaaaaaaabrgrgrgrjwfZbydsbybygsbDgtdqdagegudajOfNfFfFfNfNfFfFgvbDgwgqghghghczbygxbygybrbraOaaaaaOaaaOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaRaRaaaaaaaaaaaaaaaaaabrgzgzgzjwfZbyktbygogpbDdagcdadadadakqgfgAgBfNfNfFfFfNbDghgqgCgDgEczgFfSfVbrbraOaaaaaaaOaaaOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaRaaaaaaaaaaaaaaaaaaaabrbAgGbAgnfZbydsbydsgpbDdadddagHgIdabDfNfFfEfNfNfFfFfNbDghgqgJgJgJczbygKbrbraOaaaaaaaaaOaaaOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaaaaaaaaaaaaaaaaaaaaaabrgLbAbAfYfZbygobygogpbDdadqdadadadagMfFfFgNgfgfgAgAgAgOgPgQgEgEgRczgSbrbraOaaaaaaaaaaaOaaaOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrbAbAgGfAgTgUgVgUgVdkbDdadadadadadabDfNfFfEfNfNfFfFfNbDghghgJgJgJczbrbraOaaaaaaaaaaaaaOaaaOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaaaaaaaaaaaaaaaaaaaaaabrgLbAbAjwfZbygobygogpbDdadqdadadadagMfFfFgNgfgfgAgAgAgOgPgQgEgEgRczgSbrbraOaaaaaaaaaaaOaaaOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrbAbAgGkvgTgUgVgUgVdkbDdadadadadadabDfNfFfEfNfNfFfFfNbDghghgJgJgJczbrbraOaaaaaaaaaaaaaOaaaOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagWgWgWgWgWgWgWgWgWgWgWgWfDfDfDfDfDfDfDfDfDgXfDfDgYfDfDfDfDfDfDfDfDfDgWgWgWgWgWgWgWgWgWgWgWgWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagWgZhahbhbhchdhehfgWhggWhhhihihjhihihkfFfFfEfFfFfFfFfFhhhihihjhihihlgWhggWhmhnhohphqhrgZgZgWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagWgZhshthbhuhihvhwhxhyhxhzhAhAhAhAhAhBgAgAhChDgAgAgAgAhzhAhAhAhAhAhEhxhFhxhdhGhmhigZgZhHgZgWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -622,21 +631,21 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagWgWgWgWiDgWgWaagWipififiqfDfDfDhRichRfEfFhRichRfDfDfDitififiugWaagWgWiDgWgWgWgWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagWiEiFiGiGgWaOgWififififiliHfDhRhRiIggfFhRhRhRfDixilififififgWaOgWiGiGiFiJgWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaaaaaaaaaaaaaaaaaaaaaaaagWiGiGiGiGgWaOgWgWgWfDfDfDfDfDfDfDgXfDfDgYfDfDfDfDfDfDfDgWgWgWaOgWiGiGiGiGgWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaaaaaaaaaaaaaaaaaaaaaaaagWiKiKiKiKgWaaaaaagWiLiMiNgfiOgAgAhCgAgAgAgAgAgAgfiPiQiRgWaaaaaagWiKiKiKiKgWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaaaaaaaRaRaaaaaaaaaaaaaaaaaagWiSiTiTiUgWaaaaaaiVhiiWiXfNfEfFfFfFfFfFfFfFfFfFfNiXiYiZjaaaaaaagWiSiTiTiUgWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagWjbiWiXfNjcfDfDjdfDfDjdfDfDjefNiXjfjggWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiVhijhiXfNfEfFjihihihihijjfFfFfNiXjkiZjlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagWjmjniXfNfEfFjojpjpjpjpjqfFfFfNiXjrjsgWjtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagWgWjuiXfNfEjvfFfFfFfFfFfFjvfFfNiXjugWgWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagWgWjwfNjxesjyfFfFfFfFjzesjyfNjwgWgWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaaaaaaaaaaaaaaaaaaaaaaaagWiKiKiKiKgWaaaaaagWiLgbfYgfiOgAgAhCgAgAgAgAgAgAgffGiQiRgWaaaaaagWiKiKiKiKgWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaaaaaaaRaRaaaaaaaaaaaaaaaaaagWiSiTiTiUgWaaaaaaiVhAjhiPfNfEfFfFfFfFfFfFfFfFfFfNiNiYiZjaaaaaaagWiSiTiTiUgWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagWjbiXiPfNjcfDfDjdfDfDjdfDfDjefNiNjfjggWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiVhAiWiPfNfEfFjihihihihijjfFfFfNiNjkiZjlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagWjmjniPfNfEfFjojpjpjpjpjqfFfFfNiNjrjsgWjtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagWgWjuiPfNfEjvfFfFfFfFfFfFjvfFfNiNjugWgWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagWgWiMfNjxesjyfFfFfFfFjzesjyfNiMgWgWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagWgWfNjAjBgAgBfFfFfFfFjCfFfNgWgWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagWfNfNfNfNfEfFfFfFfNfNfNfNgWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagWfNjDjEfNfEfFfFfFfNjFjGfNgWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagWiVgWgWgWjHgWgWjIgWgWgWiVgWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagWkygWgWgWjHgWgWjIgWgWgWkygWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajJjJjKjLjMjMjNjKjJjJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajOjMjLjMjMjNjMjOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajOjMjLjMjMjNjMjOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajOjPjQjPjPjRjPjOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakwjMjLjMjMjNjMkwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakwjMjLjMjMjNjMkwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakwjPjQjPjPjRjPkwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajJjJjNjSjTjTjTjUjJjJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajJjJjNjNjVjNjNjWjXjYjJjJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajJjNjNjZkajWjWjWkbkcjNjJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -665,3 +674,4 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
"}

View File

@@ -32,7 +32,7 @@
"aF" = (/turf/simulated/shuttle/wall,/area/awaymission/BMPship/Aft)
"aG" = (/obj/structure/stool/bed/roller,/turf/simulated/floor/plating/airless,/area/awaymission/BMPship/Aft)
"aH" = (/turf/simulated/floor/plating/airless,/area/awaymission/BMPship/Aft)
"aI" = (/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/structure/closet/crate,/turf/simulated/floor/plating/airless,/area/awaymission/BMPship/Aft)
"aI" = (/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/restraints/handcuffs,/obj/structure/closet/crate,/turf/simulated/floor/plating/airless,/area/awaymission/BMPship/Aft)
"aJ" = (/obj/item/weapon/scalpel,/obj/structure/closet/crate,/obj/item/weapon/tank/anesthetic,/turf/simulated/floor/plating/airless,/area/awaymission/BMPship/Aft)
"aK" = (/obj/item/bodybag,/turf/simulated/floor/plating/airless,/area/awaymission/BMPship/Aft)
"aL" = (/obj/item/weapon/storage/box/syringes,/turf/simulated/floor/plating/airless,/area/awaymission/BMPship/Aft)

View File

@@ -591,7 +591,7 @@
"ls" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/centcomAway/thunderdome)
"lt" = (/obj/structure/stool/bed/chair,/turf/simulated/floor{tag = "icon-redbluefull (WEST)"; icon_state = "redbluefull"; dir = 8},/area/awaymission/centcomAway/thunderdome)
"lu" = (/turf/simulated/floor{dir = 8; icon_state = "red"},/area/awaymission/centcomAway/thunderdome)
"lv" = (/obj/structure/rack,/obj/item/weapon/legcuffs/beartrap,/obj/item/weapon/twohanded/fireaxe,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/centcomAway/thunderdome)
"lv" = (/obj/structure/rack,/obj/item/weapon/restraints/legcuffs/beartrap,/obj/item/weapon/twohanded/fireaxe,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/centcomAway/thunderdome)
"lw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/centcomAway/thunderdome)
"lx" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/centcomAway/thunderdome)
"ly" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/centcomAway/thunderdome)

View File

@@ -29,7 +29,7 @@
"aC" = (/turf/simulated/floor{dir = 4; heat_capacity = 1e+006; icon_state = "darkredcorners"; tag = "icon-darkredcorners (EAST)"},/area/awaycontent/a4{name = "Syndicate Outpost"})
"aD" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{dir = 5; heat_capacity = 1e+006; icon_state = "darkred"; tag = "icon-darkred (NORTHEAST)"},/area/awaycontent/a4{name = "Syndicate Outpost"})
"aE" = (/obj/structure/alien/weeds/node,/obj/structure/alien/resin/wall,/turf/simulated/floor/plating/asteroid{carbon_dioxide = 48.7; heat_capacity = 1e+006; nitrogen = 13.2; oxygen = 32.4; temperature = 251},/area/mine/explored)
"aF" = (/obj/structure/alien/weeds{icon_state = "weeds1"},/obj/structure/stool/bed/nest,/obj/effect/decal/cleanable/blood/gibs,/obj/item/clothing/mask/facehugger{icon_state = "facehugger_impregnated"; item_state = "facehugger_impregnated"; stat = 2},/obj/item/clothing/under/rank/security/science,/obj/item/clothing/suit/armor/vest,/obj/item/weapon/melee/baton/loaded,/obj/item/clothing/head/helmet,/turf/simulated/floor/plating/asteroid{carbon_dioxide = 48.7; heat_capacity = 1e+006; nitrogen = 13.2; oxygen = 32.4; temperature = 251},/area/mine/explored)
"aF" = (/obj/structure/alien/weeds{icon_state = "weeds1"},/obj/structure/stool/bed/nest,/obj/effect/decal/cleanable/blood/gibs,/obj/item/clothing/mask/facehugger{icon_state = "facehugger_impregnated"; item_state = "facehugger_impregnated"; stat = 2},/obj/item/clothing/under/rank/security,/obj/item/clothing/suit/armor/vest,/obj/item/weapon/melee/baton/loaded,/obj/item/clothing/head/helmet,/turf/simulated/floor/plating/asteroid{carbon_dioxide = 48.7; heat_capacity = 1e+006; nitrogen = 13.2; oxygen = 32.4; temperature = 251},/area/mine/explored)
"aG" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{dir = 1; heat_capacity = 1e+006; icon_state = "darkredcorners"; tag = "icon-darkredcorners (NORTH)"},/area/awaycontent/a4{name = "Syndicate Outpost"})
"aH" = (/obj/machinery/gateway{dir = 9},/turf/simulated/floor{dir = 1; heat_capacity = 1e+006; icon_state = "vault"},/area/awaycontent/a4{name = "Syndicate Outpost"})
"aI" = (/obj/machinery/gateway{dir = 1},/turf/simulated/floor{dir = 8; heat_capacity = 1e+006; icon_state = "vault"},/area/awaycontent/a4{name = "Syndicate Outpost"})

View File

@@ -64,15 +64,15 @@
"bl" = (/obj/structure/table/reinforced,/obj/item/clothing/head/helmet/swat,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate3)
"bm" = (/obj/machinery/computer/pod{id = "spacebattlepod3"; name = "Hull Door Control"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate2)
"bn" = (/obj/machinery/door/poddoor{icon_state = "pdoor1"; id = "spacebattlepod3"; name = "Front Hull Door"; opacity = 1},/turf/simulated/shuttle/plating,/area/awaymission/spacebattle/syndicate2)
"bo" = (/obj/structure/table/reinforced,/obj/item/weapon/plastique,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate3)
"bo" = (/obj/structure/table/reinforced,/obj/item/weapon/c4,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate3)
"bp" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate1)
"bq" = (/obj/structure/table/reinforced,/obj/item/weapon/plastique,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate1)
"bq" = (/obj/structure/table/reinforced,/obj/item/weapon/c4,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate1)
"br" = (/obj/structure/table/reinforced,/obj/item/weapon/grenade/spawnergrenade/manhacks,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate1)
"bs" = (/obj/structure/table/reinforced,/obj/item/weapon/handcuffs,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate1)
"bs" = (/obj/structure/table/reinforced,/obj/item/weapon/restraints/handcuffs,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate1)
"bt" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/awaymission/spacebattle/syndicate3)
"bu" = (/obj/structure/stool/bed/chair,/mob/living/simple_animal/hostile/syndicate,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate3)
"bv" = (/turf/space,/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/awaymission/spacebattle/syndicate3)
"bw" = (/obj/structure/table/reinforced,/obj/item/weapon/melee/energy/sword/red,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate1)
"bw" = (/obj/structure/table/reinforced,/obj/item/weapon/melee/energy/sword/saber/red,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate1)
"bx" = (/obj/machinery/computer/shuttle,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate3)
"by" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/turf/simulated/shuttle/wall{dir = 8; icon_state = "diagonalWall3"},/area/awaymission/spacebattle/syndicate3)
"bz" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/awaymission/spacebattle/syndicate3)
@@ -257,7 +257,7 @@
"eW" = (/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser)
"eX" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/condiment/saltshaker,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/spacebattle/cruiser)
"eY" = (/obj/structure/table/reinforced,/obj/item/weapon/kitchen/utensil/fork,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/spacebattle/cruiser)
"eZ" = (/obj/effect/landmark/corpse/syndicatesoldier,/obj/item/weapon/melee/energy/sword/red,/obj/effect/decal/cleanable/blood,/turf/simulated/floor,/area/awaymission/spacebattle/cruiser)
"eZ" = (/obj/effect/landmark/corpse/syndicatesoldier,/obj/item/weapon/melee/energy/sword/saber/red,/obj/effect/decal/cleanable/blood,/turf/simulated/floor,/area/awaymission/spacebattle/cruiser)
"fa" = (/obj/effect/landmark/corpse/bridgeofficer{mobname = "Kurt Kliest"; name = "Kurt Kliest"},/obj/item/weapon/gun/projectile/shotgun/combat,/obj/item/ammo_casing/shotgun,/turf/simulated/floor,/area/awaymission/spacebattle/cruiser)
"fb" = (/obj/item/ammo_casing/shotgun,/obj/effect/decal/cleanable/blood,/turf/simulated/floor,/area/awaymission/spacebattle/cruiser)
"fc" = (/obj/machinery/computer/crew,/turf/simulated/floor{tag = "icon-bluefull"; icon_state = "bluefull"},/area/awaymission/spacebattle/cruiser)
@@ -359,7 +359,7 @@
"gU" = (/turf/space,/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/awaymission/spacebattle/syndicate7)
"gV" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/awaymission/spacebattle/syndicate4)
"gW" = (/obj/structure/reagent_dispensers/beerkeg,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser)
"gX" = (/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser)
"gX" = (/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser)
"gY" = (/obj/machinery/computer/operating,/turf/simulated/floor{icon_state = "white"},/area/awaymission/spacebattle/cruiser)
"gZ" = (/obj/effect/landmark/corpse/doctor{mobname = "Allan Yoshimaru"; name = "Allan Yoshimaru"},/obj/effect/decal/cleanable/blood,/turf/simulated/floor{icon_state = "white"},/area/awaymission/spacebattle/cruiser)
"ha" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor{icon_state = "white"},/area/awaymission/spacebattle/cruiser)

View File

@@ -229,7 +229,7 @@
"eu" = (/obj/structure/rack,/obj/item/key,/obj/item/key,/obj/item/key,/obj/item/key,/obj/item/key,/turf/simulated/floor/carpet,/area/awaymission)
"ev" = (/obj/structure/stool/bed/chair/comfy,/obj/effect/decal/cleanable/flour{desc = "Probably."},/obj/effect/decal/cleanable/pie_smudge,/turf/simulated/floor/carpet,/area/awaymission)
"ew" = (/obj/structure/stool/bed/chair/comfy,/obj/effect/decal/cleanable/flour{desc = "Probably."},/obj/effect/decal/cleanable/flour{desc = "Probably."},/obj/effect/decal/cleanable/pie_smudge,/turf/simulated/floor/carpet,/area/awaymission)
"ex" = (/obj/item/weapon/legcuffs,/turf/simulated/floor/engine/cult,/area/awaymission)
"ex" = (/obj/item/weapon/restraints/legcuffs,/turf/simulated/floor/engine/cult,/area/awaymission)
"ey" = (/obj/machinery/space_heater,/turf/simulated/floor/carpet,/area/awaymission)
"ez" = (/obj/structure/table/woodentable,/turf/simulated/floor/carpet,/area/awaymission)
"eA" = (/obj/structure/table,/obj/machinery/computer/security/telescreen{desc = "Not used to spy on hotel rooms."; dir = 1; network = "Hotel"; use_power = 0},/turf/simulated/floor/carpet,/area/awaymission)

View File

@@ -362,7 +362,7 @@
"gX" = (/obj/effect/decal/remains/human,/turf/simulated/floor{tag = "icon-warningcorner (NORTH)"; icon_state = "warningcorner"; dir = 1},/area/awaymission/arrivalblock)
"gY" = (/obj/machinery/computer/security,/turf/simulated/floor{icon_state = "red"; dir = 9},/area/awaymission/arrivalblock)
"gZ" = (/obj/machinery/computer/secure_data,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/awaymission/arrivalblock)
"ha" = (/obj/structure/table,/obj/item/weapon/book/manual/wiki/security_space_law,/obj/item/weapon/melee/baton,/obj/item/clothing/head/helmet/warden,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/awaymission/arrivalblock)
"ha" = (/obj/structure/table,/obj/item/weapon/book/manual/wiki/security_space_law,/obj/item/weapon/melee/baton,/obj/item/clothing/head/warden,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/awaymission/arrivalblock)
"hb" = (/obj/structure/closet/wardrobe/red,/obj/machinery/light{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/awaymission/arrivalblock)
"hc" = (/obj/structure/closet/secure_closet/security,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/awaymission/arrivalblock)
"hd" = (/obj/structure/closet/secure_closet/security,/turf/simulated/floor{icon_state = "red"; dir = 5},/area/awaymission/arrivalblock)
@@ -400,7 +400,7 @@
"hJ" = (/turf/simulated/floor{icon_state = "red"; dir = 8},/area/awaymission/arrivalblock)
"hK" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor,/area/awaymission/arrivalblock)
"hL" = (/obj/structure/table,/obj/item/weapon/storage/fancy/donut_box,/turf/simulated/floor,/area/awaymission/arrivalblock)
"hM" = (/obj/structure/table,/obj/item/weapon/handcuffs,/obj/item/device/flash,/turf/simulated/floor,/area/awaymission/arrivalblock)
"hM" = (/obj/structure/table,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flash,/turf/simulated/floor,/area/awaymission/arrivalblock)
"hN" = (/turf/simulated/floor{icon_state = "red"; dir = 4},/area/awaymission/arrivalblock)
"hO" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/blue,/obj/effect/decal/remains/human,/turf/simulated/floor,/area/awaymission/midblock)
"hP" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/purple,/turf/simulated/floor,/area/awaymission/midblock)
@@ -557,7 +557,7 @@
"kK" = (/obj/machinery/vending/hydronutrients,/turf/simulated/floor,/area/awaymission/arrivalblock)
"kL" = (/obj/machinery/vending/hydroseeds,/turf/simulated/floor,/area/awaymission/arrivalblock)
"kM" = (/obj/structure/sink/kitchen{pixel_y = 32},/turf/simulated/floor,/area/awaymission/arrivalblock)
"kN" = (/obj/item/weapon/melee/energy/sword/red,/obj/item/clothing/shoes/syndigaloshes,/obj/item/clothing/under/syndicate,/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/weapon/paper/sc_safehint_paper_hydro,/turf/simulated/floor,/area/awaymission/arrivalblock)
"kN" = (/obj/item/weapon/melee/energy/sword/saber/red,/obj/item/clothing/shoes/syndigaloshes,/obj/item/clothing/under/syndicate,/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/weapon/paper/sc_safehint_paper_hydro,/turf/simulated/floor,/area/awaymission/arrivalblock)
"kO" = (/obj/machinery/hydroponics,/turf/simulated/floor,/area/awaymission/arrivalblock)
"kP" = (/obj/structure/morgue,/turf/simulated/floor{icon_state = "white"},/area/awaymission/southblock)
"kQ" = (/obj/machinery/vending/medical,/turf/simulated/floor{icon_state = "white"},/area/awaymission/southblock)

File diff suppressed because it is too large Load Diff

View File

@@ -367,7 +367,7 @@
"ahc" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/closet/crate,/turf/simulated/floor{icon_state = "bot"},/area/quartermaster/storage)
"ahd" = (/obj/structure/closet/crate,/obj/machinery/camera/autoname{dir = 8},/turf/simulated/floor{icon_state = "bot"},/area/quartermaster/storage)
"ahe" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor,/area/hallway/primary/central)
"ahf" = (/obj/structure/table,/obj/item/weapon/handcuffs,/obj/item/device/assembly/timer,/obj/item/device/flash,/turf/simulated/floor,/area/security/brig)
"ahf" = (/obj/structure/table,/obj/item/weapon/restraints/handcuffs,/obj/item/device/assembly/timer,/obj/item/device/flash,/turf/simulated/floor,/area/security/brig)
"ahg" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/obj/structure/stool/bed/chair{dir = 4},/obj/effect/landmark/start{name = "Security Officer"},/turf/simulated/floor,/area/security/brig)
"ahh" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/table,/obj/machinery/recharger{pixel_y = 4},/turf/simulated/floor,/area/security/brig)
"ahi" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/table,/obj/item/weapon/book/manual/wiki/security_space_law,/obj/item/weapon/storage/lockbox/loyalty,/turf/simulated/floor,/area/security/brig)
@@ -400,10 +400,10 @@
"ahJ" = (/obj/machinery/flasher{id = "Cell 3"; pixel_x = 28},/turf/simulated/floor,/area/security/brig)
"ahK" = (/obj/structure/closet/secure_closet/detective,/turf/simulated/floor{icon_state = "grimy"},/area/security/brig)
"ahL" = (/turf/simulated/floor/carpet,/area/security/brig)
"ahM" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/item/weapon/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/turf/simulated/floor/carpet,/area/security/brig)
"ahM" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/turf/simulated/floor/carpet,/area/security/brig)
"ahN" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor,/area/hallway/primary/central)
"ahO" = (/turf/simulated/floor{icon_state = "purplecorner"; dir = 4},/area/hallway/primary/central)
"ahP" = (/obj/structure/table,/obj/item/weapon/hand_labeler,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/weapon/pen,/obj/machinery/door/firedoor/border_only{dir = 8; name = "hazard door west"},/obj/machinery/requests_console{department = "Science"; departmentType = 2; name = "Science Requests Console"; pixel_x = -30; pixel_y = 0},/turf/simulated/floor{icon_state = "whitepurple"; dir = 8},/area/medical/research{name = "Research Division"})
"ahP" = (/obj/structure/table,/obj/item/weapon/hand_labeler,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/weapon/pen,/obj/machinery/door/firedoor/border_only{dir = 8; name = "hazard door west"},/obj/machinery/requests_console{department = "Science"; departmentType = 2; name = "Science Requests Console"; pixel_x = -30; pixel_y = 0},/turf/simulated/floor{icon_state = "whitepurple"; dir = 8},/area/medical/research{name = "Research Division"})
"ahQ" = (/turf/simulated/floor{dir = 4; icon_state = "warnwhite"},/area/medical/research{name = "Research Division"})
"ahR" = (/obj/machinery/r_n_d/destructive_analyzer,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/medical/research{name = "Research Division"})
"ahS" = (/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/medical/research{name = "Research Division"})
@@ -648,7 +648,7 @@
"amx" = (/obj/machinery/conveyor{dir = 2; id = "recycler"},/turf/simulated/floor/plating,/area/hallway/primary/central)
"amy" = (/obj/machinery/conveyor_switch/oneway{id = "recycler"; name = "recycler conveyor"},/turf/simulated/floor/plating,/area/hallway/primary/central)
"amz" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/hallway/primary/central)
"amA" = (/obj/structure/table,/obj/item/clothing/head/welding,/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/item/blueprints,/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/ai_monitored/storage/eva)
"amA" = (/obj/structure/table,/obj/item/clothing/head/welding,/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/item/areaeditor/blueprints,/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/ai_monitored/storage/eva)
"amB" = (/obj/machinery/alarm{pixel_y = 23},/obj/structure/closet/crate/rcd,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/ai_monitored/storage/eva)
"amC" = (/obj/machinery/suit_storage_unit/standard_unit,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/ai_monitored/storage/eva)
"amD" = (/obj/machinery/camera/autoname,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/machinery/light{dir = 1},/obj/machinery/suit_storage_unit/standard_unit,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/ai_monitored/storage/eva)
@@ -979,7 +979,7 @@
"asQ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/heads{name = "\improper Job Assignment"})
"asR" = (/obj/structure/table/reinforced,/obj/machinery/door/window/brigdoor{base_state = "rightsecure"; dir = 2; icon_state = "rightsecure"; name = "Head of Personnel's Desk"; req_access_txt = "57"},/obj/machinery/door/window/northright{name = "Reception Window"},/turf/simulated/floor/plating,/area/crew_quarters/heads{name = "\improper Job Assignment"})
"asS" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/turf/simulated/wall/r_wall,/area/crew_quarters/heads{name = "\improper Job Assignment"})
"asT" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/table,/obj/item/weapon/book/manual/wiki/security_space_law,/obj/item/weapon/packageWrap,/obj/item/weapon/hand_labeler,/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor,/area/crew_quarters/heads{name = "\improper Job Assignment"})
"asT" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/table,/obj/item/weapon/book/manual/wiki/security_space_law,/obj/item/stack/packageWrap,/obj/item/weapon/hand_labeler,/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor,/area/crew_quarters/heads{name = "\improper Job Assignment"})
"asU" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/table,/obj/item/weapon/folder/blue,/obj/item/weapon/stamp/hop,/obj/machinery/requests_console{announcementConsole = 1; department = "Lieutenant Office"; departmentType = 5; name = "Lieutenant RC"; pixel_y = 30},/turf/simulated/floor,/area/crew_quarters/heads{name = "\improper Job Assignment"})
"asV" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/closet/crate/bin,/turf/simulated/floor,/area/crew_quarters/heads{name = "\improper Job Assignment"})
"asW" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/crew_quarters/heads{name = "\improper Job Assignment"})
@@ -995,13 +995,13 @@
"atg" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/firedoor/border_only{dir = 1; name = "Firelock North"},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/bar)
"ath" = (/obj/structure/closet/crate/bin,/obj/structure/noticeboard{pixel_y = 32},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/bar)
"ati" = (/obj/machinery/vending/boozeomat,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/crew_quarters/bar)
"atj" = (/obj/structure/table,/obj/item/weapon/book/manual/barman_recipes,/obj/item/weapon/packageWrap,/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/crew_quarters/bar)
"atj" = (/obj/structure/table,/obj/item/weapon/book/manual/barman_recipes,/obj/item/stack/packageWrap,/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/crew_quarters/bar)
"atk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/hallway/primary/central)
"atl" = (/obj/structure/table,/obj/machinery/door/window/southleft{layer = 3.1},/turf/simulated/floor,/area/hallway/primary/central)
"atm" = (/obj/structure/table,/obj/machinery/door/window/southright{layer = 3.1},/turf/simulated/floor,/area/hallway/primary/central)
"atn" = (/obj/structure/table/reinforced,/obj/machinery/door/window/eastright{dir = 2; name = "Chemistry Desk"; req_access_txt = "33"},/obj/item/clothing/glasses/science,/turf/simulated/floor/plating,/area/medical/medbay)
"ato" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/obj/structure/table,/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/box/syringes,/obj/item/weapon/storage/pill_bottle/inaprovaline{pixel_x = 5; pixel_y = -2},/obj/item/weapon/storage/pill_bottle/inaprovaline{pixel_x = 5; pixel_y = -2},/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/dropper,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
"atp" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/table,/obj/item/weapon/packageWrap,/obj/item/weapon/hand_labeler,/obj/item/device/radio/headset/headset_med,/obj/item/device/radio/intercom{broadcasting = 0; freerange = 0; listening = 1; name = "Common Channel"; pixel_y = 25},/obj/machinery/camera/autoname,/turf/simulated/floor{tag = "icon-whiteyellowcorner"; icon_state = "whiteyellowcorner"; dir = 2},/area/medical/medbay)
"atp" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/table,/obj/item/stack/packageWrap,/obj/item/weapon/hand_labeler,/obj/item/device/radio/headset/headset_med,/obj/item/device/radio/intercom{broadcasting = 0; freerange = 0; listening = 1; name = "Common Channel"; pixel_y = 25},/obj/machinery/camera/autoname,/turf/simulated/floor{tag = "icon-whiteyellowcorner"; icon_state = "whiteyellowcorner"; dir = 2},/area/medical/medbay)
"atq" = (/obj/machinery/smartfridge/chemistry,/turf/simulated/wall,/area/medical/medbay)
"atr" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{tag = "icon-whiteyellowcorner (WEST)"; icon_state = "whiteyellowcorner"; dir = 8},/area/medical/medbay)
"ats" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/obj/machinery/door/firedoor/border_only{dir = 4; name = "hazard door east"},/turf/simulated/floor{dir = 4; icon_state = "whiteblue"},/area/medical/medbay)
@@ -2258,14 +2258,14 @@
"aRv" = (/turf/unsimulated/floor{dir = 8; icon_state = "carpetside"},/area/wizard_station)
"aRw" = (/obj/effect/landmark/start{name = "wizard"},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/wizard_station)
"aRx" = (/turf/unsimulated/floor{dir = 4; icon_state = "carpetside"},/area/wizard_station)
"aRy" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/sneakers/brown,/obj/item/clothing/suit/armor/tdome/red,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/energy/sword/red,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
"aRy" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/sneakers/brown,/obj/item/clothing/suit/armor/tdome/red,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/energy/sword/saber/red,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
"aRz" = (/obj/machinery/door/poddoor{id = "thunderdomegen"; name = "General Supply"},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
"aRA" = (/obj/effect/landmark{name = "tdome2"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome2)
"aRB" = (/obj/machinery/door/poddoor{id = "thunderdome"; name = "Thunderdome Blast Door"},/turf/unsimulated/floor{name = "plating"},/area/tdome)
"aRC" = (/turf/simulated/floor{icon_state = "red"; dir = 8},/area/tdome)
"aRD" = (/turf/simulated/floor{icon_state = "green"; dir = 4},/area/tdome)
"aRE" = (/obj/effect/landmark{name = "tdome1"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome1)
"aRF" = (/obj/structure/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/sneakers/brown,/obj/item/clothing/suit/armor/tdome/green,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/energy/sword/green,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
"aRF" = (/obj/structure/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/sneakers/brown,/obj/item/clothing/suit/armor/tdome/green,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/energy/sword/saber/green,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
"aRG" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start)
"aRH" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Infirmary"; req_access_txt = "150"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start)
"aRI" = (/obj/machinery/door/window{dir = 8; name = "Tool Storage"; req_access_txt = "150"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start)

File diff suppressed because it is too large Load Diff

View File

@@ -17,11 +17,12 @@ Pipelines + Other Objects -> Pipe network
power_channel = ENVIRON
var/nodealert = 0
var/can_unwrench = 0
var/initialize_directions = 0
var/pipe_color
var/global/list/iconsetids = list()
var/global/list/pipeimages = list()
/obj/machinery/atmospherics/var/initialize_directions = 0
/obj/machinery/atmospherics/var/pipe_color/
/*
/obj/machinery/atmospherics/process()
//build_network()
@@ -54,6 +55,18 @@ Pipelines + Other Objects -> Pipe network
/obj/machinery/atmospherics/proc/disconnect(obj/machinery/atmospherics/reference)
/obj/machinery/atmospherics/proc/icon_addintact(var/obj/machinery/atmospherics/node, var/connected)
var/image/img = getpipeimage('icons/obj/atmospherics/binary_devices.dmi', "pipe_intact", get_dir(src,node), node.pipe_color)
underlays += img
return connected | img.dir
/obj/machinery/atmospherics/proc/icon_addbroken(var/connected)
var/unconnected = (~connected) & initialize_directions
for(var/direction in cardinal)
if(unconnected & direction)
underlays += getpipeimage('icons/obj/atmospherics/binary_devices.dmi', "pipe_exposed", direction)
/obj/machinery/atmospherics/update_icon()
return null
@@ -89,4 +102,26 @@ Pipelines + Other Objects -> Pipe network
return ..()
/obj/machinery/atmospherics/proc/nullifyPipenetwork()
return
return
/obj/machinery/atmospherics/proc/getpipeimage(var/iconset, var/iconstate, var/direction, var/col=rgb(255,255,255))
//Add identifiers for the iconset
if(iconsetids[iconset] == null)
iconsetids[iconset] = num2text(iconsetids.len + 1)
//Generate a unique identifier for this image combination
var/identifier = iconsetids[iconset] + "_[iconstate]_[direction]_[col]"
var/image/img
if(pipeimages[identifier] == null)
img = image(iconset, icon_state=iconstate, dir=direction)
img.color = col
pipeimages[identifier] = img
else
img = pipeimages[identifier]
return img

View File

@@ -1,4 +1,5 @@
/obj/machinery/atmospherics/binary
icon = 'icons/obj/atmospherics/binary_devices.dmi'
dir = SOUTH
initialize_directions = SOUTH|NORTH
use_power = 1
@@ -12,6 +13,8 @@
var/datum/pipe_network/network1
var/datum/pipe_network/network2
var/showpipe = 0
/obj/machinery/atmospherics/binary/New()
..()
switch(dir)
@@ -29,6 +32,33 @@
air1.volume = 200
air2.volume = 200
//Separate this because we don't need to update pipe icons if we just are going to change the state
/obj/machinery/atmospherics/binary/proc/update_icon_nopipes()
return
/obj/machinery/atmospherics/binary/update_icon()
update_icon_nopipes()
underlays.Cut()
if(showpipe)
var/connected = 0
//Add intact pieces
if(node1)
connected = icon_addintact(node1, connected)
if(node2)
connected = icon_addintact(node2, connected)
//Add broken pieces
icon_addbroken(connected)
/obj/machinery/atmospherics/binary/hide(var/intact)
showpipe = !intact
update_icon()
..(intact)
// Housekeeping and pipe network stuff below
/obj/machinery/atmospherics/binary/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference)
if(reference == node1)
@@ -75,6 +105,9 @@
node2 = target
break
if(level == 2)
showpipe = 1
update_icon()
/obj/machinery/atmospherics/binary/build_network()
@@ -122,11 +155,12 @@
if(reference==node1)
del(network1)
node1 = null
else if(reference==node2)
del(network2)
node2 = null
update_icon()
return null
/obj/machinery/atmospherics/binary/nullifyPipenetwork()

View File

@@ -1,6 +1,6 @@
/obj/machinery/atmospherics/binary/dp_vent_pump
icon = 'icons/obj/atmospherics/dp_vent_pump.dmi'
icon_state = "off"
icon = 'icons/obj/atmospherics/unary_devices.dmi' //We reuse the normal vent icons!
icon_state = "dpvent_map"
//node2 is output port
//node1 is input port
@@ -13,6 +13,18 @@
var/id = null
var/datum/radio_frequency/radio_connection
var/on = 0
var/pump_direction = 1 //0 = siphoning, 1 = releasing
var/external_pressure_bound = ONE_ATMOSPHERE
var/input_pressure_min = 0
var/output_pressure_max = 0
var/pressure_checks = 1
//1: Do not pass external_pressure_bound
//2: Do not pass input_pressure_min
//4: Do not pass output_pressure_max
/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume
name = "large dual-port air vent"
@@ -22,40 +34,19 @@
air1.volume = 1000
air2.volume = 1000
var/on = 0
var/pump_direction = 1 //0 = siphoning, 1 = releasing
/obj/machinery/atmospherics/binary/dp_vent_pump/update_icon_nopipes()
overlays.Cut()
if(showpipe)
overlays += getpipeimage('icons/obj/atmospherics/unary_devices.dmi', "dpvent_cap")
var/external_pressure_bound = ONE_ATMOSPHERE
var/input_pressure_min = 0
var/output_pressure_max = 0
if(!on || stat & (NOPOWER|BROKEN))
icon_state = "vent_off"
return
var/pressure_checks = 1
//1: Do not pass external_pressure_bound
//2: Do not pass input_pressure_min
//4: Do not pass output_pressure_max
/obj/machinery/atmospherics/binary/dp_vent_pump/update_icon()
if(on)
if(pump_direction)
icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]out"
else
icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]in"
if(pump_direction)
icon_state = "vent_out"
else
icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]off"
on = 0
return
/obj/machinery/atmospherics/binary/dp_vent_pump/hide(var/i) //to make the little pipe section invisible, the icon changes.
if(on)
if(pump_direction)
icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]out"
else
icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]in"
else
icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]off"
on = 0
return
icon_state = "vent_in"
/obj/machinery/atmospherics/binary/dp_vent_pump/process()
..()
@@ -81,6 +72,7 @@ var/pressure_checks = 1
var/datum/gas_mixture/removed = air1.remove(transfer_moles)
loc.assume_air(removed)
air_update_turf()
if(network1)
network1.update = 1
@@ -100,6 +92,7 @@ var/pressure_checks = 1
var/datum/gas_mixture/removed = loc.remove_air(transfer_moles)
air2.merge(removed)
air_update_turf()
if(network2)
network2.update = 1

View File

@@ -1,8 +1,14 @@
/*
Passive gate is similar to the regular pump except:
* It doesn't require power
* Can not transfer low pressure to higher pressure (so it's more like a valve where you can control the flow)
*/
/obj/machinery/atmospherics/binary/passive_gate
//Tries to achieve target pressure at output (like a normal pump) except
// Uses no power but can not transfer gases from a low pressure area to a high pressure area
icon = 'icons/obj/atmospherics/passive_gate.dmi'
icon_state = "intact_off"
icon_state = "passgate_map"
name = "passive gate"
desc = "A one-way air valve that does not require power"
@@ -16,19 +22,10 @@
var/id = null
var/datum/radio_frequency/radio_connection
/obj/machinery/atmospherics/binary/passive_gate/update_icon()
if(stat & NOPOWER)
icon_state = "intact_off"
else if(node1 && node2)
icon_state = "intact_[on?("on"):("off")]"
else
if(node1)
icon_state = "exposed_1_off"
else if(node2)
icon_state = "exposed_2_off"
else
icon_state = "exposed_3_off"
return
/obj/machinery/atmospherics/binary/passive_gate/update_icon_nopipes()
overlays.Cut()
if(on & !(stat & NOPOWER))
overlays += getpipeimage('icons/obj/atmospherics/binary_devices.dmi', "passgate_on")
/obj/machinery/atmospherics/binary/passive_gate/process()
..()

View File

@@ -13,9 +13,7 @@ Thus, the two variables affect pump operation are set in New():
*/
/obj/machinery/atmospherics/binary/pump
icon = 'icons/obj/atmospherics/pump.dmi'
icon_state = "intact_off"
icon_state = "pump_map"
name = "gas pump"
desc = "A pump"
@@ -30,21 +28,13 @@ Thus, the two variables affect pump operation are set in New():
/obj/machinery/atmospherics/binary/pump/on
on = 1
icon_state = "intact_on"
/obj/machinery/atmospherics/binary/pump/update_icon()
/obj/machinery/atmospherics/binary/pump/update_icon_nopipes()
if(stat & NOPOWER)
icon_state = "intact_off"
else if(node1 && node2)
icon_state = "intact_[on?("on"):("off")]"
else
if(node1)
icon_state = "exposed_1_off"
else if(node2)
icon_state = "exposed_2_off"
else
icon_state = "exposed_3_off"
return
icon_state = "pump_off"
return
icon_state = "pump_[on?"on":"off"]"
/obj/machinery/atmospherics/binary/pump/process()
// ..()

View File

@@ -13,9 +13,7 @@ Thus, the two variables affect pump operation are set in New():
*/
/obj/machinery/atmospherics/binary/volume_pump
icon = 'icons/obj/atmospherics/volume_pump.dmi'
icon_state = "intact_off"
icon_state = "volpump_map"
name = "volumetric gas pump"
desc = "A volumetric pump"
@@ -30,21 +28,13 @@ Thus, the two variables affect pump operation are set in New():
/obj/machinery/atmospherics/binary/volume_pump/on
on = 1
icon_state = "intact_on"
/obj/machinery/atmospherics/binary/volume_pump/update_icon()
/obj/machinery/atmospherics/binary/volume_pump/update_icon_nopipes()
if(stat & NOPOWER)
icon_state = "intact_off"
else if(node1 && node2)
icon_state = "intact_[on?("on"):("off")]"
else
if(node1)
icon_state = "exposed_1_off"
else if(node2)
icon_state = "exposed_2_off"
else
icon_state = "exposed_3_off"
return
icon_state = "volpump_off"
return
icon_state = "volpump_[on?"on":"off"]"
/obj/machinery/atmospherics/binary/volume_pump/process()
// ..()

View File

@@ -1,6 +1,9 @@
/*
This should ideally have /unary/ as parent, why doesn't it? //Donkie
*/
/obj/machinery/atmospherics/portables_connector
icon = 'icons/obj/atmospherics/portables_connector.dmi'
icon_state = "intact"
icon = 'icons/obj/atmospherics/unary_devices.dmi'
icon_state = "connector_map" //Only for mapping purposes, so mappers can see direction
name = "connector port"
desc = "For connecting portables devices related to atmospherics control."
@@ -16,30 +19,42 @@
var/datum/pipe_network/network
var/showpipe = 0
var/on = 0
use_power = 0
level = 0
/obj/machinery/atmospherics/portables_connector/visible
level = 2
/obj/machinery/atmospherics/portables_connector/New()
initialize_directions = dir
..()
/obj/machinery/atmospherics/portables_connector/update_icon()
if(node)
icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]intact"
dir = get_dir(src, node)
else
icon_state = "exposed"
icon_state = "connector"
underlays.Cut()
if(showpipe)
var/state
var/col
if(node)
state = "pipe_intact"
col = node.pipe_color
else
state = "pipe_exposed"
underlays += getpipeimage('icons/obj/atmospherics/binary_devices.dmi', state, initialize_directions, col)
return
/obj/machinery/atmospherics/portables_connector/hide(var/i) //to make the little pipe section invisible, the icon changes.
if(node)
icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]intact"
dir = get_dir(src, node)
else
icon_state = "exposed"
/obj/machinery/atmospherics/portables_connector/hide(var/intact)
showpipe = !intact
update_icon()
..(intact)
/obj/machinery/atmospherics/portables_connector/process()
..()
@@ -85,6 +100,10 @@
if(target.initialize_directions & get_dir(target,src))
node = target
break
//build_network() //might need this
if(level == 2)
showpipe = 1
update_icon()
@@ -125,6 +144,8 @@
del(network)
node = null
update_icon()
return null

View File

@@ -1,6 +1,5 @@
/obj/machinery/atmospherics/trinary/filter
icon = 'icons/obj/atmospherics/filter.dmi'
icon_state = "intact_off"
icon_state = "filter_off"
density = 1
name = "gas filter"
@@ -28,6 +27,10 @@ Filter types:
var/frequency = 0
var/datum/radio_frequency/radio_connection
/obj/machinery/atmospherics/trinary/filter/flipped
icon_state = "filter_off_f"
flipped = 1
/obj/machinery/atmospherics/trinary/filter/proc/set_frequency(new_frequency)
radio_controller.remove_object(src, frequency)
frequency = new_frequency
@@ -39,16 +42,13 @@ Filter types:
if(radio_controller)
initialize()
/obj/machinery/atmospherics/trinary/filter/update_icon()
if(stat & NOPOWER)
icon_state = "intact_off"
else if(node2 && node3 && node1)
icon_state = "intact_[on?("on"):("off")]"
else
icon_state = "intact_off"
on = 0
/obj/machinery/atmospherics/trinary/filter/update_icon_nopipes()
if(!(stat & NOPOWER) && on && node1 && node2 && node3)
icon_state = "filter_on[flipped?"_f":""]"
return
return
on = 0
icon_state = "filter_off[flipped?"_f":""]"
/obj/machinery/atmospherics/trinary/filter/power_change()
var/old_stat = stat

View File

@@ -1,6 +1,5 @@
/obj/machinery/atmospherics/trinary/mixer
icon = 'icons/obj/atmospherics/mixer.dmi'
icon_state = "intact_off"
icon_state = "mixer_off"
density = 1
name = "gas mixer"
@@ -17,16 +16,18 @@
//node 3 is the outlet, nodes 1 & 2 are intakes
/obj/machinery/atmospherics/trinary/mixer/update_icon()
if(stat & NOPOWER)
icon_state = "intact_off"
else if(node2 && node3 && node1)
icon_state = "intact_[on?("on"):("off")]"
else
icon_state = "intact_off"
on = 0
/obj/machinery/atmospherics/trinary/mixer/flipped
icon_state = "mixer_off_f"
flipped = 1
return
/obj/machinery/atmospherics/trinary/mixer/update_icon_nopipes()
if(!(stat & NOPOWER) && on && node1 && node2 && node3)
icon_state = "mixer_on[flipped?"_f":""]"
return
on = 0
icon_state = "mixer_off[flipped?"_f":""]"
/obj/machinery/atmospherics/trinary/mixer/power_change()
var/old_stat = stat

View File

@@ -1,4 +1,5 @@
/obj/machinery/atmospherics/trinary
icon = 'icons/obj/atmospherics/trinary_devices.dmi'
dir = SOUTH
initialize_directions = SOUTH|NORTH|WEST
use_power = 1
@@ -15,6 +16,8 @@
var/datum/pipe_network/network2
var/datum/pipe_network/network3
var/flipped = 0
/obj/machinery/atmospherics/trinary/New()
..()
switch(dir)
@@ -34,7 +37,46 @@
air2.volume = 200
air3.volume = 200
// Housekeeping and pipe network stuff below
/*
Iconnery
*/
/obj/machinery/atmospherics/trinary/proc/update_icon_nopipes()
return
/obj/machinery/atmospherics/trinary/icon_addintact(var/obj/machinery/atmospherics/node, var/connected)
var/image/img = getpipeimage('icons/obj/atmospherics/trinary_devices.dmi', "intact", get_dir(src,node), node.pipe_color)
overlays += img
return connected | img.dir
/obj/machinery/atmospherics/trinary/icon_addbroken(var/connected)
var/unconnected = (~connected) & initialize_directions
for(var/direction in cardinal)
if(unconnected & direction)
overlays += getpipeimage('icons/obj/atmospherics/trinary_devices.dmi', "intact", direction)
/obj/machinery/atmospherics/trinary/update_icon()
update_icon_nopipes()
var/connected = 0
overlays.Cut()
//Add non-broken pieces
if(node1)
connected = icon_addintact(node1, connected)
if(node2)
connected = icon_addintact(node2, connected)
if(node3)
connected = icon_addintact(node3, connected)
//Add broken pieces
icon_addbroken(connected)
/*
Housekeeping and pipe network stuff below
*/
/obj/machinery/atmospherics/trinary/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference)
if(reference == node1)
network1 = new_network
@@ -72,10 +114,25 @@
/obj/machinery/atmospherics/trinary/initialize()
src.disconnect(src)
//Mixer:
//1 and 2 is input
//Node 3 is output
//If we flip the mixer, 1 and 3 shall exchange positions
//Filter:
//Node 1 is input
//Node 2 is filtered output
//Node 3 is rest output
//If we flip the filter, 1 and 3 shall exchange positions
var/node1_connect = turn(dir, -180)
var/node2_connect = turn(dir, -90)
var/node3_connect = dir
if(flipped)
node1_connect = turn(node1_connect, 180)
node3_connect = turn(node3_connect, 180)
for(var/obj/machinery/atmospherics/target in get_step(src,node1_connect))
if(target.initialize_directions & get_dir(target,src))
node1 = target
@@ -159,6 +216,8 @@
del(network3)
node3 = null
update_icon()
return null
/obj/machinery/atmospherics/trinary/nullifyPipenetwork()

View File

@@ -1,6 +1,5 @@
/obj/machinery/atmospherics/unary/outlet_injector
icon = 'icons/obj/atmospherics/outlet_injector.dmi'
icon_state = "off"
icon_state = "inje_map"
use_power = 1
name = "Air Injector"
@@ -17,17 +16,15 @@
level = 1
/obj/machinery/atmospherics/unary/outlet_injector/update_icon()
if(node)
if(on && !(stat & NOPOWER))
icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]on"
else
icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]off"
else
icon_state = "exposed"
on = 0
/obj/machinery/atmospherics/unary/outlet_injector/on
on = 1
return
/obj/machinery/atmospherics/unary/outlet_injector/update_icon_nopipes()
if(!node || !on || stat & (NOPOWER|BROKEN))
icon_state = "inje_off"
return
icon_state = "inje_on"
/obj/machinery/atmospherics/unary/outlet_injector/power_change()
var/old_stat = stat
@@ -72,7 +69,7 @@
if(network)
network.update = 1
flick("inject", src)
flick("inje_inject", src)
/obj/machinery/atmospherics/unary/outlet_injector/proc/set_frequency(new_frequency)
radio_controller.remove_object(src, frequency)
@@ -136,14 +133,3 @@
spawn(2)
broadcast_status()
update_icon()
/obj/machinery/atmospherics/unary/outlet_injector/hide(var/i) //to make the little pipe section invisible, the icon changes.
if(node)
if(on)
icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]on"
else
icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]off"
else
icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]exposed"
on = 0
return

View File

@@ -1,4 +1,6 @@
/obj/machinery/atmospherics/unary
icon = 'icons/obj/atmospherics/unary_devices.dmi'
dir = SOUTH
initialize_directions = SOUTH
layer = TURF_LAYER+0.1
@@ -9,6 +11,8 @@
var/datum/pipe_network/network
var/showpipe = 0
/obj/machinery/atmospherics/unary/New()
..()
initialize_directions = dir
@@ -16,7 +20,40 @@
air_contents.volume = 200
// Housekeeping and pipe network stuff below
/*
Iconnery
*/
//Separate this because we don't need to update pipe icons if we just are going to change the state
/obj/machinery/atmospherics/unary/proc/update_icon_nopipes()
return
/obj/machinery/atmospherics/unary/update_icon()
update_icon_nopipes()
//This code might be a bit specific to scrubber, vents and injectors, but honestly they are basically the only ones used in the unary branch.
underlays.Cut()
if(showpipe)
var/state
var/col
if(node)
state = "pipe_intact"
col = node.pipe_color
else
state = "pipe_exposed"
underlays += getpipeimage('icons/obj/atmospherics/binary_devices.dmi', state, initialize_directions, col)
/obj/machinery/atmospherics/unary/hide(var/intact)
showpipe = !intact
update_icon()
..(intact)
/*
Housekeeping and pipe network stuff below
*/
/obj/machinery/atmospherics/unary/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference)
if(reference == node)
network = new_network
@@ -49,7 +86,10 @@
if(!infiniteloop)
target.initialize(1)
break
//build_network()
//build_network() might need this
if(level == 2)
showpipe = 1
update_icon()
@@ -96,6 +136,8 @@
reference.disconnect(src)
del(network)
update_icon()
return null
/obj/machinery/atmospherics/unary/nullifyPipenetwork()

View File

@@ -1,6 +1,5 @@
/obj/machinery/atmospherics/unary/vent_pump
icon = 'icons/obj/atmospherics/vent_pump.dmi'
icon_state = "off"
icon_state = "vent_map"
name = "air vent"
desc = "Has a valve and pump attached to it"
@@ -34,15 +33,14 @@
/obj/machinery/atmospherics/unary/vent_pump/on
on = 1
icon_state = "out"
icon_state = "vent_out"
/obj/machinery/atmospherics/unary/vent_pump/siphon
pump_direction = 0
icon_state = "off"
/obj/machinery/atmospherics/unary/vent_pump/siphon/on
on = 1
icon_state = "in"
icon_state = "vent_in"
/obj/machinery/atmospherics/unary/vent_pump/New()
..()
@@ -65,19 +63,23 @@
..()
air_contents.volume = 1000
/obj/machinery/atmospherics/unary/vent_pump/update_icon()
if(welded)
icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]weld"
return
if(on && !(stat & (NOPOWER|BROKEN)))
if(pump_direction)
icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]out"
else
icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]in"
else
icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]off"
/obj/machinery/atmospherics/unary/vent_pump/update_icon_nopipes()
overlays.Cut()
if(showpipe)
overlays += getpipeimage('icons/obj/atmospherics/unary_devices.dmi', "vent_cap", initialize_directions)
return
if(welded)
icon_state = "vent_welded"
return
if(!node || !on || stat & (NOPOWER|BROKEN))
icon_state = "vent_off"
return
if(pump_direction)
icon_state = "vent_out"
else
icon_state = "vent_in"
/obj/machinery/atmospherics/unary/vent_pump/process()
..()
@@ -260,20 +262,6 @@
update_icon()
return
/obj/machinery/atmospherics/unary/vent_pump/hide(var/i) //to make the little pipe section invisible, the icon changes.
if(welded)
icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]weld"
return
if(on&&node)
if(pump_direction)
icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]out"
else
icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]in"
else
icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]off"
on = 0
return
/obj/machinery/atmospherics/unary/vent_pump/attackby(obj/item/W, mob/user)
if (istype(W, /obj/item/weapon/wrench)&& !(stat & NOPOWER) && on)
user << "<span class='danger'>You cannot unwrench this [src], turn it off first.</span>"
@@ -298,18 +286,17 @@
else
return ..()
/obj/machinery/atmospherics/unary/vent_pump/examine()
set src in oview(1)
/obj/machinery/atmospherics/unary/vent_pump/examine(mob/user)
..()
if(welded)
usr << "It seems welded shut."
user << "It seems welded shut."
/obj/machinery/atmospherics/unary/vent_pump/power_change()
if(powered(power_channel))
stat &= ~NOPOWER
else
stat |= NOPOWER
update_icon()
update_icon_nopipes()
/obj/machinery/atmospherics/unary/vent_pump/Destroy()
if(initial_loc)
@@ -355,7 +342,7 @@
index = "[T.loc.name]\[[i]\]"
vents[index] = temp_vent
if(!vents.len)
L << "<span class='warning'> There are no available vents to travel to, they could be welded. </span>"
L << "<span class='warning'>There are no available vents to travel to, they could be welded. </span>"
return
var/obj/selection = input(L,"Select a destination.", "Duct System") as null|anything in sortList(vents)
@@ -366,20 +353,22 @@
if(iscarbon(L) && L.ventcrawler < 2) // lesser ventcrawlers can't bring items
for(var/obj/item/carried_item in L.contents)
if(!istype(carried_item, /obj/item/weapon/implant))//If it's not an implant
L << "<span class='warning'> You can't be carrying items or have items equipped when vent crawling!</span>"
L << "<span class='warning'>You can't be carrying items or have items equipped when vent crawling!</span>"
return
var/obj/machinery/atmospherics/unary/vent_pump/target_vent = vents[selection]
if(!target_vent)
return
for(var/mob/O in viewers(L, null))
O.show_message(text("<B>[L] scrambles into the ventilation ducts!</B>"), 1)
L.visible_message("<B>[L] scrambles into the ventillation ducts!</B>")
target_vent.audible_message("<span class='notice'>You hear something squeezing through the ventilation ducts.</span>")
for(var/mob/O in hearers(target_vent,null))
O.show_message("You hear something squeezing through the ventilation ducts.",2)
if(target_vent.welded) //the vent can be welded while they scrolled through the list.
target_vent = src
L << "<span class='warning'> The vent you were heading to appears to be welded.</span>"
L << "<span class='warning'>The vent you were heading to appears to be welded.</span>"
L.loc = target_vent.loc
var/area/new_area = get_area(L.loc)
if(new_area)

View File

@@ -1,6 +1,5 @@
/obj/machinery/atmospherics/unary/vent_scrubber
icon = 'icons/obj/atmospherics/vent_scrubber.dmi'
icon_state = "off"
icon_state = "scrub_map"
name = "air scrubber"
desc = "Has a valve and pump attached to it"
@@ -41,15 +40,19 @@
src.initialize()
src.broadcast_status()
/obj/machinery/atmospherics/unary/vent_scrubber/update_icon()
if(node && on && !(stat & (NOPOWER|BROKEN)))
if(scrubbing)
icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]on"
else
icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]in"
/obj/machinery/atmospherics/unary/vent_scrubber/update_icon_nopipes()
overlays.Cut()
if(showpipe)
overlays += getpipeimage('icons/obj/atmospherics/unary_devices.dmi', "scrub_cap", initialize_directions)
if(!node || !on || stat & (NOPOWER|BROKEN))
icon_state = "scrub_off"
return
if(scrubbing)
icon_state = "scrub_on"
else
icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]off"
return
icon_state = "scrub_purge"
/obj/machinery/atmospherics/unary/vent_scrubber/proc/set_frequency(new_frequency)
radio_controller.remove_object(src, frequency)
@@ -158,18 +161,6 @@
network.update = 1
return 1
/* //unused piece of code
/obj/machinery/atmospherics/unary/vent_scrubber/hide(var/i) //to make the little pipe section invisible, the icon changes.
if(on&&node)
if(scrubbing)
icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]on"
else
icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]in"
else
icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]off"
on = 0
return
*/
/obj/machinery/atmospherics/unary/vent_scrubber/receive_signal(datum/signal/signal)
if(stat & (NOPOWER|BROKEN))
@@ -241,7 +232,7 @@
stat &= ~NOPOWER
else
stat |= NOPOWER
update_icon()
update_icon_nopipes()
/obj/machinery/atmospherics/unary/vent_scrubber/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
if (!istype(W, /obj/item/weapon/wrench))

View File

@@ -1,6 +1,16 @@
/*
This file contains:
Manual Valve
Digital Valve
These pipes are not under the binary_atmos base because instead of doing pretty maths, they simply
connect the networks together for a more efficient transfer
*/
/obj/machinery/atmospherics/valve
icon = 'icons/obj/atmospherics/valve.dmi'
icon_state = "valve0"
icon = 'icons/obj/atmospherics/binary_devices.dmi'
icon_state = "mvalve_map"
name = "manual valve"
desc = "A pipe valve"
@@ -24,13 +34,33 @@
/obj/machinery/atmospherics/valve/open
open = 1
icon_state = "valve1"
/obj/machinery/atmospherics/valve/update_icon(animation)
//Separate this because we don't need to update pipe icons if we just are going to crank the handle
/obj/machinery/atmospherics/valve/proc/update_icon_nopipes(var/animation = 0)
normalize_dir()
icon_state = "mvalve_off"
overlays.Cut()
if(animation)
flick("valve[src.open][!src.open]",src)
else
icon_state = "valve[open]"
overlays += getpipeimage('icons/obj/atmospherics/binary_devices.dmi', "mvalve_[open][!open]")
else if(open)
overlays += getpipeimage('icons/obj/atmospherics/binary_devices.dmi', "mvalve_on")
/obj/machinery/atmospherics/valve/update_icon()
update_icon_nopipes()
var/connected = 0
underlays.Cut()
//Add non-broken pieces
if(node1)
connected = icon_addintact(node1, connected)
if(node2)
connected = icon_addintact(node2, connected)
//Add broken pieces
icon_addbroken(connected)
/obj/machinery/atmospherics/valve/New()
..()
@@ -41,8 +71,6 @@
initialize_directions = EAST|WEST
/obj/machinery/atmospherics/valve/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference)
if(reference == node1)
network_node1 = new_network
if(open)
@@ -81,11 +109,11 @@
..()
/obj/machinery/atmospherics/valve/proc/open()
if(open) return 0
if(open)
return 0
open = 1
update_icon()
update_icon_nopipes()
if(network_node1&&network_node2)
network_node1.merge(network_node2)
@@ -99,12 +127,11 @@
return 1
/obj/machinery/atmospherics/valve/proc/close()
if(!open)
return 0
open = 0
update_icon()
update_icon_nopipes()
if(network_node1)
del(network_node1)
@@ -129,7 +156,7 @@
obj/machinery/atmospherics/valve/attack_hand(mob/user as mob)
src.add_fingerprint(usr)
update_icon(1)
update_icon_nopipes(1)
sleep(10)
if (src.open)
src.close()
@@ -179,6 +206,7 @@ obj/machinery/atmospherics/valve/attack_hand(mob/user as mob)
break
//build_network()
update_icon()
/*
var/connect_directions
@@ -256,12 +284,14 @@ obj/machinery/atmospherics/valve/attack_hand(mob/user as mob)
del(network_node2)
node2 = null
update_icon()
return null
/obj/machinery/atmospherics/valve/digital // can be controlled by AI
name = "digital valve"
desc = "A digitally controlled valve."
icon = 'icons/obj/atmospherics/digital_valve.dmi'
icon_state = "dvalve_map"
/obj/machinery/atmospherics/valve/digital/attack_ai(mob/user as mob)
return src.attack_hand(user)
@@ -272,14 +302,29 @@ obj/machinery/atmospherics/valve/attack_hand(mob/user as mob)
return
..()
/obj/machinery/atmospherics/valve/digital/update_icon_nopipes(var/animation)
normalize_dir()
if(stat & NOPOWER)
icon_state = "dvalve_nopower"
overlays.Cut()
return
icon_state = "dvalve_off"
overlays.Cut()
if(animation)
overlays += getpipeimage('icons/obj/atmospherics/binary_devices.dmi', "dvalve_[open][!open]")
else if(open)
overlays += getpipeimage('icons/obj/atmospherics/binary_devices.dmi', "dvalve_on")
//Radio remote control
/obj/machinery/atmospherics/valve/digital/proc
set_frequency(new_frequency)
radio_controller.remove_object(src, frequency)
frequency = new_frequency
if(frequency)
radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA)
/obj/machinery/atmospherics/valve/digital/proc/set_frequency(new_frequency)
radio_controller.remove_object(src, frequency)
frequency = new_frequency
if(frequency)
radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA)
/obj/machinery/atmospherics/valve/digital/initialize()
..()

View File

@@ -17,6 +17,12 @@
//Return null if parent should stop checking other pipes. Recall: del(src) will by default return null
return 1
/obj/machinery/atmospherics/pipe/proc/releaseAirToTurf()
if(air_temporary)
var/turf/T = loc
T.assume_air(air_temporary)
air_update_turf()
/obj/machinery/atmospherics/pipe/return_air()
if(!parent)
parent = new /datum/pipeline()
@@ -48,586 +54,8 @@
/obj/machinery/atmospherics/pipe/attackby(obj/item/weapon/W, mob/user)
if(istype(W, /obj/item/device/analyzer))
atmosanalyzer_scan(parent.air, user)
else
return ..()
/obj/machinery/atmospherics/pipe/proc/releaseAirToTurf()
if(air_temporary)
var/turf/T = loc
T.assume_air(air_temporary)
air_update_turf()
/obj/machinery/atmospherics/pipe/simple
icon = 'icons/obj/pipes.dmi'
icon_state = "intact-f"
name = "pipe"
desc = "A one meter section of regular pipe"
volume = 70
dir = SOUTH
initialize_directions = SOUTH|NORTH
var/obj/machinery/atmospherics/node1
var/obj/machinery/atmospherics/node2
var/minimum_temperature_difference = 300
var/thermal_conductivity = 0 //WALL_HEAT_TRANSFER_COEFFICIENT No
var/maximum_pressure = 70*ONE_ATMOSPHERE
var/fatigue_pressure = 55*ONE_ATMOSPHERE
alert_pressure = 55*ONE_ATMOSPHERE
level = 1
/obj/machinery/atmospherics/pipe/simple/New()
..()
switch(dir)
if(SOUTH || NORTH)
initialize_directions = SOUTH|NORTH
if(EAST || WEST)
initialize_directions = EAST|WEST
if(NORTHEAST)
initialize_directions = NORTH|EAST
if(NORTHWEST)
initialize_directions = NORTH|WEST
if(SOUTHEAST)
initialize_directions = SOUTH|EAST
if(SOUTHWEST)
initialize_directions = SOUTH|WEST
/obj/machinery/atmospherics/pipe/simple/initialize()
normalize_dir()
var/N = 2
for(var/D in cardinal)
if(D & initialize_directions)
N--
for(var/obj/machinery/atmospherics/target in get_step(src, D))
if(target.initialize_directions & get_dir(target,src))
if(!node1 && N == 1)
node1 = target
break
if(!node2 && N == 0)
node2 = target
break
var/turf/T = loc // hide if turf is not intact
hide(T.intact)
update_icon()
/obj/machinery/atmospherics/pipe/simple/Destroy()
if(node1)
var/obj/machinery/atmospherics/A = node1
node1.disconnect(src)
A.build_network()
if(node2)
var/obj/machinery/atmospherics/A = node2
node2.disconnect(src)
A.build_network()
releaseAirToTurf()
..()
/obj/machinery/atmospherics/pipe/simple/disconnect(obj/machinery/atmospherics/reference)
if(reference == node1)
if(istype(node1, /obj/machinery/atmospherics/pipe))
qdel(parent)
node1 = null
if(reference == node2)
if(istype(node2, /obj/machinery/atmospherics/pipe))
qdel(parent)
node2 = null
update_icon()
/obj/machinery/atmospherics/pipe/simple/check_pressure(pressure)
var/datum/gas_mixture/environment = loc.return_air()
var/pressure_difference = pressure - environment.return_pressure()
if(pressure_difference > maximum_pressure)
burst()
else if(pressure_difference > fatigue_pressure)
//TODO: leak to turf, doing pfshhhhh
if(prob(5))
burst()
else return 1
/obj/machinery/atmospherics/pipe/simple/proc/burst()
src.visible_message("<span class='userdanger'>[src] bursts!</span>");
playsound(src.loc, 'sound/effects/bang.ogg', 25, 1)
var/datum/effect/effect/system/harmless_smoke_spread/smoke = new
smoke.set_up(1,0, src.loc, 0)
smoke.start()
qdel(src)
/obj/machinery/atmospherics/pipe/simple/proc/normalize_dir()
if(dir==3)
dir = 1
else if(dir==12)
dir = 4
/obj/machinery/atmospherics/pipe/simple/update_icon()
if(node1&&node2)
var/C = ""
switch(pipe_color)
if ("red") C = "-r"
if ("blue") C = "-b"
if ("cyan") C = "-c"
if ("green") C = "-g"
if ("yellow") C = "-y"
if ("purple") C = "-p"
icon_state = "intact[C][invisibility ? "-f" : "" ]"
else
var/have_node1 = node1?1:0
var/have_node2 = node2?1:0
icon_state = "exposed[have_node1][have_node2][invisibility ? "-f" : "" ]"
/obj/machinery/atmospherics/pipe/simple/hide(var/i)
if(level == 1 && istype(loc, /turf/simulated))
invisibility = i ? 101 : 0
update_icon()
/obj/machinery/atmospherics/pipe/simple/pipeline_expansion()
return list(node1, node2)
/obj/machinery/atmospherics/pipe/simple/insulated
icon = 'icons/obj/atmospherics/red_pipe.dmi'
icon_state = "intact"
minimum_temperature_difference = 10000
thermal_conductivity = 0
maximum_pressure = 1000*ONE_ATMOSPHERE
fatigue_pressure = 900*ONE_ATMOSPHERE
alert_pressure = 900*ONE_ATMOSPHERE
level = 2
/obj/machinery/atmospherics/pipe/manifold
icon = 'icons/obj/atmospherics/pipe_manifold.dmi'
icon_state = "manifold-f"
name = "pipe manifold"
desc = "A manifold composed of regular pipes"
volume = 105
dir = SOUTH
initialize_directions = EAST|NORTH|WEST
var/obj/machinery/atmospherics/node1
var/obj/machinery/atmospherics/node2
var/obj/machinery/atmospherics/node3
level = 1
layer = 2.4 //under wires with their 2.44
/obj/machinery/atmospherics/pipe/manifold/New()
switch(dir)
if(NORTH)
initialize_directions = EAST|SOUTH|WEST
if(SOUTH)
initialize_directions = WEST|NORTH|EAST
if(EAST)
initialize_directions = SOUTH|WEST|NORTH
if(WEST)
initialize_directions = NORTH|EAST|SOUTH
..()
/obj/machinery/atmospherics/pipe/manifold/initialize()
for(var/D in cardinal)
if(D == dir)
continue
for(var/obj/machinery/atmospherics/target in get_step(src, D))
if(target.initialize_directions & get_dir(target,src))
if(turn(dir, 90) == D)
node1 = target
if(turn(dir, 270) == D)
node2 = target
if(turn(dir, 180) == D)
node3 = target
break
var/turf/T = src.loc // hide if turf is not intact
hide(T.intact)
update_icon()
/obj/machinery/atmospherics/pipe/manifold/Destroy()
if(node1)
var/obj/machinery/atmospherics/A = node1
node1.disconnect(src)
A.build_network()
if(node2)
var/obj/machinery/atmospherics/A = node2
node2.disconnect(src)
A.build_network()
if(node3)
var/obj/machinery/atmospherics/A = node3
node3.disconnect(src)
A.build_network()
releaseAirToTurf()
..()
/obj/machinery/atmospherics/pipe/manifold/disconnect(obj/machinery/atmospherics/reference)
if(reference == node1)
if(istype(node1, /obj/machinery/atmospherics/pipe))
qdel(parent)
node1 = null
if(reference == node2)
if(istype(node2, /obj/machinery/atmospherics/pipe))
qdel(parent)
node2 = null
if(reference == node3)
if(istype(node3, /obj/machinery/atmospherics/pipe))
qdel(parent)
node3 = null
update_icon()
..()
/obj/machinery/atmospherics/pipe/manifold/update_icon()
if(node1&&node2&&node3)
var/C = ""
switch(pipe_color)
if ("red") C = "-r"
if ("blue") C = "-b"
if ("cyan") C = "-c"
if ("green") C = "-g"
if ("yellow") C = "-y"
if ("purple") C = "-p"
icon_state = "manifold[C][invisibility ? "-f" : ""]"
else
var/connected = 0
var/unconnected = 0
var/connect_directions = (NORTH|SOUTH|EAST|WEST)&(~dir)
if(node1)
connected |= get_dir(src, node1)
if(node2)
connected |= get_dir(src, node2)
if(node3)
connected |= get_dir(src, node3)
unconnected = (~connected)&(connect_directions)
icon_state = "manifold_[connected]_[unconnected]"
/obj/machinery/atmospherics/pipe/manifold/hide(var/i)
if(level == 1 && istype(loc, /turf/simulated))
invisibility = i ? 101 : 0
update_icon()
/obj/machinery/atmospherics/pipe/manifold/pipeline_expansion()
return list(node1, node2, node3)
//coloured pipes
/obj/machinery/atmospherics/pipe/simple/scrubbers
name="Scrubbers pipe"
pipe_color="red"
icon_state = ""
/obj/machinery/atmospherics/pipe/simple/supply
name="Air supply pipe"
pipe_color="blue"
icon_state = ""
/obj/machinery/atmospherics/pipe/simple/supplymain
name="Main air supply pipe"
pipe_color="purple"
icon_state = ""
/obj/machinery/atmospherics/pipe/simple/general
name="Pipe"
pipe_color=""
icon_state = ""
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible
level = 2
icon_state = "intact-r"
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden
level = 1
icon_state = "intact-r-f"
/obj/machinery/atmospherics/pipe/simple/supply/visible
level = 2
icon_state = "intact-b"
/obj/machinery/atmospherics/pipe/simple/supply/hidden
level = 1
icon_state = "intact-b-f"
/obj/machinery/atmospherics/pipe/simple/supplymain/visible
level = 2
icon_state = "intact-p"
/obj/machinery/atmospherics/pipe/simple/supplymain/hidden
level = 1
icon_state = "intact-p-f"
/obj/machinery/atmospherics/pipe/simple/general/visible
level = 2
icon_state = "intact"
/obj/machinery/atmospherics/pipe/simple/general/hidden
level = 1
icon_state = "intact-f"
/obj/machinery/atmospherics/pipe/simple/yellow
name="Pipe"
pipe_color="yellow"
icon_state = ""
/obj/machinery/atmospherics/pipe/simple/yellow/visible
level = 2
icon_state = "intact-y"
/obj/machinery/atmospherics/pipe/simple/yellow/hidden
level = 1
icon_state = "intact-y-f"
//coloured manifolds
/obj/machinery/atmospherics/pipe/manifold/scrubbers
name="Scrubbers pipe"
pipe_color="red"
icon_state = ""
/obj/machinery/atmospherics/pipe/manifold/supply
name="Air supply pipe"
pipe_color="blue"
icon_state = ""
/obj/machinery/atmospherics/pipe/manifold/supplymain
name="Main air supply pipe"
pipe_color="purple"
icon_state = ""
/obj/machinery/atmospherics/pipe/manifold/general
name="Air supply pipe"
pipe_color="gray"
icon_state = ""
/obj/machinery/atmospherics/pipe/manifold/yellow
name="Air supply pipe"
pipe_color="yellow"
icon_state = ""
/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible
level = 2
icon_state = "manifold-r"
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden
level = 1
icon_state = "manifold-r-f"
/obj/machinery/atmospherics/pipe/manifold/supply/visible
level = 2
icon_state = "manifold-b"
/obj/machinery/atmospherics/pipe/manifold/supply/hidden
level = 1
icon_state = "manifold-b-f"
/obj/machinery/atmospherics/pipe/manifold/supplymain/visible
level = 2
icon_state = "manifold-p"
/obj/machinery/atmospherics/pipe/manifold/supplymain/hidden
level = 1
icon_state = "manifold-p-f"
/obj/machinery/atmospherics/pipe/manifold/general/visible
level = 2
icon_state = "manifold"
/obj/machinery/atmospherics/pipe/manifold/general/hidden
level = 1
icon_state = "manifold-f"
/obj/machinery/atmospherics/pipe/manifold/yellow/visible
level = 2
icon_state = "manifold-y"
/obj/machinery/atmospherics/pipe/manifold/yellow/hidden
level = 1
icon_state = "manifold-y-f"
/obj/machinery/atmospherics/pipe/vent
icon = 'icons/obj/atmospherics/pipe_vent.dmi'
icon_state = "intact"
name = "vent"
desc = "A large air vent"
level = 1
volume = 250
dir = SOUTH
initialize_directions = SOUTH
can_unwrench = 0
var/build_killswitch = 1
var/obj/machinery/atmospherics/node1
/obj/machinery/atmospherics/pipe/vent/New()
initialize_directions = dir
..()
/obj/machinery/atmospherics/pipe/vent/process()
if(!parent)
if(build_killswitch <= 0)
. = PROCESS_KILL
else
build_killswitch--
..()
if(istype(W,/obj/item/device/pipe_painter))
return
else
parent.mingle_with_turf(loc, 250)
/*
if(!node1)
if(!nodealert)
//world << "Missing node from [src] at [src.x],[src.y],[src.z]"
nodealert = 1
else if (nodealert)
nodealert = 0
*/
/obj/machinery/atmospherics/pipe/vent/Destroy()
if(node1)
node1.disconnect(src)
..()
/obj/machinery/atmospherics/pipe/vent/pipeline_expansion()
return list(node1)
/obj/machinery/atmospherics/pipe/vent/update_icon()
if(node1)
icon_state = "intact"
dir = get_dir(src, node1)
else
icon_state = "exposed"
/obj/machinery/atmospherics/pipe/vent/initialize()
var/connect_direction = dir
for(var/obj/machinery/atmospherics/target in get_step(src,connect_direction))
if(target.initialize_directions & get_dir(target,src))
node1 = target
break
update_icon()
/obj/machinery/atmospherics/pipe/vent/disconnect(obj/machinery/atmospherics/reference)
if(reference == node1)
if(istype(node1, /obj/machinery/atmospherics/pipe))
del(parent)
node1 = null
update_icon()
return null
/obj/machinery/atmospherics/pipe/vent/hide(var/i) //to make the little pipe section invisible, the icon changes.
if(node1)
icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]intact"
dir = get_dir(src, node1)
else
icon_state = "exposed"
/obj/machinery/atmospherics/pipe/tank
icon = 'icons/obj/atmospherics/pipe_tank.dmi'
icon_state = "intact"
name = "pressure tank"
desc = "A large vessel containing pressurized gas."
volume = 10000 //in liters, 1 meters by 1 meters by 2 meters
dir = SOUTH
initialize_directions = SOUTH
density = 1
can_unwrench = 0
var/obj/machinery/atmospherics/node1
/obj/machinery/atmospherics/pipe/tank/New()
initialize_directions = dir
..()
/obj/machinery/atmospherics/pipe/tank/carbon_dioxide
name = "pressure tank (Carbon Dioxide)"
/obj/machinery/atmospherics/pipe/tank/carbon_dioxide/New()
air_temporary = new
air_temporary.volume = volume
air_temporary.temperature = T20C
air_temporary.carbon_dioxide = (25*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature)
..()
/obj/machinery/atmospherics/pipe/tank/toxins
icon = 'icons/obj/atmospherics/orange_pipe_tank.dmi'
name = "pressure tank (Plasma)"
/obj/machinery/atmospherics/pipe/tank/toxins/New()
air_temporary = new
air_temporary.volume = volume
air_temporary.temperature = T20C
air_temporary.toxins = (25*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature)
..()
/obj/machinery/atmospherics/pipe/tank/oxygen_agent_b
icon = 'icons/obj/atmospherics/red_orange_pipe_tank.dmi'
name = "pressure tank (Oxygen + Plasma)"
/obj/machinery/atmospherics/pipe/tank/oxygen_agent_b/New()
air_temporary = new
air_temporary.volume = volume
air_temporary.temperature = T0C
var/datum/gas/oxygen_agent_b/trace_gas = new
trace_gas.moles = (25*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature)
air_temporary.trace_gases += trace_gas
..()
/obj/machinery/atmospherics/pipe/tank/oxygen
icon = 'icons/obj/atmospherics/blue_pipe_tank.dmi'
name = "pressure tank (Oxygen)"
/obj/machinery/atmospherics/pipe/tank/oxygen/New()
air_temporary = new
air_temporary.volume = volume
air_temporary.temperature = T20C
air_temporary.oxygen = (25*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature)
..()
/obj/machinery/atmospherics/pipe/tank/nitrogen
icon = 'icons/obj/atmospherics/red_pipe_tank.dmi'
name = "pressure tank (Nitrogen)"
/obj/machinery/atmospherics/pipe/tank/nitrogen/New()
air_temporary = new
air_temporary.volume = volume
air_temporary.temperature = T20C
air_temporary.nitrogen = (25*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature)
..()
/obj/machinery/atmospherics/pipe/tank/air
icon = 'icons/obj/atmospherics/red_pipe_tank.dmi'
name = "pressure tank (Air)"
/obj/machinery/atmospherics/pipe/tank/air/New()
air_temporary = new
air_temporary.volume = volume
air_temporary.temperature = T20C
air_temporary.oxygen = (25*ONE_ATMOSPHERE*O2STANDARD)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature)
air_temporary.nitrogen = (25*ONE_ATMOSPHERE*N2STANDARD)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature)
..()
/obj/machinery/atmospherics/pipe/tank/Destroy()
if(node1)
node1.disconnect(src)
..()
/obj/machinery/atmospherics/pipe/tank/pipeline_expansion()
return list(node1)
/obj/machinery/atmospherics/pipe/tank/update_icon()
if(node1)
icon_state = "intact"
dir = get_dir(src, node1)
else
icon_state = "exposed"
/obj/machinery/atmospherics/pipe/tank/initialize()
var/connect_direction = dir
for(var/obj/machinery/atmospherics/target in get_step(src,connect_direction))
if(target.initialize_directions & get_dir(target,src))
node1 = target
break
update_icon()
/obj/machinery/atmospherics/pipe/tank/disconnect(obj/machinery/atmospherics/reference)
if(reference == node1)
if(istype(node1, /obj/machinery/atmospherics/pipe))
del(parent)
node1 = null
update_icon()
return ..()

View File

@@ -0,0 +1,185 @@
/*
3-Way Manifold
*/
/obj/machinery/atmospherics/pipe/manifold
icon = 'icons/obj/atmospherics/pipe_manifold.dmi'
icon_state = "manifold"
name = "pipe manifold"
desc = "A manifold composed of regular pipes"
volume = 105
dir = SOUTH
initialize_directions = EAST|NORTH|WEST
var/obj/machinery/atmospherics/node1
var/obj/machinery/atmospherics/node2
var/obj/machinery/atmospherics/node3
level = 1
layer = 2.4 //under wires with their 2.44
/obj/machinery/atmospherics/pipe/manifold/New()
color = pipe_color
switch(dir)
if(NORTH)
initialize_directions = EAST|SOUTH|WEST
if(SOUTH)
initialize_directions = WEST|NORTH|EAST
if(EAST)
initialize_directions = SOUTH|WEST|NORTH
if(WEST)
initialize_directions = NORTH|EAST|SOUTH
..()
/obj/machinery/atmospherics/pipe/manifold/initialize()
for(var/D in cardinal)
if(D == dir)
continue
for(var/obj/machinery/atmospherics/target in get_step(src, D))
if(target.initialize_directions & get_dir(target,src))
if(turn(dir, 90) == D)
node1 = target
if(turn(dir, 270) == D)
node2 = target
if(turn(dir, 180) == D)
node3 = target
break
var/turf/T = src.loc // hide if turf is not intact
hide(T.intact)
update_icon()
/obj/machinery/atmospherics/pipe/manifold/Destroy()
if(node1)
var/obj/machinery/atmospherics/A = node1
node1.disconnect(src)
A.build_network()
if(node2)
var/obj/machinery/atmospherics/A = node2
node2.disconnect(src)
A.build_network()
if(node3)
var/obj/machinery/atmospherics/A = node3
node3.disconnect(src)
A.build_network()
releaseAirToTurf()
..()
/obj/machinery/atmospherics/pipe/manifold/disconnect(obj/machinery/atmospherics/reference)
if(reference == node1)
if(istype(node1, /obj/machinery/atmospherics/pipe))
qdel(parent)
node1 = null
if(reference == node2)
if(istype(node2, /obj/machinery/atmospherics/pipe))
qdel(parent)
node2 = null
if(reference == node3)
if(istype(node3, /obj/machinery/atmospherics/pipe))
qdel(parent)
node3 = null
update_icon()
..()
/obj/machinery/atmospherics/pipe/manifold/update_icon()
var/invis = invisibility ? "-f" : ""
icon_state = "manifold_center[invis]"
overlays.Cut()
//Add non-broken pieces
if(node1)
overlays += getpipeimage('icons/obj/atmospherics/pipe_manifold.dmi', "manifold_full[invis]", get_dir(src,node1))
if(node2)
overlays += getpipeimage('icons/obj/atmospherics/pipe_manifold.dmi', "manifold_full[invis]", get_dir(src,node2))
if(node3)
overlays += getpipeimage('icons/obj/atmospherics/pipe_manifold.dmi', "manifold_full[invis]", get_dir(src,node3))
/obj/machinery/atmospherics/pipe/manifold/hide(var/i)
if(level == 1 && istype(loc, /turf/simulated))
invisibility = i ? 101 : 0
update_icon()
/obj/machinery/atmospherics/pipe/manifold/pipeline_expansion()
return list(node1, node2, node3)
//Colored pipes, use these for mapping
/obj/machinery/atmospherics/pipe/manifold/general
name="pipe"
/obj/machinery/atmospherics/pipe/manifold/general/visible
level = 2
/obj/machinery/atmospherics/pipe/manifold/general/hidden
level = 1
/obj/machinery/atmospherics/pipe/manifold/scrubbers
name="scrubbers pipe"
pipe_color=rgb(255,0,0)
color=rgb(255,0,0)
/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible
level = 2
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden
level = 1
/obj/machinery/atmospherics/pipe/manifold/supply
name="air supply pipe"
pipe_color=rgb(0,0,255)
color=rgb(0,0,255)
/obj/machinery/atmospherics/pipe/manifold/supply/visible
level = 2
/obj/machinery/atmospherics/pipe/manifold/supply/hidden
level = 1
/obj/machinery/atmospherics/pipe/manifold/supplymain
name="main air supply pipe"
pipe_color=rgb(130,43,272)
color=rgb(130,43,272)
/obj/machinery/atmospherics/pipe/manifold/supplymain/visible
level = 2
/obj/machinery/atmospherics/pipe/manifold/supplymain/hidden
level = 1
/obj/machinery/atmospherics/pipe/manifold/yellow
pipe_color=rgb(255,198,0)
color=rgb(255,198,0)
/obj/machinery/atmospherics/pipe/manifold/yellow/visible
level = 2
/obj/machinery/atmospherics/pipe/manifold/yellow/hidden
level = 1
/obj/machinery/atmospherics/pipe/manifold/cyan
pipe_color=rgb(0,256,249)
color=rgb(0,256,249)
/obj/machinery/atmospherics/pipe/manifold/cyan/visible
level = 2
/obj/machinery/atmospherics/pipe/manifold/cyan/hidden
level = 1
/obj/machinery/atmospherics/pipe/manifold/green
pipe_color=rgb(30,256,0)
color=rgb(30,256,0)
/obj/machinery/atmospherics/pipe/manifold/green/visible
level = 2
/obj/machinery/atmospherics/pipe/manifold/green/hidden
level = 1

View File

@@ -0,0 +1,189 @@
/*
4-way manifold
*/
/obj/machinery/atmospherics/pipe/manifold4w
icon = 'icons/obj/atmospherics/pipe_manifold.dmi'
icon_state = "manifold4w"
name = "4-way pipe manifold"
desc = "A manifold composed of regular pipes"
volume = 140
initialize_directions = NORTH|SOUTH|EAST|WEST
var/obj/machinery/atmospherics/node1 // North
var/obj/machinery/atmospherics/node2 // South
var/obj/machinery/atmospherics/node3 // East
var/obj/machinery/atmospherics/node4 // West
level = 1
layer = 2.4 //under wires with their 2.44
/obj/machinery/atmospherics/pipe/manifold4w/New()
color = pipe_color
..()
/obj/machinery/atmospherics/pipe/manifold4w/initialize()
for(var/D in cardinal)
for(var/obj/machinery/atmospherics/target in get_step(src, D))
if(target.initialize_directions & get_dir(target,src))
if(D == NORTH)
node1 = target
else if(D == SOUTH)
node2 = target
else if(D == EAST)
node3 = target
else if(D == WEST)
node4 = target
break
var/turf/T = src.loc // hide if turf is not intact
hide(T.intact)
update_icon()
/obj/machinery/atmospherics/pipe/manifold4w/hide(var/i)
if(level == 1 && istype(loc, /turf/simulated))
invisibility = i ? 101 : 0
update_icon()
/obj/machinery/atmospherics/pipe/manifold4w/pipeline_expansion()
return list(node1, node2, node3, node4)
/obj/machinery/atmospherics/pipe/manifold4w/Destroy()
if(node1)
var/obj/machinery/atmospherics/A = node1
node1.disconnect(src)
A.build_network()
if(node2)
var/obj/machinery/atmospherics/A = node2
node2.disconnect(src)
A.build_network()
if(node3)
var/obj/machinery/atmospherics/A = node3
node3.disconnect(src)
A.build_network()
if(node4)
var/obj/machinery/atmospherics/A = node4
node4.disconnect(src)
A.build_network()
releaseAirToTurf()
..()
/obj/machinery/atmospherics/pipe/manifold4w/disconnect(obj/machinery/atmospherics/reference)
if(reference == node1)
if(istype(node1, /obj/machinery/atmospherics/pipe))
qdel(parent)
node1 = null
if(reference == node2)
if(istype(node2, /obj/machinery/atmospherics/pipe))
qdel(parent)
node2 = null
if(reference == node3)
if(istype(node3, /obj/machinery/atmospherics/pipe))
qdel(parent)
node3 = null
if(reference == node4)
if(istype(node4, /obj/machinery/atmospherics/pipe))
qdel(parent)
node4 = null
update_icon()
..()
/obj/machinery/atmospherics/pipe/manifold4w/update_icon()
if(!node1 && !node2 && !node3 && !node4) //Remove us if we ain't connected to anything.
qdel(src)
return
var/invis = invisibility ? "-f" : ""
icon_state = "manifold4w_center[invis]"
overlays.Cut()
//Add non-broken pieces
if(node1)
overlays += getpipeimage('icons/obj/atmospherics/pipe_manifold.dmi', "manifold_full[invis]", NORTH)
if(node2)
overlays += getpipeimage('icons/obj/atmospherics/pipe_manifold.dmi', "manifold_full[invis]", SOUTH)
if(node3)
overlays += getpipeimage('icons/obj/atmospherics/pipe_manifold.dmi', "manifold_full[invis]", EAST)
if(node4)
overlays += getpipeimage('icons/obj/atmospherics/pipe_manifold.dmi', "manifold_full[invis]", WEST)
//Colored pipes, use these for mapping
/obj/machinery/atmospherics/pipe/manifold4w/general
name="pipe"
/obj/machinery/atmospherics/pipe/manifold4w/general/visible
level = 2
/obj/machinery/atmospherics/pipe/manifold4w/general/hidden
level = 1
/obj/machinery/atmospherics/pipe/manifold4w/scrubbers
name="scrubbers pipe"
pipe_color=rgb(255,0,0)
color=rgb(255,0,0)
/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/visible
level = 2
/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden
level = 1
/obj/machinery/atmospherics/pipe/manifold4w/supply
name="air supply pipe"
pipe_color=rgb(0,0,255)
color=rgb(0,0,255)
/obj/machinery/atmospherics/pipe/manifold4w/supply/visible
level = 2
/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden
level = 1
/obj/machinery/atmospherics/pipe/manifold4w/supplymain
name="main air supply pipe"
pipe_color=rgb(130,43,272)
color=rgb(130,43,272)
/obj/machinery/atmospherics/pipe/manifold4w/supplymain/visible
level = 2
/obj/machinery/atmospherics/pipe/manifold4w/supplymain/hidden
level = 1
/obj/machinery/atmospherics/pipe/manifold4w/yellow
pipe_color=rgb(255,198,0)
color=rgb(255,198,0)
/obj/machinery/atmospherics/pipe/manifold4w/yellow/visible
level = 2
/obj/machinery/atmospherics/pipe/manifold4w/yellow/hidden
level = 1
/obj/machinery/atmospherics/pipe/manifold4w/cyan
pipe_color=rgb(0,256,249)
color=rgb(0,256,249)
/obj/machinery/atmospherics/pipe/manifold4w/cyan/visible
level = 2
/obj/machinery/atmospherics/pipe/manifold4w/cyan/hidden
level = 1
/obj/machinery/atmospherics/pipe/manifold4w/green
pipe_color=rgb(30,256,0)
color=rgb(30,256,0)
/obj/machinery/atmospherics/pipe/manifold4w/green/visible
level = 2
/obj/machinery/atmospherics/pipe/manifold4w/green/hidden
level = 1

View File

@@ -0,0 +1,213 @@
/*
Simple Pipe
The regular pipe you see everywhere, including bent ones.
*/
/obj/machinery/atmospherics/pipe/simple
icon = 'icons/obj/pipes.dmi'
icon_state = "intact"
name = "pipe"
desc = "A one meter section of regular pipe"
volume = 70
dir = SOUTH
initialize_directions = SOUTH|NORTH
var/obj/machinery/atmospherics/node1
var/obj/machinery/atmospherics/node2
var/minimum_temperature_difference = 300
var/thermal_conductivity = 0 //WALL_HEAT_TRANSFER_COEFFICIENT No
var/maximum_pressure = 70*ONE_ATMOSPHERE
var/fatigue_pressure = 55*ONE_ATMOSPHERE
alert_pressure = 55*ONE_ATMOSPHERE
level = 1
/obj/machinery/atmospherics/pipe/simple/New()
color = pipe_color
..()
switch(dir)
if(SOUTH || NORTH)
initialize_directions = SOUTH|NORTH
if(EAST || WEST)
initialize_directions = EAST|WEST
if(NORTHEAST)
initialize_directions = NORTH|EAST
if(NORTHWEST)
initialize_directions = NORTH|WEST
if(SOUTHEAST)
initialize_directions = SOUTH|EAST
if(SOUTHWEST)
initialize_directions = SOUTH|WEST
/obj/machinery/atmospherics/pipe/simple/initialize()
normalize_dir()
var/N = 2
for(var/D in cardinal)
if(D & initialize_directions)
N--
for(var/obj/machinery/atmospherics/target in get_step(src, D))
if(target.initialize_directions & get_dir(target,src))
if(!node1 && N == 1)
node1 = target
break
if(!node2 && N == 0)
node2 = target
break
var/turf/T = loc // hide if turf is not intact
hide(T.intact)
update_icon()
/obj/machinery/atmospherics/pipe/simple/Destroy()
if(node1)
var/obj/machinery/atmospherics/A = node1
node1.disconnect(src)
A.build_network()
if(node2)
var/obj/machinery/atmospherics/A = node2
node2.disconnect(src)
A.build_network()
releaseAirToTurf()
..()
/obj/machinery/atmospherics/pipe/simple/disconnect(obj/machinery/atmospherics/reference)
if(reference == node1)
if(istype(node1, /obj/machinery/atmospherics/pipe))
qdel(parent)
node1 = null
if(reference == node2)
if(istype(node2, /obj/machinery/atmospherics/pipe))
qdel(parent)
node2 = null
update_icon()
/obj/machinery/atmospherics/pipe/simple/check_pressure(pressure)
var/datum/gas_mixture/environment = loc.return_air()
var/pressure_difference = pressure - environment.return_pressure()
if(pressure_difference > maximum_pressure)
burst()
else if(pressure_difference > fatigue_pressure)
//TODO: leak to turf, doing pfshhhhh
if(prob(5))
burst()
else return 1
/obj/machinery/atmospherics/pipe/simple/proc/burst()
src.visible_message("<span class='userdanger'>[src] bursts!</span>");
playsound(src.loc, 'sound/effects/bang.ogg', 25, 1)
var/datum/effect/effect/system/harmless_smoke_spread/smoke = new
smoke.set_up(1,0, src.loc, 0)
smoke.start()
qdel(src)
/obj/machinery/atmospherics/pipe/simple/proc/normalize_dir()
if(dir==3)
dir = 1
else if(dir==12)
dir = 4
/obj/machinery/atmospherics/pipe/simple/update_icon()
if(node1&&node2)
icon_state = "intact[invisibility ? "-f" : "" ]"
else
var/have_node1 = node1?1:0
var/have_node2 = node2?1:0
icon_state = "exposed[have_node1][have_node2][invisibility ? "-f" : "" ]"
/obj/machinery/atmospherics/pipe/simple/hide(var/i)
if(level == 1 && istype(loc, /turf/simulated))
invisibility = i ? 101 : 0
update_icon()
/obj/machinery/atmospherics/pipe/simple/pipeline_expansion()
return list(node1, node2)
/obj/machinery/atmospherics/pipe/simple/insulated
icon = 'icons/obj/atmospherics/red_pipe.dmi'
icon_state = "intact"
minimum_temperature_difference = 10000
thermal_conductivity = 0
maximum_pressure = 1000*ONE_ATMOSPHERE
fatigue_pressure = 900*ONE_ATMOSPHERE
alert_pressure = 900*ONE_ATMOSPHERE
level = 2
//Colored pipes, use these for mapping
/obj/machinery/atmospherics/pipe/simple/general
name="pipe"
/obj/machinery/atmospherics/pipe/simple/general/visible
level = 2
/obj/machinery/atmospherics/pipe/simple/general/hidden
level = 1
/obj/machinery/atmospherics/pipe/simple/scrubbers
name="scrubbers pipe"
pipe_color=rgb(255,0,0)
color=rgb(255,0,0)
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible
level = 2
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden
level = 1
/obj/machinery/atmospherics/pipe/simple/supply
name="air supply pipe"
pipe_color=rgb(0,0,255)
color=rgb(0,0,255)
/obj/machinery/atmospherics/pipe/simple/supply/visible
level = 2
/obj/machinery/atmospherics/pipe/simple/supply/hidden
level = 1
/obj/machinery/atmospherics/pipe/simple/supplymain
name="main air supply pipe"
pipe_color=rgb(130,43,272)
color=rgb(130,43,272)
/obj/machinery/atmospherics/pipe/simple/supplymain/visible
level = 2
/obj/machinery/atmospherics/pipe/simple/supplymain/hidden
level = 1
/obj/machinery/atmospherics/pipe/simple/yellow
pipe_color=rgb(255,198,0)
color=rgb(255,198,0)
/obj/machinery/atmospherics/pipe/simple/yellow/visible
level = 2
/obj/machinery/atmospherics/pipe/simple/yellow/hidden
level = 1
/obj/machinery/atmospherics/pipe/simple/cyan
pipe_color=rgb(0,256,249)
color=rgb(0,256,249)
/obj/machinery/atmospherics/pipe/simple/cyan/visible
level = 2
/obj/machinery/atmospherics/pipe/simple/cyan/hidden
level = 1
/obj/machinery/atmospherics/pipe/simple/green
pipe_color=rgb(30,256,0)
color=rgb(30,256,0)
/obj/machinery/atmospherics/pipe/simple/green/visible
level = 2
/obj/machinery/atmospherics/pipe/simple/green/hidden
level = 1

View File

@@ -0,0 +1,169 @@
/*
Atmospheric Tanks
*/
/obj/machinery/atmospherics/pipe/tank
icon = 'icons/obj/atmospherics/pipe_tank.dmi'
icon_state = "generic"
name = "pressure tank"
desc = "A large vessel containing pressurized gas."
volume = 10000 //in liters, 1 meters by 1 meters by 2 meters
dir = SOUTH
initialize_directions = SOUTH
density = 1
can_unwrench = 0
var/obj/machinery/atmospherics/node
var/showpipe = 0
/obj/machinery/atmospherics/pipe/tank/New()
initialize_directions = dir
..()
/obj/machinery/atmospherics/pipe/tank/hide(var/intact)
showpipe = !intact
update_icon()
..(intact)
/obj/machinery/atmospherics/pipe/tank/Destroy()
if(node)
node.disconnect(src)
..()
/obj/machinery/atmospherics/pipe/tank/pipeline_expansion()
return list(node)
/obj/machinery/atmospherics/pipe/tank/update_icon()
underlays.Cut()
if(showpipe)
var/state
var/col
if(node)
state = "pipe_intact"
col = node.pipe_color
else
state = "pipe_exposed"
underlays += getpipeimage('icons/obj/atmospherics/pipe_tank.dmi', state, initialize_directions, col)
/obj/machinery/atmospherics/pipe/tank/initialize()
var/connect_direction = dir
for(var/obj/machinery/atmospherics/target in get_step(src,connect_direction))
if(target.initialize_directions & get_dir(target,src))
node = target
break
if(level == 2)
showpipe = 1
update_icon()
/obj/machinery/atmospherics/pipe/tank/disconnect(obj/machinery/atmospherics/reference)
if(reference == node)
if(istype(node, /obj/machinery/atmospherics/pipe))
del(parent)
node = null
update_icon()
/*
CO2 Tank
*/
/obj/machinery/atmospherics/pipe/tank/carbon_dioxide
name = "pressure tank (Carbon Dioxide)"
/obj/machinery/atmospherics/pipe/tank/carbon_dioxide/New()
air_temporary = new
air_temporary.volume = volume
air_temporary.temperature = T20C
air_temporary.carbon_dioxide = (25*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature)
..()
/*
Plasma Tank
*/
/obj/machinery/atmospherics/pipe/tank/toxins
icon_state = "orange"
name = "pressure tank (Plasma)"
/obj/machinery/atmospherics/pipe/tank/toxins/New()
air_temporary = new
air_temporary.volume = volume
air_temporary.temperature = T20C
air_temporary.toxins = (25*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature)
..()
/*
Plasma + Oxygen Tank
*/
/obj/machinery/atmospherics/pipe/tank/oxygen_agent_b
icon_state = "orange_2"
name = "pressure tank (Oxygen + Plasma)"
/obj/machinery/atmospherics/pipe/tank/oxygen_agent_b/New()
air_temporary = new
air_temporary.volume = volume
air_temporary.temperature = T0C
var/datum/gas/oxygen_agent_b/trace_gas = new
trace_gas.moles = (25*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature)
air_temporary.trace_gases += trace_gas
..()
/*
Oxygen Tank
*/
/obj/machinery/atmospherics/pipe/tank/oxygen
icon_state = "blue"
name = "pressure tank (Oxygen)"
/obj/machinery/atmospherics/pipe/tank/oxygen/New()
air_temporary = new
air_temporary.volume = volume
air_temporary.temperature = T20C
air_temporary.oxygen = (25*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature)
..()
/*
Nitrogen Tank
*/
/obj/machinery/atmospherics/pipe/tank/nitrogen
icon_state = "red"
name = "pressure tank (Nitrogen)"
/obj/machinery/atmospherics/pipe/tank/nitrogen/New()
air_temporary = new
air_temporary.volume = volume
air_temporary.temperature = T20C
air_temporary.nitrogen = (25*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature)
..()
/*
Air Tank
*/
/obj/machinery/atmospherics/pipe/tank/air
icon_state = "grey"
name = "pressure tank (Air)"
/obj/machinery/atmospherics/pipe/tank/air/New()
air_temporary = new
air_temporary.volume = volume
air_temporary.temperature = T20C
air_temporary.oxygen = (25*ONE_ATMOSPHERE*O2STANDARD)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature)
air_temporary.nitrogen = (25*ONE_ATMOSPHERE*N2STANDARD)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature)
..()

View File

@@ -0,0 +1,89 @@
/*
Atmospheric Vent
*/
/obj/machinery/atmospherics/pipe/vent
icon = 'icons/obj/atmospherics/pipe_vent.dmi'
icon_state = "intact"
name = "vent"
desc = "A large air vent"
level = 1
volume = 250
dir = SOUTH
initialize_directions = SOUTH
can_unwrench = 0
var/build_killswitch = 1
var/obj/machinery/atmospherics/node1
/obj/machinery/atmospherics/pipe/vent/New()
initialize_directions = dir
..()
/obj/machinery/atmospherics/pipe/vent/process()
if(!parent)
if(build_killswitch <= 0)
. = PROCESS_KILL
else
build_killswitch--
..()
return
else
parent.mingle_with_turf(loc, 250)
/*
if(!node1)
if(!nodealert)
//world << "Missing node from [src] at [src.x],[src.y],[src.z]"
nodealert = 1
else if (nodealert)
nodealert = 0
*/
/obj/machinery/atmospherics/pipe/vent/Destroy()
if(node1)
node1.disconnect(src)
..()
/obj/machinery/atmospherics/pipe/vent/pipeline_expansion()
return list(node1)
/obj/machinery/atmospherics/pipe/vent/update_icon()
if(node1)
icon_state = "intact"
dir = get_dir(src, node1)
else
icon_state = "exposed"
/obj/machinery/atmospherics/pipe/vent/initialize()
var/connect_direction = dir
for(var/obj/machinery/atmospherics/target in get_step(src,connect_direction))
if(target.initialize_directions & get_dir(target,src))
node1 = target
break
update_icon()
/obj/machinery/atmospherics/pipe/vent/disconnect(obj/machinery/atmospherics/reference)
if(reference == node1)
if(istype(node1, /obj/machinery/atmospherics/pipe))
del(parent)
node1 = null
update_icon()
return null
/obj/machinery/atmospherics/pipe/vent/hide(var/i) //to make the little pipe section invisible, the icon changes.
if(node1)
icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]intact"
dir = get_dir(src, node1)
else
icon_state = "exposed"

View File

@@ -168,10 +168,10 @@ datum/controller/air_system
atom/movable/proc/CanAtmosPass()
return 1
atom/proc/CanPass(atom/movable/mover, turf/target, height=1.5, air_group = 0)
return (!density || !height || air_group)
atom/proc/CanPass(atom/movable/mover, turf/target, height=1.5)
return (!density || !height)
turf/CanPass(atom/movable/mover, turf/target, height=1.5,air_group=0)
turf/CanPass(atom/movable/mover, turf/target, height=1.5)
if(!target) return 0
if(istype(mover)) // turf/Enter(...) will perform more advanced checks
@@ -182,10 +182,10 @@ turf/CanPass(atom/movable/mover, turf/target, height=1.5,air_group=0)
return 0
for(var/obj/obstacle in src)
if(!obstacle.CanPass(mover, target, height, air_group))
if(!obstacle.CanPass(mover, target, height))
return 0
for(var/obj/obstacle in target)
if(!obstacle.CanPass(mover, src, height, air_group))
if(!obstacle.CanPass(mover, src, height))
return 0
return 1

View File

@@ -49,7 +49,7 @@
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/boots(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/device/pda/warden(H), slot_belt)
H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(H), slot_glasses)
H.equip_to_slot_or_del(new /obj/item/device/flash(H), slot_l_store)
H.equip_to_slot_or_del(new /obj/item/device/flash/handheld(H), slot_l_store)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
H.equip_to_slot_or_del(new /obj/item/weapon/handcuffs(H), slot_in_backpack)
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
@@ -115,7 +115,7 @@
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/boots(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/device/pda/security(H), slot_belt)
H.equip_to_slot_or_del(new /obj/item/weapon/handcuffs(H), slot_r_store)
H.equip_to_slot_or_del(new /obj/item/device/flash(H), slot_l_store)
H.equip_to_slot_or_del(new /obj/item/device/flash/handheld(H), slot_l_store)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
H.equip_to_slot_or_del(new /obj/item/weapon/handcuffs(H), slot_in_backpack)
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)

View File

@@ -49,7 +49,7 @@
new /obj/item/clothing/shoes/brown(src)
new /obj/item/weapon/storage/id_kit(src)
new /obj/item/weapon/storage/id_kit( src )
new /obj/item/device/flash(src)
new /obj/item/device/flash/handheld(src)
new /obj/item/clothing/glasses/sunglasses(src)
return
@@ -73,7 +73,7 @@
new /obj/item/weapon/storage/lockbox/loyalty(src)
new /obj/item/weapon/storage/flashbang_kit(src)
new /obj/item/weapon/storage/belt/security(src)
new /obj/item/device/flash(src)
new /obj/item/device/flash/handheld(src)
new /obj/item/weapon/melee/baton(src)
new /obj/item/weapon/gun/energy/taser(src)
new /obj/item/weapon/reagent_containers/spray/pepper(src)
@@ -122,7 +122,7 @@
new /obj/item/weapon/storage/backpack/satchel_sec(src)
new /obj/item/device/radio/headset/headset_sec(src)
new /obj/item/weapon/storage/belt/security(src)
new /obj/item/device/flash(src)
new /obj/item/device/flash/handheld(src)
new /obj/item/weapon/reagent_containers/spray/pepper(src)
new /obj/item/weapon/reagent_containers/spray/pepper(src)
new /obj/item/clothing/glasses/sunglasses(src)

View File

@@ -34,9 +34,13 @@
#define CLICK_CD_MELEE 8
#define CLICK_CD_RANGE 4
#define CLICK_CD_BREAKOUT 100
#define CLICK_CD_HANDCUFFED 10
#define CLICK_CD_TKSTRANGLE 10
#define CLICK_CD_RESIST 20
//click cooldowns, in tenths of a second
#define BE_CLOSE 1 //in the case of a silicon, to select if they need to be next to the atom
#define NO_DEXTERY 1 //if other mobs (monkeys, aliens, etc) can use this
//used by canUseTopic()
//used by canUseTopic()

View File

@@ -8,6 +8,11 @@
/proc/warning(msg)
world.log << "## WARNING: [msg]"
//not an error or a warning, but worth to mention on the world log, just in case.
#define NOTICE(MSG) notice(MSG)
/proc/notice(msg)
world.log << "## NOTICE: [msg]"
//print a testing-mode debug message to world.log
/proc/testing(msg)
#ifdef TESTING

View File

@@ -8,7 +8,9 @@
//facial hair
init_sprite_accessory_subtypes(/datum/sprite_accessory/facial_hair, facial_hair_styles_list, facial_hair_styles_male_list, facial_hair_styles_female_list)
//underwear
init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear, underwear_all, underwear_m, underwear_f)
init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear, underwear_list, underwear_m, underwear_f)
//undershirt
init_sprite_accessory_subtypes(/datum/sprite_accessory/undershirt, undershirt_list, undershirt_m, undershirt_f)
//Species
for(var/spath in typesof(/datum/species))

View File

@@ -16,7 +16,13 @@
switch(gender)
if(MALE) return pick(underwear_m)
if(FEMALE) return pick(underwear_f)
else return pick(underwear_all)
else return pick(underwear_list)
/proc/random_undershirt(gender)
switch(gender)
if(MALE) return pick(undershirt_m)
if(FEMALE) return pick(undershirt_f)
else return pick(undershirt_list)
/proc/random_hair_style(gender)
switch(gender)

View File

@@ -7,6 +7,7 @@
* angle2dir
* angle2text
* worldtime2text
* text2dir_extended & dir2text_short
*/
//Returns an integer given a hex input, supports negative values "-ff"
@@ -405,3 +406,51 @@ for(var/t in test_times)
/proc/isLeap(y)
return ((y) % 4 == 0 && ((y) % 100 != 0 || (y) % 400 == 0))
// A copy of text2dir, extended to accept one and two letter
// directions, and to clearly return 0 otherwise.
/proc/text2dir_extended(direction)
switch(uppertext(direction))
if("NORTH", "N")
return 1
if("SOUTH", "S")
return 2
if("EAST", "E")
return 4
if("WEST", "W")
return 8
if("NORTHEAST", "NE")
return 5
if("NORTHWEST", "NW")
return 9
if("SOUTHEAST", "SE")
return 6
if("SOUTHWEST", "SW")
return 10
else
return 0
// A copy of dir2text, which returns the short one or two letter
// directions used in tube icon states.
/proc/dir2text_short(direction)
switch(direction)
if(1)
return "N"
if(2)
return "S"
if(4)
return "E"
if(8)
return "W"
if(5)
return "NE"
if(6)
return "SE"
if(9)
return "NW"
if(10)
return "SW"
else
return

View File

@@ -763,17 +763,23 @@ Turf and target are seperate in case you want to teleport some distance from a t
else return get_step(ref, base_dir)
/proc/do_mob(var/mob/user , var/mob/target, var/time = 30) //This is quite an ugly solution but i refuse to use the old request system.
if(!user || !target) return 0
/proc/do_mob(var/mob/user , var/mob/target, var/time = 30, numticks = 5) //This is quite an ugly solution but i refuse to use the old request system.
if(!user || !target)
return 0
if(numticks == 0)
return 0
var/user_loc = user.loc
var/target_loc = target.loc
var/holding = user.get_active_hand()
sleep(time)
if(!user || !target) return 0
if ( user.loc == user_loc && target.loc == target_loc && user.get_active_hand() == holding && !( user.stat ) && ( !user.stunned && !user.weakened && !user.paralysis && !user.lying ) )
return 1
else
return 0
var/timefraction = round(time/numticks)
for(var/i = 0, i<numticks, i++)
sleep(timefraction)
if(!user || !target)
return 0
if ( user.loc != user_loc || target.loc != target_loc || user.get_active_hand() != holding || user.stat || ( user.stunned || user.weakened || user.paralysis || user.lying ) )
return 0
return 1
/proc/do_after(mob/user, delay, numticks = 5, needhand = 1)
if(!user || isnull(user))

View File

@@ -28,7 +28,7 @@
#define AGE_MIN 17 //youngest a character can be
#define AGE_MAX 85 //oldest a character can be
#define SHOES_SLOWDOWN 0 //How much shoes slow you down by default. Negative values speed you up
#define STRIP_DELAY 40 //time taken (in deciseconds) to strip somebody
#define POCKET_STRIP_DELAY 40 //time taken (in deciseconds) to search somebody's pockets
#define DOOR_CRUSH_DAMAGE 10 //the amount of damage that airlocks deal when they crush you
#define HUNGER_FACTOR 0.1 //factor at which mob nutrition decreases

View File

@@ -7,13 +7,17 @@ var/global/list/facial_hair_styles_list = list() //stores /datum/sprite_accessor
var/global/list/facial_hair_styles_male_list = list() //stores only hair names
var/global/list/facial_hair_styles_female_list = list() //stores only hair names
//Underwear
var/global/list/underwear_all = list() //stores /datum/sprite_accessory/underwear indexed by name
var/global/list/underwear_list = list() //stores /datum/sprite_accessory/underwear indexed by name
var/global/list/underwear_m = list() //stores only underwear name
var/global/list/underwear_f = list() //stores only underwear name
//Undershirts
var/global/list/undershirt_list = list() //stores /datum/sprite_accessory/undershirt indexed by name
var/global/list/undershirt_m = list() //stores only undershirt name
var/global/list/undershirt_f = list() //stores only undershirt name
//Backpacks
var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel")
//Female Uniforms
var/global/list/female_uniform_icons = list()
var/global/list/female_clothing_icons = list()
//radical shit
var/list/hit_appends = list("-OOF", "-ACK", "-UGH", "-HRNK", "-HURGH", "-GLORF")

View File

@@ -74,7 +74,7 @@
return M.click_action(A,src)
if(restrained())
changeNext_move(10) //Doing shit in cuffs shall be vey slow
changeNext_move(CLICK_CD_HANDCUFFED) //Doing shit in cuffs shall be vey slow
RestrainedClickOn(A)
return
@@ -202,7 +202,7 @@
return
/atom/proc/ShiftClick(var/mob/user)
if(user.client && user.client.eye == user)
examine()
user.examinate(src)
return
/*

View File

@@ -32,26 +32,6 @@
l_hand_hud_object = inv_box
adding += inv_box
//pocket 1
inv_box = new /obj/screen/inventory()
inv_box.name = "storage1"
inv_box.icon = 'icons/mob/screen_alien.dmi'
inv_box.icon_state = "pocket"
inv_box.screen_loc = ui_alien_storage_l
inv_box.slot_id = slot_l_store
inv_box.layer = 19
adding += inv_box
//pocket 2
inv_box = new /obj/screen/inventory()
inv_box.name = "storage2"
inv_box.icon = 'icons/mob/screen_alien.dmi'
inv_box.icon_state = "pocket"
inv_box.screen_loc = ui_alien_storage_r
inv_box.slot_id = slot_r_store
inv_box.layer = 19
adding += inv_box
//begin buttons
using = new /obj/screen/inventory()
@@ -79,6 +59,15 @@
adding += using
action_intent = using
if(istype(mymob, /mob/living/carbon/alien/humanoid/hunter))
mymob.leap_icon = new /obj/screen()
mymob.leap_icon.name = "leap"
mymob.leap_icon.icon = 'icons/mob/screen_alien.dmi'
mymob.leap_icon.icon_state = "leap_off"
mymob.leap_icon.screen_loc = ui_alien_storage_r
mymob.leap_icon.layer = 20
adding += mymob.leap_icon
using = new /obj/screen()
using.name = "mov_intent"
using.icon = 'icons/mob/screen_alien.dmi'

View File

@@ -51,7 +51,10 @@
if(usr.next_move >= world.time)
return
if(usr.stat || usr.restrained() || usr.stunned || usr.lying)
if(!owner.action_button_is_hands_free && (usr.restrained() || usr.stunned || usr.lying))
return 1
if(usr.stat)
return 1
if(!(owner in usr))
@@ -394,6 +397,10 @@
if(issilicon(usr))
var/mob/living/silicon/S = usr
S.sensor_mode()
if("leap")
if(istype(usr, /mob/living/carbon/alien/humanoid))
var/mob/living/carbon/alien/humanoid/hunter/AH = usr
AH.toggle_leap()
else
return 0
return 1

View File

@@ -55,7 +55,7 @@
// Oh by the way this didn't work with old click code which is why clicking shit didn't spam you
/atom/proc/attack_ghost(mob/dead/observer/user as mob)
if(user.client && user.client.inquisitive_ghost)
examine()
user.examinate(src)
return
// ---------------------------------------

View File

@@ -77,14 +77,13 @@
var/armor = ML.run_armor_check(affecting, "melee")
if(prob(75))
ML.apply_damage(rand(1,3), BRUTE, affecting, armor)
for(var/mob/O in viewers(ML, null))
O.show_message("<span class='danger'>[name] bites [ML]!</span>", 1)
ML.visible_message("<span class='danger'>[name] bites [ML]!</span>", \
"<span class='userdanger'>[name] bites [ML]!</span>")
if(armor >= 2) return
for(var/datum/disease/D in viruses)
ML.contract_disease(D,1,0)
else
for(var/mob/O in viewers(ML, null))
O.show_message("<span class='userdanger'>[src] has attempted to bite [ML]!</span>", 1)
ML.visible_message("<span class='danger'>[src] has attempted to bite [ML]!</span>")
/*
Aliens

View File

@@ -81,7 +81,8 @@
var/security_scaling_coeff = 8 //how much does the amount of players get divided by to determine open security officer positions
var/traitor_objectives_amount = 2
var/protect_roles_from_antagonist = 0// If security and such can be traitor/cult/other
var/protect_roles_from_antagonist = 0 //If security and such can be traitor/cult/other
var/protect_assistant_from_antagonist = 0 //If assistants can be traitor/cult/other
var/enforce_human_authority = 0 //If non-human species are barred from joining as a head of staff
var/allow_latejoin_antagonists = 0 // If late-joining players can be traitor/changeling
var/continuous_round_rev = 0 // Gamemodes which end instantly will instead keep on going until the round ends by escape shuttle or nuke.
@@ -375,6 +376,8 @@
if("protect_roles_from_antagonist")
config.protect_roles_from_antagonist = 1
if("protect_assistant_from_antagonist")
config.protect_assistant_from_antagonist = 1
if("enforce_human_authority")
config.enforce_human_authority = 1
if("allow_latejoin_antagonists")

View File

@@ -68,7 +68,6 @@ var/global/pipe_processing_killed = 0
world.tick_lag = config.Ticklag
setup_objects()
setup_map_transistions()
setupgenetics()
setupfactions()

View File

@@ -137,7 +137,7 @@ var/global/datum/shuttle_controller/emergency_shuttle/emergency_shuttle
if(!online && direction == 1) //we don't call the shuttle if it's already coming
incall(SHUTTLEAUTOCALLTIMER) //X minutes! If they want to recall, they have X-(X-5) minutes to do so
log_game("All the communications consoles were destroyed and all AIs are inactive. Shuttle called.")
message_admins("All the communications consoles were destroyed and all AIs are inactive. Shuttle called.", 1)
message_admins("All the communications consoles were destroyed and all AIs are inactive. Shuttle called.")
/datum/shuttle_controller/proc/move_shuttles()
var/datum/shuttle_manager/s
@@ -242,6 +242,6 @@ var/global/datum/shuttle_controller/emergency_shuttle/emergency_shuttle
var/turf/T = get_step(L, dir)
if(T)
for(var/obj/O in T) // For doors and such (kinda ugly but we can't have people opening doors)
if(!O.CanPass(L, L.loc, 1, 0))
if(!O.CanPass(L, L.loc, 1))
return
L.Move(get_step(L, dir), dir)

View File

@@ -76,6 +76,7 @@ var/global/datum/controller/supply_shuttle/supply_shuttle
/obj/machinery/computer/supplycomp
name = "supply shuttle console"
desc = "Used to order supplies."
icon = 'icons/obj/computer.dmi'
icon_state = "supply"
req_access = list(access_cargo)
@@ -89,6 +90,7 @@ var/global/datum/controller/supply_shuttle/supply_shuttle
/obj/machinery/computer/ordercomp
name = "supply ordering console"
desc = "Used to order supplies from cargo staff."
icon = 'icons/obj/computer.dmi'
icon_state = "request"
circuit = /obj/item/weapon/circuitboard/ordercomp

View File

@@ -81,7 +81,7 @@
var/record_id_num = 1001
/obj/effect/datacore/proc/manifest_inject(var/mob/living/carbon/human/H)
if(H.mind && (H.mind.need_job_assign))
if(H.mind && (H.mind.assigned_role != "MODE"))
var/assignment
if(H.mind.assigned_role)
assignment = H.mind.assigned_role

View File

@@ -43,7 +43,8 @@ Bonus
/datum/symptom/vomit/proc/Vomit(var/mob/living/M)
M.visible_message("<B>[M]</B> vomits on the floor!")
M.visible_message("<span class='danger'>[M] vomits on the floor!</span>", \
"<span class='userdanger'>You throw up on the floor!</span>")
M.nutrition -= 20
M.adjustToxLoss(-3)
@@ -84,7 +85,8 @@ Bonus
/datum/symptom/vomit/blood/Vomit(var/mob/living/M)
M.Stun(1)
M.visible_message("<B>[M]</B> vomits on the floor!")
M.visible_message("<span class='danger'>[M] vomits on the floor!</span>", \
"<span class='userdanger'>You throw up on the floor!</span>")
// They lose blood and health.
var/brute_dam = M.getBruteLoss()

View File

@@ -44,7 +44,7 @@
affected_mob.nutrition -= 95
affected_mob.adjustToxLoss(-1)
else
affected_mob << "<span class='warning'>You gag as you want to throw up, but there's nothing in your stomach!</span>"
affected_mob << "<span class='userdanger'>You gag as you want to throw up, but there's nothing in your stomach!</span>"
affected_mob.Weaken(10)
affected_mob.adjustToxLoss(3)

View File

@@ -51,8 +51,7 @@
affected_mob << "<span class='danger'>Strange buzzing fills your head, removing all thoughts.</span>"
if(prob(3))
affected_mob << "<span class='danger'>You lose consciousness...</span>"
for(var/mob/O in viewers(affected_mob, null))
O.show_message("[affected_mob] suddenly collapses", 1)
affected_mob.visible_message("<span class='warning'>[affected_mob] suddenly collapses</span>")
affected_mob.Paralyse(rand(5,10))
if(prob(1))
affected_mob.emote("snore")

View File

@@ -3,8 +3,8 @@
max_stages = 4
spread = "On contact"
spread_type = CONTACT_GENERAL
cure = "Ryetalin"
cure = "ryetalyn"
cure = "Ryetalyn"
cure_id = "ryetalyn"
curable = 0
agent = "S4E1 retrovirus"
affected_species = list("Human")

View File

@@ -35,6 +35,8 @@ client/verb/showrevinfo()
src << "Revision unknown"
src << "<b>Current Infomational Settings:</b>"
src << "Protect Authority Roles From Traitor: [config.protect_roles_from_antagonist]"
src << "Protect Assistant Role From Traitor: [config.protect_assistant_from_antagonist]"
src << "Enforce Human Authority: [config.enforce_human_authority]"
src << "Allow Latejoin Antagonists: [config.allow_latejoin_antagonists]"
return
src << "Protect Assistant From Antagonist: [config.protect_assistant_from_antagonist]"
return

View File

@@ -37,7 +37,6 @@
var/memory
var/need_job_assign = 1 //Whether the job controller should give them a job
var/assigned_role
var/special_role
@@ -916,6 +915,7 @@
else
current.real_name = "[syndicate_name()] Operative #[ticker.mode.syndicates.len-1]"
special_role = "Syndicate"
assigned_role = "MODE"
current << "<span class='notice'>You are a [syndicate_name()] agent!</span>"
ticker.mode.forge_syndicate_objectives(src)
ticker.mode.greet_syndicate(src)
@@ -999,7 +999,7 @@
var/mob/living/carbon/monkey/M = current
if (istype(H))
log_admin("[key_name(usr)] attempting to monkeyize and infect [key_name(current)]")
message_admins("<span class='notice'>[key_name_admin(usr)] attempting to monkeyize and infect [key_name_admin(current)]</span>", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] attempting to monkeyize and infect [key_name_admin(current)]</span>")
src = null
M = H.monkeyize()
src = M.mind
@@ -1161,6 +1161,7 @@
if(!(src in ticker.mode.wizards))
ticker.mode.wizards += src
special_role = "Wizard"
assigned_role = "MODE"
//ticker.mode.learn_basic_spells(current)
if(!wizardstart.len)
current.loc = pick(latejoin)

View File

@@ -531,7 +531,8 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
/obj/item/weapon/reagent_containers/glass/beaker/large,
/obj/item/weapon/reagent_containers/glass/beaker/large,
/obj/item/weapon/storage/box/beakers,
/obj/item/weapon/storage/box/syringes)
/obj/item/weapon/storage/box/syringes,
/obj/item/weapon/storage/box/bodybags)
cost = 20
containertype = /obj/structure/closet/crate/medical
containername = "medical supplies crate"
@@ -1004,9 +1005,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
/obj/item/weapon/reagent_containers/glass/bucket,
/obj/item/weapon/reagent_containers/glass/bucket,
/obj/item/weapon/mop,
/obj/item/weapon/caution,
/obj/item/weapon/caution,
/obj/item/weapon/caution,
/obj/item/weapon/holosign_creator,
/obj/item/weapon/storage/bag/trash,
/obj/item/weapon/reagent_containers/spray/cleaner,
/obj/item/weapon/reagent_containers/glass/rag,
@@ -1106,8 +1105,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
/datum/supply_packs/misc/randomised/contraband
num_contained = 5
contains = list(/obj/item/weapon/contraband/poster,
/obj/item/weapon/storage/fancy/cigarettes/dromedaryco,
/obj/item/weapon/lipstick/random)
/obj/item/weapon/storage/fancy/cigarettes/dromedaryco)
name = "Contraband crate"
cost = 30
containername = "crate" //let's keep it subtle, eh?
@@ -1147,6 +1145,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
/obj/item/clothing/under/suit_jacket/navy,
/obj/item/clothing/under/suit_jacket/burgundy,
/obj/item/clothing/under/suit_jacket/checkered,
/obj/item/clothing/under/suit_jacket/tan)
/obj/item/clothing/under/suit_jacket/tan,
/obj/item/weapon/lipstick/random)
cost = 30 //Lots of very expensive items. You gotta pay up to look good!
containername = "formal-wear crate"

View File

@@ -148,7 +148,7 @@ var/list/uplink_items = list()
/datum/uplink_item/dangerous/sword
name = "Energy Sword"
desc = "The energy sword is an edged weapon with a blade of pure energy. The sword is small enough to be pocketed when inactive. Activating it produces a loud, distinctive noise."
item = /obj/item/weapon/melee/energy/sword
item = /obj/item/weapon/melee/energy/sword/saber
cost = 8
/datum/uplink_item/dangerous/emp
@@ -577,6 +577,7 @@ var/list/uplink_items = list()
buyable_items += temp_uplink_list[category]
var/list/bought_items = list()
U.uses -= cost
U.used_TC = 20
var/remaining_TC = 50
var/datum/uplink_item/I
@@ -591,5 +592,7 @@ var/list/uplink_items = list()
bought_items += I.item
remaining_TC -= I.cost
U.purchase_log += "<BIG>\icon[C]</BIG>"
for(var/item in bought_items)
new item(C)
U.purchase_log += "<BIG>\icon[item]</BIG>"

View File

@@ -137,13 +137,11 @@ var/const/AIRLOCK_WIRE_LIGHT = 2048
//raises them if they are down (only if power's on)
if(!A.locked)
A.locked = 1
for(var/mob/M in range(1, A))
M << "You hear a click from the bottom of the door."
A.audible_message("You hear a click from the bottom of the door.", null, 1)
else
if(A.hasPower()) //only can raise bolts if power's on
A.locked = 0
for(var/mob/M in range(1, A))
M << "You hear a click from the bottom of the door."
A.audible_message("You hear a click from the bottom of the door.", null, 1)
A.update_icon()
if(AIRLOCK_WIRE_BACKUP_POWER1 || AIRLOCK_WIRE_BACKUP_POWER2)

View File

@@ -94,77 +94,6 @@
name = "disk"
icon = 'icons/obj/items.dmi'
/obj/item/weapon/legcuffs
name = "leg cuffs"
desc = "Use this to keep prisoners in line."
gender = PLURAL
icon = 'icons/obj/items.dmi'
icon_state = "handcuff"
flags = CONDUCT
throwforce = 0
w_class = 3.0
origin_tech = "materials=1"
slowdown = 7
var/breakouttime = 300 //Deciseconds = 30s = 0.5 minute
/obj/item/weapon/legcuffs/beartrap
name = "bear trap"
throw_speed = 1
throw_range = 1
icon_state = "beartrap0"
desc = "A trap used to catch bears and other legged creatures."
var/armed = 0
/obj/item/weapon/legcuffs/beartrap/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is putting the [src.name] on \his head! It looks like \he's trying to commit suicide.</span>")
return (BRUTELOSS)
/obj/item/weapon/legcuffs/beartrap/attack_self(mob/user as mob)
..()
if(ishuman(user) && !user.stat && !user.restrained())
armed = !armed
icon_state = "beartrap[armed]"
user << "<span class='notice'>[src] is now [armed ? "armed" : "disarmed"]</span>"
/obj/item/weapon/legcuffs/beartrap/Crossed(AM as mob|obj)
if(armed && isturf(src.loc))
if( (iscarbon(AM) || isanimal(AM)) && !istype(AM, /mob/living/simple_animal/parrot) && !istype(AM, /mob/living/simple_animal/construct) && !istype(AM, /mob/living/simple_animal/shade) && !istype(AM, /mob/living/simple_animal/hostile/viscerator))
var/mob/living/L = AM
armed = 0
icon_state = "beartrap0"
playsound(src.loc, 'sound/effects/snap.ogg', 50, 1)
L.visible_message("<span class='danger'>[L] triggers \the [src].</span>", \
"<span class='userdanger'>You trigger \the [src]!</span>")
if(ishuman(AM))
var/mob/living/carbon/H = AM
if(H.lying)
H.apply_damage(20,BRUTE,"chest")
else
H.apply_damage(20,BRUTE,(pick("l_leg", "r_leg")))
if(!H.legcuffed) //beartrap can't cuff you leg if there's already a beartrap or legcuffs.
H.legcuffed = src
src.loc = H
H.update_inv_legcuffed(0)
feedback_add_details("handcuffs","B") //Yes, I know they're legcuffs. Don't change this, no need for an extra variable. The "B" is used to tell them apart.
else
L.apply_damage(20,BRUTE)
..()
/obj/item/weapon/caution
desc = "Caution! Wet Floor!"
name = "wet floor sign"
icon = 'icons/obj/janitor.dmi'
icon_state = "caution"
force = 1.0
throwforce = 3.0
throw_speed = 2
throw_range = 5
w_class = 2.0
attack_verb = list("warned", "cautioned", "smashed")
/obj/item/weapon/rack_parts
name = "rack parts"

View File

@@ -559,6 +559,8 @@ proc/process_ghost_teleport_locs()
icon_state = "atmos"
//Maintenance
/area/maintenance
ambientsounds = list('sound/ambience/ambimaint1.ogg', 'sound/ambience/ambimaint2.ogg', 'sound/ambience/ambimaint3.ogg', 'sound/ambience/ambimaint4.ogg', 'sound/ambience/ambimaint5.ogg')
/area/maintenance/atmos_control
name = "Atmospherics Maintenance"

View File

@@ -121,6 +121,8 @@
else if(!D.density)
spawn(0)
D.close()
for(var/obj/machinery/firealarm/F in RA)
F.update_icon()
for (var/obj/machinery/camera/C in RA)
cameras += C
@@ -145,6 +147,8 @@
else if(D.density)
spawn(0)
D.open()
for(var/obj/machinery/firealarm/F in RA)
F.update_icon()
for (var/mob/living/silicon/aiPlayer in player_list)
aiPlayer.cancelAlarm("Fire", src, src)
@@ -377,12 +381,15 @@
// find the turf to move things to
var/turf/D = locate(T.x, throwy - 1, T.z)
for(var/atom/movable/AM as mob|obj in T)
//mobs take damage
if(istype(AM, /mob/living))
var/mob/living/living_mob = AM
living_mob.Paralyse(10)
living_mob.take_organ_damage(80)
living_mob.anchored = 0 //Unbuckle them so they can be moved
if(ismob(AM))
if(istype(AM, /mob/living))//mobs take damage
var/mob/living/living_mob = AM
living_mob.Paralyse(10)
living_mob.take_organ_damage(80)
living_mob.anchored = 0 //Unbuckle them so they can be moved
else
continue
//Anything not bolted down is moved, everything else is destroyed
if(!AM.anchored)
AM.Move(D)
@@ -391,5 +398,7 @@
if(istype(T, /turf/simulated))
del(T)
for(var/atom/movable/bug in src) // If someone (or something) is somehow still in the shuttle's docking area...
qdel(bug)
/*for(var/atom/movable/bug in src) // If someone (or something) is somehow still in the shuttle's docking area...
if(ismob(bug))
continue
qdel(bug)*/

View File

@@ -200,22 +200,30 @@ its easier to just keep the beam vertical.
//I've found that 3 ticks provided a nice balance for my use.
for(var/obj/effect/overlay/beam/O in orange(10,src)) if(O.BeamSource==src) qdel(O)
/atom/proc/examine(mob/user)
//This reformat names to get a/an properly working on item descriptions when they are bloody
var/f_name = "\a [src]."
if(src.blood_DNA && !istype(src, /obj/effect/decal))
if(gender == PLURAL)
f_name = "some "
else
f_name = "a "
f_name += "<span class='danger'>blood-stained</span> [name]!"
//All atoms
/atom/verb/examine()
set name = "Examine"
set category = "IC"
set src in oview(12) //make it work from farther away
user << "\icon[src] That's [f_name]"
if (!( usr ))
return
usr.face_atom(src)
usr << "\icon[src]That's \a [src]." //changed to "That's" from "This is" because "This is some metal sheets" sounds dumb compared to "That's some metal sheets" ~Carn
if(desc)
usr << desc
user << desc
// *****RM
//usr << "[name]: Dn:[density] dir:[dir] cont:[contents] icon:[icon] is:[icon_state] loc:[loc]"
return
//user << "[name]: Dn:[density] dir:[dir] cont:[contents] icon:[icon] is:[icon_state] loc:[loc]"
if(reagents && is_open_container()) //is_open_container() isn't really the right proc for this, but w/e
user << "It contains:"
if(reagents.reagent_list.len)
for(var/datum/reagent/R in reagents.reagent_list)
user << "[R.volume] units of [R.name]"
else
user << "Nothing."
/atom/proc/relaymove()
return
@@ -372,3 +380,5 @@ var/list/blood_splatter_icons = list()
/atom/proc/handle_slip()
return
/atom/proc/singularity_act()
return

View File

@@ -8,7 +8,6 @@
var/throwing = 0
var/throw_speed = 2
var/throw_range = 7
var/moved_recently = 0
var/mob/pulledby = null
var/languages = 0 //For say() and Hear()
glide_size = 8
@@ -130,7 +129,7 @@
src.throwing = 0
if(isobj(src))
src.throw_impact(get_turf(src))
return 1

View File

@@ -383,8 +383,8 @@
if(open || !locked) //Open and unlocked, no need to escape
open = 1
return
user.changeNext_move(100)
user.last_special = world.time + 100
user.changeNext_move(CLICK_CD_BREAKOUT)
user.last_special = world.time + CLICK_CD_BREAKOUT
user << "<span class='notice'>You lean on the back of [src] and start pushing the door open. (this will take about [breakout_time] minutes.)</span>"
user.visible_message("<span class='warning'>You hear a metallic creaking from [src]!</span>")

View File

@@ -16,7 +16,6 @@ var/list/blob_nodes = list()
recommended_enemies = 1
restricted_jobs = list("Cyborg", "AI")
pre_setup_before_jobs = 1
var/declared = 0

View File

@@ -0,0 +1,146 @@
////////////////
// BLOB SPORE //
////////////////
/mob/living/simple_animal/hostile/blobspore
name = "blob"
desc = "Some blob thing."
icon = 'icons/mob/blob.dmi'
icon_state = "blobpod"
icon_living = "blobpod"
pass_flags = PASSBLOB
health = 40
maxHealth = 40
melee_damage_lower = 2
melee_damage_upper = 4
attacktext = "hits"
attack_sound = 'sound/weapons/genhit1.ogg'
var/obj/effect/blob/factory/factory = null
var/is_zombie = 0
faction = list("blob")
min_oxy = 0
max_oxy = 0
min_tox = 0
max_tox = 0
min_co2 = 0
max_co2 = 0
min_n2 = 0
max_n2 = 0
minbodytemp = 0
maxbodytemp = 360
/mob/living/simple_animal/hostile/blobspore/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
..()
adjustBruteLoss(Clamp(0.01 * exposed_temperature, 1, 5))
/mob/living/simple_animal/hostile/blobspore/blob_act()
return
/mob/living/simple_animal/hostile/blobspore/CanPass(atom/movable/mover, turf/target, height=0)
if(istype(mover, /obj/effect/blob))
return 1
return ..()
/mob/living/simple_animal/hostile/blobspore/New(loc, var/obj/effect/blob/factory/linked_node)
if(istype(linked_node))
factory = linked_node
factory.spores += src
..()
/mob/living/simple_animal/hostile/blobspore/Life()
if(!is_zombie && isturf(src.loc))
for(var/mob/living/carbon/human/H in oview(src,1)) //Only for corpse right next to/on same tile
if(H.stat == DEAD)
Zombify(H)
break
..()
/mob/living/simple_animal/hostile/blobspore/proc/Zombify(var/mob/living/carbon/human/H)
if(H.wear_suit)
var/obj/item/clothing/suit/armor/A = H.wear_suit
if(A.armor && A.armor["melee"])
maxHealth += A.armor["melee"] //That zombie's got armor, I want armor!
maxHealth += 40
health = maxHealth
name = "blob zombie"
desc = "A shambling corpse animated by the blob."
melee_damage_lower = 10
melee_damage_upper = 15
icon = H.icon
icon_state = "husk_s"
H.hair_style = null
H.update_hair()
overlays = H.overlays
overlays += image('icons/mob/blob.dmi', icon_state = "blob_head")
H.loc = src
is_zombie = 1
loc.visible_message("<span class='warning'> The corpse of [H.name] suddenly rises!</span>")
/mob/living/simple_animal/hostile/blobspore/Die()
// On death, create a small smoke of harmful gas (s-Acid)
var/datum/effect/effect/system/chem_smoke_spread/S = new
var/turf/location = get_turf(src)
// Create the reagents to put into the air, s-acid is yellow and stings a little
create_reagents(25)
reagents.add_reagent("spore", 25)
// Attach the smoke spreader and setup/start it.
S.attach(location)
S.set_up(reagents, 1, 1, location, 15, 1) // only 1-2 smoke cloud
S.start()
qdel(src)
/mob/living/simple_animal/hostile/blobspore/Destroy()
if(factory)
factory.spores -= src
if(contents)
for(var/mob/M in contents)
M.loc = src.loc
..()
/mob/living/simple_animal/hostile/blobbernaut
name = "blobbernaut"
desc = "Some HUGE blob thing."
icon = 'icons/mob/blob.dmi'
icon_state = "blobbernaut"
icon_living = "blobbernaut"
icon_dead = "blobbernaut_death"
pass_flags = PASSBLOB
health = 240
maxHealth = 240
melee_damage_lower = 25
melee_damage_upper = 25
attacktext = "hits"
attack_sound = 'sound/effects/blobattack.ogg'
faction = list("blob")
min_oxy = 0
max_oxy = 0
min_tox = 0
max_tox = 0
min_co2 = 0
max_co2 = 0
min_n2 = 0
max_n2 = 0
minbodytemp = 0
maxbodytemp = 360
force_threshold = 10
environment_smash = 3
mob_size = 2
/mob/living/simple_animal/hostile/blobbernaut/AttackingTarget()
..()
if(isliving(target))
var/mob/living/L = target
if(L.reagents)
L.reagents.add_reagent("spore_burning", 10)
/mob/living/simple_animal/hostile/blobbernaut/blob_act()
return

View File

@@ -33,102 +33,3 @@
new/mob/living/simple_animal/hostile/blobspore(src.loc, src)
return 0
/mob/living/simple_animal/hostile/blobspore
name = "blob"
desc = "Some blob thing."
icon = 'icons/mob/blob.dmi'
icon_state = "blobpod"
icon_living = "blobpod"
pass_flags = PASSBLOB
health = 40
maxHealth = 40
melee_damage_lower = 2
melee_damage_upper = 4
attacktext = "hits"
attack_sound = 'sound/weapons/genhit1.ogg'
var/obj/effect/blob/factory/factory = null
var/is_zombie = 0
faction = list("blob")
min_oxy = 0
max_oxy = 0
min_tox = 0
max_tox = 0
min_co2 = 0
max_co2 = 0
min_n2 = 0
max_n2 = 0
minbodytemp = 0
maxbodytemp = 360
/mob/living/simple_animal/hostile/blobspore/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
..()
adjustBruteLoss(Clamp(0.01 * exposed_temperature, 1, 5))
/mob/living/simple_animal/hostile/blobspore/blob_act()
return
/mob/living/simple_animal/hostile/blobspore/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(istype(mover, /obj/effect/blob))
return 1
return ..()
/mob/living/simple_animal/hostile/blobspore/New(loc, var/obj/effect/blob/factory/linked_node)
if(istype(linked_node))
factory = linked_node
factory.spores += src
..()
/mob/living/simple_animal/hostile/blobspore/Life()
if(!is_zombie && isturf(src.loc))
for(var/mob/living/carbon/human/H in oview(src,1)) //Only for corpse right next to/on same tile
if(H.stat == DEAD)
Zombify(H)
break
..()
/mob/living/simple_animal/hostile/blobspore/proc/Zombify(var/mob/living/carbon/human/H)
if(H.wear_suit)
var/obj/item/clothing/suit/armor/A = H.wear_suit
if(A.armor && A.armor["melee"])
maxHealth += A.armor["melee"] //That zombie's got armor, I want armor!
maxHealth += 40
health = maxHealth
name = "blob zombie"
desc = "A shambling corpse animated by the blob."
melee_damage_lower = 10
melee_damage_upper = 15
icon = H.icon
icon_state = "husk_s"
H.hair_style = null
H.update_hair()
overlays = H.overlays
overlays += image('icons/mob/blob.dmi', icon_state = "blob_head")
H.loc = src
is_zombie = 1
loc.visible_message("<span class='warning'> The corpse of [H.name] suddenly rises!</span>")
/mob/living/simple_animal/hostile/blobspore/Die()
// On death, create a small smoke of harmful gas (s-Acid)
var/datum/effect/effect/system/chem_smoke_spread/S = new
var/turf/location = get_turf(src)
// Create the reagents to put into the air, s-acid is yellow and stings a little
create_reagents(25)
reagents.add_reagent("spore", 25)
// Attach the smoke spreader and setup/start it.
S.attach(location)
S.set_up(reagents, 1, 1, location, 15, 1) // only 1-2 smoke cloud
S.start()
qdel(src)
/mob/living/simple_animal/hostile/blobspore/Destroy()
if(factory)
factory.spores -= src
if(contents)
for(var/mob/M in contents)
M.loc = src.loc
..()

View File

@@ -16,6 +16,6 @@
/obj/effect/blob/shield/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
return
/obj/effect/blob/shield/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
/obj/effect/blob/shield/CanPass(atom/movable/mover, turf/target, height=0)
if(istype(mover) && mover.checkpass(PASSBLOB)) return 1
return 0

View File

@@ -160,6 +160,35 @@
return
/mob/camera/blob/verb/create_blobbernaut()
set category = "Blob"
set name = "Create Blobbernaut (20)"
set desc = "Create a powerful blob-being, a Blobbernaut"
var/turf/T = get_turf(src)
if(!T)
return
var/obj/effect/blob/B = locate(/obj/effect/blob) in T
if(!B)
src << "You must be on a blob!"
return
if(!istype(B, /obj/effect/blob/factory))
src << "Unable to use this blob, find a factory blob."
return
if(!can_buy(20))
return
var/mob/living/simple_animal/hostile/blobbernaut/blobber = new /mob/living/simple_animal/hostile/blobbernaut (get_turf(B))
if(blobber)
B.Destroy()
return
/mob/camera/blob/verb/relocate_core()
set category = "Blob"
set name = "Relocate Core (80)"

View File

@@ -30,8 +30,8 @@
..()
/obj/effect/blob/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(air_group || (height==0)) return 1
/obj/effect/blob/CanPass(atom/movable/mover, turf/target, height=0)
if(height==0) return 1
if(istype(mover) && mover.checkpass(PASSBLOB)) return 1
return 0

View File

@@ -13,7 +13,6 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
required_players = 15
required_enemies = 1
recommended_enemies = 4
pre_setup_before_jobs = 1
var/const/prob_int_murder_target = 50 // intercept names the assassination target half the time
@@ -44,6 +43,9 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
if(config.protect_roles_from_antagonist)
restricted_jobs += protected_jobs
if(config.protect_assistant_from_antagonist)
restricted_jobs += "Assistant"
var/num_changelings = 1
if(config.changeling_scaling_coeff)
@@ -138,6 +140,7 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
/datum/game_mode/proc/greet_changeling(var/datum/mind/changeling, var/you_are=1)
if (you_are)
changeling.current << "<span class='userdanger'>You are [changeling.changeling.changelingID], a changeling! You have absorbed and taken the form of a human.</span>"
changeling.current << "<span class='userdanger'>Use say \":g message\" to communicate with your fellow changelings.</span>"
changeling.current << "<b>You must complete the following tasks:</b>"
if (changeling.current.mind)

View File

@@ -3,7 +3,7 @@
name = "Hivemind Communication"
desc = "We tune our senses to the airwaves to allow us to discreetly communicate and exchange DNA with other changelings."
helptext = "We will be able to talk with other changelings with :g. Exchanged DNA do not count towards absorb objectives."
dna_cost = 2
dna_cost = 0
chemical_cost = -1
/obj/effect/proc_holder/changeling/hivemind_comms/on_purchase(var/mob/user)

View File

@@ -20,7 +20,8 @@
var/datum/dna/chosen_dna = changeling.get_dna(chosen_name)
if(!chosen_dna)
return
if(!user || user.notransform)
return 0
user << "<span class='notice'>We transform our appearance.</span>"
user.dna = chosen_dna

View File

@@ -8,6 +8,8 @@
//Transform into a monkey.
/obj/effect/proc_holder/changeling/lesserform/sting_action(var/mob/living/carbon/human/user)
if(!user || user.notransform)
return 0
user << "<span class='warning'>Our genes cry out!</span>"
user.monkeyize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPDAMAGE | TR_KEEPSE | TR_KEEPSRC)

View File

@@ -3,7 +3,7 @@
config_tag = "traitorchan"
traitors_possible = 3 //hard limit on traitors if scaling is turned off
restricted_jobs = list("AI", "Cyborg")
required_players = 20
required_players = 0
required_enemies = 1 // how many of each type are required
recommended_enemies = 3
@@ -26,6 +26,9 @@
if(config.protect_roles_from_antagonist)
restricted_jobs += protected_jobs
if(config.protect_assistant_from_antagonist)
restricted_jobs += "Assistant"
var/list/datum/mind/possible_changelings = get_players_for_role(BE_CHANGELING)
var/num_changelings = 1
@@ -70,4 +73,4 @@
if(!jobban_isbanned(character.client, "changeling") && !jobban_isbanned(character.client, "Syndicate"))
if(!(character.job in ticker.mode.restricted_jobs))
character.mind.make_Changling()
..()
..()

View File

@@ -29,7 +29,6 @@
required_players = 20
required_enemies = 6
recommended_enemies = 6
pre_setup_before_jobs = 1
var/finished = 0
@@ -63,6 +62,9 @@
if(config.protect_roles_from_antagonist)
restricted_jobs += protected_jobs
if(config.protect_assistant_from_antagonist)
restricted_jobs += "Assistant"
for(var/datum/mind/player in antag_candidates)
for(var/job in restricted_jobs)//Removing heads and such from the list
if(player.assigned_role == job)

View File

@@ -99,7 +99,7 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
/obj/effect/rune
desc = ""
desc = "A strange collection of symbols drawn in blood."
anchored = 1
icon = 'icons/obj/rune.dmi'
icon_state = "1"
@@ -146,25 +146,11 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
for(var/mob/living/silicon/ai/AI in player_list)
AI.client.images += blood
/obj/effect/rune/examine()
set src in view(2)
/obj/effect/rune/examine(mob/user)
..()
if(iscultist(user))
user << "This spell circle reads: <i>[word1] [word2] [word3]</i>."
if(!iscultist(usr))
usr << "A strange collection of symbols drawn in blood."
return
/* Explosions... really?
if(desc && !usr.stat)
usr << "It reads: <i>[desc]</i>."
sleep(30)
explosion(src.loc, 0, 2, 5, 5)
qdel(src)
*/
if(!desc)
usr << "A spell circle drawn in blood. It reads: <i>[word1] [word2] [word3]</i>."
else
usr << "Explosive Runes inscription in blood. It reads: <i>[desc]</i>."
return
/obj/effect/rune/attackby(I as obj, user as mob)
@@ -349,6 +335,7 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
/obj/item/weapon/tome
name = "arcane tome"
desc = "An old, dusty tome with frayed edges and a sinister looking cover."
icon_state ="tome"
throw_speed = 2
throw_range = 5
@@ -695,13 +682,10 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
user << "You copy the translation notes from your tome."
/obj/item/weapon/tome/examine()
set src in usr
/obj/item/weapon/tome/examine(mob/user)
..()
if(!iscultist(usr))
usr << "An old, dusty tome with frayed edges and a sinister looking cover."
else
usr << "The scriptures of Nar-Sie, The One Who Sees, The Geometer of Blood. Contains the details of every ritual his followers could think of. Most of these are useless, though."
if(iscultist(user))
user << "The scriptures of Nar-Sie, The One Who Sees, The Geometer of Blood. Contains the details of every ritual his followers could think of."
/obj/item/weapon/tome/imbued //admin tome, spawns working runes without waiting
w_class = 2.0

View File

@@ -57,7 +57,7 @@ var/list/sacrificed = list()
if (istype(user, /mob/living))
user.take_overall_damage(5, 0)
qdel(src)
for(var/mob/living/carbon/C in orange(1,src))
for(var/mob/living/C in orange(1,src))
if(iscultist(C) && !C.stat)
culcount++
if(user.loc==src.loc)
@@ -98,13 +98,13 @@ var/list/sacrificed = list()
/////////////////////////////////////////THIRD RUNE
/obj/effect/rune/proc/convert()
var/list/mob/living/carbon/human/cultsinrange = list()
var/list/mob/living/cultsinrange = list()
for(var/mob/living/carbon/M in src.loc)
if(iscultist(M))
continue
if(M.stat==2)
continue
for(var/mob/living/carbon/C in orange(1,src))
for(var/mob/living/C in orange(1,src))
if(iscultist(C) && !C.stat) //converting requires three cultists
cultsinrange += C
C.say("Mah[pick("'","`")]weyh pleggh at e'ntrath!")
@@ -792,12 +792,12 @@ var/list/sacrificed = list()
/obj/effect/rune/proc/freedom()
var/mob/living/user = usr
var/list/mob/living/carbon/cultists = new
var/list/mob/living/cultists = new
for(var/datum/mind/H in ticker.mode.cult)
if (istype(H.current,/mob/living/carbon))
cultists+=H.current
var/list/mob/living/carbon/users = new
for(var/mob/living/carbon/C in orange(1,src))
var/list/mob/living/users = new
for(var/mob/living/C in orange(1,src))
if(iscultist(C) && !C.stat)
users+=C
if(users.len>=1)
@@ -832,7 +832,7 @@ var/list/sacrificed = list()
cultist.loc:locked = 0
if(istype(cultist.loc, /obj/machinery/dna_scannernew)&&cultist.loc:locked)
cultist.loc:locked = 0
for(var/mob/living/carbon/C in users)
for(var/mob/living/C in users)
user.take_overall_damage(15, 0)
C.say("Khari[pick("'","`")]d! Gual'te nikka!")
qdel(src)
@@ -846,8 +846,8 @@ var/list/sacrificed = list()
for(var/datum/mind/H in ticker.mode.cult)
if (istype(H.current,/mob/living/carbon))
cultists+=H.current
var/list/mob/living/carbon/users = new
for(var/mob/living/carbon/C in orange(1,src))
var/list/mob/living/users = new
for(var/mob/living/C in orange(1,src))
if(iscultist(C) && !C.stat)
users+=C
if(users.len>=3)
@@ -862,7 +862,7 @@ var/list/sacrificed = list()
cultist.loc = src.loc
cultist.Weaken(5)
cultist.regenerate_icons()
for(var/mob/living/carbon/human/C in orange(1,src))
for(var/mob/living/C in orange(1,src))
if(iscultist(C) && !C.stat)
C.say("N'ath reth sh'yro eth d[pick("'","`")]rekkathnor!")
C.take_overall_damage(25, 0)

View File

@@ -3,13 +3,6 @@
var/imbue = null
var/uses = 0
examine()
set src in view(2)
..()
return
attack_self(mob/living/user as mob)
if(iscultist(user))
var/delete = 1

View File

@@ -70,7 +70,7 @@ var/round_start_time = 0
if((master_mode=="secret") && (secret_force_mode != "secret"))
var/datum/game_mode/smode = config.pick_mode(secret_force_mode)
if (!smode.can_start())
message_admins("\blue Unable to force secret [secret_force_mode]. [smode.required_players] players and [smode.required_enemies] eligible antagonists needed.", 1)
message_admins("\blue Unable to force secret [secret_force_mode]. [smode.required_players] players and [smode.required_enemies] eligible antagonists needed.")
else
src.mode = smode
@@ -275,12 +275,11 @@ var/round_start_time = 0
/datum/controller/gameticker/proc/equip_characters()
var/captainless=1
for(var/mob/living/carbon/human/player in player_list)
if(!player.mind.need_job_assign)
continue
if(player && player.mind && player.mind.assigned_role)
if(player.mind.assigned_role == "Captain")
captainless=0
job_master.EquipRank(player, player.mind.assigned_role, 0)
if(player.mind.assigned_role != "MODE")
job_master.EquipRank(player, player.mind.assigned_role, 0)
if(captainless)
for(var/mob/M in player_list)
if(!istype(M,/mob/new_player))

View File

@@ -33,6 +33,9 @@
if(config.protect_roles_from_antagonist)
restricted_jobs += protected_jobs
if(config.protect_assistant_from_antagonist)
restricted_jobs += "Assistant"
for(var/datum/mind/player in antag_candidates)
for(var/job in restricted_jobs)//Removing heads and such from the list
if(player.assigned_role == job)
@@ -46,12 +49,6 @@
if(!A_bosses.len || !B_bosses.len)
return 0
//Set a temporary special_role so the job controller doesn't hand out invalid jobs for these antags
for(var/datum/mind/boss_mind in A_bosses)
boss_mind.special_role = "Gang member"
for(var/datum/mind/boss_mind in B_bosses)
boss_mind.special_role = "Gang member"
return 1

View File

@@ -48,7 +48,7 @@
if (malf_ai.len < required_enemies)
return 0
for(var/datum/mind/ai_mind in malf_ai)
ai_mind.need_job_assign = 0
ai_mind.assigned_role = "MODE"
ai_mind.special_role = "malfunctioning AI"//So they actually have a special role/N
log_game("[ai_mind.key] (ckey) has been selected as a malf AI")
return 1

View File

@@ -11,7 +11,6 @@
recommended_enemies = 1
restricted_jobs = list("Cyborg", "AI")
pre_setup_before_jobs = 1
var/carriers_to_make = 1
var/list/carriers = list()

View File

@@ -40,7 +40,7 @@
agent_number--
for(var/datum/mind/synd_mind in syndicates)
synd_mind.need_job_assign = 0
synd_mind.assigned_role = "MODE"
synd_mind.special_role = "Syndicate"//So they actually have a special role/N
log_game("[synd_mind.key] (ckey) has been selected as a nuclear operative")
return 1
@@ -198,14 +198,10 @@
synd_mob.equip_to_slot_or_del(new /obj/item/clothing/under/syndicate(synd_mob), slot_w_uniform)
synd_mob.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(synd_mob), slot_shoes)
synd_mob.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(synd_mob), slot_wear_suit)
synd_mob.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(synd_mob), slot_gloves)
synd_mob.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/swat/syndicate(synd_mob), slot_head)
synd_mob.equip_to_slot_or_del(new /obj/item/weapon/card/id/syndicate(synd_mob), slot_wear_id)
if(synd_mob.backbag == 2) synd_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(synd_mob), slot_back)
if(synd_mob.backbag == 3) synd_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(synd_mob), slot_back)
synd_mob.equip_to_slot_or_del(new /obj/item/ammo_box/magazine/m10mm(synd_mob), slot_in_backpack)
synd_mob.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/pill/cyanide(synd_mob), slot_in_backpack)
synd_mob.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/automatic/pistol(synd_mob), slot_belt)
synd_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(synd_mob.back), slot_in_backpack)
@@ -217,6 +213,7 @@
var/obj/item/weapon/implant/explosive/E = new/obj/item/weapon/implant/explosive(synd_mob)
E.imp_in = synd_mob
E.implanted = 1
E.implanted(synd_mob)
synd_mob.faction |= "syndicate"
synd_mob.update_icons()
return 1

View File

@@ -16,6 +16,7 @@ var/bomb_set
var/obj/item/weapon/disk/nuclear/auth = null
use_power = 0
var/previous_level = ""
var/lastentered = ""
/obj/machinery/nuclearbomb/process()
if (src.timing)
@@ -98,9 +99,15 @@ var/bomb_set
src.yes_code = 0
src.code = null
else
src.code += text("[]", href_list["type"])
if (length(src.code) > 5)
src.code = "ERROR"
lastentered = text("[]", href_list["type"])
if (text2num(lastentered) == null)
var/turf/LOC = get_turf(usr)
message_admins("[key_name_admin(usr)] tried to exploit a nuclear bomb by entering non-numerical codes: <a href='?_src_=vars;Vars=\ref[src]'>[lastentered]</a> ! ([LOC ? "<a href='?_src_=holder;adminplayerobservecoodjump=1;X=[LOC.x];Y=[LOC.y];Z=[LOC.z]'>JMP</a>" : "null"])", 0)
log_admin("EXPLOIT : [key_name(usr)] tried to exploit a nuclear bomb by entering non-numerical codes: [lastentered] !")
else
src.code += lastentered
if (length(src.code) > 5)
src.code = "ERROR"
if (src.yes_code)
if (href_list["time"])
var/time = text2num(href_list["time"])
@@ -237,4 +244,4 @@ var/bomb_set
del(src) //Needed to clear all references to it
else
ERROR("[src] was supposed to be destroyed, but we were unable to locate a blobstart landmark to spawn a new one.")
return 1 // Cancel destruction.
return 1 // Cancel destruction.

View File

@@ -54,12 +54,11 @@
the_disk = locate()
point_at(the_disk)
/obj/item/weapon/pinpointer/examine()
/obj/item/weapon/pinpointer/examine(mob/user)
..()
for(var/obj/machinery/nuclearbomb/bomb in world)
if(bomb.timing)
usr << "Extreme danger. Arming signal detected. Time remaining: [bomb.timeleft]"
user << "Extreme danger. Arming signal detected. Time remaining: [bomb.timeleft]"
/obj/item/weapon/pinpointer/advpinpointer
name = "advanced pinpointer"

View File

@@ -53,7 +53,7 @@ datum/objective_item/steal/capmedal
datum/objective_item/steal/hypo
name = "the hypospray"
targetitem = /obj/item/weapon/reagent_containers/hypospray
targetitem = /obj/item/weapon/reagent_containers/hypospray/CMO
difficulty = 5
excludefromjob = list("Chief Medical Officer")
@@ -107,13 +107,13 @@ datum/objective_item/functionalai/check_special_completion(var/obj/item/device/a
datum/objective_item/steal/blueprints
name = "the station blueprints"
targetitem = /obj/item/blueprints
targetitem = /obj/item/areaeditor/blueprints
difficulty = 10
excludefromjob = list("Chief Engineer")
altitems = list(/obj/item/weapon/photo)
datum/objective_item/blueprints/check_special_completion(var/obj/item/I)
if(istype(I, /obj/item/blueprints))
if(istype(I, /obj/item/areaeditor/blueprints))
return 1
if(istype(I, /obj/item/weapon/photo))
var/obj/item/weapon/photo/P = I

View File

@@ -17,9 +17,8 @@
antag_flag = BE_REV
restricted_jobs = list("Security Officer", "Warden", "Detective", "AI", "Cyborg","Captain", "Head of Personnel", "Head of Security", "Chief Engineer", "Research Director", "Chief Medical Officer")
required_players = 20
required_enemies = 3
required_enemies = 1
recommended_enemies = 3
pre_setup_before_jobs = 1
var/finished = 0
var/check_counter = 0
@@ -42,6 +41,9 @@
if(config.protect_roles_from_antagonist)
restricted_jobs += protected_jobs
if(config.protect_assistant_from_antagonist)
restricted_jobs += "Assistant"
var/head_check = 0
for(var/mob/new_player/player in player_list)
if(player.mind.assigned_role in command_positions)
@@ -53,17 +55,12 @@
if(player.assigned_role == job)
antag_candidates -= player
var/list/heads = get_living_heads()
if(heads.len < max_headrevs)
max_headrevs = heads.len
for (var/i=1 to max_headrevs)
if (antag_candidates.len==0)
break
var/datum/mind/lenin = pick(antag_candidates)
antag_candidates -= lenin
head_revolutionaries += lenin
log_game("[lenin.key] (ckey) has been selected as a head rev")
if((head_revolutionaries.len < required_enemies)||(!head_check))
return 0
@@ -74,9 +71,15 @@
/datum/game_mode/revolution/post_setup()
var/list/heads = get_living_heads()
while(heads.len < head_revolutionaries.len) //das vi danya
var/datum/mind/trotsky = pick(head_revolutionaries)
antag_candidates += trotsky
head_revolutionaries -= trotsky
heads_to_kill = heads
for(var/datum/mind/rev_mind in head_revolutionaries)
log_game("[rev_mind.key] (ckey) has been selected as a head rev")
for(var/datum/mind/head_mind in heads)
mark_for_death(rev_mind, head_mind)
@@ -491,4 +494,4 @@
text += "</font>"
text += "<br>"
world << text
world << text

View File

@@ -5,7 +5,6 @@
required_players = 25
required_enemies = 5
recommended_enemies = 8
pre_setup_before_jobs = 1
traitor_name = "double agent"

View File

@@ -15,7 +15,6 @@
required_players = 0
required_enemies = 1
recommended_enemies = 4
pre_setup_before_jobs = 1
var/traitors_possible = 4 //hard limit on traitors if scaling is turned off
var/num_modifier = 0 // Used for gamemodes, that are a child of traitor, that need more than the usual.
@@ -31,6 +30,9 @@
if(config.protect_roles_from_antagonist)
restricted_jobs += protected_jobs
if(config.protect_assistant_from_antagonist)
restricted_jobs += "Assistant"
var/num_traitors = 1
if(config.traitor_scaling_coeff)

View File

@@ -58,7 +58,7 @@
if("doublebarrel")
new /obj/item/weapon/gun/projectile/revolver/doublebarrel(get_turf(H))
if("shotgun")
new /obj/item/weapon/gun/projectile/shotgun/(get_turf(H))
new /obj/item/weapon/gun/projectile/shotgun(get_turf(H))
if("combatshotgun")
new /obj/item/weapon/gun/projectile/shotgun/combat(get_turf(H))
if("mateba")

View File

@@ -21,7 +21,7 @@
var/datum/mind/wizard = pick(antag_candidates)
wizards += wizard
modePlayer += wizard
wizard.need_job_assign = 0
wizard.assigned_role = "MODE"
wizard.special_role = "Wizard"
if(wizardstart.len == 0)
wizard.current << "<span class='userdanger'>A starting location for you could not be found, please report this bug!</span>"

View File

@@ -14,8 +14,8 @@ Assistant
minimal_access = list() //See /datum/job/assistant/get_access()
/datum/job/assistant/equip_items(var/mob/living/carbon/human/H)
H.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/clothing/under/color/random(H), slot_w_uniform)
/datum/job/assistant/get_access()
if(config.jobs_have_maint_access & ASSISTANTS_HAVE_MAINT_ACCESS) //Config has assistant maint access set

View File

@@ -32,11 +32,12 @@ Captain
H.equip_to_slot_or_del(new /obj/item/clothing/head/caphat(H), slot_head)
H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(H), slot_glasses)
//Equip ID box
//Equip ID box & telebaton
if(H.backbag == 1)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/silver_ids(H), slot_l_hand)
else
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/silver_ids(H.back), slot_in_backpack)
H.equip_to_slot_or_del(new /obj/item/weapon/melee/telebaton(H), slot_in_backpack)
//Implant him
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
@@ -87,8 +88,9 @@ Head of Personnel
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/brown(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/clothing/head/hopcap(H), slot_head)
//Equip ID box
//Equip ID box & telebaton
if(H.backbag == 1)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/ids(H), slot_l_hand)
else
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/ids(H.back), slot_in_backpack)
H.equip_to_slot_or_del(new /obj/item/weapon/melee/telebaton(H), slot_in_backpack)

View File

@@ -137,7 +137,7 @@ Cargo Technician
department_head = list("Head of Personnel")
department_flag = CIVILIAN
faction = "Station"
total_positions = 2
total_positions = 3
spawn_positions = 2
supervisors = "the quartermaster and the head of personnel"
selection_color = "#dddddd"

Some files were not shown because too many files have changed in this diff Show More