Merge branch 'master' of https://github.com/tgstation/-tg-station into GunHotFix
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
##/tg/station v1.0.1
|
||||
##/tg/station v1.0.1
|
||||
|
||||
[](https://travis-ci.org/tgstation/-tg-station)
|
||||
|
||||
@@ -30,7 +30,7 @@ hassle if you want to make any changes at all, so it's not recommended.)
|
||||
##INSTALLATION
|
||||
|
||||
First-time installation should be fairly straightforward. First, you'll need
|
||||
BYOND installed. You can get it from http://www.byond.com/. Once you've done
|
||||
BYOND installed. You can get it from http://www.byond.com/. Once you've done
|
||||
that, extract the game files to wherever you want to keep them. This is a
|
||||
sourcecode-only release, so the next step is to compile the server files.
|
||||
Open tgstation.dme by double-clicking it, open the Build menu, and click
|
||||
@@ -49,7 +49,7 @@ in irc://irc.rizon.net/coderbus
|
||||
Once that's done, open up the config folder. You'll want to edit config.txt to
|
||||
set the probabilities for different gamemodes in Secret and to set your server
|
||||
location so that all your players don't get disconnected at the end of each
|
||||
round. It's recommended you don't turn on the gamemodes with probability 0,
|
||||
round. It's recommended you don't turn on the gamemodes with probability 0,
|
||||
except Extended, as they have various issues and aren't currently being tested,
|
||||
so they may have unknown and bizarre bugs. Extended is essentially no mode, and
|
||||
isn't in the Secret rotation by default as it's just not very fun.
|
||||
@@ -68,7 +68,7 @@ byondkey = Rank
|
||||
where the admin rank must be properly capitalised.
|
||||
|
||||
Finally, to start the server, run Dream Daemon and enter the path to your
|
||||
compiled tgstation.dmb file. Make sure to set the port to the one you
|
||||
compiled tgstation.dmb file. Make sure to set the port to the one you
|
||||
specified in the config.txt, and set the Security box to 'Safe'. Then press GO
|
||||
and the server should start up and be ready to join. It is also recommended that
|
||||
you set up the SQL backend (see below).
|
||||
@@ -129,10 +129,17 @@ Please see [CONTRIBUTING.md](CONTRIBUTING.md)
|
||||
##LICENSE
|
||||
|
||||
All code after commit 333c566b88108de218d882840e61928a9b759d8f on 2014/31/12 at 4:38 PM PST (https://github.com/tgstation/-tg-station/commit/333c566b88108de218d882840e61928a9b759d8f) is licensed under GNU AGPL v3 (http://www.gnu.org/licenses/agpl-3.0.html).
|
||||
|
||||
All code before commit 333c566b88108de218d882840e61928a9b759d8f on 2014/31/12 at 4:38 PM PST (https://github.com/tgstation/-tg-station/commit/333c566b88108de218d882840e61928a9b759d8f) is licensed under GNU GPL v3 (https://www.gnu.org/licenses/gpl-3.0.html).
|
||||
(Including tools unless their readme specifies otherwise.)
|
||||
|
||||
See LICENSE-AGPLv3.txt and LICENSE-GPLv3.txt for more details.
|
||||
|
||||
All content including icons and sound is under a Creative Commons 3.0 BY-SA
|
||||
license (http://creativecommons.org/licenses/by-sa/3.0/).
|
||||
tgui clientside is licensed as a subproject under the MIT license.
|
||||
tgui assets are licensed under a Creative Commons Attribution-ShareAlike 4.0 International License
|
||||
(http://creativecommons.org/licenses/by-sa/4.0/).
|
||||
|
||||
See tgui/LICENSE.md for more details.
|
||||
|
||||
All assets including icons and sound are under a Creative Commons 3.0 BY-SA
|
||||
license (http://creativecommons.org/licenses/by-sa/3.0/) unless otherwise indicated.
|
||||
|
||||
+160
-188
@@ -833,120 +833,92 @@
|
||||
"qa" = (/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (SOUTHWEST)"; icon_state = "darkred"; dir = 10},/area/ctf)
|
||||
"qb" = (/turf/simulated/floor/plasteel/darkred/side,/area/ctf)
|
||||
"qc" = (/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (SOUTHEAST)"; icon_state = "darkred"; dir = 6},/area/ctf)
|
||||
"qd" = (/turf/space/transit/horizontal,/area/ctf)
|
||||
"qe" = (/turf/space,/area/ctf)
|
||||
"qf" = (/turf/simulated/floor/plasteel/darkblue/side{tag = "icon-darkblue (WEST)"; icon_state = "darkblue"; dir = 8},/area/space)
|
||||
"qg" = (/turf/simulated/floor/plasteel/black,/area/space)
|
||||
"qh" = (/turf/simulated/floor/plasteel/darkblue/side{tag = "icon-darkblue (EAST)"; icon_state = "darkblue"; dir = 4},/area/space)
|
||||
"qi" = (/turf/simulated/floor/plasteel/blue,/area/space)
|
||||
"qj" = (/obj/structure/window/reinforced/fulltile{health = 1e+007; maxhealth = 1e+007; name = "hardened window"},/turf/simulated/floor/plating,/area/space)
|
||||
"qk" = (/turf/simulated/floor/plasteel/black,/turf/simulated/floor/plasteel/warningline,/area/space)
|
||||
"ql" = (/turf/simulated/floor/plasteel/red,/area/space)
|
||||
"qm" = (/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (WEST)"; icon_state = "darkred"; dir = 8},/area/space)
|
||||
"qn" = (/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (EAST)"; icon_state = "darkred"; dir = 4},/area/space)
|
||||
"qo" = (/obj/structure/kitchenspike,/turf/simulated/floor/plasteel/black,/area/space)
|
||||
"qp" = (/turf/simulated/floor/plasteel/darkblue/side{tag = "icon-darkblue (NORTHWEST)"; icon_state = "darkblue"; dir = 9},/area/space)
|
||||
"qq" = (/turf/simulated/floor/plasteel/darkblue/side{tag = "icon-darkblue (NORTH)"; icon_state = "darkblue"; dir = 1},/area/space)
|
||||
"qr" = (/turf/simulated/floor/plasteel/darkblue/side{tag = "icon-darkblue (NORTHEAST)"; icon_state = "darkblue"; dir = 5},/area/space)
|
||||
"qs" = (/turf/simulated/floor/plasteel/darkblue/corner,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTHWEST)"; icon_state = "warningline"; dir = 9},/area/space)
|
||||
"qt" = (/turf/simulated/floor/plasteel/black,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/space)
|
||||
"qu" = (/turf/simulated/floor/plasteel/darkblue/corner{tag = "icon-darkbluecorners (WEST)"; icon_state = "darkbluecorners"; dir = 8},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/space)
|
||||
"qv" = (/turf/simulated/floor/plasteel/darkblue/corner,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/space)
|
||||
"qw" = (/turf/simulated/floor/plasteel/black,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTHEAST)"; icon_state = "warningline"; dir = 5},/area/space)
|
||||
"qx" = (/obj/machinery/power/emitter/energycannon,/turf/simulated/floor/plating,/area/space)
|
||||
"qy" = (/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (NORTHWEST)"; icon_state = "darkred"; dir = 9},/area/space)
|
||||
"qz" = (/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (NORTH)"; icon_state = "darkred"; dir = 1},/area/space)
|
||||
"qA" = (/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (NORTHEAST)"; icon_state = "darkred"; dir = 5},/area/space)
|
||||
"qB" = (/obj/structure/barricade/security,/turf/simulated/floor/plasteel/circuit,/area/space)
|
||||
"qC" = (/turf/simulated/floor/plasteel/darkblue,/area/space)
|
||||
"qD" = (/turf/simulated/floor/plasteel/darkblue/corner{tag = "icon-darkbluecorners (EAST)"; icon_state = "darkbluecorners"; dir = 4},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (WEST)"; icon_state = "warningline"; dir = 8},/area/space)
|
||||
"qE" = (/turf/simulated/floor/plasteel/black,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (EAST)"; icon_state = "warningline"; dir = 4},/area/space)
|
||||
"qF" = (/turf/simulated/floor/plasteel/darkblue/corner{tag = "icon-darkbluecorners (WEST)"; icon_state = "darkbluecorners"; dir = 8},/area/space)
|
||||
"qG" = (/turf/simulated/floor/plasteel/darkblue/corner{tag = "icon-darkbluecorners (EAST)"; icon_state = "darkbluecorners"; dir = 4},/area/space)
|
||||
"qH" = (/turf/simulated/floor/plating{icon_plating = "warnplate"; icon_state = "warnplate"},/area/space)
|
||||
"qI" = (/obj/structure/barricade/security,/turf/simulated/floor/plasteel/circuit/rcircuit,/area/space)
|
||||
"qJ" = (/turf/simulated/floor/plasteel/black,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (WEST)"; icon_state = "warningline"; dir = 8},/area/space)
|
||||
"qK" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/space)
|
||||
"qL" = (/turf/simulated/floor/plating,/area/space)
|
||||
"qM" = (/turf/simulated/floor/plating{dir = 4; icon_state = "warnplate"; luminosity = 2; nitrogen = 0.01; oxygen = 0.01; temperature = 2.7},/area/space)
|
||||
"qN" = (/turf/simulated/floor/plasteel/darkblue/corner,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (WEST)"; icon_state = "warningline"; dir = 8},/area/space)
|
||||
"qO" = (/turf/simulated/floor/plasteel/darkblue/corner{tag = "icon-darkbluecorners (NORTH)"; icon_state = "darkbluecorners"; dir = 1},/area/space)
|
||||
"qP" = (/turf/simulated/floor/plasteel/darkblue/corner,/area/space)
|
||||
"qQ" = (/turf/simulated/floor/plating{dir = 1; icon_state = "warnplate"},/area/space)
|
||||
"qR" = (/turf/simulated/floor/plasteel/darkblue/side{tag = "icon-darkblue (SOUTHWEST)"; icon_state = "darkblue"; dir = 10},/area/space)
|
||||
"qS" = (/turf/simulated/floor/plasteel/darkblue/side,/area/space)
|
||||
"qT" = (/turf/simulated/floor/plasteel/darkblue/side{tag = "icon-darkblue (SOUTHEAST)"; icon_state = "darkblue"; dir = 6},/area/space)
|
||||
"qU" = (/turf/simulated/floor/plasteel/darkblue/corner{tag = "icon-darkbluecorners (EAST)"; icon_state = "darkbluecorners"; dir = 4},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (SOUTHWEST)"; icon_state = "warningline"; dir = 10},/area/space)
|
||||
"qV" = (/turf/simulated/floor/plasteel/darkblue/corner{tag = "icon-darkbluecorners (NORTH)"; icon_state = "darkbluecorners"; dir = 1},/turf/simulated/floor/plasteel/warningline,/area/space)
|
||||
"qW" = (/turf/simulated/floor/plasteel/darkblue/corner{tag = "icon-darkbluecorners (EAST)"; icon_state = "darkbluecorners"; dir = 4},/turf/simulated/floor/plasteel/warningline,/area/space)
|
||||
"qX" = (/turf/simulated/floor/plasteel/black,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (SOUTHEAST)"; icon_state = "warningline"; dir = 6},/area/space)
|
||||
"qY" = (/obj/machinery/power/emitter/energycannon{tag = "icon-emitter (NORTH)"; icon_state = "emitter"; dir = 1},/turf/simulated/floor/plating,/area/space)
|
||||
"qZ" = (/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (SOUTHWEST)"; icon_state = "darkred"; dir = 10},/area/space)
|
||||
"ra" = (/turf/simulated/floor/plasteel/darkred/side,/area/space)
|
||||
"rb" = (/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (SOUTHEAST)"; icon_state = "darkred"; dir = 6},/area/space)
|
||||
"rc" = (/obj/structure/divine/trap/ctf/blue,/turf/simulated/floor/plasteel/blue,/area/space)
|
||||
"rd" = (/turf/simulated/floor/plasteel/circuit,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/space)
|
||||
"re" = (/turf/simulated/floor/plasteel/circuit,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTHWEST)"; icon_state = "warningline"; dir = 9},/area/space)
|
||||
"rf" = (/turf/simulated/floor/plasteel/circuit,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTHEAST)"; icon_state = "warningline"; dir = 5},/area/space)
|
||||
"rg" = (/turf/simulated/floor/plasteel/darkred,/area/space)
|
||||
"rh" = (/obj/structure/divine/trap/ctf/red,/turf/simulated/floor/plasteel/darkred,/area/space)
|
||||
"ri" = (/turf/simulated/floor/plasteel/bluespace,/area/space)
|
||||
"rj" = (/turf/simulated/floor/plasteel/circuit,/area/space)
|
||||
"rk" = (/turf/simulated/floor/plasteel/circuit,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (WEST)"; icon_state = "warningline"; dir = 8},/area/space)
|
||||
"rl" = (/turf/simulated/floor/plasteel/circuit,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (EAST)"; icon_state = "warningline"; dir = 4},/area/space)
|
||||
"rm" = (/turf/simulated/floor/plasteel/circuit,/turf/simulated/floor/plasteel/warningline,/area/space)
|
||||
"rn" = (/turf/simulated/floor/plasteel/circuit,/turf/simulated/floor/plasteel/warningline,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (SOUTHWEST)"; icon_state = "warningline"; dir = 10},/area/space)
|
||||
"ro" = (/turf/simulated/floor/plasteel/circuit,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (SOUTHEAST)"; icon_state = "warningline"; dir = 6},/area/space)
|
||||
"rp" = (/obj/structure/barricade/security,/turf/simulated/floor/plasteel/circuit/gcircuit/off,/area/space)
|
||||
"rq" = (/obj/structure/divine/trap/ctf/red,/turf/simulated/floor/plasteel/red,/area/space)
|
||||
"rr" = (/obj/structure/barricade/security,/obj/structure/barricade/security,/turf/simulated/floor/plasteel/circuit/rcircuit,/area/space)
|
||||
"rs" = (/turf/simulated/floor/plasteel/darkblue/side{tag = "icon-darkblue (NORTH)"; icon_state = "darkblue"; dir = 1},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/space)
|
||||
"rt" = (/turf/simulated/floor/plasteel/darkblue/side{tag = "icon-darkblue (NORTHWEST)"; icon_state = "darkblue"; dir = 9},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTHWEST)"; icon_state = "warningline"; dir = 9},/area/space)
|
||||
"ru" = (/turf/simulated/floor/plasteel/circuit/gcircuit/off,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/space)
|
||||
"rv" = (/turf/simulated/floor/plasteel/darkblue/side{tag = "icon-darkblue (NORTHEAST)"; icon_state = "darkblue"; dir = 5},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/space)
|
||||
"rw" = (/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (NORTH)"; icon_state = "darkred"; dir = 1},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/space)
|
||||
"rx" = (/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (NORTHWEST)"; icon_state = "darkred"; dir = 9},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/space)
|
||||
"ry" = (/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (NORTHEAST)"; icon_state = "darkred"; dir = 5},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTHEAST)"; icon_state = "warningline"; dir = 5},/area/space)
|
||||
"rz" = (/turf/simulated/floor/plasteel/darkblue/side{tag = "icon-darkblue (WEST)"; icon_state = "darkblue"; dir = 8},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (WEST)"; icon_state = "warningline"; dir = 8},/area/space)
|
||||
"rA" = (/turf/simulated/floor/plasteel/circuit/gcircuit/off,/area/space)
|
||||
"rB" = (/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (EAST)"; icon_state = "darkred"; dir = 4},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (EAST)"; icon_state = "warningline"; dir = 4},/area/space)
|
||||
"rC" = (/turf/simulated/floor/plasteel/circuit/rcircuit,/area/space)
|
||||
"rD" = (/turf/simulated/floor/plasteel/circuit/gcircuit/animated,/area/space)
|
||||
"rE" = (/obj/machinery/capture_the_flag/blue,/turf/simulated/floor/plasteel/circuit/gcircuit/animated,/area/space)
|
||||
"rF" = (/obj/item/weapon/twohanded/required/ctf/blue,/turf/simulated/floor/plasteel/circuit/gcircuit/animated,/area/space)
|
||||
"rG" = (/obj/item/weapon/twohanded/required/ctf/red,/turf/simulated/floor/plasteel/circuit/gcircuit/animated,/area/space)
|
||||
"rH" = (/obj/machinery/capture_the_flag/red,/turf/simulated/floor/plasteel/circuit/gcircuit/animated,/area/space)
|
||||
"rI" = (/turf/simulated/floor/plasteel/darkblue/side,/turf/simulated/floor/plasteel/warningline,/area/space)
|
||||
"rJ" = (/turf/simulated/floor/plasteel/darkblue/side{tag = "icon-darkblue (SOUTHWEST)"; icon_state = "darkblue"; dir = 10},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (SOUTHWEST)"; icon_state = "warningline"; dir = 10},/area/space)
|
||||
"rK" = (/turf/simulated/floor/plasteel/circuit/gcircuit/off,/turf/simulated/floor/plasteel/warningline,/area/space)
|
||||
"rL" = (/turf/simulated/floor/plasteel/darkblue/side{tag = "icon-darkblue (SOUTHEAST)"; icon_state = "darkblue"; dir = 6},/turf/simulated/floor/plasteel/warningline,/area/space)
|
||||
"rM" = (/turf/simulated/floor/plasteel/darkred/side,/turf/simulated/floor/plasteel/warningline,/area/space)
|
||||
"rN" = (/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (SOUTHWEST)"; icon_state = "darkred"; dir = 10},/turf/simulated/floor/plasteel/warningline,/area/space)
|
||||
"rO" = (/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (SOUTHEAST)"; icon_state = "darkred"; dir = 6},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (SOUTHEAST)"; icon_state = "warningline"; dir = 6},/area/space)
|
||||
"rP" = (/turf/simulated/floor/plasteel/circuit/rcircuit,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/space)
|
||||
"rQ" = (/turf/simulated/floor/plasteel/circuit/rcircuit,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTHWEST)"; icon_state = "warningline"; dir = 9},/area/space)
|
||||
"rR" = (/turf/simulated/floor/plasteel/circuit/rcircuit,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTHEAST)"; icon_state = "warningline"; dir = 5},/area/space)
|
||||
"rS" = (/turf/simulated/floor/plasteel/circuit/rcircuit,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (WEST)"; icon_state = "warningline"; dir = 8},/area/space)
|
||||
"rT" = (/turf/simulated/floor/plasteel/circuit/rcircuit,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (EAST)"; icon_state = "warningline"; dir = 4},/area/space)
|
||||
"rU" = (/turf/simulated/floor/plasteel/circuit/rcircuit,/turf/simulated/floor/plasteel/warningline,/area/space)
|
||||
"rV" = (/turf/simulated/floor/plasteel/circuit/rcircuit,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (SOUTHWEST)"; icon_state = "warningline"; dir = 10},/area/space)
|
||||
"rW" = (/turf/simulated/floor/plasteel/circuit/rcircuit,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (SOUTHEAST)"; icon_state = "warningline"; dir = 6},/area/space)
|
||||
"rX" = (/turf/simulated/floor/plasteel/black,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (WEST)"; icon_state = "warningline"; dir = 8},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/space)
|
||||
"rY" = (/turf/simulated/floor/plasteel/darkred/corner{tag = "icon-darkredcorners (WEST)"; icon_state = "darkredcorners"; dir = 8},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/space)
|
||||
"rZ" = (/turf/simulated/floor/plasteel/darkred/corner,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/space)
|
||||
"sa" = (/turf/simulated/floor/plasteel/darkred/corner{tag = "icon-darkredcorners (WEST)"; icon_state = "darkredcorners"; dir = 8},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTHEAST)"; icon_state = "warningline"; dir = 5},/area/space)
|
||||
"sb" = (/turf/simulated/floor/plasteel/darkred/corner,/area/space)
|
||||
"sc" = (/turf/simulated/floor/plasteel/darkred/corner{tag = "icon-darkredcorners (NORTH)"; icon_state = "darkredcorners"; dir = 1},/area/space)
|
||||
"sd" = (/turf/simulated/floor/plasteel/darkred/corner{tag = "icon-darkredcorners (NORTH)"; icon_state = "darkredcorners"; dir = 1},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (EAST)"; icon_state = "warningline"; dir = 4},/area/space)
|
||||
"se" = (/turf/simulated/floor/plasteel/darkred/corner{tag = "icon-darkredcorners (EAST)"; icon_state = "darkredcorners"; dir = 4},/area/space)
|
||||
"sf" = (/turf/simulated/floor/plasteel/darkred/corner{tag = "icon-darkredcorners (WEST)"; icon_state = "darkredcorners"; dir = 8},/area/space)
|
||||
"sg" = (/turf/simulated/floor/plasteel/darkred/corner{tag = "icon-darkredcorners (WEST)"; icon_state = "darkredcorners"; dir = 8},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (EAST)"; icon_state = "warningline"; dir = 4},/area/space)
|
||||
"sh" = (/turf/simulated/floor/plasteel/black,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (SOUTHWEST)"; icon_state = "warningline"; dir = 10},/area/space)
|
||||
"si" = (/turf/simulated/floor/plasteel/darkred/corner{tag = "icon-darkredcorners (NORTH)"; icon_state = "darkredcorners"; dir = 1},/turf/simulated/floor/plasteel/warningline,/area/space)
|
||||
"sj" = (/turf/simulated/floor/plasteel/darkred/corner{tag = "icon-darkredcorners (EAST)"; icon_state = "darkredcorners"; dir = 4},/turf/simulated/floor/plasteel/warningline,/area/space)
|
||||
"sk" = (/turf/simulated/floor/plasteel/darkred/corner{tag = "icon-darkredcorners (NORTH)"; icon_state = "darkredcorners"; dir = 1},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (SOUTHEAST)"; icon_state = "warningline"; dir = 6},/area/space)
|
||||
"sl" = (/obj/structure/table/reinforced,/turf/simulated/floor/plasteel/bluespace,/area/space)
|
||||
"sm" = (/obj/structure/barricade/security,/turf/simulated/floor/plasteel/bluespace,/area/space)
|
||||
"qd" = (/obj/structure/window/reinforced/fulltile{health = 1e+007; maxhealth = 1e+007; name = "hardened window"},/turf/simulated/floor/plating,/area/ctf)
|
||||
"qe" = (/turf/simulated/floor/plasteel/black,/turf/simulated/floor/plasteel/warningline,/area/ctf)
|
||||
"qf" = (/turf/simulated/floor/plasteel/darkblue/corner,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTHWEST)"; icon_state = "warningline"; dir = 9},/area/ctf)
|
||||
"qg" = (/turf/simulated/floor/plasteel/black,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/ctf)
|
||||
"qh" = (/turf/simulated/floor/plasteel/darkblue/corner{tag = "icon-darkbluecorners (WEST)"; icon_state = "darkbluecorners"; dir = 8},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/ctf)
|
||||
"qi" = (/turf/simulated/floor/plasteel/darkblue/corner,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/ctf)
|
||||
"qj" = (/turf/simulated/floor/plasteel/black,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTHEAST)"; icon_state = "warningline"; dir = 5},/area/ctf)
|
||||
"qk" = (/obj/machinery/power/emitter/energycannon,/turf/simulated/floor/plating,/area/ctf)
|
||||
"ql" = (/turf/simulated/floor/plasteel/darkblue/corner{tag = "icon-darkbluecorners (EAST)"; icon_state = "darkbluecorners"; dir = 4},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (WEST)"; icon_state = "warningline"; dir = 8},/area/ctf)
|
||||
"qm" = (/turf/simulated/floor/plasteel/black,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (EAST)"; icon_state = "warningline"; dir = 4},/area/ctf)
|
||||
"qn" = (/turf/simulated/floor/plasteel/darkblue/corner{tag = "icon-darkbluecorners (WEST)"; icon_state = "darkbluecorners"; dir = 8},/area/ctf)
|
||||
"qo" = (/turf/simulated/floor/plasteel/darkblue/corner{tag = "icon-darkbluecorners (EAST)"; icon_state = "darkbluecorners"; dir = 4},/area/ctf)
|
||||
"qp" = (/turf/simulated/floor/plating{icon_plating = "warnplate"; icon_state = "warnplate"},/area/ctf)
|
||||
"qq" = (/turf/simulated/floor/plasteel/black,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (WEST)"; icon_state = "warningline"; dir = 8},/area/ctf)
|
||||
"qr" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/ctf)
|
||||
"qs" = (/turf/simulated/floor/plating,/area/ctf)
|
||||
"qt" = (/turf/simulated/floor/plating{dir = 4; icon_state = "warnplate"; luminosity = 2; nitrogen = 0.01; oxygen = 0.01; temperature = 2.7},/area/ctf)
|
||||
"qu" = (/turf/simulated/floor/plasteel/darkblue/corner,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (WEST)"; icon_state = "warningline"; dir = 8},/area/ctf)
|
||||
"qv" = (/turf/simulated/floor/plasteel/darkblue/corner{tag = "icon-darkbluecorners (NORTH)"; icon_state = "darkbluecorners"; dir = 1},/area/ctf)
|
||||
"qw" = (/turf/simulated/floor/plasteel/darkblue/corner,/area/ctf)
|
||||
"qx" = (/turf/simulated/floor/plating{dir = 1; icon_state = "warnplate"},/area/ctf)
|
||||
"qy" = (/turf/simulated/floor/plasteel/darkblue/corner{tag = "icon-darkbluecorners (EAST)"; icon_state = "darkbluecorners"; dir = 4},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (SOUTHWEST)"; icon_state = "warningline"; dir = 10},/area/ctf)
|
||||
"qz" = (/turf/simulated/floor/plasteel/darkblue/corner{tag = "icon-darkbluecorners (NORTH)"; icon_state = "darkbluecorners"; dir = 1},/turf/simulated/floor/plasteel/warningline,/area/ctf)
|
||||
"qA" = (/turf/simulated/floor/plasteel/darkblue/corner{tag = "icon-darkbluecorners (EAST)"; icon_state = "darkbluecorners"; dir = 4},/turf/simulated/floor/plasteel/warningline,/area/ctf)
|
||||
"qB" = (/turf/simulated/floor/plasteel/black,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (SOUTHEAST)"; icon_state = "warningline"; dir = 6},/area/ctf)
|
||||
"qC" = (/obj/machinery/power/emitter/energycannon{tag = "icon-emitter (NORTH)"; icon_state = "emitter"; dir = 1},/turf/simulated/floor/plating,/area/ctf)
|
||||
"qD" = (/obj/structure/divine/trap/ctf/blue,/turf/simulated/floor/plasteel/blue,/area/ctf)
|
||||
"qE" = (/turf/simulated/floor/plasteel/circuit,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/ctf)
|
||||
"qF" = (/turf/simulated/floor/plasteel/circuit,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTHWEST)"; icon_state = "warningline"; dir = 9},/area/ctf)
|
||||
"qG" = (/turf/simulated/floor/plasteel/circuit,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTHEAST)"; icon_state = "warningline"; dir = 5},/area/ctf)
|
||||
"qH" = (/turf/simulated/floor/plasteel/darkred,/area/ctf)
|
||||
"qI" = (/obj/structure/divine/trap/ctf/red,/turf/simulated/floor/plasteel/darkred,/area/ctf)
|
||||
"qJ" = (/turf/simulated/floor/plasteel/circuit,/area/ctf)
|
||||
"qK" = (/turf/simulated/floor/plasteel/circuit,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (WEST)"; icon_state = "warningline"; dir = 8},/area/ctf)
|
||||
"qL" = (/turf/simulated/floor/plasteel/circuit,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (EAST)"; icon_state = "warningline"; dir = 4},/area/ctf)
|
||||
"qM" = (/turf/simulated/floor/plasteel/circuit,/turf/simulated/floor/plasteel/warningline,/area/ctf)
|
||||
"qN" = (/turf/simulated/floor/plasteel/circuit,/turf/simulated/floor/plasteel/warningline,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (SOUTHWEST)"; icon_state = "warningline"; dir = 10},/area/ctf)
|
||||
"qO" = (/turf/simulated/floor/plasteel/circuit,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (SOUTHEAST)"; icon_state = "warningline"; dir = 6},/area/ctf)
|
||||
"qP" = (/obj/structure/barricade/security,/turf/simulated/floor/plasteel/circuit/gcircuit/off,/area/ctf)
|
||||
"qQ" = (/obj/structure/divine/trap/ctf/red,/turf/simulated/floor/plasteel/red,/area/ctf)
|
||||
"qR" = (/obj/structure/barricade/security,/obj/structure/barricade/security,/turf/simulated/floor/plasteel/circuit/rcircuit,/area/ctf)
|
||||
"qS" = (/turf/simulated/floor/plasteel/darkblue/side{tag = "icon-darkblue (NORTH)"; icon_state = "darkblue"; dir = 1},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/ctf)
|
||||
"qT" = (/turf/simulated/floor/plasteel/darkblue/side{tag = "icon-darkblue (NORTHWEST)"; icon_state = "darkblue"; dir = 9},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTHWEST)"; icon_state = "warningline"; dir = 9},/area/ctf)
|
||||
"qU" = (/turf/simulated/floor/plasteel/circuit/gcircuit/off,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/ctf)
|
||||
"qV" = (/turf/simulated/floor/plasteel/darkblue/side{tag = "icon-darkblue (NORTHEAST)"; icon_state = "darkblue"; dir = 5},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/ctf)
|
||||
"qW" = (/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (NORTH)"; icon_state = "darkred"; dir = 1},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/ctf)
|
||||
"qX" = (/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (NORTHWEST)"; icon_state = "darkred"; dir = 9},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/ctf)
|
||||
"qY" = (/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (NORTHEAST)"; icon_state = "darkred"; dir = 5},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTHEAST)"; icon_state = "warningline"; dir = 5},/area/ctf)
|
||||
"qZ" = (/turf/simulated/floor/plasteel/darkblue/side{tag = "icon-darkblue (WEST)"; icon_state = "darkblue"; dir = 8},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (WEST)"; icon_state = "warningline"; dir = 8},/area/ctf)
|
||||
"ra" = (/turf/simulated/floor/plasteel/circuit/gcircuit/off,/area/ctf)
|
||||
"rb" = (/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (EAST)"; icon_state = "darkred"; dir = 4},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (EAST)"; icon_state = "warningline"; dir = 4},/area/ctf)
|
||||
"rc" = (/turf/simulated/floor/plasteel/circuit/rcircuit,/area/ctf)
|
||||
"rd" = (/turf/simulated/floor/plasteel/circuit/gcircuit/animated,/area/ctf)
|
||||
"re" = (/obj/machinery/capture_the_flag/blue,/turf/simulated/floor/plasteel/circuit/gcircuit/animated,/area/ctf)
|
||||
"rf" = (/obj/item/weapon/twohanded/required/ctf/blue,/turf/simulated/floor/plasteel/circuit/gcircuit/animated,/area/ctf)
|
||||
"rg" = (/obj/item/weapon/twohanded/required/ctf/red,/turf/simulated/floor/plasteel/circuit/gcircuit/animated,/area/ctf)
|
||||
"rh" = (/obj/machinery/capture_the_flag/red,/turf/simulated/floor/plasteel/circuit/gcircuit/animated,/area/ctf)
|
||||
"ri" = (/turf/simulated/floor/plasteel/darkblue/side,/turf/simulated/floor/plasteel/warningline,/area/ctf)
|
||||
"rj" = (/turf/simulated/floor/plasteel/darkblue/side{tag = "icon-darkblue (SOUTHWEST)"; icon_state = "darkblue"; dir = 10},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (SOUTHWEST)"; icon_state = "warningline"; dir = 10},/area/ctf)
|
||||
"rk" = (/turf/simulated/floor/plasteel/circuit/gcircuit/off,/turf/simulated/floor/plasteel/warningline,/area/ctf)
|
||||
"rl" = (/turf/simulated/floor/plasteel/darkblue/side{tag = "icon-darkblue (SOUTHEAST)"; icon_state = "darkblue"; dir = 6},/turf/simulated/floor/plasteel/warningline,/area/ctf)
|
||||
"rm" = (/turf/simulated/floor/plasteel/darkred/side,/turf/simulated/floor/plasteel/warningline,/area/ctf)
|
||||
"rn" = (/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (SOUTHWEST)"; icon_state = "darkred"; dir = 10},/turf/simulated/floor/plasteel/warningline,/area/ctf)
|
||||
"ro" = (/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (SOUTHEAST)"; icon_state = "darkred"; dir = 6},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (SOUTHEAST)"; icon_state = "warningline"; dir = 6},/area/ctf)
|
||||
"rp" = (/turf/simulated/floor/plasteel/circuit/rcircuit,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/ctf)
|
||||
"rq" = (/turf/simulated/floor/plasteel/circuit/rcircuit,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTHWEST)"; icon_state = "warningline"; dir = 9},/area/ctf)
|
||||
"rr" = (/turf/simulated/floor/plasteel/circuit/rcircuit,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTHEAST)"; icon_state = "warningline"; dir = 5},/area/ctf)
|
||||
"rs" = (/turf/simulated/floor/plasteel/circuit/rcircuit,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (WEST)"; icon_state = "warningline"; dir = 8},/area/ctf)
|
||||
"rt" = (/turf/simulated/floor/plasteel/circuit/rcircuit,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (EAST)"; icon_state = "warningline"; dir = 4},/area/ctf)
|
||||
"ru" = (/turf/simulated/floor/plasteel/circuit/rcircuit,/turf/simulated/floor/plasteel/warningline,/area/ctf)
|
||||
"rv" = (/turf/simulated/floor/plasteel/circuit/rcircuit,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (SOUTHWEST)"; icon_state = "warningline"; dir = 10},/area/ctf)
|
||||
"rw" = (/turf/simulated/floor/plasteel/circuit/rcircuit,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (SOUTHEAST)"; icon_state = "warningline"; dir = 6},/area/ctf)
|
||||
"rx" = (/turf/simulated/floor/plasteel/black,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (WEST)"; icon_state = "warningline"; dir = 8},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/ctf)
|
||||
"ry" = (/turf/simulated/floor/plasteel/darkred/corner{tag = "icon-darkredcorners (WEST)"; icon_state = "darkredcorners"; dir = 8},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/ctf)
|
||||
"rz" = (/turf/simulated/floor/plasteel/darkred/corner,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/ctf)
|
||||
"rA" = (/turf/simulated/floor/plasteel/darkred/corner{tag = "icon-darkredcorners (WEST)"; icon_state = "darkredcorners"; dir = 8},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTHEAST)"; icon_state = "warningline"; dir = 5},/area/ctf)
|
||||
"rB" = (/turf/simulated/floor/plasteel/darkred/corner,/area/ctf)
|
||||
"rC" = (/turf/simulated/floor/plasteel/darkred/corner{tag = "icon-darkredcorners (NORTH)"; icon_state = "darkredcorners"; dir = 1},/area/ctf)
|
||||
"rD" = (/turf/simulated/floor/plasteel/darkred/corner{tag = "icon-darkredcorners (NORTH)"; icon_state = "darkredcorners"; dir = 1},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (EAST)"; icon_state = "warningline"; dir = 4},/area/ctf)
|
||||
"rE" = (/turf/simulated/floor/plasteel/darkred/corner{tag = "icon-darkredcorners (EAST)"; icon_state = "darkredcorners"; dir = 4},/area/ctf)
|
||||
"rF" = (/turf/simulated/floor/plasteel/darkred/corner{tag = "icon-darkredcorners (WEST)"; icon_state = "darkredcorners"; dir = 8},/area/ctf)
|
||||
"rG" = (/turf/simulated/floor/plasteel/darkred/corner{tag = "icon-darkredcorners (WEST)"; icon_state = "darkredcorners"; dir = 8},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (EAST)"; icon_state = "warningline"; dir = 4},/area/ctf)
|
||||
"rH" = (/turf/simulated/floor/plasteel/black,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (SOUTHWEST)"; icon_state = "warningline"; dir = 10},/area/ctf)
|
||||
"rI" = (/turf/simulated/floor/plasteel/darkred/corner{tag = "icon-darkredcorners (NORTH)"; icon_state = "darkredcorners"; dir = 1},/turf/simulated/floor/plasteel/warningline,/area/ctf)
|
||||
"rJ" = (/turf/simulated/floor/plasteel/darkred/corner{tag = "icon-darkredcorners (EAST)"; icon_state = "darkredcorners"; dir = 4},/turf/simulated/floor/plasteel/warningline,/area/ctf)
|
||||
"rK" = (/turf/simulated/floor/plasteel/darkred/corner{tag = "icon-darkredcorners (NORTH)"; icon_state = "darkredcorners"; dir = 1},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (SOUTHEAST)"; icon_state = "warningline"; dir = 6},/area/ctf)
|
||||
|
||||
(1,1,1) = {"
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababadaeaeaeaeaeadaeaeaeaeaeadaeaeaeaeaeadaeaeaeaeaeadaeaeaeaeaeadaeaeaeaeaead
|
||||
@@ -995,86 +967,86 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacdjacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeab
|
||||
aaaaaaaaaaaaaaaaaaaadkaaaaaaaaaadlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacdoacacacacacacacacacacacacacacacabababababababababababababqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeab
|
||||
dpdpdpdpdpdpdpdpdpdpdpdpdpdpdpababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeab
|
||||
dpdpdpdpdpdpdpdpdpdpdpdpdpdpdpababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeab
|
||||
dpdpdpdpdpdpdpdpdpdpdpdpdpdpdpababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeab
|
||||
dpdpdpdpdpdpdpdpdpdpdpdpdpdpdpababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeab
|
||||
dpdpdpdpdpdpdpdpdpdpdpdpdpdpdpababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeab
|
||||
dpdpdpdpdpdpdpdpdpdpdpdpdpdpdpababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeab
|
||||
dpdpdpdpdpdpdpdpdpdpdpdpdpdpdpababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeab
|
||||
dpdpdpdpdpdpdpdqdpdpdpdpdpdpdpababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeab
|
||||
dpdpdpdpdpdpdpdpdpdpdpdpdpdpdpababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
aaaaaaaaaaaaaaaaaaaadkaaaaaaaaaadlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacdoacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
dpdpdpdpdpdpdpdpdpdpdpdpdpdpdpababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
dpdpdpdpdpdpdpdpdpdpdpdpdpdpdpababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
dpdpdpdpdpdpdpdpdpdpdpdpdpdpdpababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
dpdpdpdpdpdpdpdpdpdpdpdpdpdpdpababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
dpdpdpdpdpdpdpdpdpdpdpdpdpdpdpababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
dpdpdpdpdpdpdpdpdpdpdpdpdpdpdpababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
dpdpdpdpdpdpdpdpdpdpdpdpdpdpdpababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
dpdpdpdpdpdpdpdqdpdpdpdpdpdpdpababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
dpdpdpdpdpdpdpdpdpdpdpdpdpdpdpababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
dpdpdpdpdpdpdpdpdpdpdpdpdpdpdpababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRab
|
||||
dpdpdpdpdpdpdpdpdpdpdpdpdpdpdpababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababjRjSjXjXjXjXjXkMjRjSjXjXjXkMjRjSjXjXjXkMjRjSjXjXjXkMjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRkWkXkXkXkYjRkWkXkXkXkYjRkWkXkXkXkYjRkWkXkXkXkXkXkYjRab
|
||||
dpdpdpdpdpdpdpdpdpdpdpdpdpdpdpababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababjRlelqlqlqlqlqlKlSlenfndnflKlSlenfndnflKlSlenfndnflKnlnlnlnlnloEoEnlnlnlnlnlnloFnlnlnlnlnlnlnlnlnloFnlnlnlnlnlnlnloFnlnlnlnlnlnlnlnlnloFnlnlnlnlnlnloEoEnlnlnlnlnlpSlqpTlqpUpVpSlqpTlqpUpVpSlqpTlqpUpVpSlqlqlqlqlqpUjRab
|
||||
dpdpdpdpdpdpdpdpdpdpdpdpdpdpdpababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRlelqpWpWpWlqlKlSlenfndndlKlSlendndndlKlSlendndnflKnlnlnlnlnlnlnlnlnlnlnlnlnlnlnlnlnlnloEnlnlnlnlnlnlnlnloEnlnlnlnlnlnlnlnloEnlnlnlnlnlnlnlnlnlnlnlnlnlnlnlnlnlnlpSlqpTpTpUpVpSpTpTpTpUpVpSpTpTlqpUpVpSlqpWpWpWlqpUjRab
|
||||
dpdpdpdpdpdpdpdpdpdpdpdpdpdpdpababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRlelqlqlqlqlqlKlSlenfndnflKlSlenfndnflKlSlenfndnflKnlnlnlnlnloEoEnlnlnlnlnlnloFnlnlnlnlnlnlnlnlnloFnlnlnlnlnlnlnloFnlnlnlnlnlnlnlnlnloFnlnlnlnlnlnloEoEnlnlnlnlnlpSlqpTlqpUpVpSlqpTlqpUpVpSlqpTlqpUpVpSlqlqlqlqlqpUjRab
|
||||
drdpdpdpdpdpdpdpdpdpdpdpdpdpdpababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRlelqpWpWpWlqlKjRpXpYpYpYpZjRpXpYpYpYpZjRpXpYpYpYpZjRlqlqlqjRjRjRjRlqlqlqjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRqaqbqbqbqcjRqaqbqbqbqcjRqaqbqbqbqcjRpSlqpWpWpWlqpUjRab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadqfqgqgqgqgqgqhadadqiqiqiadadadqjqjqjadadadqiqiqiadadqkqkqkadadadadqkqkqkadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadqlqlqladadadqjqjqjadadadqlqlqladadqmqgqgqgqgqgqnadab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadqfqgqoqoqoqgqhadqpqqqqqqqradqpqqqqqqqradqpqqqqqqqradqsquqtqtqvquqtqtqvquqtqtqvquqtqtqvquqtqwadadqxadadadqxadadadqxadadadadqxadadadadqxadadadqxadadadqxadadadadadqyqzqzqzqAadqyqzqzqzqAadqyqzqzqzqAadqmqgqoqoqoqgqnadab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadqfqgqgqgqgqgqhqiqfqCqBqCqhqiqfqCqBqCqhqiqfqCqBqCqhqEqDqCqFqgqGqCqFqgqGqCqFqgqGqCqFqgqGqBqFqEadadqHadadadqHadadadqHadadadadqHadadadadqHadadadqHadadadqHadadadadadqmqgqIqgqnqlqmqgqIqgqnqlqmqgqIqgqnqlqmqgqgqgqgqgqnadab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadqfqgqoqoqoqgqhqiqfqCqBqBqhqiqfqBqBqBqhqiqfqBqBqCqhqEqJqhqCqgqgqhqCqgqgqhqCqgqgqhqCqgqgqBqCqEqKqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqMqmqgqIqIqnqlqmqIqIqIqnqlqmqIqIqgqnqlqmqgqoqoqoqgqnadab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadqfqgqgqgqgqgqhqiqfqCqBqCqhqiqfqCqBqCqhqiqfqCqBqCqhqEqNqCqOqgqPqCqOqgqPqCqOqgqPqCqOqgqPqBqOqEadadqQadqjadqQadqjadqQadadqjadqQadqjadadqQadqjadqQadqjadqQadadqjadadqmqgqIqgqnqlqmqgqIqgqnqlqmqgqIqgqnqlqmqgqgqgqgqgqnadab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadqRqSqSqSqSqSqTadqRqSqSqSqTadqRqSqSqSqTadqRqSqSqSqTadqUqVqkqkqWqVqkqkqWqVqkqkqWqVqkqkqWqVqkqXadadqYadqjadqYadqjadqYadadqjadqYadqjadadqYadqjadqYadqjadqYadadqjadadqZrarararbadqZrarararbadqZrarararbadqZrarararararbadab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadrcadadadadadrcadadqiqiqiadadadqCqCqCadadadadqLadadadadqtadadadadadqBqBqBadadadadadrerdrdrdrfadadqjadqjadqjadqjadqjadadqjadqjadqjadadqjadqjadqjadqjadqjadadqjadadadadqLadadadadrgrgrgadadadqlqlqladadrhadadadadadrhadab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadqCqCqCqCqCqCqCadqpqqqqqqqradqCqCqCqCqCadadadqLadadadadqgriririririririririririririrkrjrjrjrlriririririririririririririqgadadadqgriririririririririririririqgadadadadqLadadadrgrgrgrgrgadqyqzqzqzqAadrgrgrgrgrgrgrgadab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadqCqBqBqBqBqBqCrcqfqCqBqCqhadqCqgqgqgqCadadadqLadadadadqgadqjqjqjadqBqBqBadqjqjqjadrnrmrmrmroadqjqjqjadrprprpadqjqjqjadqgadadadqgadqjqjqjadqIqIqIadqjqjqjadqgadadadadqLadadadrgqgqgqgrgadqmqgqIqgqnrqrgqIqIqIqIrrrgadab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadqCqBqCqCqCqBqCrcqfqBqBqBqhadqCadqBadqCadqLqLqLqLqLqLqgqgqgqgqgqgqgqgqgqgqgqgqgqgqgrtrsrsrsrvrurururururururururururururxrwrwrwryqgqgqgqgqgqgqgqgqgqgqgqgqgqgqgqLqLqLqLqLqLadrgadqIadrgadqmqIqIqIqnrqrgqIrgrgrgqIrgadab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadqCqBqCqCqCqBqCrcqfqCqBqCqhadqCqgqgqgqCadadadqLadqjadqgqgqgrjrjrjrjrjrjrjrjrjrjrjqgrzqCqCqCqhrArArArArAadrAadrArArArArAqmrgrgrgrBqgrCrCrCrCrCrCrCrCrCrCrCqgqgqgadqjadqLadadadrgqgqgqgrgadqmqgqIqgqnrqrgqIrgrgrgqIrgadab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadqCqCqCqCqCqCqCadqRqSqSqSqTadqCqCqCqCqCadadadqLqjqjqjqgqgqgqgqgqgqgqgqgqgqgqgqgqgqgrzqCqBqCqhrArArArArArAadrArArArArArAqmrgqIrgrBqgqgqgqgqgqgqgqgqgqgqgqgqgqgqgqjqjqjqLadadadrgrgrgrgrgadqZrarararbadrgrgrgrgrgrgrgadab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadadqiqiqiqiqiadadadadadadadadadqCqCqCadadadadadadqjadqgqgadqCqiqCadqjqjqjadqCqiqCadrzqCqCqCqhadrArjqBrArArArArAqIrCrAadqmrgrgrgrBadrgqlrgadqjqjqjadrgqlrgadqgqgadqjadadadadadadrgrgrgadadadadadadadadadrgrgrgrgrgadadab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadqCqCqCqCqCqCqCadqCqCqCqCqCadqCqCqCqCqCadqCqCqCqCqCadqgqgadqiqCqiqBrjrjrjqBqiqCqiadrzqCadqCqhadrArArjqBrArArAqIrCrArAadqmrgadrgrBadqlrgqlqIrCrCrCqIqlrgqladqgqgadrgrgrgrgrgadrgrgrgrgrgadrgrgrgrgrgadrgrgrgrgrgrgrgadab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadqCqCqCrDqCqCqCadqCqgadqgqCqCqCqBrDqBqCqCqCqgadqgqCqCqgqgqjqCqiqCrjrjrjrjrjqCqiqCadrzqCqBqCqhadrjrArArjqBrAqIrCrArArCadqmrgqIrgrBadrgqlrgrCrCrCrCrCrgqlrgqjqgqgrgrgqgadqgrgrgrgqIrDqIrgrgrgqgadqgrgadrgrgrgrDrgrgrgadab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadqCqCrDrErDqCqCadqCqgqBqgqCqCqCrDrFrDqCqCqCqgqBqgqCqCqgqgqjqiqCqirjrjqBrjrjqiqCqiadrzqCqBqCqhadqBrjrArArjrArCrArArCqIadqmrgqIrgrBadqlrgqlrCrCqIrCrCqlrgqlqjqgqgrgrgqgqIqgrgrgrgrDrGrDrgrgrgqgqIqgrgadrgrgrDrHrDrgrgadab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadqCqCqCrDqCqCqCadqCqgadqgqCqCqCqBrDqBqCqCqCqgadqgqCqCqgqgqjqCqiqCrjrjrjrjrjqCqiqCadrzqCqBqCqhadrjrArArjqBrAqIrCrArArCadqmrgqIrgrBadrgqlrgrCrCrCrCrCrgqlrgqjqgqgrgrgqgadqgrgrgrgqIrDqIrgrgrgqgadqgrgadrgrgrgrDrgrgrgadab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadqCqCqCqCqCqCqCadqCqCqCqCqCadqCqCqCqCqCadqCqCqCqCqCadqgqgadqiqCqiqBrjrjrjqBqiqCqiadrzqCadqCqhadrArArjqBrArArAqIrCrArAadqmrgadrgrBadqlrgqlqIrCrCrCqIqlrgqladqgqgadrgrgrgrgrgadrgrgrgrgrgadrgrgrgrgrgadrgrgrgrgrgrgrgadab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadadqiqiqiqiqiadadadadadadadadadqCqCqCadadadadadadqjadqgqgadqCqiqCadqjqjqjadqCqiqCadrzqCqCqCqhadrArjqBrArArArArAqIrCrAadqmrgrgrgrBadrgqlrgadqjqjqjadrgqlrgadqgqgadqjadadadadadadrgrgrgadadadadadadadadadrgrgrgrgrgadadab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadqCqCqCqCqCqCqCadqpqqqqqqqradqCqCqCqCqCadadadqLqjqjqjqgqgqgqgqgqgqgqgqgqgqgqgqgqgqgrzqCqBqCqhrArArArArArAadrArArArArArAqmrgqIrgrBqgqgqgqgqgqgqgqgqgqgqgqgqgqgqgqjqjqjqLadadadrgrgrgrgrgadqyqzqzqzqAadrgrgrgrgrgrgrgadab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadqCqBqCqCqCqBqCrcqfqgqBqgqhadqCqgqgqgqCadadadqLadqjadqgqgqgrjrjrjrjrjrjrjrjrjrjrjqgrzqCqCqCqhrArArArArAadrAadrArArArArAqmrgrgrgrBqgrCrCrCrCrCrCrCrCrCrCrCqgqgqgadqjadqLadadadrgqgqgqgrgadqmrgqIrgqnrqrgqIrgrgrgqIrgadab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadqCqBqCqCqCqBqCrcqfqBqBqBqhadqCadqBadqCadqLqLqLqLqLqLqgqgqgqgqgqgqgqgqgqgqgqgqgqgqgrJrIrIrIrLrKrKrKrKrKrKrKrKrKrKrKrKrKrNrMrMrMrOqgqgqgqgqgqgqgqgqgqgqgqgqgqgqgqLqLqLqLqLqLadrgadqIadrgadqmqIqIqIqnrqrgqIrgrgrgqIrgadab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdtdudvdwabdxabababdyabdsdtdudvdwabababababababababababababababababababababababababababababababababababababababababababababababababababababababababadqCqBqBqBqBqBqCrcqfqgqBqgqhadqCqgqgqgqCadadadqLadadadadqgadqjqjqjadqBqBqBadqjqjqjadqgadadadqgadqjqjqjadrprprpadqjqjqjadrQrPrPrPrRadqjqjqjadqIqIqIadqjqjqjadqgadadadadqLadadadrgqgqgqgrgadqmrgqIrgqnrqrgqIqIqIqIqIrgadab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdzdAdAdAdBdCdDdEdFdEdDdGdHdAdAdAdzabababababababababababababababababababababababababababababababababababababababababababababababababababababababababadqCqCqCqCqCqCqCadqRqSqSqSqTadqCqCqCqCqCadadadqLadadadadqgriririririririririririririqgadadadqgriririririririririririririrSrCrCrCrTriririririririririririririqgadadadadqLadadadrgrgrgrgrgadqZrarararbadrgrgrgrgrgrgrgadab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdzdIdIdJdKdLdMdNdOdPdMdLdQdRdIdIdzabababababababababababababababababababababababababababababababababababababababababababababababababababababababababadrcadadadadadrcadadqiqiqiadadadqCqCqCadadadadqLadadadadqjadadqjadqjadqjadqjadqjadadqjadadadqjadadqjadqjadqjadqjadqjadadrVrUrUrUrWadadadadadqIqIqIadadadadadqkadadadadqLadadadadrgrgrgadadadqlqlqladadrhadadadadadrhadab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdzdIdIdSdTdTdMdTdTdTdMdTdTdSdIdIdzabababababababababababababababababababababababababababababababababababababababababababababababababababababababababadqpqqqqqqqqqqqradqpqqqqqqqradqpqqqqqqqradqpqqqqqqqradadqjadadqxadqjadqxadqjadqxadadqjadqxadqjadadqxadqjadqxadqjadqxadadrXqtrZrYqtqtrZrYqtqtrZrYqtqtrZrYqtqtrZsaadqyqzqzqzqAadqyqzqzqzqAadqyqzqzqzqAadqyqzqzqzqzqzqAadab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdUdRdIdDdTdMdMdMdMdMdMdMdTdDdIdJdVabababababababababababababababababababababababababababababababababababababababababababababababababababababababababadqfqgqgqgqgqgqhqiqfqgqBqgqhqiqfqgqBqgqhqiqfqgqBqgqhadadqjadadqHadqjadqHadqjadqHadadqjadqHadqjadadqHadqjadqHadqjadqHadadqJsbqIscqgsbrgscqgsbrgscqgsbrgscqgsbrgsdqJqmqgqIqgqnqlqmqgqIqgqnqlqmqgqIqgqnqlqmqgqgqgqgqgqnadab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdUdWdXdYdZeaebdMecdTdMedeedWdVababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadqfqgqoqoqoqgqhqiqfqgqBqBqhqiqfqBqBqBqhqiqfqBqBqgqhqKqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqMqJrgqIqgqgrgqmqgqgrgqmqgqgrgqmqgqgrgqmqEqJqmqgqIqIqnqlqmqIqIqIqnqlqmqIqIqgqnqlqmqgqoqoqoqgqnadab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdzefegeheidMdTdTdMeddzababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadqfqgqgqgqgqgqhqiqfqgqBqgqhqiqfqgqBqgqhqiqfqgqBqgqhadadadadadqQadadadqQadadadqQadadadadqQadadadadqQadadadqQadadadqQadadqJseqIsfqgsergsfqgsergsfqgsergsfqgsergsgqJqmqgqIqgqnqlqmqgqIqgqnqlqmqgqIqgqnqlqmqgqgqgqgqgqnadab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdzejekekebdMedeldMeddSababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadqfqgqoqoqoqgqhadqRqSqSqSqTadqRqSqSqSqTadqRqSqSqSqTadadadadadqYadadadqYadadadqYadadadadqYadadadadqYadadadqYadadadqYadadshqksjsiqkqksjsiqkqksjsiqkqksjsiqkqksjskadqZrarararbadqZrarararbadqZrarararbadqmqgqoqoqoqgqnadab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdzemekekendMedeldMdMdDeoabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadqfqgqgqgqgqgqhadadqiqiqiadadadqjqjqjadadadqiqiqiadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadqtqtqtadadadadqtqtqtadadqlqlqladadadqjqjqjadadadqlqlqladadqmqgqgqgqgqgqnadab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdBdWdWdWdXdMdTdTdMeddEababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadqfqgqoqoqoqgqhadqpqqqqqqqradqpqqqqqqqradqpqqqqqqqradadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadqgqgqgadadadadqgqgqgadqyqzqzqzqAadqyqzqzqzqAadqyqzqzqzqAadqmqgqoqoqoqgqnadab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdzepdMepdzdMedeldMedeqababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadqfqgqgqgqgqgqhqiqfqgqBqgqhqiqfqgqBqgqhqiqfqgqBqgqhqgslslslslsmsmslslslslslslrislslslslslslslslslrislslslslslslslrislslslslslslslslslrislslslslslslsmsmslslslslslqmqgqIqgqnqlqmqgqIqgqnqlqmqgqIqgqnqlqmqgqgqgqgqgqnadab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdzepdMepdSdMedeldMeddEababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadqfqgqoqoqoqgqhqiqfqgqBqBqhqiqfqBqBqBqhqiqfqBqBqgqhqgslslslslslslslslslslslslslslslslslsmslslslslslslslslsmslslslslslslslslsmslslslslslslslslslslslslslslslslslslqmqgqIqIqnqlqmqIqIqIqnqlqmqIqIqgqnqlqmqgqoqoqoqgqnadab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdzepdMdMerdMdMdMdMdMdDesabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadqfqgqgqgqgqgqhqiqfqgqBqgqhqiqfqgqBqgqhqiqfqgqBqgqhqgslslslslsmsmslslslslslslrislslslslslslslslslrislslslslslslslrislslslslslslslslslrislslslslslslsmsmslslslslslqmqgqIqgqnqlqmqgqIqgqnqlqmqgqIqgqnqlqmqgqgqgqgqgqnadab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdzepdMepetdMdTdTdTdTetababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadqRqSqSqSqSqSqTadqRqSqSqSqTadqRqSqSqSqTadqRqSqSqSqTadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadqZrarararbadqZrarararbadqZrarararbadqZrarararararbadab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdzepdMepdzdMeuevewdLdzababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRlelqlqlqlqlqlKjRjRlSlSlSjRjRjRqdqdqdjRjRjRlSlSlSjRjRqeqeqejRjRjRjRqeqeqejRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRpVpVpVjRjRjRqdqdqdjRjRjRpVpVpVjRjRpSlqlqlqlqlqpUjRab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRlelqpWpWpWlqlKjRjSjXjXjXkMjRjSjXjXjXkMjRjSjXjXjXkMjRqfqhqgqgqiqhqgqgqiqhqgqgqiqhqgqgqiqhqgqjjRjRqkjRjRjRqkjRjRjRqkjRjRjRjRqkjRjRjRjRqkjRjRjRqkjRjRjRqkjRjRjRjRjRkWkXkXkXkYjRkWkXkXkXkYjRkWkXkXkXkYjRpSlqpWpWpWlqpUjRab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRlelqlqlqlqlqlKlSlenfndnflKlSlenfndnflKlSlenfndnflKqmqlnfqnlqqonfqnlqqonfqnlqqonfqnlqqondqnqmjRjRqpjRjRjRqpjRjRjRqpjRjRjRjRqpjRjRjRjRqpjRjRjRqpjRjRjRqpjRjRjRjRjRpSlqpTlqpUpVpSlqpTlqpUpVpSlqpTlqpUpVpSlqlqlqlqlqpUjRab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRlelqpWpWpWlqlKlSlenfndndlKlSlendndndlKlSlendndnflKqmqqlKnflqlqlKnflqlqlKnflqlqlKnflqlqndnfqmqrqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqtpSlqpTpTpUpVpSpTpTpTpUpVpSpTpTlqpUpVpSlqpWpWpWlqpUjRab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRlelqlqlqlqlqlKlSlenfndnflKlSlenfndnflKlSlenfndnflKqmqunfqvlqqwnfqvlqqwnfqvlqqwnfqvlqqwndqvqmjRjRqxjRqdjRqxjRqdjRqxjRjRqdjRqxjRqdjRjRqxjRqdjRqxjRqdjRqxjRjRqdjRjRpSlqpTlqpUpVpSlqpTlqpUpVpSlqpTlqpUpVpSlqlqlqlqlqpUjRab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRpXpYpYpYpYpYpZjRpXpYpYpYpZjRpXpYpYpYpZjRpXpYpYpYpZjRqyqzqeqeqAqzqeqeqAqzqeqeqAqzqeqeqAqzqeqBjRjRqCjRqdjRqCjRqdjRqCjRjRqdjRqCjRqdjRjRqCjRqdjRqCjRqdjRqCjRjRqdjRjRqaqbqbqbqcjRqaqbqbqbqcjRqaqbqbqbqcjRqaqbqbqbqbqbqcjRab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRqDjRjRjRjRjRqDjRjRlSlSlSjRjRjRnfnfnfjRjRjRjRqsjRjRjRjRqgjRjRjRjRjRndndndjRjRjRjRjRqFqEqEqEqGjRjRqdjRqdjRqdjRqdjRqdjRjRqdjRqdjRqdjRjRqdjRqdjRqdjRqdjRqdjRjRqdjRjRjRjRqsjRjRjRjRqHqHqHjRjRjRpVpVpVjRjRqIjRjRjRjRjRqIjRab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRnfnfnfnfnfnfnfjRjSjXjXjXkMjRnfnfnfnfnfjRjRjRqsjRjRjRjRlqoFoFoFoFoFoFoFoFoFoFoFoFoFqKqJqJqJqLoFoFoFoFoFoFoFoFoFoFoFoFoFlqjRjRjRlqoFoFoFoFoFoFoFoFoFoFoFoFoFlqjRjRjRjRqsjRjRjRqHqHqHqHqHjRkWkXkXkXkYjRqHqHqHqHqHqHqHjRab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRnfndndndndndnfqDlenfndnflKjRnflqlqlqnfjRjRjRqsjRjRjRjRlqjRqdqdqdjRndndndjRqdqdqdjRqNqMqMqMqOjRqdqdqdjRqPqPqPjRqdqdqdjRlqjRjRjRlqjRqdqdqdjRpTpTpTjRqdqdqdjRlqjRjRjRjRqsjRjRjRqHlqlqlqqHjRpSlqpTlqpUqQqHpTpTpTpTqRqHjRab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRnfndnfnfnfndnfqDlendndndlKjRnfjRndjRnfjRqsqsqsqsqsqslqlqlqlqlqlqlqlqlqlqlqlqlqlqlqqTqSqSqSqVqUqUqUqUqUqUqUqUqUqUqUqUqUqXqWqWqWqYlqlqlqlqlqlqlqlqlqlqlqlqlqlqlqqsqsqsqsqsqsjRqHjRpTjRqHjRpSpTpTpTpUqQqHpTqHqHqHpTqHjRab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRnfndnfnfnfndnfqDlenfndnflKjRnflqlqlqnfjRjRjRqsjRqdjRlqlqlqqJqJqJqJqJqJqJqJqJqJqJlqqZnfnfnflKrararararajRrajRrararararapSqHqHqHrblqrcrcrcrcrcrcrcrcrcrcrclqlqlqjRqdjRqsjRjRjRqHlqlqlqqHjRpSlqpTlqpUqQqHpTqHqHqHpTqHjRab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRnfnfnfnfnfnfnfjRpXpYpYpYpZjRnfnfnfnfnfjRjRjRqsqdqdqdlqlqlqlqlqlqlqlqlqlqlqlqlqlqlqqZnfndnflKrarararararajRrarararararapSqHpTqHrblqlqlqlqlqlqlqlqlqlqlqlqlqlqlqqdqdqdqsjRjRjRqHqHqHqHqHjRqaqbqbqbqcjRqHqHqHqHqHqHqHjRab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRjRlSlSlSlSlSjRjRjRjRjRjRjRjRjRnfnfnfjRjRjRjRjRjRqdjRlqlqjRnflSnfjRqdqdqdjRnflSnfjRqZnfnfnflKjRraqJndrararararapTrcrajRpSqHqHqHrbjRqHpVqHjRqdqdqdjRqHpVqHjRlqlqjRqdjRjRjRjRjRjRqHqHqHjRjRjRjRjRjRjRjRjRqHqHqHqHqHjRjRab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRnfnfnfnfnfnfnfjRnfnfnfnfnfjRnfnfnfnfnfjRnfnfnfnfnfjRlqlqjRlSnflSndqJqJqJndlSnflSjRqZnfjRnflKjRraraqJndrararapTrcrarajRpSqHjRqHrbjRpVqHpVpTrcrcrcpTpVqHpVjRlqlqjRqHqHqHqHqHjRqHqHqHqHqHjRqHqHqHqHqHjRqHqHqHqHqHqHqHjRab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRnfnfnfrdnfnfnfjRnflqjRlqnfnfnfndrdndnfnfnflqjRlqnfnflqlqqdnflSnfqJqJqJqJqJnflSnfjRqZnfndnflKjRqJraraqJndrapTrcrararcjRpSqHpTqHrbjRqHpVqHrcrcrcrcrcqHpVqHqdlqlqqHqHlqjRlqqHqHqHpTrdpTqHqHqHlqjRlqqHjRqHqHqHrdqHqHqHjRab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRnfnfrdrerdnfnfjRnflqndlqnfnfnfrdrfrdnfnfnflqndlqnfnflqlqqdlSnflSqJqJndqJqJlSnflSjRqZnfndnflKjRndqJraraqJrarcrararcpTjRpSqHpTqHrbjRpVqHpVrcrcpTrcrcpVqHpVqdlqlqqHqHlqpTlqqHqHqHrdrgrdqHqHqHlqpTlqqHjRqHqHrdrhrdqHqHjRab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRnfnfnfrdnfnfnfjRnflqjRlqnfnfnfndrdndnfnfnflqjRlqnfnflqlqqdnflSnfqJqJqJqJqJnflSnfjRqZnfndnflKjRqJraraqJndrapTrcrararcjRpSqHpTqHrbjRqHpVqHrcrcrcrcrcqHpVqHqdlqlqqHqHlqjRlqqHqHqHpTrdpTqHqHqHlqjRlqqHjRqHqHqHrdqHqHqHjRab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRnfnfnfnfnfnfnfjRnfnfnfnfnfjRnfnfnfnfnfjRnfnfnfnfnfjRlqlqjRlSnflSndqJqJqJndlSnflSjRqZnfjRnflKjRraraqJndrararapTrcrarajRpSqHjRqHrbjRpVqHpVpTrcrcrcpTpVqHpVjRlqlqjRqHqHqHqHqHjRqHqHqHqHqHjRqHqHqHqHqHjRqHqHqHqHqHqHqHjRab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRjRlSlSlSlSlSjRjRjRjRjRjRjRjRjRnfnfnfjRjRjRjRjRjRqdjRlqlqjRnflSnfjRqdqdqdjRnflSnfjRqZnfnfnflKjRraqJndrararararapTrcrajRpSqHqHqHrbjRqHpVqHjRqdqdqdjRqHpVqHjRlqlqjRqdjRjRjRjRjRjRqHqHqHjRjRjRjRjRjRjRjRjRqHqHqHqHqHjRjRab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRnfnfnfnfnfnfnfjRjSjXjXjXkMjRnfnfnfnfnfjRjRjRqsqdqdqdlqlqlqlqlqlqlqlqlqlqlqlqlqlqlqqZnfndnflKrarararararajRrarararararapSqHpTqHrblqlqlqlqlqlqlqlqlqlqlqlqlqlqlqqdqdqdqsjRjRjRqHqHqHqHqHjRkWkXkXkXkYjRqHqHqHqHqHqHqHjRab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRnfndnfnfnfndnfqDlelqndlqlKjRnflqlqlqnfjRjRjRqsjRqdjRlqlqlqqJqJqJqJqJqJqJqJqJqJqJlqqZnfnfnflKrararararajRrajRrararararapSqHqHqHrblqrcrcrcrcrcrcrcrcrcrcrclqlqlqjRqdjRqsjRjRjRqHlqlqlqqHjRpSqHpTqHpUqQqHpTqHqHqHpTqHjRab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRnfndnfnfnfndnfqDlendndndlKjRnfjRndjRnfjRqsqsqsqsqsqslqlqlqlqlqlqlqlqlqlqlqlqlqlqlqrjriririrlrkrkrkrkrkrkrkrkrkrkrkrkrkrnrmrmrmrolqlqlqlqlqlqlqlqlqlqlqlqlqlqlqqsqsqsqsqsqsjRqHjRpTjRqHjRpSpTpTpTpUqQqHpTqHqHqHpTqHjRab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdtdudvdwabdxabababdyabdsdtdudvdwabababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRnfndndndndndnfqDlelqndlqlKjRnflqlqlqnfjRjRjRqsjRjRjRjRlqjRqdqdqdjRndndndjRqdqdqdjRlqjRjRjRlqjRqdqdqdjRqPqPqPjRqdqdqdjRrqrprprprrjRqdqdqdjRpTpTpTjRqdqdqdjRlqjRjRjRjRqsjRjRjRqHlqlqlqqHjRpSqHpTqHpUqQqHpTpTpTpTpTqHjRab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdzdAdAdAdBdCdDdEdFdEdDdGdHdAdAdAdzabababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRnfnfnfnfnfnfnfjRpXpYpYpYpZjRnfnfnfnfnfjRjRjRqsjRjRjRjRlqoFoFoFoFoFoFoFoFoFoFoFoFoFlqjRjRjRlqoFoFoFoFoFoFoFoFoFoFoFoFoFrsrcrcrcrtoFoFoFoFoFoFoFoFoFoFoFoFoFlqjRjRjRjRqsjRjRjRqHqHqHqHqHjRqaqbqbqbqcjRqHqHqHqHqHqHqHjRab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdzdIdIdJdKdLdMdNdOdPdMdLdQdRdIdIdzabababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRqDjRjRjRjRjRqDjRjRlSlSlSjRjRjRnfnfnfjRjRjRjRqsjRjRjRjRqdjRjRqdjRqdjRqdjRqdjRqdjRjRqdjRjRjRqdjRjRqdjRqdjRqdjRqdjRqdjRjRrvrurururwjRjRjRjRjRpTpTpTjRjRjRjRjRqejRjRjRjRqsjRjRjRjRqHqHqHjRjRjRpVpVpVjRjRqIjRjRjRjRjRqIjRab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdzdIdIdSdTdTdMdTdTdTdMdTdTdSdIdIdzabababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRjSjXjXjXjXjXkMjRjSjXjXjXkMjRjSjXjXjXkMjRjSjXjXjXkMjRjRqdjRjRqkjRqdjRqkjRqdjRqkjRjRqdjRqkjRqdjRjRqkjRqdjRqkjRqdjRqkjRjRrxqgrzryqgqgrzryqgqgrzryqgqgrzryqgqgrzrAjRkWkXkXkXkYjRkWkXkXkXkYjRkWkXkXkXkYjRkWkXkXkXkXkXkYjRab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdUdRdIdDdTdMdMdMdMdMdMdMdTdDdIdJdVabababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRlelqlqlqlqlqlKlSlelqndlqlKlSlelqndlqlKlSlelqndlqlKjRjRqdjRjRqpjRqdjRqpjRqdjRqpjRjRqdjRqpjRqdjRjRqpjRqdjRqpjRqdjRqpjRjRqqrBpTrClqrBqHrClqrBqHrClqrBqHrClqrBqHrDqqpSlqpTlqpUpVpSlqpTlqpUpVpSlqpTlqpUpVpSlqlqlqlqlqpUjRab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdUdWdXdYdZeaebdMecdTdMedeedWdVababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRlelqpWpWpWlqlKlSlelqndndlKlSlendndndlKlSlendndlqlKqrqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqtqqqHpTlqlqqHpSlqlqqHpSlqlqqHpSlqlqqHpSqmqqpSlqpTpTpUpVpSpTpTpTpUpVpSpTpTlqpUpVpSlqpWpWpWlqpUjRab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdzefegeheidMdTdTdMeddzababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRlelqlqlqlqlqlKlSlelqndlqlKlSlelqndlqlKlSlelqndlqlKjRjRjRjRjRqxjRjRjRqxjRjRjRqxjRjRjRjRqxjRjRjRjRqxjRjRjRqxjRjRjRqxjRjRqqrEpTrFlqrEqHrFlqrEqHrFlqrEqHrFlqrEqHrGqqpSlqpTlqpUpVpSlqpTlqpUpVpSlqpTlqpUpVpSlqlqlqlqlqpUjRab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdzejekekebdMedeldMeddSababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRlelqpWpWpWlqlKjRpXpYpYpYpZjRpXpYpYpYpZjRpXpYpYpYpZjRjRjRjRjRqCjRjRjRqCjRjRjRqCjRjRjRjRqCjRjRjRjRqCjRjRjRqCjRjRjRqCjRjRrHqerJrIqeqerJrIqeqerJrIqeqerJrIqeqerJrKjRqaqbqbqbqcjRqaqbqbqbqcjRqaqbqbqbqcjRpSlqpWpWpWlqpUjRab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdzemekekendMedeldMdMdDeoabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRlelqlqlqlqlqlKjRjRlSlSlSjRjRjRqdqdqdjRjRjRlSlSlSjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRqgqgqgjRjRjRjRqgqgqgjRjRpVpVpVjRjRjRqdqdqdjRjRjRpVpVpVjRjRpSlqlqlqlqlqpUjRab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdBdWdWdWdXdMdTdTdMeddEababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRlelqpWpWpWlqlKjRjSjXjXjXkMjRjSjXjXjXkMjRjSjXjXjXkMjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRlqlqlqjRjRjRjRlqlqlqjRkWkXkXkXkYjRkWkXkXkXkYjRkWkXkXkXkYjRpSlqpWpWpWlqpUjRab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdzepdMepdzdMedeldMedeqababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRlelqlqlqlqlqlKlSlelqndlqlKlSlelqndlqlKlSlelqndlqlKlqnlnlnlnloEoEnlnlnlnlnlnloFnlnlnlnlnlnlnlnlnloFnlnlnlnlnlnlnloFnlnlnlnlnlnlnlnlnloFnlnlnlnlnlnloEoEnlnlnlnlnlpSlqpTlqpUpVpSlqpTlqpUpVpSlqpTlqpUpVpSlqlqlqlqlqpUjRab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdzepdMepdSdMedeldMeddEababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRlelqpWpWpWlqlKlSlelqndndlKlSlendndndlKlSlendndlqlKlqnlnlnlnlnlnlnlnlnlnlnlnlnlnlnlnlnloEnlnlnlnlnlnlnlnloEnlnlnlnlnlnlnlnloEnlnlnlnlnlnlnlnlnlnlnlnlnlnlnlnlnlnlpSlqpTpTpUpVpSpTpTpTpUpVpSpTpTlqpUpVpSlqpWpWpWlqpUjRab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdzepdMdMerdMdMdMdMdMdDesabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRlelqlqlqlqlqlKlSlelqndlqlKlSlelqndlqlKlSlelqndlqlKlqnlnlnlnloEoEnlnlnlnlnlnloFnlnlnlnlnlnlnlnlnloFnlnlnlnlnlnlnloFnlnlnlnlnlnlnlnlnloFnlnlnlnlnlnloEoEnlnlnlnlnlpSlqpTlqpUpVpSlqpTlqpUpVpSlqpTlqpUpVpSlqlqlqlqlqpUjRab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdzepdMepetdMdTdTdTdTetababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRpXpYpYpYpYpYpZjRpXpYpYpYpZjRpXpYpYpYpZjRpXpYpYpYpZjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRqaqbqbqbqcjRqaqbqbqbqcjRqaqbqbqbqcjRqaqbqbqbqbqbqcjRab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdzepdMepdzdMeuevewdLdzababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdUexexdWeyezdGdWexexdVabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdUdHeAeddMeBeCdBdVababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdzewdTeDdTeAdzabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
|
||||
@@ -117,15 +117,17 @@ Passive gate is similar to the regular pump except:
|
||||
if("pressure")
|
||||
var/pressure = params["pressure"]
|
||||
if(pressure == "max")
|
||||
target_pressure = MAX_OUTPUT_PRESSURE
|
||||
pressure = MAX_OUTPUT_PRESSURE
|
||||
. = TRUE
|
||||
else if(pressure == "input")
|
||||
pressure = input("New output pressure (0-[MAX_OUTPUT_PRESSURE] kPa):", name, target_pressure) as num|null
|
||||
. = .(action, list("pressure" = pressure))
|
||||
if(!isnull(pressure) || !..())
|
||||
. = TRUE
|
||||
else if(text2num(pressure) != null)
|
||||
target_pressure = Clamp(text2num(pressure), 0, MAX_OUTPUT_PRESSURE)
|
||||
pressure = text2num(pressure)
|
||||
. = TRUE
|
||||
if(.)
|
||||
target_pressure = Clamp(pressure, 0, MAX_OUTPUT_PRESSURE)
|
||||
investigate_log("was set to [target_pressure] kPa by [key_name(usr)]", "atmos")
|
||||
update_icon()
|
||||
|
||||
|
||||
@@ -54,7 +54,7 @@ Thus, the two variables affect pump operation are set in New():
|
||||
|
||||
var/output_starting_pressure = air2.return_pressure()
|
||||
|
||||
if( (target_pressure - output_starting_pressure) < 0.01)
|
||||
if((target_pressure - output_starting_pressure) < 0.01)
|
||||
//No need to pump gas if target is already reached!
|
||||
return 1
|
||||
|
||||
@@ -123,15 +123,17 @@ Thus, the two variables affect pump operation are set in New():
|
||||
if("pressure")
|
||||
var/pressure = params["pressure"]
|
||||
if(pressure == "max")
|
||||
target_pressure = MAX_OUTPUT_PRESSURE
|
||||
pressure = MAX_OUTPUT_PRESSURE
|
||||
. = TRUE
|
||||
else if(pressure == "input")
|
||||
pressure = input("New output pressure (0-[MAX_OUTPUT_PRESSURE] kPa):", name, target_pressure) as num|null
|
||||
. = .(action, list("pressure" = pressure))
|
||||
if(!isnull(pressure) && !..())
|
||||
. = TRUE
|
||||
else if(text2num(pressure) != null)
|
||||
target_pressure = Clamp(text2num(pressure), 0, MAX_OUTPUT_PRESSURE)
|
||||
pressure = text2num(pressure)
|
||||
. = TRUE
|
||||
if(.)
|
||||
target_pressure = Clamp(pressure, 0, MAX_OUTPUT_PRESSURE)
|
||||
investigate_log("was set to [target_pressure] kPa by [key_name(usr)]", "atmos")
|
||||
update_icon()
|
||||
|
||||
|
||||
@@ -124,15 +124,17 @@ Thus, the two variables affect pump operation are set in New():
|
||||
if("rate")
|
||||
var/rate = params["rate"]
|
||||
if(rate == "max")
|
||||
transfer_rate = MAX_TRANSFER_RATE
|
||||
rate = MAX_TRANSFER_RATE
|
||||
. = TRUE
|
||||
else if(rate == "input")
|
||||
rate = input("New transfer rate (0-[MAX_TRANSFER_RATE] L/s):", name, transfer_rate) as num|null
|
||||
. = .(action, list("rate" = rate))
|
||||
if(!isnull(rate) && !..())
|
||||
. = TRUE
|
||||
else if(text2num(rate) != null)
|
||||
transfer_rate = Clamp(text2num(rate), 0, MAX_TRANSFER_RATE)
|
||||
rate = text2num(rate)
|
||||
. = TRUE
|
||||
if(.)
|
||||
transfer_rate = Clamp(rate, 0, MAX_TRANSFER_RATE)
|
||||
investigate_log("was set to [transfer_rate] L/s by [key_name(usr)]", "atmos")
|
||||
update_icon()
|
||||
|
||||
@@ -156,12 +158,10 @@ Thus, the two variables affect pump operation are set in New():
|
||||
investigate_log("was turned [on ? "on" : "off"] by a remote signal", "atmos")
|
||||
|
||||
if("status" in signal.data)
|
||||
spawn(2)
|
||||
broadcast_status()
|
||||
broadcast_status()
|
||||
return //do not update_icon
|
||||
|
||||
spawn(2)
|
||||
broadcast_status()
|
||||
broadcast_status()
|
||||
update_icon()
|
||||
return
|
||||
|
||||
|
||||
@@ -131,15 +131,17 @@
|
||||
if("pressure")
|
||||
var/pressure = params["pressure"]
|
||||
if(pressure == "max")
|
||||
target_pressure = MAX_OUTPUT_PRESSURE
|
||||
pressure = MAX_OUTPUT_PRESSURE
|
||||
. = TRUE
|
||||
else if(pressure == "input")
|
||||
pressure = input("New output pressure (0-[MAX_OUTPUT_PRESSURE] kPa):", name, target_pressure) as num|null
|
||||
. = .(action, list("pressure" = pressure))
|
||||
if(!isnull(pressure) && !..())
|
||||
. = TRUE
|
||||
else if(text2num(pressure) != null)
|
||||
target_pressure = Clamp(text2num(pressure), 0, MAX_OUTPUT_PRESSURE)
|
||||
pressure = text2num(pressure)
|
||||
. = TRUE
|
||||
if(.)
|
||||
target_pressure = Clamp(pressure, 0, MAX_OUTPUT_PRESSURE)
|
||||
investigate_log("was set to [target_pressure] kPa by [key_name(usr)]", "atmos")
|
||||
if("filter")
|
||||
filter_type = ""
|
||||
|
||||
@@ -73,22 +73,22 @@
|
||||
var/transfer_moles2 = 0
|
||||
|
||||
if(air1.temperature > 0)
|
||||
transfer_moles1 = (node1_concentration*pressure_delta)*air3.volume/(air1.temperature * R_IDEAL_GAS_EQUATION)
|
||||
transfer_moles1 = (node1_concentration * pressure_delta) * air3.volume / (air1.temperature * R_IDEAL_GAS_EQUATION)
|
||||
|
||||
if(air2.temperature > 0)
|
||||
transfer_moles2 = (node2_concentration*pressure_delta)*air3.volume/(air2.temperature * R_IDEAL_GAS_EQUATION)
|
||||
transfer_moles2 = (node2_concentration * pressure_delta) * air3.volume / (air2.temperature * R_IDEAL_GAS_EQUATION)
|
||||
|
||||
var/air1_moles = air1.total_moles()
|
||||
var/air2_moles = air2.total_moles()
|
||||
|
||||
if((air1_moles < transfer_moles1) || (air2_moles < transfer_moles2))
|
||||
var/ratio = 0
|
||||
if (( transfer_moles1 > 0 ) && (transfer_moles2 >0 ))
|
||||
ratio = min(air1_moles/transfer_moles1, air2_moles/transfer_moles2)
|
||||
if (( transfer_moles2 == 0 ) && ( transfer_moles1 > 0 ))
|
||||
ratio = air1_moles/transfer_moles1
|
||||
if (( transfer_moles1 == 0 ) && ( transfer_moles2 > 0 ))
|
||||
ratio = air2_moles/transfer_moles2
|
||||
if((transfer_moles1 > 0 ) && (transfer_moles2 > 0))
|
||||
ratio = min(air1_moles / transfer_moles1, air2_moles / transfer_moles2)
|
||||
if((transfer_moles2 == 0 ) && ( transfer_moles1 > 0))
|
||||
ratio = air1_moles / transfer_moles1
|
||||
if((transfer_moles1 == 0 ) && ( transfer_moles2 > 0))
|
||||
ratio = air2_moles / transfer_moles2
|
||||
|
||||
transfer_moles1 *= ratio
|
||||
transfer_moles2 *= ratio
|
||||
@@ -105,16 +105,16 @@
|
||||
|
||||
if(transfer_moles1)
|
||||
var/datum/pipeline/parent1 = PARENT1
|
||||
parent1.update = 1
|
||||
parent1.update = TRUE
|
||||
|
||||
if(transfer_moles2)
|
||||
var/datum/pipeline/parent2 = PARENT2
|
||||
parent2.update = 1
|
||||
parent2.update = TRUE
|
||||
|
||||
var/datum/pipeline/parent3 = PARENT3
|
||||
parent3.update = 1
|
||||
parent3.update = TRUE
|
||||
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/mixer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = default_state)
|
||||
@@ -143,15 +143,17 @@
|
||||
if("pressure")
|
||||
var/pressure = params["pressure"]
|
||||
if(pressure == "max")
|
||||
target_pressure = MAX_OUTPUT_PRESSURE
|
||||
pressure = MAX_OUTPUT_PRESSURE
|
||||
. = TRUE
|
||||
else if(pressure == "input")
|
||||
pressure = input("New output pressure (0-[MAX_OUTPUT_PRESSURE] kPa):", name, target_pressure) as num|null
|
||||
. = .(action, list("pressure" = pressure))
|
||||
if(!isnull(pressure) && !..())
|
||||
. = TRUE
|
||||
else if(text2num(pressure) != null)
|
||||
target_pressure = Clamp(text2num(pressure), 0, MAX_OUTPUT_PRESSURE)
|
||||
pressure = text2num(pressure)
|
||||
. = TRUE
|
||||
if(.)
|
||||
target_pressure = Clamp(pressure, 0, MAX_OUTPUT_PRESSURE)
|
||||
investigate_log("was set to [target_pressure] kPa by [key_name(usr)]", "atmos")
|
||||
if("node1")
|
||||
var/value = text2num(params["concentration"])
|
||||
|
||||
@@ -104,6 +104,11 @@
|
||||
build_network()
|
||||
return 1
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/thermomachine/ui_status(mob/user)
|
||||
if(interactive)
|
||||
return ..()
|
||||
return UI_CLOSE
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/thermomachine/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = default_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
@@ -126,7 +131,7 @@
|
||||
return data
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/thermomachine/ui_act(action, params)
|
||||
if(..() || !interactive)
|
||||
if(..())
|
||||
return
|
||||
switch(action)
|
||||
if("power")
|
||||
@@ -139,15 +144,16 @@
|
||||
var/adjust = text2num(params["adjust"])
|
||||
if(target == "input")
|
||||
target = input("Set new target ([min_temperature]-[max_temperature] K):", name, target_temperature) as num|null
|
||||
. = .(action, list("target" = target))
|
||||
else if(text2num(target) != null)
|
||||
target_temperature = text2num(target)
|
||||
. = TRUE
|
||||
if(!isnull(target) && !..())
|
||||
. = TRUE
|
||||
else if(adjust)
|
||||
target_temperature += adjust
|
||||
target = target_temperature + adjust
|
||||
. = TRUE
|
||||
else if(text2num(target) != null)
|
||||
target = text2num(target)
|
||||
. = TRUE
|
||||
if(.)
|
||||
target_temperature = Clamp(target_temperature, min_temperature, max_temperature)
|
||||
target_temperature = Clamp(target, min_temperature, max_temperature)
|
||||
investigate_log("was set to [target_temperature] K by [key_name(usr)]", "atmos")
|
||||
update_icon()
|
||||
|
||||
|
||||
@@ -220,11 +220,12 @@ var/pipenetwarnings = 10
|
||||
total_thermal_energy += G.thermal_energy()
|
||||
total_heat_capacity += G.heat_capacity()
|
||||
|
||||
total_gas_mixture.temperature = total_heat_capacity ? total_thermal_energy/total_heat_capacity : 0
|
||||
total_gas_mixture.temperature = total_heat_capacity ? total_thermal_energy/total_heat_capacity : 0
|
||||
|
||||
if(total_gas_mixture.volume > 0)
|
||||
//Update individual gas_mixtures by volume ratio
|
||||
for(var/datum/gas_mixture/G in GL)
|
||||
for(var/i in GL)
|
||||
var/datum/gas_mixture/G = i
|
||||
G.copy_from(total_gas_mixture)
|
||||
var/list/G_gases = G.gases
|
||||
for(var/id in G_gases)
|
||||
|
||||
@@ -67,10 +67,13 @@
|
||||
|
||||
/obj/effect/hotspot/proc/perform_exposure()
|
||||
var/turf/simulated/location = loc
|
||||
if(!istype(location) || !(location.air)) return 0
|
||||
if(!istype(location) || !(location.air))
|
||||
return 0
|
||||
|
||||
if(volume > CELL_VOLUME*0.95) bypassing = 1
|
||||
else bypassing = 0
|
||||
if(volume > CELL_VOLUME*0.95)
|
||||
bypassing = 1
|
||||
else
|
||||
bypassing = 0
|
||||
|
||||
if(bypassing)
|
||||
if(!just_spawned)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/turf/proc/CanAtmosPass(turf/T)
|
||||
if(!istype(T)) return 0
|
||||
if(!istype(T))
|
||||
return 0
|
||||
var/R
|
||||
if(blocks_air || T.blocks_air)
|
||||
R = 1
|
||||
|
||||
@@ -58,7 +58,8 @@
|
||||
return ..()
|
||||
|
||||
/turf/simulated/assume_air(datum/gas_mixture/giver)
|
||||
if(!giver) return 0
|
||||
if(!giver)
|
||||
return 0
|
||||
var/datum/gas_mixture/receiver = air
|
||||
if(istype(receiver))
|
||||
|
||||
|
||||
@@ -29,42 +29,41 @@
|
||||
#define LIBREGEX_LIBRARY "bin/bygex"
|
||||
#endif
|
||||
|
||||
/proc
|
||||
regEx_compare(str, exp)
|
||||
return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regEx_compare")(str, exp))
|
||||
/proc/regEx_compare(str, exp)
|
||||
return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regEx_compare")(str, exp))
|
||||
|
||||
regex_compare(str, exp)
|
||||
return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regex_compare")(str, exp))
|
||||
/proc/regex_compare(str, exp)
|
||||
return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regex_compare")(str, exp))
|
||||
|
||||
regEx_find(str, exp)
|
||||
return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regEx_find")(str, exp))
|
||||
/proc/regEx_find(str, exp)
|
||||
return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regEx_find")(str, exp))
|
||||
|
||||
regex_find(str, exp)
|
||||
return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regex_find")(str, exp))
|
||||
/proc/regex_find(str, exp)
|
||||
return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regex_find")(str, exp))
|
||||
|
||||
regEx_replaceall(str, exp, fmt)
|
||||
return call(LIBREGEX_LIBRARY, "regEx_replaceall")(str, exp, fmt)
|
||||
/proc/regEx_replaceall(str, exp, fmt)
|
||||
return call(LIBREGEX_LIBRARY, "regEx_replaceall")(str, exp, fmt)
|
||||
|
||||
regex_replaceall(str, exp, fmt)
|
||||
return call(LIBREGEX_LIBRARY, "regex_replaceall")(str, exp, fmt)
|
||||
/proc/regex_replaceall(str, exp, fmt)
|
||||
return call(LIBREGEX_LIBRARY, "regex_replaceall")(str, exp, fmt)
|
||||
|
||||
replacetextEx(str, exp, fmt)
|
||||
return call(LIBREGEX_LIBRARY, "regEx_replaceallliteral")(str, exp, fmt)
|
||||
/proc/replacetextEx(str, exp, fmt)
|
||||
return call(LIBREGEX_LIBRARY, "regEx_replaceallliteral")(str, exp, fmt)
|
||||
|
||||
replacetext(str, exp, fmt)
|
||||
return call(LIBREGEX_LIBRARY, "regex_replaceallliteral")(str, exp, fmt)
|
||||
/proc/replacetext(str, exp, fmt)
|
||||
return call(LIBREGEX_LIBRARY, "regex_replaceallliteral")(str, exp, fmt)
|
||||
|
||||
regEx_replace(str, exp, fmt)
|
||||
return call(LIBREGEX_LIBRARY, "regEx_replace")(str, exp, fmt)
|
||||
/proc/regEx_replace(str, exp, fmt)
|
||||
return call(LIBREGEX_LIBRARY, "regEx_replace")(str, exp, fmt)
|
||||
|
||||
regex_replace(str, exp, fmt)
|
||||
return call(LIBREGEX_LIBRARY, "regex_replace")(str, exp, fmt)
|
||||
/proc/regex_replace(str, exp, fmt)
|
||||
return call(LIBREGEX_LIBRARY, "regex_replace")(str, exp, fmt)
|
||||
|
||||
regEx_findall(str, exp)
|
||||
return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regEx_findall")(str, exp))
|
||||
/proc/regEx_findall(str, exp)
|
||||
return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regEx_findall")(str, exp))
|
||||
|
||||
regex_findall(str, exp)
|
||||
return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regex_findall")(str, exp))
|
||||
/proc/regex_findall(str, exp)
|
||||
return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regex_findall")(str, exp))
|
||||
|
||||
|
||||
//upon calling a regex match or search, a /datum/regex object is created with str(haystack) and exp(needle) variables set
|
||||
@@ -79,66 +78,69 @@
|
||||
var/anchors = 0
|
||||
var/list/matches = list()
|
||||
|
||||
New(str, exp, results)
|
||||
src.str = str
|
||||
src.exp = exp
|
||||
/datum/regex/New(str, exp, results)
|
||||
src.str = str
|
||||
src.exp = exp
|
||||
|
||||
if(findtext(results, "$Err$", 1, 6)) //error message
|
||||
src.error = results
|
||||
else
|
||||
var/list/L = params2list(results)
|
||||
var/list/M
|
||||
var{i;j}
|
||||
for(i in L)
|
||||
M = L[i]
|
||||
for(j=2, j<=M.len, j+=2)
|
||||
matches += new /datum/match(text2num(M[j-1]),text2num(M[j]))
|
||||
anchors = (j-2)/2
|
||||
return matches
|
||||
if(findtext(results, "$Err$", 1, 6)) //error message
|
||||
src.error = results
|
||||
else
|
||||
var/list/L = params2list(results)
|
||||
var/list/M
|
||||
var{i;j}
|
||||
for(i in L)
|
||||
M = L[i]
|
||||
for(j=2, j<=M.len, j+=2)
|
||||
matches += new /datum/match(text2num(M[j-1]),text2num(M[j]))
|
||||
anchors = (j-2)/2
|
||||
return matches
|
||||
|
||||
proc
|
||||
str(i)
|
||||
if(!i) return str
|
||||
var/datum/match/M = matches[i]
|
||||
if(i < 1 || i > matches.len)
|
||||
throw EXCEPTION("str(): out of bounds")
|
||||
return copytext(str, M.pos, M.pos+M.len)
|
||||
/datum/regex/proc/str(i)
|
||||
if(!i)
|
||||
return str
|
||||
var/datum/match/M = matches[i]
|
||||
if(i < 1 || i > matches.len)
|
||||
throw EXCEPTION("str(): out of bounds")
|
||||
return copytext(str, M.pos, M.pos+M.len)
|
||||
|
||||
pos(i)
|
||||
if(!i) return 1
|
||||
if(i < 1 || i > matches.len)
|
||||
throw EXCEPTION("pos(): out of bounds")
|
||||
var/datum/match/M = matches[i]
|
||||
return M.pos
|
||||
/datum/regex/proc/pos(i)
|
||||
if(!i)
|
||||
return 1
|
||||
if(i < 1 || i > matches.len)
|
||||
throw EXCEPTION("pos(): out of bounds")
|
||||
var/datum/match/M = matches[i]
|
||||
return M.pos
|
||||
|
||||
len(i)
|
||||
if(!i) return length(str)
|
||||
if(i < 1 || i > matches.len)
|
||||
throw EXCEPTION("len(): out of bounds")
|
||||
var/datum/match/M = matches[i]
|
||||
return M.len
|
||||
/datum/regex/proc/len(i)
|
||||
if(!i)
|
||||
return length(str)
|
||||
if(i < 1 || i > matches.len)
|
||||
throw EXCEPTION("len(): out of bounds")
|
||||
var/datum/match/M = matches[i]
|
||||
return M.len
|
||||
|
||||
end(i)
|
||||
if(!i) return length(str)
|
||||
if(i < 1 || i > matches.len)
|
||||
throw EXCEPTION("end() out of bounds")
|
||||
var/datum/match/M = matches[i]
|
||||
return M.pos + M.len
|
||||
/datum/regex/proc/end(i)
|
||||
if(!i)
|
||||
return length(str)
|
||||
if(i < 1 || i > matches.len)
|
||||
throw EXCEPTION("end() out of bounds")
|
||||
var/datum/match/M = matches[i]
|
||||
return M.pos + M.len
|
||||
|
||||
report() //debug tool
|
||||
. = ":: RESULTS ::\n:: str :: [html_encode(str)]\n:: exp :: [html_encode(exp)]\n:: anchors :: [anchors]"
|
||||
if(error)
|
||||
. += "\n<font color='red'>[error]</font>"
|
||||
return
|
||||
for(var/i=1, i<=matches.len, ++i)
|
||||
. += "\nMatch[i]\n\t[html_encode(str(i))]\n\tpos=[pos(i)] len=[len(i)]"
|
||||
/datum/regex/proc/report() //debug tool
|
||||
. = ":: RESULTS ::\n:: str :: [html_encode(str)]\n:: exp :: [html_encode(exp)]\n:: anchors :: [anchors]"
|
||||
if(error)
|
||||
. += "\n<font color='red'>[error]</font>"
|
||||
return
|
||||
for(var/i=1, i<=matches.len, ++i)
|
||||
. += "\nMatch[i]\n\t[html_encode(str(i))]\n\tpos=[pos(i)] len=[len(i)]"
|
||||
|
||||
/datum/match
|
||||
var/pos
|
||||
var/len
|
||||
|
||||
New(pos, len)
|
||||
src.pos = pos
|
||||
src.len = len
|
||||
/datum/match/New(pos, len)
|
||||
src.pos = pos
|
||||
src.len = len
|
||||
|
||||
#endif
|
||||
@@ -4,51 +4,50 @@
|
||||
|
||||
var/datum/regex/results
|
||||
|
||||
verb
|
||||
set_expression()
|
||||
var/t = input(usr,"Input Expression","title",expression) as text|null
|
||||
if(t != null)
|
||||
expression = t
|
||||
usr << "Expression set to:\t[html_encode(t)]"
|
||||
/mob/verb/set_expression()
|
||||
var/t = input(usr,"Input Expression","title",expression) as text|null
|
||||
if(t != null)
|
||||
expression = t
|
||||
usr << "Expression set to:\t[html_encode(t)]"
|
||||
|
||||
set_format()
|
||||
var/t = input(usr,"Input Formatter","title",format) as text|null
|
||||
if(t != null)
|
||||
format = t
|
||||
usr << "Format set to:\t[html_encode(t)]"
|
||||
/mob/verb/set_format()
|
||||
var/t = input(usr,"Input Formatter","title",format) as text|null
|
||||
if(t != null)
|
||||
format = t
|
||||
usr << "Format set to:\t[html_encode(t)]"
|
||||
|
||||
compare_casesensitive(t as text)
|
||||
results = regEx_compare(t, expression)
|
||||
world << results.report()
|
||||
/mob/verb/compare_casesensitive(t as text)
|
||||
results = regEx_compare(t, expression)
|
||||
world << results.report()
|
||||
|
||||
compare(t as text)
|
||||
results = regex_compare(t, expression)
|
||||
world << results.report()
|
||||
/mob/verb/compare(t as text)
|
||||
results = regex_compare(t, expression)
|
||||
world << results.report()
|
||||
|
||||
find_casesensitive(t as text)
|
||||
results = regEx_find(t, expression)
|
||||
world << results.report()
|
||||
/mob/verb/find_casesensitive(t as text)
|
||||
results = regEx_find(t, expression)
|
||||
world << results.report()
|
||||
|
||||
find(t as text)
|
||||
results = regex_find(t, expression)
|
||||
world << results.report()
|
||||
/mob/verb/find(t as text)
|
||||
results = regex_find(t, expression)
|
||||
world << results.report()
|
||||
|
||||
replaceall_casesensitive(t as text)
|
||||
usr << regEx_replaceall(t, expression, format)
|
||||
/mob/verb/replaceall_casesensitive(t as text)
|
||||
usr << regEx_replaceall(t, expression, format)
|
||||
|
||||
replaceall(t as text)
|
||||
usr << regex_replaceall(t, expression, format)
|
||||
/mob/verb/replaceall(t as text)
|
||||
usr << regex_replaceall(t, expression, format)
|
||||
|
||||
replace_casesensitive(t as text)
|
||||
usr << html_encode(regEx_replace(t, expression, format))
|
||||
/mob/verb/replace_casesensitive(t as text)
|
||||
usr << html_encode(regEx_replace(t, expression, format))
|
||||
|
||||
replace(t as text)
|
||||
usr << regex_replace(t, expression, format)
|
||||
/mob/verb/replace(t as text)
|
||||
usr << regex_replace(t, expression, format)
|
||||
|
||||
findall(t as text)
|
||||
results = regex_findall(t, expression)
|
||||
world << results.report()
|
||||
/mob/verb/findall(t as text)
|
||||
results = regex_findall(t, expression)
|
||||
world << results.report()
|
||||
|
||||
findall_casesensitive(t as text)
|
||||
results = regEx_findall(t, expression)
|
||||
world << results.report()
|
||||
/mob/verb/findall_casesensitive(t as text)
|
||||
results = regEx_findall(t, expression)
|
||||
world << results.report()
|
||||
@@ -292,7 +292,8 @@
|
||||
return candidates
|
||||
|
||||
/proc/ScreenText(obj/O, maptext="", screen_loc="CENTER-7,CENTER-7", maptext_height=480, maptext_width=480)
|
||||
if(!isobj(O)) O = new /obj/screen/text()
|
||||
if(!isobj(O))
|
||||
O = new /obj/screen/text()
|
||||
O.maptext = maptext
|
||||
O.maptext_height = maptext_height
|
||||
O.maptext_width = maptext_width
|
||||
@@ -300,8 +301,10 @@
|
||||
return O
|
||||
|
||||
/proc/Show2Group4Delay(obj/O, list/group, delay=0)
|
||||
if(!isobj(O)) return
|
||||
if(!group) group = clients
|
||||
if(!isobj(O))
|
||||
return
|
||||
if(!group)
|
||||
group = clients
|
||||
for(var/client/C in group)
|
||||
C.screen += O
|
||||
if(delay)
|
||||
@@ -409,7 +412,8 @@
|
||||
return candidates
|
||||
|
||||
/proc/makeBody(mob/dead/observer/G_found) // Uses stripped down and bastardized code from respawn character
|
||||
if(!G_found || !G_found.key) return
|
||||
if(!G_found || !G_found.key)
|
||||
return
|
||||
|
||||
//First we spawn a dude.
|
||||
var/mob/living/carbon/human/new_character = new(pick(latejoin))//The mob being spawned.
|
||||
|
||||
@@ -55,7 +55,8 @@
|
||||
//creates every subtype of prototype (excluding prototype) and adds it to list L.
|
||||
//if no list/L is provided, one is created.
|
||||
/proc/init_subtypes(prototype, list/L)
|
||||
if(!istype(L)) L = list()
|
||||
if(!istype(L))
|
||||
L = list()
|
||||
for(var/path in subtypesof(prototype))
|
||||
L += new path()
|
||||
return L
|
||||
|
||||
+13
-8
@@ -783,7 +783,8 @@ The _flatIcons list is a cache for generated icon files.
|
||||
/proc/getIconMask(atom/A)//By yours truly. Creates a dynamic mask for a mob/whatever. /N
|
||||
var/icon/alpha_mask = new(A.icon,A.icon_state)//So we want the default icon and icon state of A.
|
||||
for(var/I in A.overlays)//For every image in overlays. var/image/I will not work, don't try it.
|
||||
if(I:layer>A.layer) continue//If layer is greater than what we need, skip it.
|
||||
if(I:layer>A.layer)
|
||||
continue//If layer is greater than what we need, skip it.
|
||||
var/icon/image_overlay = new(I:icon,I:icon_state)//Blend only works with icon objects.
|
||||
//Also, icons cannot directly set icon_state. Slower than changing variables but whatever.
|
||||
alpha_mask.Blend(image_overlay,ICON_OR)//OR so they are lumped together in a nice overlay.
|
||||
@@ -799,10 +800,14 @@ The _flatIcons list is a cache for generated icon files.
|
||||
for(var/i=0,i<5,i++)//And now we add it as overlays. It's faster than creating an icon and then merging it.
|
||||
var/image/I = image("icon" = opacity_icon, "icon_state" = A.icon_state, "layer" = layer+0.8)//So it's above other stuff but below weapons and the like.
|
||||
switch(i)//Now to determine offset so the result is somewhat blurred.
|
||||
if(1) I.pixel_x--
|
||||
if(2) I.pixel_x++
|
||||
if(3) I.pixel_y--
|
||||
if(4) I.pixel_y++
|
||||
if(1)
|
||||
I.pixel_x--
|
||||
if(2)
|
||||
I.pixel_x++
|
||||
if(3)
|
||||
I.pixel_y--
|
||||
if(4)
|
||||
I.pixel_y++
|
||||
overlays += I//And finally add the overlay.
|
||||
|
||||
/proc/getHologramIcon(icon/A, safety=1)//If safety is on, a new icon is not created.
|
||||
@@ -920,12 +925,12 @@ var/global/list/humanoid_icon_cache = list()
|
||||
/proc/get_flat_human_icon(var/icon_id,var/outfit,var/datum/preferences/prefs)
|
||||
if(!icon_id || !humanoid_icon_cache[icon_id])
|
||||
var/mob/living/carbon/human/dummy/body = new()
|
||||
|
||||
|
||||
if(prefs)
|
||||
prefs.copy_to(body)
|
||||
if(outfit)
|
||||
body.equipOutfit(outfit, TRUE)
|
||||
|
||||
|
||||
var/icon/out_icon = icon('icons/effects/effects.dmi', "nothing")
|
||||
|
||||
body.dir = NORTH
|
||||
@@ -945,7 +950,7 @@ var/global/list/humanoid_icon_cache = list()
|
||||
out_icon.Insert(partial,dir=EAST)
|
||||
|
||||
qdel(body)
|
||||
|
||||
|
||||
humanoid_icon_cache[icon_id] = out_icon
|
||||
return out_icon
|
||||
else
|
||||
|
||||
+64
-32
@@ -3,30 +3,44 @@
|
||||
|
||||
/proc/random_eye_color()
|
||||
switch(pick(20;"brown",20;"hazel",20;"grey",15;"blue",15;"green",1;"amber",1;"albino"))
|
||||
if("brown") return "630"
|
||||
if("hazel") return "542"
|
||||
if("grey") return pick("666","777","888","999","aaa","bbb","ccc")
|
||||
if("blue") return "36c"
|
||||
if("green") return "060"
|
||||
if("amber") return "fc0"
|
||||
if("albino") return pick("c","d","e","f") + pick("0","1","2","3","4","5","6","7","8","9") + pick("0","1","2","3","4","5","6","7","8","9")
|
||||
else return "000"
|
||||
if("brown")
|
||||
return "630"
|
||||
if("hazel")
|
||||
return "542"
|
||||
if("grey")
|
||||
return pick("666","777","888","999","aaa","bbb","ccc")
|
||||
if("blue")
|
||||
return "36c"
|
||||
if("green")
|
||||
return "060"
|
||||
if("amber")
|
||||
return "fc0"
|
||||
if("albino")
|
||||
return pick("c","d","e","f") + pick("0","1","2","3","4","5","6","7","8","9") + pick("0","1","2","3","4","5","6","7","8","9")
|
||||
else
|
||||
return "000"
|
||||
|
||||
/proc/random_underwear(gender)
|
||||
if(!underwear_list.len)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear, underwear_list, underwear_m, underwear_f)
|
||||
switch(gender)
|
||||
if(MALE) return pick(underwear_m)
|
||||
if(FEMALE) return pick(underwear_f)
|
||||
else return pick(underwear_list)
|
||||
if(MALE)
|
||||
return pick(underwear_m)
|
||||
if(FEMALE)
|
||||
return pick(underwear_f)
|
||||
else
|
||||
return pick(underwear_list)
|
||||
|
||||
/proc/random_undershirt(gender)
|
||||
if(!undershirt_list.len)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/undershirt, undershirt_list, undershirt_m, undershirt_f)
|
||||
switch(gender)
|
||||
if(MALE) return pick(undershirt_m)
|
||||
if(FEMALE) return pick(undershirt_f)
|
||||
else return pick(undershirt_list)
|
||||
if(MALE)
|
||||
return pick(undershirt_m)
|
||||
if(FEMALE)
|
||||
return pick(undershirt_f)
|
||||
else
|
||||
return pick(undershirt_list)
|
||||
|
||||
/proc/random_socks()
|
||||
if(!socks_list.len)
|
||||
@@ -56,20 +70,28 @@
|
||||
|
||||
/proc/random_hair_style(gender)
|
||||
switch(gender)
|
||||
if(MALE) return pick(hair_styles_male_list)
|
||||
if(FEMALE) return pick(hair_styles_female_list)
|
||||
else return pick(hair_styles_list)
|
||||
if(MALE)
|
||||
return pick(hair_styles_male_list)
|
||||
if(FEMALE)
|
||||
return pick(hair_styles_female_list)
|
||||
else
|
||||
return pick(hair_styles_list)
|
||||
|
||||
/proc/random_facial_hair_style(gender)
|
||||
switch(gender)
|
||||
if(MALE) return pick(facial_hair_styles_male_list)
|
||||
if(FEMALE) return pick(facial_hair_styles_female_list)
|
||||
else return pick(facial_hair_styles_list)
|
||||
if(MALE)
|
||||
return pick(facial_hair_styles_male_list)
|
||||
if(FEMALE)
|
||||
return pick(facial_hair_styles_female_list)
|
||||
else
|
||||
return pick(facial_hair_styles_list)
|
||||
|
||||
/proc/random_unique_name(gender, attempts_to_find_unique_name=10)
|
||||
for(var/i=1, i<=attempts_to_find_unique_name, i++)
|
||||
if(gender==FEMALE) . = capitalize(pick(first_names_female)) + " " + capitalize(pick(last_names))
|
||||
else . = capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names))
|
||||
if(gender==FEMALE)
|
||||
. = capitalize(pick(first_names_female)) + " " + capitalize(pick(last_names))
|
||||
else
|
||||
. = capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names))
|
||||
|
||||
if(i != attempts_to_find_unique_name && !findname(.))
|
||||
break
|
||||
@@ -104,16 +126,26 @@ var/global/list/roundstart_species[0]
|
||||
|
||||
/proc/age2agedescription(age)
|
||||
switch(age)
|
||||
if(0 to 1) return "infant"
|
||||
if(1 to 3) return "toddler"
|
||||
if(3 to 13) return "child"
|
||||
if(13 to 19) return "teenager"
|
||||
if(19 to 30) return "young adult"
|
||||
if(30 to 45) return "adult"
|
||||
if(45 to 60) return "middle-aged"
|
||||
if(60 to 70) return "aging"
|
||||
if(70 to INFINITY) return "elderly"
|
||||
else return "unknown"
|
||||
if(0 to 1)
|
||||
return "infant"
|
||||
if(1 to 3)
|
||||
return "toddler"
|
||||
if(3 to 13)
|
||||
return "child"
|
||||
if(13 to 19)
|
||||
return "teenager"
|
||||
if(19 to 30)
|
||||
return "young adult"
|
||||
if(30 to 45)
|
||||
return "adult"
|
||||
if(45 to 60)
|
||||
return "middle-aged"
|
||||
if(60 to 70)
|
||||
return "aging"
|
||||
if(70 to INFINITY)
|
||||
return "elderly"
|
||||
else
|
||||
return "unknown"
|
||||
|
||||
/*
|
||||
Proc for attack log creation, because really why not
|
||||
|
||||
@@ -12,22 +12,30 @@
|
||||
return default
|
||||
|
||||
/proc/sanitize_inlist(value, list/List, default)
|
||||
if(value in List) return value
|
||||
if(default) return default
|
||||
if(List && List.len)return pick(List)
|
||||
if(value in List)
|
||||
return value
|
||||
if(default)
|
||||
return default
|
||||
if(List && List.len)
|
||||
return pick(List)
|
||||
|
||||
|
||||
|
||||
//more specialised stuff
|
||||
/proc/sanitize_gender(gender,neuter=0,plural=0, default="male")
|
||||
switch(gender)
|
||||
if(MALE, FEMALE)return gender
|
||||
if(MALE, FEMALE)
|
||||
return gender
|
||||
if(NEUTER)
|
||||
if(neuter) return gender
|
||||
else return default
|
||||
if(neuter)
|
||||
return gender
|
||||
else
|
||||
return default
|
||||
if(PLURAL)
|
||||
if(plural) return gender
|
||||
else return default
|
||||
if(plural)
|
||||
return gender
|
||||
else
|
||||
return default
|
||||
return default
|
||||
|
||||
/proc/sanitize_hexcolor(color, desired_format=3, include_crunch=0, default)
|
||||
@@ -43,14 +51,18 @@
|
||||
for(var/i=start, i<=len, i+=step_size)
|
||||
var/ascii = text2ascii(color,i)
|
||||
switch(ascii)
|
||||
if(48 to 57) . += ascii2text(ascii) //numbers 0 to 9
|
||||
if(97 to 102) . += ascii2text(ascii) //letters a to f
|
||||
if(65 to 70) . += ascii2text(ascii+32) //letters A to F - translates to lowercase
|
||||
if(48 to 57)
|
||||
. += ascii2text(ascii) //numbers 0 to 9
|
||||
if(97 to 102)
|
||||
. += ascii2text(ascii) //letters a to f
|
||||
if(65 to 70)
|
||||
. += ascii2text(ascii+32) //letters A to F - translates to lowercase
|
||||
else
|
||||
break
|
||||
|
||||
if(length(.) != desired_format)
|
||||
if(default) return default
|
||||
if(default)
|
||||
return default
|
||||
return crunch + repeat_string(desired_format, "0")
|
||||
|
||||
return crunch + .
|
||||
|
||||
+40
-20
@@ -62,16 +62,23 @@
|
||||
|
||||
//Returns null if there is any bad text in the string
|
||||
/proc/reject_bad_text(text, max_length=512)
|
||||
if(length(text) > max_length) return //message too long
|
||||
if(length(text) > max_length)
|
||||
return //message too long
|
||||
var/non_whitespace = 0
|
||||
for(var/i=1, i<=length(text), i++)
|
||||
switch(text2ascii(text,i))
|
||||
if(62,60,92,47) return //rejects the text if it contains these bad characters: <, >, \ or /
|
||||
if(127 to 255) return //rejects weird letters like �
|
||||
if(0 to 31) return //more weird stuff
|
||||
if(32) continue //whitespace
|
||||
else non_whitespace = 1
|
||||
if(non_whitespace) return text //only accepts the text if it has some non-spaces
|
||||
if(62,60,92,47)
|
||||
return //rejects the text if it contains these bad characters: <, >, \ or /
|
||||
if(127 to 255)
|
||||
return //rejects weird letters like �
|
||||
if(0 to 31)
|
||||
return //more weird stuff
|
||||
if(32)
|
||||
continue //whitespace
|
||||
else
|
||||
non_whitespace = 1
|
||||
if(non_whitespace)
|
||||
return text //only accepts the text if it has some non-spaces
|
||||
|
||||
// Used to get a properly sanitized input, of max_length
|
||||
/proc/stripped_input(mob/user, message = "", title = "", default = "", max_length=MAX_MESSAGE_LEN)
|
||||
@@ -103,47 +110,57 @@
|
||||
|
||||
// a .. z
|
||||
if(97 to 122) //Lowercase Letters
|
||||
if(last_char_group<2) t_out += ascii2text(ascii_char-32) //Force uppercase first character
|
||||
else t_out += ascii2text(ascii_char)
|
||||
if(last_char_group<2)
|
||||
t_out += ascii2text(ascii_char-32) //Force uppercase first character
|
||||
else
|
||||
t_out += ascii2text(ascii_char)
|
||||
number_of_alphanumeric++
|
||||
last_char_group = 4
|
||||
|
||||
// 0 .. 9
|
||||
if(48 to 57) //Numbers
|
||||
if(!last_char_group) continue //suppress at start of string
|
||||
if(!allow_numbers) continue
|
||||
if(!last_char_group)
|
||||
continue //suppress at start of string
|
||||
if(!allow_numbers)
|
||||
continue
|
||||
t_out += ascii2text(ascii_char)
|
||||
number_of_alphanumeric++
|
||||
last_char_group = 3
|
||||
|
||||
// ' - .
|
||||
if(39,45,46) //Common name punctuation
|
||||
if(!last_char_group) continue
|
||||
if(!last_char_group)
|
||||
continue
|
||||
t_out += ascii2text(ascii_char)
|
||||
last_char_group = 2
|
||||
|
||||
// ~ | @ : # $ % & * +
|
||||
if(126,124,64,58,35,36,37,38,42,43) //Other symbols that we'll allow (mainly for AI)
|
||||
if(!last_char_group) continue //suppress at start of string
|
||||
if(!allow_numbers) continue
|
||||
if(!last_char_group)
|
||||
continue //suppress at start of string
|
||||
if(!allow_numbers)
|
||||
continue
|
||||
t_out += ascii2text(ascii_char)
|
||||
last_char_group = 2
|
||||
|
||||
//Space
|
||||
if(32)
|
||||
if(last_char_group <= 1) continue //suppress double-spaces and spaces at start of string
|
||||
if(last_char_group <= 1)
|
||||
continue //suppress double-spaces and spaces at start of string
|
||||
t_out += ascii2text(ascii_char)
|
||||
last_char_group = 1
|
||||
else
|
||||
return
|
||||
|
||||
if(number_of_alphanumeric < 2) return //protects against tiny names like "A" and also names like "' ' ' ' ' ' ' '"
|
||||
if(number_of_alphanumeric < 2)
|
||||
return //protects against tiny names like "A" and also names like "' ' ' ' ' ' ' '"
|
||||
|
||||
if(last_char_group == 1)
|
||||
t_out = copytext(t_out,1,length(t_out)) //removes the last character (in this case a space)
|
||||
|
||||
for(var/bad_name in list("space","floor","wall","r-wall","monkey","unknown","inactive ai")) //prevents these common metagamey names
|
||||
if(cmptext(t_out,bad_name)) return //(not case sensitive)
|
||||
if(cmptext(t_out,bad_name))
|
||||
return //(not case sensitive)
|
||||
|
||||
return t_out
|
||||
|
||||
@@ -345,8 +362,10 @@ var/list/binary = list("0","1")
|
||||
//This was coded to handle DNA gene-splicing.
|
||||
/proc/merge_text(into, from, null_char="_")
|
||||
. = ""
|
||||
if(!istext(into)) into = ""
|
||||
if(!istext(from)) from = ""
|
||||
if(!istext(into))
|
||||
into = ""
|
||||
if(!istext(from))
|
||||
from = ""
|
||||
var/null_ascii = istext(null_char) ? text2ascii(null_char,1) : null_char
|
||||
|
||||
var/previous = 0
|
||||
@@ -379,7 +398,8 @@ var/list/binary = list("0","1")
|
||||
var/len = length(needles)
|
||||
for(var/i=1, i<=len, i++)
|
||||
temp = findtextEx(haystack, ascii2text(text2ascii(needles,i)), start, end) //Note: ascii2text(text2ascii) is faster than copytext()
|
||||
if(temp) end = temp
|
||||
if(temp)
|
||||
end = temp
|
||||
return end
|
||||
|
||||
|
||||
|
||||
+128
-64
@@ -21,13 +21,19 @@
|
||||
for(var/i=1, i<=len, i++)
|
||||
var/num = text2ascii(hex,i)
|
||||
switch(num)
|
||||
if(48 to 57) num -= 48 //0-9
|
||||
if(97 to 102) num -= 87 //a-f
|
||||
if(65 to 70) num -= 55 //A-F
|
||||
if(45) negative = 1//-
|
||||
if(48 to 57)
|
||||
num -= 48 //0-9
|
||||
if(97 to 102)
|
||||
num -= 87 //a-f
|
||||
if(65 to 70)
|
||||
num -= 55 //A-F
|
||||
if(45)
|
||||
negative = 1//-
|
||||
else
|
||||
if(num) break
|
||||
else continue
|
||||
if(num)
|
||||
break
|
||||
else
|
||||
continue
|
||||
. *= 16
|
||||
. += num
|
||||
if(negative)
|
||||
@@ -48,16 +54,21 @@
|
||||
var/i=0
|
||||
while(1)
|
||||
if(len<=0)
|
||||
if(!num) break
|
||||
if(!num)
|
||||
break
|
||||
else
|
||||
if(i>=len) break
|
||||
if(i>=len)
|
||||
break
|
||||
var/remainder = num/16
|
||||
num = round(remainder)
|
||||
remainder = (remainder - num) * 16
|
||||
switch(remainder)
|
||||
if(9,8,7,6,5,4,3,2,1) . = "[remainder]" + .
|
||||
if(10,11,12,13,14,15) . = ascii2text(remainder+87) + .
|
||||
else . = "0" + .
|
||||
if(9,8,7,6,5,4,3,2,1)
|
||||
. = "[remainder]" + .
|
||||
if(10,11,12,13,14,15)
|
||||
. = ascii2text(remainder+87) + .
|
||||
else
|
||||
. = "0" + .
|
||||
i++
|
||||
return .
|
||||
|
||||
@@ -179,7 +190,8 @@
|
||||
//Case Sensitive!
|
||||
/proc/text2listEx(text, delimiter="\n")
|
||||
var/delim_len = length(delimiter)
|
||||
if(delim_len < 1) return list(text)
|
||||
if(delim_len < 1)
|
||||
return list(text)
|
||||
. = list()
|
||||
var/last_found = 1
|
||||
var/found
|
||||
@@ -243,28 +255,44 @@
|
||||
|
||||
degree = SimplifyDegrees(degree)
|
||||
|
||||
if(degree < 45) return NORTH
|
||||
if(degree < 90) return NORTHEAST
|
||||
if(degree < 135) return EAST
|
||||
if(degree < 180) return SOUTHEAST
|
||||
if(degree < 225) return SOUTH
|
||||
if(degree < 270) return SOUTHWEST
|
||||
if(degree < 315) return WEST
|
||||
if(degree < 45)
|
||||
return NORTH
|
||||
if(degree < 90)
|
||||
return NORTHEAST
|
||||
if(degree < 135)
|
||||
return EAST
|
||||
if(degree < 180)
|
||||
return SOUTHEAST
|
||||
if(degree < 225)
|
||||
return SOUTH
|
||||
if(degree < 270)
|
||||
return SOUTHWEST
|
||||
if(degree < 315)
|
||||
return WEST
|
||||
return NORTH|WEST
|
||||
|
||||
//returns the north-zero clockwise angle in degrees, given a direction
|
||||
|
||||
/proc/dir2angle(D)
|
||||
switch(D)
|
||||
if(NORTH) return 0
|
||||
if(SOUTH) return 180
|
||||
if(EAST) return 90
|
||||
if(WEST) return 270
|
||||
if(NORTHEAST) return 45
|
||||
if(SOUTHEAST) return 135
|
||||
if(NORTHWEST) return 315
|
||||
if(SOUTHWEST) return 225
|
||||
else return null
|
||||
if(NORTH)
|
||||
return 0
|
||||
if(SOUTH)
|
||||
return 180
|
||||
if(EAST)
|
||||
return 90
|
||||
if(WEST)
|
||||
return 270
|
||||
if(NORTHEAST)
|
||||
return 45
|
||||
if(SOUTHEAST)
|
||||
return 135
|
||||
if(NORTHWEST)
|
||||
return 315
|
||||
if(SOUTHWEST)
|
||||
return 225
|
||||
else
|
||||
return null
|
||||
|
||||
//Returns the angle in english
|
||||
/proc/angle2text(degree)
|
||||
@@ -273,26 +301,43 @@
|
||||
//Converts a blend_mode constant to one acceptable to icon.Blend()
|
||||
/proc/blendMode2iconMode(blend_mode)
|
||||
switch(blend_mode)
|
||||
if(BLEND_MULTIPLY) return ICON_MULTIPLY
|
||||
if(BLEND_ADD) return ICON_ADD
|
||||
if(BLEND_SUBTRACT) return ICON_SUBTRACT
|
||||
else return ICON_OVERLAY
|
||||
if(BLEND_MULTIPLY)
|
||||
return ICON_MULTIPLY
|
||||
if(BLEND_ADD)
|
||||
return ICON_ADD
|
||||
if(BLEND_SUBTRACT)
|
||||
return ICON_SUBTRACT
|
||||
else
|
||||
return ICON_OVERLAY
|
||||
|
||||
//Converts a rights bitfield into a string
|
||||
/proc/rights2text(rights, seperator="", list/adds, list/subs)
|
||||
if(rights & R_BUILDMODE) . += "[seperator]+BUILDMODE"
|
||||
if(rights & R_ADMIN) . += "[seperator]+ADMIN"
|
||||
if(rights & R_BAN) . += "[seperator]+BAN"
|
||||
if(rights & R_FUN) . += "[seperator]+FUN"
|
||||
if(rights & R_SERVER) . += "[seperator]+SERVER"
|
||||
if(rights & R_DEBUG) . += "[seperator]+DEBUG"
|
||||
if(rights & R_POSSESS) . += "[seperator]+POSSESS"
|
||||
if(rights & R_PERMISSIONS) . += "[seperator]+PERMISSIONS"
|
||||
if(rights & R_STEALTH) . += "[seperator]+STEALTH"
|
||||
if(rights & R_REJUVINATE) . += "[seperator]+REJUVINATE"
|
||||
if(rights & R_VAREDIT) . += "[seperator]+VAREDIT"
|
||||
if(rights & R_SOUNDS) . += "[seperator]+SOUND"
|
||||
if(rights & R_SPAWN) . += "[seperator]+SPAWN"
|
||||
if(rights & R_BUILDMODE)
|
||||
. += "[seperator]+BUILDMODE"
|
||||
if(rights & R_ADMIN)
|
||||
. += "[seperator]+ADMIN"
|
||||
if(rights & R_BAN)
|
||||
. += "[seperator]+BAN"
|
||||
if(rights & R_FUN)
|
||||
. += "[seperator]+FUN"
|
||||
if(rights & R_SERVER)
|
||||
. += "[seperator]+SERVER"
|
||||
if(rights & R_DEBUG)
|
||||
. += "[seperator]+DEBUG"
|
||||
if(rights & R_POSSESS)
|
||||
. += "[seperator]+POSSESS"
|
||||
if(rights & R_PERMISSIONS)
|
||||
. += "[seperator]+PERMISSIONS"
|
||||
if(rights & R_STEALTH)
|
||||
. += "[seperator]+STEALTH"
|
||||
if(rights & R_REJUVINATE)
|
||||
. += "[seperator]+REJUVINATE"
|
||||
if(rights & R_VAREDIT)
|
||||
. += "[seperator]+VAREDIT"
|
||||
if(rights & R_SOUNDS)
|
||||
. += "[seperator]+SOUND"
|
||||
if(rights & R_SPAWN)
|
||||
. += "[seperator]+SPAWN"
|
||||
|
||||
for(var/verbpath in adds)
|
||||
. += "[seperator]+[verbpath]"
|
||||
@@ -302,11 +347,16 @@
|
||||
|
||||
/proc/ui_style2icon(ui_style)
|
||||
switch(ui_style)
|
||||
if("Retro") return 'icons/mob/screen_retro.dmi'
|
||||
if("Plasmafire") return 'icons/mob/screen_plasmafire.dmi'
|
||||
if("Slimecore") return 'icons/mob/screen_slimecore.dmi'
|
||||
if("Operative") return 'icons/mob/screen_operative.dmi'
|
||||
else return 'icons/mob/screen_midnight.dmi'
|
||||
if("Retro")
|
||||
return 'icons/mob/screen_retro.dmi'
|
||||
if("Plasmafire")
|
||||
return 'icons/mob/screen_plasmafire.dmi'
|
||||
if("Slimecore")
|
||||
return 'icons/mob/screen_slimecore.dmi'
|
||||
if("Operative")
|
||||
return 'icons/mob/screen_operative.dmi'
|
||||
else
|
||||
return 'icons/mob/screen_midnight.dmi'
|
||||
|
||||
//colour formats
|
||||
/proc/rgb2hsl(red, green, blue)
|
||||
@@ -318,18 +368,25 @@
|
||||
var/hue=0;var/saturation=0;var/lightness=0;
|
||||
lightness = (max + min)/2
|
||||
if(range != 0)
|
||||
if(lightness < 0.5) saturation = range/(max+min)
|
||||
else saturation = range/(2-max-min)
|
||||
if(lightness < 0.5)
|
||||
saturation = range/(max+min)
|
||||
else
|
||||
saturation = range/(2-max-min)
|
||||
|
||||
var/dred = ((max-red)/(6*max)) + 0.5
|
||||
var/dgreen = ((max-green)/(6*max)) + 0.5
|
||||
var/dblue = ((max-blue)/(6*max)) + 0.5
|
||||
|
||||
if(max==red) hue = dblue - dgreen
|
||||
else if(max==green) hue = dred - dblue + (1/3)
|
||||
else hue = dgreen - dred + (2/3)
|
||||
if(hue < 0) hue++
|
||||
else if(hue > 1) hue--
|
||||
if(max==red)
|
||||
hue = dblue - dgreen
|
||||
else if(max==green)
|
||||
hue = dred - dblue + (1/3)
|
||||
else
|
||||
hue = dgreen - dred + (2/3)
|
||||
if(hue < 0)
|
||||
hue++
|
||||
else if(hue > 1)
|
||||
hue--
|
||||
|
||||
return list(hue, saturation, lightness)
|
||||
|
||||
@@ -341,8 +398,10 @@
|
||||
blue = red
|
||||
else
|
||||
var/a;var/b;
|
||||
if(lightness < 0.5) b = lightness*(1+saturation)
|
||||
else b = (lightness+saturation) - (saturation*lightness)
|
||||
if(lightness < 0.5)
|
||||
b = lightness*(1+saturation)
|
||||
else
|
||||
b = (lightness+saturation) - (saturation*lightness)
|
||||
a = 2*lightness - b
|
||||
|
||||
red = round(255 * hue2rgb(a, b, hue+(1/3)))
|
||||
@@ -352,11 +411,16 @@
|
||||
return list(red, green, blue)
|
||||
|
||||
/proc/hue2rgb(a, b, hue)
|
||||
if(hue < 0) hue++
|
||||
else if(hue > 1) hue--
|
||||
if(6*hue < 1) return (a+(b-a)*6*hue)
|
||||
if(2*hue < 1) return b
|
||||
if(3*hue < 2) return (a+(b-a)*((2/3)-hue)*6)
|
||||
if(hue < 0)
|
||||
hue++
|
||||
else if(hue > 1)
|
||||
hue--
|
||||
if(6*hue < 1)
|
||||
return (a+(b-a)*6*hue)
|
||||
if(2*hue < 1)
|
||||
return b
|
||||
if(3*hue < 2)
|
||||
return (a+(b-a)*((2/3)-hue)*6)
|
||||
return a
|
||||
|
||||
// Very ugly, BYOND doesn't support unix time and rounding errors make it really hard to convert it to BYOND time.
|
||||
|
||||
+104
-36
@@ -27,7 +27,8 @@
|
||||
return
|
||||
|
||||
/proc/Get_Angle(atom/movable/start,atom/movable/end)//For beams.
|
||||
if(!start || !end) return 0
|
||||
if(!start || !end)
|
||||
return 0
|
||||
var/dy
|
||||
var/dx
|
||||
dy=(32*end.y+end.pixel_y)-(32*start.y+start.pixel_y)
|
||||
@@ -117,18 +118,25 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
||||
|
||||
//Now to find a box from center location and make that our destination.
|
||||
for(var/turf/T in block(locate(center.x+b1xerror,center.y+b1yerror,location.z), locate(center.x+b2xerror,center.y+b2yerror,location.z) ))
|
||||
if(density&&T.density) continue//If density was specified.
|
||||
if(T.x>world.maxx || T.x<1) continue//Don't want them to teleport off the map.
|
||||
if(T.y>world.maxy || T.y<1) continue
|
||||
if(density&&T.density)
|
||||
continue//If density was specified.
|
||||
if(T.x>world.maxx || T.x<1)
|
||||
continue//Don't want them to teleport off the map.
|
||||
if(T.y>world.maxy || T.y<1)
|
||||
continue
|
||||
destination_list += T
|
||||
if(destination_list.len)
|
||||
destination = pick(destination_list)
|
||||
else return
|
||||
else
|
||||
return
|
||||
|
||||
else//Same deal here.
|
||||
if(density&&destination.density) return
|
||||
if(destination.x>world.maxx || destination.x<1) return
|
||||
if(destination.y>world.maxy || destination.y<1) return
|
||||
if(density&&destination.density)
|
||||
return
|
||||
if(destination.x>world.maxx || destination.x<1)
|
||||
return
|
||||
if(destination.y>world.maxy || destination.y<1)
|
||||
return
|
||||
else return
|
||||
|
||||
return destination
|
||||
@@ -257,15 +265,19 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
||||
/proc/select_active_free_borg(mob/user)
|
||||
var/list/borgs = active_free_borgs()
|
||||
if(borgs.len)
|
||||
if(user) . = input(user,"Unshackled cyborg signals detected:", "Cyborg Selection", borgs[1]) in borgs
|
||||
else . = pick(borgs)
|
||||
if(user)
|
||||
. = input(user,"Unshackled cyborg signals detected:", "Cyborg Selection", borgs[1]) in borgs
|
||||
else
|
||||
. = pick(borgs)
|
||||
return .
|
||||
|
||||
/proc/select_active_ai(mob/user)
|
||||
var/list/ais = active_ais()
|
||||
if(ais.len)
|
||||
if(user) . = input(user,"AI signals detected:", "AI Selection", ais[1]) in ais
|
||||
else . = pick(ais)
|
||||
if(user)
|
||||
. = input(user,"AI signals detected:", "AI Selection", ais[1]) in ais
|
||||
else
|
||||
. = pick(ais)
|
||||
return .
|
||||
|
||||
//Returns a list of all items of interest with their name
|
||||
@@ -361,7 +373,8 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
||||
var/key
|
||||
var/ckey
|
||||
|
||||
if(!whom) return "*null*"
|
||||
if(!whom)
|
||||
return "*null*"
|
||||
if(istype(whom, /client))
|
||||
C = whom
|
||||
M = C.mob
|
||||
@@ -524,10 +537,13 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
||||
if(current != target_turf)
|
||||
current = get_step_towards(current, target_turf)
|
||||
while(current != target_turf)
|
||||
if(steps > length) return 0
|
||||
if(current.opacity) return 0
|
||||
if(steps > length)
|
||||
return 0
|
||||
if(current.opacity)
|
||||
return 0
|
||||
for(var/atom/A in current)
|
||||
if(A.opacity) return 0
|
||||
if(A.opacity)
|
||||
return 0
|
||||
current = get_step_towards(current, target_turf)
|
||||
steps++
|
||||
|
||||
@@ -574,16 +590,21 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
||||
turf_last2 = get_step(turf_last2,dir_alt2)
|
||||
breakpoint++
|
||||
|
||||
if(!free_tile) return get_step(ref, base_dir)
|
||||
else return get_step_towards(ref,free_tile)
|
||||
if(!free_tile)
|
||||
return get_step(ref, base_dir)
|
||||
else
|
||||
return get_step_towards(ref,free_tile)
|
||||
|
||||
else return get_step(ref, base_dir)
|
||||
else
|
||||
return get_step(ref, base_dir)
|
||||
|
||||
//Takes: Anything that could possibly have variables and a varname to check.
|
||||
//Returns: 1 if found, 0 if not.
|
||||
/proc/hasvar(datum/A, varname)
|
||||
if(A.vars.Find(lowertext(varname))) return 1
|
||||
else return 0
|
||||
if(A.vars.Find(lowertext(varname)))
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
//Repopulates sortedAreas list
|
||||
/proc/SortAreas()
|
||||
@@ -601,15 +622,18 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
||||
//Takes: Area type as text string or as typepath OR an instance of the area.
|
||||
//Returns: A list of all areas of that type in the world.
|
||||
/proc/get_areas(areatype)
|
||||
if(!areatype) return null
|
||||
if(istext(areatype)) areatype = text2path(areatype)
|
||||
if(!areatype)
|
||||
return null
|
||||
if(istext(areatype))
|
||||
areatype = text2path(areatype)
|
||||
if(isarea(areatype))
|
||||
var/area/areatemp = areatype
|
||||
areatype = areatemp.type
|
||||
|
||||
var/list/areas = new/list()
|
||||
for(var/area/N in world)
|
||||
if(istype(N, areatype)) areas += N
|
||||
if(istype(N, areatype))
|
||||
areas += N
|
||||
return areas
|
||||
|
||||
//Takes: Area type as text string or as typepath OR an instance of the area.
|
||||
@@ -617,7 +641,8 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
||||
/proc/get_area_turfs(areatype, target_z = 0)
|
||||
if(!areatype)
|
||||
return null
|
||||
if(istext(areatype)) areatype = text2path(areatype)
|
||||
if(istext(areatype))
|
||||
areatype = text2path(areatype)
|
||||
if(isarea(areatype))
|
||||
var/area/areatemp = areatype
|
||||
areatype = areatemp.type
|
||||
@@ -633,8 +658,10 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
||||
//Takes: Area type as text string or as typepath OR an instance of the area.
|
||||
//Returns: A list of all atoms (objs, turfs, mobs) in areas of that type of that type in the world.
|
||||
/proc/get_area_all_atoms(areatype)
|
||||
if(!areatype) return null
|
||||
if(istext(areatype)) areatype = text2path(areatype)
|
||||
if(!areatype)
|
||||
return null
|
||||
if(istext(areatype))
|
||||
areatype = text2path(areatype)
|
||||
if(isarea(areatype))
|
||||
var/area/areatemp = areatype
|
||||
areatype = areatemp.type
|
||||
@@ -672,15 +699,24 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
||||
return
|
||||
|
||||
/proc/parse_zone(zone)
|
||||
if(zone == "r_hand") return "right hand"
|
||||
else if (zone == "l_hand") return "left hand"
|
||||
else if (zone == "l_arm") return "left arm"
|
||||
else if (zone == "r_arm") return "right arm"
|
||||
else if (zone == "l_leg") return "left leg"
|
||||
else if (zone == "r_leg") return "right leg"
|
||||
else if (zone == "l_foot") return "left foot"
|
||||
else if (zone == "r_foot") return "right foot"
|
||||
else return zone
|
||||
if(zone == "r_hand")
|
||||
return "right hand"
|
||||
else if (zone == "l_hand")
|
||||
return "left hand"
|
||||
else if (zone == "l_arm")
|
||||
return "left arm"
|
||||
else if (zone == "r_arm")
|
||||
return "right arm"
|
||||
else if (zone == "l_leg")
|
||||
return "left leg"
|
||||
else if (zone == "r_leg")
|
||||
return "right leg"
|
||||
else if (zone == "l_foot")
|
||||
return "left foot"
|
||||
else if (zone == "r_foot")
|
||||
return "right foot"
|
||||
else
|
||||
return zone
|
||||
|
||||
|
||||
//Gets the turf this atom inhabits
|
||||
@@ -1146,3 +1182,35 @@ B --><-- A
|
||||
for(var/atom/location = A.loc, location, location = location.loc)
|
||||
if(location == src)
|
||||
return 1
|
||||
|
||||
proc/add_to_proximity_list(atom/A, range)
|
||||
var/turf/T = get_turf(A)
|
||||
var/list/L = block(locate(T.x - range, T.y - range, T.z), locate(T.x + range, T.y + range, T.z))
|
||||
for(var/B in L)
|
||||
var/turf/C = B
|
||||
C.proximity_checkers |= A
|
||||
return L
|
||||
|
||||
proc/remove_from_proximity_list(atom/A, range)
|
||||
var/turf/T = get_turf(A)
|
||||
var/list/L = block(locate(T.x - range, T.y - range, T.z), locate(T.x + range, T.y + range, T.z))
|
||||
for(var/B in L)
|
||||
var/turf/C = B
|
||||
C.proximity_checkers.Remove(A)
|
||||
|
||||
proc/shift_proximity(atom/checker, atom/A, range, atom/B, newrange)
|
||||
var/turf/T = get_turf(A)
|
||||
var/turf/Q = get_turf(B)
|
||||
if(T == Q && range == newrange)
|
||||
return 0
|
||||
var/list/L = block(locate(T.x - range, T.y - range, T.z), locate(T.x + range, T.y + range, T.z))
|
||||
var/list/M = block(locate(Q.x - newrange, Q.y - newrange, Q.z), locate(Q.x + newrange, Q.y + newrange, Q.z))
|
||||
var/list/N = L - M
|
||||
var/list/O = M - L
|
||||
for(var/C in N)
|
||||
var/turf/D = C
|
||||
D.proximity_checkers.Remove(checker)
|
||||
for(var/E in O)
|
||||
var/turf/F = E
|
||||
F.proximity_checkers |= checker
|
||||
return 1
|
||||
|
||||
+18
-9
@@ -302,22 +302,31 @@
|
||||
|
||||
// Simple helper to face what you clicked on, in case it should be needed in more than one place
|
||||
/mob/proc/face_atom(atom/A)
|
||||
if( buckled || stat != CONSCIOUS || !A || !x || !y || !A.x || !A.y ) return
|
||||
if( buckled || stat != CONSCIOUS || !A || !x || !y || !A.x || !A.y )
|
||||
return
|
||||
var/dx = A.x - x
|
||||
var/dy = A.y - y
|
||||
if(!dx && !dy) // Wall items are graphically shifted but on the floor
|
||||
if(A.pixel_y > 16) dir = NORTH
|
||||
else if(A.pixel_y < -16)dir = SOUTH
|
||||
else if(A.pixel_x > 16) dir = EAST
|
||||
else if(A.pixel_x < -16)dir = WEST
|
||||
if(A.pixel_y > 16)
|
||||
dir = NORTH
|
||||
else if(A.pixel_y < -16)
|
||||
dir = SOUTH
|
||||
else if(A.pixel_x > 16)
|
||||
dir = EAST
|
||||
else if(A.pixel_x < -16)
|
||||
dir = WEST
|
||||
return
|
||||
|
||||
if(abs(dx) < abs(dy))
|
||||
if(dy > 0) dir = NORTH
|
||||
else dir = SOUTH
|
||||
if(dy > 0)
|
||||
dir = NORTH
|
||||
else
|
||||
dir = SOUTH
|
||||
else
|
||||
if(dx > 0) dir = EAST
|
||||
else dir = WEST
|
||||
if(dx > 0)
|
||||
dir = EAST
|
||||
else
|
||||
dir = WEST
|
||||
|
||||
/obj/screen/click_catcher
|
||||
icon = 'icons/mob/screen_full.dmi'
|
||||
|
||||
+100
-28
@@ -125,6 +125,50 @@ var/datum/global_hud/global_hud = new()
|
||||
instantiate()
|
||||
..()
|
||||
|
||||
/datum/hud/Destroy()
|
||||
if(mymob.hud_used == src)
|
||||
mymob.hud_used = null
|
||||
qdel(lingchemdisplay)
|
||||
lingchemdisplay = null
|
||||
qdel(lingstingdisplay)
|
||||
lingstingdisplay = null
|
||||
qdel(blobpwrdisplay)
|
||||
blobpwrdisplay = null
|
||||
qdel(blobhealthdisplay)
|
||||
blobhealthdisplay = null
|
||||
qdel(alien_plasma_display)
|
||||
alien_plasma_display = null
|
||||
qdel(deity_health_display)
|
||||
deity_health_display = null
|
||||
qdel(deity_power_display)
|
||||
deity_power_display = null
|
||||
qdel(deity_follower_display)
|
||||
deity_follower_display = null
|
||||
qdel(nightvisionicon)
|
||||
nightvisionicon = null
|
||||
qdel(r_hand_hud_object)
|
||||
r_hand_hud_object = null
|
||||
qdel(l_hand_hud_object)
|
||||
l_hand_hud_object = null
|
||||
qdel(action_intent)
|
||||
action_intent = null
|
||||
qdel(move_intent)
|
||||
move_intent = null
|
||||
qdel(hotkeybuttons)
|
||||
hotkeybuttons = null
|
||||
qdel(hide_actions_toggle)
|
||||
hide_actions_toggle = null
|
||||
if(adding)
|
||||
for(var/thing in adding)
|
||||
qdel(thing)
|
||||
adding.Cut()
|
||||
if(other)
|
||||
for(var/thing in other)
|
||||
qdel(thing)
|
||||
other.Cut()
|
||||
mymob = null
|
||||
return ..()
|
||||
|
||||
|
||||
/datum/hud/proc/hidden_inventory_update()
|
||||
if(!mymob)
|
||||
@@ -135,23 +179,39 @@ var/datum/global_hud/global_hud = new()
|
||||
if(H.handcuffed)
|
||||
H.handcuffed.screen_loc = null //no handcuffs in my UI!
|
||||
if(inventory_shown && hud_shown)
|
||||
if(H.shoes) H.shoes.screen_loc = ui_shoes
|
||||
if(H.gloves) H.gloves.screen_loc = ui_gloves
|
||||
if(H.ears) H.ears.screen_loc = ui_ears
|
||||
if(H.glasses) H.glasses.screen_loc = ui_glasses
|
||||
if(H.w_uniform) H.w_uniform.screen_loc = ui_iclothing
|
||||
if(H.wear_suit) H.wear_suit.screen_loc = ui_oclothing
|
||||
if(H.wear_mask) H.wear_mask.screen_loc = ui_mask
|
||||
if(H.head) H.head.screen_loc = ui_head
|
||||
if(H.shoes)
|
||||
H.shoes.screen_loc = ui_shoes
|
||||
if(H.gloves)
|
||||
H.gloves.screen_loc = ui_gloves
|
||||
if(H.ears)
|
||||
H.ears.screen_loc = ui_ears
|
||||
if(H.glasses)
|
||||
H.glasses.screen_loc = ui_glasses
|
||||
if(H.w_uniform)
|
||||
H.w_uniform.screen_loc = ui_iclothing
|
||||
if(H.wear_suit)
|
||||
H.wear_suit.screen_loc = ui_oclothing
|
||||
if(H.wear_mask)
|
||||
H.wear_mask.screen_loc = ui_mask
|
||||
if(H.head)
|
||||
H.head.screen_loc = ui_head
|
||||
else
|
||||
if(H.shoes) H.shoes.screen_loc = null
|
||||
if(H.gloves) H.gloves.screen_loc = null
|
||||
if(H.ears) H.ears.screen_loc = null
|
||||
if(H.glasses) H.glasses.screen_loc = null
|
||||
if(H.w_uniform) H.w_uniform.screen_loc = null
|
||||
if(H.wear_suit) H.wear_suit.screen_loc = null
|
||||
if(H.wear_mask) H.wear_mask.screen_loc = null
|
||||
if(H.head) H.head.screen_loc = null
|
||||
if(H.shoes)
|
||||
H.shoes.screen_loc = null
|
||||
if(H.gloves)
|
||||
H.gloves.screen_loc = null
|
||||
if(H.ears)
|
||||
H.ears.screen_loc = null
|
||||
if(H.glasses)
|
||||
H.glasses.screen_loc = null
|
||||
if(H.w_uniform)
|
||||
H.w_uniform.screen_loc = null
|
||||
if(H.wear_suit)
|
||||
H.wear_suit.screen_loc = null
|
||||
if(H.wear_mask)
|
||||
H.wear_mask.screen_loc = null
|
||||
if(H.head)
|
||||
H.head.screen_loc = null
|
||||
|
||||
|
||||
/datum/hud/proc/persistant_inventory_update()
|
||||
@@ -161,19 +221,31 @@ var/datum/global_hud/global_hud = new()
|
||||
if(ishuman(mymob))
|
||||
var/mob/living/carbon/human/H = mymob
|
||||
if(hud_shown)
|
||||
if(H.s_store) H.s_store.screen_loc = ui_sstore1
|
||||
if(H.wear_id) H.wear_id.screen_loc = ui_id
|
||||
if(H.belt) H.belt.screen_loc = ui_belt
|
||||
if(H.back) H.back.screen_loc = ui_back
|
||||
if(H.l_store) H.l_store.screen_loc = ui_storage1
|
||||
if(H.r_store) H.r_store.screen_loc = ui_storage2
|
||||
if(H.s_store)
|
||||
H.s_store.screen_loc = ui_sstore1
|
||||
if(H.wear_id)
|
||||
H.wear_id.screen_loc = ui_id
|
||||
if(H.belt)
|
||||
H.belt.screen_loc = ui_belt
|
||||
if(H.back)
|
||||
H.back.screen_loc = ui_back
|
||||
if(H.l_store)
|
||||
H.l_store.screen_loc = ui_storage1
|
||||
if(H.r_store)
|
||||
H.r_store.screen_loc = ui_storage2
|
||||
else
|
||||
if(H.s_store) H.s_store.screen_loc = null
|
||||
if(H.wear_id) H.wear_id.screen_loc = null
|
||||
if(H.belt) H.belt.screen_loc = null
|
||||
if(H.back) H.back.screen_loc = null
|
||||
if(H.l_store) H.l_store.screen_loc = null
|
||||
if(H.r_store) H.r_store.screen_loc = null
|
||||
if(H.s_store)
|
||||
H.s_store.screen_loc = null
|
||||
if(H.wear_id)
|
||||
H.wear_id.screen_loc = null
|
||||
if(H.belt)
|
||||
H.belt.screen_loc = null
|
||||
if(H.back)
|
||||
H.back.screen_loc = null
|
||||
if(H.l_store)
|
||||
H.l_store.screen_loc = null
|
||||
if(H.r_store)
|
||||
H.r_store.screen_loc = null
|
||||
|
||||
|
||||
/datum/hud/proc/instantiate()
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
/mob/living/attackby(obj/item/I, mob/user, params)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
if(butcher_results && stat == DEAD) //can we butcher it?
|
||||
if(user.a_intent == "harm" && stat == DEAD && butcher_results) //can we butcher it?
|
||||
var/sharpness = I.is_sharp()
|
||||
if(sharpness)
|
||||
user << "<span class='notice'>You begin to butcher [src]...</span>"
|
||||
|
||||
@@ -18,7 +18,8 @@
|
||||
for(var/datum/mutation/human/HM in dna.mutations)
|
||||
override += HM.on_attack_hand(src, A)
|
||||
|
||||
if(override) return
|
||||
if(override)
|
||||
return
|
||||
|
||||
A.attack_hand(src)
|
||||
|
||||
@@ -82,7 +83,8 @@
|
||||
/mob/living/carbon/monkey/RestrainedClickOn(atom/A)
|
||||
if(..())
|
||||
return
|
||||
if(a_intent != "harm" || !ismob(A)) return
|
||||
if(a_intent != "harm" || !ismob(A))
|
||||
return
|
||||
if(is_muzzled())
|
||||
return
|
||||
var/mob/living/carbon/ML = A
|
||||
@@ -95,7 +97,8 @@
|
||||
ML.apply_damage(rand(1,3), BRUTE, affecting, armor)
|
||||
ML.visible_message("<span class='danger'>[name] bites [ML]!</span>", \
|
||||
"<span class='userdanger'>[name] bites [ML]!</span>")
|
||||
if(armor >= 2) return
|
||||
if(armor >= 2)
|
||||
return
|
||||
for(var/datum/disease/D in viruses)
|
||||
ML.ForceContractDisease(D)
|
||||
else
|
||||
|
||||
@@ -11,7 +11,8 @@ var/const/tk_maxrange = 15
|
||||
By default, emulate the user's unarmed attack
|
||||
*/
|
||||
/atom/proc/attack_tk(mob/user)
|
||||
if(user.stat) return
|
||||
if(user.stat)
|
||||
return
|
||||
user.UnarmedAttack(src,0) // attack_hand, attack_paw, etc
|
||||
return
|
||||
|
||||
@@ -29,7 +30,8 @@ var/const/tk_maxrange = 15
|
||||
attack_self(user)
|
||||
|
||||
/obj/attack_tk(mob/user)
|
||||
if(user.stat) return
|
||||
if(user.stat)
|
||||
return
|
||||
if(anchored)
|
||||
..()
|
||||
return
|
||||
@@ -41,7 +43,8 @@ var/const/tk_maxrange = 15
|
||||
return
|
||||
|
||||
/obj/item/attack_tk(mob/user)
|
||||
if(user.stat) return
|
||||
if(user.stat)
|
||||
return
|
||||
var/obj/item/tk_grab/O = new(src)
|
||||
user.put_in_active_hand(O)
|
||||
O.host = user
|
||||
@@ -86,7 +89,8 @@ var/const/tk_maxrange = 15
|
||||
|
||||
//stops TK grabs being equipped anywhere but into hands
|
||||
/obj/item/tk_grab/equipped(mob/user, slot)
|
||||
if( (slot == slot_l_hand) || (slot== slot_r_hand) ) return
|
||||
if( (slot == slot_l_hand) || (slot== slot_r_hand) )
|
||||
return
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
@@ -96,8 +100,10 @@ var/const/tk_maxrange = 15
|
||||
focus.attack_self_tk(user)
|
||||
|
||||
/obj/item/tk_grab/afterattack(atom/target, mob/living/carbon/user, proximity, params)//TODO: go over this
|
||||
if(!target || !user) return
|
||||
if(last_throw+3 > world.time) return
|
||||
if(!target || !user)
|
||||
return
|
||||
if(last_throw+3 > world.time)
|
||||
return
|
||||
if(!host || host != user)
|
||||
qdel(src)
|
||||
return
|
||||
@@ -148,7 +154,8 @@ var/const/tk_maxrange = 15
|
||||
|
||||
|
||||
/obj/item/tk_grab/proc/focus_object(obj/target, mob/living/user)
|
||||
if(!istype(target,/obj)) return//Cant throw non objects atm might let it do mobs later
|
||||
if(!istype(target,/obj))
|
||||
return//Cant throw non objects atm might let it do mobs later
|
||||
if(target.anchored || !isturf(target.loc))
|
||||
qdel(src)
|
||||
return
|
||||
@@ -159,7 +166,8 @@ var/const/tk_maxrange = 15
|
||||
|
||||
|
||||
/obj/item/tk_grab/proc/apply_focus_overlay()
|
||||
if(!focus) return
|
||||
if(!focus)
|
||||
return
|
||||
var/obj/effect/overlay/O = new /obj/effect/overlay(locate(focus.x,focus.y,focus.z))
|
||||
O.name = "sparkles"
|
||||
O.anchored = 1
|
||||
@@ -187,12 +195,15 @@ var/const/tk_maxrange = 15
|
||||
/obj/item/tk_grab/proc/check_path()
|
||||
var/turf/ref = get_turf(src.loc)
|
||||
var/turf/target = get_turf(focus.loc)
|
||||
if(!ref || !target) return 0
|
||||
if(!ref || !target)
|
||||
return 0
|
||||
var/distance = get_dist(ref, target)
|
||||
if(distance >= 10) return 0
|
||||
if(distance >= 10)
|
||||
return 0
|
||||
for(var/i = 1 to distance)
|
||||
ref = get_step_to(ref, target, 0)
|
||||
if(ref != target) return 0
|
||||
if(ref != target)
|
||||
return 0
|
||||
return 1
|
||||
*/
|
||||
|
||||
@@ -200,7 +211,8 @@ var/const/tk_maxrange = 15
|
||||
/*
|
||||
if(istype(user, /mob/living/carbon))
|
||||
if(user:mutations & TK && get_dist(source, user) <= 7)
|
||||
if(user:get_active_hand()) return 0
|
||||
if(user:get_active_hand())
|
||||
return 0
|
||||
var/X = source:x
|
||||
var/Y = source:y
|
||||
var/Z = source:z
|
||||
|
||||
@@ -211,7 +211,8 @@
|
||||
var/list/Lines = file2list(filename)
|
||||
|
||||
for(var/t in Lines)
|
||||
if(!t) continue
|
||||
if(!t)
|
||||
continue
|
||||
|
||||
t = trim(t)
|
||||
if(length(t) == 0)
|
||||
@@ -576,7 +577,8 @@
|
||||
|
||||
var/datum/votablemap/currentmap = null
|
||||
for(var/t in Lines)
|
||||
if(!t) continue
|
||||
if(!t)
|
||||
continue
|
||||
|
||||
t = trim(t)
|
||||
if(length(t) == 0)
|
||||
@@ -625,7 +627,8 @@
|
||||
/datum/configuration/proc/loadsql(filename)
|
||||
var/list/Lines = file2list(filename)
|
||||
for(var/t in Lines)
|
||||
if(!t) continue
|
||||
if(!t)
|
||||
continue
|
||||
|
||||
t = trim(t)
|
||||
if(length(t) == 0)
|
||||
|
||||
@@ -62,12 +62,17 @@ var/datum/subsystem/events/SSevent
|
||||
|
||||
var/sum_of_weights = 0
|
||||
for(var/datum/round_event_control/E in control)
|
||||
if(E.occurrences >= E.max_occurrences) continue
|
||||
if(E.earliest_start >= world.time) continue
|
||||
if(E.gamemode_blacklist.len && (ticker.mode.config_tag in E.gamemode_blacklist)) continue
|
||||
if(E.gamemode_whitelist.len && !(ticker.mode.config_tag in E.gamemode_whitelist)) continue
|
||||
if(E.occurrences >= E.max_occurrences)
|
||||
continue
|
||||
if(E.earliest_start >= world.time)
|
||||
continue
|
||||
if(E.gamemode_blacklist.len && (ticker.mode.config_tag in E.gamemode_blacklist))
|
||||
continue
|
||||
if(E.gamemode_whitelist.len && !(ticker.mode.config_tag in E.gamemode_whitelist))
|
||||
continue
|
||||
if(E.holidayID)
|
||||
if(!holidays || !holidays[E.holidayID]) continue
|
||||
if(!holidays || !holidays[E.holidayID])
|
||||
continue
|
||||
if(E.weight < 0) //for round-start events etc.
|
||||
if(E.runEvent() == PROCESS_KILL)
|
||||
E.max_occurrences = 0
|
||||
@@ -81,12 +86,17 @@ var/datum/subsystem/events/SSevent
|
||||
sum_of_weights = rand(0,sum_of_weights) //reusing this variable. It now represents the 'weight' we want to select
|
||||
|
||||
for(var/datum/round_event_control/E in control)
|
||||
if(E.occurrences >= E.max_occurrences) continue
|
||||
if(E.earliest_start >= world.time) continue
|
||||
if(E.gamemode_blacklist.len && (ticker.mode.config_tag in E.gamemode_blacklist)) continue
|
||||
if(E.gamemode_whitelist.len && !(ticker.mode.config_tag in E.gamemode_whitelist)) continue
|
||||
if(E.occurrences >= E.max_occurrences)
|
||||
continue
|
||||
if(E.earliest_start >= world.time)
|
||||
continue
|
||||
if(E.gamemode_blacklist.len && (ticker.mode.config_tag in E.gamemode_blacklist))
|
||||
continue
|
||||
if(E.gamemode_whitelist.len && !(ticker.mode.config_tag in E.gamemode_whitelist))
|
||||
continue
|
||||
if(E.holidayID)
|
||||
if(!holidays || !holidays[E.holidayID]) continue
|
||||
if(!holidays || !holidays[E.holidayID])
|
||||
continue
|
||||
sum_of_weights -= E.weight
|
||||
|
||||
if(sum_of_weights <= 0) //we've hit our goal
|
||||
@@ -172,7 +182,8 @@ var/datum/subsystem/events/SSevent
|
||||
|
||||
//sets up the holidays and holidays list
|
||||
/datum/subsystem/events/proc/getHoliday()
|
||||
if(!config.allow_holidays) return // Holiday stuff was not enabled in the config!
|
||||
if(!config.allow_holidays)
|
||||
return // Holiday stuff was not enabled in the config!
|
||||
|
||||
var/YY = text2num(time2text(world.timeofday, "YY")) // get the current year
|
||||
var/MM = text2num(time2text(world.timeofday, "MM")) // get the current month
|
||||
|
||||
@@ -31,34 +31,44 @@ var/datum/subsystem/job/SSjob
|
||||
|
||||
for(var/J in all_jobs)
|
||||
var/datum/job/job = new J()
|
||||
if(!job) continue
|
||||
if(job.faction != faction) continue
|
||||
if(!job.config_check()) continue
|
||||
if(!job)
|
||||
continue
|
||||
if(job.faction != faction)
|
||||
continue
|
||||
if(!job.config_check())
|
||||
continue
|
||||
occupations += job
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
/datum/subsystem/job/proc/Debug(text)
|
||||
if(!Debug2) return 0
|
||||
if(!Debug2)
|
||||
return 0
|
||||
job_debug.Add(text)
|
||||
return 1
|
||||
|
||||
|
||||
/datum/subsystem/job/proc/GetJob(rank)
|
||||
if(!rank) return null
|
||||
if(!rank)
|
||||
return null
|
||||
for(var/datum/job/J in occupations)
|
||||
if(!J) continue
|
||||
if(J.title == rank) return J
|
||||
if(!J)
|
||||
continue
|
||||
if(J.title == rank)
|
||||
return J
|
||||
return null
|
||||
|
||||
/datum/subsystem/job/proc/AssignRole(mob/new_player/player, rank, latejoin=0)
|
||||
Debug("Running AR, Player: [player], Rank: [rank], LJ: [latejoin]")
|
||||
if(player && player.mind && rank)
|
||||
var/datum/job/job = GetJob(rank)
|
||||
if(!job) return 0
|
||||
if(jobban_isbanned(player, rank)) return 0
|
||||
if(!job.player_old_enough(player.client)) return 0
|
||||
if(!job)
|
||||
return 0
|
||||
if(jobban_isbanned(player, rank))
|
||||
return 0
|
||||
if(!job.player_old_enough(player.client))
|
||||
return 0
|
||||
var/position_limit = job.total_positions
|
||||
if(!latejoin)
|
||||
position_limit = job.spawn_positions
|
||||
@@ -147,10 +157,13 @@ var/datum/subsystem/job/SSjob
|
||||
for(var/level = 1 to 3)
|
||||
for(var/command_position in command_positions)
|
||||
var/datum/job/job = GetJob(command_position)
|
||||
if(!job) continue
|
||||
if((job.current_positions >= job.total_positions) && job.total_positions != -1) continue
|
||||
if(!job)
|
||||
continue
|
||||
if((job.current_positions >= job.total_positions) && job.total_positions != -1)
|
||||
continue
|
||||
var/list/candidates = FindOccupationCandidates(job, level)
|
||||
if(!candidates.len) continue
|
||||
if(!candidates.len)
|
||||
continue
|
||||
var/mob/new_player/candidate = pick(candidates)
|
||||
if(AssignRole(candidate, command_position))
|
||||
return 1
|
||||
@@ -162,10 +175,13 @@ var/datum/subsystem/job/SSjob
|
||||
/datum/subsystem/job/proc/CheckHeadPositions(level)
|
||||
for(var/command_position in command_positions)
|
||||
var/datum/job/job = GetJob(command_position)
|
||||
if(!job) continue
|
||||
if((job.current_positions >= job.total_positions) && job.total_positions != -1) continue
|
||||
if(!job)
|
||||
continue
|
||||
if((job.current_positions >= job.total_positions) && job.total_positions != -1)
|
||||
continue
|
||||
var/list/candidates = FindOccupationCandidates(job, level)
|
||||
if(!candidates.len) continue
|
||||
if(!candidates.len)
|
||||
continue
|
||||
var/mob/new_player/candidate = pick(candidates)
|
||||
AssignRole(candidate, command_position)
|
||||
return
|
||||
@@ -212,7 +228,8 @@ var/datum/subsystem/job/SSjob
|
||||
initial_players_to_assign = unassigned.len
|
||||
|
||||
Debug("DO, Len: [unassigned.len]")
|
||||
if(unassigned.len == 0) return 0
|
||||
if(unassigned.len == 0)
|
||||
return 0
|
||||
|
||||
//Scale number of open security officer slots to population
|
||||
setup_officer_positions()
|
||||
|
||||
@@ -109,7 +109,8 @@ var/datum/subsystem/lighting/SSlighting
|
||||
var/msg = "## DEBUG: [time2text(world.timeofday)] [name] subsystem restarted. Reports:\n"
|
||||
for(var/varname in SSlighting.vars)
|
||||
switch(varname)
|
||||
if("tag","bestF","type","parent_type","vars") continue
|
||||
if("tag","bestF","type","parent_type","vars")
|
||||
continue
|
||||
else
|
||||
var/varval1 = SSlighting.vars[varname]
|
||||
var/varval2 = vars[varname]
|
||||
|
||||
@@ -23,6 +23,7 @@ var/datum/subsystem/minimap/SSminimap
|
||||
for(var/z in z_levels)
|
||||
generate(z)
|
||||
register_asset("minimap_[z].png", fcopy_rsc(map_path(z)))
|
||||
fdel(hash_path())
|
||||
text2file(hash, hash_path())
|
||||
..()
|
||||
|
||||
@@ -42,8 +43,10 @@ var/datum/subsystem/minimap/SSminimap
|
||||
// Scale it up to our target size.
|
||||
minimap.Scale(MINIMAP_SIZE, MINIMAP_SIZE)
|
||||
var/list/obj_icons = list()
|
||||
var/counter = 255
|
||||
// Loop over turfs and generate icons.
|
||||
for(var/T in block(locate(x1, y1, z), locate(x2, y2, z)))
|
||||
|
||||
var/turf/tile = T
|
||||
var/icon/tile_icon
|
||||
var/obj/obj
|
||||
@@ -85,6 +88,15 @@ var/datum/subsystem/minimap/SSminimap
|
||||
tile_icon.Scale(TILE_SIZE, TILE_SIZE)
|
||||
// Add the tile to the minimap.
|
||||
minimap.Blend(tile_icon, ICON_OVERLAY, ((tile.x - 1) * TILE_SIZE), ((tile.y - 1) * TILE_SIZE))
|
||||
|
||||
//byond bug, this fixes OOM crashes by flattening and reseting the minimap icon holder every 255 tiles
|
||||
counter--
|
||||
if (counter <= 0)
|
||||
counter = 255
|
||||
var/icon/flatten = new /icon()
|
||||
flatten.Insert(minimap, "", SOUTH, 1, 0)
|
||||
del(minimap)
|
||||
minimap = flatten
|
||||
|
||||
// Create a new icon and insert the generated minimap, so that BYOND doesn't generate different directions.
|
||||
var/icon/final = new /icon()
|
||||
|
||||
@@ -198,11 +198,13 @@ var/datum/subsystem/pai/SSpai
|
||||
|
||||
/datum/subsystem/pai/proc/question(client/C)
|
||||
spawn(0)
|
||||
if(!C) return
|
||||
if(!C)
|
||||
return
|
||||
asked.Add(C.key)
|
||||
asked[C.key] = world.time
|
||||
var/response = tgalert(C, "Someone is requesting a pAI personality. Would you like to play as a personal AI?", "pAI Request", "Yes", "No", "Never for this round", StealFocus=0, Timeout=askDelay)
|
||||
if(!C) return //handle logouts that happen whilst the alert is waiting for a response.
|
||||
if(!C)
|
||||
return //handle logouts that happen whilst the alert is waiting for a response.
|
||||
if(response == "Yes")
|
||||
recruitWindow(C.mob)
|
||||
else if (response == "Never for this round")
|
||||
|
||||
@@ -277,7 +277,8 @@ var/datum/subsystem/shuttle/SSshuttle
|
||||
contains = object.contains
|
||||
|
||||
for(var/typepath in contains)
|
||||
if(!typepath) continue
|
||||
if(!typepath)
|
||||
continue
|
||||
var/atom/A = new typepath(Crate)
|
||||
if(object.amount && A.vars.Find("amount") && A:amount)
|
||||
A:amount = object.amount
|
||||
|
||||
@@ -72,7 +72,8 @@
|
||||
/*
|
||||
/obj/docking_port/mobile/emergency/findTransitDock()
|
||||
. = SSshuttle.getDock("emergency_transit")
|
||||
if(.) return .
|
||||
if(.)
|
||||
return .
|
||||
return ..()
|
||||
*/
|
||||
|
||||
|
||||
@@ -32,7 +32,8 @@
|
||||
|
||||
/obj/docking_port/mobile/supply/dock()
|
||||
. = ..()
|
||||
if(.) return .
|
||||
if(.)
|
||||
return .
|
||||
|
||||
buy()
|
||||
sell()
|
||||
@@ -46,11 +47,13 @@
|
||||
|
||||
var/list/emptyTurfs = list()
|
||||
for(var/turf/simulated/floor/T in areaInstance)
|
||||
if(T.density || T.contents.len) continue
|
||||
if(T.density || T.contents.len)
|
||||
continue
|
||||
emptyTurfs += T
|
||||
|
||||
for(var/datum/supply_order/SO in SSshuttle.shoppinglist)
|
||||
if(!SO.object) continue
|
||||
if(!SO.object)
|
||||
continue
|
||||
|
||||
var/turf/T = pick_n_take(emptyTurfs) //turf we will place it in
|
||||
if(!T)
|
||||
@@ -81,7 +84,8 @@
|
||||
var/pointsEarned
|
||||
|
||||
for(var/atom/movable/MA in areaInstance)
|
||||
if(MA.anchored) continue
|
||||
if(MA.anchored)
|
||||
continue
|
||||
SSshuttle.sold_atoms += " [MA.name]"
|
||||
|
||||
// Must be in a crate (or a critter crate)!
|
||||
@@ -147,7 +151,8 @@
|
||||
// Sell tech levels
|
||||
if(istype(thing, /obj/item/weapon/disk/tech_disk))
|
||||
var/obj/item/weapon/disk/tech_disk/disk = thing
|
||||
if(!disk.stored) continue
|
||||
if(!disk.stored)
|
||||
continue
|
||||
var/datum/tech/tech = disk.stored
|
||||
|
||||
var/cost = tech.getCost(SSshuttle.techLevels[tech.id])
|
||||
@@ -159,9 +164,11 @@
|
||||
// Sell max reliablity designs
|
||||
if(istype(thing, /obj/item/weapon/disk/design_disk))
|
||||
var/obj/item/weapon/disk/design_disk/disk = thing
|
||||
if(!disk.blueprint) continue
|
||||
if(!disk.blueprint)
|
||||
continue
|
||||
var/datum/design/design = disk.blueprint
|
||||
if(design.id in SSshuttle.researchDesigns) continue
|
||||
if(design.id in SSshuttle.researchDesigns)
|
||||
continue
|
||||
|
||||
if(initial(design.reliability) < 100 && design.reliability >= 100)
|
||||
// Maxed out reliability designs only.
|
||||
@@ -285,7 +292,8 @@
|
||||
temp += "<b>Request from: [get_supply_group_name(cat)]</b><BR><BR>"
|
||||
for(var/supply_type in SSshuttle.supply_packs )
|
||||
var/datum/supply_packs/N = SSshuttle.supply_packs[supply_type]
|
||||
if(N.hidden || N.contraband || N.group != cat) continue //Have to send the type instead of a reference to
|
||||
if(N.hidden || N.contraband || N.group != cat)
|
||||
continue //Have to send the type instead of a reference to
|
||||
temp += "<A href='?src=\ref[src];doorder=[supply_type]'>[N.name]</A> Cost: [N.cost]<BR>" //the obj because it would get caught by the garbage
|
||||
else if (href_list["doorder"])
|
||||
if(world.time < reqtime)
|
||||
@@ -293,12 +301,15 @@
|
||||
return
|
||||
|
||||
//Find the correct supply_pack datum
|
||||
if(!SSshuttle.supply_packs["[href_list["doorder"]]"]) return
|
||||
if(!SSshuttle.supply_packs["[href_list["doorder"]]"])
|
||||
return
|
||||
|
||||
var/timeout = world.time + 600
|
||||
var/reason = stripped_input(usr,"Reason:","Why do you require this item?","")
|
||||
if(world.time > timeout) return
|
||||
if(!reason) return
|
||||
if(world.time > timeout)
|
||||
return
|
||||
if(!reason)
|
||||
return
|
||||
|
||||
var/idname = "*None Provided*"
|
||||
var/idrank = "*None Provided*"
|
||||
@@ -310,7 +321,8 @@
|
||||
idname = usr.real_name
|
||||
|
||||
var/datum/supply_order/O = SSshuttle.generateSupplyOrder(href_list["doorder"], idname, idrank, reason)
|
||||
if(!O) return
|
||||
if(!O)
|
||||
return
|
||||
O.generateRequisition(loc)
|
||||
|
||||
reqtime = (world.time + 5) % 1e5
|
||||
@@ -414,7 +426,8 @@
|
||||
post_signal("supply")
|
||||
|
||||
else if (href_list["order"])
|
||||
if(SSshuttle.supply.mode != SHUTTLE_IDLE) return
|
||||
if(SSshuttle.supply.mode != SHUTTLE_IDLE)
|
||||
return
|
||||
if(href_list["order"] == "categories")
|
||||
//all_supply_groups
|
||||
//Request what?
|
||||
@@ -456,8 +469,10 @@
|
||||
|
||||
var/timeout = world.time + 600
|
||||
var/reason = stripped_input(usr,"Reason:","Why do you require this item?","")
|
||||
if(world.time > timeout) return
|
||||
// if(!reason) return
|
||||
if(world.time > timeout)
|
||||
return
|
||||
// if(!reason)
|
||||
// return
|
||||
|
||||
var/idname = "*None Provided*"
|
||||
var/idrank = "*None Provided*"
|
||||
@@ -469,7 +484,8 @@
|
||||
idname = usr.real_name
|
||||
|
||||
var/datum/supply_order/O = SSshuttle.generateSupplyOrder(href_list["doorder"], idname, idrank, reason)
|
||||
if(!O) return
|
||||
if(!O)
|
||||
return
|
||||
O.generateRequisition(loc)
|
||||
|
||||
reqtime = (world.time + 5) % 1e5
|
||||
@@ -550,7 +566,8 @@
|
||||
|
||||
var/datum/radio_frequency/frequency = SSradio.return_frequency(1435)
|
||||
|
||||
if(!frequency) return
|
||||
if(!frequency)
|
||||
return
|
||||
|
||||
var/datum/signal/status_signal = new
|
||||
status_signal.source = src
|
||||
|
||||
@@ -59,8 +59,10 @@ var/datum/subsystem/ticker/ticker
|
||||
/datum/subsystem/ticker/Initialize(timeofday, zlevel)
|
||||
if (zlevel)
|
||||
return ..()
|
||||
if(!syndicate_code_phrase) syndicate_code_phrase = generate_code_phrase()
|
||||
if(!syndicate_code_response) syndicate_code_response = generate_code_phrase()
|
||||
if(!syndicate_code_phrase)
|
||||
syndicate_code_phrase = generate_code_phrase()
|
||||
if(!syndicate_code_response)
|
||||
syndicate_code_response = generate_code_phrase()
|
||||
setupFactions()
|
||||
..()
|
||||
|
||||
@@ -207,7 +209,8 @@ var/datum/subsystem/ticker/ticker
|
||||
|
||||
//Plus it provides an easy way to make cinematics for other events. Just use this as a template
|
||||
/datum/subsystem/ticker/proc/station_explosion_cinematic(station_missed=0, override = null)
|
||||
if( cinematic ) return //already a cinematic in progress!
|
||||
if( cinematic )
|
||||
return //already a cinematic in progress!
|
||||
|
||||
for (var/datum/html_interface/hi in html_interfaces)
|
||||
hi.closeAll()
|
||||
@@ -304,8 +307,10 @@ var/datum/subsystem/ticker/ticker
|
||||
//If its actually the end of the round, wait for it to end.
|
||||
//Otherwise if its a verb it will continue on afterwards.
|
||||
spawn(300)
|
||||
if(cinematic) qdel(cinematic) //end the cinematic
|
||||
if(temp_buckle) qdel(temp_buckle) //release everybody
|
||||
if(cinematic)
|
||||
qdel(cinematic) //end the cinematic
|
||||
if(temp_buckle)
|
||||
qdel(temp_buckle) //release everybody
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -79,11 +79,14 @@ var/datum/subsystem/vote/SSvote
|
||||
var/list/winners = get_result()
|
||||
var/text
|
||||
if(winners.len > 0)
|
||||
if(question) text += "<b>[question]</b>"
|
||||
else text += "<b>[capitalize(mode)] Vote</b>"
|
||||
if(question)
|
||||
text += "<b>[question]</b>"
|
||||
else
|
||||
text += "<b>[capitalize(mode)] Vote</b>"
|
||||
for(var/i=1,i<=choices.len,i++)
|
||||
var/votes = choices[choices[i]]
|
||||
if(!votes) votes = 0
|
||||
if(!votes)
|
||||
votes = 0
|
||||
text += "\n<b>[choices[i]]:</b> [votes]"
|
||||
if(mode != "custom")
|
||||
if(winners.len > 1)
|
||||
@@ -149,16 +152,21 @@ var/datum/subsystem/vote/SSvote
|
||||
|
||||
reset()
|
||||
switch(vote_type)
|
||||
if("restart") choices.Add("Restart Round","Continue Playing")
|
||||
if("gamemode") choices.Add(config.votable_modes)
|
||||
if("restart")
|
||||
choices.Add("Restart Round","Continue Playing")
|
||||
if("gamemode")
|
||||
choices.Add(config.votable_modes)
|
||||
if("custom")
|
||||
question = stripped_input(usr,"What is the vote for?")
|
||||
if(!question) return 0
|
||||
if(!question)
|
||||
return 0
|
||||
for(var/i=1,i<=10,i++)
|
||||
var/option = capitalize(stripped_input(usr,"Please enter an option or hit cancel to finish"))
|
||||
if(!option || mode || !usr.client) break
|
||||
if(!option || mode || !usr.client)
|
||||
break
|
||||
choices.Add(option)
|
||||
else return 0
|
||||
else
|
||||
return 0
|
||||
mode = vote_type
|
||||
initiator = initiator_key
|
||||
started_time = world.time
|
||||
@@ -172,7 +180,8 @@ var/datum/subsystem/vote/SSvote
|
||||
return 0
|
||||
|
||||
/datum/subsystem/vote/proc/interface(client/C)
|
||||
if(!C) return
|
||||
if(!C)
|
||||
return
|
||||
var/admin = 0
|
||||
var/trialmin = 0
|
||||
if(C.holder)
|
||||
@@ -182,12 +191,15 @@ var/datum/subsystem/vote/SSvote
|
||||
voting |= C
|
||||
|
||||
if(mode)
|
||||
if(question) . += "<h2>Vote: '[question]'</h2>"
|
||||
else . += "<h2>Vote: [capitalize(mode)]</h2>"
|
||||
if(question)
|
||||
. += "<h2>Vote: '[question]'</h2>"
|
||||
else
|
||||
. += "<h2>Vote: [capitalize(mode)]</h2>"
|
||||
. += "Time Left: [time_remaining] s<hr><ul>"
|
||||
for(var/i=1,i<=choices.len,i++)
|
||||
var/votes = choices[choices[i]]
|
||||
if(!votes) votes = 0
|
||||
if(!votes)
|
||||
votes = 0
|
||||
. += "<li><a href='?src=\ref[src];vote=[i]'>[choices[i]]</a> ([votes] votes)</li>"
|
||||
. += "</ul><hr>"
|
||||
if(admin)
|
||||
@@ -220,7 +232,8 @@ var/datum/subsystem/vote/SSvote
|
||||
|
||||
|
||||
/datum/subsystem/vote/Topic(href,href_list[],hsrc)
|
||||
if(!usr || !usr.client) return //not necessary but meh...just in-case somebody does something stupid
|
||||
if(!usr || !usr.client)
|
||||
return //not necessary but meh...just in-case somebody does something stupid
|
||||
switch(href_list["vote"])
|
||||
if("close")
|
||||
voting -= usr.client
|
||||
|
||||
@@ -88,8 +88,10 @@
|
||||
add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.")
|
||||
if(1)
|
||||
for(var/line in file2list("config/silicon_laws.txt"))
|
||||
if(!line) continue
|
||||
if(findtextEx(line,"#",1,2)) continue
|
||||
if(!line)
|
||||
continue
|
||||
if(findtextEx(line,"#",1,2))
|
||||
continue
|
||||
|
||||
add_inherent_law(line)
|
||||
if(!inherent.len)
|
||||
@@ -107,8 +109,10 @@
|
||||
/datum/ai_laws/custom/New() //This reads silicon_laws.txt and allows server hosts to set custom AI starting laws.
|
||||
..()
|
||||
for(var/line in file2list("config/silicon_laws.txt"))
|
||||
if(!line) continue
|
||||
if(findtextEx(line,"#",1,2)) continue
|
||||
if(!line)
|
||||
continue
|
||||
if(findtextEx(line,"#",1,2))
|
||||
continue
|
||||
|
||||
add_inherent_law(line)
|
||||
if(!inherent.len) //Failsafe to prevent lawless AIs being created.
|
||||
@@ -211,4 +215,4 @@
|
||||
if (length(law) > 0)
|
||||
data += "[show_numbers ? "[number]:" : ""] [law]"
|
||||
number++
|
||||
return data
|
||||
return data
|
||||
|
||||
+100
-50
@@ -17,7 +17,8 @@ datum/proc/on_varedit(modified_var) //called whenever a var is edited
|
||||
var/title = ""
|
||||
var/body = ""
|
||||
|
||||
if(!D) return
|
||||
if(!D)
|
||||
return
|
||||
if(istype(D, /atom))
|
||||
var/atom/A = D
|
||||
title = "[A.name] (\ref[A]) = [A.type]"
|
||||
@@ -425,7 +426,8 @@ body
|
||||
src.debug_variables(DAT)
|
||||
|
||||
else if(href_list["mob_player_panel"])
|
||||
if(!check_rights(0)) return
|
||||
if(!check_rights(0))
|
||||
return
|
||||
|
||||
var/mob/M = locate(href_list["mob_player_panel"])
|
||||
if(!istype(M))
|
||||
@@ -436,7 +438,8 @@ body
|
||||
href_list["datumrefresh"] = href_list["mob_player_panel"]
|
||||
|
||||
else if(href_list["godmode"])
|
||||
if(!check_rights(R_REJUVINATE)) return
|
||||
if(!check_rights(R_REJUVINATE))
|
||||
return
|
||||
|
||||
var/mob/M = locate(href_list["godmode"])
|
||||
if(!istype(M))
|
||||
@@ -447,7 +450,8 @@ body
|
||||
href_list["datumrefresh"] = href_list["godmode"]
|
||||
|
||||
else if(href_list["mark_object"])
|
||||
if(!check_rights(0)) return
|
||||
if(!check_rights(0))
|
||||
return
|
||||
|
||||
var/datum/D = locate(href_list["mark_object"])
|
||||
if(!istype(D))
|
||||
@@ -458,7 +462,8 @@ body
|
||||
href_list["datumrefresh"] = href_list["mark_object"]
|
||||
|
||||
else if(href_list["proc_call"])
|
||||
if(!check_rights(0)) return
|
||||
if(!check_rights(0))
|
||||
return
|
||||
|
||||
var/T = locate(href_list["proc_call"])
|
||||
|
||||
@@ -466,7 +471,8 @@ body
|
||||
callproc_datum(T)
|
||||
|
||||
else if(href_list["regenerateicons"])
|
||||
if(!check_rights(0)) return
|
||||
if(!check_rights(0))
|
||||
return
|
||||
|
||||
var/mob/M = locate(href_list["regenerateicons"])
|
||||
if(!ismob(M))
|
||||
@@ -482,7 +488,8 @@ body
|
||||
//~CARN: for renaming mobs (updates their name, real_name, mind.name, their ID/PDA and datacore records).
|
||||
|
||||
if(href_list["rename"])
|
||||
if(!check_rights(0)) return
|
||||
if(!check_rights(0))
|
||||
return
|
||||
|
||||
var/mob/M = locate(href_list["rename"])
|
||||
if(!istype(M))
|
||||
@@ -490,14 +497,16 @@ body
|
||||
return
|
||||
|
||||
var/new_name = stripped_input(usr,"What would you like to name this mob?","Input a name",M.real_name,MAX_NAME_LEN)
|
||||
if( !new_name || !M ) return
|
||||
if( !new_name || !M )
|
||||
return
|
||||
|
||||
message_admins("Admin [key_name_admin(usr)] renamed [key_name_admin(M)] to [new_name].")
|
||||
M.fully_replace_character_name(M.real_name,new_name)
|
||||
href_list["datumrefresh"] = href_list["rename"]
|
||||
|
||||
else if(href_list["varnameedit"] && href_list["datumedit"])
|
||||
if(!check_rights(0)) return
|
||||
if(!check_rights(0))
|
||||
return
|
||||
|
||||
var/D = locate(href_list["datumedit"])
|
||||
if(!istype(D,/datum) && !istype(D,/client))
|
||||
@@ -507,7 +516,8 @@ body
|
||||
modify_variables(D, href_list["varnameedit"], 1)
|
||||
|
||||
else if(href_list["varnamechange"] && href_list["datumchange"])
|
||||
if(!check_rights(0)) return
|
||||
if(!check_rights(0))
|
||||
return
|
||||
|
||||
var/D = locate(href_list["datumchange"])
|
||||
if(!istype(D,/datum) && !istype(D,/client))
|
||||
@@ -517,7 +527,8 @@ body
|
||||
modify_variables(D, href_list["varnamechange"], 0)
|
||||
|
||||
else if(href_list["varnamemass"] && href_list["datummass"])
|
||||
if(!check_rights(0)) return
|
||||
if(!check_rights(0))
|
||||
return
|
||||
|
||||
var/atom/A = locate(href_list["datummass"])
|
||||
if(!istype(A))
|
||||
@@ -527,7 +538,8 @@ body
|
||||
cmd_mass_modify_object_variables(A, href_list["varnamemass"])
|
||||
|
||||
else if(href_list["give_spell"])
|
||||
if(!check_rights(0)) return
|
||||
if(!check_rights(0))
|
||||
return
|
||||
|
||||
var/mob/M = locate(href_list["give_spell"])
|
||||
if(!istype(M))
|
||||
@@ -538,7 +550,8 @@ body
|
||||
href_list["datumrefresh"] = href_list["give_spell"]
|
||||
|
||||
else if(href_list["give_disease"])
|
||||
if(!check_rights(0)) return
|
||||
if(!check_rights(0))
|
||||
return
|
||||
|
||||
var/mob/M = locate(href_list["give_disease"])
|
||||
if(!istype(M))
|
||||
@@ -549,7 +562,8 @@ body
|
||||
href_list["datumrefresh"] = href_list["give_spell"]
|
||||
|
||||
else if(href_list["ninja"])
|
||||
if(!check_rights(R_FUN)) return
|
||||
if(!check_rights(R_FUN))
|
||||
return
|
||||
|
||||
var/mob/M = locate(href_list["ninja"])
|
||||
if(!istype(M))
|
||||
@@ -560,7 +574,8 @@ body
|
||||
href_list["datumrefresh"] = href_list["ninja"]
|
||||
|
||||
else if(href_list["gib"])
|
||||
if(!check_rights(R_FUN)) return
|
||||
if(!check_rights(R_FUN))
|
||||
return
|
||||
|
||||
var/mob/M = locate(href_list["gib"])
|
||||
if(!istype(M))
|
||||
@@ -570,7 +585,8 @@ body
|
||||
src.cmd_admin_gib(M)
|
||||
|
||||
else if(href_list["build_mode"])
|
||||
if(!check_rights(R_BUILDMODE)) return
|
||||
if(!check_rights(R_BUILDMODE))
|
||||
return
|
||||
|
||||
var/mob/M = locate(href_list["build_mode"])
|
||||
if(!istype(M))
|
||||
@@ -581,7 +597,8 @@ body
|
||||
href_list["datumrefresh"] = href_list["build_mode"]
|
||||
|
||||
else if(href_list["drop_everything"])
|
||||
if(!check_rights(0)) return
|
||||
if(!check_rights(0))
|
||||
return
|
||||
|
||||
var/mob/M = locate(href_list["drop_everything"])
|
||||
if(!istype(M))
|
||||
@@ -592,7 +609,8 @@ body
|
||||
usr.client.cmd_admin_drop_everything(M)
|
||||
|
||||
else if(href_list["direct_control"])
|
||||
if(!check_rights(0)) return
|
||||
if(!check_rights(0))
|
||||
return
|
||||
|
||||
var/mob/M = locate(href_list["direct_control"])
|
||||
if(!istype(M))
|
||||
@@ -603,7 +621,8 @@ body
|
||||
usr.client.cmd_assume_direct_control(M)
|
||||
|
||||
else if(href_list["offer_control"])
|
||||
if(!check_rights(0)) return
|
||||
if(!check_rights(0))
|
||||
return
|
||||
|
||||
var/mob/M = locate(href_list["offer_control"])
|
||||
if(!istype(M))
|
||||
@@ -631,7 +650,8 @@ body
|
||||
message_admins("No ghosts were willing to take control of [key_name_admin(M)])")
|
||||
|
||||
else if(href_list["delall"])
|
||||
if(!check_rights(R_DEBUG|R_SERVER)) return
|
||||
if(!check_rights(R_DEBUG|R_SERVER))
|
||||
return
|
||||
|
||||
var/obj/O = locate(href_list["delall"])
|
||||
if(!isobj(O))
|
||||
@@ -674,7 +694,8 @@ body
|
||||
message_admins("<span class='notice'>[key_name(usr)] deleted all objects of type or subtype of [O_type] ([i] objects deleted) </span>")
|
||||
|
||||
else if(href_list["addreagent"])
|
||||
if(!check_rights(0)) return
|
||||
if(!check_rights(0))
|
||||
return
|
||||
|
||||
var/atom/A = locate(href_list["addreagent"])
|
||||
|
||||
@@ -706,7 +727,8 @@ body
|
||||
href_list["datumrefresh"] = href_list["addreagent"]
|
||||
|
||||
else if(href_list["explode"])
|
||||
if(!check_rights(R_FUN)) return
|
||||
if(!check_rights(R_FUN))
|
||||
return
|
||||
|
||||
var/atom/A = locate(href_list["explode"])
|
||||
if(!isobj(A) && !ismob(A) && !isturf(A))
|
||||
@@ -717,7 +739,8 @@ body
|
||||
href_list["datumrefresh"] = href_list["explode"]
|
||||
|
||||
else if(href_list["emp"])
|
||||
if(!check_rights(R_FUN)) return
|
||||
if(!check_rights(R_FUN))
|
||||
return
|
||||
|
||||
var/atom/A = locate(href_list["emp"])
|
||||
if(!isobj(A) && !ismob(A) && !isturf(A))
|
||||
@@ -728,7 +751,8 @@ body
|
||||
href_list["datumrefresh"] = href_list["emp"]
|
||||
|
||||
else if(href_list["rotatedatum"])
|
||||
if(!check_rights(0)) return
|
||||
if(!check_rights(0))
|
||||
return
|
||||
|
||||
var/atom/A = locate(href_list["rotatedatum"])
|
||||
if(!istype(A))
|
||||
@@ -736,12 +760,15 @@ body
|
||||
return
|
||||
|
||||
switch(href_list["rotatedir"])
|
||||
if("right") A.dir = turn(A.dir, -45)
|
||||
if("left") A.dir = turn(A.dir, 45)
|
||||
if("right")
|
||||
A.dir = turn(A.dir, -45)
|
||||
if("left")
|
||||
A.dir = turn(A.dir, 45)
|
||||
href_list["datumrefresh"] = href_list["rotatedatum"]
|
||||
|
||||
else if(href_list["editorgans"])
|
||||
if(!check_rights(0)) return
|
||||
if(!check_rights(0))
|
||||
return
|
||||
|
||||
var/mob/living/carbon/C = locate(href_list["editorgans"])
|
||||
if(!istype(C))
|
||||
@@ -752,91 +779,104 @@ body
|
||||
href_list["datumrefresh"] = href_list["editorgans"]
|
||||
|
||||
else if(href_list["makehuman"])
|
||||
if(!check_rights(R_SPAWN)) return
|
||||
if(!check_rights(R_SPAWN))
|
||||
return
|
||||
|
||||
var/mob/living/carbon/monkey/Mo = locate(href_list["makehuman"])
|
||||
if(!istype(Mo))
|
||||
usr << "This can only be done to instances of type /mob/living/carbon/monkey"
|
||||
return
|
||||
|
||||
if(alert("Confirm mob type change?",,"Transform","Cancel") != "Transform") return
|
||||
if(alert("Confirm mob type change?",,"Transform","Cancel") != "Transform")
|
||||
return
|
||||
if(!Mo)
|
||||
usr << "Mob doesn't exist anymore"
|
||||
return
|
||||
holder.Topic(href, list("humanone"=href_list["makehuman"]))
|
||||
|
||||
else if(href_list["makemonkey"])
|
||||
if(!check_rights(R_SPAWN)) return
|
||||
if(!check_rights(R_SPAWN))
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/H = locate(href_list["makemonkey"])
|
||||
if(!istype(H))
|
||||
usr << "This can only be done to instances of type /mob/living/carbon/human"
|
||||
return
|
||||
|
||||
if(alert("Confirm mob type change?",,"Transform","Cancel") != "Transform") return
|
||||
if(alert("Confirm mob type change?",,"Transform","Cancel") != "Transform")
|
||||
return
|
||||
if(!H)
|
||||
usr << "Mob doesn't exist anymore"
|
||||
return
|
||||
holder.Topic(href, list("monkeyone"=href_list["makemonkey"]))
|
||||
|
||||
else if(href_list["makerobot"])
|
||||
if(!check_rights(R_SPAWN)) return
|
||||
if(!check_rights(R_SPAWN))
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/H = locate(href_list["makerobot"])
|
||||
if(!istype(H))
|
||||
usr << "This can only be done to instances of type /mob/living/carbon/human"
|
||||
return
|
||||
|
||||
if(alert("Confirm mob type change?",,"Transform","Cancel") != "Transform") return
|
||||
if(alert("Confirm mob type change?",,"Transform","Cancel") != "Transform")
|
||||
return
|
||||
if(!H)
|
||||
usr << "Mob doesn't exist anymore"
|
||||
return
|
||||
holder.Topic(href, list("makerobot"=href_list["makerobot"]))
|
||||
|
||||
else if(href_list["makealien"])
|
||||
if(!check_rights(R_SPAWN)) return
|
||||
if(!check_rights(R_SPAWN))
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/H = locate(href_list["makealien"])
|
||||
if(!istype(H))
|
||||
usr << "This can only be done to instances of type /mob/living/carbon/human"
|
||||
return
|
||||
|
||||
if(alert("Confirm mob type change?",,"Transform","Cancel") != "Transform") return
|
||||
if(alert("Confirm mob type change?",,"Transform","Cancel") != "Transform")
|
||||
return
|
||||
if(!H)
|
||||
usr << "Mob doesn't exist anymore"
|
||||
return
|
||||
holder.Topic(href, list("makealien"=href_list["makealien"]))
|
||||
|
||||
else if(href_list["makeslime"])
|
||||
if(!check_rights(R_SPAWN)) return
|
||||
if(!check_rights(R_SPAWN))
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/H = locate(href_list["makeslime"])
|
||||
if(!istype(H))
|
||||
usr << "This can only be done to instances of type /mob/living/carbon/human"
|
||||
return
|
||||
|
||||
if(alert("Confirm mob type change?",,"Transform","Cancel") != "Transform") return
|
||||
if(alert("Confirm mob type change?",,"Transform","Cancel") != "Transform")
|
||||
return
|
||||
if(!H)
|
||||
usr << "Mob doesn't exist anymore"
|
||||
return
|
||||
holder.Topic(href, list("makeslime"=href_list["makeslime"]))
|
||||
|
||||
else if(href_list["makeai"])
|
||||
if(!check_rights(R_SPAWN)) return
|
||||
if(!check_rights(R_SPAWN))
|
||||
return
|
||||
|
||||
var/mob/living/carbon/H = locate(href_list["makeai"])
|
||||
if(!istype(H))
|
||||
usr << "This can only be done to instances of type /mob/living/carbon"
|
||||
return
|
||||
|
||||
if(alert("Confirm mob type change?",,"Transform","Cancel") != "Transform") return
|
||||
if(alert("Confirm mob type change?",,"Transform","Cancel") != "Transform")
|
||||
return
|
||||
if(!H)
|
||||
usr << "Mob doesn't exist anymore"
|
||||
return
|
||||
holder.Topic(href, list("makeai"=href_list["makeai"]))
|
||||
|
||||
else if(href_list["setspecies"])
|
||||
if(!check_rights(R_SPAWN)) return
|
||||
if(!check_rights(R_SPAWN))
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/H = locate(href_list["setspecies"])
|
||||
if(!istype(H))
|
||||
@@ -857,7 +897,8 @@ body
|
||||
|
||||
|
||||
else if(href_list["purrbation"])
|
||||
if(!check_rights(R_SPAWN)) return
|
||||
if(!check_rights(R_SPAWN))
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/H = locate(href_list["purrbation"])
|
||||
if(!istype(H))
|
||||
@@ -889,10 +930,12 @@ body
|
||||
usr << "You can only put humans on purrbation."
|
||||
|
||||
else if(href_list["adjustDamage"] && href_list["mobToDamage"])
|
||||
if(!check_rights(0)) return
|
||||
if(!check_rights(0))
|
||||
return
|
||||
|
||||
var/mob/living/L = locate(href_list["mobToDamage"])
|
||||
if(!istype(L)) return
|
||||
if(!istype(L))
|
||||
return
|
||||
|
||||
var/Text = href_list["adjustDamage"]
|
||||
|
||||
@@ -903,13 +946,20 @@ body
|
||||
return
|
||||
|
||||
switch(Text)
|
||||
if("brute") L.adjustBruteLoss(amount)
|
||||
if("fire") L.adjustFireLoss(amount)
|
||||
if("toxin") L.adjustToxLoss(amount)
|
||||
if("oxygen")L.adjustOxyLoss(amount)
|
||||
if("brain") L.adjustBrainLoss(amount)
|
||||
if("clone") L.adjustCloneLoss(amount)
|
||||
if("stamina") L.adjustStaminaLoss(amount)
|
||||
if("brute")
|
||||
L.adjustBruteLoss(amount)
|
||||
if("fire")
|
||||
L.adjustFireLoss(amount)
|
||||
if("toxin")
|
||||
L.adjustToxLoss(amount)
|
||||
if("oxygen")
|
||||
L.adjustOxyLoss(amount)
|
||||
if("brain")
|
||||
L.adjustBrainLoss(amount)
|
||||
if("clone")
|
||||
L.adjustCloneLoss(amount)
|
||||
if("stamina")
|
||||
L.adjustStaminaLoss(amount)
|
||||
else
|
||||
usr << "You caused an error. DEBUG: Text:[Text] Mob:[L]"
|
||||
return
|
||||
|
||||
@@ -65,8 +65,10 @@
|
||||
affected_mob << "<span class='danger'>Your entire body vibrates.</span>"
|
||||
|
||||
if (prob(35))
|
||||
if(prob(50)) scramble_dna(affected_mob, 1, 0, rand(15,45))
|
||||
else scramble_dna(affected_mob, 0, 1, rand(15,45))
|
||||
if(prob(50))
|
||||
scramble_dna(affected_mob, 1, 0, rand(15,45))
|
||||
else
|
||||
scramble_dna(affected_mob, 0, 1, rand(15,45))
|
||||
|
||||
if(4)
|
||||
if(restcure)
|
||||
@@ -75,5 +77,7 @@
|
||||
cure()
|
||||
return
|
||||
if (prob(60))
|
||||
if(prob(50)) scramble_dna(affected_mob, 1, 0, rand(50,75))
|
||||
else scramble_dna(affected_mob, 0, 1, rand(50,75))
|
||||
if(prob(50))
|
||||
scramble_dna(affected_mob, 1, 0, rand(50,75))
|
||||
else
|
||||
scramble_dna(affected_mob, 0, 1, rand(50,75))
|
||||
@@ -42,7 +42,8 @@
|
||||
if(jobban_isbanned(affected_mob, new_form))
|
||||
affected_mob.death(1)
|
||||
return
|
||||
if(affected_mob.notransform) return
|
||||
if(affected_mob.notransform)
|
||||
return
|
||||
affected_mob.notransform = 1
|
||||
affected_mob.canmove = 0
|
||||
affected_mob.icon = null
|
||||
|
||||
@@ -10,7 +10,8 @@ var/global/datum/getrev/revdata = new()
|
||||
for(var/line=head_log.len, line>=1, line--)
|
||||
if(head_log[line])
|
||||
var/list/last_entry = text2list(head_log[line], " ")
|
||||
if(last_entry.len < 2) continue
|
||||
if(last_entry.len < 2)
|
||||
continue
|
||||
revision = last_entry[2]
|
||||
// Get date/time
|
||||
if(last_entry.len >= 5)
|
||||
|
||||
+1692
-1680
File diff suppressed because it is too large
Load Diff
@@ -30,7 +30,8 @@
|
||||
. = on_losing(owner)
|
||||
|
||||
/datum/mutation/human/proc/set_se(se_string, on = 1)
|
||||
if(!se_string || lentext(se_string) < DNA_STRUC_ENZYMES_BLOCKS * DNA_BLOCK_SIZE) return
|
||||
if(!se_string || lentext(se_string) < DNA_STRUC_ENZYMES_BLOCKS * DNA_BLOCK_SIZE)
|
||||
return
|
||||
var/before = copytext(se_string, 1, ((dna_block - 1) * DNA_BLOCK_SIZE) + 1)
|
||||
var/injection = num2hex(on ? rand(lowest_value, (256 * 16) - 1) : rand(0, lowest_value - 1), DNA_BLOCK_SIZE)
|
||||
var/after = copytext(se_string, (dna_block * DNA_BLOCK_SIZE) + 1, 0)
|
||||
@@ -41,7 +42,8 @@
|
||||
owner.dna.struc_enzymes = set_se(owner.dna.struc_enzymes, on)
|
||||
|
||||
/datum/mutation/human/proc/check_block_string(se_string)
|
||||
if(!se_string || lentext(se_string) < DNA_STRUC_ENZYMES_BLOCKS * DNA_BLOCK_SIZE) return 0
|
||||
if(!se_string || lentext(se_string) < DNA_STRUC_ENZYMES_BLOCKS * DNA_BLOCK_SIZE)
|
||||
return 0
|
||||
if(hex2num(getblock(se_string, dna_block)) >= lowest_value)
|
||||
return 1
|
||||
|
||||
@@ -288,13 +290,15 @@
|
||||
text_lose_indication = "<span class='notice'>Everything around you seems to shrink..</span>"
|
||||
|
||||
/datum/mutation/human/dwarfism/on_acquiring(mob/living/carbon/human/owner)
|
||||
if(..()) return
|
||||
if(..())
|
||||
return
|
||||
owner.resize = 0.8
|
||||
owner.pass_flags |= PASSTABLE
|
||||
owner.visible_message("<span class='danger'>[owner] suddenly shrinks!</span>")
|
||||
|
||||
/datum/mutation/human/dwarfism/on_losing(mob/living/carbon/human/owner)
|
||||
if(..()) return
|
||||
if(..())
|
||||
return
|
||||
owner.resize = 1.25
|
||||
owner.pass_flags &= ~PASSTABLE
|
||||
owner.visible_message("<span class='danger'>[owner] suddenly grows!</span>")
|
||||
@@ -306,7 +310,8 @@
|
||||
text_gain_indication = "<span class='danger'>You feel lightheaded.</span>"
|
||||
|
||||
/datum/mutation/human/clumsy/on_acquiring(mob/living/carbon/human/owner)
|
||||
if(..()) return
|
||||
if(..())
|
||||
return
|
||||
owner.disabilities |= CLUMSY
|
||||
|
||||
/datum/mutation/human/clumsy/on_losing(mob/living/carbon/human/owner)
|
||||
@@ -352,7 +357,8 @@
|
||||
text_gain_indication = "<span class='danger'>You can't seem to hear anything.</span>"
|
||||
|
||||
/datum/mutation/human/deaf/on_acquiring(mob/living/carbon/human/owner)
|
||||
if(..()) return
|
||||
if(..())
|
||||
return
|
||||
owner.disabilities |= DEAF
|
||||
|
||||
/datum/mutation/human/deaf/on_losing(mob/living/carbon/human/owner)
|
||||
@@ -367,7 +373,8 @@
|
||||
text_gain_indication = "<span class='danger'>You can't seem to see anything.</span>"
|
||||
|
||||
/datum/mutation/human/blind/on_acquiring(mob/living/carbon/human/owner)
|
||||
if(..()) return
|
||||
if(..())
|
||||
return
|
||||
owner.disabilities |= BLIND
|
||||
|
||||
/datum/mutation/human/blind/on_losing(mob/living/carbon/human/owner)
|
||||
|
||||
@@ -19,8 +19,10 @@
|
||||
if(T in range(target,inner_tele_radius)) continue
|
||||
if(istype(T,/turf/space) && !include_space) continue
|
||||
if(T.density && !include_dense) continue
|
||||
if(T.x>world.maxx-outer_tele_radius || T.x<outer_tele_radius) continue //putting them at the edge is dumb
|
||||
if(T.y>world.maxy-outer_tele_radius || T.y<outer_tele_radius) continue
|
||||
if(T.x>world.maxx-outer_tele_radius || T.x<outer_tele_radius)
|
||||
continue //putting them at the edge is dumb
|
||||
if(T.y>world.maxy-outer_tele_radius || T.y<outer_tele_radius)
|
||||
continue
|
||||
turfs += T
|
||||
|
||||
if(!turfs.len)
|
||||
|
||||
@@ -54,7 +54,8 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
|
||||
/datum/supply_packs/New()
|
||||
manifest += "<ul>"
|
||||
for(var/path in contains)
|
||||
if(!path) continue
|
||||
if(!path)
|
||||
continue
|
||||
var/atom/movable/AM = path
|
||||
manifest += "<li>[initial(AM.name)]</li>"
|
||||
manifest += "</ul>"
|
||||
|
||||
@@ -4,7 +4,6 @@ var/list/wire_colors = list( // http://www.crockford.com/wrrrld/color.html
|
||||
"aqua",
|
||||
"aquamarine",
|
||||
"beige",
|
||||
"black",
|
||||
"blanchedalmond",
|
||||
"blue",
|
||||
"blueviolet",
|
||||
@@ -154,12 +153,11 @@ var/list/wire_color_directory = list()
|
||||
if(randomize)
|
||||
randomize()
|
||||
else
|
||||
var/list/global_colors = wire_color_directory[holder_type]
|
||||
if(!wire_color_directory[holder_type])
|
||||
randomize()
|
||||
global_colors = colors.Copy()
|
||||
wire_color_directory[holder_type] = colors
|
||||
else
|
||||
colors = global_colors.Copy()
|
||||
colors = wire_color_directory[holder_type]
|
||||
|
||||
/datum/wires/Destroy()
|
||||
holder = null
|
||||
@@ -179,7 +177,7 @@ var/list/wire_color_directory = list()
|
||||
for(var/wire in shuffle(wires))
|
||||
colors[pick_n_take(possible_colors)] = wire
|
||||
|
||||
/datum/wires/proc/shuffle()
|
||||
/datum/wires/proc/shuffle_wires()
|
||||
colors.Cut()
|
||||
randomize()
|
||||
|
||||
|
||||
@@ -835,20 +835,20 @@ var/list/teleportlocs = list()
|
||||
icon_state = "armory"
|
||||
|
||||
/*
|
||||
New()
|
||||
..()
|
||||
/area/security/transfer/New()
|
||||
..()
|
||||
|
||||
spawn(10) //let objects set up first
|
||||
for(var/turf/turfToGrayscale in src)
|
||||
if(turfToGrayscale.icon)
|
||||
var/icon/newIcon = icon(turfToGrayscale.icon)
|
||||
spawn(10) //let objects set up first
|
||||
for(var/turf/turfToGrayscale in src)
|
||||
if(turfToGrayscale.icon)
|
||||
var/icon/newIcon = icon(turfToGrayscale.icon)
|
||||
newIcon.GrayScale()
|
||||
turfToGrayscale.icon = newIcon
|
||||
for(var/obj/objectToGrayscale in turfToGrayscale) //1 level deep, means tables, apcs, locker, etc, but not locker contents
|
||||
if(objectToGrayscale.icon)
|
||||
var/icon/newIcon = icon(objectToGrayscale.icon)
|
||||
newIcon.GrayScale()
|
||||
turfToGrayscale.icon = newIcon
|
||||
for(var/obj/objectToGrayscale in turfToGrayscale) //1 level deep, means tables, apcs, locker, etc, but not locker contents
|
||||
if(objectToGrayscale.icon)
|
||||
var/icon/newIcon = icon(objectToGrayscale.icon)
|
||||
newIcon.GrayScale()
|
||||
objectToGrayscale.icon = newIcon
|
||||
objectToGrayscale.icon = newIcon
|
||||
*/
|
||||
|
||||
/area/security/nuke_storage
|
||||
|
||||
@@ -322,17 +322,20 @@
|
||||
|
||||
|
||||
/area/Entered(A)
|
||||
if(!istype(A,/mob/living)) return
|
||||
if(!istype(A,/mob/living))
|
||||
return
|
||||
|
||||
var/mob/living/L = A
|
||||
if(!L.ckey) return
|
||||
if(!L.ckey)
|
||||
return
|
||||
|
||||
// Ambience goes down here -- make sure to list each area seperately for ease of adding things in later, thanks! Note: areas adjacent to each other should have the same sounds to prevent cutoff when possible.- LastyScratch
|
||||
if(L.client && !L.client.ambience_playing && L.client.prefs.toggles & SOUND_SHIP_AMBIENCE)
|
||||
L.client.ambience_playing = 1
|
||||
L << sound('sound/ambience/shipambience.ogg', repeat = 1, wait = 0, volume = 35, channel = 2)
|
||||
|
||||
if(!(L.client && (L.client.prefs.toggles & SOUND_AMBIENCE))) return //General ambience check is below the ship ambience so one can play without the other
|
||||
if(!(L.client && (L.client.prefs.toggles & SOUND_AMBIENCE)))
|
||||
return //General ambience check is below the ship ambience so one can play without the other
|
||||
|
||||
if(prob(35))
|
||||
var/sound = pick(ambientsounds)
|
||||
|
||||
+8
-6
@@ -90,11 +90,11 @@
|
||||
|
||||
/*//Convenience proc to see whether a container can be accessed in a certain way.
|
||||
|
||||
proc/can_subract_container()
|
||||
return flags & EXTRACT_CONTAINER
|
||||
/atom/proc/can_subract_container()
|
||||
return flags & EXTRACT_CONTAINER
|
||||
|
||||
proc/can_add_container()
|
||||
return flags & INSERT_CONTAINER
|
||||
/atom/proc/can_add_container()
|
||||
return flags & INSERT_CONTAINER
|
||||
*/
|
||||
|
||||
|
||||
@@ -302,11 +302,13 @@ var/list/blood_splatter_icons = list()
|
||||
B.blood_DNA[M.dna.unique_enzymes] = M.dna.blood_type
|
||||
else if(istype(M, /mob/living/carbon/alien))
|
||||
var/obj/effect/decal/cleanable/xenoblood/B = locate() in contents
|
||||
if(!B) B = new(src)
|
||||
if(!B)
|
||||
B = new(src)
|
||||
B.blood_DNA["UNKNOWN BLOOD"] = "X*"
|
||||
else if(istype(M, /mob/living/silicon/robot))
|
||||
var/obj/effect/decal/cleanable/oil/B = locate() in contents
|
||||
if(!B) B = new(src)
|
||||
if(!B)
|
||||
B = new(src)
|
||||
|
||||
/atom/proc/clean_blood()
|
||||
if(istype(blood_DNA, /list))
|
||||
|
||||
@@ -117,7 +117,8 @@
|
||||
loc = destination
|
||||
destination.Entered(src, oldloc)
|
||||
for(var/atom/movable/AM in destination)
|
||||
if(AM == src) continue
|
||||
if(AM == src)
|
||||
continue
|
||||
AM.Crossed(src)
|
||||
Moved(oldloc, 0)
|
||||
return 1
|
||||
@@ -170,7 +171,8 @@
|
||||
throw_at(target, range, speed, thrower, spin, diagonals_first)
|
||||
|
||||
/atom/movable/proc/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0)
|
||||
if(!target || !src || (flags & NODROP)) return 0
|
||||
if(!target || !src || (flags & NODROP))
|
||||
return 0
|
||||
//use a modified version of Bresenham's algorithm to get from the atom's current position to that of the target
|
||||
|
||||
throwing = 1
|
||||
|
||||
+8
-4
@@ -54,7 +54,8 @@
|
||||
remove_mutation_group(mutations)
|
||||
|
||||
/datum/dna/proc/remove_mutation_group(list/group)
|
||||
if(!group) return
|
||||
if(!group)
|
||||
return
|
||||
for(var/datum/mutation/human/HM in group)
|
||||
HM.force_lose(holder)
|
||||
|
||||
@@ -77,8 +78,10 @@
|
||||
L[DNA_EYE_COLOR_BLOCK] = sanitize_hexcolor(H.eye_color)
|
||||
|
||||
for(var/i=1, i<=DNA_UNI_IDENTITY_BLOCKS, i++)
|
||||
if(L[i]) . += L[i]
|
||||
else . += random_string(DNA_BLOCK_SIZE,hex_characters)
|
||||
if(L[i])
|
||||
. += L[i]
|
||||
else
|
||||
. += random_string(DNA_BLOCK_SIZE,hex_characters)
|
||||
return .
|
||||
|
||||
/datum/dna/proc/generate_struc_enzymes()
|
||||
@@ -279,7 +282,8 @@ mob/living/carbon/human/updateappearance(icon_update=1, mutcolor_update=0, mutat
|
||||
return copytext(input, blocksize*(blocknumber-1)+1, (blocksize*blocknumber)+1)
|
||||
|
||||
/proc/setblock(istring, blocknumber, replacement, blocksize=DNA_BLOCK_SIZE)
|
||||
if(!istring || !blocknumber || !replacement || !blocksize) return 0
|
||||
if(!istring || !blocknumber || !replacement || !blocksize)
|
||||
return 0
|
||||
return getleftblocks(istring, blocknumber, blocksize) + replacement + getrightblocks(istring, blocknumber, blocksize)
|
||||
|
||||
/proc/randmut(mob/living/carbon/M, list/candidates, difficulty = 2)
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
//Few global vars to track the blob
|
||||
var/list/blobs = list() //complete list of all blobs made.
|
||||
var/list/blob_cores = list()
|
||||
var/list/overminds = list()
|
||||
var/list/blob_nodes = list()
|
||||
var/list/blobs_legit = list() //used for win-score calculations, contains only blobs counted for win condition
|
||||
|
||||
@@ -147,8 +148,10 @@ var/list/blobs_legit = list() //used for win-score calculations, contains only b
|
||||
|
||||
for(var/datum/mind/blob in infected_crew)
|
||||
greet_blob(blob)
|
||||
var/datum/action/innate/blob_earlyhelp/B = new
|
||||
var/datum/action/innate/blob/earlyhelp/B = new
|
||||
B.Grant(blob.current)
|
||||
var/datum/action/innate/blob/earlycomm/C = new
|
||||
C.Grant(blob.current)
|
||||
SSshuttle.emergencyNoEscape = 1
|
||||
|
||||
// Disable the blob event for this round.
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
return 0
|
||||
if(blobwincount <= blobs_legit.len)//Blob took over
|
||||
return 1
|
||||
if(!blob_cores.len) // blob is dead
|
||||
if(!blob_cores.len && !overminds.len) //blob is dead
|
||||
if(config.continuous["blob"])
|
||||
continuous_sanity_checked = 1 //Nonstandard definition of "alive" gets past the check otherwise
|
||||
SSshuttle.emergencyNoEscape = 0
|
||||
|
||||
@@ -98,7 +98,8 @@
|
||||
world << "ERROR: NO VALID TERRITORIES"
|
||||
|
||||
/datum/station_state/proc/score(datum/station_state/result)
|
||||
if(!result) return 0
|
||||
if(!result)
|
||||
return 0
|
||||
var/output = 0
|
||||
output += (result.floor / max(floor,1))
|
||||
output += (result.r_wall/ max(r_wall,1))
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
return
|
||||
if(spore_delay > world.time)
|
||||
return
|
||||
flick("factory_glow", src)
|
||||
flick("blob_factory_glow", src)
|
||||
spore_delay = world.time + 100 // 10 seconds
|
||||
var/mob/living/simple_animal/hostile/blob/blobspore/BS = new/mob/living/simple_animal/hostile/blob/blobspore(src.loc, src)
|
||||
if(overmind) //if we don't have an overmind, we don't need to do anything but make a spore
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
. = ..()
|
||||
if(resource_delay > world.time)
|
||||
return
|
||||
flick("factory_glow", src)
|
||||
flick("blob_resource_glow", src)
|
||||
resource_delay = world.time + 45 // 4 and a half seconds
|
||||
if(overmind)
|
||||
overmind.add_points(1)
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
var/ghostimage = null
|
||||
|
||||
/mob/camera/blob/New()
|
||||
overminds += src
|
||||
var/new_name = "[initial(name)] ([rand(1, 999)])"
|
||||
name = new_name
|
||||
real_name = new_name
|
||||
@@ -42,7 +43,8 @@
|
||||
..()
|
||||
|
||||
/mob/camera/blob/Destroy()
|
||||
if (ghostimage)
|
||||
overminds -= src
|
||||
if(ghostimage)
|
||||
ghost_darkness_images -= ghostimage
|
||||
qdel(ghostimage)
|
||||
ghostimage = null;
|
||||
|
||||
@@ -240,12 +240,10 @@
|
||||
src << "<b>Shortcuts:</b> Click = Expand Blob <b>|</b> Middle Mouse Click = Rally Spores <b>|</b> Ctrl Click = Create Shield Blob <b>|</b> Alt Click = Remove Blob"
|
||||
src << "Attempting to talk will send a message to all other overminds, allowing you to coordinate with them."
|
||||
|
||||
/datum/action/innate/blob_earlyhelp
|
||||
name = "Blob Help"
|
||||
button_icon_state = "blob"
|
||||
/datum/action/innate/blob
|
||||
background_icon_state = "bg_alien"
|
||||
|
||||
/datum/action/innate/blob_earlyhelp/CheckRemoval()
|
||||
/datum/action/innate/blob/CheckRemoval()
|
||||
if(ticker.mode.name != "blob" || !ishuman(owner))
|
||||
return 1
|
||||
var/datum/game_mode/blob/B = ticker.mode
|
||||
@@ -253,8 +251,28 @@
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/datum/action/innate/blob/earlyhelp
|
||||
name = "Blob Help"
|
||||
button_icon_state = "blob"
|
||||
|
||||
/datum/action/innate/blob_earlyhelp/Activate()
|
||||
owner << "<b>You are a blob!</b>"
|
||||
owner << "You will shortly burst, and should find a quiet place to do so, out of sight of the station."
|
||||
owner << "Alternatively, you could burst near a place that would hinder the station, such as telecomms or science."
|
||||
owner << "Once you burst, you can get additional information by <b>pressing this button again.</b>"
|
||||
|
||||
/datum/action/innate/blob/earlycomm
|
||||
name = "Blob Communication"
|
||||
button_icon_state = "blob_comm"
|
||||
|
||||
/datum/action/innate/blob/earlycomm/Activate()
|
||||
var/msg = stripped_input(owner, "What do you wish to tell your fellow blobs?", null, "")
|
||||
if(msg && owner)
|
||||
var/mob/living/carbon/human/O = owner
|
||||
var/spanned_message = O.say_quote(msg, O.get_spans())
|
||||
var/rendered = "<span class='big'><font color=\"#EE4000\"><b>\[Blob Telepathy\] [O.real_name]</b> [spanned_message]</font></span>"
|
||||
var/datum/game_mode/blob/B = ticker.mode
|
||||
B.show_message("[rendered]")
|
||||
for(var/mob/M in mob_list)
|
||||
if(isobserver(M))
|
||||
M << "<a href='?src=\ref[M];follow=\ref[O]'>(F)</a> [rendered]"
|
||||
@@ -300,8 +300,10 @@ var/list/slot2type = list("head" = /obj/item/clothing/head/changeling, "wear_mas
|
||||
/datum/changeling/New(var/gender=FEMALE)
|
||||
..()
|
||||
var/honorific
|
||||
if(gender == FEMALE) honorific = "Ms."
|
||||
else honorific = "Mr."
|
||||
if(gender == FEMALE)
|
||||
honorific = "Ms."
|
||||
else
|
||||
honorific = "Mr."
|
||||
if(possible_changeling_IDs.len)
|
||||
changelingID = pick(possible_changeling_IDs)
|
||||
possible_changeling_IDs -= changelingID
|
||||
|
||||
@@ -82,7 +82,8 @@ var/list/datum/dna/hivemind_bank = list()
|
||||
return
|
||||
|
||||
var/S = input("Select a DNA absorb from the air: ", "Absorb DNA", null) as null|anything in names
|
||||
if(!S) return
|
||||
if(!S)
|
||||
return
|
||||
var/datum/changelingprofile/chosen_prof = names[S]
|
||||
if(!chosen_prof)
|
||||
return
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
|
||||
var/uplink_contents // the contents of the uplink
|
||||
|
||||
proc/assign_objectives(var/datum/mind/traitor)
|
||||
..()
|
||||
/datum/faction/syndicate/proc/assign_objectives(var/datum/mind/traitor)
|
||||
..()
|
||||
|
||||
|
||||
/* ----- Begin defining syndicate factions ------ */
|
||||
|
||||
@@ -316,7 +316,7 @@
|
||||
/obj/item/device/firing_pin/alien/pin_auth(mob/living/user)
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(H.dna.species.id == "human") //stealth lizard buff go
|
||||
if(H.dna.species.id != "abductor")
|
||||
return 0
|
||||
return 1
|
||||
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
/datum/round_event_control/slaughter
|
||||
name = "Spawn Slaughter Demon"
|
||||
typepath = /datum/round_event/slaughter
|
||||
weight = 0 //Admin only
|
||||
weight = 1 //Very rare
|
||||
max_occurrences = 1
|
||||
earliest_start = 30 //Spawn later with more blood, hopefully
|
||||
earliest_start = 6000 //Let a couple people die first
|
||||
|
||||
|
||||
|
||||
|
||||
+841
-838
File diff suppressed because it is too large
Load Diff
@@ -57,19 +57,19 @@
|
||||
wizard.current.stat = 2
|
||||
continue
|
||||
wizards_alive++
|
||||
if(!time_checked)
|
||||
if(!time_checked)
|
||||
time_checked = world.time
|
||||
if(bullshit_mode)
|
||||
if(world.time > time_checked + time_check)
|
||||
max_mages = INFINITY
|
||||
time_checked = world.time
|
||||
make_more_mages()
|
||||
make_more_mages()
|
||||
return ..()
|
||||
if (wizards_alive)
|
||||
if(world.time > time_checked + time_check && (mages_made < max_mages))
|
||||
time_checked = world.time
|
||||
make_more_mages()
|
||||
|
||||
|
||||
else
|
||||
if(mages_made >= max_mages)
|
||||
finished = 1
|
||||
@@ -137,7 +137,8 @@
|
||||
..(1)
|
||||
|
||||
/datum/game_mode/wizard/raginmages/proc/makeBody(mob/dead/observer/G_found) // Uses stripped down and bastardized code from respawn character
|
||||
if(!G_found || !G_found.key) return
|
||||
if(!G_found || !G_found.key)
|
||||
return
|
||||
|
||||
//First we spawn a dude.
|
||||
var/mob/living/carbon/human/new_character = new(pick(latejoin))//The mob being spawned.
|
||||
|
||||
@@ -159,11 +159,16 @@
|
||||
|
||||
|
||||
/obj/proc/check_access_list(list/L)
|
||||
if(!src.req_access && !src.req_one_access) return 1
|
||||
if(!istype(src.req_access, /list)) return 1
|
||||
if(!src.req_access.len && (!src.req_one_access || !src.req_one_access.len)) return 1
|
||||
if(!L) return 0
|
||||
if(!istype(L, /list)) return 0
|
||||
if(!src.req_access && !src.req_one_access)
|
||||
return 1
|
||||
if(!istype(src.req_access, /list))
|
||||
return 1
|
||||
if(!src.req_access.len && (!src.req_one_access || !src.req_one_access.len))
|
||||
return 1
|
||||
if(!L)
|
||||
return 0
|
||||
if(!istype(L, /list))
|
||||
return 0
|
||||
for(var/req in src.req_access)
|
||||
if(!(req in L)) //doesn't have this access
|
||||
return 0
|
||||
@@ -437,7 +442,8 @@
|
||||
|
||||
/obj/item/proc/GetJobName() //Used in secHUD icon generation
|
||||
var/obj/item/weapon/card/id/I = GetID()
|
||||
if(!I) return
|
||||
if(!I)
|
||||
return
|
||||
var/jobName = I.assignment
|
||||
if(jobName in get_all_job_icons()) //Check if the job has a hud icon
|
||||
return jobName
|
||||
|
||||
@@ -14,7 +14,8 @@ AI
|
||||
minimal_player_age = 30
|
||||
|
||||
/datum/job/ai/equip(mob/living/carbon/human/H)
|
||||
if(!H) return 0
|
||||
if(!H)
|
||||
return 0
|
||||
|
||||
/datum/job/ai/config_check()
|
||||
if(config && config.allow_ai)
|
||||
@@ -36,5 +37,6 @@ Cyborg
|
||||
minimal_player_age = 21
|
||||
|
||||
/datum/job/cyborg/equip(mob/living/carbon/human/H)
|
||||
if(!H) return 0
|
||||
if(!H)
|
||||
return 0
|
||||
return H.Robotize()
|
||||
|
||||
@@ -4,7 +4,8 @@ var/list/whitelist
|
||||
|
||||
/proc/load_whitelist()
|
||||
whitelist = file2list(WHITELISTFILE)
|
||||
if(!whitelist.len) whitelist = null
|
||||
if(!whitelist.len)
|
||||
whitelist = null
|
||||
|
||||
/proc/check_whitelist(mob/M /*, var/rank*/)
|
||||
if(!whitelist)
|
||||
|
||||
@@ -343,32 +343,26 @@
|
||||
send_signal(device_id, list("checks" = text2num(params["val"])^2))
|
||||
. = TRUE
|
||||
if("set_external_pressure")
|
||||
var/value = text2num(params["value"])
|
||||
if(value != null)
|
||||
send_signal(device_id, list("set_external_pressure" = value))
|
||||
var/target = input("New target pressure:", name, alarm_area.air_vent_info[device_id]["external"]) as num|null
|
||||
if(!isnull(target) && !..())
|
||||
send_signal(device_id, list("set_external_pressure" = target))
|
||||
. = TRUE
|
||||
else
|
||||
value = input("New target pressure:", name, alarm_area.air_vent_info[device_id]["external"]) as num|null
|
||||
. = .(action, params + list("value" = value))
|
||||
if("reset_external_pressure")
|
||||
send_signal(device_id, list("reset_external_pressure"))
|
||||
. = TRUE
|
||||
if("threshold")
|
||||
var/env = params["env"]
|
||||
var/name = params["var"]
|
||||
var/value = text2num(params["value"])
|
||||
var/datum/tlv/tlv = TLV[env]
|
||||
if(isnull(tlv))
|
||||
return
|
||||
if(value != null)
|
||||
var/value = input("New [name] for [env]:", name, tlv.vars[name]) as num|null
|
||||
if(!isnull(value) && !..())
|
||||
if(value < 0)
|
||||
tlv.vars[name] = -1
|
||||
else
|
||||
tlv.vars[name] = round(value, 0.01)
|
||||
. = TRUE
|
||||
else
|
||||
value = input("New [name] for [env]:", name, tlv.vars[name]) as num|null
|
||||
. = .(action, params + list("value" = value))
|
||||
if("screen")
|
||||
screen = text2num(params["screen"])
|
||||
. = TRUE
|
||||
|
||||
@@ -296,8 +296,8 @@ update_flag
|
||||
return
|
||||
switch(action)
|
||||
if("relabel")
|
||||
var/label = params["label"]
|
||||
if(label)
|
||||
var/label = input("New canister label:", name) as null|anything in label2types
|
||||
if(label && !..())
|
||||
var/newtype = label2types[label]
|
||||
if(newtype)
|
||||
var/obj/machinery/portable_atmospherics/canister/replacement = new newtype(loc)
|
||||
@@ -305,26 +305,27 @@ update_flag
|
||||
replacement.update_icon()
|
||||
replacement.interact(usr)
|
||||
qdel(src)
|
||||
else
|
||||
label = input("New canister label:", name) as null|anything in label2types
|
||||
.(action, list("label" = label))
|
||||
if("pressure")
|
||||
var/pressure = params["pressure"]
|
||||
if(pressure == "reset")
|
||||
release_pressure = CAN_DEFAULT_RELEASE_PRESSURE
|
||||
pressure = CAN_DEFAULT_RELEASE_PRESSURE
|
||||
. = TRUE
|
||||
else if(pressure == "min")
|
||||
release_pressure = CAN_MIN_RELEASE_PRESSURE
|
||||
pressure = CAN_MIN_RELEASE_PRESSURE
|
||||
. = TRUE
|
||||
else if(pressure == "max")
|
||||
release_pressure = CAN_MAX_RELEASE_PRESSURE
|
||||
pressure = CAN_MAX_RELEASE_PRESSURE
|
||||
. = TRUE
|
||||
else if(pressure == "input")
|
||||
pressure = input("New release pressure ([CAN_MIN_RELEASE_PRESSURE]-[CAN_MAX_RELEASE_PRESSURE] kPa):", name, release_pressure) as num|null
|
||||
. = .(action, list("pressure" = pressure))
|
||||
if(!isnull(pressure) && !..())
|
||||
. = TRUE
|
||||
else if(text2num(pressure) != null)
|
||||
release_pressure = Clamp(round(text2num(pressure)), CAN_MIN_RELEASE_PRESSURE, CAN_MAX_RELEASE_PRESSURE)
|
||||
pressure = text2num(pressure)
|
||||
. = TRUE
|
||||
if(.)
|
||||
release_pressure = Clamp(round(pressure), CAN_MIN_RELEASE_PRESSURE, CAN_MAX_RELEASE_PRESSURE)
|
||||
investigate_log("was set to [release_pressure] kPa by [key_name(usr)]", "atmos")
|
||||
if("valve")
|
||||
var/logmsg
|
||||
valve_open = !valve_open
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
assembly.state = 4
|
||||
cameranet.cameras += src
|
||||
cameranet.addCamera(src)
|
||||
add_to_proximity_list(src, 1) //1 was default of everything
|
||||
/* // Use this to look for cameras that have the same c_tag.
|
||||
for(var/obj/machinery/camera/C in cameranet.cameras)
|
||||
var/list/tempnetwork = C.network&src.network
|
||||
|
||||
@@ -5,6 +5,13 @@
|
||||
var/area/ai_monitored/area_motion = null
|
||||
var/alarm_delay = 30 // Don't forget, there's another 3 seconds in queueAlarm()
|
||||
|
||||
/obj/machinery/camera/Move()
|
||||
remove_from_proximity_list(src, 1)
|
||||
..()
|
||||
|
||||
/obj/machinery/camera/Destroy()
|
||||
remove_from_proximity_list(src, 1)
|
||||
..()
|
||||
|
||||
/obj/machinery/camera/process()
|
||||
// motion camera event loop
|
||||
|
||||
@@ -85,7 +85,8 @@
|
||||
ai_actual_track(target)
|
||||
|
||||
/mob/living/silicon/ai/proc/ai_actual_track(mob/living/target)
|
||||
if(!istype(target)) return
|
||||
if(!istype(target))
|
||||
return
|
||||
var/mob/living/silicon/ai/U = usr
|
||||
|
||||
U.cameraFollow = target
|
||||
|
||||
@@ -216,14 +216,11 @@
|
||||
signal.data += list("tag" = output_tag, "power_toggle" = TRUE)
|
||||
. = TRUE
|
||||
if("pressure")
|
||||
var/pressure = text2num(params["pressure"])
|
||||
if(pressure != null)
|
||||
pressure = Clamp(pressure, 0, 50 * ONE_ATMOSPHERE)
|
||||
signal.data += list("tag" = output_tag, "set_internal_pressure" = pressure)
|
||||
var/target = input("New target pressure:", name, output_info["internal"]) as num|null
|
||||
if(!isnull(target) && !..())
|
||||
target = Clamp(target, 0, 50 * ONE_ATMOSPHERE)
|
||||
signal.data += list("tag" = output_tag, "set_internal_pressure" = target)
|
||||
. = TRUE
|
||||
else
|
||||
pressure = input("New output pressure:", name, input_info["internal"]) as num|null
|
||||
. = .(action, params + list("pressure" = pressure))
|
||||
radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
|
||||
|
||||
/obj/machinery/computer/atmos_control/tank/receive_signal(datum/signal/signal)
|
||||
|
||||
@@ -102,7 +102,8 @@ var/time_last_changed_position = 0
|
||||
|
||||
user.set_machine(src)
|
||||
var/dat
|
||||
if(!ticker) return
|
||||
if(!ticker)
|
||||
return
|
||||
if (mode == 1) // accessing crew manifest
|
||||
var/crew = ""
|
||||
for(var/datum/data/record/t in sortRecord(data_core.general))
|
||||
|
||||
@@ -88,9 +88,12 @@
|
||||
if(viable_occupant.has_dna() && (!(viable_occupant.disabilities & NOCLONE) || (connected.scan_level == 3))) //occupent is viable for dna modification
|
||||
occupant_status += "[viable_occupant.name] => "
|
||||
switch(viable_occupant.stat)
|
||||
if(CONSCIOUS) occupant_status += "<span class='good'>Conscious</span>"
|
||||
if(UNCONSCIOUS) occupant_status += "<span class='average'>Unconscious</span>"
|
||||
else occupant_status += "<span class='bad'>DEAD</span>"
|
||||
if(CONSCIOUS)
|
||||
occupant_status += "<span class='good'>Conscious</span>"
|
||||
if(UNCONSCIOUS)
|
||||
occupant_status += "<span class='average'>Unconscious</span>"
|
||||
else
|
||||
occupant_status += "<span class='bad'>DEAD</span>"
|
||||
occupant_status += "</div></div>"
|
||||
occupant_status += "<div class='line'><div class='statusLabel'>Health:</div><div class='progressBar'><div style='width: [viable_occupant.health]%;' class='progressFill good'></div></div><div class='statusValue'>[viable_occupant.health] %</div></div>"
|
||||
occupant_status += "<div class='line'><div class='statusLabel'>Radiation Level:</div><div class='progressBar'><div style='width: [viable_occupant.radiation]%;' class='progressFill bad'></div></div><div class='statusValue'>[viable_occupant.radiation] %</div></div>"
|
||||
@@ -133,10 +136,14 @@
|
||||
stddev = RADIATION_ACCURACY_MULTIPLIER/radduration
|
||||
var/chance_to_hit
|
||||
switch(stddev) //hardcoded values from a z-table for a normal distribution
|
||||
if(0 to 0.25) chance_to_hit = ">95 %"
|
||||
if(0.25 to 0.5) chance_to_hit = "68-95 %"
|
||||
if(0.5 to 0.75) chance_to_hit = "55-68 %"
|
||||
else chance_to_hit = "<38 %"
|
||||
if(0 to 0.25)
|
||||
chance_to_hit = ">95 %"
|
||||
if(0.25 to 0.5)
|
||||
chance_to_hit = "68-95 %"
|
||||
if(0.5 to 0.75)
|
||||
chance_to_hit = "55-68 %"
|
||||
else
|
||||
chance_to_hit = "<38 %"
|
||||
status += "<div class='line'><div class='statusLabel'>Pulse Duration:</div><div class='statusValue'>[radduration]</div></div>"
|
||||
status += "<div class='line'><div class='statusLabel'> \> Accuracy:</div><div class='statusValue'>[chance_to_hit]</div></div>"
|
||||
status += "<br></div>" // Close statusDisplay div
|
||||
@@ -147,13 +154,20 @@
|
||||
buttons += "<span class='linkOff'>[connected.locked ? "Unlock" : "Lock"] Scanner</span> "
|
||||
else
|
||||
buttons += "<a href='?src=\ref[src];task=togglelock;'>[connected.locked ? "Unlock" : "Lock"] Scanner</a> "
|
||||
else buttons += "<span class='linkOff'>Open Scanner</span> <span class='linkOff'>Lock Scanner</span> "
|
||||
if(viable_occupant) buttons += "<a href='?src=\ref[src];task=rejuv'>Inject Rejuvenators</a> "
|
||||
else buttons += "<span class='linkOff'>Inject Rejuvenators</span> "
|
||||
if(diskette) buttons += "<a href='?src=\ref[src];task=ejectdisk'>Eject Disk</a> "
|
||||
else buttons += "<span class='linkOff'>Eject Disk</span> "
|
||||
if(current_screen == "buffer") buttons += "<a href='?src=\ref[src];task=screen;text=mainmenu;'>Radiation Emitter Menu</a> "
|
||||
else buttons += "<a href='?src=\ref[src];task=screen;text=buffer;'>Buffer Menu</a> "
|
||||
else
|
||||
buttons += "<span class='linkOff'>Open Scanner</span> <span class='linkOff'>Lock Scanner</span> "
|
||||
if(viable_occupant)
|
||||
buttons += "<a href='?src=\ref[src];task=rejuv'>Inject Rejuvenators</a> "
|
||||
else
|
||||
buttons += "<span class='linkOff'>Inject Rejuvenators</span> "
|
||||
if(diskette)
|
||||
buttons += "<a href='?src=\ref[src];task=ejectdisk'>Eject Disk</a> "
|
||||
else
|
||||
buttons += "<span class='linkOff'>Eject Disk</span> "
|
||||
if(current_screen == "buffer")
|
||||
buttons += "<a href='?src=\ref[src];task=screen;text=mainmenu;'>Radiation Emitter Menu</a> "
|
||||
else
|
||||
buttons += "<a href='?src=\ref[src];task=screen;text=buffer;'>Buffer Menu</a> "
|
||||
|
||||
switch(current_screen)
|
||||
if("working")
|
||||
@@ -171,11 +185,15 @@
|
||||
var/list/buffer_slot = buffer[i]
|
||||
if( !buffer_slot || !buffer_slot.len || !buffer_slot["name"] || !((buffer_slot["UI"] && buffer_slot["UE"]) || buffer_slot["SE"]) )
|
||||
temp_html += "<br>\tNo Data"
|
||||
if(viable_occupant) temp_html += "<br><a href='?src=\ref[src];task=setbuffer;num=[i];'>Save to Buffer</a> "
|
||||
else temp_html += "<br><span class='linkOff'>Save to Buffer</span> "
|
||||
if(viable_occupant)
|
||||
temp_html += "<br><a href='?src=\ref[src];task=setbuffer;num=[i];'>Save to Buffer</a> "
|
||||
else
|
||||
temp_html += "<br><span class='linkOff'>Save to Buffer</span> "
|
||||
temp_html += "<span class='linkOff'>Clear Buffer</span> "
|
||||
if(diskette) temp_html += "<a href='?src=\ref[src];task=loaddisk;num=[i];'>Load from Disk</a> "
|
||||
else temp_html += "<span class='linkOff'>Load from Disk</span> "
|
||||
if(diskette)
|
||||
temp_html += "<a href='?src=\ref[src];task=loaddisk;num=[i];'>Load from Disk</a> "
|
||||
else
|
||||
temp_html += "<span class='linkOff'>Load from Disk</span> "
|
||||
temp_html += "<span class='linkOff'>Save to Disk</span> "
|
||||
else
|
||||
var/ui = buffer_slot["UI"]
|
||||
@@ -189,46 +207,68 @@
|
||||
if(ue && name && blood_type)
|
||||
temp_html += "<br>\tBlood Type: [blood_type]"
|
||||
temp_html += "<br>\tUE: [ue] "
|
||||
if(viable_occupant) temp_html += "<a href='?src=\ref[src];task=transferbuffer;num=[i];text=ue'>Occupant</a> "
|
||||
else temp_html += "<span class='linkOff'>Occupant</span>"
|
||||
if(viable_occupant)
|
||||
temp_html += "<a href='?src=\ref[src];task=transferbuffer;num=[i];text=ue'>Occupant</a> "
|
||||
else
|
||||
temp_html += "<span class='linkOff'>Occupant</span>"
|
||||
temp_html += "<a href='?src=\ref[src];task=setdelayed;num=[i];delayaction=[SCANNER_ACTION_UE]'>Occupant:Delayed</a> "
|
||||
if(injectorready) temp_html += "<a href='?src=\ref[src];task=injector;num=[i];text=ue'>Injector</a>"
|
||||
else temp_html += "<span class='linkOff'>Injector</span>"
|
||||
if(injectorready)
|
||||
temp_html += "<a href='?src=\ref[src];task=injector;num=[i];text=ue'>Injector</a>"
|
||||
else
|
||||
temp_html += "<span class='linkOff'>Injector</span>"
|
||||
else
|
||||
temp_html += "<br>\tBlood Type: No Data"
|
||||
temp_html += "<br>\tUE: No Data"
|
||||
if(ui)
|
||||
temp_html += "<br>\tUI: [ui] "
|
||||
if(viable_occupant) temp_html += "<a href='?src=\ref[src];task=transferbuffer;num=[i];text=ui'>Occupant</a> "
|
||||
else temp_html += "<span class='linkOff'>Occupant</span>"
|
||||
if(viable_occupant)
|
||||
temp_html += "<a href='?src=\ref[src];task=transferbuffer;num=[i];text=ui'>Occupant</a> "
|
||||
else
|
||||
temp_html += "<span class='linkOff'>Occupant</span>"
|
||||
temp_html += "<a href='?src=\ref[src];task=setdelayed;num=[i];delayaction=[SCANNER_ACTION_UI]'>Occupant:Delayed</a> "
|
||||
if(injectorready) temp_html += "<a href='?src=\ref[src];task=injector;num=[i];text=ui'>Injector</a>"
|
||||
else temp_html += "<span class='linkOff'>Injector</span>"
|
||||
if(injectorready)
|
||||
temp_html += "<a href='?src=\ref[src];task=injector;num=[i];text=ui'>Injector</a>"
|
||||
else
|
||||
temp_html += "<span class='linkOff'>Injector</span>"
|
||||
else
|
||||
temp_html += "<br>\tUI: No Data"
|
||||
if(ue && name && blood_type && ui)
|
||||
temp_html += "<br>\tUI+UE: [ui]/[ue] "
|
||||
if(viable_occupant) temp_html += "<a href='?src=\ref[src];task=transferbuffer;num=[i];text=mixed'>Occupant</a> "
|
||||
else temp_html += "<span class='linkOff'>Occupant</span>"
|
||||
if(viable_occupant)
|
||||
temp_html += "<a href='?src=\ref[src];task=transferbuffer;num=[i];text=mixed'>Occupant</a> "
|
||||
else
|
||||
temp_html += "<span class='linkOff'>Occupant</span>"
|
||||
temp_html += "<a href='?src=\ref[src];task=setdelayed;num=[i];delayaction=[SCANNER_ACTION_MIXED]'>Occupant:Delayed</a> "
|
||||
if(injectorready) temp_html += "<a href='?src=\ref[src];task=injector;num=[i];text=mixed'>UI+UE Injector</a>"
|
||||
else temp_html += "<span class='linkOff'>UI+UE Injector</span>"
|
||||
if(injectorready)
|
||||
temp_html += "<a href='?src=\ref[src];task=injector;num=[i];text=mixed'>UI+UE Injector</a>"
|
||||
else
|
||||
temp_html += "<span class='linkOff'>UI+UE Injector</span>"
|
||||
if(se)
|
||||
temp_html += "<br>\tSE: [se] "
|
||||
if(viable_occupant) temp_html += "<a href='?src=\ref[src];task=transferbuffer;num=[i];text=se'>Occupant</a> "
|
||||
else temp_html += "<span class='linkOff'>Occupant</span> "
|
||||
if(viable_occupant)
|
||||
temp_html += "<a href='?src=\ref[src];task=transferbuffer;num=[i];text=se'>Occupant</a> "
|
||||
else
|
||||
temp_html += "<span class='linkOff'>Occupant</span> "
|
||||
temp_html += "<a href='?src=\ref[src];task=setdelayed;num=[i];delayaction=[SCANNER_ACTION_SE]'>Occupant:Delayed</a> "
|
||||
if(injectorready) temp_html += "<a href='?src=\ref[src];task=injector;num=[i];text=se'>Injector</a>"
|
||||
else temp_html += "<span class='linkOff'>Injector</span>"
|
||||
if(injectorready)
|
||||
temp_html += "<a href='?src=\ref[src];task=injector;num=[i];text=se'>Injector</a>"
|
||||
else
|
||||
temp_html += "<span class='linkOff'>Injector</span>"
|
||||
else
|
||||
temp_html += "<br>\tSE: No Data"
|
||||
if(viable_occupant) temp_html += "<br><a href='?src=\ref[src];task=setbuffer;num=[i];'>Save to Buffer</a> "
|
||||
else temp_html += "<br><span class='linkOff'>Save to Buffer</span> "
|
||||
if(viable_occupant)
|
||||
temp_html += "<br><a href='?src=\ref[src];task=setbuffer;num=[i];'>Save to Buffer</a> "
|
||||
else
|
||||
temp_html += "<br><span class='linkOff'>Save to Buffer</span> "
|
||||
temp_html += "<a href='?src=\ref[src];task=clearbuffer;num=[i];'>Clear Buffer</a> "
|
||||
if(diskette) temp_html += "<a href='?src=\ref[src];task=loaddisk;num=[i];'>Load from Disk</a> "
|
||||
else temp_html += "<span class='linkOff'>Load from Disk</span> "
|
||||
if(diskette && !diskette.read_only) temp_html += "<a href='?src=\ref[src];task=savedisk;num=[i];'>Save to Disk</a> "
|
||||
else temp_html += "<span class='linkOff'>Save to Disk</span> "
|
||||
if(diskette)
|
||||
temp_html += "<a href='?src=\ref[src];task=loaddisk;num=[i];'>Load from Disk</a> "
|
||||
else
|
||||
temp_html += "<span class='linkOff'>Load from Disk</span> "
|
||||
if(diskette && !diskette.read_only)
|
||||
temp_html += "<a href='?src=\ref[src];task=savedisk;num=[i];'>Save to Disk</a> "
|
||||
else
|
||||
temp_html += "<span class='linkOff'>Save to Disk</span> "
|
||||
else
|
||||
temp_html += status
|
||||
temp_html += buttons
|
||||
@@ -292,9 +332,11 @@
|
||||
var/last_change
|
||||
switch(href_list["task"])
|
||||
if("togglelock")
|
||||
if(connected) connected.locked = !connected.locked
|
||||
if(connected)
|
||||
connected.locked = !connected.locked
|
||||
if("toggleopen")
|
||||
if(connected) connected.toggle_open(usr)
|
||||
if(connected)
|
||||
connected.toggle_open(usr)
|
||||
if("setduration")
|
||||
if(!num)
|
||||
num = round(input(usr, "Choose pulse duration:", "Input an Integer", null) as num|null)
|
||||
@@ -471,9 +513,12 @@
|
||||
/obj/machinery/computer/scan_consolenew/proc/scramble(input,rs,rd)
|
||||
var/length = length(input)
|
||||
var/ran = gaussian(0, rs*RADIATION_STRENGTH_MULTIPLIER)
|
||||
if(ran == 0) ran = pick(-1,1) //hacky, statistically should almost never happen. 0-change makes people mad though
|
||||
else if(ran < 0) ran = round(ran) //negative, so floor it
|
||||
else ran = -round(-ran) //positive, so ceiling it
|
||||
if(ran == 0)
|
||||
ran = pick(-1,1) //hacky, statistically should almost never happen. 0-change makes people mad though
|
||||
else if(ran < 0)
|
||||
ran = round(ran) //negative, so floor it
|
||||
else
|
||||
ran = -round(-ran) //positive, so ceiling it
|
||||
return num2hex(Wrap(hex2num(input)+ran, 0, 16**length), length)
|
||||
|
||||
/obj/machinery/computer/scan_consolenew/proc/randomize_radiation_accuracy(position_we_were_supposed_to_hit, radduration, number_of_blocks)
|
||||
@@ -492,7 +537,7 @@
|
||||
var/list/buffer_slot = buffer[buffer_num]
|
||||
var/mob/living/carbon/viable_occupant = get_viable_occupant()
|
||||
if(istype(buffer_slot))
|
||||
viable_occupant.radiation += rand(10/(connected.damage_coeff ** 2),25/(connected.damage_coeff ** 2))
|
||||
viable_occupant.radiation += rand(10/(connected.damage_coeff ** 2),25/(connected.damage_coeff ** 2))
|
||||
//15 and 40 are just magic numbers that were here before so i didnt touch them, they are initial boundaries of damage
|
||||
//Each laser level reduces damage by lvl^2, so no effect on 1 lvl, 4 times less damage on 2 and 9 times less damage on 3
|
||||
//Numbers are this high because other way upgrading laser is just not worth the hassle, and i cant think of anything better to inmrove
|
||||
|
||||
@@ -171,7 +171,8 @@
|
||||
dat += "<br><b>Medical Robots:</b>"
|
||||
var/bdat = null
|
||||
for(var/mob/living/simple_animal/bot/medbot/M in living_mob_list)
|
||||
if(M.z != src.z) continue //only find medibots on the same z-level as the computer
|
||||
if(M.z != src.z)
|
||||
continue //only find medibots on the same z-level as the computer
|
||||
var/turf/bl = get_turf(M)
|
||||
if(bl) //if it can't find a turf for the medibot, then it probably shouldn't be showing up
|
||||
bdat += "[M.name] - <b>\[[bl.x],[bl.y]\]</b> - [M.on ? "Online" : "Offline"]<br>"
|
||||
|
||||
@@ -35,8 +35,10 @@
|
||||
var/turf/Tr = null
|
||||
for(var/obj/item/weapon/implant/chem/C in tracked_implants)
|
||||
Tr = get_turf(C)
|
||||
if((Tr) && (Tr.z != src.z)) continue//Out of range
|
||||
if(!C.implanted) continue
|
||||
if((Tr) && (Tr.z != src.z))
|
||||
continue//Out of range
|
||||
if(!C.implanted)
|
||||
continue
|
||||
dat += "[C.imp_in.name] | Remaining Units: [C.reagents.total_volume] | Inject: "
|
||||
dat += "<A href='?src=\ref[src];inject1=\ref[C]'>(<font class='bad'>(1)</font>)</A>"
|
||||
dat += "<A href='?src=\ref[src];inject5=\ref[C]'>(<font class='bad'>(5)</font>)</A>"
|
||||
@@ -112,14 +114,17 @@
|
||||
inserted_id.goal = num
|
||||
else if(href_list["inject1"])
|
||||
var/obj/item/weapon/implant/I = locate(href_list["inject1"])
|
||||
if(I) I.activate(1)
|
||||
if(I)
|
||||
I.activate(1)
|
||||
else if(href_list["inject5"])
|
||||
var/obj/item/weapon/implant/I = locate(href_list["inject5"])
|
||||
if(I) I.activate(5)
|
||||
if(I)
|
||||
I.activate(5)
|
||||
|
||||
else if(href_list["inject10"])
|
||||
var/obj/item/weapon/implant/I = locate(href_list["inject10"])
|
||||
if(I) I.activate(10)
|
||||
if(I)
|
||||
I.activate(10)
|
||||
|
||||
else if(href_list["lock"])
|
||||
if(src.allowed(usr))
|
||||
|
||||
@@ -8,7 +8,8 @@
|
||||
|
||||
|
||||
/obj/machinery/computer/emergency_shuttle/attackby(obj/item/weapon/card/W, mob/user, params)
|
||||
if(stat & (BROKEN|NOPOWER)) return
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
if(!istype(W, /obj/item/weapon/card))
|
||||
return
|
||||
if(SSshuttle.emergency.mode != SHUTTLE_DOCKED)
|
||||
|
||||
@@ -1026,7 +1026,8 @@ var/list/airlock_overlays = list()
|
||||
return 1
|
||||
|
||||
/obj/machinery/door/airlock/proc/prison_open()
|
||||
if(emagged) return
|
||||
if(emagged)
|
||||
return
|
||||
src.locked = 0
|
||||
src.open()
|
||||
src.locked = 1
|
||||
@@ -1055,7 +1056,8 @@ var/list/airlock_overlays = list()
|
||||
optionlist = list("Public", "Engineering", "Atmospherics", "Security", "Command", "Medical", "Research", "Mining", "Maintenance", "External", "High Security")
|
||||
|
||||
var/paintjob = input(user, "Please select a paintjob for this airlock.") in optionlist
|
||||
if((!in_range(src, usr) && src.loc != usr) || !W.use(user)) return
|
||||
if((!in_range(src, usr) && src.loc != usr) || !W.use(user))
|
||||
return
|
||||
switch(paintjob)
|
||||
if("Public")
|
||||
icon = 'icons/obj/doors/airlocks/station/public.dmi'
|
||||
@@ -1111,11 +1113,6 @@ var/list/airlock_overlays = list()
|
||||
//Airlock is passable if it is open (!density), bot has access, and is not bolted shut or powered off)
|
||||
return !density || (check_access(ID) && !locked && hasPower())
|
||||
|
||||
/obj/machinery/door/airlock/HasProximity(atom/movable/AM as mob|obj)
|
||||
for (var/obj/A in contents)
|
||||
A.HasProximity(AM)
|
||||
return
|
||||
|
||||
/obj/machinery/door/airlock/emag_act(mob/user)
|
||||
if(!operating && density && hasPower() && !emagged)
|
||||
operating = 1
|
||||
|
||||
@@ -62,7 +62,8 @@
|
||||
// if it's less than 0, open door, reset timer
|
||||
// update the door_timer window and the icon
|
||||
/obj/machinery/door_timer/process()
|
||||
if(stat & (NOPOWER|BROKEN)) return
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
if(timing)
|
||||
if(world.time > src.releasetime)
|
||||
Radio.set_frequency(SEC_FREQ)
|
||||
@@ -87,32 +88,40 @@
|
||||
// open/closedoor checks if door_timer has power, if so it checks if the
|
||||
// linked door is open/closed (by density) then opens it/closes it.
|
||||
/obj/machinery/door_timer/proc/timer_start()
|
||||
if(stat & (NOPOWER|BROKEN)) return 0
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return 0
|
||||
|
||||
for(var/obj/machinery/door/window/brigdoor/door in targets)
|
||||
if(door.density) continue
|
||||
if(door.density)
|
||||
continue
|
||||
spawn(0)
|
||||
door.close()
|
||||
|
||||
for(var/obj/structure/closet/secure_closet/brig/C in targets)
|
||||
if(C.broken) continue
|
||||
if(C.opened && !C.close()) continue
|
||||
if(C.broken)
|
||||
continue
|
||||
if(C.opened && !C.close())
|
||||
continue
|
||||
C.locked = 1
|
||||
C.update_icon()
|
||||
return 1
|
||||
|
||||
|
||||
/obj/machinery/door_timer/proc/timer_end()
|
||||
if(stat & (NOPOWER|BROKEN)) return 0
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return 0
|
||||
|
||||
for(var/obj/machinery/door/window/brigdoor/door in targets)
|
||||
if(!door.density) continue
|
||||
if(!door.density)
|
||||
continue
|
||||
spawn(0)
|
||||
door.open()
|
||||
|
||||
for(var/obj/structure/closet/secure_closet/brig/C in targets)
|
||||
if(C.broken) continue
|
||||
if(C.opened) continue
|
||||
if(C.broken)
|
||||
continue
|
||||
if(C.opened)
|
||||
continue
|
||||
C.locked = 0
|
||||
C.update_icon()
|
||||
|
||||
@@ -229,13 +238,15 @@
|
||||
disp2 = "Error"
|
||||
update_display(disp1, disp2)
|
||||
else
|
||||
if(maptext) maptext = ""
|
||||
if(maptext)
|
||||
maptext = ""
|
||||
return
|
||||
|
||||
|
||||
// Adds an icon in case the screen is broken/off, stolen from status_display.dm
|
||||
/obj/machinery/door_timer/proc/set_picture(state)
|
||||
if(maptext) maptext = ""
|
||||
if(maptext)
|
||||
maptext = ""
|
||||
picture_state = state
|
||||
overlays.Cut()
|
||||
overlays += image('icons/obj/status_display.dmi', icon_state=picture_state)
|
||||
|
||||
@@ -115,9 +115,11 @@
|
||||
/obj/machinery/door/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/device/detective_scanner))
|
||||
return
|
||||
if(isrobot(user)) return //borgs can't attack doors open because it conflicts with their AI-like interaction with them.
|
||||
if(isrobot(user))
|
||||
return //borgs can't attack doors open because it conflicts with their AI-like interaction with them.
|
||||
src.add_fingerprint(user)
|
||||
if(operating || emagged) return
|
||||
if(operating || emagged)
|
||||
return
|
||||
if(!Adjacent(user))
|
||||
user = null
|
||||
if(!src.requiresID())
|
||||
|
||||
@@ -40,7 +40,8 @@
|
||||
|
||||
/obj/machinery/door/firedoor/attackby(obj/item/weapon/C, mob/user, params)
|
||||
add_fingerprint(user)
|
||||
if(operating) return//Already doing something.
|
||||
if(operating)
|
||||
return//Already doing something.
|
||||
|
||||
if(istype(C, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/W = C
|
||||
@@ -54,7 +55,8 @@
|
||||
playsound(get_turf(src), 'sound/items/Ratchet.ogg', 50, 1)
|
||||
user.visible_message("<span class='notice'>[user] starts undoing [src]'s bolts...</span>", \
|
||||
"<span class='notice'>You start unfastening [src]'s floor bolts...</span>")
|
||||
if(!do_after(user, 50/C.toolspeed, target = src)) return
|
||||
if(!do_after(user, 50/C.toolspeed, target = src))
|
||||
return
|
||||
playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
user.visible_message("<span class='notice'>[user] unfastens [src]'s bolts.</span>", \
|
||||
"<span class='notice'>You undo [src]'s floor bolts.</span>")
|
||||
@@ -67,7 +69,8 @@
|
||||
return
|
||||
|
||||
if(istype(C, /obj/item/weapon/crowbar) || (istype(C,/obj/item/weapon/twohanded/fireaxe) && C:wielded == 1))
|
||||
if(blocked || operating) return
|
||||
if(blocked || operating)
|
||||
return
|
||||
if(density)
|
||||
open()
|
||||
return
|
||||
|
||||
@@ -3,13 +3,15 @@
|
||||
|
||||
|
||||
/obj/machinery/door/unpowered/Bumped(atom/AM)
|
||||
if(src.locked) return
|
||||
if(src.locked)
|
||||
return
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/door/unpowered/attackby(obj/item/I, mob/user, params)
|
||||
if(src.locked) return
|
||||
if(src.locked)
|
||||
return
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
@@ -26,6 +26,10 @@
|
||||
..() // ..() is EXTREMELY IMPORTANT, never forget to add it
|
||||
bulb = new /obj/item/device/assembly/flash/handheld(src)
|
||||
|
||||
/obj/machinery/flasher/Move()
|
||||
remove_from_proximity_list(src, range)
|
||||
..()
|
||||
|
||||
/obj/machinery/flasher/power_change()
|
||||
if (powered() && anchored && bulb)
|
||||
stat &= ~NOPOWER
|
||||
@@ -127,11 +131,13 @@
|
||||
overlays += "[base_state]-s"
|
||||
anchored = 1
|
||||
power_change()
|
||||
add_to_proximity_list(src, range)
|
||||
else
|
||||
user << "<span class='notice'>[src] can now be moved.</span>"
|
||||
overlays.Cut()
|
||||
anchored = 0
|
||||
power_change()
|
||||
remove_from_proximity_list(src, range)
|
||||
|
||||
else
|
||||
..()
|
||||
@@ -37,13 +37,20 @@
|
||||
|
||||
var/percent = round((beaker.reagents.total_volume / beaker.volume) * 100)
|
||||
switch(percent)
|
||||
if(0 to 9) filling.icon_state = "reagent0"
|
||||
if(10 to 24) filling.icon_state = "reagent10"
|
||||
if(25 to 49) filling.icon_state = "reagent25"
|
||||
if(50 to 74) filling.icon_state = "reagent50"
|
||||
if(75 to 79) filling.icon_state = "reagent75"
|
||||
if(80 to 90) filling.icon_state = "reagent80"
|
||||
if(91 to INFINITY) filling.icon_state = "reagent100"
|
||||
if(0 to 9)
|
||||
filling.icon_state = "reagent0"
|
||||
if(10 to 24)
|
||||
filling.icon_state = "reagent10"
|
||||
if(25 to 49)
|
||||
filling.icon_state = "reagent25"
|
||||
if(50 to 74)
|
||||
filling.icon_state = "reagent50"
|
||||
if(75 to 79)
|
||||
filling.icon_state = "reagent75"
|
||||
if(80 to 90)
|
||||
filling.icon_state = "reagent80"
|
||||
if(91 to INFINITY)
|
||||
filling.icon_state = "reagent100"
|
||||
|
||||
filling.icon += mix_color_from_reagents(beaker.reagents.reagent_list)
|
||||
overlays += filling
|
||||
|
||||
@@ -82,9 +82,11 @@
|
||||
if(command)
|
||||
switch(command)
|
||||
if("set-electriclevel")
|
||||
if(modifier) electricity_level = modifier
|
||||
if(modifier)
|
||||
electricity_level = modifier
|
||||
if("set-magneticfield")
|
||||
if(modifier) magnetic_field = modifier
|
||||
if(modifier)
|
||||
magnetic_field = modifier
|
||||
|
||||
if("add-elec")
|
||||
electricity_level++
|
||||
@@ -104,9 +106,11 @@
|
||||
magnetic_field = 1
|
||||
|
||||
if("set-x")
|
||||
if(modifier) center_x = modifier
|
||||
if(modifier)
|
||||
center_x = modifier
|
||||
if("set-y")
|
||||
if(modifier) center_y = modifier
|
||||
if(modifier)
|
||||
center_y = modifier
|
||||
|
||||
if("N") // NORTH
|
||||
center_y++
|
||||
@@ -124,7 +128,8 @@
|
||||
center_y = rand(-max_dist, max_dist)
|
||||
|
||||
if("set-code")
|
||||
if(modifier) code = modifier
|
||||
if(modifier)
|
||||
code = modifier
|
||||
if("toggle-power")
|
||||
on = !on
|
||||
|
||||
|
||||
@@ -5,7 +5,8 @@
|
||||
set category = "Object"
|
||||
set src in view(1)
|
||||
usr.set_machine(src)
|
||||
if(!mapping) return
|
||||
if(!mapping)
|
||||
return
|
||||
|
||||
log_game("[usr]([usr.key]) used station map L[z] in [src.loc.loc]")
|
||||
|
||||
|
||||
@@ -255,7 +255,8 @@ var/list/obj/machinery/requests_console/allConsoles = list()
|
||||
return
|
||||
|
||||
/obj/machinery/requests_console/Topic(href, href_list)
|
||||
if(..()) return
|
||||
if(..())
|
||||
return
|
||||
usr.set_machine(src)
|
||||
add_fingerprint(usr)
|
||||
|
||||
@@ -291,7 +292,8 @@ var/list/obj/machinery/requests_console/allConsoles = list()
|
||||
screen = 0
|
||||
|
||||
if(href_list["sendAnnouncement"])
|
||||
if(!announcementConsole) return
|
||||
if(!announcementConsole)
|
||||
return
|
||||
minor_announce(message, "[department] Announcement:")
|
||||
news_network.SubmitArticle(message, department, "Station Announcements", null)
|
||||
log_say("[key_name(usr)] has made a station announcement: [message]")
|
||||
@@ -409,7 +411,8 @@ var/list/obj/machinery/requests_console/allConsoles = list()
|
||||
if(9) //authentication
|
||||
screen = 9
|
||||
if(10) //send announcement
|
||||
if(!announcementConsole) return
|
||||
if(!announcementConsole)
|
||||
return
|
||||
screen = 10
|
||||
else //main menu
|
||||
dpt = ""
|
||||
@@ -422,8 +425,10 @@ var/list/obj/machinery/requests_console/allConsoles = list()
|
||||
//Handle silencing the console
|
||||
switch( href_list["setSilent"] )
|
||||
if(null) //skip
|
||||
if("1") silent = 1
|
||||
else silent = 0
|
||||
if("1")
|
||||
silent = 1
|
||||
else
|
||||
silent = 0
|
||||
|
||||
updateUsrDialog()
|
||||
return
|
||||
|
||||
@@ -295,7 +295,8 @@
|
||||
|
||||
var/obj/structure/cable/C = T.get_cable_node()
|
||||
var/datum/powernet/PN
|
||||
if(C) PN = C.powernet // find the powernet of the connected cable
|
||||
if(C)
|
||||
PN = C.powernet // find the powernet of the connected cable
|
||||
|
||||
if(!PN)
|
||||
power = 0
|
||||
|
||||
@@ -217,16 +217,17 @@
|
||||
var/target = params["target"]
|
||||
var/adjust = text2num(params["adjust"])
|
||||
if(target == "input")
|
||||
target = input("New target temperature", name, round(targetTemperature - T0C, 1)) as num|null
|
||||
. = .(action, list("target" = target))
|
||||
else if(text2num(target) != null)
|
||||
targetTemperature = text2num(target) + T0C
|
||||
. = TRUE
|
||||
target = input("New target temperature:", name, round(targetTemperature - T0C, 1)) as num|null
|
||||
if(!isnull(target) && !..())
|
||||
. = TRUE
|
||||
else if(adjust)
|
||||
targetTemperature += adjust
|
||||
target = targetTemperature + adjust
|
||||
. = TRUE
|
||||
else if(text2num(target) != null)
|
||||
target= text2num(target) + T0C
|
||||
. = TRUE
|
||||
if(.)
|
||||
targetTemperature = Clamp(round(targetTemperature, 1),
|
||||
targetTemperature = Clamp(round(target),
|
||||
max(settableTemperatureMedian - settableTemperatureRange, TCMB),
|
||||
settableTemperatureMedian + settableTemperatureRange)
|
||||
if("eject")
|
||||
|
||||
@@ -213,7 +213,7 @@
|
||||
if(istype(holder))
|
||||
if(holder.wires)
|
||||
holder.wires.repair()
|
||||
holder.wires.shuffle()
|
||||
holder.wires.shuffle_wires()
|
||||
holder.defused = 0
|
||||
holder.open_panel = 0
|
||||
holder.update_icon()
|
||||
|
||||
@@ -88,8 +88,8 @@
|
||||
freq_listening = list(COMM_FREQ, ENG_FREQ, SEC_FREQ) //command, engineering, security
|
||||
|
||||
//Common and other radio frequencies for people to freely use
|
||||
New()
|
||||
for(var/i = 1441, i < 1489, i += 2)
|
||||
freq_listening |= i
|
||||
..()
|
||||
/obj/machinery/telecomms/receiver/preset_right/New()
|
||||
for(var/i = 1441, i < 1489, i += 2)
|
||||
freq_listening |= i
|
||||
..()
|
||||
|
||||
|
||||
@@ -189,8 +189,10 @@
|
||||
if (M.timeofdeath + 6000 < world.time)
|
||||
continue
|
||||
var/turf/T = get_turf(M)
|
||||
if(!T) continue
|
||||
if(T.z == ZLEVEL_CENTCOM) continue
|
||||
if(!T)
|
||||
continue
|
||||
if(T.z == ZLEVEL_CENTCOM)
|
||||
continue
|
||||
var/tmpname = M.real_name
|
||||
if(areaindex[tmpname])
|
||||
tmpname = "[tmpname] ([++areaindex[tmpname]])"
|
||||
|
||||
@@ -2,9 +2,6 @@
|
||||
force = 30
|
||||
internal_damage_threshold = 50
|
||||
damage_absorption = list("brute"=0.7,"fire"=1,"bullet"=0.7,"laser"=0.85,"energy"=1,"bomb"=0.8)
|
||||
var/am = "d3c2fbcadca903a41161ccc9df9cf948"
|
||||
var/thrusters = 0
|
||||
var/datum/action/innate/mecha/mech_toggle_thrusters/thrusters_action = new
|
||||
|
||||
/obj/mecha/combat/CheckParts(atom/holder)
|
||||
var/obj/item/weapon/stock_parts/capacitor/C = locate() in holder
|
||||
@@ -36,32 +33,5 @@
|
||||
if(src.occupant && src.occupant.client)
|
||||
src.occupant.client.mouse_pointer_icon = initial(src.occupant.client.mouse_pointer_icon)
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/mecha/combat/Topic(href,href_list)
|
||||
..()
|
||||
var/datum/topic_input/filter = new (href,href_list)
|
||||
if(filter.get("close"))
|
||||
am = null
|
||||
return
|
||||
|
||||
/obj/mecha/combat/Process_Spacemove(movement_dir = 0)
|
||||
if(..())
|
||||
return 1
|
||||
if(thrusters && movement_dir && use_power(step_energy_drain))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/datum/action/innate/mecha/mech_toggle_thrusters
|
||||
name = "Toggle Thrusters"
|
||||
button_icon_state = "mech_thrusters_off"
|
||||
|
||||
/datum/action/innate/mecha/mech_toggle_thrusters/Activate()
|
||||
if(!owner || !chassis || chassis.occupant != owner)
|
||||
return
|
||||
var/obj/mecha/combat/M = chassis
|
||||
if(M.get_charge() > 0)
|
||||
M.thrusters = !M.thrusters
|
||||
button_icon_state = "mech_thrusters_[M.thrusters ? "on" : "off"]"
|
||||
M.log_message("Toggled thrusters.")
|
||||
M.occupant_message("<font color='[M.thrusters?"blue":"red"]'>Thrusters [M.thrusters?"en":"dis"]abled.")
|
||||
|
||||
@@ -10,19 +10,7 @@
|
||||
max_temperature = 30000
|
||||
infra_luminosity = 8
|
||||
force = 40
|
||||
var/defence = 0
|
||||
var/defence_deflect = 35
|
||||
wreckage = /obj/structure/mecha_wreckage/durand
|
||||
var/datum/action/innate/mecha/mech_defence_mode/defense_action = new
|
||||
|
||||
/obj/mecha/combat/durand/relaymove(mob/user,direction)
|
||||
if(defence)
|
||||
if(world.time - last_message > 20)
|
||||
src.occupant_message("<span class='danger'>Unable to move while in defence mode</span>")
|
||||
last_message = world.time
|
||||
return 0
|
||||
. = ..()
|
||||
return
|
||||
|
||||
/obj/mecha/combat/durand/GrantActions(var/mob/living/user, var/human_occupant = 0)
|
||||
..()
|
||||
@@ -33,25 +21,3 @@
|
||||
..()
|
||||
defense_action.Remove(user)
|
||||
|
||||
/obj/mecha/combat/durand/get_stats_part()
|
||||
var/output = ..()
|
||||
output += "<b>Defence mode:</b> [defence?"on":"off"]"
|
||||
return output
|
||||
|
||||
/datum/action/innate/mecha/mech_defence_mode
|
||||
name = "Toggle Defense Mode"
|
||||
button_icon_state = "mech_defense_mode_off"
|
||||
|
||||
/datum/action/innate/mecha/mech_defence_mode/Activate()
|
||||
if(!owner || !chassis || chassis.occupant != owner)
|
||||
return
|
||||
var/obj/mecha/combat/durand/D = chassis
|
||||
D.defence = !D.defence
|
||||
button_icon_state = "mech_defense_mode_[D.defence ? "on" : "off"]"
|
||||
if(D.defence)
|
||||
D.deflect_chance = D.defence_deflect
|
||||
D.occupant_message("<span class='notice'>You enable [D] defence mode.</span>")
|
||||
else
|
||||
D.deflect_chance = initial(D.deflect_chance)
|
||||
D.occupant_message("<span class='danger'>You disable [D] defence mode.</span>")
|
||||
D.log_message("Toggled defence mode.")
|
||||
@@ -9,13 +9,10 @@
|
||||
damage_absorption = list("brute"=0.75,"fire"=1,"bullet"=0.8,"laser"=0.7,"energy"=0.85,"bomb"=1)
|
||||
max_temperature = 25000
|
||||
infra_luminosity = 6
|
||||
var/overload = 0
|
||||
var/overload_coeff = 2
|
||||
wreckage = /obj/structure/mecha_wreckage/gygax
|
||||
internal_damage_threshold = 35
|
||||
max_equip = 3
|
||||
step_energy_drain = 3
|
||||
var/datum/action/innate/mecha/mech_overload_mode/overload_action = new
|
||||
|
||||
/obj/mecha/combat/gygax/dark
|
||||
desc = "A lightweight exosuit, painted in a dark scheme. This model appears to have some modifications."
|
||||
@@ -25,7 +22,7 @@
|
||||
deflect_chance = 15
|
||||
damage_absorption = list("brute"=0.6,"fire"=0.8,"bullet"=0.6,"laser"=0.5,"energy"=0.65,"bomb"=0.8)
|
||||
max_temperature = 35000
|
||||
overload_coeff = 1
|
||||
leg_overload_coeff = 1
|
||||
operation_req_access = list(access_syndicate)
|
||||
wreckage = /obj/structure/mecha_wreckage/gygax/dark
|
||||
max_equip = 4
|
||||
@@ -52,28 +49,6 @@
|
||||
cell.maxcharge = 30000
|
||||
|
||||
|
||||
/obj/mecha/combat/gygax/domove(direction)
|
||||
if(!..())
|
||||
return
|
||||
if(overload)
|
||||
health--
|
||||
if(health < initial(health) - initial(health)/3)
|
||||
overload = 0
|
||||
step_in = initial(step_in)
|
||||
step_energy_drain = initial(step_energy_drain)
|
||||
occupant_message("<span class='danger'>Leg actuators damage threshold exceded. Disabling overload.</span>")
|
||||
|
||||
|
||||
/obj/mecha/combat/gygax/get_stats_part()
|
||||
var/output = ..()
|
||||
output += "<b>Leg actuators overload:</b> [overload?"on":"off"]"
|
||||
return output
|
||||
|
||||
/obj/mecha/combat/gygax/dark/get_stats_part()
|
||||
var/output = ..()
|
||||
output += "<br><b>Thrusters:</b> [thrusters?"on":"off"]"
|
||||
return output
|
||||
|
||||
/obj/mecha/combat/gygax/GrantActions(var/mob/living/user, var/human_occupant = 0)
|
||||
..()
|
||||
overload_action.chassis = src
|
||||
@@ -93,24 +68,3 @@
|
||||
..()
|
||||
thrusters_action.Remove(user)
|
||||
|
||||
/datum/action/innate/mecha/mech_overload_mode
|
||||
name = "Toggle leg actuators overload"
|
||||
button_icon_state = "mech_overload_off"
|
||||
|
||||
/datum/action/innate/mecha/mech_overload_mode/Activate()
|
||||
if(!owner || !chassis || chassis.occupant != owner)
|
||||
return
|
||||
var/obj/mecha/combat/gygax/G = chassis
|
||||
G.overload = !G.overload
|
||||
button_icon_state = "mech_overload_[G.overload ? "on" : "off"]"
|
||||
G.log_message("Toggled leg actuators overload.")
|
||||
if(G.overload)
|
||||
G.overload = 1
|
||||
G.step_in = min(1, round(G.step_in/2))
|
||||
G.step_energy_drain = G.step_energy_drain*G.overload_coeff
|
||||
G.occupant_message("<span class='danger'>You enable leg actuators overload.</span>")
|
||||
else
|
||||
G.overload = 0
|
||||
G.step_in = initial(G.step_in)
|
||||
G.step_energy_drain = initial(G.step_energy_drain)
|
||||
G.occupant_message("<span class='notice'>You disable leg actuators overload.</span>")
|
||||
@@ -8,37 +8,12 @@
|
||||
damage_absorption = list("brute"=0.5,"fire"=0.7,"bullet"=0.45,"laser"=0.6,"energy"=0.7,"bomb"=0.7)
|
||||
max_temperature = 60000
|
||||
infra_luminosity = 3
|
||||
var/zoom = 0
|
||||
var/smoke = 5
|
||||
var/smoke_ready = 1
|
||||
var/smoke_cooldown = 100
|
||||
var/datum/effect_system/smoke_spread/smoke_system = new
|
||||
operation_req_access = list(access_cent_specops)
|
||||
wreckage = /obj/structure/mecha_wreckage/marauder
|
||||
add_req_access = 0
|
||||
internal_damage_threshold = 25
|
||||
force = 45
|
||||
max_equip = 4
|
||||
var/datum/action/innate/mecha/mech_smoke/smoke_action = new
|
||||
var/datum/action/innate/mecha/mech_zoom/zoom_action = new
|
||||
|
||||
/obj/mecha/combat/marauder/New()
|
||||
..()
|
||||
smoke_system.set_up(3, src)
|
||||
smoke_system.attach(src)
|
||||
|
||||
/obj/mecha/combat/marauder/Destroy()
|
||||
qdel(smoke_system)
|
||||
smoke_system = null
|
||||
return ..()
|
||||
|
||||
/obj/mecha/combat/marauder/relaymove(mob/user,direction)
|
||||
if(zoom)
|
||||
if(world.time - last_message > 20)
|
||||
src.occupant_message("Unable to move while in zoom mode.")
|
||||
last_message = world.time
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
/obj/mecha/combat/marauder/GrantActions(var/mob/living/user, var/human_occupant = 0)
|
||||
..()
|
||||
@@ -57,23 +32,6 @@
|
||||
thrusters_action.Remove(user)
|
||||
zoom_action.Remove(user)
|
||||
|
||||
/obj/mecha/combat/marauder/go_out()
|
||||
if(src.occupant && src.occupant.client)
|
||||
src.occupant.client.view = world.view
|
||||
src.zoom = 0
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
/obj/mecha/combat/marauder/get_stats_part()
|
||||
var/output = ..()
|
||||
output += {"<b>Smoke:</b> [smoke]<br>
|
||||
<b>Thrusters:</b> [thrusters?"on":"off"]<br>
|
||||
<b>Zoom:</b> [zoom?"on":"off"]
|
||||
"}
|
||||
return output
|
||||
|
||||
|
||||
/obj/mecha/combat/marauder/loaded/New()
|
||||
..()
|
||||
var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse(src)
|
||||
@@ -133,36 +91,3 @@
|
||||
ME.attach(src)
|
||||
|
||||
|
||||
/datum/action/innate/mecha/mech_smoke
|
||||
name = "Smoke"
|
||||
button_icon_state = "mech_smoke"
|
||||
|
||||
/datum/action/innate/mecha/mech_smoke/Activate()
|
||||
if(!owner || !chassis || chassis.occupant != owner)
|
||||
return
|
||||
var/obj/mecha/combat/marauder/M = chassis
|
||||
if(M.smoke_ready && M.smoke>0)
|
||||
M.smoke_system.start()
|
||||
M.smoke--
|
||||
M.smoke_ready = 0
|
||||
spawn(M.smoke_cooldown)
|
||||
M.smoke_ready = 1
|
||||
|
||||
/datum/action/innate/mecha/mech_zoom
|
||||
name = "Zoom"
|
||||
button_icon_state = "mech_zoom_off"
|
||||
|
||||
/datum/action/innate/mecha/mech_zoom/Activate()
|
||||
if(!owner || !chassis || chassis.occupant != owner)
|
||||
return
|
||||
var/obj/mecha/combat/marauder/M = chassis
|
||||
if(owner.client)
|
||||
M.zoom = !M.zoom
|
||||
button_icon_state = "mech_zoom_[M.zoom ? "on" : "off"]"
|
||||
M.log_message("Toggled zoom mode.")
|
||||
M.occupant_message("<font color='[M.zoom?"blue":"red"]'>Zoom mode [M.zoom?"en":"dis"]abled.</font>")
|
||||
if(M.zoom)
|
||||
owner.client.view = 12
|
||||
owner << sound('sound/mecha/imag_enh.ogg',volume=50)
|
||||
else
|
||||
owner.client.view = world.view//world.view - default mob view size
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user