mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-16 10:35:41 +01:00
Just fuck my shit up fam
This commit is contained in:
@@ -2,5 +2,9 @@
|
||||
# needs additional setup, see tools/mapmerge/install.txt
|
||||
*.dmm merge=merge-dmm
|
||||
|
||||
# dmi icon merger hook
|
||||
# needs additional setup, see tools/dmitool/merging.txt
|
||||
*.dmi merge=merge-dmi
|
||||
|
||||
# force changelog merging to use union
|
||||
html/changelog.html merge=union
|
||||
|
||||
@@ -70,7 +70,8 @@ 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
|
||||
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.
|
||||
and the server should start up and be ready to join. It is also recommended that
|
||||
you set up the SQL backend (see below).
|
||||
|
||||
###HOSTING ON LINUX
|
||||
We use BYGEX for some of our text replacement related code. Unfortunately, we
|
||||
@@ -112,9 +113,7 @@ To enable an away mission open fileList.txt in the _maps/RandomZLevels directory
|
||||
|
||||
##SQL SETUP
|
||||
|
||||
The SQL backend for the library and stats tracking requires a
|
||||
MySQL server. Your server details go in /config/dbconfig.txt, and the SQL
|
||||
schema is in /SQL/tgstation_schema.sql and /SQL/tgstation_schema_prefix.sql depending on if you want table prefixes. More detailed setup instructions are located here: http://www.tgstation13.org/wiki/Downloading_the_source_code#Setting_up_the_database
|
||||
The SQL backend requires a MySQL server. SQL is required for the library, stats tracking, admin notes, and job-only bans, among other features, mostly related to server administration. Your server details go in /config/dbconfig.txt, and the SQL schema is in /SQL/tgstation_schema.sql and /SQL/tgstation_schema_prefix.sql depending on if you want table prefixes. More detailed setup instructions are located here: http://www.tgstation13.org/wiki/Downloading_the_source_code#Setting_up_the_database
|
||||
|
||||
##IRC BOT SETUP
|
||||
|
||||
|
||||
+242
-112
@@ -22,7 +22,7 @@
|
||||
"av" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
|
||||
"aw" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
|
||||
"ax" = (/obj/structure/bed/stool,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
|
||||
"ay" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
|
||||
"ay" = (/obj/effect/decal/cleanable/cobweb,/obj/structure/mirror/magic/lesser{pixel_y = 32},/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
|
||||
"az" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/item/stack/sheet/animalhide/monkey,/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
|
||||
"aA" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
|
||||
"aB" = (/obj/structure/bed,/obj/item/weapon/bedsheet/purple,/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
|
||||
@@ -30,12 +30,12 @@
|
||||
"aD" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
|
||||
"aE" = (/obj/structure/filingcabinet,/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
|
||||
"aF" = (/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
|
||||
"aG" = (/obj/structure/safe/floor,/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
|
||||
"aG" = (/turf/indestructible/rock,/area/space)
|
||||
"aH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
|
||||
"aI" = (/obj/structure/table/reinforced,/obj/item/device/laser_pointer/upgraded,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
|
||||
"aJ" = (/obj/structure/cult/tome,/obj/item/weapon/staff,/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
|
||||
"aJ" = (/obj/structure/cult/tome,/obj/item/weapon/dice/d20/fate,/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
|
||||
"aK" = (/obj/structure/bed/chair/wood/wings{dir = 8},/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
|
||||
"aL" = (/obj/item/clothing/suit/space/hardsuit/wizard,/obj/structure/table/wood,/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
|
||||
"aL" = (/turf/simulated/wall/mineral/wood,/area/awaymission/academy/academycellar)
|
||||
"aM" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/briefcase,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
|
||||
"aN" = (/obj/structure/table/reinforced,/obj/item/weapon/coin/plasma,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
|
||||
"aO" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
|
||||
@@ -94,7 +94,7 @@
|
||||
"bP" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/academy/headmaster)
|
||||
"bQ" = (/obj/effect/decal/cleanable/cobweb2,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/awaymission/academy/headmaster)
|
||||
"bR" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/awaymission/academy/headmaster)
|
||||
"bS" = (/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/academy/headmaster)
|
||||
"bS" = (/obj/structure/academy_wizard_spawner,/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
|
||||
"bT" = (/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/academy/headmaster)
|
||||
"bU" = (/obj/machinery/autolathe,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plasteel,/area/awaymission/academy/classrooms)
|
||||
"bV" = (/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/awaymission/academy/classrooms)
|
||||
@@ -136,7 +136,7 @@
|
||||
"cF" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/door/airlock/plasma,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
|
||||
"cG" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/academy/headmaster)
|
||||
"cH" = (/obj/structure/sign/nosmoking_1,/turf/simulated/wall,/area/awaymission/academy/headmaster)
|
||||
"cI" = (/obj/structure/table,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel,/area/awaymission/academy/classrooms)
|
||||
"cI" = (/obj/structure/divine/trap/damage,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
|
||||
"cJ" = (/obj/item/stack/sheet/metal,/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
|
||||
"cK" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/awaymission/academy/classrooms)
|
||||
"cL" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/plasteel,/area/awaymission/academy/headmaster)
|
||||
@@ -178,7 +178,7 @@
|
||||
"dv" = (/obj/item/seeds/eggyseed,/obj/machinery/hydroponics/constructable,/turf/simulated/floor/plasteel,/area/awaymission/academy/classrooms)
|
||||
"dw" = (/obj/machinery/hydroponics/constructable,/turf/simulated/floor/plasteel,/area/awaymission/academy/classrooms)
|
||||
"dx" = (/turf/simulated/floor/plasteel{icon_state = "green"; dir = 4},/area/awaymission/academy/classrooms)
|
||||
"dy" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/effect/landmark{name = "awaystart"},/obj/item/weapon/weldingtool,/turf/simulated/floor/greengrid,/area/awaymission/academy/classrooms)
|
||||
"dy" = (/mob/living/simple_animal/hostile/wizard,/turf/simulated/floor/plasteel,/area/awaymission/academy/headmaster)
|
||||
"dz" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/greengrid,/area/awaymission/academy/classrooms)
|
||||
"dA" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/greengrid,/area/awaymission/academy/classrooms)
|
||||
"dB" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel,/area/awaymission/academy/classrooms)
|
||||
@@ -190,7 +190,7 @@
|
||||
"dH" = (/obj/machinery/mech_bay_recharge_port,/obj/structure/cable,/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
|
||||
"dI" = (/obj/machinery/computer/mech_bay_power_console,/obj/structure/cable,/turf/simulated/floor/greengrid,/area/awaymission/academy/classrooms)
|
||||
"dJ" = (/obj/machinery/hydroponics/constructable,/obj/item/seeds/replicapod,/turf/simulated/floor/plasteel,/area/awaymission/academy/classrooms)
|
||||
"dK" = (/obj/structure/table/wood,/turf/simulated/floor/plasteel,/area/awaymission/academy/classrooms)
|
||||
"dK" = (/turf/simulated/floor/engine/cult,/area/awaymission/academy/academycellar)
|
||||
"dL" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/plasteel,/area/awaymission/academy/classrooms)
|
||||
"dM" = (/obj/machinery/hydroponics/constructable,/obj/item/seeds/bluespacetomatoseed,/turf/simulated/floor/plasteel,/area/awaymission/academy/classrooms)
|
||||
"dN" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel,/area/awaymission/academy/classrooms)
|
||||
@@ -301,21 +301,21 @@
|
||||
"fO" = (/obj/structure/closet/crate/trashcart,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/awaymission/academy/academyaft)
|
||||
"fP" = (/turf/simulated/floor/plasteel{icon_state = "vault"},/area/awaymission/academy/classrooms)
|
||||
"fQ" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plasteel{icon_state = "vault"},/area/awaymission/academy/classrooms)
|
||||
"fR" = (/obj/structure/bed/chair,/turf/simulated/floor/plasteel{icon_state = "vault"},/area/awaymission/academy/classrooms)
|
||||
"fR" = (/mob/living/simple_animal/hostile/wizard,/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/awaymission/academy/classrooms)
|
||||
"fS" = (/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/awaymission/academy/classrooms)
|
||||
"fT" = (/obj/structure/table/reinforced,/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/awaymission/academy/classrooms)
|
||||
"fU" = (/obj/item/target,/turf/simulated/floor/plasteel,/area/awaymission/academy/classrooms)
|
||||
"fV" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel,/area/awaymission/academy/classrooms)
|
||||
"fW" = (/obj/structure/target_stake,/turf/simulated/floor/plasteel,/area/awaymission/academy/classrooms)
|
||||
"fX" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
|
||||
"fY" = (/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
|
||||
"fY" = (/mob/living/simple_animal/hostile/wizard,/turf/simulated/floor/plasteel{icon_state = "red"},/area/awaymission/academy/classrooms)
|
||||
"fZ" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
|
||||
"ga" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/awaymission/academy/classrooms)
|
||||
"gb" = (/obj/structure/table,/obj/item/weapon/pen/red,/turf/simulated/floor/plasteel,/area/awaymission/academy/classrooms)
|
||||
"gc" = (/obj/structure/table,/obj/item/weapon/lazarus_injector,/turf/simulated/floor/plasteel{icon_state = "whitehall"; dir = 4},/area/awaymission/academy/classrooms)
|
||||
"gd" = (/obj/structure/bed/chair/wood/normal,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
|
||||
"ge" = (/obj/structure/bookcase,/obj/item/weapon/book/manual/wiki/engineering_hacking,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
|
||||
"gf" = (/obj/structure/bookcase,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
|
||||
"ge" = (/obj/item/candle/infinite,/turf/simulated/floor/engine/cult,/area/awaymission/academy/academycellar)
|
||||
"gf" = (/obj/structure/holohoop,/turf/simulated/floor/engine/cult,/area/awaymission/academy/academycellar)
|
||||
"gg" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
|
||||
"gh" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/awaymission/academy/academyaft)
|
||||
"gi" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
|
||||
@@ -333,7 +333,7 @@
|
||||
"gu" = (/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
|
||||
"gv" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel{icon_state = "whitehall"; dir = 4},/area/awaymission/academy/classrooms)
|
||||
"gw" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
|
||||
"gx" = (/obj/structure/bookcase,/obj/item/weapon/book/manual/medical_cloning,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
|
||||
"gx" = (/obj/structure/closet/athletic_mixed,/turf/simulated/floor/engine/cult,/area/awaymission/academy/academycellar)
|
||||
"gy" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/awaymission/academy/academyaft)
|
||||
"gz" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms)
|
||||
"gA" = (/obj/machinery/door/window{dir = 4},/obj/item/ammo_casing,/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/awaymission/academy/classrooms)
|
||||
@@ -348,8 +348,8 @@
|
||||
"gJ" = (/obj/structure/table,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms)
|
||||
"gK" = (/obj/structure/window/reinforced,/obj/item/ammo_casing,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/awaymission/academy/classrooms)
|
||||
"gL" = (/mob/living/simple_animal/hostile/bear,/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
|
||||
"gM" = (/obj/structure/bookcase,/obj/item/weapon/book/manual/hydroponics_pod_people,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
|
||||
"gN" = (/obj/structure/bookcase,/obj/item/weapon/book/manual/barman_recipes,/obj/item/weapon/book/manual/wiki/security_space_law,/obj/item/weapon/book/manual/wiki/security_space_law,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
|
||||
"gM" = (/obj/item/toy/beach_ball/holoball,/turf/simulated/floor/engine/cult,/area/awaymission/academy/academycellar)
|
||||
"gN" = (/obj/structure/mineral_door/wood,/turf/simulated/floor/engine/cult,/area/awaymission/academy/academycellar)
|
||||
"gO" = (/obj/structure/bed/stool,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms)
|
||||
"gP" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/awaymission/academy/classrooms)
|
||||
"gQ" = (/obj/machinery/light/small{dir = 8},/mob/living/simple_animal/hostile/bear,/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
|
||||
@@ -399,7 +399,7 @@
|
||||
"hI" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
|
||||
"hJ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
|
||||
"hK" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/item/weapon/caution,/turf/simulated/floor/plasteel{icon_state = "green"; dir = 4},/area/awaymission/academy/academyaft)
|
||||
"hL" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
|
||||
"hL" = (/obj/structure/mecha_wreckage/durand,/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
|
||||
"hM" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
|
||||
"hN" = (/obj/machinery/constructable_frame/machine_frame,/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
|
||||
"hO" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
|
||||
@@ -442,7 +442,7 @@
|
||||
"iz" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/awaymission/academy/academyaft)
|
||||
"iA" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/awaymission/academy/academyaft)
|
||||
"iB" = (/obj/structure/rack,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/subspace/filter,/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
|
||||
"iC" = (/obj/structure/toilet{dir = 8},/obj/machinery/light/small{dir = 1},/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/awaymission/academy/academyaft)
|
||||
"iC" = (/mob/living/simple_animal/hostile/wizard,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
|
||||
"iD" = (/obj/structure/toilet{dir = 4},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/awaymission/academy/academyaft)
|
||||
"iE" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/rack,/obj/item/stack/sheet/metal,/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
|
||||
"iF" = (/obj/machinery/power/port_gen/pacman,/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
|
||||
@@ -481,7 +481,7 @@
|
||||
"jm" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
|
||||
"jn" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel/airless{icon_state = "white"; dir = 4},/area/awaymission/academy/academyaft)
|
||||
"jo" = (/obj/structure/table,/obj/item/organ/internal/brain{name = "The preserved brain of Harry Houdini"},/turf/simulated/floor/plasteel/airless{icon_state = "whitered"; dir = 4},/area/awaymission/academy/academyaft)
|
||||
"jp" = (/obj/effect/landmark{name = "awaystart"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/awaymission/academy/academyaft)
|
||||
"jp" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/item/weapon/weldingtool,/turf/simulated/floor/greengrid,/area/awaymission/academy/classrooms)
|
||||
"jq" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "yellow"},/area/awaymission/academy/academyaft)
|
||||
"jr" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/awaymission/academy/academyaft)
|
||||
"js" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel/airless{icon_state = "white"; dir = 4},/area/awaymission/academy/academyaft)
|
||||
@@ -534,7 +534,7 @@
|
||||
"kn" = (/obj/machinery/gateway{dir = 1},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/awaymission/academy/academygate)
|
||||
"ko" = (/obj/machinery/gateway{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/academygate)
|
||||
"kp" = (/obj/machinery/gateway{dir = 8},/turf/simulated/floor/plating,/area/awaymission/academy/academygate)
|
||||
"kq" = (/obj/structure/cable,/obj/machinery/gateway/centeraway{calibrated = 0},/turf/simulated/floor/plating,/area/awaymission/academy/academygate)
|
||||
"kq" = (/mob/living/simple_animal/hostile/wizard,/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellow"},/area/awaymission/academy/classrooms)
|
||||
"kr" = (/obj/machinery/gateway{dir = 4},/turf/simulated/floor/plating,/area/awaymission/academy/academygate)
|
||||
"ks" = (/obj/machinery/gateway{dir = 10},/turf/simulated/floor/plating,/area/awaymission/academy/academygate)
|
||||
"kt" = (/obj/machinery/gateway,/turf/simulated/floor/plating,/area/awaymission/academy/academygate)
|
||||
@@ -543,131 +543,261 @@
|
||||
"kw" = (/obj/machinery/button/door{id = "AcademyGate"; pixel_y = -24},/turf/simulated/floor/carpet{icon_state = "carpetsymbol"},/area/awaymission/academy/academygate)
|
||||
"kx" = (/turf/simulated/floor/carpet{icon_state = "carpetsymbol"},/area/awaymission/academy/academygate)
|
||||
"ky" = (/obj/machinery/door/poddoor/shutters{id = "AcademyGate"},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/awaymission/academy/academygate)
|
||||
"kz" = (/mob/living/simple_animal/hostile/wizard,/turf/simulated/floor/carpet,/area/awaymission/academy/classrooms)
|
||||
"kA" = (/mob/living/simple_animal/hostile/wizard,/turf/simulated/floor/plasteel{icon_state = "escape"; dir = 6},/area/awaymission/academy/classrooms)
|
||||
"kB" = (/obj/structure/bed/chair,/mob/living/simple_animal/hostile/wizard,/turf/simulated/floor/plasteel{icon_state = "vault"},/area/awaymission/academy/classrooms)
|
||||
"kC" = (/mob/living/simple_animal/hostile/wizard,/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
|
||||
"kD" = (/mob/living/simple_animal/hostile/wizard,/turf/simulated/floor/plasteel,/area/awaymission/academy/academyaft)
|
||||
"kE" = (/mob/living/simple_animal/hostile/wizard,/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
|
||||
"kF" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/mob/living/simple_animal/hostile/wizard,/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/awaymission/academy/academyaft)
|
||||
"kG" = (/mob/living/simple_animal/hostile/wizard,/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/awaymission/academy/academyaft)
|
||||
"kH" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/awaymission/academy/academyaft)
|
||||
"kI" = (/obj/structure/cable,/obj/machinery/gateway/centeraway{calibrated = 1},/turf/simulated/floor/plating,/area/awaymission/academy/academygate)
|
||||
"kJ" = (/obj/structure/mecha_wreckage/honker,/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
|
||||
"kK" = (/obj/structure/table,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/item/weapon/book/manual/ripley_build_and_repair,/turf/simulated/floor/plasteel,/area/awaymission/academy/classrooms)
|
||||
"kL" = (/obj/item/weapon/bikehorn,/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
|
||||
"kM" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/divine/trap/chill,/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
|
||||
"kN" = (/obj/structure/divine/trap/fire,/turf/simulated/floor/engine,/area/awaymission/academy/academyaft)
|
||||
"kO" = (/mob/living/simple_animal/hostile/retaliate/clown,/turf/simulated/floor/engine/cult,/area/awaymission/academy/academycellar)
|
||||
"kP" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/engine/cult,/area/awaymission/academy/academycellar)
|
||||
"kQ" = (/mob/living/simple_animal/hostile/syndicate,/turf/simulated/floor/engine/cult,/area/awaymission/academy/academycellar)
|
||||
"kR" = (/obj/effect/rune/malformed,/mob/living/simple_animal/hostile/skeleton,/turf/simulated/floor/engine/cult,/area/awaymission/academy/academycellar)
|
||||
"kS" = (/obj/structure/table/wood,/obj/item/candle/infinite,/turf/simulated/floor/engine/cult,/area/awaymission/academy/academycellar)
|
||||
"kT" = (/obj/structure/table/wood,/obj/item/weapon/kitchen/knife/ritual,/obj/item/candle/infinite,/turf/simulated/floor/engine/cult,/area/awaymission/academy/academycellar)
|
||||
"kU" = (/obj/effect/decal/remains/human,/obj/effect/rune/malformed,/turf/simulated/floor/engine/cult,/area/awaymission/academy/academycellar)
|
||||
"kV" = (/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/engine/cult,/area/awaymission/academy/academycellar)
|
||||
"kW" = (/obj/structure/ladder/unbreakable/rune{id = "academy_cellar"},/turf/simulated/floor/engine/cult,/area/awaymission/academy/academycellar)
|
||||
"kX" = (/obj/structure/bookcase/random,/turf/simulated/floor/engine/cult,/area/awaymission/academy/academycellar)
|
||||
"kY" = (/obj/effect/decal/cleanable/xenoblood,/turf/simulated/floor/engine/cult,/area/awaymission/academy/academycellar)
|
||||
"kZ" = (/obj/effect/decal/cleanable/cobweb2,/obj/effect/decal/cleanable/blood/old,/obj/effect/decal/remains/human,/turf/simulated/floor/engine/cult,/area/awaymission/academy/academycellar)
|
||||
"la" = (/obj/structure/divine/trap/damage,/turf/simulated/floor/engine/cult,/area/awaymission/academy/academycellar)
|
||||
"lb" = (/mob/living/simple_animal/hostile/retaliate/bat,/turf/simulated/floor/engine/cult,/area/awaymission/academy/academycellar)
|
||||
"lc" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/mineral/uranium,/area/awaymission/academy/academycellar)
|
||||
"ld" = (/turf/simulated/floor/mineral/uranium,/area/awaymission/academy/academycellar)
|
||||
"le" = (/obj/effect/spider/stickyweb,/turf/simulated/floor/engine/cult,/area/awaymission/academy/academycellar)
|
||||
"lf" = (/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/engine/cult,/area/awaymission/academy/academycellar)
|
||||
"lg" = (/obj/structure/table/wood,/obj/item/weapon/guardiancreator/choose,/turf/simulated/floor/engine/cult,/area/awaymission/academy/academycellar)
|
||||
"lh" = (/obj/structure/falsewall/wood,/turf/simulated/floor/engine/cult,/area/awaymission/academy/academycellar)
|
||||
"li" = (/mob/living/simple_animal/hostile/retaliate/bat,/turf/simulated/floor/mineral/uranium,/area/awaymission/academy/academycellar)
|
||||
"lj" = (/mob/living/simple_animal/hostile/poison/giant_spider/hunter,/turf/simulated/floor/engine/cult,/area/awaymission/academy/academycellar)
|
||||
"lk" = (/obj/structure/safe/floor,/obj/item/voodoo,/obj/item/weapon/gun/magic/wand/fireball,/obj/item/clothing/suit/space/hardsuit/wizard,/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
|
||||
"ll" = (/turf/indestructible/riveted,/area/awaymission/academy/academyengine)
|
||||
"lm" = (/obj/structure/table/wood,/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
|
||||
"ln" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/vault,/area/awaymission/academy/academyengine)
|
||||
"lo" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/vault,/area/awaymission/academy/academyengine)
|
||||
"lp" = (/obj/machinery/power/apc{dir = 1; pixel_y = 32},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/vault,/area/awaymission/academy/academyengine)
|
||||
"lq" = (/turf/simulated/wall/rust,/area/awaymission/academy/academyengine)
|
||||
"lr" = (/obj/machinery/power/terminal{dir = 8},/obj/structure/cable,/turf/simulated/floor/vault,/area/awaymission/academy/academyengine)
|
||||
"ls" = (/obj/machinery/power/smes/magical,/obj/structure/cable,/turf/simulated/floor/vault,/area/awaymission/academy/academyengine)
|
||||
"lt" = (/turf/simulated/floor/vault,/area/awaymission/academy/academyengine)
|
||||
"lu" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plating,/area/awaymission/academy/academyengine)
|
||||
"lv" = (/turf/simulated/floor/plating,/area/awaymission/academy/academyengine)
|
||||
"lw" = (/obj/item/weapon/ectoplasm,/turf/simulated/floor/plating,/area/awaymission/academy/academyengine)
|
||||
"lx" = (/obj/effect/rune/malformed,/turf/simulated/floor/plating,/area/awaymission/academy/academyengine)
|
||||
"ly" = (/obj/effect/decal/cleanable/oil,/obj/structure/table,/obj/item/weapon/staff,/turf/simulated/floor/plating,/area/awaymission/academy/academyengine)
|
||||
"lz" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/electrical,/turf/simulated/floor/plating,/area/awaymission/academy/academyengine)
|
||||
"lA" = (/obj/structure/table,/obj/item/stack/rods,/turf/simulated/floor/plating,/area/awaymission/academy/academyengine)
|
||||
"lB" = (/obj/effect/decal/cleanable/oil,/turf/simulated/floor/plating,/area/awaymission/academy/academyengine)
|
||||
"lC" = (/mob/living/simple_animal/hostile/wizard,/turf/simulated/floor/plating,/area/awaymission/academy/academyengine)
|
||||
"lD" = (/obj/structure/table,/obj/item/weapon/weldingtool,/turf/simulated/floor/plating,/area/awaymission/academy/academyengine)
|
||||
"lE" = (/obj/structure/rack,/obj/item/stack/cable_coil,/turf/simulated/floor/plating,/area/awaymission/academy/academyengine)
|
||||
"lF" = (/turf/indestructible/fakeglass,/area/awaymission/academy/academyengine)
|
||||
"lG" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/awaymission/academy/academyengine)
|
||||
"lH" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/awaymission/academy/academyengine)
|
||||
"lI" = (/obj/structure/ladder/unbreakable/rune{id = "academy_engine"},/turf/simulated/floor/plating,/area/awaymission/academy/academyengine)
|
||||
"lJ" = (/obj/structure/mineral_door/iron,/turf/simulated/floor/plating,/area/awaymission/academy/academyengine)
|
||||
"lK" = (/obj/effect/immovablerod{dir = 4},/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/awaymission/academy/academyengine)
|
||||
"lL" = (/mob/living/simple_animal/slaughter{name = "engine demon"},/turf/simulated/floor/plating,/area/awaymission/academy/academyengine)
|
||||
"lM" = (/obj/machinery/light,/turf/simulated/floor/plating,/area/awaymission/academy/academyengine)
|
||||
"lN" = (/obj/structure/rack,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/plating,/area/awaymission/academy/academyengine)
|
||||
"lO" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/awaymission/academy/academyengine)
|
||||
"lP" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/awaymission/academy/academyengine)
|
||||
"lQ" = (/obj/structure/table,/obj/item/weapon/gun/magic/wand/polymorph,/turf/simulated/floor/plating,/area/awaymission/academy/academyengine)
|
||||
"lR" = (/obj/structure/table,/obj/item/stack/sheet/animalhide/monkey,/turf/simulated/floor/plating,/area/awaymission/academy/academyengine)
|
||||
"lS" = (/obj/structure/table,/obj/item/stack/sheet/runed_metal,/obj/item/stack/sheet/mineral/wood,/turf/simulated/floor/plating,/area/awaymission/academy/academyengine)
|
||||
"lT" = (/obj/structure/table,/obj/item/stack/cable_coil,/obj/item/stack/sheet/xenochitin,/turf/simulated/floor/plating,/area/awaymission/academy/academyengine)
|
||||
"lU" = (/obj/structure/closet/radiation,/turf/simulated/floor/plating,/area/awaymission/academy/academyengine)
|
||||
"lV" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/awaymission/academy/academyengine)
|
||||
"lW" = (/obj/structure/ladder/unbreakable/rune{height = 1; id = "academy_storage"},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
|
||||
"lX" = (/obj/structure/ladder/unbreakable/rune{height = 1; id = "academy_coldroom"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/awaymission/academy/classrooms)
|
||||
"lY" = (/obj/structure/table/wood,/obj/item/seeds/kudzuseed,/turf/simulated/floor/plasteel,/area/awaymission/academy/classrooms)
|
||||
"lZ" = (/obj/structure/bookcase/random,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
|
||||
"ma" = (/obj/structure/ladder/unbreakable/rune{height = 1; id = "academy_cellar"},/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
|
||||
"mb" = (/obj/structure/ladder/unbreakable/rune{height = 1; id = "academy_engine"},/turf/simulated/floor/plasteel,/area/awaymission/academy/academyaft)
|
||||
"mc" = (/turf/simulated/wall,/area/awaymission/academy/academyengine)
|
||||
"md" = (/turf/simulated/wall/r_wall,/area/awaymission/academy/academyengine)
|
||||
"me" = (/obj/structure/constructshell,/turf/simulated/floor/plating,/area/awaymission/academy/academyengine)
|
||||
"mf" = (/obj/structure/constructshell,/obj/machinery/light{dir = 1},/turf/simulated/floor/plating,/area/awaymission/academy/academyengine)
|
||||
"mg" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/vault,/area/awaymission/academy/academyengine)
|
||||
"mh" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/vault,/area/awaymission/academy/academyengine)
|
||||
"mi" = (/obj/machinery/door/airlock/vault,/turf/simulated/floor/vault,/area/awaymission/academy/academyengine)
|
||||
"mj" = (/obj/structure/rack,/obj/item/weapon/spellbook/oneuse/summonitem,/obj/item/weapon/pen/fourcolor,/turf/simulated/floor/vault,/area/awaymission/academy/academyengine)
|
||||
"mk" = (/obj/structure/rack,/obj/item/weapon/claymore,/obj/item/toy/figure/wizard,/turf/simulated/floor/vault,/area/awaymission/academy/academyengine)
|
||||
"ml" = (/mob/living/simple_animal/hostile/creature,/turf/simulated/floor/vault,/area/awaymission/academy/academyengine)
|
||||
"mm" = (/obj/structure/closet/coffin,/turf/simulated/floor/plating,/area/awaymission/academy/academyengine)
|
||||
"mn" = (/obj/structure/rack,/obj/item/weapon/gun/magic/wand,/turf/simulated/floor/plating,/area/awaymission/academy/academyengine)
|
||||
"mo" = (/obj/structure/rack,/obj/item/weapon/staff,/turf/simulated/floor/plating,/area/awaymission/academy/academyengine)
|
||||
"mp" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel,/area/awaymission/academy/academyengine)
|
||||
"mq" = (/turf/simulated/floor/plasteel,/area/awaymission/academy/academyengine)
|
||||
"mr" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel,/area/awaymission/academy/academyengine)
|
||||
"ms" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/light,/area/awaymission/academy/academyengine)
|
||||
"mt" = (/turf/simulated/floor/light,/area/awaymission/academy/academyengine)
|
||||
"mu" = (/turf/simulated/floor/wood,/area/awaymission/academy/academyengine)
|
||||
"mv" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/wood,/area/awaymission/academy/academyengine)
|
||||
"mw" = (/obj/item/target,/turf/simulated/floor/plasteel,/area/awaymission/academy/academyengine)
|
||||
"mx" = (/mob/living/simple_animal/hostile/wizard,/turf/simulated/floor/light,/area/awaymission/academy/academyengine)
|
||||
"my" = (/obj/structure/bed/chair/wood/normal,/turf/simulated/floor/wood,/area/awaymission/academy/academyengine)
|
||||
"mz" = (/obj/structure/table/wood/poker,/obj/item/toy/cards/deck,/turf/simulated/floor/wood,/area/awaymission/academy/academyengine)
|
||||
"mA" = (/obj/structure/bed/chair/wood/normal{dir = 4},/turf/simulated/floor/wood,/area/awaymission/academy/academyengine)
|
||||
"mB" = (/mob/living/simple_animal/hostile/wizard,/turf/simulated/floor/wood,/area/awaymission/academy/academyengine)
|
||||
"mC" = (/obj/structure/bed/chair/wood/normal{dir = 8},/turf/simulated/floor/wood,/area/awaymission/academy/academyengine)
|
||||
"mD" = (/turf/simulated/mineral/random,/area/awaymission/academy/academycellar)
|
||||
"mE" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/awaymission/academy/academygate)
|
||||
"mF" = (/obj/effect/decal/cleanable/blood/old,/turf/simulated/floor/plating,/area/awaymission/academy/academygate)
|
||||
"mG" = (/mob/living/simple_animal/hostile/skeleton,/turf/simulated/floor/plating,/area/awaymission/academy/academygate)
|
||||
"mH" = (/obj/effect/decal/remains/robot,/turf/simulated/floor/plating,/area/awaymission/academy/academygate)
|
||||
"mI" = (/mob/living/simple_animal/hostile/wizard,/turf/simulated/floor/plasteel,/area/awaymission/academy/academyengine)
|
||||
"mJ" = (/obj/structure/table/wood,/obj/item/weapon/reagent_containers/food/drinks/bottle/gin,/turf/simulated/floor/wood,/area/awaymission/academy/academyengine)
|
||||
"mK" = (/obj/machinery/vending/magivend,/turf/simulated/floor/wood,/area/awaymission/academy/academyengine)
|
||||
"mL" = (/obj/structure/table/wood,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass,/turf/simulated/floor/wood,/area/awaymission/academy/academyengine)
|
||||
"mM" = (/obj/structure/bed/chair/wood/normal{dir = 1},/turf/simulated/floor/wood,/area/awaymission/academy/academyengine)
|
||||
"mN" = (/turf/simulated/floor/plating/snow/cold,/area/awaymission/academy/academycellar)
|
||||
"mO" = (/obj/structure/reagent_dispensers/beerkeg,/turf/simulated/floor/plating/snow/cold,/area/awaymission/academy/academycellar)
|
||||
"mP" = (/obj/effect/decal/remains/human,/turf/simulated/floor/plating,/area/awaymission/academy/academygate)
|
||||
"mQ" = (/obj/structure/ladder/unbreakable/rune{id = "academy_storage"},/turf/simulated/floor/plasteel,/area/awaymission/academy/academyengine)
|
||||
"mR" = (/obj/machinery/light,/turf/simulated/floor/plasteel,/area/awaymission/academy/academyengine)
|
||||
"mS" = (/obj/structure/ladder/unbreakable/rune{id = "academy_coldroom"},/turf/simulated/floor/plating/snow/cold,/area/awaymission/academy/academycellar)
|
||||
"mT" = (/obj/effect/decal/cleanable/blood/old,/turf/simulated/floor/plating/snow/cold,/area/awaymission/academy/academycellar)
|
||||
"mU" = (/obj/item/weapon/reagent_containers/food/snacks/meat/slab,/turf/simulated/floor/plating/snow/cold,/area/awaymission/academy/academycellar)
|
||||
"mV" = (/obj/structure/rack,/obj/item/weapon/reagent_containers/food/drinks/bottle/wine,/turf/simulated/floor/plating/snow/cold,/area/awaymission/academy/academycellar)
|
||||
"mW" = (/obj/effect/decal/remains/human,/turf/simulated/floor/plating/snow/cold,/area/awaymission/academy/academycellar)
|
||||
"mX" = (/mob/living/simple_animal/hostile/bear,/turf/simulated/floor/plating/snow/cold,/area/awaymission/academy/academycellar)
|
||||
"mY" = (/turf/simulated/mineral/random,/area/space)
|
||||
|
||||
(1,1,1) = {"
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababadaeafaeaeagaeahababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababahahaiahahahaiahahajababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacakahahahahalamananaoapaqacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacarahahasasatasasasauavawacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaxahasayazaAaBasapaxaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaCahaDasaEaFaFaGasaHahaIacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaxahasaJaKaFaLasapaxaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaMahahasasasasasasapahakacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaNahahahahaOahalanavahafacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababahahahahahahapahahahababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPababababaQababaRababababaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPabaTaFaFahaFaFapaFaFasabaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPabaFaFaFahaFaUavaFaFaFabaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPacaFahahahaVapahahahaWacaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPabaXahahaYaZbabbahahbcabaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPaPabbdahbebfbgbhbiahahbjabaPaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaSaSaaaaaaaaaaaSaSaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPaPaaacaFahahahahbkblahahbmacaaaPaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaSaSaaaaaaaaaSaSaSaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPabaPaPabaFbnaFaFahapaFaFbnboabaPaPabaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGaGaGaGaLaLaLaLaLaLaLaLaLaGaGaGaGaGaGaGaGaGaGaGaGaGaG
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGaGaGaLaLdKdKgegfgedKdKaLaLaGaGaGaGaGaGaGaGaGaGaGaGaG
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGaGaLaLdKdKdKdKdKdKdKdKdKaLaLaGaGaGaGaGaGaGaGaGaGaGaG
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGaGaGaLgxdKdKdKdKdKdKdKdKdKdKaLaGaGaGaGaGaGaGaGaGaGaGaG
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGaGaGaGaGaLgxdKdKdKgedKgedKdKdKdKaLaGaGaGaGaGaGaGaGaGaGaGaG
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGaGaGaGaGaLaLdKdKdKdKgMdKdKdKdKaLaLaGaGaGaGaGaGaGaGaGaGaGaG
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGaGaGaGaGaGaLaLdKdKdKdKdKdKdKaLaLaGaGaGaGaGaGaGaGaGaGaGaGaG
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGaGaGaGaGaGaGaGaLaLdKdKdKdKdKaLaLaGaGaGaGaGaGaGaGaGaGaGaGaGaG
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGaGaGaGaGaGaGaGaGaLaLgedKgeaLaLaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGaLaLaLaLaLaLaLaLaGaLaLgNaLaLaGaLaLaLaLaLaLaLaLaLaLaGaGaGaGaG
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGaLdKdKdKdKdKdKaLaGaGaLdKaLaGaGaLkOaLaLkPaLaLkQaLaLaGaGaGaGaG
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGaLdKkRkSdKkUkTaLaLaLgedKgeaLaLaLkVaLaLkVaLaLkVaLaLaGaGaGaGaG
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGaLdKdKdKdKdKdKgNdKdKdKkWdKdKdKgNdKdKdKdKdKdKdKgeaLaGaGaGaGaG
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGaLdKdKdKdKdKdKaLaLaLgedKgeaLaLaLkVaLaLkVaLaLkVaLaLaGaGaGaGaG
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGaLkXkXkXkXkXkXaLaGaGaLdKaLaGaGaLkYaLaLdKaLaLkZaLaLaGaGaGaGaG
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaLaLaLaLaLaLaLaLaLaLaLaLaLgNaLaLaLaLaLaLaLaLaLaLaLaLaLaGaGaGaGaG
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaLdKladKaLlclblddKldlbaLledKdKlfaLaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaLlgladKlhlblddKlilbldaLledKljdKaLaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababadaeafaeaeagaeahababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaLdKdKdKaLlddKlidKlddKlhleledKljaLaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababahahaiahahahaiahahajababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaLaLaLaLaLaLaLaLaLaLaLaLaLaLaLaLaLaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacakahahahahalamananaoapaqacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacarahahasasatasasasauavawacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaxahasayazaAaBasapaxaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaCahaDasaEaFaFlkasaHahaIacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGllllllllllaGaGaG
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaxahasaJaKbSlmasapaxaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGlllolnlpllaGaGaG
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaMahahasasasasasasapahakacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGaGaGlqlqlqlqlqlqlqlqlqlqlqlqlqlqlqaGaGaGlllslrltllaGaGaG
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaNahahahahaOahalanavahafacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGaGlqlvlulvlvlvlwlxlvlulvlzlylAlqlqlqlqllllllllllaGaGaG
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababahahahahahahapahahahababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGlqlvlvlBlvlvlvlClwlvlvlvlvlDlqlElulBlFlHlGlvllaGaGaG
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPababababaQababaRababababaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGlqlIlvlvlvlvlvlvlvlvlvlvlvlvlJlvlvlvlFlvlKlLllaGaGaG
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPabaTaFaFcIaFaFapaFaFasabaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGlqlvlvlvlvlBlvlvlvlvlBlvlvlvlqlNlMlvlFlPlOlvllaGaGaG
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPabaFaFaFahaFaUavaFaFaFabaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGlqlvlvlMlvlRlQlTlSlvlMlvlUlVlqlqlqlqllllllllllaGaGaG
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPacaFahahahaVapahahahaWacaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGlqlqlqlqlqlqlqlqlqlqlqlqlqlqlqaGaGaGaGaGaGaGaGaGaGaG
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPabaXahahaYaZbabbahahbcabaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPaPabbdahbebfbgbhbiahahbjabaPaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaSaSaaaaaaaaaaaSaSaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPaPaaacaFahahahahbkblahahbmacaaaPaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaSaSaaaaaaaaaSaSaSaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPabaPaPabaFbnaFaFahapaFaFbnboabaPaPabaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaSaSaSaaaaaSaSaSaSaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPaPaPaaaaabasasasasbpbqasasasasabaaaaaPaPaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaSaaaaaaaSaSaSaSaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPaPaaaPaaaaabbrbrbrbrahapbrbrbrbrabaaaaaPaaaPaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaSaSaSaaaaaaaaaaaaaaaaaabsbtbubvbvbwbtbsbsbsbsbsbsbsbsbsbsabbrbxbybrahapbrbxbybrababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaSaSaaaaaaaaaaaaaaaaaabsbsbzbAbBbBbCbzbDbEbFbGbGbGbGbGbGbHasbIbJbKbrahapbrbJbKbLasbMbNbObPbQbRbSbTababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsbUbzbBbBbBbBbVbzbEbWbXbYbZbZcabZbWasbrcbccbrahapbrbrbrbrabcdcecdasascfbTcgchabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabscibzbBcjbBbBbzbzbEbWbZbZbZbXbZbZbWasbrbrbrbrahapahahahahckclcmcnascocfbTbScpabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabscqbVbBbBbBbBbzcrbEcsbZbZbZbZbZbZcsasbrctctbrahapcuahcuahabcdcecdcvcwcxbTbTcyabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsczbzbBbBbBbBbzbzbEcAcBbZbZbZbZbZcCasbrcDcDbrahcEanananancFbOcGclcHascfbTbScpabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabscIbzbBbBcJbBbzbVbEcAcKcKcKcKcKcKcCasbrcLbrbrahapbrbrbrbrabcdclcdclcdcfcgbTchabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabscMbzcNbBbBcObzbVbEcPcQcQcQcQcQcQcRascSbxbybrahapbrbxbybLascTcdclcUcVcWbTbTababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaSaSaaaaaaaaaaaaaaaaaabsbsbzbAbBbBbCbzbDbEbFbGbGbGbGbGbGbHasbIbJbKbrahapbrbJbKbLasbMbNbObPbQbRbTbTababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsbUbzbBbBbBbBbVbzbEbWbXbYbZbZcabZbWasbrcbccbrahapbrdybrbrabcdcecdasascfbTcgchabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabscibzbBcjhLbBbzbzbEbWbZbZbZbXbZbZbWasbrbrbrbrahapahahahahckclcmcnascocfbTbTcpabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabscqbVbBbBbBbBbzcrbEcsbZbZbZbZbZbZcsasbrctctdyahapcuahcuahabcdcecdcvcwcxbTbTcyabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsczbzkJbBlWbBbzbzbEcAcBbZbZbZbZbZcCasbrcDcDbrahcEanananancFbOcGclcHascfbTbTcpabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabskKbzkLbBcJbBbzbVbEcAcKcKcKcKfRcKcCasbrcLbrbrahapbrdybrbrabcdclcdclcdcfcgbTchabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabscMbzcNbBbBcObzbVbEcPcQfYcQcQcQcQcRascSbxbybriCapbrbxbybLascTcdclcUcVcWbTbTababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabscXcYcZcZcZcZdabzbEdbdcdcdcdcdcdcddasbrbJbKbrahapbrbJbKbrasasasasasasasasasabbsbsbsbsbsbsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsdededebVbVbzcMbzbEdcdcdfdcdfdcdgdcasbrbrbrbrahapbrbrbrbrasdhdidjdkdidididjdidlbEdmdmdnbsbsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsdededebVbVbzcMbzbEdcdcdfdcdfdcdgdcasbrbrbrbrahapbrbrbrbrasdhdidjdkdidididjdidlbElXdmdnbsbsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsdodpdqbVbzbzcMdrbEdcdcdsdcdsdcdsdcasaFaFaFaFahapaFaFaFaFasdtdudvbzdudwbzbzbzdxbEdmdmdmdmbsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsdydzdAcYcYcYdBbzbEdcdcdcdcdfdcdfdcasaFdCdCaFahapaFdCdCaFasdtbzbzbzbzbzbzdDdEdxdFdmdmdmdGbsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsdHdpdIbVbzbzcMbzbEdcdcdcdcdsdcdsdcasaFdCdCaFahapaFdCdCaFasdtdudwbzdudJbzdKdLdxbEdmdmdmdmbsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsjpdzdAcYcYcYdBbzbEdcdcdcdcdfdcdfdcasaFdCdCaFahapaFdCdCaFasdtbzbzbzbzbzbzdDdEdxdFdmdmdmdGbsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsdHdpdIbVbzbzcMbzbEdcdcdcdcdsdcdsdcasaFdCdCaFahapaFdCdCaFasdtdudwbzdudJbzlYdLdxbEdmdmdmdmbsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsdededebzbVbzcMbzbEdcdcdcdcdcdcdcdcasaFdCdCaFahapaFdCdCaFasdtbzbzbzbzbzbzdMdNdOdPdQdRdmdSbsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsbsbsbsbEbEbEdTdUbEbEbEdVdVbEbEbEbEbEasasasasasahapasasasasasdtdudwbzbzdWbzbzdXdxbEdYdZdmdSbsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabseaeabsebecedeeefegeheiejejejejejekejehejejejejelemejejejejbEeneoeoeoeoeobzbzepeqbEdYdZdmerbsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsesesbseteueveeefejejejejejejejejewejejejejejejejewejejejejbEbEbEbEbEbEbEexexbEbEbEbEeybEbsbsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaezeAbBbBeBbzeCbzbzefejelelelelelelelemelelelelelelelemelelelejbEeDeDeDeEeFeDeDeDeDeGeHeHeIeHbsbsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeJbsbBbBeseKeKeKeLefejeleMeNeleMeNeleOeNeleMeNeleMeNemeMeNelePbEeDeDeDeQeDeDeDeDeDeReHeHeIeSbsaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeJbsbBbBeseTeTeTeUefejeleVeWeleVeWeleXeWeleVeWeleVeWemeVeWelejeYeDeDeDeZeDeEeDeDeDeGeHeHeIfabsaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeJbsbBbBeseKkqeKeLefejeleMeNeleMeNeleOeNeleMeNkzeMeNemeMeNelePbEeDeDeDeQeDkAeDeDeDeReHeHeIeSbsaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeJbsbBbBeseTeTeTeUefejeleVeWkzeVeWeleXeWeleVeWeleVeWemeVeWelejeYeDeDeDeZeDeEeDeDeDeGeHeHeIfabsaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbeAbBbBeBbzfcbzbzefejelelelelelelelemelelelfdfefefefffefefefgfhfifififififjfifififkflflfmfnbsaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsesesbsfoeufpeeefejejejejejejejejewejejejewejejejejejejejejbEeDfqfrfseDeZeDeDeDeGeHeHeHftbsaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsesesbsfoeufpeeefejejejejejejejejewejejejewejejejejejejejejbEeDfqfrfseDeZeDkAeDeGeHeHeHftbsaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabseaeabsfufvfweefxfyfgfgfgfgfzejejfAfgfgfgfBelejejelelejejejbEeDeDeDeDfCeDeDeDeDeGeHeHeHbsbsaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsbsbsbsbsbsbEdTdUbEbEbEbEbEesesesesbEbEfDfEfFfDfDfFfFfDbEbEbEbEbEbEbEbEbEbEbEbEbEbEbEbsbsaPaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsbBbBbBfGfHfIfJfKfKfLbEfMdcdcdcdcdcbEfNfEfFfNfNfFfFfObEfPfQfRfPfPcAfSfTfUfVbzbzfWbsbsaPaaaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsfXfYbBfZgabzbzbzgbgcbEdcgddcgegfdcggghgifFfNfNfFfFfNbEgjgkglgmgjcAbzgnbzbzbzbzbsbsaPaPaaaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsbBbBbBfGfHfIfJfKfKfLbEfMdcdcdcdcdcbEfNfEfFfNfNfFfFfObEfPfQkBfPfPcAfSfTfUfVbzbzfWbsbsaPaaaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsfXbBbBfZgabzbzbzgbgcbEdcgddclZlZdcggghgifFfNfNfFfFfNbEgjgkglgmgjcAbzgnbzbzbzbzbsbsaPaPaaaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaaaaaaaaaaaaaaaaaaaaaabsgobBbBgpgabzgqbzbzgrbEdcdfdcdcdcdcgsfNfFfFfNfNfFfFfNbEgjgtgjgjgjcAfSfTbzbzfWbsbsaPaaaPaaaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaSaSaSaaaaaaaaaaaaaaaaaabsgugugufZgabzdubzbzgvbEgwdsdcgfgxdcgsfNfFfFfNfNfFfFgybEgzgtgjgjgjcAbzgAbzgBbsbsaPaaaaaPaaaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaSaSaSaaaaaaaaaaaaaaaaaabsgugugufZgabzdubzbzgvbEgwdsdclZlZdcgsfNfFfFfNfNfFfFgybEgzgtgjgjgjcAbzgAbzgBbsbsaPaaaaaPaaaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaSaSaSaaaaaaaaaaaaaaaaaabsgCgCgCfZgabzgDbzgqgrbEdcgddcdcdcdcgEghgFgGfNfNfFfFfNbEgjgtgHgIgJcAgKfTfWbsbsaPaaaaaaaPaaaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaSaSaaaaaaaaaaaaaaaaaaaabsbBgLbBgpgabzdubzdugrbEdcdfdcgMgNdcbEfNfFfEfNfNfFfFfNbEgjgtgOgOgOcAbzgPbsbsaPaaaaaaaaaPaaaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaSaSaaaaaaaaaaaaaaaaaaaabsbBgLbBgpgabzdubzdugrbEdcdfdclZlZdcbEfNfFfEfNfNfFfFfNbEgjgtgOgOgOcAbzgPbsbsaPaaaaaaaaaPaaaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaaaaaaaaaaaaaaaaaaaaaabsgQbBbBfZgabzgqbzgqgrbEdcdsdcdcdcdcgRfFfFgSghghgFgFgFgTgUgVgJgJgWcAgXbsbsaPaaaaaaaaaaaPaaaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsbBbBgLgYgZhahbhahbdmbEdcdcdcdcdcdcbEfNfFfEfNfNfFfFfNbEgjgjgOgOgOcAbsbsaPaaaaaaaaaaaaaPaaaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsbBbBgLgYgZhahbhahbdmbEmadcdcdcdcdcbEfNfFfEfNfNfFfFfNbEgjgjgOgOgOcAbsbsaPaaaaaaaaaaaaaPaaaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahchchchchchchchchchchchcfDfDfDfDfDfDfDfDfDhdfDfDhefDfDfDfDfDfDfDfDfDhchchchchchchchchchchchcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahchfhghhhhhihjhkhlhchmhchnhohohphohohqfFfFfEfFfFfFfFfFhnhohohphohohrhchmhchshthuhvhwhxhfhfhcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahchfhyhzhhhAhohBhChDhEhDhFhGhGhGhGhGhHgFgFhIhJgFgFgFgFhFhGhGhGhGhGhKhDhLhDhjhMhshohfhfhNhfhcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahchfhghhhhhihjhkhlhchmhchnhohohphohohqfFkCfEfFfFfFfFfFhnhohohphohohrhchmhchshthuhvhwhxhfhfhcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahchfhyhzhhhAhohBhChDhEhDhFhGhGhGhGhGhHgFgFhIhJgFgFgFgFhFhGhGhGhGhGhKhDkMhDhjhMhshohfhfhNhfhcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaSaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahchfhOhfhfhPhshshQhchRhchnhShThUhVhWfDhXhXhXfEfFhXhXhXfDhYhZiaibichqhchRhcidiehshshfhfhfhfhcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaSaSaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahchfhyhzhhifighoihhchchcfDfDfDfDfDfDfDhXiihXfEfFhXiihXfDfDfDfDfDfDfDhchchcijhshshshfhfhNhfhcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaSaSaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahchfhOhfhfikhshsihhcaahcilililimilinfDhXiihXfEfFhXiihXfDililimilililhcaahciohshohshfhfhfhfhcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaSaSaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahchfhOhfhfikhshsihhcaahcilililimilinfDhXiihXfEkChXiihXfDililimilililhcaahciohskDhshfhfhfhfhcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahchfiphzhhhMhshsiqhcaahcililililililirhXiihXfEfFhXiihXirililililililhcaahcisithshshfhfhNhfhcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahchfhfhfhfhshohsiuhcaahcivililiwfDfDfDixiihXfEfFhXiiiyfDfDfDizililiAhcaahciBhshshshfhfhfhfhcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahchchshoighshshohQhcaahcililililiriCfDhXiihXfEfFhXiihXfDiDirililililhcaahciEhohshshshohshchcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahchchshshohohsiFhcaahcivilililfDfDfDhXiihXfEfFhXiihXfDfDfDilililiAhcaahchohohshshohshchcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahchfhfhfhfkEhohsiuhcaahcivililiwfDfDfDixiihXfEfFhXiiiyfDfDfDizililiAhcaahciBhskEhshfhfhfhfhcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahchchshoighshshohQhcaahcililililiriGfDhXiihXfEfFhXiihXfDiDirililililhcaahciEhohshshshohshchcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahchchshsmbhohsiFhcaahckFilililfDfDfDhXiihXfEfFhXiihXfDfDfDilililiAhcaahchohohshshohshchcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahchchshohshshohcaPhcililililiriGfDiHiihXfEfFhXiihXfDiDirililililhcaPhchohshshsiIhchcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahchchchciJhchcaahcivililiwfDfDfDhXiihXfEfFhXiihXfDfDfDizililiAhcaahchciJhchchchcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahchchchciJhchcaahcivilkGiwfDfDfDhXiihXfEfFhXiihXfDfDfDizilkGiAhcaahchciJhchchchcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahciKiLiMiMhcaPhcililililiriNfDhXhXiOgifFhXhXhXfDiDirililililhcaPhciMiMiLiPhcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaaaaaaaaaaaaaaaaaaaaaaaahciMiMiMiMhcaPhchchcfDfDfDfDfDfDfDhdfDfDhefDfDfDfDfDfDfDhchchcaPhciMiMiMiMhcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaaaaaaaaaaaaaaaaaaaaaaaahckNkNkNkNhcaPhchchcfDfDfDfDfDfDfDhdfDfDhefDfDfDfDfDfDfDhchchcaPhckNkNkNkNhcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaSaaaaaaaaaaaaaaaaaaaaaaaahciQiQiQiQhcaaaaaahciRiSiTghiUgFgFhIgFgFgFgFgFgFghiViWiXhcaaaaaahciQiQiQiQhcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaaaaSaSaaaaaaaaaaaaaaaaaahciYiZiZjahcaaaaaajbhGjcjdfNfEfFfFfFfFfFfFfFfFfFfNjejfjgjhaaaaaahciYiZiZjahcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaaaaSaSaaaaaaaaaaaaaaaaaahciYiZiZjahcaaaaaajbhGjcjdfNfEfFfFfFfFfFkCfFfFfFfNjejfjgjhaaaaaahciYiZiZjahcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahcjijjjdfNjkfDfDjlfDfDjlfDfDjmfNjejnjohcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaSaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajbhGjpjdfNfEfFjqhohohohojrfFfFfNjejsjgjtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaSaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajbhGkHjdfNfEfFjqkDhohohojrfFfFfNjejsjgjtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahcjujvjdfNfEfFjwjxjxjxjxjyfFfFfNjejzjAhcjBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahchcjCjdfNfEjDfFfFfFfFfFfFjDfFfNjejChchcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahchcjEfNjFeujGfFfFfFfFjHeujGfNjEhchcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahchcfNjIjJgFgGfFfFfFfFjKfFfNhchcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahcfNfNfNfNfEfFfFfFfNfNfNfNhcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahcfNjLjMfNfEfFfFfFfNjNjOfNhcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahcjPhchchcjQhchcjRhchchcjPhcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajSjSjTjUjVjVjWjTjSjSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajXjVjUjVjVjWjVjXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajXjVjUjVjVjWjVjXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajXjYjZjYjYkajYjXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajSjSjWkbkckckckdjSjSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajSjSjWjWkejWjWkfkgkhjSjSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajSjWjWkikjkfkfkfkkkljWjSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajSjWkfkfkmknkokfkfkfjWjSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajSjWkfkfkpkqkrkfkfkfjWjSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajSjWjWkfksktkukfkfjWjWjSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajSjSkvjWkfkfkfkfjWkvjSjSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajSjSkwkfkfkfkfkxjSjSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajSjSkykykykyjSjSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahcjPhchchcjQhchcjRhchchcjPhcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajSjSjTjUjVjVjWjTjSjSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajXjVjUjVjVjWjVjXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGmcmcmcmcmcmcmcmcmcmcmcmdmdmdmdmdaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajXjVjUjVjVjWjVjXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGmcmemflvlvlvlulvlvlvlumdmgltmhmdaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajXjYjZjYjYkajYjXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGmcmemelvlvlvlvlvlvlvlvmiltmjltmdaGaGaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajSjSjWkbkckckckdjSjSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGmcmemelvlvlBlvlvlvlClvmdltmkltmdaGaGaGaGaGaGaGaGaGaGaGaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajSjSjWjWkejWjWkfkgkhjSjSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGmclvlvlvlvlvlvlvlvlvlvmdltmlltmdaGaGaGaGaGaGaGaGaGaGaGaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajSjWjWkikjkfkfkfkkkljWjSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGmcmmmmlvmnmnmcmcmcmclJmcmdmdmdmdmcmcaGaGaGaGaGaGaGaGaGaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajSjWkfkfkmknkokfkfkfjWjSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGmcmmmmlvmomomcmpmqmqmqmqmqmrmqmqmqmcaGaGaGaGaGaGaGaGaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajSjWkfkfkpkIkrkfkfkfjWjSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGmcmmmmlMmomomcmqmcmcmcmcmcmcmcmclJmcmcmcaGaGaGaGaGaGaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajSjWjWkfksktkukfkfjWjWjSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGmcmcmcmcmcmcmcmcmqmcmcmtmsmtmumumumumumvmcaGaGaGaGaGaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajSjSkvjWkfkfkfkfjWkvjSjSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGmcmqmrmqmwmwmwmqmqmcmcmtmtmtmumumumumumumcaGaGaGaGaGaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajSjSkwkfkfkfkfkxjSjSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGmcmqmqmqmqmqmqmqmqmcmcmtmtmxmumumymumumumcaGaGaGaGaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajSjSkykykykyjSjSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGmcmqmqmqmqmqmqmqmqmcmcmumumumumAmzmCmBmumcaGaGaGaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaGaGaGaGaGaGmDmDmDmDmDmDaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajSmEkfmFkfmGmHjSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGmcmwmqmqmqmqmImqmqmcmcmKmJmLmumumMmumumumcaGaGaGaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaGaGaGmDmDmDmDmDmDmNmNmOmOmDaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajSkfmGkfmPmFkfjSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGmcmwmQmqmqmqmqmqmqmcmcmcmcmclFlFlFlFlFlFmcaGaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaGaGmDmDmNmNmNmNmNmNmNmOmOmDmDmDaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajSkfmFmGkfmGkfjSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGmcmwmqmqmqmRmqmqmqmcaGaGaGaGaaaaaaaaaaaaaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaGmDmNmNmSmNmNmNmTmNmOmOmDmDmDmDmDmDaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajSjSjSjSjSjSjSjSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGmcmcmcmcmcmcmcmcmcmcaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaGmDmNmNmNmNmUmNmNmNmNmDmDmDmNmNmNmDmDmDaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaGmDmVmNmTmUmNmUmNmNmNmDmDmNmNmWmNmNmNmDaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaGmDmVmNmNmNmUmNmNmNmDmDmDmNmNmNmNmXmNmDaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaGmDmVmUmNmNmTmNmNmNmDmDmDmNmXmNmNmNmNmDaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaGmDmDmNmNmNmNmNmUmNmNmNmNmNmNmUmNmXmNmDaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaGmDmDmDmNmNmNmNmNmNmNmNmNmNmTmNmNmDmDaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaGaGmDmDmDmDmNmNmNmNmDmDmDmDmDmDmDaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaGaGaGmDmDmDmDmDmDmYaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
|
||||
@@ -140,7 +140,7 @@ Pipelines + Other Objects -> Pipe network
|
||||
user << "<span class='warning'>As you begin unwrenching \the [src] a gush of air blows in your face... maybe you should reconsider?</span>"
|
||||
unsafe_wrenching = TRUE //Oh dear oh dear
|
||||
|
||||
if (do_after(user, 20, target = src) && !gc_destroyed)
|
||||
if (do_after(user, 20/W.toolspeed, target = src) && !gc_destroyed)
|
||||
user.visible_message( \
|
||||
"[user] unfastens \the [src].", \
|
||||
"<span class='notice'>You unfasten \the [src].</span>", \
|
||||
|
||||
@@ -266,7 +266,7 @@
|
||||
if (WT.remove_fuel(0,user))
|
||||
playsound(loc, 'sound/items/Welder.ogg', 40, 1)
|
||||
user << "<span class='notice'>You begin welding the vent...</span>"
|
||||
if(do_after(user, 20, target = src))
|
||||
if(do_after(user, 20/W.toolspeed, target = src))
|
||||
if(!src || !WT.isOn()) return
|
||||
playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1)
|
||||
if(!welded)
|
||||
|
||||
@@ -297,7 +297,7 @@
|
||||
if(WT.remove_fuel(0,user))
|
||||
playsound(loc, 'sound/items/Welder.ogg', 40, 1)
|
||||
user << "<span class='notice'>Now welding the scrubber.</span>"
|
||||
if(do_after(user, 20, target = src))
|
||||
if(do_after(user, 20/W.toolspeed, target = src))
|
||||
if(!src || !WT.isOn())
|
||||
return
|
||||
playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1)
|
||||
|
||||
@@ -8,8 +8,8 @@ var/datum/subsystem/events/SSevent
|
||||
var/list/running = list() //list of all existing /datum/round_event
|
||||
|
||||
var/scheduled = 0 //The next world.time that a naturally occuring random event can be selected.
|
||||
var/frequency_lower = 3000 //5 minutes lower bound.
|
||||
var/frequency_upper = 9000 //15 minutes upper bound. Basically an event will happen every 5 to 15 minutes.
|
||||
var/frequency_lower = 1800 //3 minutes lower bound.
|
||||
var/frequency_upper = 6000 //10 minutes upper bound. Basically an event will happen every 3 to 10 minutes.
|
||||
|
||||
var/list/holidays //List of all holidays occuring today or null if no holidays
|
||||
var/wizardmode = 0
|
||||
|
||||
+16
-10
@@ -41,6 +41,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
|
||||
var/spell_level = 0 //if a spell can be taken multiple times, this raises
|
||||
var/level_max = 4 //The max possible level_max is 4
|
||||
var/cooldown_min = 0 //This defines what spell quickened four times has as a cooldown. Make sure to set this for every spell
|
||||
var/player_lock = 1 //If it can be used by simple mobs
|
||||
|
||||
var/overlay = 0
|
||||
var/overlay_icon = 'icons/obj/wizard.dmi'
|
||||
@@ -62,9 +63,13 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
|
||||
|
||||
/obj/effect/proc_holder/spell/proc/cast_check(skipcharge = 0,mob/user = usr) //checks if the spell can be cast based on its settings; skipcharge is used when an additional cast_check is called inside the spell
|
||||
|
||||
if(((!user.mind) || !(src in user.mind.spell_list)) && !(src in user.mob_spell_list))
|
||||
user << "<span class='warning'>You shouldn't have this spell! Something's wrong.</span>"
|
||||
return 0
|
||||
if(player_lock)
|
||||
if(!user.mind || !(src in user.mind.spell_list) && !(src in user.mob_spell_list))
|
||||
user << "<span class='warning'>You shouldn't have this spell! Something's wrong.</span>"
|
||||
return 0
|
||||
else
|
||||
if(!(src in user.mob_spell_list))
|
||||
return 0
|
||||
|
||||
if(user.z == ZLEVEL_CENTCOM && !centcom_cancast) //Certain spells are not allowed on the centcom zlevel
|
||||
return 0
|
||||
@@ -170,8 +175,9 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
|
||||
|
||||
/obj/effect/proc_holder/spell/proc/perform(list/targets, recharge = 1, mob/user = usr) //if recharge is started is important for the trigger spells
|
||||
before_cast(targets)
|
||||
invocation()
|
||||
user.attack_log += text("\[[time_stamp()]\] <span class='danger'>[user.real_name] ([user.ckey]) cast the spell [name].</span>")
|
||||
invocation(user)
|
||||
if(user.ckey)
|
||||
user.attack_log += text("\[[time_stamp()]\] <span class='danger'>[user.real_name] ([user.ckey]) cast the spell [name].</span>")
|
||||
spawn(0)
|
||||
if(charge_type == "recharge" && recharge)
|
||||
start_recharge()
|
||||
@@ -180,7 +186,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
|
||||
if(prob(critfailchance))
|
||||
critfail(targets)
|
||||
else
|
||||
cast(targets)
|
||||
cast(targets,user=user)
|
||||
after_cast(targets)
|
||||
|
||||
/obj/effect/proc_holder/spell/proc/before_cast(list/targets)
|
||||
@@ -227,7 +233,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
|
||||
smoke.start()
|
||||
|
||||
|
||||
/obj/effect/proc_holder/spell/proc/cast(list/targets)
|
||||
/obj/effect/proc_holder/spell/proc/cast(list/targets,mob/user = usr)
|
||||
return
|
||||
|
||||
/obj/effect/proc_holder/spell/proc/critfail(list/targets)
|
||||
@@ -334,7 +340,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
|
||||
revert_cast(user)
|
||||
return
|
||||
|
||||
perform(targets)
|
||||
perform(targets,user=user)
|
||||
|
||||
return
|
||||
|
||||
@@ -349,7 +355,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
|
||||
revert_cast()
|
||||
return
|
||||
|
||||
perform(targets)
|
||||
perform(targets,user=user)
|
||||
|
||||
return
|
||||
|
||||
@@ -418,7 +424,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
|
||||
if(!user)
|
||||
revert_cast()
|
||||
return
|
||||
perform(user)
|
||||
perform(null,user=user)
|
||||
|
||||
/obj/effect/proc_holder/spell/self/basic_heal //This spell exists mainly for debugging purposes, and also to show how casting works
|
||||
name = "Lesser Heal"
|
||||
|
||||
@@ -32,8 +32,8 @@
|
||||
|
||||
return thearea
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/area_teleport/cast(list/targets,area/thearea)
|
||||
playsound(get_turf(usr), sound1, 50,1)
|
||||
/obj/effect/proc_holder/spell/targeted/area_teleport/cast(list/targets,area/thearea,mob/user = usr)
|
||||
playsound(get_turf(user), sound1, 50,1)
|
||||
for(var/mob/living/target in targets)
|
||||
var/list/L = list()
|
||||
for(var/turf/T in get_area_turfs(thearea.type))
|
||||
@@ -67,22 +67,22 @@
|
||||
|
||||
if(!success)
|
||||
target.loc = pick(L)
|
||||
playsound(get_turf(usr), sound2, 50,1)
|
||||
playsound(get_turf(user), sound2, 50,1)
|
||||
|
||||
return
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/area_teleport/invocation(area/chosenarea = null)
|
||||
/obj/effect/proc_holder/spell/targeted/area_teleport/invocation(area/chosenarea = null,mob/user = usr)
|
||||
if(!invocation_area || !chosenarea)
|
||||
..()
|
||||
else
|
||||
switch(invocation_type)
|
||||
if("shout")
|
||||
usr.say("[invocation] [uppertext(chosenarea.name)]")
|
||||
if(usr.gender==MALE)
|
||||
playsound(usr.loc, pick('sound/misc/null.ogg','sound/misc/null.ogg'), 100, 1)
|
||||
user.say("[invocation] [uppertext(chosenarea.name)]")
|
||||
if(user.gender==MALE)
|
||||
playsound(user.loc, pick('sound/misc/null.ogg','sound/misc/null.ogg'), 100, 1)
|
||||
else
|
||||
playsound(usr.loc, pick('sound/misc/null.ogg','sound/misc/null.ogg'), 100, 1)
|
||||
playsound(user.loc, pick('sound/misc/null.ogg','sound/misc/null.ogg'), 100, 1)
|
||||
if("whisper")
|
||||
usr.whisper("[invocation] [uppertext(chosenarea.name)]")
|
||||
user.whisper("[invocation] [uppertext(chosenarea.name)]")
|
||||
|
||||
return
|
||||
|
||||
@@ -12,9 +12,9 @@
|
||||
include_user = 1
|
||||
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/charge/cast(list/targets)
|
||||
for(var/mob/living/user in targets)
|
||||
var/list/hand_items = list(user.get_active_hand(),user.get_inactive_hand())
|
||||
/obj/effect/proc_holder/spell/targeted/charge/cast(list/targets,mob/user = usr)
|
||||
for(var/mob/living/L in targets)
|
||||
var/list/hand_items = list(L.get_active_hand(),L.get_inactive_hand())
|
||||
var/charged_item = null
|
||||
var/burnt_out = 0
|
||||
for(var/obj/item in hand_items)
|
||||
@@ -38,15 +38,15 @@
|
||||
if(istype(item, /obj/item/weapon/spellbook/oneuse))
|
||||
var/obj/item/weapon/spellbook/oneuse/I = item
|
||||
if(prob(80))
|
||||
user.visible_message("<span class='warning'>[I] catches fire!</span>")
|
||||
L.visible_message("<span class='warning'>[I] catches fire!</span>")
|
||||
qdel(I)
|
||||
else
|
||||
I.used = 0
|
||||
charged_item = I
|
||||
break
|
||||
else
|
||||
user << "<span class='caution'>Glowing red letters appear on the front cover...</span>"
|
||||
user << "<span class='warning'>[pick("NICE TRY BUT NO!","CLEVER BUT NOT CLEVER ENOUGH!", "SUCH FLAGRANT CHEESING IS WHY WE ACCEPTED YOUR APPLICATION!", "CUTE!", "YOU DIDN'T THINK IT'D BE THAT EASY, DID YOU?")]</span>"
|
||||
L << "<span class='caution'>Glowing red letters appear on the front cover...</span>"
|
||||
L << "<span class='warning'>[pick("NICE TRY BUT NO!","CLEVER BUT NOT CLEVER ENOUGH!", "SUCH FLAGRANT CHEESING IS WHY WE ACCEPTED YOUR APPLICATION!", "CUTE!", "YOU DIDN'T THINK IT'D BE THAT EASY, DID YOU?")]</span>"
|
||||
burnt_out = 1
|
||||
else if(istype(item, /obj/item/weapon/gun/magic))
|
||||
var/obj/item/weapon/gun/magic/I = item
|
||||
@@ -86,9 +86,9 @@
|
||||
charged_item = item
|
||||
break
|
||||
if(!charged_item)
|
||||
user << "<span class='notice'>you feel magical power surging to your hands, but the feeling rapidly fades...</span>"
|
||||
L << "<span class='notice'>you feel magical power surging to your hands, but the feeling rapidly fades...</span>"
|
||||
else if(burnt_out)
|
||||
user << "<span class='caution'>[charged_item] doesn't seem to be reacting to the spell...</span>"
|
||||
L << "<span class='caution'>[charged_item] doesn't seem to be reacting to the spell...</span>"
|
||||
else
|
||||
playsound(get_turf(usr), "sound/magic/Charge.ogg", 50, 1)
|
||||
user << "<span class='notice'>[charged_item] suddenly feels very warm!</span>"
|
||||
playsound(get_turf(L), "sound/magic/Charge.ogg", 50, 1)
|
||||
L << "<span class='notice'>[charged_item] suddenly feels very warm!</span>"
|
||||
|
||||
@@ -15,8 +15,8 @@
|
||||
|
||||
var/cast_sound = 'sound/items/welder.ogg'
|
||||
|
||||
/obj/effect/proc_holder/spell/aoe_turf/conjure/cast(list/targets)
|
||||
playsound(get_turf(usr), cast_sound, 50,1)
|
||||
/obj/effect/proc_holder/spell/aoe_turf/conjure/cast(list/targets,mob/user = usr)
|
||||
playsound(get_turf(user), cast_sound, 50,1)
|
||||
for(var/turf/T in targets)
|
||||
if(T.density && !summon_ignore_density)
|
||||
targets -= T
|
||||
|
||||
@@ -22,13 +22,13 @@
|
||||
|
||||
/obj/effect/proc_holder/spell/dumbfire/choose_targets(mob/user = usr)
|
||||
|
||||
var/turf/T = get_turf(usr)
|
||||
var/turf/T = get_turf(user)
|
||||
for(var/i = 1; i < range; i++)
|
||||
var/turf/new_turf = get_step(T, usr.dir)
|
||||
var/turf/new_turf = get_step(T, user.dir)
|
||||
if(new_turf.density)
|
||||
break
|
||||
T = new_turf
|
||||
perform(list(T))
|
||||
perform(list(T),user = user)
|
||||
|
||||
/obj/effect/proc_holder/spell/dumbfire/cast(list/targets, mob/user = usr)
|
||||
playMagSound()
|
||||
@@ -46,7 +46,7 @@
|
||||
projectile.dir = get_dir(projectile, target)
|
||||
projectile.name = proj_name
|
||||
|
||||
var/current_loc = usr.loc
|
||||
var/current_loc = user.loc
|
||||
|
||||
projectile.loc = current_loc
|
||||
|
||||
@@ -60,12 +60,12 @@
|
||||
step(projectile, projectile.dir)
|
||||
|
||||
if(projectile.loc == current_loc || i == proj_lifespan)
|
||||
projectile.cast(current_loc)
|
||||
projectile.cast(current_loc,user=user)
|
||||
break
|
||||
|
||||
var/mob/living/L = locate(/mob/living) in range(projectile, proj_trigger_range) - usr
|
||||
var/mob/living/L = locate(/mob/living) in range(projectile, proj_trigger_range) - user
|
||||
if(L && L.stat != DEAD)
|
||||
projectile.cast(L.loc)
|
||||
projectile.cast(L.loc,user=user)
|
||||
break
|
||||
|
||||
if(proj_trail && projectile)
|
||||
|
||||
@@ -8,8 +8,8 @@
|
||||
action_icon_state = "emp"
|
||||
sound = "sound/weapons/ZapBang.ogg"
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/emplosion/cast(list/targets)
|
||||
playsound(get_turf(usr), sound, 50,1)
|
||||
/obj/effect/proc_holder/spell/targeted/emplosion/cast(list/targets,mob/user = usr)
|
||||
playsound(get_turf(user), sound, 50,1)
|
||||
for(var/mob/living/target in targets)
|
||||
empulse(target.loc, emp_heavy, emp_light)
|
||||
|
||||
|
||||
@@ -15,8 +15,8 @@
|
||||
var/jaunt_duration = 50 //in deciseconds
|
||||
action_icon_state = "jaunt"
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/cast(list/targets) //magnets, so mostly hardcoded
|
||||
playsound(get_turf(usr), 'sound/magic/Ethereal_Enter.ogg', 50, 1, -1)
|
||||
/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/cast(list/targets,mob/user = usr) //magnets, so mostly hardcoded
|
||||
playsound(get_turf(user), 'sound/magic/Ethereal_Enter.ogg', 50, 1, -1)
|
||||
for(var/mob/living/target in targets)
|
||||
target.notransform = 1 //protects the mob from being transformed (replaced) midjaunt and getting stuck in bluespace
|
||||
spawn(0)
|
||||
@@ -50,7 +50,7 @@
|
||||
jaunt_steam(mobloc)
|
||||
target.canmove = 0
|
||||
holder.reappearing = 1
|
||||
playsound(get_turf(usr), 'sound/magic/Ethereal_Exit.ogg', 50, 1, -1)
|
||||
playsound(get_turf(user), 'sound/magic/Ethereal_Exit.ogg', 50, 1, -1)
|
||||
sleep(20)
|
||||
jaunt_reappear(animation, target)
|
||||
sleep(5)
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
var/ex_light = 3
|
||||
var/ex_flash = 4
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/explosion/cast(list/targets)
|
||||
/obj/effect/proc_holder/spell/targeted/explosion/cast(list/targets,mob/user = usr)
|
||||
|
||||
for(var/mob/living/target in targets)
|
||||
explosion(target.loc,ex_severe,ex_heavy,ex_light,ex_flash)
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
6th bit - ?
|
||||
*/
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/genetic/cast(list/targets)
|
||||
/obj/effect/proc_holder/spell/targeted/genetic/cast(list/targets,mob/user = usr)
|
||||
playMagSound()
|
||||
for(var/mob/living/carbon/target in targets)
|
||||
if(!target.dna)
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
var/summon_type = null //this will put an obj at the target's location
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/inflict_handler/cast(list/targets)
|
||||
/obj/effect/proc_holder/spell/targeted/inflict_handler/cast(list/targets,mob/user = usr)
|
||||
|
||||
for(var/mob/living/target in targets)
|
||||
playsound(target,sound, 50,1)
|
||||
|
||||
@@ -12,8 +12,8 @@
|
||||
|
||||
action_icon_state = "knock"
|
||||
|
||||
/obj/effect/proc_holder/spell/aoe_turf/knock/cast(list/targets)
|
||||
usr << sound("sound/magic/Knock.ogg")
|
||||
/obj/effect/proc_holder/spell/aoe_turf/knock/cast(list/targets,mob/user = usr)
|
||||
user << sound("sound/magic/Knock.ogg")
|
||||
for(var/turf/T in targets)
|
||||
for(var/obj/machinery/door/door in T.contents)
|
||||
spawn(1)
|
||||
|
||||
@@ -34,35 +34,35 @@
|
||||
ticker.mode.round_ends_with_antag_death = 1
|
||||
..()
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/lichdom/cast(list/targets)
|
||||
for(var/mob/user in targets)
|
||||
/obj/effect/proc_holder/spell/targeted/lichdom/cast(list/targets,mob/user = usr)
|
||||
for(var/mob/M in targets)
|
||||
var/list/hand_items = list()
|
||||
if(iscarbon(user))
|
||||
hand_items = list(user.get_active_hand(),user.get_inactive_hand())
|
||||
if(iscarbon(M))
|
||||
hand_items = list(M.get_active_hand(),M.get_inactive_hand())
|
||||
|
||||
if(marked_item && !stat_allowed) //sanity, shouldn't happen without badminry
|
||||
marked_item = null
|
||||
return
|
||||
|
||||
if(stat_allowed) //Death is not my end!
|
||||
if(user.stat == CONSCIOUS && iscarbon(user))
|
||||
user << "<span class='notice'>You aren't dead enough to revive!</span>" //Usually a good problem to have
|
||||
if(M.stat == CONSCIOUS && iscarbon(M))
|
||||
M << "<span class='notice'>You aren't dead enough to revive!</span>" //Usually a good problem to have
|
||||
charge_counter = charge_max
|
||||
return
|
||||
|
||||
if(!marked_item || qdeleted(marked_item)) //Wait nevermind
|
||||
user << "<span class='warning'>Your phylactery is gone!</span>"
|
||||
M << "<span class='warning'>Your phylactery is gone!</span>"
|
||||
return
|
||||
|
||||
var/turf/user_turf = get_turf(user)
|
||||
var/turf/user_turf = get_turf(M)
|
||||
var/turf/item_turf = get_turf(marked_item)
|
||||
|
||||
if(user_turf.z != item_turf.z)
|
||||
user << "<span class='warning'>Your phylactery is out of range!</span>"
|
||||
M << "<span class='warning'>Your phylactery is out of range!</span>"
|
||||
return
|
||||
|
||||
if(isobserver(user))
|
||||
var/mob/dead/observer/O = user
|
||||
if(isobserver(M))
|
||||
var/mob/dead/observer/O = M
|
||||
O.reenter_corpse()
|
||||
|
||||
var/mob/living/carbon/human/lich = new /mob/living/carbon/human(item_turf)
|
||||
@@ -72,8 +72,8 @@
|
||||
lich.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/black(lich), slot_wear_suit)
|
||||
lich.equip_to_slot_or_del(new /obj/item/clothing/head/wizard/black(lich), slot_head)
|
||||
|
||||
lich.real_name = user.mind.name
|
||||
user.mind.transfer_to(lich)
|
||||
lich.real_name = M.mind.name
|
||||
M.mind.transfer_to(lich)
|
||||
lich.hardset_dna(null,null,lich.real_name,null,/datum/species/skeleton)
|
||||
lich << "<span class='warning'>Your bones clatter and shutter as they're pulled back into this world!</span>"
|
||||
charge_max += 600
|
||||
@@ -99,15 +99,15 @@
|
||||
if(ABSTRACT in item.flags || NODROP in item.flags)
|
||||
continue
|
||||
marked_item = item
|
||||
user << "<span class='warning'>You begin to focus your very being into the [item.name]...</span>"
|
||||
M << "<span class='warning'>You begin to focus your very being into the [item.name]...</span>"
|
||||
break
|
||||
|
||||
if(!marked_item)
|
||||
user << "<span class='caution'>You must hold an item you wish to make your phylactery...</span>"
|
||||
M << "<span class='caution'>You must hold an item you wish to make your phylactery...</span>"
|
||||
|
||||
spawn(50)
|
||||
if(marked_item.loc != user) //I changed my mind I don't want to put my soul in a cheeseburger!
|
||||
user << "<span class='warning'>Your soul snaps back to your body as you drop the [marked_item.name]!</span>"
|
||||
if(marked_item.loc != M) //I changed my mind I don't want to put my soul in a cheeseburger!
|
||||
M << "<span class='warning'>Your soul snaps back to your body as you drop the [marked_item.name]!</span>"
|
||||
marked_item = null
|
||||
return
|
||||
name = "RISE!"
|
||||
@@ -118,11 +118,11 @@
|
||||
marked_item.name = "Ensouled [marked_item.name]"
|
||||
marked_item.desc = "A terrible aura surrounds this item, its very existence is offensive to life itself..."
|
||||
marked_item.color = "#003300"
|
||||
user << "<span class='userdanger'>With a hideous feeling of emptiness you watch in horrified fascination as skin sloughs off bone! Blood boils, nerves disintegrate, eyes boil in their sockets! As your organs crumble to dust in your fleshless chest you come to terms with your choice. You're a lich!</span>"
|
||||
user.set_species(/datum/species/skeleton)
|
||||
current_body = user.mind.current
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
M << "<span class='userdanger'>With a hideous feeling of emptiness you watch in horrified fascination as skin sloughs off bone! Blood boils, nerves disintegrate, eyes boil in their sockets! As your organs crumble to dust in your fleshless chest you come to terms with your choice. You're a lich!</span>"
|
||||
M.set_species(/datum/species/skeleton)
|
||||
current_body = M.mind.current
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
H.unEquip(H.wear_suit)
|
||||
H.unEquip(H.head)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/black(H), slot_wear_suit)
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
Snd = new/sound('sound/magic/lightning_chargeup.ogg',channel = 7)
|
||||
halo = image("icon"='icons/effects/effects.dmi',"icon_state" ="electricity","layer" = EFFECTS_LAYER)
|
||||
user.overlays.Add(halo)
|
||||
playsound(get_turf(usr), Snd, 50, 0)
|
||||
playsound(get_turf(user), Snd, 50, 0)
|
||||
if(do_mob(user,user,100,uninterruptible=1))
|
||||
if(ready && cast_check(skipcharge=1))
|
||||
choose_targets()
|
||||
@@ -48,13 +48,13 @@
|
||||
ready = 0
|
||||
var/mob/living/carbon/target = targets[1]
|
||||
Snd=sound(null, repeat = 0, wait = 1, channel = Snd.channel) //byond, why you suck?
|
||||
playsound(get_turf(usr),Snd,50,0)// Sorry MrPerson, but the other ways just didn't do it the way i needed to work, this is the only way.
|
||||
playsound(get_turf(user),Snd,50,0)// Sorry MrPerson, but the other ways just didn't do it the way i needed to work, this is the only way.
|
||||
if(get_dist(user,target)>range)
|
||||
user << "<span class='notice'>They are too far away!</span>"
|
||||
Reset(user)
|
||||
return
|
||||
|
||||
playsound(get_turf(usr), 'sound/magic/lightningbolt.ogg', 50, 1)
|
||||
playsound(get_turf(user), 'sound/magic/lightningbolt.ogg', 50, 1)
|
||||
user.Beam(target,icon_state="lightning",icon='icons/effects/effects.dmi',time=5)
|
||||
|
||||
Bolt(user,target,30,5,user)
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
still_recharging_msg = "<span class='warning'>You'll have to wait before you can give your vow of silence again!</span>"
|
||||
..()
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/mime/speak/cast(list/targets)
|
||||
/obj/effect/proc_holder/spell/targeted/mime/speak/cast(list/targets,mob/user = usr)
|
||||
for(var/mob/living/carbon/human/H in targets)
|
||||
H.mind.miming=!H.mind.miming
|
||||
if(H.mind.miming)
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
projectile.dir = get_dir(target,projectile)
|
||||
projectile.name = proj_name
|
||||
|
||||
var/current_loc = usr.loc
|
||||
var/current_loc = user.loc
|
||||
|
||||
projectile.loc = current_loc
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
qdel(trail)
|
||||
|
||||
if(projectile.loc in range(target.loc,proj_trigger_range))
|
||||
projectile.perform(list(target))
|
||||
projectile.perform(list(target),user=user)
|
||||
break
|
||||
|
||||
current_loc = projectile.loc
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
var/list/current_shapes = list()
|
||||
var/list/current_casters = list()
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/shapeshift/cast(list/targets)
|
||||
/obj/effect/proc_holder/spell/targeted/shapeshift/cast(list/targets,mob/user = usr)
|
||||
for(var/mob/living/M in targets)
|
||||
if(M in current_shapes)
|
||||
Restore(M)
|
||||
|
||||
@@ -15,9 +15,9 @@
|
||||
|
||||
action_icon_state = "summons"
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/summonitem/cast(list/targets)
|
||||
for(var/mob/living/user in targets)
|
||||
var/list/hand_items = list(user.get_active_hand(),user.get_inactive_hand())
|
||||
/obj/effect/proc_holder/spell/targeted/summonitem/cast(list/targets,mob/user = usr)
|
||||
for(var/mob/living/L in targets)
|
||||
var/list/hand_items = list(L.get_active_hand(),L.get_inactive_hand())
|
||||
var/butterfingers = 0
|
||||
var/message
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
var/obj/item/organ/internal/organ = item_to_retrive
|
||||
if(organ.owner)
|
||||
// If this code ever runs I will be happy
|
||||
add_logs(user, organ.owner, "magically removed [organ.name] from", addition="INTENT: [uppertext(user.a_intent)]")
|
||||
add_logs(L, organ.owner, "magically removed [organ.name] from", addition="INTENT: [uppertext(L.a_intent)]")
|
||||
organ.Remove(organ.owner)
|
||||
else
|
||||
while(!isturf(item_to_retrive.loc) && infinite_recursion < 10) //if it's in something you get the whole thing.
|
||||
@@ -67,7 +67,7 @@
|
||||
|
||||
if(issilicon(M)) //Items in silicons warp the whole silicon
|
||||
M.loc.visible_message("<span class='warning'>[M] suddenly disappears!</span>")
|
||||
M.loc = user.loc
|
||||
M.loc = L.loc
|
||||
M.loc.visible_message("<span class='caution'>[M] suddenly appears!</span>")
|
||||
item_to_retrive = null
|
||||
break
|
||||
@@ -95,22 +95,22 @@
|
||||
item_to_retrive.loc.visible_message("<span class='warning'>The [item_to_retrive.name] suddenly disappears!</span>")
|
||||
|
||||
|
||||
if(user.hand) //left active hand
|
||||
if(!user.equip_to_slot_if_possible(item_to_retrive, slot_l_hand, 0, 1, 1))
|
||||
if(!user.equip_to_slot_if_possible(item_to_retrive, slot_r_hand, 0, 1, 1))
|
||||
if(L.hand) //left active hand
|
||||
if(!L.equip_to_slot_if_possible(item_to_retrive, slot_l_hand, 0, 1, 1))
|
||||
if(!L.equip_to_slot_if_possible(item_to_retrive, slot_r_hand, 0, 1, 1))
|
||||
butterfingers = 1
|
||||
else //right active hand
|
||||
if(!user.equip_to_slot_if_possible(item_to_retrive, slot_r_hand, 0, 1, 1))
|
||||
if(!user.equip_to_slot_if_possible(item_to_retrive, slot_l_hand, 0, 1, 1))
|
||||
if(!L.equip_to_slot_if_possible(item_to_retrive, slot_r_hand, 0, 1, 1))
|
||||
if(!L.equip_to_slot_if_possible(item_to_retrive, slot_l_hand, 0, 1, 1))
|
||||
butterfingers = 1
|
||||
if(butterfingers)
|
||||
item_to_retrive.loc = user.loc
|
||||
item_to_retrive.loc = L.loc
|
||||
item_to_retrive.loc.visible_message("<span class='caution'>The [item_to_retrive.name] suddenly appears!</span>")
|
||||
playsound(get_turf(user),"sound/magic/SummonItems_generic.ogg",50,1)
|
||||
playsound(get_turf(L),"sound/magic/SummonItems_generic.ogg",50,1)
|
||||
else
|
||||
item_to_retrive.loc.visible_message("<span class='caution'>The [item_to_retrive.name] suddenly appears in [user]'s hand!</span>")
|
||||
playsound(get_turf(user),"sound/magic/SummonItems_generic.ogg",50,1)
|
||||
item_to_retrive.loc.visible_message("<span class='caution'>The [item_to_retrive.name] suddenly appears in [L]'s hand!</span>")
|
||||
playsound(get_turf(L),"sound/magic/SummonItems_generic.ogg",50,1)
|
||||
|
||||
|
||||
if(message)
|
||||
user << message
|
||||
L << message
|
||||
|
||||
@@ -14,10 +14,10 @@
|
||||
return 0
|
||||
..()
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/touch/cast(list/targets)
|
||||
for(var/mob/living/carbon/user in targets)
|
||||
/obj/effect/proc_holder/spell/targeted/touch/cast(list/targets,mob/user = usr)
|
||||
for(var/mob/living/carbon/C in targets)
|
||||
if(!attached_hand)
|
||||
if(!ChargeHand(user))
|
||||
if(!ChargeHand(C))
|
||||
return 0
|
||||
while(attached_hand) //hibernate untill the spell is actually used
|
||||
charge_counter = 0
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
starting_spells = null
|
||||
return ..()
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/trigger/cast(list/targets)
|
||||
/obj/effect/proc_holder/spell/targeted/trigger/cast(list/targets,mob/user = usr)
|
||||
playMagSound()
|
||||
for(var/mob/living/target in targets)
|
||||
for(var/obj/effect/proc_holder/spell/spell in contents)
|
||||
|
||||
@@ -11,8 +11,8 @@
|
||||
var/sound1 = "sound/weapons/ZapBang.ogg"
|
||||
var/sound2 = "sound/weapons/ZapBang.ogg"
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/turf_teleport/cast(list/targets)
|
||||
playsound(get_turf(usr), sound1, 50,1)
|
||||
/obj/effect/proc_holder/spell/targeted/turf_teleport/cast(list/targets,mob/user = usr)
|
||||
playsound(get_turf(user), sound1, 50,1)
|
||||
for(var/mob/living/target in targets)
|
||||
var/list/turfs = new/list()
|
||||
for(var/turf/T in range(target,outer_tele_radius))
|
||||
@@ -41,4 +41,4 @@
|
||||
if(target.buckled_mob)
|
||||
target.unbuckle_mob(force=1)
|
||||
target.loc = picked
|
||||
playsound(get_turf(usr), sound2, 50,1)
|
||||
playsound(get_turf(user), sound2, 50,1)
|
||||
|
||||
@@ -273,7 +273,7 @@
|
||||
action_icon_state = "fireball"
|
||||
sound = "sound/magic/Fireball.ogg"
|
||||
|
||||
/obj/effect/proc_holder/spell/turf/fireball/cast(turf/T)
|
||||
/obj/effect/proc_holder/spell/turf/fireball/cast(turf/T,mob/user = usr)
|
||||
explosion(T, -1, 0, 2, 3, 0, flame_range = 2)
|
||||
|
||||
|
||||
@@ -303,8 +303,7 @@
|
||||
|
||||
action_icon_state = "repulse"
|
||||
|
||||
/obj/effect/proc_holder/spell/aoe_turf/repulse/cast(list/targets)
|
||||
var/mob/user = usr
|
||||
/obj/effect/proc_holder/spell/aoe_turf/repulse/cast(list/targets,mob/user = usr)
|
||||
var/list/thrownatoms = list()
|
||||
var/atom/throwtarget
|
||||
var/distfromcaster
|
||||
@@ -351,9 +350,9 @@
|
||||
action_icon_state = "tailsweep"
|
||||
action_background_icon_state = "bg_alien"
|
||||
|
||||
/obj/effect/proc_holder/spell/aoe_turf/repulse/xeno/cast(list/targets)
|
||||
if(istype(usr, /mob/living/carbon))
|
||||
var/mob/living/carbon/C = usr
|
||||
/obj/effect/proc_holder/spell/aoe_turf/repulse/xeno/cast(list/targets,mob/user = usr)
|
||||
if(istype(user, /mob/living/carbon))
|
||||
var/mob/living/carbon/C = user
|
||||
playsound(C.loc, 'sound/voice/hiss5.ogg', 80, 1, 1)
|
||||
C.spin(6,1)
|
||||
..()
|
||||
|
||||
@@ -373,7 +373,6 @@ var/list/uplink_items = list()
|
||||
desc = "A box of shurikens from ancient Earth martial arts. They are highly effective throwing weapons, and will embed into limbs when possible."
|
||||
item = /obj/item/weapon/storage/box/throwing_stars
|
||||
cost = 6
|
||||
excludefrom = list(/datum/game_mode/nuclear)
|
||||
|
||||
/datum/uplink_item/stealthy_weapons/edagger
|
||||
name = "Energy Dagger"
|
||||
@@ -583,6 +582,16 @@ var/list/uplink_items = list()
|
||||
cost = 8
|
||||
excludefrom = list(/datum/game_mode/gang)
|
||||
|
||||
/datum/uplink_item/device_tools/hardsuit
|
||||
name = "Elite Syndicate Hardsuit"
|
||||
desc = "The elite Syndicate hardsuit is worn by only the best nuclear agents. Features much better armoring and complete fireproofing, as well as a built in jetpack. \
|
||||
When the built in helmet is deployed your identity will be protected, even in death, as the suit cannot be removed by outside forces. Toggling the suit into combat mode \
|
||||
will allow you all the mobility of a loose fitting uniform without sacrificing armoring. Additionally the suit is collapsible, small enough to fit within a backpack. \
|
||||
Nanotrasen crewmembers are trained to report red space suit sightings; these suits in particular are known to drive employees into a panic."
|
||||
item = /obj/item/clothing/suit/space/hardsuit/syndi/elite
|
||||
cost = 8
|
||||
gamemodes = list(/datum/game_mode/nuclear)
|
||||
|
||||
/datum/uplink_item/device_tools/thermal
|
||||
name = "Thermal Imaging Glasses"
|
||||
desc = "These goggles can be turned to resemble common eyewears throughout the station. \
|
||||
@@ -793,7 +802,6 @@ var/list/uplink_items = list()
|
||||
You can also play card games with them or leave them on your victims."
|
||||
item = /obj/item/toy/cards/deck/syndicate
|
||||
cost = 1
|
||||
excludefrom = list(/datum/game_mode/nuclear)
|
||||
surplus = 40
|
||||
|
||||
/datum/uplink_item/badass/syndiecash
|
||||
@@ -874,4 +882,4 @@ var/list/uplink_items = list()
|
||||
U.purchase_log += "<BIG>\icon[C]</BIG>"
|
||||
for(var/item in bought_items)
|
||||
new item(C)
|
||||
U.purchase_log += "<BIG>\icon[item]</BIG>"
|
||||
U.purchase_log += "<BIG>\icon[item]</BIG>"
|
||||
@@ -30,6 +30,8 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
|
||||
var/lightswitch = 1
|
||||
var/valid_territory = 1 //If it's a valid territory for gangs to claim
|
||||
|
||||
var/blob_allowed = 1 //Does it count for blobs score? By default, all areas count.
|
||||
|
||||
var/eject = null
|
||||
|
||||
var/requires_power = 1
|
||||
@@ -97,6 +99,7 @@ var/list/teleportlocs = list()
|
||||
power_environ = 0
|
||||
valid_territory = 0
|
||||
ambientsounds = list('sound/ambience/ambispace.ogg','sound/ambience/title2.ogg',)
|
||||
blob_allowed = 0 //Eating up space doesn't count for victory as a blob.
|
||||
|
||||
/area/space/nearstation
|
||||
icon_state = "space_near"
|
||||
@@ -164,6 +167,7 @@ var/list/teleportlocs = list()
|
||||
icon_state = "centcom"
|
||||
requires_power = 0
|
||||
has_gravity = 1
|
||||
blob_allowed = 0 //Should go without saying, no blobs should take over centcom as a win condition.
|
||||
|
||||
/area/centcom/control
|
||||
name = "Centcom Docks"
|
||||
@@ -190,6 +194,7 @@ var/list/teleportlocs = list()
|
||||
icon_state = "syndie-ship"
|
||||
requires_power = 0
|
||||
has_gravity = 1
|
||||
blob_allowed = 0 //Not... entirely sure this will ever come up... but if the bus makes blobs AND ops, it shouldn't aim for the ops to win.
|
||||
|
||||
/area/syndicate_mothership/control
|
||||
name = "Syndicate Control Room"
|
||||
@@ -206,6 +211,8 @@ var/list/teleportlocs = list()
|
||||
icon_state = "asteroid"
|
||||
requires_power = 0
|
||||
has_gravity = 1
|
||||
blob_allowed = 0 //Nope, no winning on the asteroid as a blob. Gotta eat the station.
|
||||
valid_territory = 0
|
||||
|
||||
/area/asteroid/cave
|
||||
name = "Asteroid - Underground"
|
||||
@@ -1011,6 +1018,7 @@ var/list/teleportlocs = list()
|
||||
name = "Ruskie DJ Station"
|
||||
icon_state = "DJ"
|
||||
has_gravity = 1
|
||||
blob_allowed = 0 //Nope, no winning on the DJ station as a blob. Gotta eat the main station.
|
||||
|
||||
/area/djstation/solars
|
||||
name = "DJ Station Solars"
|
||||
@@ -1022,6 +1030,7 @@ var/list/teleportlocs = list()
|
||||
/area/derelict
|
||||
name = "Derelict Station"
|
||||
icon_state = "storage"
|
||||
blob_allowed = 0 //Nope, no winning on the derelict as a blob. Gotta eat the station.
|
||||
|
||||
/area/derelict/hallway/primary
|
||||
name = "Derelict Primary Hallway"
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
|
||||
|
||||
//Few global vars to track the blob
|
||||
var/list/blobs = list()
|
||||
var/list/blobs = list() //complete list of all blobs made.
|
||||
var/list/blob_cores = list()
|
||||
var/list/blob_nodes = list()
|
||||
var/list/blobs_legit = list() //used for win-score calculations, contains only blobs counted for win condition
|
||||
|
||||
|
||||
/datum/game_mode/blob
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/datum/game_mode/blob/check_finished()
|
||||
if(infected_crew.len > burst)//Some blobs have yet to burst
|
||||
return 0
|
||||
if(blobwincount <= blobs.len)//Blob took over
|
||||
if(blobwincount <= blobs_legit.len)//Blob took over
|
||||
return 1
|
||||
if(!blob_cores.len) // blob is dead
|
||||
if(config.continuous["blob"])
|
||||
@@ -19,7 +19,7 @@
|
||||
/datum/game_mode/blob/declare_completion()
|
||||
if(round_converted) //So badmin blobs later don't step on the dead natural blobs metaphorical toes
|
||||
..()
|
||||
if(blobwincount <= blobs.len)
|
||||
if(blobwincount <= blobs_legit.len)
|
||||
feedback_set_details("round_end_result","win - blob took over")
|
||||
world << "<FONT size = 3><B>The blob has taken over the station!</B></FONT>"
|
||||
world << "<B>The entire station was eaten by the Blob</B>"
|
||||
|
||||
@@ -17,9 +17,11 @@
|
||||
var/fire_resist = 1
|
||||
var/mob/camera/blob/overmind
|
||||
|
||||
|
||||
/obj/effect/blob/New(loc)
|
||||
blobs += src
|
||||
var/area/Ablob = get_area(loc)
|
||||
if(Ablob.blob_allowed) //Is this area allowed for winning as blob?
|
||||
blobs_legit += src
|
||||
blobs += src //Keep track of the blob in the normal list either way
|
||||
src.dir = pick(1, 2, 4, 8)
|
||||
src.update_icon()
|
||||
..(loc)
|
||||
@@ -31,15 +33,19 @@
|
||||
return
|
||||
|
||||
/obj/effect/blob/Destroy()
|
||||
blobs -= src
|
||||
if(isturf(loc)) //Necessary because Expand() is retarded and spawns a blob and then deletes it
|
||||
playsound(src.loc, 'sound/effects/splat.ogg', 50, 1)
|
||||
var/area/Ablob = get_area(loc)
|
||||
if(Ablob.blob_allowed) //Only remove for blobs in areas that counted for the win
|
||||
blobs_legit -= src
|
||||
blobs -= src //It's still removed from the normal list
|
||||
playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) //Expand() is no longer broken, no check necessary.
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/effect/blob/CanPass(atom/movable/mover, turf/target, height=0)
|
||||
if(height==0) return 1
|
||||
if(istype(mover) && mover.checkpass(PASSBLOB)) return 1
|
||||
if(height==0)
|
||||
return 1
|
||||
if(istype(mover) && mover.checkpass(PASSBLOB))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
@@ -93,7 +99,8 @@
|
||||
var/list/dirs = list(1,2,4,8)
|
||||
dirs.Remove(origin_dir)//Dont pulse the guy who pulsed us
|
||||
for(var/i = 1 to 4)
|
||||
if(!dirs.len) break
|
||||
if(!dirs.len)
|
||||
break
|
||||
var/dirn = pick(dirs)
|
||||
dirs.Remove(dirn)
|
||||
var/turf/T = get_step(src, dirn)
|
||||
@@ -120,28 +127,37 @@
|
||||
var/dirn = pick(dirs)
|
||||
dirs.Remove(dirn)
|
||||
T = get_step(src, dirn)
|
||||
if(!(locate(/obj/effect/blob) in T)) break
|
||||
else T = null
|
||||
|
||||
if(!T) return 0
|
||||
var/obj/effect/blob/B = new /obj/effect/blob/normal(src.loc)
|
||||
if(!(locate(/obj/effect/blob) in T))
|
||||
break
|
||||
else
|
||||
T = null
|
||||
if(!T)
|
||||
return 0
|
||||
var/Blob_spawnable = 1
|
||||
if(istype(T, /turf/space) && prob(65))
|
||||
B.health = 0
|
||||
B.color = a_color
|
||||
B.density = 1
|
||||
if(T.Enter(B,src))//Attempt to move into the tile
|
||||
B.density = initial(B.density)
|
||||
B.loc = T
|
||||
B.update_icon()
|
||||
else
|
||||
T.blob_act()//If we cant move in hit the turf
|
||||
B.loc = null //So we don't play the splat sound, see Destroy()
|
||||
qdel(B)
|
||||
|
||||
for(var/atom/A in T)//Hit everything in the turf
|
||||
A.blob_act()
|
||||
Blob_spawnable = 0
|
||||
playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) //Let's give some feedback that we DID try to spawn in space, since players are used to it
|
||||
for(var/atom/A in T)
|
||||
if(A.density) //Unless density is 0, don't spawn a blob
|
||||
Blob_spawnable = 0
|
||||
A.blob_act() //Hit everything
|
||||
if(T.density) //Check for walls and such dense turfs
|
||||
Blob_spawnable = 0
|
||||
T.blob_act() //Hit the turf
|
||||
if(Blob_spawnable)
|
||||
var/obj/effect/blob/B = new /obj/effect/blob/normal(src.loc)
|
||||
B.color = a_color
|
||||
B.density = 1
|
||||
if(T.Enter(B,src)) //NOW we can attempt to move into the tile
|
||||
B.density = initial(B.density)
|
||||
B.loc = T
|
||||
B.update_icon()
|
||||
else
|
||||
T.blob_act() //If we cant move in hit the turf
|
||||
qdel(B) //We should never get to this point, since we checked before moving in. Destroy blob anyway for cleanliness though
|
||||
return 1
|
||||
|
||||
|
||||
/obj/effect/blob/ex_act(severity, target)
|
||||
..()
|
||||
var/damage = 150 - 20 * severity
|
||||
|
||||
@@ -358,12 +358,8 @@ var/list/slot2type = list("head" = /obj/item/clothing/head/changeling, "wear_mas
|
||||
return
|
||||
return 1
|
||||
|
||||
/datum/changeling/proc/add_profile(var/mob/living/carbon/human/H, var/mob/living/carbon/user, protect = 0)
|
||||
if(stored_profiles.len > dna_max)
|
||||
if(!push_out_profile())
|
||||
return
|
||||
|
||||
var/datum/changelingprofile/prof = new()
|
||||
/datum/changeling/proc/create_profile(mob/living/carbon/human/H, mob/living/carbon/human/user, protect = 0)
|
||||
var/datum/changelingprofile/prof = new
|
||||
|
||||
H.dna.real_name = H.real_name //Set this again, just to be sure that it's properly set.
|
||||
var/datum/dna/new_dna = new H.dna.type
|
||||
@@ -391,12 +387,22 @@ var/list/slot2type = list("head" = /obj/item/clothing/head/changeling, "wear_mas
|
||||
else
|
||||
continue
|
||||
|
||||
return prof
|
||||
|
||||
/datum/changeling/proc/add_profile(datum/changelingprofile/prof)
|
||||
if(stored_profiles.len > dna_max)
|
||||
if(!push_out_profile())
|
||||
return
|
||||
|
||||
stored_profiles += prof
|
||||
absorbedcount++
|
||||
|
||||
/datum/changeling/proc/add_new_profile(mob/living/carbon/human/H, mob/living/carbon/human/user, protect = 0)
|
||||
var/datum/changelingprofile/prof = create_profile(H, protect)
|
||||
add_profile(prof)
|
||||
return prof
|
||||
|
||||
/datum/changeling/proc/remove_profile(var/mob/living/carbon/human/H, force = 0)
|
||||
/datum/changeling/proc/remove_profile(mob/living/carbon/human/H, force = 0)
|
||||
for(var/datum/changelingprofile/prof in stored_profiles)
|
||||
if(H.real_name == prof.name)
|
||||
if(prof.protected && !force)
|
||||
@@ -416,7 +422,7 @@ var/list/slot2type = list("head" = /obj/item/clothing/head/changeling, "wear_mas
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/proc/changeling_transform(var/mob/living/carbon/human/user, var/datum/changelingprofile/chosen_prof)
|
||||
/proc/changeling_transform(mob/living/carbon/human/user, datum/changelingprofile/chosen_prof)
|
||||
var/datum/dna/chosen_dna = chosen_prof.dna
|
||||
user.real_name = chosen_prof.name
|
||||
user.underwear = chosen_prof.underwear
|
||||
@@ -476,4 +482,19 @@ var/list/slot2type = list("head" = /obj/item/clothing/head/changeling, "wear_mas
|
||||
|
||||
/datum/changelingprofile/Destroy()
|
||||
qdel(dna)
|
||||
return ..()
|
||||
return ..()
|
||||
|
||||
/datum/changelingprofile/proc/copy_profile(datum/changelingprofile/newprofile)
|
||||
newprofile.name = name
|
||||
newprofile.protected = protected
|
||||
newprofile.dna = new dna.type
|
||||
dna.copy_dna(newprofile.dna)
|
||||
newprofile.name_list = name_list.Copy()
|
||||
newprofile.appearance_list = appearance_list.Copy()
|
||||
newprofile.flags_cover_list = flags_cover_list.Copy()
|
||||
newprofile.exists_list = exists_list.Copy()
|
||||
newprofile.item_color_list = item_color_list.Copy()
|
||||
newprofile.item_state_list = item_state_list.Copy()
|
||||
newprofile.underwear = underwear
|
||||
newprofile.undershirt = undershirt
|
||||
newprofile.socks = socks
|
||||
|
||||
@@ -372,7 +372,7 @@ var/list/sting_paths
|
||||
|
||||
var/mob/living/carbon/C = src //only carbons have dna now, so we have to typecaste
|
||||
if(ishuman(C))
|
||||
var/datum/changelingprofile/prof = mind.changeling.add_profile(C)
|
||||
var/datum/changelingprofile/prof = mind.changeling.add_new_profile(C, src)
|
||||
mind.changeling.first_prof = prof
|
||||
return 1
|
||||
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
target << "<span class='userdanger'>You are absorbed by the changeling!</span>"
|
||||
|
||||
if(!changeling.has_dna(target.dna))
|
||||
changeling.add_profile(target, user)
|
||||
changeling.add_new_profile(target, user)
|
||||
|
||||
if(user.nutrition < NUTRITION_LEVEL_WELL_FED)
|
||||
user.nutrition = min((user.nutrition + target.nutrition), NUTRITION_LEVEL_WELL_FED)
|
||||
@@ -152,7 +152,7 @@
|
||||
target << "<span class='userdanger'>[user] tightens their grip as a painful sensation invades your body.</span>"
|
||||
|
||||
if(!changeling.has_dna(target.dna))
|
||||
changeling.add_profile(target, user)
|
||||
changeling.add_new_profile(target, user)
|
||||
changeling.remove_profile(user)
|
||||
|
||||
var/mob/dead/observer/ghost = target.ghostize(0)
|
||||
|
||||
@@ -47,7 +47,9 @@ var/list/datum/dna/hivemind_bank = list()
|
||||
if(!chosen_dna)
|
||||
return
|
||||
|
||||
hivemind_bank += chosen_dna
|
||||
var/datum/changelingprofile/uploaded_dna = new chosen_dna.type
|
||||
chosen_dna.copy_profile(uploaded_dna)
|
||||
hivemind_bank += uploaded_dna
|
||||
user << "<span class='notice'>We channel the DNA of [chosen_name] to the air.</span>"
|
||||
feedback_add_details("changeling_powers","HU")
|
||||
return 1
|
||||
@@ -85,7 +87,9 @@ var/list/datum/dna/hivemind_bank = list()
|
||||
if(!chosen_prof)
|
||||
return
|
||||
|
||||
changeling.add_profile(chosen_prof, user)
|
||||
var/datum/changelingprofile/downloaded_prof = new chosen_prof.type
|
||||
chosen_prof.copy_profile(downloaded_prof)
|
||||
changeling.add_profile(downloaded_prof)
|
||||
user << "<span class='notice'>We absorb the DNA of [S] from the air.</span>"
|
||||
feedback_add_details("changeling_powers","HD")
|
||||
return 1
|
||||
|
||||
@@ -175,7 +175,7 @@
|
||||
/obj/effect/proc_holder/changeling/sting/extract_dna/sting_action(mob/user, mob/living/carbon/human/target)
|
||||
add_logs(user, target, "stung", "extraction sting")
|
||||
if(!(user.mind.changeling.has_dna(target.dna)))
|
||||
user.mind.changeling.add_profile(target, user)
|
||||
user.mind.changeling.add_new_profile(target, user)
|
||||
feedback_add_details("changeling_powers","ED")
|
||||
return 1
|
||||
|
||||
|
||||
@@ -286,7 +286,8 @@
|
||||
usr << "<span class='notice'>The <b>dominator</b> will secure your gang's dominance over the station. Turn it on when you are ready to defend it.</span>"
|
||||
pointcost = 30
|
||||
else
|
||||
usr << "<span class='notice'>The <b>dominator</b> can be spawned only on territory controlled by your gang.</span>"
|
||||
usr << "<span class='warning'>The <b>dominator</b> can be spawned only on territory controlled by your gang!</span>"
|
||||
return
|
||||
|
||||
if(item_type)
|
||||
gang.points -= pointcost
|
||||
|
||||
@@ -75,7 +75,7 @@ var/bomb_set
|
||||
if(istype(I, /obj/item/weapon/screwdriver/nuke))
|
||||
playsound(loc, 'sound/items/Screwdriver.ogg', 100, 1)
|
||||
user << "<span class='notice'>You start removing [src]'s front panel's screws...</span>"
|
||||
if(do_after(user, 60,target=src))
|
||||
if(do_after(user, 60/I.toolspeed,target=src))
|
||||
deconstruction_state = NUKESTATE_UNSCREWED
|
||||
user << "<span class='notice'>You remove the screws from [src]'s front panel.</span>"
|
||||
update_icon()
|
||||
@@ -84,7 +84,7 @@ var/bomb_set
|
||||
if(istype(I, /obj/item/weapon/crowbar))
|
||||
user << "<span class='notice'>You start removing [src]'s front panel...</span>"
|
||||
playsound(loc, 'sound/items/Crowbar.ogg', 100, 1)
|
||||
if(do_after(user,30,target=src))
|
||||
if(do_after(user,30/I.toolspeed,target=src))
|
||||
user << "<span class='notice'>You remove [src]'s front panel.</span>"
|
||||
deconstruction_state = NUKESTATE_PANEL_REMOVED
|
||||
update_icon()
|
||||
@@ -95,7 +95,7 @@ var/bomb_set
|
||||
playsound(loc, 'sound/items/Welder.ogg', 100, 1)
|
||||
user << "<span class='notice'>You start cutting [src]'s inner plate...</span>"
|
||||
if(welder.remove_fuel(1,user))
|
||||
if(do_after(user,80,target=src))
|
||||
if(do_after(user,80/I.toolspeed,target=src))
|
||||
user << "<span class='notice'>You cut [src]'s inner plate.</span>"
|
||||
deconstruction_state = NUKESTATE_WELDED
|
||||
update_icon()
|
||||
@@ -104,7 +104,7 @@ var/bomb_set
|
||||
if(istype(I, /obj/item/weapon/crowbar))
|
||||
user << "<span class='notice'>You start prying off [src]'s inner plate...</span>"
|
||||
playsound(loc, 'sound/items/Crowbar.ogg', 100, 1)
|
||||
if(do_after(user,50,target=src))
|
||||
if(do_after(user,50/I.toolspeed,target=src))
|
||||
user << "<span class='notice'>You pry off [src]'s inner plate. You can see the core's green glow!</span>"
|
||||
deconstruction_state = NUKESTATE_CORE_EXPOSED
|
||||
update_icon()
|
||||
|
||||
@@ -19,28 +19,28 @@
|
||||
clothes_req = 0
|
||||
action_icon_state = "glare"
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/glare/cast(list/targets)
|
||||
/obj/effect/proc_holder/spell/targeted/glare/cast(list/targets,mob/user = usr)
|
||||
for(var/mob/living/target in targets)
|
||||
if(!ishuman(target))
|
||||
usr << "<span class='warning'>You may only glare at humans!</span>"
|
||||
user << "<span class='warning'>You may only glare at humans!</span>"
|
||||
revert_cast()
|
||||
return
|
||||
if(!shadowling_check(usr))
|
||||
if(!shadowling_check(user))
|
||||
revert_cast()
|
||||
return
|
||||
if(target.stat)
|
||||
usr << "<span class='warning'>[target] must be conscious!</span>"
|
||||
user << "<span class='warning'>[target] must be conscious!</span>"
|
||||
revert_cast()
|
||||
return
|
||||
if(is_shadow_or_thrall(target))
|
||||
usr << "<span class='warning'>You cannot glare at allies!</span>"
|
||||
user << "<span class='warning'>You cannot glare at allies!</span>"
|
||||
revert_cast()
|
||||
return
|
||||
var/mob/living/carbon/human/M = target
|
||||
usr.visible_message("<span class='warning'><b>[usr]'s eyes flash a blinding red!</b></span>")
|
||||
user.visible_message("<span class='warning'><b>[user]'s eyes flash a blinding red!</b></span>")
|
||||
target.visible_message("<span class='danger'>[target] freezes in place, their eyes glazing over...</span>")
|
||||
if(in_range(target, usr))
|
||||
target << "<span class='userdanger'>Your gaze is forcibly drawn into [usr]'s eyes, and you are mesmerized by the heavenly lights...</span>"
|
||||
if(in_range(target, user))
|
||||
target << "<span class='userdanger'>Your gaze is forcibly drawn into [user]'s eyes, and you are mesmerized by the heavenly lights...</span>"
|
||||
else //Only alludes to the shadowling if the target is close by
|
||||
target << "<span class='userdanger'>Red lights suddenly dance in your vision, and you are mesmerized by their heavenly beauty...</span>"
|
||||
target.Stun(10)
|
||||
@@ -80,11 +80,11 @@
|
||||
blacklistLuminosity += extinguishItem(F)
|
||||
H.SetLuminosity(blacklistLuminosity) //I hate lightcode for making me do it this way
|
||||
|
||||
/obj/effect/proc_holder/spell/aoe_turf/veil/cast(list/targets)
|
||||
if(!shadowling_check(usr) && !admin_override)
|
||||
/obj/effect/proc_holder/spell/aoe_turf/veil/cast(list/targets,mob/user = usr)
|
||||
if(!shadowling_check(user) && !admin_override)
|
||||
revert_cast()
|
||||
return
|
||||
usr << "<span class='shadowling'>You silently disable all nearby lights.</span>"
|
||||
user << "<span class='shadowling'>You silently disable all nearby lights.</span>"
|
||||
for(var/turf/T in targets)
|
||||
for(var/obj/item/F in T.contents)
|
||||
extinguishItem(F)
|
||||
@@ -95,7 +95,7 @@
|
||||
for(var/obj/machinery/computer/C in T.contents)
|
||||
C.SetLuminosity(0)
|
||||
C.visible_message("<span class='warning'>[C] grows dim, its screen barely readable.</span>")
|
||||
for(var/obj/effect/glowshroom/G in orange(7, usr)) //High radius because glowshroom spam wrecks shadowlings
|
||||
for(var/obj/effect/glowshroom/G in orange(7, user)) //High radius because glowshroom spam wrecks shadowlings
|
||||
G.visible_message("<span class='warning'>[G] withers away!</span>")
|
||||
qdel(G)
|
||||
for(var/mob/living/H in T.contents)
|
||||
@@ -142,15 +142,15 @@
|
||||
action_icon_state = "icy_veins"
|
||||
sound = 'sound/effects/ghost2.ogg'
|
||||
|
||||
/obj/effect/proc_holder/spell/aoe_turf/flashfreeze/cast(list/targets)
|
||||
if(!shadowling_check(usr))
|
||||
/obj/effect/proc_holder/spell/aoe_turf/flashfreeze/cast(list/targets,mob/user = usr)
|
||||
if(!shadowling_check(user))
|
||||
revert_cast()
|
||||
return
|
||||
usr << "<span class='shadowling'>You freeze the nearby air.</span>"
|
||||
user << "<span class='shadowling'>You freeze the nearby air.</span>"
|
||||
for(var/turf/T in targets)
|
||||
for(var/mob/living/carbon/M in T.contents)
|
||||
if(is_shadow_or_thrall(M))
|
||||
if(M == usr) //No message for the user, of course
|
||||
if(M == user) //No message for the user, of course
|
||||
continue
|
||||
else
|
||||
M << "<span class='danger'>You feel a blast of paralyzingly cold air wrap around you and flow past, but you are unaffected!</span>"
|
||||
@@ -175,79 +175,78 @@
|
||||
action_icon_state = "enthrall"
|
||||
var/enthralling = 0
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/enthrall/cast(list/targets)
|
||||
var/mob/living/carbon/human/user = usr
|
||||
/obj/effect/proc_holder/spell/targeted/enthrall/cast(list/targets,mob/living/carbon/human/user = usr)
|
||||
listclearnulls(ticker.mode.thralls)
|
||||
if(!(usr.mind in ticker.mode.shadows)) return
|
||||
if(!(user.mind in ticker.mode.shadows)) return
|
||||
if(user.dna.species.id != "shadowling")
|
||||
if(ticker.mode.thralls.len >= 5)
|
||||
revert_cast()
|
||||
return
|
||||
for(var/mob/living/carbon/human/target in targets)
|
||||
if(!in_range(usr, target))
|
||||
usr << "<span class='warning'>You need to be closer to enthrall [target]!</span>"
|
||||
if(!in_range(user, target))
|
||||
user << "<span class='warning'>You need to be closer to enthrall [target]!</span>"
|
||||
revert_cast()
|
||||
return
|
||||
if(!target.key || !target.mind)
|
||||
usr << "<span class='warning'>The target has no mind!</span>"
|
||||
user << "<span class='warning'>The target has no mind!</span>"
|
||||
revert_cast()
|
||||
return
|
||||
if(target.stat)
|
||||
usr << "<span class='warning'>The target must be conscious!</span>"
|
||||
user << "<span class='warning'>The target must be conscious!</span>"
|
||||
revert_cast()
|
||||
return
|
||||
if(is_shadow_or_thrall(target))
|
||||
usr << "<span class='warning'>You can not enthrall allies!</span>"
|
||||
user << "<span class='warning'>You can not enthrall allies!</span>"
|
||||
revert_cast()
|
||||
return
|
||||
if(!ishuman(target))
|
||||
usr << "<span class='warning'>You can only enthrall humans!</span>"
|
||||
user << "<span class='warning'>You can only enthrall humans!</span>"
|
||||
revert_cast()
|
||||
return
|
||||
if(enthralling)
|
||||
usr << "<span class='warning'>You are already enthralling!</span>"
|
||||
user << "<span class='warning'>You are already enthralling!</span>"
|
||||
revert_cast()
|
||||
return
|
||||
if(!target.client)
|
||||
usr << "<span class='warning'>[target]'s mind is vacant of activity.</span>"
|
||||
user << "<span class='warning'>[target]'s mind is vacant of activity.</span>"
|
||||
enthralling = 1
|
||||
usr << "<span class='danger'>This target is valid. You begin the enthralling...</span>"
|
||||
target << "<span class='userdanger'>[usr] stares at you. You feel your head begin to pulse.</span>"
|
||||
user << "<span class='danger'>This target is valid. You begin the enthralling...</span>"
|
||||
target << "<span class='userdanger'>[user] stares at you. You feel your head begin to pulse.</span>"
|
||||
|
||||
for(var/progress = 0, progress <= 3, progress++)
|
||||
switch(progress)
|
||||
if(1)
|
||||
usr << "<span class='notice'>You place your hands to [target]'s head...</span>"
|
||||
usr.visible_message("<span class='warning'>[usr] places their hands onto the sides of [target]'s head!</span>")
|
||||
user << "<span class='notice'>You place your hands to [target]'s head...</span>"
|
||||
user.visible_message("<span class='warning'>[user] places their hands onto the sides of [target]'s head!</span>")
|
||||
if(2)
|
||||
usr << "<span class='notice'>You begin preparing [target]'s mind as a blank slate...</span>"
|
||||
usr.visible_message("<span class='warning'>[usr]'s palms flare a bright red against [target]'s temples!</span>")
|
||||
user << "<span class='notice'>You begin preparing [target]'s mind as a blank slate...</span>"
|
||||
user.visible_message("<span class='warning'>[user]'s palms flare a bright red against [target]'s temples!</span>")
|
||||
target << "<span class='danger'>A terrible red light floods your mind. You collapse as conscious thought is wiped away.</span>"
|
||||
target.Weaken(12)
|
||||
sleep(20)
|
||||
if(isloyal(target))
|
||||
usr << "<span class='notice'>They are enslaved by Nanotrasen. You begin to shut down the nanobot implant - this will take some time.</span>"
|
||||
usr.visible_message("<span class='warning'>[usr] pauses, then dips their head in concentration!</span>")
|
||||
user << "<span class='notice'>They are enslaved by Nanotrasen. You begin to shut down the nanobot implant - this will take some time.</span>"
|
||||
user.visible_message("<span class='warning'>[user] pauses, then dips their head in concentration!</span>")
|
||||
target << "<span class='boldannounce'>You feel your loyalties begin to weaken!</span>"
|
||||
sleep(100) //10 seconds - not spawn() so the enthralling takes longer
|
||||
usr << "<span class='notice'>The nanobots composing the loyalty implant have been rendered inert. Now to continue.</span>"
|
||||
usr.visible_message("<span class='warning'>[user] relaxes again.</span>")
|
||||
user << "<span class='notice'>The nanobots composing the loyalty implant have been rendered inert. Now to continue.</span>"
|
||||
user.visible_message("<span class='warning'>[user] relaxes again.</span>")
|
||||
for(var/obj/item/weapon/implant/loyalty/L in target)
|
||||
if(L && L.implanted)
|
||||
qdel(L)
|
||||
target << "<span class='boldannounce'>Your unwavering loyalty to Nanotrasen unexpectedly falters, dims, dies.</span>"
|
||||
if(3)
|
||||
usr << "<span class='notice'>You begin planting the tumor that will control the new thrall...</span>"
|
||||
usr.visible_message("<span class='warning'>A strange energy passes from [usr]'s hands into [target]'s head!</span>")
|
||||
user << "<span class='notice'>You begin planting the tumor that will control the new thrall...</span>"
|
||||
user.visible_message("<span class='warning'>A strange energy passes from [user]'s hands into [target]'s head!</span>")
|
||||
target << "<span class='boldannounce'>You feel your memories twisting, morphing. A sense of horror dominates your mind.</span>"
|
||||
if(!do_mob(usr, target, 70)) //around 21 seconds total for enthralling, 31 for someone with a loyalty implant
|
||||
usr << "<span class='warning'>The enthralling has been interrupted - your target's mind returns to its previous state.</span>"
|
||||
target << "<span class='userdanger'>You wrest yourself away from [usr]'s hands and compose yourself</span>"
|
||||
if(!do_mob(user, target, 70)) //around 21 seconds total for enthralling, 31 for someone with a loyalty implant
|
||||
user << "<span class='warning'>The enthralling has been interrupted - your target's mind returns to its previous state.</span>"
|
||||
target << "<span class='userdanger'>You wrest yourself away from [user]'s hands and compose yourself</span>"
|
||||
enthralling = 0
|
||||
return
|
||||
|
||||
enthralling = 0
|
||||
usr << "<span class='shadowling'>You have enthralled <b>[target.real_name]</b>!</span>"
|
||||
user << "<span class='shadowling'>You have enthralled <b>[target.real_name]</b>!</span>"
|
||||
target.visible_message("<span class='big'>[target] looks to have experienced a revelation!</span>", \
|
||||
"<span class='warning'>False faces all d<b>ark not real not real not--</b></span>")
|
||||
target.setOxyLoss(0) //In case the shadowling was choking them out
|
||||
@@ -264,7 +263,7 @@
|
||||
clothes_req = 0
|
||||
action_icon_state = "commune"
|
||||
|
||||
/obj/effect/proc_holder/spell/self/shadowling_hivemind/cast(mob/living/user)
|
||||
/obj/effect/proc_holder/spell/self/shadowling_hivemind/cast(mob/living/user,mob/user = usr)
|
||||
if(!is_shadow(user))
|
||||
user << "<span class='warning'>You must be a shadowling to do that!</span>"
|
||||
return
|
||||
@@ -273,7 +272,7 @@
|
||||
return
|
||||
for(var/mob/M in mob_list)
|
||||
if(is_shadow_or_thrall(M) || (M in dead_mob_list))
|
||||
M << "<span class='shadowling'><b>\[Shadowling\]</b><i> [usr.real_name]</i>: [text]</span>"
|
||||
M << "<span class='shadowling'><b>\[Shadowling\]</b><i> [user.real_name]</i>: [text]</span>"
|
||||
|
||||
|
||||
/obj/effect/proc_holder/spell/self/shadowling_regenarmor //Resets a shadowling's species to normal, removes genetic defects, and re-equips their armor
|
||||
@@ -293,13 +292,13 @@
|
||||
user.visible_message("<span class='warning'>[user]'s skin suddenly bubbles and shifts around their body!</span>", \
|
||||
"<span class='shadowling'>You regenerate your protective armor and cleanse your form of defects.</span>")
|
||||
user.adjustCloneLoss(user.getCloneLoss())
|
||||
user.equip_to_slot_or_del(new /obj/item/clothing/under/shadowling(usr), slot_w_uniform)
|
||||
user.equip_to_slot_or_del(new /obj/item/clothing/shoes/shadowling(usr), slot_shoes)
|
||||
user.equip_to_slot_or_del(new /obj/item/clothing/suit/space/shadowling(usr), slot_wear_suit)
|
||||
user.equip_to_slot_or_del(new /obj/item/clothing/head/shadowling(usr), slot_head)
|
||||
user.equip_to_slot_or_del(new /obj/item/clothing/gloves/shadowling(usr), slot_gloves)
|
||||
user.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/shadowling(usr), slot_wear_mask)
|
||||
user.equip_to_slot_or_del(new /obj/item/clothing/glasses/night/shadowling(usr), slot_glasses)
|
||||
user.equip_to_slot_or_del(new /obj/item/clothing/under/shadowling(user), slot_w_uniform)
|
||||
user.equip_to_slot_or_del(new /obj/item/clothing/shoes/shadowling(user), slot_shoes)
|
||||
user.equip_to_slot_or_del(new /obj/item/clothing/suit/space/shadowling(user), slot_wear_suit)
|
||||
user.equip_to_slot_or_del(new /obj/item/clothing/head/shadowling(user), slot_head)
|
||||
user.equip_to_slot_or_del(new /obj/item/clothing/gloves/shadowling(user), slot_gloves)
|
||||
user.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/shadowling(user), slot_wear_mask)
|
||||
user.equip_to_slot_or_del(new /obj/item/clothing/glasses/night/shadowling(user), slot_glasses)
|
||||
user.set_species(/datum/species/shadow/ling)
|
||||
|
||||
|
||||
@@ -362,8 +361,8 @@
|
||||
user << "<span class='shadowling'>You do not have the power to ascend. You require [victory_threshold] thralls, but only [thralls] living thralls are present.</span>"
|
||||
|
||||
else if(thralls >= victory_threshold)
|
||||
usr << "<span class='shadowling'><b>You are now powerful enough to ascend. Use the Ascendance ability when you are ready. <i>This will kill all of your thralls.</i></span>"
|
||||
usr << "<span class='shadowling'><b>You may find Ascendance in the Shadowling Evolution tab.</b></span>"
|
||||
user << "<span class='shadowling'><b>You are now powerful enough to ascend. Use the Ascendance ability when you are ready. <i>This will kill all of your thralls.</i></span>"
|
||||
user << "<span class='shadowling'><b>You may find Ascendance in the Shadowling Evolution tab.</b></span>"
|
||||
for(M in living_mob_list)
|
||||
if(is_shadow(M))
|
||||
var/obj/effect/proc_holder/spell/self/collective_mind/CM
|
||||
@@ -372,7 +371,7 @@
|
||||
qdel(CM)
|
||||
M.mind.remove_spell(/obj/effect/proc_holder/spell/self/shadowling_hatch)
|
||||
M.mind.AddSpell(new /obj/effect/proc_holder/spell/self/shadowling_ascend(null))
|
||||
if(M == usr)
|
||||
if(M == user)
|
||||
M << "<span class='shadowling'><i>You project this power to the rest of the shadowlings.</i></span>"
|
||||
else
|
||||
M << "<span class='shadowling'><b>[user.real_name] has coalesced the strength of the thralls. You can draw upon it at any time to ascend. (Shadowling Evolution Tab)</b></span>" //Tells all the other shadowlings
|
||||
@@ -440,15 +439,15 @@ datum/reagent/shadowling_blindness_smoke //Reagent used for above spell
|
||||
action_icon_state = "screech"
|
||||
sound = 'sound/effects/screech.ogg'
|
||||
|
||||
/obj/effect/proc_holder/spell/aoe_turf/unearthly_screech/cast(list/targets)
|
||||
if(!shadowling_check(usr))
|
||||
/obj/effect/proc_holder/spell/aoe_turf/unearthly_screech/cast(list/targets,mob/user = usr)
|
||||
if(!shadowling_check(user))
|
||||
revert_cast()
|
||||
return
|
||||
usr.audible_message("<span class='warning'><b>[usr] lets out a horrible scream!</b></span>")
|
||||
user.audible_message("<span class='warning'><b>[user] lets out a horrible scream!</b></span>")
|
||||
for(var/turf/T in targets)
|
||||
for(var/mob/target in T.contents)
|
||||
if(is_shadow_or_thrall(target))
|
||||
if(target == usr) //No message for the user, of course
|
||||
if(target == user) //No message for the user, of course
|
||||
continue
|
||||
else
|
||||
continue
|
||||
@@ -482,32 +481,32 @@ datum/reagent/shadowling_blindness_smoke //Reagent used for above spell
|
||||
var/targetsDrained
|
||||
var/list/nearbyTargets
|
||||
|
||||
/obj/effect/proc_holder/spell/aoe_turf/drain_life/cast(list/targets, mob/living/carbon/human/U = usr)
|
||||
if(!shadowling_check(U))
|
||||
/obj/effect/proc_holder/spell/aoe_turf/drain_life/cast(list/targets, mob/living/carbon/human/user = usr)
|
||||
if(!shadowling_check(user))
|
||||
revert_cast()
|
||||
return
|
||||
targetsDrained = 0
|
||||
nearbyTargets = list()
|
||||
for(var/turf/T in targets)
|
||||
for(var/mob/living/carbon/M in T.contents)
|
||||
if(M == usr) continue
|
||||
if(M == user) continue
|
||||
targetsDrained++
|
||||
nearbyTargets.Add(M)
|
||||
if(!targetsDrained)
|
||||
revert_cast()
|
||||
usr << "<span class='warning'>There were no nearby humans for you to drain.</span>"
|
||||
user << "<span class='warning'>There were no nearby humans for you to drain.</span>"
|
||||
return
|
||||
for(var/mob/living/carbon/M in nearbyTargets)
|
||||
U.heal_organ_damage(10, 10)
|
||||
U.adjustToxLoss(-10)
|
||||
U.adjustOxyLoss(-10)
|
||||
U.adjustStaminaLoss(-20)
|
||||
U.AdjustWeakened(-1)
|
||||
U.AdjustStunned(-1)
|
||||
user.heal_organ_damage(10, 10)
|
||||
user.adjustToxLoss(-10)
|
||||
user.adjustOxyLoss(-10)
|
||||
user.adjustStaminaLoss(-20)
|
||||
user.AdjustWeakened(-1)
|
||||
user.AdjustStunned(-1)
|
||||
M.adjustOxyLoss(20)
|
||||
M.adjustStaminaLoss(20)
|
||||
M << "<span class='boldannounce'>You feel a wave of exhaustion and a curious draining sensation directed towards [usr]!</span>"
|
||||
usr << "<span class='shadowling'>You draw life from those around you to heal your wounds.</span>"
|
||||
user << "<span class='shadowling'>You draw life from those around you to heal your wounds.</span>"
|
||||
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/revive_thrall //Completely revives a dead thrall
|
||||
@@ -521,20 +520,20 @@ datum/reagent/shadowling_blindness_smoke //Reagent used for above spell
|
||||
include_user = 0
|
||||
action_icon_state = "revive_thrall"
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/revive_thrall/cast(list/targets)
|
||||
if(!shadowling_check(usr))
|
||||
/obj/effect/proc_holder/spell/targeted/revive_thrall/cast(list/targets,mob/user = usr)
|
||||
if(!shadowling_check(user))
|
||||
revert_cast()
|
||||
return
|
||||
for(var/mob/living/carbon/human/thrallToRevive in targets)
|
||||
var/choice = alert(usr,"Empower a living thrall or revive a dead one?",,"Empower","Revive","Cancel")
|
||||
var/choice = alert(user,"Empower a living thrall or revive a dead one?",,"Empower","Revive","Cancel")
|
||||
switch(choice)
|
||||
if("Empower")
|
||||
if(!is_thrall(thrallToRevive))
|
||||
usr << "<span class='warning'>[thrallToRevive] is not a thrall.</span>"
|
||||
user << "<span class='warning'>[thrallToRevive] is not a thrall.</span>"
|
||||
revert_cast()
|
||||
return
|
||||
if(thrallToRevive.stat != CONSCIOUS)
|
||||
usr << "<span class='warning'>[thrallToRevive] must be conscious to become empowered.</span>"
|
||||
user << "<span class='warning'>[thrallToRevive] must be conscious to become empowered.</span>"
|
||||
revert_cast()
|
||||
return
|
||||
var/empowered_thralls = 0
|
||||
@@ -545,21 +544,21 @@ datum/reagent/shadowling_blindness_smoke //Reagent used for above spell
|
||||
if(H.dna.species.id == "l_shadowling")
|
||||
empowered_thralls++
|
||||
if(empowered_thralls >= EMPOWERED_THRALL_LIMIT)
|
||||
usr << "<span class='warning'>You cannot spare this much energy. There are too many empowered thralls.</span>"
|
||||
user << "<span class='warning'>You cannot spare this much energy. There are too many empowered thralls.</span>"
|
||||
revert_cast()
|
||||
return
|
||||
usr.visible_message("<span class='danger'>[usr] places their hands over [thrallToRevive]'s face, red light shining from beneath.</span>", \
|
||||
user.visible_message("<span class='danger'>[user] places their hands over [thrallToRevive]'s face, red light shining from beneath.</span>", \
|
||||
"<span class='shadowling'>You place your hands on [thrallToRevive]'s face and begin gathering energy...</span>")
|
||||
thrallToRevive << "<span class='userdanger'>[usr] places their hands over your face. You feel energy gathering. Stand still...</span>"
|
||||
if(!do_mob(usr, thrallToRevive, 80))
|
||||
usr << "<span class='warning'>Your concentration snaps. The flow of energy ebbs.</span>"
|
||||
thrallToRevive << "<span class='userdanger'>[user] places their hands over your face. You feel energy gathering. Stand still...</span>"
|
||||
if(!do_mob(user, thrallToRevive, 80))
|
||||
user << "<span class='warning'>Your concentration snaps. The flow of energy ebbs.</span>"
|
||||
revert_cast()
|
||||
return
|
||||
usr << "<span class='shadowling'><b><i>You release a massive surge of power into [thrallToRevive]!</b></i></span>"
|
||||
usr.visible_message("<span class='boldannounce'><i>Red lightning surges into [thrallToRevive]'s face!</i></span>")
|
||||
user << "<span class='shadowling'><b><i>You release a massive surge of power into [thrallToRevive]!</b></i></span>"
|
||||
user.visible_message("<span class='boldannounce'><i>Red lightning surges into [thrallToRevive]'s face!</i></span>")
|
||||
playsound(thrallToRevive, 'sound/weapons/Egloves.ogg', 50, 1)
|
||||
playsound(thrallToRevive, 'sound/machines/defib_zap.ogg', 50, 1)
|
||||
usr.Beam(thrallToRevive,icon_state="red_lightning",icon='icons/effects/effects.dmi',time=1)
|
||||
user.Beam(thrallToRevive,icon_state="red_lightning",icon='icons/effects/effects.dmi',time=1)
|
||||
thrallToRevive.Weaken(5)
|
||||
thrallToRevive.visible_message("<span class='warning'><b>[thrallToRevive] collapses, their skin and face distorting!</span>", \
|
||||
"<span class='userdanger'><i>AAAAAAAAAAAAAAAAAAAGH-</i></span>")
|
||||
@@ -574,25 +573,25 @@ datum/reagent/shadowling_blindness_smoke //Reagent used for above spell
|
||||
thrallToRevive.mind.AddSpell(new /obj/effect/proc_holder/spell/self/shadow_walk(null))
|
||||
if("Revive")
|
||||
if(!is_thrall(thrallToRevive))
|
||||
usr << "<span class='warning'>[thrallToRevive] is not a thrall.</span>"
|
||||
user << "<span class='warning'>[thrallToRevive] is not a thrall.</span>"
|
||||
revert_cast()
|
||||
return
|
||||
if(thrallToRevive.stat != DEAD)
|
||||
usr << "<span class='warning'>[thrallToRevive] is not dead.</span>"
|
||||
user << "<span class='warning'>[thrallToRevive] is not dead.</span>"
|
||||
revert_cast()
|
||||
return
|
||||
usr.visible_message("<span class='danger'>[usr] kneels over [thrallToRevive], placing their hands on \his chest.</span>", \
|
||||
user.visible_message("<span class='danger'>[user] kneels over [thrallToRevive], placing their hands on \his chest.</span>", \
|
||||
"<span class='shadowling'>You crouch over the body of your thrall and begin gathering energy...</span>")
|
||||
thrallToRevive.notify_ghost_cloning("Your masters are resuscitating you! Re-enter your corpse if you wish to be brought to life.", source = thrallToRevive)
|
||||
if(!do_mob(usr, thrallToRevive, 30))
|
||||
usr << "<span class='warning'>Your concentration snaps. The flow of energy ebbs.</span>"
|
||||
if(!do_mob(user, thrallToRevive, 30))
|
||||
user << "<span class='warning'>Your concentration snaps. The flow of energy ebbs.</span>"
|
||||
revert_cast()
|
||||
return
|
||||
usr << "<span class='shadowling'><b><i>You release a massive surge of power into [thrallToRevive]!</b></i></span>"
|
||||
usr.visible_message("<span class='boldannounce'><i>Red lightning surges from [usr]'s hands into [thrallToRevive]'s chest!</i></span>")
|
||||
user << "<span class='shadowling'><b><i>You release a massive surge of power into [thrallToRevive]!</b></i></span>"
|
||||
user.visible_message("<span class='boldannounce'><i>Red lightning surges from [user]'s hands into [thrallToRevive]'s chest!</i></span>")
|
||||
playsound(thrallToRevive, 'sound/weapons/Egloves.ogg', 50, 1)
|
||||
playsound(thrallToRevive, 'sound/machines/defib_zap.ogg', 50, 1)
|
||||
usr.Beam(thrallToRevive,icon_state="red_lightning",icon='icons/effects/effects.dmi',time=1)
|
||||
user.Beam(thrallToRevive,icon_state="red_lightning",icon='icons/effects/effects.dmi',time=1)
|
||||
sleep(10)
|
||||
thrallToRevive.revive()
|
||||
thrallToRevive.visible_message("<span class='boldannounce'>[thrallToRevive] heaves in breath, dim red light shining in their eyes.</span>", \
|
||||
@@ -615,8 +614,8 @@ datum/reagent/shadowling_blindness_smoke //Reagent used for above spell
|
||||
charge_max = 600
|
||||
action_icon_state = "extend_shuttle"
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/shadowling_extend_shuttle/cast(list/targets, mob/living/carbon/human/U = usr)
|
||||
if(!shadowling_check(U))
|
||||
/obj/effect/proc_holder/spell/targeted/shadowling_extend_shuttle/cast(list/targets, mob/living/carbon/human/user = usr)
|
||||
if(!shadowling_check(user))
|
||||
revert_cast()
|
||||
return
|
||||
for(var/mob/living/carbon/human/target in targets)
|
||||
@@ -624,23 +623,23 @@ datum/reagent/shadowling_blindness_smoke //Reagent used for above spell
|
||||
revert_cast()
|
||||
return
|
||||
if(!is_thrall(target))
|
||||
usr << "<span class='warning'>[target] must be a thrall.</span>"
|
||||
user << "<span class='warning'>[target] must be a thrall.</span>"
|
||||
revert_cast()
|
||||
return
|
||||
if(SSshuttle.emergency.mode != SHUTTLE_CALL)
|
||||
usr << "<span class='warning'>The shuttle must be inbound only to the station.</span>"
|
||||
user << "<span class='warning'>The shuttle must be inbound only to the station.</span>"
|
||||
revert_cast()
|
||||
return
|
||||
var/mob/living/carbon/human/M = target
|
||||
U.visible_message("<span class='warning'>[U]'s eyes flash a bright red!</span>", \
|
||||
user.visible_message("<span class='warning'>[user]'s eyes flash a bright red!</span>", \
|
||||
"<span class='notice'>You begin to draw [M]'s life force.</span>")
|
||||
M.visible_message("<span class='warning'>[M]'s face falls slack, their jaw slightly distending.</span>", \
|
||||
"<span class='boldannounce'>You are suddenly transported... far, far away...</span>")
|
||||
if(!do_after(U, 50, target = M))
|
||||
if(!do_after(user, 50, target = M))
|
||||
M << "<span class='warning'>You are snapped back to reality, your haze dissipating!</span>"
|
||||
U << "<span class='warning'>You have been interrupted. The draw has failed.</span>"
|
||||
user << "<span class='warning'>You have been interrupted. The draw has failed.</span>"
|
||||
return
|
||||
U << "<span class='notice'>You project [M]'s life force toward the approaching shuttle, extending its arrival duration!</span>"
|
||||
user << "<span class='notice'>You project [M]'s life force toward the approaching shuttle, extending its arrival duration!</span>"
|
||||
M.visible_message("<span class='warning'>[M]'s eyes suddenly flare red. They proceed to collapse on the floor, not breathing.</span>", \
|
||||
"<span class='warning'><b>...speeding by... ...pretty blue glow... ...touch it... ...no glow now... ...no light... ...nothing at all...</span>")
|
||||
M.death()
|
||||
@@ -650,7 +649,7 @@ datum/reagent/shadowling_blindness_smoke //Reagent used for above spell
|
||||
timer += more_minutes
|
||||
priority_announce("Major system failure aboard the emergency shuttle. This will extend its arrival time by approximately 15 minutes..", "System Failure", 'sound/misc/notice1.ogg')
|
||||
SSshuttle.emergency.setTimer(timer)
|
||||
U.mind.spell_list.Remove(src) //Can only be used once!
|
||||
user.mind.spell_list.Remove(src) //Can only be used once!
|
||||
qdel(src)
|
||||
|
||||
|
||||
@@ -666,25 +665,25 @@ datum/reagent/shadowling_blindness_smoke //Reagent used for above spell
|
||||
clothes_req = 0
|
||||
action_icon_state = "glare"
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/lesser_glare/cast(list/targets)
|
||||
/obj/effect/proc_holder/spell/targeted/lesser_glare/cast(list/targets,mob/user = usr)
|
||||
for(var/mob/living/target in targets)
|
||||
if(!ishuman(target) || !target)
|
||||
usr << "<span class='warning'>You nay only glare at humans!</span>"
|
||||
user << "<span class='warning'>You nay only glare at humans!</span>"
|
||||
revert_cast()
|
||||
return
|
||||
if(target.stat)
|
||||
usr << "<span class='warning'>[target] must be conscious!</span>"
|
||||
user << "<span class='warning'>[target] must be conscious!</span>"
|
||||
revert_cast()
|
||||
return
|
||||
if(is_shadow_or_thrall(target))
|
||||
usr << "<span class='warning'>You cannot glare at allies!</span>"
|
||||
user << "<span class='warning'>You cannot glare at allies!</span>"
|
||||
revert_cast()
|
||||
return
|
||||
var/mob/living/carbon/human/M = target
|
||||
usr.visible_message("<span class='warning'><b>[usr]'s eyes flash a bright red!</b></span>")
|
||||
user.visible_message("<span class='warning'><b>[user]'s eyes flash a bright red!</b></span>")
|
||||
target.visible_message("<span class='danger'>[target] freezes in place, their eyes clouding...</span>")
|
||||
if(in_range(target, usr))
|
||||
target << "<span class='userdanger'>Your gaze is forcibly drawn into [usr]'s eyes, and you are starstruck by the heavenly lights...</span>"
|
||||
if(in_range(target, user))
|
||||
target << "<span class='userdanger'>Your gaze is forcibly drawn into [user]'s eyes, and you are starstruck by the heavenly lights...</span>"
|
||||
else //Only alludes to the shadowling if the target is close by
|
||||
target << "<span class='userdanger'>Red lights suddenly dance in your vision, and you are starstruck by their heavenly beauty...</span>"
|
||||
target.Stun(5) //Roughly 50% as long as the normal one
|
||||
@@ -749,7 +748,7 @@ datum/reagent/shadowling_blindness_smoke //Reagent used for above spell
|
||||
return
|
||||
for(var/mob/M in mob_list)
|
||||
if(is_shadow_or_thrall(M) || (M in dead_mob_list))
|
||||
M << "<span class='shadowling'><b>\[Thrall\]</b><i> [usr.real_name]</i>: [text]</span>"
|
||||
M << "<span class='shadowling'><b>\[Thrall\]</b><i> [user.real_name]</i>: [text]</span>"
|
||||
log_say("[user.real_name]/[user.key] : [text]")
|
||||
|
||||
|
||||
@@ -766,19 +765,17 @@ datum/reagent/shadowling_blindness_smoke //Reagent used for above spell
|
||||
action_icon_state = "annihilate"
|
||||
sound = 'sound/magic/Staff_Chaos.ogg'
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/annihilate/cast(list/targets)
|
||||
var/mob/living/simple_animal/ascendant_shadowling/SHA = usr
|
||||
if(SHA.phasing)
|
||||
usr << "<span class='warning'>You are not in the same plane of existence. Unphase first.</span>"
|
||||
/obj/effect/proc_holder/spell/targeted/annihilate/cast(list/targets,mob/living/simple_animal/ascendant_shadowling/user = usr)
|
||||
if(user.phasing)
|
||||
user << "<span class='warning'>You are not in the same plane of existence. Unphase first.</span>"
|
||||
revert_cast()
|
||||
return
|
||||
|
||||
for(var/mob/living/boom in targets)
|
||||
if(is_shadow(boom)) //Used to not work on thralls. Now it does so you can PUNISH THEM LIKE THE WRATHFUL GOD YOU ARE.
|
||||
usr << "<span class='warning'>Making an ally explode seems unwise.<span>"
|
||||
user << "<span class='warning'>Making an ally explode seems unwise.<span>"
|
||||
revert_cast()
|
||||
return
|
||||
usr.visible_message("<span class='warning'>[usr]'s markings flare as they gesture at [boom]!</span>", \
|
||||
user.visible_message("<span class='warning'>[user]'s markings flare as they gesture at [boom]!</span>", \
|
||||
"<span class='shadowling'>You direct a lance of telekinetic energy into [boom].</span>")
|
||||
sleep(4)
|
||||
if(iscarbon(boom))
|
||||
@@ -796,32 +793,31 @@ datum/reagent/shadowling_blindness_smoke //Reagent used for above spell
|
||||
clothes_req = 0
|
||||
action_icon_state = "enthrall"
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/hypnosis/cast(list/targets)
|
||||
var/mob/living/simple_animal/ascendant_shadowling/SHA = usr
|
||||
if(SHA.phasing)
|
||||
/obj/effect/proc_holder/spell/targeted/hypnosis/cast(list/targets,mob/living/simple_animal/ascendant_shadowling/user = usr)
|
||||
if(user.phasing)
|
||||
revert_cast()
|
||||
usr << "<span class='warning'>You are not in the same plane of existence. Unphase first.</span>"
|
||||
user << "<span class='warning'>You are not in the same plane of existence. Unphase first.</span>"
|
||||
return
|
||||
|
||||
for(var/mob/living/carbon/human/target in targets)
|
||||
if(is_shadow_or_thrall(target))
|
||||
usr << "<span class='warning'>You cannot enthrall an ally.<span>"
|
||||
user << "<span class='warning'>You cannot enthrall an ally.<span>"
|
||||
revert_cast()
|
||||
return
|
||||
if(!target.ckey || !target.mind)
|
||||
usr << "<span class='warning'>The target has no mind.</span>"
|
||||
user << "<span class='warning'>The target has no mind.</span>"
|
||||
revert_cast()
|
||||
return
|
||||
if(target.stat)
|
||||
usr << "<span class='warning'>The target must be conscious.</span>"
|
||||
user << "<span class='warning'>The target must be conscious.</span>"
|
||||
revert_cast()
|
||||
return
|
||||
if(!ishuman(target))
|
||||
usr << "<span class='warning'>You can only enthrall humans.</span>"
|
||||
user << "<span class='warning'>You can only enthrall humans.</span>"
|
||||
revert_cast()
|
||||
return
|
||||
|
||||
usr << "<span class='shadowling'>You instantly rearrange <b>[target]</b>'s memories, hyptonitizing them into a thrall.</span>"
|
||||
user << "<span class='shadowling'>You instantly rearrange <b>[target]</b>'s memories, hyptonitizing them into a thrall.</span>"
|
||||
target << "<span class='userdanger'><font size=3>An agonizing spike of pain drives into your mind, and--</font></span>"
|
||||
target.mind.special_role = "thrall"
|
||||
ticker.mode.add_thrall(target.mind)
|
||||
@@ -835,20 +831,19 @@ datum/reagent/shadowling_blindness_smoke //Reagent used for above spell
|
||||
clothes_req = 0
|
||||
action_icon_state = "shadow_walk"
|
||||
|
||||
/obj/effect/proc_holder/spell/self/shadowling_phase_shift/cast(list/targets)
|
||||
var/mob/living/simple_animal/ascendant_shadowling/SHA = usr
|
||||
for(SHA in targets)
|
||||
SHA.phasing = !SHA.phasing
|
||||
if(SHA.phasing)
|
||||
SHA.visible_message("<span class='danger'>[SHA] suddenly vanishes!</span>", \
|
||||
/obj/effect/proc_holder/spell/self/shadowling_phase_shift/cast(list/targets,mob/living/simple_animal/ascendant_shadowling/user = usr)
|
||||
for(user in targets)
|
||||
user.phasing = !user.phasing
|
||||
if(user.phasing)
|
||||
user.visible_message("<span class='danger'>[user] suddenly vanishes!</span>", \
|
||||
"<span class='shadowling'>You begin phasing through planes of existence. Use the ability again to return.</span>")
|
||||
SHA.incorporeal_move = 1
|
||||
SHA.alpha = 0
|
||||
user.incorporeal_move = 1
|
||||
user.alpha = 0
|
||||
else
|
||||
SHA.visible_message("<span class='danger'>[SHA] suddenly appears from nowhere!</span>", \
|
||||
user.visible_message("<span class='danger'>[user] suddenly appears from nowhere!</span>", \
|
||||
"<span class='shadowling'>You return from the space between worlds.</span>")
|
||||
SHA.incorporeal_move = 0
|
||||
SHA.alpha = 255
|
||||
user.incorporeal_move = 0
|
||||
user.alpha = 255
|
||||
|
||||
|
||||
/obj/effect/proc_holder/spell/aoe_turf/ascendant_storm //Releases bolts of lightning to everyone nearby
|
||||
@@ -861,13 +856,12 @@ datum/reagent/shadowling_blindness_smoke //Reagent used for above spell
|
||||
action_icon_state = "lightning_storm"
|
||||
sound = 'sound/magic/lightningbolt.ogg'
|
||||
|
||||
/obj/effect/proc_holder/spell/aoe_turf/ascendant_storm/cast(list/targets)
|
||||
var/mob/living/simple_animal/ascendant_shadowling/SHA = usr
|
||||
if(SHA.phasing)
|
||||
usr << "<span class='warning'>You are not in the same plane of existence. Unphase first.</span>"
|
||||
/obj/effect/proc_holder/spell/aoe_turf/ascendant_storm/cast(list/targets,mob/living/simple_animal/ascendant_shadowling/user = usr)
|
||||
if(user.phasing)
|
||||
user << "<span class='warning'>You are not in the same plane of existence. Unphase first.</span>"
|
||||
revert_cast()
|
||||
return
|
||||
usr.visible_message("<span class='warning'><b>A massive ball of lightning appears in [usr]'s hands and flares out!</b></span>", \
|
||||
user.visible_message("<span class='warning'><b>A massive ball of lightning appears in [user]'s hands and flares out!</b></span>", \
|
||||
"<span class='shadowling'>You conjure a ball of lightning and release it.</span>")
|
||||
|
||||
for(var/turf/T in targets)
|
||||
@@ -878,7 +872,7 @@ datum/reagent/shadowling_blindness_smoke //Reagent used for above spell
|
||||
playsound(target, 'sound/magic/LightningShock.ogg', 50, 1)
|
||||
target.Weaken(8)
|
||||
target.take_organ_damage(0,50)
|
||||
usr.Beam(target,icon_state="red_lightning",icon='icons/effects/effects.dmi',time=1)
|
||||
user.Beam(target,icon_state="red_lightning",icon='icons/effects/effects.dmi',time=1)
|
||||
|
||||
|
||||
/obj/effect/proc_holder/spell/self/shadowling_hivemind_ascendant //Large, all-caps text in shadowling chat
|
||||
@@ -896,5 +890,5 @@ datum/reagent/shadowling_blindness_smoke //Reagent used for above spell
|
||||
text = "<font size=4>[text]</font>"
|
||||
for(var/mob/M in mob_list)
|
||||
if(is_shadow_or_thrall(M) || (M in dead_mob_list))
|
||||
M << "<span class='shadowling'><b>\[Ascendant\]<i> [usr.real_name]</i>: [text]</b></span>" //Bigger text for ascendants.
|
||||
M << "<span class='shadowling'><b>\[Ascendant\]<i> [user.real_name]</i>: [text]</b></span>" //Bigger text for ascendants.
|
||||
log_say("[user.real_name]/[user.key] : [text]")
|
||||
|
||||
@@ -9,8 +9,8 @@ var/list/possibleShadowlingNames = list("U'ruan", "Y`shej", "Nex", "Hel-uae", "N
|
||||
clothes_req = 0
|
||||
action_icon_state = "hatch"
|
||||
|
||||
/obj/effect/proc_holder/spell/self/shadowling_hatch/cast(mob/living/carbon/human/H)
|
||||
if(usr.stat || !ishuman(usr) || !usr || !is_shadow(usr)) return
|
||||
/obj/effect/proc_holder/spell/self/shadowling_hatch/cast(mob/living/carbon/human/H,mob/user = usr)
|
||||
if(user.stat || !ishuman(user) || !user || !is_shadow(user)) return
|
||||
var/hatch_or_no = alert(H,"Are you sure you want to hatch? You cannot undo this!",,"Yes","No")
|
||||
switch(hatch_or_no)
|
||||
if("No")
|
||||
@@ -27,8 +27,8 @@ var/list/possibleShadowlingNames = list("U'ruan", "Y`shej", "Nex", "Hel-uae", "N
|
||||
|
||||
sleep(50)
|
||||
var/turf/simulated/floor/F
|
||||
var/turf/shadowturf = get_turf(usr)
|
||||
for(F in orange(1, usr))
|
||||
var/turf/shadowturf = get_turf(user)
|
||||
for(F in orange(1, user))
|
||||
new /obj/structure/alien/resin/wall/shadowling(F)
|
||||
for(var/obj/structure/alien/resin/wall/shadowling/R in shadowturf) //extremely hacky
|
||||
qdel(R)
|
||||
@@ -56,14 +56,13 @@ var/list/possibleShadowlingNames = list("U'ruan", "Y`shej", "Nex", "Hel-uae", "N
|
||||
sleep(10)
|
||||
playsound(H.loc, 'sound/weapons/slice.ogg', 25, 1)
|
||||
H << "<i><b>You are free!</b></i>"
|
||||
|
||||
H.status_flags = temp_flags
|
||||
sleep(10)
|
||||
playsound(H.loc, 'sound/effects/ghost.ogg', 100, 1)
|
||||
var/newNameId = pick(possibleShadowlingNames)
|
||||
possibleShadowlingNames.Remove(newNameId)
|
||||
H.real_name = newNameId
|
||||
H.name = usr.real_name
|
||||
H.status_flags = temp_flags
|
||||
H.name = user.real_name
|
||||
H.stunned = 0 //Same as above. Due to hulks.
|
||||
H << "<i><b><font size=3>YOU LIVE!!!</i></b></font>"
|
||||
|
||||
@@ -110,7 +109,7 @@ var/list/possibleShadowlingNames = list("U'ruan", "Y`shej", "Nex", "Hel-uae", "N
|
||||
clothes_req = 0
|
||||
action_icon_state = "ascend"
|
||||
|
||||
/obj/effect/proc_holder/spell/self/shadowling_ascend/cast(mob/living/carbon/human/H)
|
||||
/obj/effect/proc_holder/spell/self/shadowling_ascend/cast(mob/living/carbon/human/H,mob/user = usr)
|
||||
if(!shadowling_check(H))
|
||||
return
|
||||
var/hatch_or_no = alert(H,"It is time to ascend. Are you sure about this?",,"Yes","No")
|
||||
|
||||
@@ -839,3 +839,8 @@
|
||||
..()
|
||||
user <<"<span class='warning'>[src] suddenly vanishes!</span>"
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/spellbook/oneuse/random/New()
|
||||
var/real_type = pick(subtypesof(/obj/item/weapon/spellbook/oneuse))
|
||||
new real_type(loc)
|
||||
qdel(src)
|
||||
|
||||
@@ -734,7 +734,7 @@
|
||||
user.visible_message("[user.name] removes the electronics from [src.name].",\
|
||||
"<span class='notice'>You start prying out the circuit...</span>")
|
||||
playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
|
||||
if (do_after(user, 20, target = src))
|
||||
if (do_after(user, 20/W.toolspeed, target = src))
|
||||
if (buildstage == 1)
|
||||
user <<"<span class='notice'>You remove the air alarm electronics.</span>"
|
||||
new /obj/item/weapon/electronics/airalarm( src.loc )
|
||||
@@ -956,7 +956,7 @@ FIRE ALARM
|
||||
playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
|
||||
user.visible_message("[user.name] removes the electronics from [src.name].", \
|
||||
"<span class='notice'>You start prying out the circuit...</span>")
|
||||
if(do_after(user, 20, target = src))
|
||||
if(do_after(user, 20/W.toolspeed, target = src))
|
||||
if(buildstage == 1)
|
||||
if(stat & BROKEN)
|
||||
user << "<span class='notice'>You remove the destroyed circuit.</span>"
|
||||
|
||||
@@ -95,7 +95,7 @@
|
||||
if (istype(W, /obj/item/weapon/wrench))
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
user << "<span class='notice'>You begin to unfasten \the [src]...</span>"
|
||||
if (do_after(user, 40, target = src))
|
||||
if (do_after(user, 40/W.toolspeed, target = src))
|
||||
user.visible_message( \
|
||||
"[user] unfastens \the [src].", \
|
||||
"<span class='notice'>You unfasten \the [src].</span>", \
|
||||
|
||||
@@ -94,7 +94,7 @@
|
||||
if(!device && !board && istype(W, /obj/item/weapon/wrench))
|
||||
user << "<span class='notice'>You start unsecuring the button frame...</span>"
|
||||
playsound(loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
if(do_after(user, 40, target = src))
|
||||
if(do_after(user, 40/W.toolspeed, target = src))
|
||||
user << "<span class='notice'>You unsecure the button frame.</span>"
|
||||
transfer_fingerprints_to(new /obj/item/wallframe/button(get_turf(src)))
|
||||
playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
|
||||
@@ -309,7 +309,7 @@
|
||||
if(istype(P, /obj/item/weapon/wrench))
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
user << "<span class='notice'>You start wrenching the frame into place...</span>"
|
||||
if(do_after(user, 20, target = src))
|
||||
if(do_after(user, 20/P.toolspeed, target = src))
|
||||
user << "<span class='notice'>You wrench the frame into place.</span>"
|
||||
anchored = 1
|
||||
state = 1
|
||||
@@ -321,7 +321,7 @@
|
||||
return
|
||||
playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
|
||||
user << "<span class='notice'>You start deconstructing the frame...</span>"
|
||||
if(do_after(user, 20, target = src))
|
||||
if(do_after(user, 20/P.toolspeed, target = src))
|
||||
if(!src || !WT.isOn()) return
|
||||
user << "<span class='notice'>You deconstruct the frame.</span>"
|
||||
var/obj/item/stack/sheet/metal/M = new (loc, 5)
|
||||
@@ -331,7 +331,7 @@
|
||||
if(istype(P, /obj/item/weapon/wrench))
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
user << "<span class='notice'>You start to unfasten the frame...</span>"
|
||||
if(do_after(user, 20, target = src))
|
||||
if(do_after(user, 20/P.toolspeed, target = src))
|
||||
user << "<span class='notice'>You unfasten the frame.</span>"
|
||||
anchored = 0
|
||||
state = 0
|
||||
@@ -372,7 +372,7 @@
|
||||
if(C.get_amount() >= 5)
|
||||
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
user << "<span class='notice'>You start adding cables to the frame...</span>"
|
||||
if(do_after(user, 20, target = src))
|
||||
if(do_after(user, 20/P.toolspeed, target = src))
|
||||
if(C.get_amount() >= 5 && state == 2)
|
||||
C.use(5)
|
||||
user << "<span class='notice'>You add cables to the frame.</span>"
|
||||
|
||||
@@ -90,11 +90,11 @@
|
||||
update_icon()
|
||||
return
|
||||
|
||||
/obj/machinery/computer/attackby(obj/I, mob/user, params)
|
||||
/obj/machinery/computer/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/weapon/screwdriver) && circuit)
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
user << "<span class='notice'> You start to disconnect the monitor...</span>"
|
||||
if(do_after(user, 20, target = src))
|
||||
if(do_after(user, 20/I.toolspeed, target = src))
|
||||
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
|
||||
A.circuit = circuit
|
||||
A.anchored = 1
|
||||
|
||||
@@ -29,6 +29,7 @@ var/global/datum/crewmonitor/crewmonitor = new
|
||||
var/const/MAX_ICON_DIMENSION = 1024
|
||||
var/const/ICON_SIZE = 4
|
||||
var/initialized = FALSE
|
||||
var/max_initialized_zlevel = 0
|
||||
|
||||
/datum/crewmonitor/New()
|
||||
. = ..()
|
||||
@@ -79,8 +80,6 @@ var/global/datum/crewmonitor/crewmonitor = new
|
||||
src.data = list()
|
||||
register_asset("crewmonitor.js",'crew.js')
|
||||
register_asset("crewmonitor.css",'crew.css')
|
||||
for (var/z = 1 to world.maxz)
|
||||
register_asset("minimap_[z].png", file("[getMinimapFile(z)].png"))
|
||||
|
||||
/datum/crewmonitor/Destroy()
|
||||
if (src.interfaces)
|
||||
@@ -261,15 +260,18 @@ var/global/datum/crewmonitor/crewmonitor = new
|
||||
/datum/crewmonitor/proc/generateMiniMaps()
|
||||
for(var/z = 1 to world.maxz)
|
||||
generateMiniMap(z)
|
||||
for (var/z = 1 to world.maxz)
|
||||
register_asset("minimap_[z].png", file("[getMinimapFile(z)].png"))
|
||||
|
||||
max_initialized_zlevel = world.maxz
|
||||
|
||||
world << "<span class='boldannounce'>All minimaps have been generated."
|
||||
for(var/client/C in clients)
|
||||
sendResources(C)
|
||||
initialized = TRUE
|
||||
|
||||
/datum/crewmonitor/proc/sendResources(var/client/client)
|
||||
send_asset(client, "crewmonitor.js")
|
||||
send_asset(client, "crewmonitor.css")
|
||||
for (var/z = 1 to world.maxz)
|
||||
for (var/z = 1 to max_initialized_zlevel)
|
||||
send_asset(client, "minimap_[z].png")
|
||||
|
||||
/datum/crewmonitor/proc/getMinimapFile(z)
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
if(C.get_amount() >= 5)
|
||||
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
user << "<span class='notice'>You start to add cables to the frame...</span>"
|
||||
if(do_after(user, 20, target = src))
|
||||
if(do_after(user, 20/P.toolspeed, target = src))
|
||||
if(C.get_amount() >= 5 && state == 1)
|
||||
C.use(5)
|
||||
user << "<span class='notice'>You add cables to the frame.</span>"
|
||||
@@ -80,7 +80,7 @@
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
user.visible_message("<span class='warning'>[user] disassembles the frame.</span>", \
|
||||
"<span class='notice'>You start to disassemble the frame...</span>", "You hear banging and clanking.")
|
||||
if(do_after(user, 40, target = src))
|
||||
if(do_after(user, 40/P.toolspeed, target = src))
|
||||
if(state == 1)
|
||||
user << "<span class='notice'>You disassemble the frame.</span>"
|
||||
var/obj/item/stack/sheet/metal/M = new (loc, 5)
|
||||
@@ -89,7 +89,7 @@
|
||||
if(istype(P, /obj/item/weapon/wrench))
|
||||
user << "<span class='notice'>You start [anchored ? "un" : ""]securing [name]...</span>"
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1)
|
||||
if(do_after(user, 40, target = src))
|
||||
if(do_after(user, 40/P.toolspeed, target = src))
|
||||
if(state == 1)
|
||||
user << "<span class='notice'>You [anchored ? "un" : ""]secure [name].</span>"
|
||||
anchored = !anchored
|
||||
@@ -98,7 +98,7 @@
|
||||
if(istype(P, /obj/item/weapon/wrench))
|
||||
user << "<span class='notice'>You start [anchored ? "un" : ""]securing [name]...</span>"
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1)
|
||||
if(do_after(user, 40, target = src))
|
||||
if(do_after(user, 40/P.toolspeed, target = src))
|
||||
user << "<span class='notice'>You [anchored ? "un" : ""]secure [name].</span>"
|
||||
anchored = !anchored
|
||||
|
||||
|
||||
@@ -797,7 +797,7 @@ About the new airlock wires panel:
|
||||
updateUsrDialog()
|
||||
return
|
||||
|
||||
/obj/machinery/door/airlock/attackby(obj/C, mob/user, params)
|
||||
/obj/machinery/door/airlock/attackby(obj/item/C, mob/user, params)
|
||||
if(!istype(usr, /mob/living/silicon))
|
||||
if(src.isElectrified())
|
||||
if(src.shock(user, 75))
|
||||
@@ -816,7 +816,7 @@ About the new airlock wires panel:
|
||||
"<span class='notice'>You begin [welded ? "unwelding":"welding"] the airlock...</span>", \
|
||||
"<span class='italics'>You hear welding.</span>")
|
||||
playsound(loc, 'sound/items/Welder.ogg', 40, 1)
|
||||
if(do_after(user,40,5,1, target = src))
|
||||
if(do_after(user,40/C.toolspeed,5,1, target = src))
|
||||
if(density && !operating)//Door must be closed to weld.
|
||||
if( !istype(src, /obj/machinery/door/airlock) || !user || !W || !W.isOn() || !user.loc )
|
||||
return
|
||||
@@ -847,7 +847,7 @@ About the new airlock wires panel:
|
||||
if(p_open && charge)
|
||||
user << "<span class='notice'>You carefully start removing [charge] from [src]...</span>"
|
||||
playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1)
|
||||
if(!do_after(user, 150, target = src))
|
||||
if(!do_after(user, 150/C.toolspeed, target = src))
|
||||
user << "<span class='warning'>You slip and [charge] detonates!</span>"
|
||||
charge.ex_act(1)
|
||||
user.Weaken(3)
|
||||
@@ -861,7 +861,7 @@ About the new airlock wires panel:
|
||||
playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1)
|
||||
user.visible_message("[user] removes the electronics from the airlock assembly.", \
|
||||
"<span class='notice'>You start to remove electronics from the airlock assembly...</span>")
|
||||
if(do_after(user,40, target = src))
|
||||
if(do_after(user,40/C.toolspeed, target = src))
|
||||
if(src.loc)
|
||||
if(src.doortype)
|
||||
var/obj/structure/door_assembly/A = new src.doortype(src.loc)
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
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, 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>")
|
||||
@@ -208,7 +208,7 @@
|
||||
playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1)
|
||||
user.visible_message("<span class='notice'>[user] starts prying something out from [src]...</span>", \
|
||||
"<span class='notice'>You begin prying out the wire cover...</span>")
|
||||
if(!do_after(user, 50, target = src)) return
|
||||
if(!do_after(user, 50/C.toolspeed, target = src)) return
|
||||
if(constructionStep != CONSTRUCTION_PANEL_OPEN) return
|
||||
playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
user.visible_message("<span class='notice'>[user] pries out a metal plate from [src], exposing the wires.</span>", \
|
||||
@@ -220,7 +220,7 @@
|
||||
playsound(get_turf(src), 'sound/items/Ratchet.ogg', 50, 1)
|
||||
user.visible_message("<span class='notice'>[user] starts bolting down [src]...</span>", \
|
||||
"<span class='notice'>You begin bolting [src]...</span>")
|
||||
if(!do_after(user, 30, target = src)) return
|
||||
if(!do_after(user, 30/C.toolspeed, target = src)) return
|
||||
user.visible_message("<span class='notice'>[user] finishes the firelock.</span>", \
|
||||
"<span class='notice'>You finish the firelock.</span>")
|
||||
playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
@@ -235,7 +235,7 @@
|
||||
playsound(get_turf(src), 'sound/items/Wirecutter.ogg', 50, 1)
|
||||
user.visible_message("<span class='notice'>[user] starts cutting the wires from [src]...</span>", \
|
||||
"<span class='notice'>You begin removing [src]'s wires...</span>")
|
||||
if(!do_after(user, 60, target = src)) return
|
||||
if(!do_after(user, 60/C.toolspeed, target = src)) return
|
||||
if(constructionStep != CONSTRUCTION_WIRES_EXPOSED) return
|
||||
user.visible_message("<span class='notice'>[user] removes the wires from [src].</span>", \
|
||||
"<span class='notice'>You remove the wiring from [src], exposing the circuit board.</span>")
|
||||
@@ -250,7 +250,7 @@
|
||||
playsound(get_turf(src), 'sound/items/Welder.ogg', 50, 1)
|
||||
user.visible_message("<span class='notice'>[user] starts welding a metal plate into [src]...</span>", \
|
||||
"<span class='notice'>You begin welding the cover plate back onto [src]...</span>")
|
||||
if(!do_after(user, 80, target = src)) return
|
||||
if(!do_after(user, 80/C.toolspeed, target = src)) return
|
||||
if(constructionStep != CONSTRUCTION_WIRES_EXPOSED) return
|
||||
playsound(get_turf(src), 'sound/items/Welder2.ogg', 50, 1)
|
||||
user.visible_message("<span class='notice'>[user] welds the metal plate into [src].</span>", \
|
||||
@@ -263,7 +263,7 @@
|
||||
user.visible_message("<span class='notice'>[user] begins removing the circuit board from [src]...</span>", \
|
||||
"<span class='notice'>You begin prying out the circuit board from [src]...</span>")
|
||||
playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1)
|
||||
if(!do_after(user, 50, target = src)) return
|
||||
if(!do_after(user, 50/C.toolspeed, target = src)) return
|
||||
if(constructionStep != CONSTRUCTION_GUTTED) return
|
||||
user.visible_message("<span class='notice'>[user] removes [src]'s circuit board.</span>", \
|
||||
"<span class='notice'>You remove the circuit board from [src].</span>")
|
||||
@@ -296,7 +296,7 @@
|
||||
playsound(get_turf(src), 'sound/items/Welder.ogg', 50, 1)
|
||||
user.visible_message("<span class='notice'>[user] begins cutting apart [src]'s frame...</span>", \
|
||||
"<span class='notice'>You begin slicing [src] apart...</span>")
|
||||
if(!do_after(user, 80, target = src)) return
|
||||
if(!do_after(user, 80/C.toolspeed, target = src)) return
|
||||
if(constructionStep != CONSTRUCTION_NOCIRCUIT) return
|
||||
user.visible_message("<span class='notice'>[user] cuts apart [src]!</span>", \
|
||||
"<span class='notice'>You cut [src] into metal.</span>")
|
||||
|
||||
@@ -279,7 +279,7 @@
|
||||
playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1)
|
||||
user.visible_message("[user] removes the electronics from the [src.name].", \
|
||||
"<span class='notice'>You start to remove electronics from the [src.name]...</span>")
|
||||
if(do_after(user,40, target = src))
|
||||
if(do_after(user,40/I.toolspeed, target = src))
|
||||
if(src.p_open && !src.density && !src.operating && src.loc)
|
||||
var/obj/structure/windoor_assembly/WA = new /obj/structure/windoor_assembly(src.loc)
|
||||
switch(base_state)
|
||||
|
||||
@@ -201,7 +201,7 @@
|
||||
playsound(src, 'sound/items/Welder.ogg', 50, 1)
|
||||
user.visible_message("<span class='notice'>[user] begins patching up [src] with [WT].</span>", \
|
||||
"<span class='notice'>You begin restoring the damage to [src]...</span>")
|
||||
if(!do_after(user, 40, target = src))
|
||||
if(!do_after(user, 40/O.toolspeed, target = src))
|
||||
return
|
||||
if(!src || !WT.remove_fuel(1, user)) return
|
||||
user.visible_message("<span class='notice'>[user] fixes [src]!</span>", \
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
if (bulb)
|
||||
user.visible_message("[user] begins to disconnect [src]'s flashbulb.", "<span class='notice'>You begin to disconnect [src]'s flashbulb...</span>")
|
||||
playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1)
|
||||
if(do_after(user, 30, target = src) && bulb)
|
||||
if(do_after(user, 30/W.toolspeed, target = src) && bulb)
|
||||
user.visible_message("[user] has disconnected [src]'s flashbulb!", "<span class='notice'>You disconnect [src]'s flashbulb.</span>")
|
||||
bulb.loc = src.loc
|
||||
bulb = null
|
||||
|
||||
@@ -71,7 +71,10 @@ var/const/HOLOPAD_MODE = RANGE_BASED
|
||||
default_deconstruction_crowbar(P)
|
||||
|
||||
|
||||
/obj/machinery/hologram/holopad/attack_hand(mob/living/carbon/human/user) //Carn: Hologram requests.
|
||||
/obj/machinery/hologram/holopad/AltClick(mob/living/carbon/human/user)
|
||||
interact(user)
|
||||
|
||||
/obj/machinery/hologram/holopad/interact(mob/living/carbon/human/user) //Carn: Hologram requests.
|
||||
if(!istype(user))
|
||||
return
|
||||
if(user.stat || stat & (NOPOWER|BROKEN))
|
||||
@@ -108,7 +111,7 @@ var/const/HOLOPAD_MODE = RANGE_BASED
|
||||
else if(href_list["mainmenu"])
|
||||
temp = ""
|
||||
|
||||
updateUsrDialog()
|
||||
updateDialog()
|
||||
add_fingerprint(usr)
|
||||
|
||||
/obj/machinery/hologram/holopad/attack_ai(mob/living/silicon/ai/user)
|
||||
|
||||
@@ -326,7 +326,7 @@ Class Procs:
|
||||
if(istype(W))
|
||||
user << "<span class='notice'>You begin [anchored ? "un" : ""]securing [name]...</span>"
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
if(do_after(user, time, target = src))
|
||||
if(do_after(user, time/W.toolspeed, target = src))
|
||||
user << "<span class='notice'>You [anchored ? "un" : ""]secure [name].</span>"
|
||||
anchored = !anchored
|
||||
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
|
||||
@@ -723,7 +723,7 @@ var/list/obj/machinery/newscaster/allCasters = list()
|
||||
if(istype(I, /obj/item/weapon/wrench))
|
||||
user << "<span class='notice'>You start [anchored ? "un" : ""]securing [name]...</span>"
|
||||
playsound(loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
if(do_after(user, 60, target = src))
|
||||
if(do_after(user, 60/I.toolspeed, target = src))
|
||||
user << "<span class='notice'>You [anchored ? "un" : ""]secure [name].</span>"
|
||||
new /obj/item/wallframe/newscaster(loc)
|
||||
playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
if (!anchored && !isinspace())
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
user << "<span class='notice'>You begin to fasten \the [src] to the floor...</span>"
|
||||
if (do_after(user, 40, target = src))
|
||||
if (do_after(user, 40/W.toolspeed, target = src))
|
||||
add_fingerprint(user)
|
||||
user.visible_message( \
|
||||
"[user] fastens \the [src].", \
|
||||
@@ -94,7 +94,7 @@
|
||||
else if(anchored)
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
user << "<span class='notice'>You begin to unfasten \the [src] from the floor...</span>"
|
||||
if (do_after(user, 20, target = src))
|
||||
if (do_after(user, 20/W.toolspeed, target = src))
|
||||
add_fingerprint(user)
|
||||
user.visible_message( \
|
||||
"[user] unfastens \the [src].", \
|
||||
|
||||
@@ -734,7 +734,7 @@
|
||||
|
||||
playsound(loc, pick('sound/items/Welder.ogg', 'sound/items/Welder2.ogg'), 50, 1)
|
||||
user << "<span class='notice'>You start to remove the turret's interior metal armor...</span>"
|
||||
if(do_after(user, 20, target = src))
|
||||
if(do_after(user, 20/I.toolspeed, target = src))
|
||||
if(!src || !WT.remove_fuel(5, user)) return
|
||||
build_step = 1
|
||||
user << "<span class='notice'>You remove the turret's interior metal armor.</span>"
|
||||
@@ -810,7 +810,7 @@
|
||||
|
||||
playsound(loc, pick('sound/items/Welder.ogg', 'sound/items/Welder2.ogg'), 50, 1)
|
||||
user << "<span class='notice'>You begin to weld the turret's armor down...</span>"
|
||||
if(do_after(user, 30, target = src))
|
||||
if(do_after(user, 30/I.toolspeed, target = src))
|
||||
if(!src || !WT.remove_fuel(5, user))
|
||||
return
|
||||
build_step = 8
|
||||
|
||||
@@ -530,7 +530,7 @@
|
||||
user.visible_message("<span class='notice'>[user] starts removing [src]'s damaged wires.</span>", \
|
||||
"<span class='notice'>You begin removing the damaged wires from [src]...</span>")
|
||||
playsound(src, 'sound/items/Wirecutter.ogg', 50, 1)
|
||||
if(!do_after(user, 30, target = src))
|
||||
if(!do_after(user, 30/I.toolspeed, target = src))
|
||||
return
|
||||
user.visible_message("<span class='notice'>[user] removes the damaged wires from [src].</span>", \
|
||||
"<spna class='notice'>You remove the damaged wiring from [src].</span>")
|
||||
@@ -560,7 +560,7 @@
|
||||
user.visible_message("<span class='notice'>[user] starts removing [src]'s broken interior plating.</span>", \
|
||||
"<span class='notice'>You begin removing the damaged interior plating from [src]...</span>")
|
||||
playsound(src, 'sound/items/Crowbar.ogg', 50, 1)
|
||||
if(!do_after(user, 30, target = src))
|
||||
if(!do_after(user, 30/I.toolspeed, target = src))
|
||||
return
|
||||
user.visible_message("<span class='notice'>[user] removes the damaged interior plating from [src].</span>", \
|
||||
"<spna class='notice'>You remove the damaged interior plating from [src].</span>")
|
||||
|
||||
@@ -873,7 +873,9 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
|
||||
/obj/item/clothing/suit/whitedress = 1,
|
||||
/obj/item/clothing/under/jester = 1, /obj/item/clothing/head/jester = 1,
|
||||
/obj/item/clothing/suit/hooded/carp_costume = 1,
|
||||
/obj/item/clothing/suit/hooded/ian_costume = 1)
|
||||
/obj/item/clothing/suit/hooded/ian_costume = 1,
|
||||
/obj/item/clothing/suit/snowman = 1,
|
||||
/obj/item/clothing/head/snowman = 1)
|
||||
contraband = list(/obj/item/clothing/suit/judgerobe = 1,/obj/item/clothing/head/powdered_wig = 1,/obj/item/weapon/gun/magic/wand = 2,/obj/item/clothing/glasses/sunglasses/garb = 2)
|
||||
premium = list(/obj/item/clothing/suit/hgpirate = 2, /obj/item/clothing/head/hgpiratecap = 2, /obj/item/clothing/head/helmet/roman = 1, /obj/item/clothing/head/helmet/roman/legionaire = 1, /obj/item/clothing/under/roman = 1, /obj/item/clothing/shoes/roman = 1, /obj/item/weapon/shield/riot/roman = 1)
|
||||
refill_canister = /obj/item/weapon/vending_refill/autodrobe
|
||||
|
||||
@@ -97,6 +97,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s
|
||||
var/flags_cover = 0 //for flags such as GLASSESCOVERSEYES
|
||||
var/heat = 0
|
||||
var/sharpness = IS_BLUNT
|
||||
var/toolspeed = 1
|
||||
|
||||
/obj/item/proc/check_allowed_items(atom/target, not_inside, target_self)
|
||||
if(((src in target) && !target_self) || ((!istype(target.loc, /turf)) && (!istype(target, /turf)) && (not_inside)) || is_type_in_list(target, can_be_placed_into))
|
||||
|
||||
@@ -8,10 +8,14 @@
|
||||
w_class = 1
|
||||
var/wax = 200
|
||||
var/lit = 0
|
||||
var/infinite = 0
|
||||
var/start_lit = 0
|
||||
heat = 1000
|
||||
proc
|
||||
light(var/flavor_text = "<span class='danger'>[usr] lights the [name].</span>")
|
||||
|
||||
/obj/item/candle/New()
|
||||
..()
|
||||
if(start_lit)
|
||||
light()
|
||||
|
||||
/obj/item/candle/update_icon()
|
||||
var/i
|
||||
@@ -51,14 +55,16 @@
|
||||
light() //honk
|
||||
return
|
||||
|
||||
/obj/item/candle/light(var/flavor_text = "<span class='danger'>[usr] lights the [name].</span>")
|
||||
/obj/item/candle/proc/light(var/flavor_text = "<span class='danger'>[usr] lights the [name].</span>")
|
||||
if(!src.lit)
|
||||
src.lit = 1
|
||||
//src.damtype = "fire"
|
||||
for(var/mob/O in viewers(usr, null))
|
||||
O.show_message(flavor_text, 1)
|
||||
SetLuminosity(CANDLE_LUMINOSITY)
|
||||
SSobj.processing |= src
|
||||
if(!infinite)
|
||||
SSobj.processing |= src
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/item/candle/process()
|
||||
@@ -99,4 +105,9 @@
|
||||
/obj/item/candle/is_hot()
|
||||
return lit * heat
|
||||
|
||||
|
||||
/obj/item/candle/infinite
|
||||
infinite = 1
|
||||
start_lit = 1
|
||||
|
||||
#undef CANDLE_LUMINOSITY
|
||||
@@ -122,7 +122,7 @@
|
||||
return 0
|
||||
user.visible_message("<span class='notice'>[user] unscrews [src]'s maintenance panel and begins fiddling with its innards...</span>", "<span class='notice'>You begin resetting [src]...</span>")
|
||||
playsound(user, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
if(!do_after(user, 40, target = user))
|
||||
if(!do_after(user, 40/I.toolspeed, target = user))
|
||||
return 0
|
||||
user.visible_message("<span class='notice'>[user] refastens [src]'s maintenance panel!</span>", "<span class='notice'>You reset [src] to its factory settings!</span>")
|
||||
playsound(user, 'sound/items/Screwdriver2.ogg', 50, 1)
|
||||
|
||||
@@ -98,6 +98,33 @@
|
||||
user << "<span class='warning'>You need a working light!</span>"
|
||||
return
|
||||
|
||||
if(istype(W, /obj/item/weapon/storage))
|
||||
var/obj/item/weapon/storage/S = W
|
||||
var/found_good_light = 0
|
||||
var/replaced_something = 0
|
||||
|
||||
for(var/obj/item/I in S.contents)
|
||||
if(istype(I,/obj/item/weapon/light))
|
||||
var/obj/item/weapon/light/L = I
|
||||
if(L.status == LIGHT_OK)
|
||||
found_good_light = 1
|
||||
if(src.uses < max_uses)
|
||||
qdel(L)
|
||||
AddUses(1)
|
||||
replaced_something = 1
|
||||
else
|
||||
break
|
||||
|
||||
if(!found_good_light)
|
||||
user << "<span class='warning'>\The [S] contains no useable lights!</span>"
|
||||
return
|
||||
|
||||
if(!replaced_something && src.uses == max_uses)
|
||||
user << "<span class='warning'>\The [src] is full!</span>"
|
||||
return
|
||||
|
||||
user << "<span class='notice'>You fill \the [src] with lights from \the [S]. You have [uses] lights remaining.</span>"
|
||||
|
||||
/obj/item/device/lightreplacer/emag_act()
|
||||
if(!emagged)
|
||||
Emag()
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
origin_tech = "magnets=1;engineering=1"
|
||||
var/obj/machinery/buffer // simple machine buffer for device linkage
|
||||
hitsound = 'sound/weapons/tap.ogg'
|
||||
toolspeed = 1
|
||||
|
||||
|
||||
// Syndicate device disguised as a multitool; it will turn red when an AI camera is nearby.
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
user << "<span class='warning'>You can't see the box well enough to cut the wires out!</span>"
|
||||
return
|
||||
user.visible_message("<span class='notice'>[user] starts removing the payload and wires from \the [src].</span>", "<span class='notice'>You start removing the payload and wires from \the [src]...</span>")
|
||||
if(do_after(user, 40, target = src))
|
||||
if(do_after(user, 40/I.toolspeed, target = src))
|
||||
playsound(src, 'sound/items/Wirecutter.ogg', 50, 1, 1)
|
||||
user.unEquip(src)
|
||||
user.visible_message("<span class='notice'>[user] removes the insides of \the [src]!</span>", "<span class='notice'>You remove the insides of \the [src].</span>")
|
||||
|
||||
@@ -269,7 +269,7 @@
|
||||
/obj/item/device/tape/attackby(obj/item/I, mob/user, params)
|
||||
if(ruined && istype(I, /obj/item/weapon/screwdriver))
|
||||
user << "<span class='notice'>You start winding the tape back in...</span>"
|
||||
if(do_after(user, 120, target = src))
|
||||
if(do_after(user, 120/I.toolspeed, target = src))
|
||||
user << "<span class='notice'>You wound the tape back in.</span>"
|
||||
fix()
|
||||
|
||||
|
||||
@@ -66,6 +66,7 @@
|
||||
icon = 'icons/obj/nuke_tools.dmi'
|
||||
icon_state = "screwdriver_nuke"
|
||||
item_state = "screwdriver_nuke"
|
||||
toolspeed = 2
|
||||
|
||||
/obj/item/weapon/screwdriver/nuke/New()
|
||||
//to skip screwdriver icon update
|
||||
|
||||
@@ -34,14 +34,14 @@
|
||||
/obj/item/weapon/storage/secure/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if(locked)
|
||||
if (istype(W, /obj/item/weapon/screwdriver))
|
||||
if (do_after(user, 20, target = src))
|
||||
if (do_after(user, 20/W.toolspeed, target = src))
|
||||
src.open =! src.open
|
||||
user.show_message(text("<span class='notice'>You [] the service panel.</span>", (src.open ? "open" : "close")))
|
||||
return
|
||||
if ((istype(W, /obj/item/device/multitool)) && (src.open == 1)&& (!src.l_hacking))
|
||||
user.show_message(text("<span class='danger'>Now attempting to reset internal memory, please hold.</span>"), 1)
|
||||
src.l_hacking = 1
|
||||
if (do_after(usr, 100, target = src))
|
||||
if (do_after(usr, 100/W.toolspeed, target = src))
|
||||
if (prob(40))
|
||||
src.l_setshort = 1
|
||||
src.l_set = 0
|
||||
|
||||
@@ -145,9 +145,9 @@ Frequency:
|
||||
for(var/obj/machinery/computer/teleporter/com in machines)
|
||||
if(com.target)
|
||||
if(com.power_station && com.power_station.teleporter_hub && com.power_station.engaged)
|
||||
L["[com.id] (Active)"] = com.target
|
||||
L["[get_area(com.target)] (Active)"] = com.target
|
||||
else
|
||||
L["[com.id] (Inactive)"] = com.target
|
||||
L["[get_area(com.target)] (Inactive)"] = com.target
|
||||
var/list/turfs = list( )
|
||||
for(var/turf/T in ultra_range(10, orange=1))
|
||||
if(T.x>world.maxx-8 || T.x<8) continue //putting them at the edge is dumb
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
materials = list(MAT_METAL=150)
|
||||
origin_tech = "materials=1;engineering=1"
|
||||
attack_verb = list("bashed", "battered", "bludgeoned", "whacked")
|
||||
toolspeed = 1
|
||||
|
||||
/obj/item/weapon/wrench/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is beating \himself to death with the [src.name]! It looks like \he's trying to commit suicide.</span>")
|
||||
@@ -51,6 +52,7 @@
|
||||
materials = list(MAT_METAL=75)
|
||||
attack_verb = list("stabbed")
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
toolspeed = 1
|
||||
|
||||
/obj/item/weapon/screwdriver/suicide_act(mob/user)
|
||||
user.visible_message(pick("<span class='suicide'>[user] is stabbing the [src.name] into \his temple! It looks like \he's trying to commit suicide.</span>", \
|
||||
@@ -114,6 +116,7 @@
|
||||
origin_tech = "materials=1;engineering=1"
|
||||
attack_verb = list("pinched", "nipped")
|
||||
hitsound = 'sound/items/Wirecutter.ogg'
|
||||
toolspeed = 1
|
||||
|
||||
/obj/item/weapon/wirecutters/New(loc, var/param_color = null)
|
||||
..()
|
||||
@@ -165,6 +168,7 @@
|
||||
var/can_off_process = 0
|
||||
var/light_intensity = 2 //how powerful the emitted light is when used.
|
||||
heat = 3800
|
||||
toolspeed = 1
|
||||
|
||||
/obj/item/weapon/weldingtool/New()
|
||||
..()
|
||||
@@ -429,6 +433,7 @@
|
||||
change_icons = 0
|
||||
can_off_process = 1
|
||||
light_intensity = 1
|
||||
toolspeed = 2
|
||||
|
||||
|
||||
//Proc to make the experimental welder generate fuel, optimized as fuck -Sieve
|
||||
@@ -465,6 +470,7 @@
|
||||
materials = list(MAT_METAL=50)
|
||||
origin_tech = "engineering=1"
|
||||
attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked")
|
||||
toolspeed = 1
|
||||
|
||||
/obj/item/weapon/crowbar/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is beating \himself to death with the [src.name]! It looks like \he's trying to commit suicide.</span>")
|
||||
@@ -485,3 +491,4 @@
|
||||
throw_range = 3
|
||||
materials = list(MAT_METAL=70)
|
||||
icon_state = "crowbar_large"
|
||||
toolspeed = 2
|
||||
|
||||
@@ -63,8 +63,8 @@
|
||||
/obj/item/weapon/vending_refill/autodrobe
|
||||
machine_name = "AutoDrobe"
|
||||
icon_state = "refill_costume"
|
||||
charges = list(25, 2, 3)// of 75 standard, 6 contraband, 9 premium
|
||||
init_charges = list(25, 2, 3)
|
||||
charges = list(27, 2, 3)// of 75 standard, 6 contraband, 9 premium
|
||||
init_charges = list(27, 2, 3)
|
||||
|
||||
/obj/item/weapon/vending_refill/clothing
|
||||
machine_name = "ClothesMate"
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
if(istype(P, /obj/item/weapon/wrench))
|
||||
playsound(loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
user << "<span class='notice'>You start wrenching the frame into place...</span>"
|
||||
if(do_after(user, 20, target = src))
|
||||
if(do_after(user, 20/P.toolspeed, target = src))
|
||||
user << "<span class='notice'>You wrench the frame into place.</span>"
|
||||
anchored = 1
|
||||
state = 1
|
||||
@@ -27,7 +27,7 @@
|
||||
return
|
||||
playsound(loc, 'sound/items/Welder.ogg', 50, 1)
|
||||
user << "<span class='notice'>You start to deconstruct the frame...</span>"
|
||||
if(do_after(user, 20, target = src))
|
||||
if(do_after(user, 20/P.toolspeed, target = src))
|
||||
if(!src || !WT.remove_fuel(0, user)) return
|
||||
user << "<span class='notice'>You deconstruct the frame.</span>"
|
||||
new /obj/item/stack/sheet/plasteel( loc, 4)
|
||||
@@ -36,7 +36,7 @@
|
||||
if(istype(P, /obj/item/weapon/wrench))
|
||||
playsound(loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
user << "<span class='notice'>You start to unfasten the frame...</span>"
|
||||
if(do_after(user, 20, target = src))
|
||||
if(do_after(user, 20/P.toolspeed, target = src))
|
||||
user << "<span class='notice'>You unfasten the frame.</span>"
|
||||
anchored = 0
|
||||
state = 0
|
||||
|
||||
@@ -213,7 +213,7 @@
|
||||
return
|
||||
user << "<span class='notice'>You begin cutting \the [src] apart...</span>"
|
||||
playsound(loc, cutting_sound, 40, 1)
|
||||
if(do_after(user,40,5,1, target = src))
|
||||
if(do_after(user,40/W.toolspeed,5,1, target = src))
|
||||
if( !opened || !istype(src, /obj/structure/closet) || !user || !WT || !WT.isOn() || !user.loc )
|
||||
return
|
||||
playsound(loc, cutting_sound, 50, 1)
|
||||
|
||||
@@ -126,7 +126,7 @@
|
||||
qdel(src)
|
||||
return
|
||||
user << "<span class='notice'>You start to [open ? "close":"open"] the [src]</span>"
|
||||
if(do_after(user, 20, target = src))
|
||||
if(do_after(user, 20/W.toolspeed, target = src))
|
||||
user << "<span class='notice'>You [open ? "close":"open"] the [src]</span>"
|
||||
open = !open
|
||||
update_icon()
|
||||
@@ -187,7 +187,7 @@
|
||||
if(istype(I, /obj/item/weapon/wrench))
|
||||
user << "<span class='notice'>You start disassembling [src]...</span>"
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
if(do_after(user, 30, target = src))
|
||||
if(do_after(user, 30/I.toolspeed, target = src))
|
||||
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
new /obj/item/stack/sheet/mineral/wood(get_turf(src))
|
||||
qdel(src)
|
||||
|
||||
@@ -460,7 +460,7 @@
|
||||
"You start to disassemble the airlock assembly...")
|
||||
playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1)
|
||||
|
||||
if(do_after(user, 40, target = src))
|
||||
if(do_after(user, 40/W.toolspeed, target = src))
|
||||
if( !WT.isOn() )
|
||||
return
|
||||
user << "<span class='notice'>You disassemble the airlock assembly.</span>"
|
||||
@@ -492,7 +492,7 @@
|
||||
"<span class='notice'>You start to secure the airlock assembly to the floor...</span>", \
|
||||
"<span class='italics'>You hear wrenching.</span>")
|
||||
|
||||
if(do_after(user, 40, target = src))
|
||||
if(do_after(user, 40/W.toolspeed, target = src))
|
||||
if( src.anchored )
|
||||
return
|
||||
user << "<span class='notice'>You secure the airlock assembly.</span>"
|
||||
@@ -506,7 +506,7 @@
|
||||
user.visible_message("[user] unsecures the airlock assembly from the floor.", \
|
||||
"<span class='notice'>You start to unsecure the airlock assembly from the floor...</span>", \
|
||||
"<span class='italics'>You hear wrenching.</span>")
|
||||
if(do_after(user, 40, target = src))
|
||||
if(do_after(user, 40/W.toolspeed, target = src))
|
||||
if( !src.anchored )
|
||||
return
|
||||
user << "<span class='notice'>You unsecure the airlock assembly.</span>"
|
||||
@@ -532,7 +532,7 @@
|
||||
user.visible_message("[user] cuts the wires from the airlock assembly.", \
|
||||
"<span class='notice'>You start to cut the wires from the airlock assembly...</span>")
|
||||
|
||||
if(do_after(user, 40, target = src))
|
||||
if(do_after(user, 40/W.toolspeed, target = src))
|
||||
if( src.state != 1 )
|
||||
return
|
||||
user << "<span class='notice'>You cut the wires from the airlock assembly.</span>"
|
||||
@@ -562,7 +562,7 @@
|
||||
user.visible_message("[user] removes the electronics from the airlock assembly.", \
|
||||
"<span class='notice'>You start to remove electronics from the airlock assembly...</span>")
|
||||
|
||||
if(do_after(user, 40, target = src))
|
||||
if(do_after(user, 40/W.toolspeed, target = src))
|
||||
if( src.state != 2 )
|
||||
return
|
||||
user << "<span class='notice'>You remove the airlock electronics.</span>"
|
||||
@@ -625,7 +625,7 @@
|
||||
user.visible_message("[user] finishes the airlock.", \
|
||||
"<span class='notice'>You start finishing the airlock...</span>")
|
||||
|
||||
if(do_after(user, 40, target = src))
|
||||
if(do_after(user, 40/W.toolspeed, target = src))
|
||||
if(src.loc && state == 2)
|
||||
user << "<span class='notice'>You finish the airlock.</span>"
|
||||
var/obj/machinery/door/airlock/door
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1)
|
||||
user.visible_message("<span class='warning'>[user] disassembles the girder.</span>", \
|
||||
"<span class='notice'>You start to disassemble the girder...</span>", "You hear clanking and banging noises.")
|
||||
if(do_after(user, 40, target = src))
|
||||
if(do_after(user, 40/W.toolspeed, target = src))
|
||||
if(state != GIRDER_DISPLACED)
|
||||
return
|
||||
state = GIRDER_DISASSEMBLED
|
||||
@@ -31,7 +31,7 @@
|
||||
else if(state == GIRDER_REINF)
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1)
|
||||
user << "<span class='notice'>You start unsecuring support struts...</span>"
|
||||
if(do_after(user, 40, target = src))
|
||||
if(do_after(user, 40/W.toolspeed, target = src))
|
||||
if(state != GIRDER_REINF)
|
||||
return
|
||||
user << "<span class='notice'>You unsecure the support struts.</span>"
|
||||
@@ -44,7 +44,7 @@
|
||||
return
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1)
|
||||
user << "<span class='notice'>You start securing the girder...</span>"
|
||||
if(do_after(user, 40, target = src))
|
||||
if(do_after(user, 40/W.toolspeed, target = src))
|
||||
user << "<span class='notice'>You secure the girder.</span>"
|
||||
var/obj/structure/girder/G = new (loc)
|
||||
transfer_fingerprints_to(G)
|
||||
@@ -52,7 +52,7 @@
|
||||
else if(state == GIRDER_NORMAL)
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1)
|
||||
user << "<span class='notice'>You start unsecuring the girder...</span>"
|
||||
if(do_after(user, 40, target = src))
|
||||
if(do_after(user, 40/W.toolspeed, target = src))
|
||||
user << "<span class='notice'>You unsecure the girder.</span>"
|
||||
var/obj/structure/girder/displaced/D = new (loc)
|
||||
transfer_fingerprints_to(D)
|
||||
@@ -77,7 +77,7 @@
|
||||
else if(istype(W, /obj/item/weapon/wirecutters) && state == GIRDER_REINF_STRUTS)
|
||||
playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1)
|
||||
user << "<span class='notice'>You start removing support struts...</span>"
|
||||
if(do_after(user, 40, target = src))
|
||||
if(do_after(user, 40/W.toolspeed, target = src))
|
||||
user << "<span class='notice'>You remove the support struts.</span>"
|
||||
new /obj/item/stack/sheet/plasteel(get_turf(src))
|
||||
var/obj/structure/girder/G = new (loc)
|
||||
@@ -125,7 +125,7 @@
|
||||
transfer_fingerprints_to(T)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
|
||||
if(!istype(W,/obj/item/stack/sheet))
|
||||
return
|
||||
|
||||
@@ -322,7 +322,7 @@
|
||||
if(WT.remove_fuel(0,user))
|
||||
playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1)
|
||||
user << "<span class='notice'>You start slicing apart the girder...</span>"
|
||||
if(do_after(user, 40, target = src))
|
||||
if(do_after(user, 40/W.toolspeed, target = src))
|
||||
if( !WT.isOn() )
|
||||
return
|
||||
user << "<span class='notice'>You slice apart the girder.</span>"
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
mybag.attackby(I, user)
|
||||
else if(istype(I, /obj/item/weapon/crowbar))
|
||||
user.visible_message("[user] begins to empty the contents of [src].", "<span class='notice'>You begin to empty the contents of [src]...</span>")
|
||||
if(do_after(user, 30, target = src))
|
||||
if(do_after(user, 30/I.toolspeed, target = src))
|
||||
usr << "<span class='notice'>You empty the contents of [src]'s bucket onto the floor.</span>"
|
||||
reagents.reaction(src.loc)
|
||||
src.reagents.clear_reagents()
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
if(istype(I, /obj/item/weapon/crowbar))
|
||||
if(!src.buckled_mob)
|
||||
playsound(loc, 'sound/items/Crowbar.ogg', 100, 1)
|
||||
if(do_after(user, 20, target = src))
|
||||
if(do_after(user, 20/I.toolspeed, target = src))
|
||||
user << "<span class='notice'>You pry the spikes out of the frame.</span>"
|
||||
new /obj/item/stack/rods(loc, 4)
|
||||
var/obj/F = new /obj/structure/kitchenspike_frame(src.loc,)
|
||||
|
||||
@@ -41,35 +41,38 @@
|
||||
else //wtf make your ladders properly assholes
|
||||
icon_state = "ladder00"
|
||||
|
||||
/obj/structure/ladder/attack_hand(mob/user)
|
||||
/obj/structure/ladder/proc/go_up(mob/user,is_ghost)
|
||||
if(!is_ghost)
|
||||
show_fluff_message(1,user)
|
||||
up.add_fingerprint(user)
|
||||
user.loc = get_turf(up)
|
||||
|
||||
/obj/structure/ladder/proc/go_down(mob/user,is_ghost)
|
||||
if(!is_ghost)
|
||||
show_fluff_message(0,user)
|
||||
down.add_fingerprint(user)
|
||||
user.loc = get_turf(down)
|
||||
|
||||
/obj/structure/ladder/proc/use(mob/user,is_ghost=0)
|
||||
if(up && down)
|
||||
switch( alert("Go up or down the ladder?", "Ladder", "Up", "Down", "Cancel") )
|
||||
if("Up")
|
||||
user.visible_message("[user] climbs up \the [src].", \
|
||||
"<span class='notice'>You climb up \the [src].</span>")
|
||||
user.loc = get_turf(up)
|
||||
up.add_fingerprint(user)
|
||||
go_up(user,is_ghost)
|
||||
if("Down")
|
||||
user.visible_message("[user] climbs down \the [src].", \
|
||||
"<span class='notice'>You climb down \the [src].</span>")
|
||||
user.loc = get_turf(down)
|
||||
down.add_fingerprint(user)
|
||||
go_down(user,is_ghost)
|
||||
if("Cancel")
|
||||
return
|
||||
|
||||
else if(up)
|
||||
user.visible_message("[user] climbs up \the [src].", \
|
||||
"<span class='notice'>You climb up \the [src].</span>")
|
||||
user.loc = get_turf(up)
|
||||
up.add_fingerprint(user)
|
||||
|
||||
go_up(user,is_ghost)
|
||||
else if(down)
|
||||
user.visible_message("[user] climbs down \the [src].", \
|
||||
"<span class='notice'>You climb down \the [src].</span>")
|
||||
user.loc = get_turf(down)
|
||||
down.add_fingerprint(user)
|
||||
go_down(user,is_ghost)
|
||||
|
||||
if(!is_ghost)
|
||||
add_fingerprint(user)
|
||||
|
||||
add_fingerprint(user)
|
||||
/obj/structure/ladder/attack_hand(mob/user)
|
||||
if(can_use(user))
|
||||
use(user)
|
||||
|
||||
/obj/structure/ladder/attack_paw(mob/user)
|
||||
return attack_hand(user)
|
||||
@@ -77,6 +80,18 @@
|
||||
/obj/structure/ladder/attackby(obj/item/weapon/W, mob/user, params)
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/structure/ladder/attack_ghost(mob/dead/observer/user)
|
||||
use(user,1)
|
||||
|
||||
/obj/structure/ladder/proc/show_fluff_message(up,mob/user)
|
||||
if(up)
|
||||
user.visible_message("[user] climbs up \the [src].","<span class='notice'>You climb up \the [src].</span>")
|
||||
else
|
||||
user.visible_message("[user] climbs down \the [src].","<span class='notice'>You climb down \the [src].</span>")
|
||||
|
||||
/obj/structure/ladder/proc/can_use(mob/user)
|
||||
return 1
|
||||
|
||||
/obj/structure/ladder/unbreakable/Destroy()
|
||||
return QDEL_HINT_LETMELIVE
|
||||
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
if(WT.remove_fuel(0, user))
|
||||
user << "<span class='notice'>You begin repairing [src]...</span>"
|
||||
playsound(src, 'sound/items/Welder.ogg', 100, 1)
|
||||
if(do_after(user, 10, target = src))
|
||||
if(do_after(user, 10/I.toolspeed, target = src))
|
||||
if(!user || !WT || !WT.isOn())
|
||||
return
|
||||
user << "<span class='notice'>You repair [src].</span>"
|
||||
|
||||
@@ -349,7 +349,7 @@
|
||||
if (!anchored && !isinspace())
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
user << "<span class='notice'> You begin to tighten \the [src] to the floor...</span>"
|
||||
if (do_after(user, 20, target = src))
|
||||
if (do_after(user, 20/O.toolspeed, target = src))
|
||||
user.visible_message( \
|
||||
"[user] tightens \the [src]'s casters.", \
|
||||
"<span class='notice'>You tighten \the [src]'s casters. Now it can be played again.</span>", \
|
||||
@@ -358,7 +358,7 @@
|
||||
else if(anchored)
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
user << "<span class='notice'> You begin to loosen \the [src]'s casters...</span>"
|
||||
if (do_after(user, 40, target = src))
|
||||
if (do_after(user, 40/O.toolspeed, target = src))
|
||||
user.visible_message( \
|
||||
"[user] loosens \the [src]'s casters.", \
|
||||
"<span class='notice'>You loosen \the [src]. Now it can be pulled somewhere else.</span>", \
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
if(istype(W, /obj/item/weapon/wrench))
|
||||
if(anchored)
|
||||
user << "Unweld the [src] first!"
|
||||
if(do_after(user, 80, target = src))
|
||||
if(do_after(user, 80/W.toolspeed, target = src))
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
user << "You dismantle the [src]."
|
||||
qdel(src)
|
||||
@@ -54,7 +54,7 @@
|
||||
user.visible_message("[user.name] starts to weld the [src.name] to the floor.", \
|
||||
"<span class='notice'>You start to weld \the [src] to the floor...</span>", \
|
||||
"<span class='italics'>You hear welding.</span>")
|
||||
if (do_after(user,20, target = src))
|
||||
if (do_after(user,20/W.toolspeed, target = src))
|
||||
if(!src || !WT.isOn())
|
||||
return
|
||||
anchored = 1
|
||||
@@ -65,7 +65,7 @@
|
||||
user.visible_message("[user.name] starts to cut the [src.name] free from the floor.", \
|
||||
"<span class='notice'>You start to cut \the [src] free from the floor...</span>", \
|
||||
"<span class='italics'>You hear welding.</span>")
|
||||
if (do_after(user,20, target = src))
|
||||
if (do_after(user,20/W.toolspeed, target = src))
|
||||
if(!src || !WT.isOn())
|
||||
return
|
||||
anchored = 0
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
user.visible_message("<span class='notice'>[user] starts removing [src]...</span>", \
|
||||
"<span class='notice'>You start unfastening [src].</span>")
|
||||
playsound(src, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
if(!do_after(user, 30, target = src))
|
||||
if(!do_after(user, 30/O.toolspeed, target = src))
|
||||
return
|
||||
playsound(src, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
user.visible_message("<span class='notice'>[user] unfastens [src].</span>", \
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1)
|
||||
user.visible_message("[user] is loosening the [name]'s bolts.", \
|
||||
"<span class='notice'>You are loosening the [name]'s bolts...</span>")
|
||||
if(do_after(user,40, target = src))
|
||||
if(do_after(user,40/W.toolspeed, target = src))
|
||||
if(!src.loc || !anchored)
|
||||
return
|
||||
user.visible_message("[user] loosened the [name]'s bolts!", \
|
||||
@@ -37,7 +37,7 @@
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1)
|
||||
user.visible_message("[user] is securing the [name]'s bolts...", \
|
||||
"<span class='notice'>You are securing the [name]'s bolts...</span>")
|
||||
if(do_after(user, 40, target = src))
|
||||
if(do_after(user, 40/W.toolspeed, target = src))
|
||||
if(!src.loc || anchored)
|
||||
return
|
||||
user.visible_message("[user] has secured the [name]'s bolts.", \
|
||||
@@ -68,7 +68,7 @@
|
||||
playsound(loc, 'sound/items/Welder.ogg', 40, 1)
|
||||
user.visible_message("[user] is slicing apart the [name].", \
|
||||
"<span class='notice'>You are slicing apart the [name]...</span>")
|
||||
if(do_after(user, 40, target = src))
|
||||
if(do_after(user, 40/W.toolspeed, target = src))
|
||||
if(!src.loc)
|
||||
return
|
||||
playsound(loc, 'sound/items/Welder2.ogg', 50, 1)
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
if(istype(I, /obj/item/weapon/wrench))
|
||||
user << "<span class='notice'>You start disassembling [src]...</span>"
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
if(do_after(user, 30, target = src))
|
||||
if(do_after(user, 30/I.toolspeed, target = src))
|
||||
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
for(var/i = 1, i <= framestackamount, i++)
|
||||
new framestack(get_turf(src))
|
||||
|
||||
@@ -340,14 +340,14 @@
|
||||
if(src.status == 2)
|
||||
user << "<span class='notice'>You start weakening the reinforced table...</span>"
|
||||
playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
|
||||
if (do_after(user, 50, target = src))
|
||||
if (do_after(user, 50/W.toolspeed, target = src))
|
||||
if(!src || !WT.isOn()) return
|
||||
user << "<span class='notice'>You weaken the table.</span>"
|
||||
src.status = 1
|
||||
else
|
||||
user << "<span class='notice'>You start strengthening the reinforced table...</span>"
|
||||
playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
|
||||
if (do_after(user, 50, target = src))
|
||||
if (do_after(user, 50/W.toolspeed, target = src))
|
||||
if(!src || !WT.isOn()) return
|
||||
user << "<span class='notice'>You strengthen the table.</span>"
|
||||
src.status = 2
|
||||
|
||||
@@ -46,7 +46,7 @@ obj/structure/transit_tube/ex_act(severity, target)
|
||||
return
|
||||
user.visible_message("[user] starts to deattach \the [src].", "<span class='notice'>You start to deattach the [name]...</span>")
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
if(do_after(user, 35, target = src))
|
||||
if(do_after(user, 35/W.toolspeed, target = src))
|
||||
user << "<span class='notice'>You deattach the [name].</span>"
|
||||
var/obj/structure/R = new tube_construction(src.loc)
|
||||
R.icon_state = src.icon_state
|
||||
|
||||
@@ -95,7 +95,7 @@
|
||||
if(istype(I, /obj/item/weapon/wrench))
|
||||
user << "<span class='notice'>You start attaching the [name]...</span>"
|
||||
src.add_fingerprint(user)
|
||||
if(do_after(user, 40, target = src))
|
||||
if(do_after(user, 40/I.toolspeed, target = src))
|
||||
if(!src) return
|
||||
user << "<span class='notice'>You attach the [name].</span>"
|
||||
var/obj/structure/transit_tube/R = src.buildtube()
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
if(istype(I, /obj/item/weapon/crowbar))
|
||||
user << "<span class='notice'>You start to [cistern ? "replace the lid on the cistern" : "lift the lid off the cistern"]...</span>"
|
||||
playsound(loc, 'sound/effects/stonedoor_openclose.ogg', 50, 1)
|
||||
if(do_after(user, 30, target = src))
|
||||
if(do_after(user, 30/I.toolspeed, target = src))
|
||||
user.visible_message("[user] [cistern ? "replaces the lid on the cistern" : "lifts the lid off the cistern"]!", "<span class='notice'>You [cistern ? "replace the lid on the cistern" : "lift the lid off the cistern"]!</span>", "<span class='italics'>You hear grinding porcelain.</span>")
|
||||
cistern = !cistern
|
||||
update_icon()
|
||||
@@ -185,7 +185,7 @@
|
||||
user << "<span class='notice'>The water temperature seems to be [watertemp].</span>"
|
||||
if(istype(I, /obj/item/weapon/wrench))
|
||||
user << "<span class='notice'>You begin to adjust the temperature valve with \the [I]...</span>"
|
||||
if(do_after(user, 50, target = src))
|
||||
if(do_after(user, 50/I.toolspeed, target = src))
|
||||
switch(watertemp)
|
||||
if("normal")
|
||||
watertemp = "freezing"
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
user.visible_message("[user] disassembles the windoor assembly.", "<span class='notice'>You start to disassemble the windoor assembly...</span>")
|
||||
playsound(loc, 'sound/items/Welder2.ogg', 50, 1)
|
||||
|
||||
if(do_after(user, 40, target = src))
|
||||
if(do_after(user, 40/W.toolspeed, target = src))
|
||||
if(!src || !WT.isOn()) return
|
||||
user << "<span class='notice'>You disassemble the windoor assembly.</span>"
|
||||
var/obj/item/stack/sheet/rglass/RG = new (get_turf(src), 5)
|
||||
@@ -104,7 +104,7 @@
|
||||
playsound(loc, 'sound/items/Ratchet.ogg', 100, 1)
|
||||
user.visible_message("[user] secures the windoor assembly to the floor.", "<span class='notice'>You start to secure the windoor assembly to the floor...</span>")
|
||||
|
||||
if(do_after(user, 40, target = src))
|
||||
if(do_after(user, 40/W.toolspeed, target = src))
|
||||
if(!src || anchored)
|
||||
return
|
||||
for(var/obj/machinery/door/window/WD in loc)
|
||||
@@ -123,7 +123,7 @@
|
||||
playsound(loc, 'sound/items/Ratchet.ogg', 100, 1)
|
||||
user.visible_message("[user] unsecures the windoor assembly to the floor.", "<span class='notice'>You start to unsecure the windoor assembly to the floor...</span>")
|
||||
|
||||
if(do_after(user, 40, target = src))
|
||||
if(do_after(user, 40/W.toolspeed, target = src))
|
||||
if(!src || !anchored)
|
||||
return
|
||||
user << "<span class='notice'>You unsecure the windoor assembly.</span>"
|
||||
@@ -180,7 +180,7 @@
|
||||
playsound(loc, 'sound/items/Wirecutter.ogg', 100, 1)
|
||||
user.visible_message("[user] cuts the wires from the airlock assembly.", "<span class='notice'>You start to cut the wires from airlock assembly...</span>")
|
||||
|
||||
if(do_after(user, 40, target = src))
|
||||
if(do_after(user, 40/W.toolspeed, target = src))
|
||||
if(!src || state != "02")
|
||||
return
|
||||
|
||||
@@ -218,7 +218,7 @@
|
||||
playsound(loc, 'sound/items/Screwdriver.ogg', 100, 1)
|
||||
user.visible_message("[user] removes the electronics from the airlock assembly.", "<span class='notice'>You start to uninstall electronics from the airlock assembly...</span>")
|
||||
|
||||
if(do_after(user, 40, target = src))
|
||||
if(do_after(user, 40/W.toolspeed, target = src))
|
||||
if(!src || !electronics)
|
||||
return
|
||||
user << "<span class='notice'>You remove the airlock electronics.</span>"
|
||||
@@ -248,7 +248,7 @@
|
||||
playsound(loc, 'sound/items/Crowbar.ogg', 100, 1)
|
||||
user.visible_message("[user] pries the windoor into the frame.", "<span class='notice'>You start prying the windoor into the frame...</span>")
|
||||
|
||||
if(do_after(user, 40, target = src))
|
||||
if(do_after(user, 40/W.toolspeed, target = src))
|
||||
|
||||
if(loc && electronics)
|
||||
|
||||
|
||||
@@ -200,7 +200,7 @@
|
||||
else if(!reinf)
|
||||
user << (anchored ? "<span class='notice'>You begin to unscrew the window from the floor...</span>" : "<span class='notice'>You begin to screw the window to the floor...</span>")
|
||||
|
||||
if(do_after(user, 40, target = src))
|
||||
if(do_after(user, 40/I.toolspeed, target = src))
|
||||
if(reinf && (state == 1 || state == 2))
|
||||
//If state was unfastened, fasten it, else do the reverse
|
||||
state = (state == 1 ? 2 : 1)
|
||||
@@ -217,7 +217,7 @@
|
||||
else if (istype(I, /obj/item/weapon/crowbar) && reinf && (state == 0 || state == 1))
|
||||
user << (state == 0 ? "<span class='notice'>You begin to lever the window into the frame...</span>" : "<span class='notice'>You begin to lever the window out of the frame...</span>")
|
||||
playsound(loc, 'sound/items/Crowbar.ogg', 75, 1)
|
||||
if(do_after(user, 40, target = src))
|
||||
if(do_after(user, 40/I.toolspeed, target = src))
|
||||
//If state was out of frame, put into frame, else do the reverse
|
||||
state = (state == 0 ? 1 : 0)
|
||||
user << (state == 1 ? "<span class='notice'>You pry the window into the frame.</span>" : "<span class='notice'>You pry the window out of the frame.</span>")
|
||||
@@ -228,7 +228,7 @@
|
||||
if(WT.remove_fuel(0,user))
|
||||
user << "<span class='notice'>You begin repairing [src]...</span>"
|
||||
playsound(loc, 'sound/items/Welder.ogg', 40, 1)
|
||||
if(do_after(user, 40, target = src))
|
||||
if(do_after(user, 40/I.toolspeed, target = src))
|
||||
health = maxhealth
|
||||
playsound(loc, 'sound/items/Welder2.ogg', 50, 1)
|
||||
else
|
||||
@@ -239,7 +239,7 @@
|
||||
else if(istype(I, /obj/item/weapon/wrench) && !anchored)
|
||||
playsound(loc, 'sound/items/Ratchet.ogg', 75, 1)
|
||||
user << "<span class='notice'> You begin to disassemble [src]...</span>"
|
||||
if(do_after(user, 40, target = src))
|
||||
if(do_after(user, 40/I.toolspeed, target = src))
|
||||
if(disassembled)
|
||||
return //Prevents multiple deconstruction attempts
|
||||
|
||||
|
||||
@@ -51,6 +51,9 @@
|
||||
/turf/simulated/floor/plating/snow/ex_act(severity, target)
|
||||
contents_explosion(severity, target)
|
||||
|
||||
/turf/simulated/floor/plating/snow/cold
|
||||
temperature = 220 //Enough to deal cold damage on breathing. TODO : Make these points defines
|
||||
|
||||
/turf/simulated/floor/plating/snow/gravsnow
|
||||
icon_state = "gravsnow"
|
||||
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
if(istype(C, /obj/item/weapon/wrench))
|
||||
user << "<span class='notice'>You begin removing rods...</span>"
|
||||
playsound(src, 'sound/items/Ratchet.ogg', 80, 1)
|
||||
if(do_after(user, 30, target = src))
|
||||
if(do_after(user, 30/C.toolspeed, target = src))
|
||||
if(!istype(src, /turf/simulated/floor/engine))
|
||||
return
|
||||
new /obj/item/stack/rods(src, 2)
|
||||
|
||||
@@ -178,7 +178,7 @@
|
||||
if( WT.remove_fuel(0,user) )
|
||||
user << "<span class='notice'>You begin slicing through the outer plating...</span>"
|
||||
playsound(src, 'sound/items/Welder.ogg', 100, 1)
|
||||
if(do_after(user, slicing_duration, target = src))
|
||||
if(do_after(user, slicing_duration/W.toolspeed, target = src))
|
||||
if( !istype(src, /turf/simulated/wall) || !user || !WT || !WT.isOn() || !T )
|
||||
return 1
|
||||
if( user.loc == T && user.get_active_hand() == WT )
|
||||
|
||||
@@ -38,6 +38,10 @@
|
||||
log_admin("[key_name(src)] has attempted to advertise in OOC: [msg]")
|
||||
message_admins("[key_name_admin(src)] has attempted to advertise in OOC: [msg]")
|
||||
return
|
||||
|
||||
if((copytext(msg, 1, 2) in list(".",";",":","#")) || (findtext(lowertext(copytext(msg, 1, 5)), "say")))
|
||||
if(alert("Your message \"[msg]\" looks like it was meant for in game communication, say it in OOC?", "Meant for OOC?", "No", "Yes") != "Yes")
|
||||
return
|
||||
|
||||
log_ooc("[mob.name]/[key] : [msg]")
|
||||
|
||||
|
||||
@@ -380,19 +380,6 @@ var/global/floorIsLava = 0
|
||||
onclose(usr, "admincaster_main")
|
||||
|
||||
|
||||
|
||||
/datum/admins/proc/Jobbans()
|
||||
if(!check_rights(R_BAN)) return
|
||||
|
||||
var/dat = "<B>Job Bans!</B><HR><table>"
|
||||
for(var/t in jobban_keylist)
|
||||
var/r = t
|
||||
if( findtext(r,"##") )
|
||||
r = copytext( r, 1, findtext(r,"##") )//removes the description
|
||||
dat += text("<tr><td>[t] (<A href='?src=\ref[src];removejobban=[r]'>unban</A>)</td></tr>")
|
||||
dat += "</table>"
|
||||
usr << browse(dat, "window=ban;size=400x400")
|
||||
|
||||
/datum/admins/proc/Game()
|
||||
if(!check_rights(0)) return
|
||||
|
||||
@@ -695,14 +682,6 @@ var/global/floorIsLava = 0
|
||||
message_admins("<span class='adminnotice'>[key_name_admin(usr)] toggled guests game entering [guests_allowed?"":"dis"]allowed.</span>")
|
||||
feedback_add_details("admin_verb","TGU") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/unjobban_panel()
|
||||
set name = "Unjobban Panel"
|
||||
set category = "Admin"
|
||||
if (src.holder)
|
||||
src.holder.unjobbanpanel()
|
||||
feedback_add_details("admin_verb","UJBP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
return
|
||||
|
||||
/datum/admins/proc/output_ai_laws()
|
||||
var/ai_number = 0
|
||||
for(var/mob/living/silicon/S in mob_list)
|
||||
|
||||
@@ -64,8 +64,6 @@ var/list/admin_verbs_admin = list(
|
||||
)
|
||||
var/list/admin_verbs_ban = list(
|
||||
/client/proc/unban_panel,
|
||||
/client/proc/jobbans,
|
||||
/client/proc/unjobban_panel,
|
||||
/client/proc/DB_ban_panel,
|
||||
/client/proc/stickybanpanel
|
||||
)
|
||||
@@ -372,17 +370,6 @@ var/list/admin_verbs_hideable = list(
|
||||
feedback_add_details("admin_verb","CHA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
return
|
||||
|
||||
/client/proc/jobbans()
|
||||
set name = "Display Job bans"
|
||||
set category = "Admin"
|
||||
if(holder)
|
||||
if(config.ban_legacy_system)
|
||||
holder.Jobbans()
|
||||
else
|
||||
holder.DB_ban_panel()
|
||||
feedback_add_details("admin_verb","VJB") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
return
|
||||
|
||||
/client/proc/unban_panel()
|
||||
set name = "Unban Panel"
|
||||
set category = "Admin"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user