Merge remote-tracking branch 'ParadiseSS13/master' into refactor-shieldgen
@@ -174,6 +174,7 @@
|
||||
"dr" = (/obj/structure/window/reinforced,/obj/machinery/portable_atmospherics/canister/toxins,/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/singularity_engine)
|
||||
"ds" = (/obj/structure/window/reinforced,/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/singularity_engine)
|
||||
"dt" = (/obj/structure/window/reinforced,/turf/simulated/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/singularity_engine)
|
||||
"du" = (/turf/space,/area/syndicate_depot/perimeter)
|
||||
"dv" = (/obj/structure/window/reinforced,/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/singularity_engine)
|
||||
"dw" = (/obj/item/disk/data/demo,/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine)
|
||||
"dx" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine)
|
||||
@@ -273,6 +274,7 @@
|
||||
"fn" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/hallway/primary)
|
||||
"fo" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/hallway/primary)
|
||||
"fp" = (/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary)
|
||||
"fq" = (/obj/effect/landmark{name = "syndi_depot_backup"},/turf/space,/area/syndicate_depot/perimeter)
|
||||
"fr" = (/obj/item/ore/slag,/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine)
|
||||
"fs" = (/obj/item/shard,/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine)
|
||||
"ft" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine)
|
||||
@@ -563,6 +565,7 @@
|
||||
"kS" = (/turf/simulated/wall/r_wall,/area/derelict/bridge/ai_upload)
|
||||
"kT" = (/obj/machinery/door/airlock/command{name = "AI Upload"; req_access_txt = "16"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/ai_upload)
|
||||
"kU" = (/obj/machinery/door/airlock/external{name = "Escape Airlock"},/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary)
|
||||
"kV" = (/turf/space,/area/syndicate_depot/outer)
|
||||
"kW" = (/obj/structure/window/basic{dir = 4},/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary)
|
||||
"kX" = (/obj/structure/window/basic{dir = 8},/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary)
|
||||
"kY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/ai_upload)
|
||||
@@ -616,42 +619,42 @@
|
||||
"lU" = (/obj/structure/table,/obj/item/stock_parts/cell{charge = 100; maxcharge = 15000},/turf/simulated/floor/plasteel/airless,/area/derelict/teleporter)
|
||||
"lV" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/teleporter)
|
||||
"lW" = (/obj/machinery/power/apc/noalarm{dir = 0; name = "Worn-out APC"; pixel_y = -24},/turf/simulated/floor/plasteel/airless,/area/derelict/teleporter)
|
||||
"lX" = (/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot)
|
||||
"lY" = (/turf/simulated/mineral,/area/syndicate_depot)
|
||||
"lZ" = (/obj/structure/lattice,/obj/machinery/porta_turret/syndicate/exterior,/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot)
|
||||
"ma" = (/turf/simulated/mineral/random,/turf/simulated/shuttle/wall{dir = 8; icon_state = "diagonalWall3"},/area/syndicate_depot)
|
||||
"mb" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/syndicate_depot)
|
||||
"mc" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/turf/simulated/shuttle/wall{desc = "This window appears to be reinforced, it looks nearly impossible to break."; icon_state = "window5"; name = "window"; opacity = 0},/area/syndicate_depot)
|
||||
"md" = (/turf/space,/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/syndicate_depot)
|
||||
"me" = (/obj/machinery/door/airlock/hatch{req_access_txt = "150"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
|
||||
"mf" = (/turf/simulated/mineral,/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/syndicate_depot)
|
||||
"mg" = (/turf/simulated/shuttle/wall{dir = 4; icon_state = "wall3"},/area/syndicate_depot)
|
||||
"mh" = (/obj/structure/closet/crate{name = "foot locker"},/obj/item/ammo_box/magazine/m10mm{pixel_x = 4},/obj/item/gun/projectile/automatic/pistol,/obj/item/clothing/head/helmet/swat/syndicate,/obj/item/clothing/glasses/thermal{pixel_x = -3; pixel_y = 3},/obj/item/clothing/shoes/black{pixel_y = -4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
|
||||
"mi" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
|
||||
"mj" = (/obj/structure/stool/bed,/obj/item/bedsheet/red,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
|
||||
"mk" = (/obj/structure/closet/crate{name = "foot locker"},/obj/item/ammo_box/magazine/smgm45{pixel_x = 3},/obj/item/storage/fancy/cigarettes/cigpack_syndicate{pixel_x = -3; pixel_y = -2},/obj/item/lighter/zippo/gonzofist,/obj/item/clothing/under/syndicate{pixel_x = 3; pixel_y = 3},/obj/item/clothing/suit/armor/vest/combat{pixel_x = -3; pixel_y = -3},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
|
||||
"ml" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/turf/unsimulated/wall{desc = "This window appears to be reinforced, it looks nearly impossible to break."; dir = 8; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; name = "window"; opacity = 0; tag = "icon-window5_end (WEST)"},/area/syndicate_depot)
|
||||
"mm" = (/obj/machinery/porta_turret/syndicate/interior,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
|
||||
"mn" = (/obj/item/radio/intercom/syndicate{pixel_x = -28},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
|
||||
"mo" = (/obj/machinery/space_heater,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
|
||||
"mp" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/turf/unsimulated/wall{desc = "This window appears to be reinforced, it looks nearly impossible to break."; dir = 4; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; name = "window"; opacity = 0; tag = "icon-window5 (EAST)"},/area/syndicate_depot)
|
||||
"mq" = (/turf/simulated/mineral,/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/syndicate_depot)
|
||||
"mr" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/syndicate_depot)
|
||||
"ms" = (/obj/machinery/porta_turret/syndicate/interior{density = 0; desc = "Syndicate interior defense turret chambered for .45 rounds and mounted on a wall. Designed to down intruders without damaging the hull."; name = "wall mounted machine gun turret (.45)"; pixel_y = -27},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
|
||||
"mt" = (/obj/structure/table,/obj/item/reagent_containers/food/snacks/syndicake,/obj/item/reagent_containers/food/drinks/cans/beer,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
|
||||
"mu" = (/obj/machinery/porta_turret/syndicate/grenade,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
|
||||
"mv" = (/obj/machinery/porta_turret/syndicate/interior{density = 0; desc = "Syndicate interior defense turret chambered for .45 rounds and mounted on a wall. Designed to down intruders without damaging the hull."; name = "wall mounted machine gun turret (.45)"; pixel_y = 27},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
|
||||
"mw" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/syndicate_depot)
|
||||
"mx" = (/obj/structure/table,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
|
||||
"my" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/engine,/area/syndicate_depot)
|
||||
"mz" = (/turf/simulated/floor/engine,/area/syndicate_depot)
|
||||
"mA" = (/obj/structure/closet/crate{name = "munitions crate"},/obj/item/storage/box/donkpockets,/obj/item/ammo_box/magazine/mm556x45,/obj/item/gun/projectile/automatic/m90,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
|
||||
"mB" = (/obj/machinery/door/window{base_state = "right"; dir = 8; icon_state = "right"; name = "Telepad"; req_access_txt = "0"},/turf/simulated/floor/engine,/area/syndicate_depot)
|
||||
"mC" = (/obj/machinery/telepad,/turf/simulated/floor/engine,/area/syndicate_depot)
|
||||
"mD" = (/obj/structure/closet/crate{name = "munitions crate"},/obj/item/ammo_box/magazine/m12g/dragon,/obj/item/ammo_box/magazine/m12g/dragon,/obj/item/storage/fancy/cigarettes/cigpack_syndicate,/obj/item/storage/firstaid/tactical,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
|
||||
"mE" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
|
||||
"mF" = (/obj/structure/computerframe{anchored = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
|
||||
"mG" = (/turf/simulated/mineral,/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/syndicate_depot)
|
||||
"lX" = (/turf/simulated/mineral,/area/syndicate_depot/outer)
|
||||
"lY" = (/obj/structure/mineral_door/wood,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/outer)
|
||||
"lZ" = (/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot/outer)
|
||||
"ma" = (/obj/structure/spider,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/outer)
|
||||
"mb" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/outer)
|
||||
"mc" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/outer)
|
||||
"md" = (/obj/effect/decal/cleanable/spiderling_remains,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/outer)
|
||||
"me" = (/obj/item/reagent_containers/food/snacks/spiderleg,/obj/structure/spider,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/outer)
|
||||
"mf" = (/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/outer)
|
||||
"mg" = (/obj/effect/landmark{name = "syndi_depot_bot"},/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot/outer)
|
||||
"mh" = (/obj/machinery/navbeacon/invisible{codes_txt = "patrol;next_patrol=SDNW"; invisibility = 100; location = "SDNE"},/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot/outer)
|
||||
"mi" = (/turf/simulated/wall,/area/syndicate_depot/outer)
|
||||
"mj" = (/obj/effect/spawner/random_spawners/syndicate/turret/external,/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot/outer)
|
||||
"mk" = (/obj/machinery/light,/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot/outer)
|
||||
"ml" = (/obj/structure/table,/obj/item/reagent_containers/food/drinks/cans/beer,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/outer)
|
||||
"mm" = (/obj/effect/decal/cleanable/cobweb2,/obj/structure/spider,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/outer)
|
||||
"mn" = (/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
|
||||
"mo" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot/outer)
|
||||
"mp" = (/obj/structure/falsewall,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/outer)
|
||||
"mq" = (/obj/structure/stool/bed,/obj/item/bedsheet/syndie,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"mr" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"ms" = (/obj/structure/table,/obj/structure/reagent_dispensers/beerkeg,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"mt" = (/obj/item/reagent_containers/food/drinks/flask/barflask,/obj/structure/table,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"mu" = (/obj/machinery/light{dir = 1; on = 1},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"mv" = (/obj/machinery/door/poddoor{id_tag = "syndi_depot_lvl2"; name = "Level 2 Blast Doors"; protected = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"mw" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"mx" = (/obj/effect/spawner/random_spawners/syndicate/layout/door,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"my" = (/obj/machinery/door/airlock/hatch/syndicate,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"mz" = (/obj/machinery/light/small,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"mA" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"mB" = (/obj/structure/sign/poster/contraband/syndicate_recruitment,/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
|
||||
"mC" = (/obj/effect/spawner/random_spawners/syndicate/loot,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"mD" = (/obj/machinery/light,/obj/effect/spawner/random_spawners/syndicate/turret,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"mE" = (/obj/structure/sign/poster/contraband/lamarr,/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
|
||||
"mF" = (/obj/machinery/light{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"mG" = (/obj/effect/spawner/random_spawners/syndicate/turret/external,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"mH" = (/turf/simulated/mineral,/area/space)
|
||||
"mI" = (/turf/simulated/floor/plating/airless/asteroid,/area/space)
|
||||
"mJ" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f10"; icon_state = "swall_f10"; dir = 2},/area/space)
|
||||
@@ -663,8 +666,10 @@
|
||||
"mP" = (/obj/structure/closet/crate,/obj/item/ore/bananium,/obj/item/ore/bananium,/obj/item/ore/bananium,/obj/item/ore/bananium,/obj/item/ore/bananium,/turf/simulated/floor/plasteel/airless,/area/space)
|
||||
"mQ" = (/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/obj/item/ore/bananium,/obj/item/grenade/bananade,/turf/simulated/floor/plasteel/airless,/area/space)
|
||||
"mR" = (/obj/structure/shuttle/engine/heater{tag = "icon-heater (EAST)"; icon_state = "heater"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/space)
|
||||
"mS" = (/obj/item/stack/sheet/metal{layer = 4.1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"mT" = (/obj/item/shard{icon_state = "small"},/turf/simulated/floor/plating/airless/asteroid,/area/space)
|
||||
"mU" = (/obj/item/ore/bananium,/turf/simulated/floor/plasteel/airless,/area/space)
|
||||
"mV" = (/obj/machinery/light{dir = 1; on = 1},/obj/item/stack/sheet/metal{layer = 4.1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"mW" = (/obj/structure/computerframe/HONKputer,/turf/simulated/floor/plasteel/airless,/area/space)
|
||||
"mX" = (/obj/item/shard{icon_state = "medium"},/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plating/airless/asteroid,/area/space)
|
||||
"mY" = (/obj/effect/landmark/corpse/clown{name = "Clown Pilot"},/turf/simulated/floor/plasteel/airless,/area/space)
|
||||
@@ -676,7 +681,11 @@
|
||||
"ne" = (/turf/simulated/floor/plasteel/airless,/turf/simulated/shuttle/wall{tag = "icon-swall_f10"; icon_state = "swall_f10"; dir = 2},/area/space)
|
||||
"nf" = (/obj/item/pickaxe,/turf/simulated/floor/plasteel/airless,/area/space)
|
||||
"ng" = (/obj/structure/closet/crate,/obj/item/ore/bananium,/obj/item/ore/bananium,/obj/item/ore/bananium,/obj/item/ore/bananium,/turf/simulated/floor/plasteel/airless,/area/space)
|
||||
"nh" = (/obj/effect/spawner/random_spawners/syndicate/trap/mine,/obj/item/stack/sheet/metal{layer = 4.1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"ni" = (/obj/item/flag/chameleon{icon_state = "syndiflag"; name = "Syndicate Flag"; used = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"nj" = (/obj/machinery/computer/syndicate_depot/teleporter,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"nk" = (/obj/structure/shuttle/engine/heater{tag = "icon-heater (NORTH)"; icon_state = "heater"; dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating/airless,/area/space)
|
||||
"nl" = (/obj/machinery/light{dir = 1; on = 1},/obj/effect/decal/warning_stripes/blue,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"nm" = (/obj/item/shard,/turf/simulated/floor/plasteel/airless,/area/space)
|
||||
"nn" = (/obj/item/broken_bottle,/turf/simulated/floor/plasteel/airless,/area/space)
|
||||
"no" = (/turf/simulated/shuttle/wall{tag = "icon-swall11"; icon_state = "swall11"; dir = 2},/area/space)
|
||||
@@ -687,6 +696,122 @@
|
||||
"nt" = (/obj/item/shard,/turf/simulated/floor/plating/airless/asteroid,/area/space)
|
||||
"nu" = (/turf/simulated/shuttle/wall{icon_state = "swall3"; dir = 2},/area/space)
|
||||
"nv" = (/obj/effect/landmark/corpse/mime{name = "Mime Pilot"},/turf/simulated/floor/plasteel/airless,/area/space)
|
||||
"nw" = (/obj/machinery/bluespace_beacon/syndicate,/obj/effect/decal/warning_stripes/yellow,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"nx" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot/outer)
|
||||
"ny" = (/obj/machinery/navbeacon/invisible{codes_txt = "patrol;next_patrol=SDSW"; invisibility = 100; location = "SDNW"},/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot/outer)
|
||||
"nz" = (/obj/machinery/light{dir = 1; on = 1},/obj/effect/spawner/random_spawners/syndicate/turret,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"nA" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"nB" = (/obj/structure/sign/poster/contraband/fun_police,/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
|
||||
"nC" = (/obj/machinery/door/poddoor/multi_tile/two_tile_hor,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"nD" = (/obj/effect/spawner/random_spawners/syndicate/trap/medbot,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"nE" = (/obj/effect/spawner/random_spawners/syndicate/mob,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"nF" = (/obj/effect/spawner/random_spawners/syndicate/loot/level2,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"nG" = (/obj/item/lighter/zippo/black,/obj/structure/table,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"nH" = (/obj/structure/sign/poster/contraband/lusty_xenomorph,/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
|
||||
"nI" = (/obj/effect/spawner/random_spawners/syndicate/layout/spacepod,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"nJ" = (/obj/machinery/light{dir = 1; on = 1},/obj/effect/spawner/random_spawners/syndicate/loot,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"nK" = (/obj/machinery/light{dir = 1; on = 1},/obj/effect/spawner/random_spawners/syndicate/loot/level2,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"nL" = (/obj/structure/sign/poster/official/high_class_martini,/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
|
||||
"nM" = (/obj/machinery/light{dir = 8},/obj/effect/spawner/random_spawners/syndicate/loot,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"nN" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/effect/spawner/random_spawners/syndicate/loot,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"nO" = (/obj/effect/spawner/random_spawners/syndicate/turret,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"nP" = (/obj/structure/dispenser,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"nQ" = (/obj/structure/sign/poster/official/air1,/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
|
||||
"nR" = (/obj/item/storage/box/donkpockets,/obj/structure/table,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"nS" = (/obj/machinery/computer/syndicate_depot/syndiecomms,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"nT" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"nU" = (/obj/structure/sign/poster/contraband/tools,/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
|
||||
"nV" = (/obj/structure/sign/poster/contraband/hacking_guide,/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
|
||||
"nW" = (/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/officer,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"nX" = (/obj/effect/spawner/random_spawners/syndicate/loot/level3,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"nY" = (/obj/machinery/atmospherics/unary/passive_vent/high_volume,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"nZ" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"oa" = (/obj/machinery/vending/syndisnack,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"ob" = (/obj/machinery/door/airlock/silver,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"oc" = (/obj/structure/closet/secure_closet/syndicate/depot,/obj/effect/spawner/random_spawners/syndicate/trap/documents,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"od" = (/obj/machinery/computer/syndicate_depot/selfdestruct,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"oe" = (/obj/effect/decal/warning_stripes/red,/obj/structure/window/plasmareinforced{dir = 8},/obj/structure/fusionreactor,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"of" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"og" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"oh" = (/obj/structure/table,/obj/effect/spawner/random_spawners/syndicate/trap/pizzabomb,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"oi" = (/obj/structure/table,/obj/item/reagent_containers/food/snacks/syndicake,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"oj" = (/obj/machinery/vending/syndicigs,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"ok" = (/obj/machinery/portable_atmospherics/canister/toxins,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"ol" = (/obj/effect/spawner/random_spawners/syndicate/layout/door/secret,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"om" = (/turf/simulated/floor/mineral/silver,/area/syndicate_depot/core)
|
||||
"on" = (/obj/machinery/door/airlock/plasma{welded = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"oo" = (/turf/simulated/floor/mineral/plasma,/area/syndicate_depot/core)
|
||||
"op" = (/obj/structure/table,/obj/item/wrench,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"oq" = (/obj/structure/table,/obj/item/folder/syndicate/yellow,/obj/item/pen,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"or" = (/obj/effect/landmark{dir = 6; name = "syndi_depot_shield"},/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
|
||||
"os" = (/obj/structure/cable,/obj/machinery/power/terminal,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"ot" = (/obj/effect/spawner/random_spawners/syndicate/layout/door/vault,/obj/effect/landmark{dir = 4; name = "syndi_depot_shield"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"ou" = (/obj/effect/landmark{dir = 4; name = "syndi_depot_shield"},/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
|
||||
"ov" = (/obj/structure/sign/poster/contraband/energy_swords,/obj/effect/landmark{dir = 4; name = "syndi_depot_shield"},/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
|
||||
"ow" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/effect/landmark{dir = 4; name = "syndi_depot_shield"},/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
|
||||
"ox" = (/obj/effect/landmark{dir = 10; name = "syndi_depot_shield"},/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
|
||||
"oy" = (/obj/effect/spawner/random_spawners/syndicate/mob,/turf/simulated/floor/mineral/plasma,/area/syndicate_depot/core)
|
||||
"oz" = (/obj/machinery/light/small{tag = "icon-bulb1 (EAST)"; icon_state = "bulb1"; dir = 4},/turf/simulated/floor/mineral/silver,/area/syndicate_depot/core)
|
||||
"oA" = (/obj/structure/sign/poster/official/state_laws,/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
|
||||
"oB" = (/obj/effect/landmark{name = "syndi_depot_shield"},/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
|
||||
"oC" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/smes/upgraded{charge = 5e+006; input_level = 20000; output_level = 100000},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"oD" = (/obj/effect/decal/warning_stripes/east,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"oE" = (/obj/machinery/turretid/syndicate{name = "internal turret controls"; pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"oF" = (/obj/machinery/light{dir = 1; on = 1},/obj/effect/spawner/random_spawners/syndicate/loot/level4,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"oG" = (/obj/effect/spawner/random_spawners/syndicate/loot/level4,/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"oH" = (/obj/effect/spawner/random_spawners/syndicate/loot/level4,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"oI" = (/obj/machinery/computer/syndicate_depot/aiterminal,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"oJ" = (/obj/structure/mirror{pixel_x = -32},/turf/simulated/floor/mineral/silver,/area/syndicate_depot/core)
|
||||
"oK" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 12; pixel_y = 0},/turf/simulated/floor/mineral/plasma,/area/syndicate_depot/core)
|
||||
"oL" = (/obj/structure/sign/poster/contraband/missing_gloves,/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
|
||||
"oM" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"oN" = (/obj/machinery/atmospherics/unary/passive_vent/high_volume{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"oO" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/effect/spawner/random_spawners/syndicate/layout/door/vault,/obj/effect/landmark{name = "syndi_depot_shield"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"oP" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"oQ" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/armory,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"oR" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"oS" = (/obj/effect/decal/warning_stripes/north,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"oT" = (/obj/effect/decal/warning_stripes/north,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"oU" = (/obj/structure/sign/poster/contraband/revolver,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/effect/landmark{name = "syndi_depot_shield"},/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
|
||||
"oV" = (/obj/machinery/atmospherics/unary/passive_vent/high_volume{dir = 8},/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/officer,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"oW" = (/obj/structure/mirror{pixel_x = -32},/turf/simulated/floor/mineral/plasma,/area/syndicate_depot/core)
|
||||
"oX" = (/obj/structure/toilet{dir = 8},/turf/simulated/floor/mineral/silver,/area/syndicate_depot/core)
|
||||
"oY" = (/obj/machinery/portable_atmospherics/canister/toxins,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"oZ" = (/obj/machinery/light,/obj/effect/spawner/random_spawners/syndicate/loot/level3,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"pa" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"pb" = (/obj/structure/cable,/obj/machinery/power/apc/noalarm{dir = 4; pixel_x = 24; req_access = list(150)},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"pc" = (/obj/machinery/computer/syndicate_depot/shieldcontrol,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"pd" = (/obj/effect/spawner/random_spawners/syndicate/layout/door/vault,/obj/effect/landmark{name = "syndi_depot_shield"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"pe" = (/obj/machinery/light{dir = 1; on = 1},/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot/outer)
|
||||
"pf" = (/obj/structure/sign/poster/official/obey,/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
|
||||
"pg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
|
||||
"ph" = (/obj/effect/landmark{dir = 5; name = "syndi_depot_shield"},/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
|
||||
"pi" = (/obj/structure/sign/poster/contraband/syndicate_pistol,/obj/effect/landmark{dir = 4; name = "syndi_depot_shield"},/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
|
||||
"pj" = (/obj/effect/landmark{dir = 9; name = "syndi_depot_shield"},/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
|
||||
"pk" = (/mob/living/silicon/decoy/syndicate/depot,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"pl" = (/obj/machinery/door_control{active_power_usage = 0; id = "syndi_depot_rear"; idle_power_usage = 0; name = "mysterious button"; normaldoorcontrol = 0; use_power = 0},/obj/structure/sign/poster/contraband/syndicate_recruitment,/turf/simulated/wall,/area/syndicate_depot/core)
|
||||
"pm" = (/turf/simulated/mineral,/area/syndicate_depot/core)
|
||||
"pn" = (/obj/effect/spawner/random_spawners/blood_maybe,/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot/core)
|
||||
"po" = (/obj/machinery/light{dir = 1; on = 1},/obj/effect/spawner/random_spawners/syndicate/turret,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"pp" = (/obj/machinery/light{dir = 1; on = 1},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"pq" = (/obj/machinery/recharge_station,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"pr" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"ps" = (/obj/machinery/door_control{active_power_usage = 0; id = "syndi_depot_rear"; idle_power_usage = 0; name = "mysterious button"; normaldoorcontrol = 0; pixel_x = 24; use_power = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"pt" = (/obj/item/candle,/obj/structure/table,/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot/core)
|
||||
"pu" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot/core)
|
||||
"pv" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"pw" = (/obj/machinery/computer/syndicate_depot/doors,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"px" = (/obj/machinery/atmospherics/unary/passive_vent/high_volume{dir = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"py" = (/obj/machinery/door/poddoor{id_tag = "syndi_depot_rear"; name = "Sealed Doors"; protected = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"pz" = (/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot/core)
|
||||
"pA" = (/obj/structure/falsewall,/turf/simulated/floor/plating/airless,/area/syndicate_depot/core)
|
||||
"pB" = (/obj/machinery/light/small{dir = 8},/obj/effect/spawner/random_spawners/syndicate/loot/level2,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"pC" = (/turf/simulated/wall,/area/syndicate_depot/core)
|
||||
"pD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/light/small,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"pE" = (/obj/machinery/navbeacon/invisible{codes_txt = "patrol;next_patrol=SDSE"; invisibility = 100; location = "SDSW"},/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot/outer)
|
||||
"pF" = (/obj/machinery/light/small{dir = 8},/obj/effect/spawner/random_spawners/syndicate/turret,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
|
||||
"pG" = (/obj/machinery/power/apc/noalarm{dir = 4; pixel_x = 24},/obj/structure/cable,/obj/machinery/turretid/syndicate{name = "external turret controls"; pixel_y = 32},/turf/simulated/floor/plating/airless,/area/syndicate_depot/outer)
|
||||
"pH" = (/obj/machinery/navbeacon/invisible{codes_txt = "patrol;next_patrol=SDNE"; invisibility = 100; location = "SDSE"},/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot/outer)
|
||||
|
||||
(1,1,1) = {"
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
@@ -874,55 +999,6 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalXaaaalXlXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalYlXlXaalXlXlYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalYlYlYlXlXlXlYlYlYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalYlYlYlZlXlZlYlYlYlYmambmcmbmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalYlYmambmembmflYlYlYmgmhmimjmgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalYlYlYmgmimimimglYlYmamgmkmimjmlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalYlYlYmgmmmimmmgmbmbmbmgmnmimompaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalYlYmqmbmembmrmimimimemimsmtmglYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalYlYlYlYmgmimimimimimumgmbmbmbmbmflYlYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalYlYlYlYmgmimimimimimimemimvmwmbmbmbmflYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalYlYlYlYmqmbmbmbmbmbmbmgmnmimimxmymzmglYlYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalYlYlYlYlYlYlYlYlYmqmgmAmimimimBmCmglYlYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalYlYlYlYlYlYlYlYlYmgmDmimEmFmymzmglYlYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalYlYlYlYmqmbmbmbmbmbmbmGlYlYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalYlYlYlYlYlYlYlYlYlYlYlYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalYlYlYlYlYlYlYlYlYlYlYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalYlYlYlYlYlYlYlYlYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalYlYaalYlYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvcvcvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacznknknkmJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamLnnnmncmLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacznonpaznpnqmJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHaaaaaaaamInrnomTnsnsnqmMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHaaaamHmHmHmHmHntnvnumHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmImImHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmImIaaaaczmKmKmLmLmKmKmKmKmJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmIczmKmNmImOazazmPmPmQazmRdlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmTazazazazazmUazmRehaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmHmHmWmXmYazmZmUazmUazmUmRehaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmHnaaznbazncazmOazazazmUmRehaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmHndmKneaznfazazngmPmPazmRhZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmHmHmHndmKmKmLmLmKmKmKmKmMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHaamHmHmHmHmHmImImHmHmHmHmHmHmHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmImImImHmHmHmHmHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHaaaaaaaamImImHmImHmHmImImIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHaaaaaaaaaaaamImHmHmHmHmHmHmIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
@@ -933,6 +1009,55 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadudududududududufqdudududududufqdudududududududududufqdududududududududufqdududududududududududufqdudududududududuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVlXkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVkVkVkVkVkVkVlXlXkVkVkVkVkVkVkVlXkVkVkVkVkVkVkVlXkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVfqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVlXlXkVkVkVkVkVlXlXkVkVlXkVkVkVkVlXlXlXkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafqkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVlXlXlXkVlXlXlXkVkVlXlXlXlXkVlXlXlXlXlXkVlXkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVkVkVkVlXkVkVkVkVkVlXlXlXlXlXlXlXlXlXlXlXlXlXlXlXlXlXlXlXlXlXkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVkVlXlXlXlXlXlYlYlXlXlXlXlXlXlXlXlXlXlXlXlXlXlXlXlZlXlXlXlXlXkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVlXlXmbmamdmcmcmcmfmemalXlXmgmhlZlZlZlZlZlZlZlZlZlZlZlZlZlXlXlXkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvcvcvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVlXlXmimcmcmcmcmcmcmcmdmamilXlZlZmjlZmklZlZlZlZlZmklZmjlZlZlXlXlXlXkVkVkVkVlXkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacznknknkmJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVlXlXlXmimcmcmcmcmcmcmlmcmmmilXlXlXmnmnmnmnmnmnmnmnmnmnmnmolZlZlXlXlXlXkVkVlXlXlXkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamLnnnmncmLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVlXlXlXlXmimpmpmimimimimimimimilXlXlXmnmqmqmqmrmtmsmnmumqmnmvmnlZlZlXlXlXkVkVkVkVlXkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacznonpaznpnqmJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVlXlXlXlXlXlXmcmclXlXlXlXlXlXlXlXlXlXlXmnmwmwmwmwmwmwmxmwmwmymzmnlZlZlXlXlXlXlXkVkVkVlXkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHaaaaaaaamInrnomTnsnsnqmMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVlXlXlZlZmnmnmAmwmnmnmnmnmnmBmnmnmnmnmnmnmCmCmDmwmwmwmnmxmEmnmnmnmjlZlZlXlXlXlXlXkVkVlXkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHaaaamHmHmHmHmHntnvnumHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVlXlXlXmglZmnmwmwmwmFmwmGmnmSmSnhmVmwnimnmnmnmnmnmnmnmxmnmwnlnjnwmnlZlZlZlXlXlXlXlXkVlXlXkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmImImHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafqkVkVkVkVlXlXlZnynxmnmGmzmwmwmwmzmxmwmSmSnhnhmwmxmwmwmwnzmwmwmwmnmwmwnAmwmnmolZlXlXlXkVkVlXlXlXkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVlXlXlXlZlZlZmnmnmnnBnCmwmnmnmwmwmSmnmnmxmnnDmwmwmwnEmwnFmnmwnimwnimnlZlZlXlXkVkVkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmImIaaaaczmKmKmLmLmKmKmKmKmJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVlXlXlXlXlZmjmnmwmwmwmwmwmnmnmnmnmnmnnGmwmnnFnFmwmwmwmwnFmnmymnnHmnmnlZlZlXlXkVkVlXkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmIczmKmNmImOazazmPmPmQazmRdlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVlXlXlXlZlZmnnImwmwmwmwmnmCnJnFmnnKmwmwmnmnnLmnmnmxmnmnmnmwmwnJmCmnlZlZlXlXlXlXlXkVkVkVkVkVkVkVkVkVkVkVfqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmTazazazazazmUazmRehaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVlXlXlZlZmnnMmwmwmwnNmnmwmwmwmxmwmwmwmxmwmwnOmFmwmwmwmxmwmwmwmwmnlZlZlXlXlXkVkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmHmHmWmXmYazmZmUazmUazmUmRehaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVlXlXlZnxnQnPmwmwmwmwmxmwmwnEmnnOmwmwmnmwmwmwmwmwmwnRmnnimrnSmwmnmolZlZlXlXlXkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmHnaaznbazncazmOazazazmUmRehaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVlXlXlXlZlZmnnTnOmwmwnOmnnUmxmnmnmnnVmnmnnWnYnXnZnZmwoamnmnmnmnobmnmjlZlXlXlXlXmilXkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmHndmKneaznfazazngmPmPazmRhZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVlXlXlXlZlZmjmnmnmnmxmnmnmnocmwmFmrodofoemnmwognXoiohmwojolokonomoomnlZlZlXlXlXlZlZlZmikVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmHmHmHndmKmKmLmLmKmKmKmKmMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVlXlXlXlZlZmvmzmymwmwopmnoqmwmwmwmwosorouotowovouoxmxmnmnolmnoyozmnlZlZlXlXlZlZmilZlZkVkVkVlXkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVlXlXlXlZlZmnmnoAmwnEmwmxmwnOmwnWmwoCoBoEoDoGoFoHoBmwmwnzoImnoJoKmnlZlZlXlXmilZlXlZlZkVkVmilXlZkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHaamHmHmHmHmHmImImHmHmHmHmHmHmHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVlXlXlZlZnxmnmCmwmwnNoLmwmwmwoNoMoPoOoRoQoToSoSoUoRoVmwnAmnoWoXmnmolZlXlXlZlZlXlXlZkVkVkVlZlZkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmImImImHmHmHmHmHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVlXlXlZlZlZmnmnmnmxmnmnoYnXoZmwpapboBpcmwogmwmwpdmwmwmwmwmnobmnmnlZlZlXlXlZlXlXlXlZlZkVlXmilXlZkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHaaaaaaaamImImHmImHmHmImImIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVlXlXlXlZlZmjlZpemnmwmwmnpfmnmnmxpgmnphoupiowotoupjnXnXmwpkmnmwnOmnlZlZpmplpnlXlZlZlZlZmilXkVlXkVkVkVkVfqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHaaaaaaaaaaaamImHmHmHmHmHmHmIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafqkVkVkVkVlXlXlXlZlZlZlZlZmnnEmwmFmwmwmnmwpomnoYnXnXppmwpqmnmnmnmxmnmnprpsmnmymnpmptpumilZmilXlZlXlZlZlXkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVlXlXlXlXlXlXlXlZlZmnmnnFpwpvmwmxmwpamxmwmwmwpxnWmwmxmwmFmwnhmxmwmwmymzpypApzpnlXlZlXlZlZlZlXlZlXlXkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVlXlXlXlXlXlXlZlZmnmnmnmnmnmnpBpamnmwmwnOmwmwmwmnnOmwmwmwmBmwmwmnmymnpmpmpClXlZlZlZlXlZlXlZmikVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVlXkVlXlXlXlZmjlZpelZlZlZmnmnpgmnmnmxmnmxmnmnmnmnnFmwmwmnmCmCmnlZlZlXlXlXkVlZlXmilXlZlXlZlXkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVlXlXlXlZlZmglZlZlZlZmvpDmymwmwmnmwnKnFnFmnnFmwnEmnmnmnmnlZlZlXlXlZlXkVkVlZkVlZlZlZkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVlXlXkVlXlXlZpElZlZlZlZmnpgmnpFmwmxnEmwmwmwmxmwmwmwmnlZlZpelZlZlXlXlZlZkVkVkVkVlZlZkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVkVkVlXlXlZlZlZlZmjlZpepGmnmnmnmnmnmnmnmwmnmwmwnOmnlZlZlZlZlZlXlXlZmikVkVkVkVlZkVkVkVkVkVkVkVfqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVkVlXlXlXlXlXlXlZlZlZlZlZlZpelZlZlZlZmnmnmnmnmnmnmnlZlZmglZlXlXlXlZkVkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafqkVkVkVkVkVkVkVkVkVlXlXlXlXlXlXlXlXlXlXlXlXlZlZlZlZlZmjlZlZpelZlZlZpemjpHlZlXlXlXlXkVlXkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVkVlXlXkVkVlXlXlXlXlXlXlXlXlXlXlZlZlZlZlZlZlZlZlZlZlZlZlXlXlXlXlXkVkVlXkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVkVkVlXkVkVkVlXlXlXkVkVlXlXlXlXlXlXlXlXlXlXlXlXlXlXlXlXlXlXlXkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVlXkVkVlXkVkVlXlXlXlXlXlXlXlXlXlXlXlXlXlXlXlXlXlXkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVlXlXlXlXkVkVlXlXlXkVkVlXlXlXkVkVlXkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVlXkVkVkVkVkVkVlXlXkVkVlXlXlXkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVlXlXkVkVkVkVlXkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadududududududududududufqdududududududududufqdudududududududududududududufqdududududududududufqdudududududududududuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
|
||||
@@ -32,11 +32,10 @@
|
||||
#define CANWEAKEN 2
|
||||
#define CANPARALYSE 4
|
||||
#define CANPUSH 8
|
||||
#define LEAPING 16
|
||||
#define PASSEMOTES 32 //Mob has a cortical borer or holders inside of it that need to see emotes.
|
||||
#define GOTTAGOFAST 64
|
||||
#define GOTTAGOREALLYFAST 128
|
||||
#define IGNORESLOWDOWN 256
|
||||
#define PASSEMOTES 16 //Mob has a cortical borer or holders inside of it that need to see emotes.
|
||||
#define GOTTAGOFAST 32
|
||||
#define GOTTAGOREALLYFAST 64
|
||||
#define IGNORESLOWDOWN 128
|
||||
#define GODMODE 4096
|
||||
#define FAKEDEATH 8192 //Replaces stuff like changeling.changeling_fakedeath
|
||||
#define XENO_HOST 16384 //Tracks whether we're gonna be a baby alien's mummy.
|
||||
|
||||
@@ -1,3 +1,15 @@
|
||||
/mob/living/simple_animal/create_mob_hud()
|
||||
hud_used = new /datum/hud/simple_animal(src)
|
||||
|
||||
/datum/hud/simple_animal/New(mob/user)
|
||||
..()
|
||||
var/obj/screen/using
|
||||
using = new /obj/screen/act_intent/simple_animal()
|
||||
using.icon_state = mymob.a_intent
|
||||
static_inventory += using
|
||||
action_intent = using
|
||||
|
||||
|
||||
/mob/living/simple_animal/pet/create_mob_hud()
|
||||
if(client && !hud_used)
|
||||
hud_used = new /datum/hud/corgi(src)
|
||||
|
||||
@@ -71,17 +71,14 @@
|
||||
if(ishuman(usr))
|
||||
var/_x = text2num(params2list(params)["icon-x"])
|
||||
var/_y = text2num(params2list(params)["icon-y"])
|
||||
|
||||
if(_x<=16 && _y<=16)
|
||||
usr.a_intent_change(INTENT_HARM)
|
||||
else if(_x<=16 && _y>=17)
|
||||
usr.a_intent_change(INTENT_HELP)
|
||||
else if(_x>=17 && _y<=16)
|
||||
usr.a_intent_change(INTENT_GRAB)
|
||||
|
||||
else if(_x>=17 && _y>=17)
|
||||
usr.a_intent_change(INTENT_DISARM)
|
||||
|
||||
else
|
||||
usr.a_intent_change("right")
|
||||
|
||||
@@ -97,6 +94,11 @@
|
||||
name = "run/walk toggle"
|
||||
icon_state = "running"
|
||||
|
||||
|
||||
/obj/screen/act_intent/simple_animal
|
||||
icon = 'icons/mob/screen_simplemob.dmi'
|
||||
screen_loc = ui_acti
|
||||
|
||||
/obj/screen/mov_intent/Click()
|
||||
if(iscarbon(usr))
|
||||
var/mob/living/carbon/C = usr
|
||||
|
||||
@@ -172,6 +172,9 @@
|
||||
var/disable_away_missions = 0 // disable away missions
|
||||
var/disable_space_ruins = 0 //disable space ruins
|
||||
|
||||
var/extra_space_ruin_levels_min = 2
|
||||
var/extra_space_ruin_levels_max = 4
|
||||
|
||||
var/ooc_allowed = 1
|
||||
var/looc_allowed = 1
|
||||
var/dooc_allowed = 1
|
||||
@@ -581,6 +584,14 @@
|
||||
if("disable_cid_warn_popup")
|
||||
config.disable_cid_warn_popup = 1
|
||||
|
||||
if("extra_space_ruin_levels_min")
|
||||
var/vvalue = text2num(value)
|
||||
config.extra_space_ruin_levels_min = max(vvalue, 0)
|
||||
|
||||
if("extra_space_ruin_levels_max")
|
||||
var/vvalue = text2num(value)
|
||||
config.extra_space_ruin_levels_max = max(vvalue, 0)
|
||||
|
||||
if("max_loadout_points")
|
||||
config.max_loadout_points = text2num(value)
|
||||
|
||||
|
||||
@@ -46,13 +46,12 @@ var/global/pipe_processing_killed = 0
|
||||
seedRuins(level_name_to_num(EMPTY_AREA), rand(0, 3), /area/space, space_ruins_templates)
|
||||
log_startup_progress("Loaded random space levels in [stop_watch(timer)]s.")
|
||||
|
||||
// We'll keep this around for the time when we finally expunge all
|
||||
// code that checks on hard-defined z positions
|
||||
// load in extra levels of space ruins
|
||||
|
||||
// var/num_extra_space = 6
|
||||
// for(var/i = 1, i <= num_extra_space, i++)
|
||||
// var/zlev = space_manager.add_new_zlevel("[EMPTY_AREA] #[i]", linkage = CROSSLINKED)
|
||||
// seedRuins(zlev, rand(0, 3), /area/space, space_ruins_templates)
|
||||
var/num_extra_space = rand(config.extra_space_ruin_levels_min, config.extra_space_ruin_levels_max)
|
||||
for(var/i = 1, i <= num_extra_space, i++)
|
||||
var/zlev = space_manager.add_new_zlevel("[EMPTY_AREA] #[i]", linkage = CROSSLINKED)
|
||||
seedRuins(zlev, rand(0, 3), /area/space, space_ruins_templates)
|
||||
|
||||
space_manager.do_transition_setup()
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ SUBSYSTEM_DEF(atoms)
|
||||
count = atoms.len
|
||||
for(var/I in atoms)
|
||||
var/atom/A = I
|
||||
if(!A.initialized)
|
||||
if(A && !A.initialized)
|
||||
if(InitAtom(I, mapload_arg))
|
||||
atoms -= I
|
||||
CHECK_TICK
|
||||
|
||||
@@ -37,4 +37,8 @@
|
||||
qdel(C, FALSE, TRUE)
|
||||
dc.Cut()
|
||||
|
||||
return QDEL_HINT_QUEUE
|
||||
return QDEL_HINT_QUEUE
|
||||
|
||||
|
||||
/datum/nothing
|
||||
// Placeholder object, used for ispath checks. Has to be defined to prevent errors, but shouldn't ever be created.
|
||||
@@ -66,7 +66,7 @@
|
||||
chosentype = pick(virspecies)
|
||||
chosensuff = pick(virsuffix)
|
||||
|
||||
name = "[chosentype] [chosensuff]"
|
||||
name = "[initial(chosentype.name)] [chosensuff]"
|
||||
|
||||
/datum/disease/kingstons/advanced/stage_act()
|
||||
..()
|
||||
|
||||
@@ -543,12 +543,6 @@ var/list/ghostteleportlocs = list()
|
||||
name = "\improper Syndicate Infiltrators"
|
||||
icon_state = "syndie-elite"
|
||||
|
||||
/area/syndicate_depot
|
||||
name = "\improper Suspicious Supply Depot"
|
||||
icon_state = "red"
|
||||
tele_proof = 1
|
||||
requires_power = 0
|
||||
|
||||
//EXTRA
|
||||
|
||||
/area/asteroid // -- TLE
|
||||
|
||||
@@ -0,0 +1,430 @@
|
||||
|
||||
/area/syndicate_depot
|
||||
name = "Suspicious Supply Depot"
|
||||
icon_state = "dark"
|
||||
tele_proof = 1
|
||||
|
||||
/area/syndicate_depot/core
|
||||
icon_state = "red"
|
||||
|
||||
var/local_alarm = FALSE // Level 1: Local alarm tripped, bot spawned, red fire overlay activated
|
||||
var/called_backup = FALSE // Level 2: Remote alarm tripped. Bot may path through depot. Backup spawned.
|
||||
var/used_self_destruct = FALSE // Level 3: Self destruct activated. Depot will be destroyed shortly.
|
||||
|
||||
var/run_started = FALSE
|
||||
var/run_finished = FALSE
|
||||
|
||||
// Soft UID-based refs
|
||||
var/list/guard_list = list()
|
||||
var/list/hostile_list = list()
|
||||
var/list/dead_list = list()
|
||||
var/list/peaceful_list = list()
|
||||
var/list/shield_list = list()
|
||||
|
||||
var/list/alert_log = list() // no refs, just a simple list of text strings
|
||||
|
||||
var/used_lockdown = FALSE
|
||||
var/destroyed = FALSE
|
||||
var/something_looted = FALSE
|
||||
var/on_peaceful = FALSE
|
||||
var/peace_betrayed = FALSE
|
||||
var/detected_mech = FALSE
|
||||
var/detected_pod = FALSE
|
||||
var/detected_double_agent = FALSE
|
||||
var/obj/machinery/computer/syndicate_depot/syndiecomms/comms_computer = null
|
||||
var/obj/structure/fusionreactor/reactor
|
||||
|
||||
/area/syndicate_depot/core/updateicon()
|
||||
if(destroyed)
|
||||
icon_state = null
|
||||
invisibility = INVISIBILITY_MAXIMUM
|
||||
else if(on_peaceful)
|
||||
icon_state = "green"
|
||||
invisibility = INVISIBILITY_LIGHTING
|
||||
else if(used_self_destruct)
|
||||
icon_state = "radiation"
|
||||
invisibility = INVISIBILITY_LIGHTING
|
||||
else if(called_backup)
|
||||
icon_state = "red"
|
||||
invisibility = INVISIBILITY_LIGHTING
|
||||
else if(local_alarm)
|
||||
icon_state = "bluenew"
|
||||
invisibility = INVISIBILITY_LIGHTING
|
||||
else
|
||||
icon_state = null
|
||||
invisibility = INVISIBILITY_MAXIMUM
|
||||
|
||||
/area/syndicate_depot/core/proc/reset_alert()
|
||||
|
||||
if(used_self_destruct)
|
||||
return
|
||||
|
||||
local_alarm = FALSE
|
||||
called_backup = FALSE
|
||||
used_self_destruct = FALSE
|
||||
something_looted = FALSE
|
||||
detected_mech = FALSE
|
||||
detected_pod = FALSE
|
||||
detected_double_agent = FALSE
|
||||
updateicon()
|
||||
despawn_guards()
|
||||
|
||||
guard_list = list()
|
||||
hostile_list = list()
|
||||
dead_list = list()
|
||||
peaceful_list = list()
|
||||
|
||||
alert_log += "Alert level reset."
|
||||
|
||||
/area/syndicate_depot/core/proc/increase_alert(reason)
|
||||
if(on_peaceful)
|
||||
peaceful_mode(FALSE, FALSE)
|
||||
peace_betrayed = TRUE
|
||||
activate_self_destruct("Depot has been infiltrated by double-agents.", TRUE, null)
|
||||
return
|
||||
if(!local_alarm)
|
||||
local_alarm(reason, FALSE)
|
||||
return
|
||||
if(!called_backup)
|
||||
call_backup(reason, FALSE)
|
||||
return
|
||||
if(!used_self_destruct)
|
||||
activate_self_destruct(reason, FALSE, null)
|
||||
updateicon()
|
||||
|
||||
/area/syndicate_depot/core/proc/locker_looted()
|
||||
something_looted = TRUE
|
||||
if(on_peaceful)
|
||||
increase_alert("Thieves!")
|
||||
|
||||
/area/syndicate_depot/core/proc/turret_died()
|
||||
something_looted = TRUE
|
||||
if(on_peaceful)
|
||||
increase_alert("Vandals!")
|
||||
|
||||
/area/syndicate_depot/core/proc/saw_mech(obj/mecha/E)
|
||||
if(detected_mech)
|
||||
return
|
||||
detected_mech = TRUE
|
||||
increase_alert("Hostile mecha detected: [E]")
|
||||
|
||||
/area/syndicate_depot/core/proc/saw_pod(obj/spacepod/P)
|
||||
if(detected_pod)
|
||||
return
|
||||
detected_pod = TRUE
|
||||
increase_alert("Hostile spacepod detected: [P]")
|
||||
|
||||
/area/syndicate_depot/core/proc/saw_double_agent(mob/living/M)
|
||||
if(detected_double_agent)
|
||||
return
|
||||
detected_double_agent = TRUE
|
||||
increase_alert("Hostile double-agent detected: [M]")
|
||||
|
||||
/area/syndicate_depot/core/proc/peaceful_mode(newvalue, bycomputer)
|
||||
if(newvalue)
|
||||
log_game("Depot visit: started")
|
||||
alert_log += "Code GREEN: visitor mode started."
|
||||
ghostlog("The syndicate depot has visitors")
|
||||
for(var/mob/living/simple_animal/bot/medbot/syndicate/B in src)
|
||||
qdel(B)
|
||||
for(var/mob/living/simple_animal/hostile/syndicate/N in src)
|
||||
N.a_intent = INTENT_HELP
|
||||
for(var/obj/structure/closet/secure_closet/syndicate/depot/L in src)
|
||||
if(L.opened)
|
||||
L.close()
|
||||
if(!L.locked)
|
||||
L.locked = 1
|
||||
L.req_access = list(access_syndicate_leader)
|
||||
L.update_icon()
|
||||
for(var/obj/machinery/computer/syndicate_depot/teleporter/P in src)
|
||||
if(!P.portal_enabled)
|
||||
P.toggle_portal()
|
||||
for(var/obj/machinery/door/airlock/hatch/syndicate/vault/V in src)
|
||||
if(!V.density)
|
||||
V.close()
|
||||
V.emergency = 0
|
||||
if(!V.locked)
|
||||
V.locked = !V.locked
|
||||
V.update_icon()
|
||||
else
|
||||
log_game("Depot visit: ended")
|
||||
alert_log += "Visitor mode ended."
|
||||
for(var/mob/living/simple_animal/hostile/syndicate/N in src)
|
||||
N.a_intent = INTENT_HARM
|
||||
for(var/obj/machinery/door/airlock/A in src)
|
||||
A.req_access_txt = "[access_syndicate_leader]"
|
||||
for(var/obj/structure/closet/secure_closet/syndicate/depot/L in src)
|
||||
if(L.locked)
|
||||
L.locked = !L.locked
|
||||
L.req_access = list()
|
||||
L.update_icon()
|
||||
on_peaceful = newvalue
|
||||
if(newvalue)
|
||||
announce_here("Depot Visitor","A Syndicate agent is visiting the depot.")
|
||||
else
|
||||
if(bycomputer)
|
||||
message_admins("Syndicate Depot visitor mode deactivated. Visitors:")
|
||||
announce_here("Depot Alert","Visit ended. All visting agents signed out.")
|
||||
else
|
||||
message_admins("Syndicate Depot visitor mode auto-deactivated because visitors robbed depot! Visitors:")
|
||||
announce_here("Depot Alert","A visiting agent has betrayed the Syndicate. Shoot all visitors on sight!")
|
||||
for(var/mob/M in list_getmobs(peaceful_list))
|
||||
if("syndicate" in M.faction)
|
||||
M.faction -= "syndicate"
|
||||
message_admins("- SYNDI DEPOT VISITOR: [ADMIN_FULLMONTY(M)]")
|
||||
list_add(M, hostile_list)
|
||||
peaceful_list = list()
|
||||
updateicon()
|
||||
|
||||
/area/syndicate_depot/core/proc/local_alarm(reason, silent)
|
||||
if(local_alarm)
|
||||
return
|
||||
log_game("Depot code: blue: " + list_show(hostile_list, TRUE))
|
||||
ghostlog("The syndicate depot has declared code blue.")
|
||||
alert_log += "Code BLUE: [reason]"
|
||||
local_alarm = TRUE
|
||||
if(!silent)
|
||||
announce_here("Depot Code BLUE", reason)
|
||||
var/list/possible_bot_spawns = list()
|
||||
for(var/obj/effect/landmark/L in landmarks_list)
|
||||
if(L.name == "syndi_depot_bot")
|
||||
possible_bot_spawns |= L
|
||||
if(possible_bot_spawns.len)
|
||||
var/obj/effect/landmark/S = pick(possible_bot_spawns)
|
||||
new /obj/effect/portal(get_turf(S))
|
||||
var/mob/living/simple_animal/bot/ed209/syndicate/B = new /mob/living/simple_animal/bot/ed209/syndicate(get_turf(S))
|
||||
list_add(B, guard_list)
|
||||
B.depotarea = src
|
||||
updateicon()
|
||||
|
||||
/area/syndicate_depot/core/proc/call_backup(reason, silent)
|
||||
if(called_backup || used_self_destruct)
|
||||
return
|
||||
log_game("Depot code: red: " + list_show(hostile_list, TRUE))
|
||||
ghostlog("The syndicate depot has declared code red.")
|
||||
alert_log += "Code RED: [reason]"
|
||||
called_backup = TRUE
|
||||
lockout_computers()
|
||||
for(var/obj/machinery/door/poddoor/P in airlocks)
|
||||
if(P.density && P.id_tag == "syndi_depot_lvl2" && !P.operating)
|
||||
spawn(0)
|
||||
P.open()
|
||||
if(!silent)
|
||||
announce_here("Depot Code RED", reason)
|
||||
|
||||
var/comms_online = FALSE
|
||||
if(istype(comms_computer))
|
||||
if(!(comms_computer.stat & (NOPOWER|BROKEN)))
|
||||
comms_online = TRUE
|
||||
if(comms_online)
|
||||
spawn(0)
|
||||
for(var/obj/effect/landmark/L in landmarks_list)
|
||||
if(prob(50))
|
||||
if(L.name == "syndi_depot_backup")
|
||||
var/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/space/S = new /mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/space(get_turf(L))
|
||||
S.name = "Syndicate Backup " + "([rand(1, 1000)])"
|
||||
S.depotarea = src
|
||||
list_add(S, guard_list)
|
||||
else if(!silent)
|
||||
announce_here("Depot Communications Offline", "Comms computer is damaged, destroyed or depowered. Unable to call in backup from Syndicate HQ.")
|
||||
updateicon()
|
||||
|
||||
/area/syndicate_depot/core/proc/activate_self_destruct(reason, containment_failure, mob/user)
|
||||
if(used_self_destruct)
|
||||
return
|
||||
log_game("Depot code: delta: " + list_show(hostile_list, TRUE))
|
||||
ghostlog("The syndicate depot is about to self-destruct.")
|
||||
alert_log += "Code DELTA: [reason]"
|
||||
used_self_destruct = TRUE
|
||||
local_alarm = TRUE
|
||||
called_backup = TRUE
|
||||
activate_lockdown(TRUE)
|
||||
lockout_computers()
|
||||
updateicon()
|
||||
despawn_guards()
|
||||
if(containment_failure)
|
||||
announce_here("Depot Code DELTA", reason)
|
||||
else
|
||||
announce_here("Depot Code DELTA","[reason] Depot declared lost to hostile forces. Priming self-destruct!")
|
||||
|
||||
if(user)
|
||||
var/turf/T = get_turf(user)
|
||||
var/area/A = get_area(T)
|
||||
var/log_msg = "[key_name(user)] has armed the depot self destruct device at [A.name] ([T.x],[T.y],[T.z])"
|
||||
message_admins(log_msg)
|
||||
log_game(log_msg)
|
||||
playsound(user, 'sound/machines/Alarm.ogg', 100, 0, 0)
|
||||
else
|
||||
log_game("Depot self destruct activated.")
|
||||
if(reactor)
|
||||
reactor.overload(containment_failure)
|
||||
else
|
||||
message_admins("<span class='adminnotice'>Syndicate Depot lacks reactor to initiate self-destruct. Must be destroyed manually.</span>")
|
||||
updateicon()
|
||||
|
||||
/area/syndicate_depot/core/proc/activate_lockdown()
|
||||
if(used_lockdown)
|
||||
return
|
||||
used_lockdown = TRUE
|
||||
for(var/obj/machinery/door/airlock/A in src)
|
||||
spawn(0)
|
||||
A.close()
|
||||
if(A.density)
|
||||
A.lock()
|
||||
|
||||
/area/syndicate_depot/core/proc/lockout_computers()
|
||||
for(var/obj/machinery/computer/syndicate_depot/C in src)
|
||||
C.activate_security_lockout()
|
||||
|
||||
/area/syndicate_depot/core/proc/toggle_door_locks()
|
||||
for(var/obj/machinery/door/airlock/A in src)
|
||||
A.emergency = !A.emergency
|
||||
if(A.locked)
|
||||
A.locked = !A.locked
|
||||
A.update_icon()
|
||||
|
||||
/area/syndicate_depot/core/proc/toggle_falsewalls()
|
||||
for(var/obj/structure/falsewall/reinforced/F in src)
|
||||
spawn(0)
|
||||
F.toggle()
|
||||
|
||||
/area/syndicate_depot/core/proc/toggle_teleport_beacon()
|
||||
for(var/obj/machinery/bluespace_beacon/syndicate/B in src)
|
||||
return B.toggle()
|
||||
|
||||
/area/syndicate_depot/core/proc/announce_here(a_header = "Depot Defense Alert", a_text = "")
|
||||
var/msg_text = "<font size=4 color='red'>[a_header]</font><br><font color='red'>[a_text]</font>"
|
||||
var/list/receivers = list()
|
||||
for(var/mob/M in mob_list)
|
||||
if(!M.ckey)
|
||||
continue
|
||||
var/turf/T = get_turf(M)
|
||||
if(T.loc != src)
|
||||
continue
|
||||
receivers |= M
|
||||
for(var/mob/R in receivers)
|
||||
to_chat(R, msg_text)
|
||||
R << sound('sound/misc/notice1.ogg')
|
||||
|
||||
/area/syndicate_depot/core/proc/shields_up()
|
||||
if(shield_list.len)
|
||||
return
|
||||
for(var/obj/effect/landmark/L in landmarks_list)
|
||||
if(L.name == "syndi_depot_shield")
|
||||
var/obj/machinery/shieldwall/syndicate/S = new /obj/machinery/shieldwall/syndicate(L.loc)
|
||||
shield_list += S.UID()
|
||||
|
||||
/area/syndicate_depot/core/proc/shields_key_check()
|
||||
if(!shield_list.len)
|
||||
return
|
||||
if(detected_mech || detected_pod || detected_double_agent)
|
||||
return
|
||||
shields_down()
|
||||
|
||||
/area/syndicate_depot/core/proc/shields_down()
|
||||
for(var/shuid in shield_list)
|
||||
var/obj/machinery/shieldwall/syndicate/S = locateUID(shuid)
|
||||
if(S)
|
||||
qdel(S)
|
||||
shield_list = list()
|
||||
|
||||
/area/syndicate_depot/core/proc/despawn_guards()
|
||||
for(var/mob/thismob in list_getmobs(guard_list))
|
||||
new /obj/effect/portal(get_turf(thismob))
|
||||
qdel(thismob)
|
||||
guard_list = list()
|
||||
|
||||
/area/syndicate_depot/core/proc/ghostlog(gmsg)
|
||||
if(istype(reactor))
|
||||
var/image/alert_overlay = image('icons/obj/flag.dmi', "syndiflag")
|
||||
notify_ghosts(gmsg, title = "Depot News", source = reactor, alert_overlay = alert_overlay, action = NOTIFY_JUMP)
|
||||
|
||||
/area/syndicate_depot/core/proc/declare_started()
|
||||
if(!run_started)
|
||||
run_started = TRUE
|
||||
log_game("Depot run: started: " + list_show(hostile_list, TRUE))
|
||||
|
||||
/area/syndicate_depot/core/proc/declare_finished()
|
||||
if(!run_finished && !used_self_destruct)
|
||||
run_finished = TRUE
|
||||
log_game("Depot run: finished successfully: " + list_show(hostile_list, TRUE))
|
||||
|
||||
/area/syndicate_depot/core/proc/list_add(mob/M, list/L)
|
||||
if(!istype(M))
|
||||
return
|
||||
var/mob_uid = M.UID()
|
||||
if(mob_uid in L)
|
||||
return
|
||||
L += mob_uid
|
||||
|
||||
/area/syndicate_depot/core/proc/list_remove(mob/M, list/L)
|
||||
if(!istype(M))
|
||||
return
|
||||
var/mob_uid = M.UID()
|
||||
if(mob_uid in L)
|
||||
L -= mob_uid
|
||||
|
||||
/area/syndicate_depot/core/proc/list_includes(mob/M, list/L)
|
||||
if(!istype(M))
|
||||
return FALSE
|
||||
var/mob_uid = M.UID()
|
||||
if(mob_uid in L)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/area/syndicate_depot/core/proc/list_show(list/L, show_ckeys = FALSE)
|
||||
var/list/formatted = list()
|
||||
for(var/uid in L)
|
||||
var/mob/M = locateUID(uid)
|
||||
if(!istype(M))
|
||||
continue
|
||||
if(show_ckeys)
|
||||
formatted += "[M.ckey]([M])"
|
||||
else
|
||||
formatted += "[M]"
|
||||
return formatted.Join(", ")
|
||||
|
||||
/area/syndicate_depot/core/proc/list_getmobs(list/L, show_ckeys = FALSE)
|
||||
var/list/moblist = list()
|
||||
for(var/uid in L)
|
||||
var/mob/M = locateUID(uid)
|
||||
if(!istype(M))
|
||||
continue
|
||||
moblist += M
|
||||
return moblist
|
||||
|
||||
/area/syndicate_depot/core/proc/list_gethtmlmobs(list/L)
|
||||
var/returntext = ""
|
||||
var/list/moblist = list_getmobs(L)
|
||||
if(moblist.len)
|
||||
returntext += "<UL>"
|
||||
for(var/mob/thismob in moblist)
|
||||
returntext += "<LI>[thismob]</LI>"
|
||||
returntext += "</UL>"
|
||||
else
|
||||
returntext += "<BR>NONE"
|
||||
return returntext
|
||||
|
||||
/area/syndicate_depot/outer
|
||||
name = "Suspicious Asteroid"
|
||||
icon_state = "green"
|
||||
|
||||
/area/syndicate_depot/perimeter
|
||||
name = "Suspicious Asteroid Perimeter"
|
||||
icon_state = "yellow"
|
||||
var/list/shield_list = list()
|
||||
|
||||
/area/syndicate_depot/perimeter/proc/perimeter_shields_up()
|
||||
if(shield_list.len)
|
||||
return
|
||||
for(var/turf/T in src)
|
||||
var/obj/machinery/shieldwall/syndicate/S = new /obj/machinery/shieldwall/syndicate(T)
|
||||
S.alpha = 0
|
||||
shield_list += S.UID()
|
||||
|
||||
/area/syndicate_depot/perimeter/proc/perimeter_shields_down()
|
||||
for(var/shuid in shield_list)
|
||||
var/obj/machinery/shieldwall/syndicate/S = locateUID(shuid)
|
||||
if(S)
|
||||
qdel(S)
|
||||
shield_list = list()
|
||||
@@ -429,3 +429,7 @@
|
||||
|
||||
// And animate the attack!
|
||||
animate(I, alpha = 175, pixel_x = 0, pixel_y = 0, pixel_z = 0, time = 3)
|
||||
|
||||
|
||||
/atom/movable/proc/portal_destroyed(obj/effect/portal/P)
|
||||
return
|
||||
|
||||
@@ -365,6 +365,7 @@
|
||||
var/mob/living/carbon/human/H = target
|
||||
H.visible_message("<span class='warning'>[H]'s skin suddenly bubbles and shifts around [H.p_their()] body!</span>", \
|
||||
"<span class='shadowling'>You regenerate your protective armor and cleanse your form of defects.</span>")
|
||||
H.set_species(/datum/species/shadow/ling)
|
||||
H.adjustCloneLoss(-target.getCloneLoss())
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/shadowling(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/shadowling(H), slot_shoes)
|
||||
@@ -373,7 +374,6 @@
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/gloves/shadowling(H), slot_gloves)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/shadowling(H), slot_wear_mask)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/glasses/shadowling(H), slot_glasses)
|
||||
H.set_species(/datum/species/shadow/ling)
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/collective_mind //Lets a shadowling bring together their thralls' strength, granting new abilities and a headcount
|
||||
name = "Collective Hivemind"
|
||||
|
||||
@@ -84,6 +84,7 @@ var/list/possibleShadowlingNames = list("U'ruan", "Y`shej", "Nex", "Hel-uae", "N
|
||||
H.socks = "None"
|
||||
H.faction |= "faithless"
|
||||
|
||||
H.set_species(/datum/species/shadow/ling) //can't be a shadowling without being a shadowling
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/shadowling(user), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/shadowling(user), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/space/shadowling(user), slot_wear_suit)
|
||||
@@ -91,7 +92,6 @@ var/list/possibleShadowlingNames = list("U'ruan", "Y`shej", "Nex", "Hel-uae", "N
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/gloves/shadowling(user), slot_gloves)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/shadowling(user), slot_wear_mask)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/glasses/shadowling(user), slot_glasses)
|
||||
H.set_species(/datum/species/shadow/ling) //can't be a shadowling without being a shadowling
|
||||
|
||||
H.mind.RemoveSpell(src)
|
||||
|
||||
|
||||
@@ -118,7 +118,7 @@ datum/theft_objective/ai/check_special_completion(var/obj/item/aicard/C)
|
||||
typepath = /obj/item/documents //Any set of secret documents. Doesn't have to be NT's
|
||||
|
||||
/datum/theft_objective/hypospray
|
||||
name = "a hypospray"
|
||||
name = "the Chief Medical Officer's hypospray"
|
||||
typepath = /obj/item/reagent_containers/hypospray/CMO
|
||||
protected_jobs = list("Chief Medical Officer")
|
||||
|
||||
|
||||
@@ -381,7 +381,6 @@
|
||||
shoes = /obj/item/clothing/shoes/black
|
||||
l_ear = /obj/item/radio/headset/headset_service
|
||||
backpack_contents = list(
|
||||
/obj/item/clothing/shoes/black = 1,
|
||||
/obj/item/storage/box/lip_stick = 1,
|
||||
/obj/item/storage/box/barber = 1
|
||||
)
|
||||
|
||||
@@ -10,22 +10,31 @@
|
||||
idle_power_usage = 0
|
||||
var/syndicate = 0
|
||||
var/obj/item/radio/beacon/Beacon
|
||||
var/enabled = TRUE
|
||||
|
||||
/obj/machinery/bluespace_beacon/New()
|
||||
..()
|
||||
create_beacon()
|
||||
|
||||
/obj/machinery/bluespace_beacon/proc/create_beacon()
|
||||
var/turf/T = loc
|
||||
Beacon = new /obj/item/radio/beacon
|
||||
Beacon.invisibility = INVISIBILITY_MAXIMUM
|
||||
Beacon.loc = T
|
||||
Beacon.syndicate = syndicate
|
||||
|
||||
hide(T.intact)
|
||||
|
||||
/obj/machinery/bluespace_beacon/Destroy()
|
||||
/obj/machinery/bluespace_beacon/proc/destroy_beacon()
|
||||
QDEL_NULL(Beacon)
|
||||
|
||||
/obj/machinery/bluespace_beacon/proc/toggle()
|
||||
enabled = !enabled
|
||||
return enabled
|
||||
|
||||
/obj/machinery/bluespace_beacon/Destroy()
|
||||
destroy_beacon()
|
||||
return ..()
|
||||
|
||||
// update the invisibility and icon
|
||||
/obj/machinery/bluespace_beacon/hide(var/intact)
|
||||
invisibility = intact ? 101 : 0
|
||||
update_icon()
|
||||
@@ -33,21 +42,36 @@
|
||||
// update the icon_state
|
||||
/obj/machinery/bluespace_beacon/update_icon()
|
||||
var/state="floor_beacon"
|
||||
|
||||
if(invisibility)
|
||||
icon_state = "[state]f"
|
||||
|
||||
else
|
||||
icon_state = "[state]"
|
||||
|
||||
/obj/machinery/bluespace_beacon/process()
|
||||
if(!Beacon)
|
||||
var/turf/T = loc
|
||||
Beacon = new /obj/item/radio/beacon
|
||||
Beacon.invisibility = INVISIBILITY_MAXIMUM
|
||||
Beacon.loc = T
|
||||
if(Beacon)
|
||||
if(Beacon.loc != loc)
|
||||
Beacon.loc = loc
|
||||
if(enabled)
|
||||
if(Beacon)
|
||||
if(Beacon.loc != loc)
|
||||
Beacon.loc = loc
|
||||
else
|
||||
create_beacon()
|
||||
update_icon()
|
||||
else
|
||||
if(Beacon)
|
||||
destroy_beacon()
|
||||
update_icon()
|
||||
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/bluespace_beacon/syndicate
|
||||
syndicate = TRUE
|
||||
enabled = FALSE
|
||||
var/obj/machinery/computer/syndicate_depot/teleporter/mycomputer
|
||||
|
||||
/obj/machinery/bluespace_beacon/syndicate/New()
|
||||
..()
|
||||
if(!GAMEMODE_IS_NUCLEAR && prob(50))
|
||||
enabled = TRUE
|
||||
|
||||
/obj/machinery/bluespace_beacon/syndicate/Destroy()
|
||||
if(mycomputer)
|
||||
mycomputer.mybeacon = null
|
||||
return ..()
|
||||
@@ -0,0 +1,519 @@
|
||||
|
||||
#define DEPOT_VISITOR_START 1
|
||||
#define DEPOT_VISITOR_END 2
|
||||
#define DEPOT_VISITOR_ADD 3
|
||||
|
||||
|
||||
// Generic parent depot computer type
|
||||
|
||||
/obj/machinery/computer/syndicate_depot
|
||||
name = "depot computer"
|
||||
icon = 'icons/obj/computer.dmi'
|
||||
icon_keyboard = "syndie_key"
|
||||
icon_screen = "tcboss"
|
||||
light_color = LIGHT_COLOR_PURE_CYAN
|
||||
req_access = list(access_syndicate)
|
||||
var/security_lockout = FALSE
|
||||
var/sound_yes = 'sound/machines/twobeep.ogg'
|
||||
var/sound_no = 'sound/machines/buzz-sigh.ogg'
|
||||
var/sound_click = 'sound/machines/click.ogg'
|
||||
var/area/syndicate_depot/core/depotarea
|
||||
var/alerts_when_broken = FALSE
|
||||
var/has_alerted = FALSE
|
||||
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/New()
|
||||
. = ..()
|
||||
depotarea = areaMaster
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/attack_ai(mob/user)
|
||||
if(req_access.len && !("syndicate" in user.faction))
|
||||
to_chat(user, "<span class='warning'>A firewall blocks your access.</span>")
|
||||
return 1
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/emp_act(severity)
|
||||
return
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/emag_act(mob/user)
|
||||
to_chat(user, "<span class='notice'>The electronic systems in this console are far too advanced for your primitive hacking peripherals.</span>")
|
||||
return
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/allowed(mob/user)
|
||||
if(user.can_advanced_admin_interact())
|
||||
return 1
|
||||
if(!isliving(user))
|
||||
return 0
|
||||
if(has_security_lockout(user))
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/proc/has_security_lockout(mob/user)
|
||||
if(security_lockout)
|
||||
playsound(user, 'sound/machines/buzz-sigh.ogg', 50, 0)
|
||||
to_chat(user, "<span class='warning'>[src] is under security lockout.</span>")
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/proc/activate_security_lockout()
|
||||
security_lockout = TRUE
|
||||
disable_special_functions()
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/attack_hand(mob/user)
|
||||
if(..())
|
||||
return
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
if(!allowed(user))
|
||||
to_chat(user, "<span class='warning'>Access Denied.</span>")
|
||||
return
|
||||
user.set_machine(src)
|
||||
var/dat = get_menu(user)
|
||||
user << browse(dat, "window=computer;size=575x450")
|
||||
onclose(user, "computer")
|
||||
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/set_broken()
|
||||
. = ..()
|
||||
if(alerts_when_broken && !has_alerted)
|
||||
has_alerted = TRUE
|
||||
raise_alert("[src] was damaged.")
|
||||
disable_special_functions()
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/proc/disable_special_functions()
|
||||
return
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/Topic(href, href_list)
|
||||
if(..())
|
||||
return 1
|
||||
if((usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon)))
|
||||
usr.set_machine(src)
|
||||
if(href_list["primary"])
|
||||
primary(usr)
|
||||
if(href_list["secondary"])
|
||||
secondary(usr, text2num(href_list["secondary"]))
|
||||
add_fingerprint(usr)
|
||||
updateUsrDialog()
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/Destroy()
|
||||
disable_special_functions()
|
||||
if(alerts_when_broken && !has_alerted)
|
||||
raise_alert("[src] destroyed.")
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/proc/get_menu(mob/user)
|
||||
return ""
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/proc/primary(mob/user)
|
||||
if(!allowed(user))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/proc/secondary(mob/user, subcommand)
|
||||
if(!allowed(user))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/proc/raise_alert(reason)
|
||||
if(depotarea)
|
||||
depotarea.increase_alert(reason)
|
||||
|
||||
|
||||
|
||||
// Door Control Computer
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/doors
|
||||
name = "depot door control computer"
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/doors/get_menu(mob/user)
|
||||
return {"<B>Syndicate Depot Door Control Computer</B><HR>
|
||||
<BR><BR><a href='?src=[UID()];primary=1'>Toggle Airlock Emergency Access</a>
|
||||
<BR><BR><a href='?src=[UID()];secondary=1'>Toggle Hidden Doors</a>
|
||||
<BR>"}
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/doors/primary(mob/user)
|
||||
if(..())
|
||||
return
|
||||
if(depotarea)
|
||||
depotarea.toggle_door_locks(src)
|
||||
to_chat(user, "<span class='notice'>Door locks toggled.</span>")
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/doors/secondary(mob/user, subcommand)
|
||||
if(..())
|
||||
return
|
||||
if(depotarea)
|
||||
depotarea.toggle_falsewalls(src)
|
||||
to_chat(user, "<span class='notice'>False walls toggled.</span>")
|
||||
|
||||
|
||||
// Engineering AKA self destruct computer, no useful functions, just a trap for the people who can't resist pushing dangerous-sounding buttons.
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/selfdestruct
|
||||
name = "reactor control computer"
|
||||
icon_screen = "explosive"
|
||||
req_access = list()
|
||||
alerts_when_broken = TRUE
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/selfdestruct/get_menu(mob/user)
|
||||
var menutext = {"<B>Syndicate Depot Fusion Reactor Control</B><HR>
|
||||
<BR><BR><a href='?src=[UID()];primary=1'>Disable Containment Field</a>
|
||||
<BR>"}
|
||||
return menutext
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/selfdestruct/primary(mob/user)
|
||||
if(..())
|
||||
return
|
||||
if(depotarea.used_self_destruct)
|
||||
playsound(user, sound_no, 50, 0)
|
||||
return
|
||||
playsound(user, sound_click, 20, 1)
|
||||
if(depotarea)
|
||||
depotarea.activate_self_destruct("Fusion reactor containment field disengaged. All hands, evacuate. All hands, evacuate!", TRUE, user)
|
||||
|
||||
|
||||
// Shield computer, used to manipulate base shield, and armory shield
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/shieldcontrol
|
||||
name = "shield control computer"
|
||||
icon_screen = "accelerator"
|
||||
req_access = list(access_syndicate_leader)
|
||||
alerts_when_broken = TRUE
|
||||
var/area/syndicate_depot/perimeter/perimeterarea
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/shieldcontrol/New()
|
||||
. = ..()
|
||||
perimeterarea = locate(/area/syndicate_depot/perimeter)
|
||||
if(istype(perimeterarea) && (GAMEMODE_IS_NUCLEAR || prob(20)))
|
||||
spawn(200)
|
||||
perimeterarea.perimeter_shields_up()
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/shieldcontrol/Destroy()
|
||||
if(istype(perimeterarea) && perimeterarea.shield_list.len)
|
||||
perimeterarea.perimeter_shields_down()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/shieldcontrol/get_menu(mob/user)
|
||||
var menutext = {"<B>Syndicate Depot Shield Grid Control</B><HR>
|
||||
<BR>"}
|
||||
menutext += {"(SYNDI-LEADER) Whole-base Shield: [perimeterarea.shield_list.len ? "ON" : "OFF"] (<a href='?src=[UID()];primary=1'>[perimeterarea.shield_list.len ? "Disable" : "Enable"]</a>)<BR>"}
|
||||
menutext += {"(SYNDI-LEADER) Armory Shield: [depotarea.shield_list.len ? "ON" : "OFF"] (<a href='?src=[UID()];secondary=1'>[depotarea.shield_list.len ? "Disable" : "Enable"]</a>)<BR>"}
|
||||
return menutext
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/shieldcontrol/primary(mob/user)
|
||||
if(..())
|
||||
return
|
||||
if(depotarea.used_self_destruct)
|
||||
playsound(user, sound_no, 50, 0)
|
||||
return
|
||||
if(!istype(perimeterarea))
|
||||
return
|
||||
if(perimeterarea.shield_list.len)
|
||||
perimeterarea.perimeter_shields_down()
|
||||
else
|
||||
perimeterarea.perimeter_shields_up()
|
||||
playsound(user, sound_yes, 50, 0)
|
||||
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/shieldcontrol/secondary(mob/user)
|
||||
if(..())
|
||||
return
|
||||
if(!istype(depotarea))
|
||||
return
|
||||
if(depotarea.shield_list.len)
|
||||
depotarea.shields_down()
|
||||
else
|
||||
depotarea.shields_up()
|
||||
playsound(user, sound_yes, 50, 0)
|
||||
|
||||
|
||||
// Syndicate comms computer, used to activate visitor mode, and message syndicate. Traitor-only use.
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/syndiecomms
|
||||
name = "syndicate communications computer"
|
||||
icon_screen = "syndishuttle"
|
||||
req_access = list()
|
||||
alerts_when_broken = TRUE
|
||||
var/message_sent = FALSE
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/syndiecomms/New()
|
||||
. = ..()
|
||||
if(depotarea)
|
||||
depotarea.comms_computer = src
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/syndiecomms/Destroy()
|
||||
if(depotarea)
|
||||
depotarea.comms_computer = null
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/syndiecomms/get_menu(mob/user)
|
||||
var/menu = "<B>Syndicate Communications Relay</B><HR>"
|
||||
menu += "<BR><BR>One-Time Uplink to Syndicate HQ: [message_sent ? "ALREADY USED" : "AVAILABLE (<a href='?src=[UID()];primary=1'>Open Channel</a>)"]"
|
||||
if(depotarea.on_peaceful)
|
||||
menu += "<BR><BR>Visiting Agents: VISIT IN PROGRESS. "
|
||||
if(depotarea.list_includes(user, depotarea.peaceful_list))
|
||||
menu += "[user] IS RECOGNIZED AS VISITING AGENT"
|
||||
else
|
||||
menu += "[user] NOT RECOGNIZED. (<a href='?src=[UID()];secondary=[DEPOT_VISITOR_ADD]'>Sign-in as Agent</a>)"
|
||||
if(check_rights(R_ADMIN, 0, user))
|
||||
menu += "<BR><BR>ADMIN: (<a href='?src=[UID()];secondary=[DEPOT_VISITOR_END]'>End Visitor Mode</a>)"
|
||||
|
||||
else
|
||||
menu += "<BR><BR>Visiting Agents: NONE (<a href='?src=[UID()];secondary=[DEPOT_VISITOR_START]'>Sign-in as Agent</a>)"
|
||||
return menu
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/syndiecomms/primary(mob/user)
|
||||
if(..())
|
||||
return
|
||||
if(!isliving(user))
|
||||
to_chat(user, "ERROR: No lifesigns detected at terminal, aborting.") // Safety to prevent aghosts accidentally pressing it and getting everyone killed.
|
||||
return
|
||||
if(message_sent)
|
||||
playsound(user, 'sound/machines/buzz-sigh.ogg', 50, 0)
|
||||
to_chat(user, "<span class='warning'>[src] has already been used to transmit a message to the Syndicate.</span>")
|
||||
return
|
||||
message_sent = TRUE
|
||||
if(user.mind && user.mind.special_role == SPECIAL_ROLE_TRAITOR)
|
||||
var/input = stripped_input(user, "Please choose a message to transmit to Syndicate HQ via quantum entanglement. Transmission does not guarantee a response. This function may only be used ONCE.", "To abort, send an empty message.", "") as text|null
|
||||
if(!input)
|
||||
message_sent = FALSE
|
||||
return
|
||||
Syndicate_announce(input, user)
|
||||
to_chat(user, "Message transmitted.")
|
||||
log_say("[key_name(user)] has sent a Syndicate comms message from the depot: [input]", user)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>[src] requires authentication with syndicate codewords, which you do not know.</span>")
|
||||
raise_alert("Detected unauthorized access by [user] to [src]!")
|
||||
updateUsrDialog()
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/syndiecomms/secondary(mob/user, subcommand)
|
||||
if(..())
|
||||
return
|
||||
if(has_security_lockout(user))
|
||||
return
|
||||
if(depotarea)
|
||||
if(depotarea.local_alarm || depotarea.called_backup || depotarea.used_self_destruct)
|
||||
to_chat(user, "<span class='warning'>Visitor sign-in is not possible while the depot is on security alert.</span>")
|
||||
else if(depotarea.on_peaceful)
|
||||
if(subcommand == DEPOT_VISITOR_END)
|
||||
if(check_rights(R_ADMIN, 0, user))
|
||||
depotarea.peaceful_mode(FALSE, TRUE)
|
||||
else if (subcommand == DEPOT_VISITOR_ADD)
|
||||
if(user.mind && user.mind.special_role == SPECIAL_ROLE_TRAITOR)
|
||||
if(depotarea.list_includes(user, depotarea.peaceful_list))
|
||||
to_chat(user, "<span class='warning'>[user] is already signed in as a visiting agent.</span>")
|
||||
else
|
||||
grant_syndie_faction(user)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>Only verified agents of the Syndicate may sign in as visitors. Everyone else will be shot on sight.</span>")
|
||||
else if(subcommand == DEPOT_VISITOR_START)
|
||||
if(depotarea.something_looted)
|
||||
to_chat(user, "<span class='warning'>Visitor sign-in is not possible after supplies have been taken from the depot.</span>")
|
||||
else if(user.mind && user.mind.special_role == SPECIAL_ROLE_TRAITOR)
|
||||
grant_syndie_faction(user)
|
||||
depotarea.peaceful_mode(TRUE, TRUE)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>Only verified agents of the Syndicate may sign in as visitors. Everyone else will be shot on sight.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>Unrecognized subcommand: [subcommand]</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>ERROR: [src] is unable to uplink to depot network.</span>")
|
||||
updateUsrDialog()
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/syndiecomms/proc/grant_syndie_faction(mob/user)
|
||||
user.faction += "syndicate"
|
||||
depotarea.list_add(user, depotarea.peaceful_list)
|
||||
to_chat(user, {"<BR><span class='userdanger'>Welcome, Agent.</span>
|
||||
<span class='warning'>You are now signed-in as a depot visitor.
|
||||
Any other agents with you MUST sign in themselves.
|
||||
You may explore all rooms here, except for bolted ones.
|
||||
Your agent ID will give you access to most doors and computers.
|
||||
Standard Syndicate regulations apply to your visit.
|
||||
This means if ANY of you attack facility staff, break into anything, sabotage the facility, or bring non-agents here, then ALL of you will be summarily executed.
|
||||
Enjoy your stay.</span>
|
||||
"})
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/syndiecomms/power_change()
|
||||
. = ..()
|
||||
if(!security_lockout && (stat & NOPOWER))
|
||||
security_lockout = TRUE
|
||||
raise_alert("[src] lost power.")
|
||||
|
||||
|
||||
// Syndicate teleporter control, used to manage incoming/outgoing teleports
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/teleporter
|
||||
name = "syndicate teleporter console"
|
||||
icon_screen = "telesci"
|
||||
icon_keyboard = "teleport_key"
|
||||
var/obj/machinery/bluespace_beacon/syndicate/mybeacon
|
||||
var/obj/effect/portal/myportal
|
||||
var/portal_enabled = FALSE
|
||||
var/portaldir = WEST
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/teleporter/New()
|
||||
. = ..()
|
||||
spawn(10)
|
||||
findbeacon()
|
||||
choosetarget()
|
||||
update_portal()
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/teleporter/Destroy()
|
||||
if(mybeacon)
|
||||
mybeacon.mycomputer = null
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/teleporter/portal_destroyed(obj/effect/portal/P)
|
||||
myportal = null
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/teleporter/disable_special_functions()
|
||||
if(mybeacon)
|
||||
if(mybeacon.enabled)
|
||||
mybeacon.toggle()
|
||||
if(portal_enabled)
|
||||
portal_enabled = FALSE
|
||||
update_portal()
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/teleporter/proc/findbeacon()
|
||||
if(mybeacon)
|
||||
return TRUE
|
||||
for(var/obj/machinery/bluespace_beacon/syndicate/B in myArea)
|
||||
mybeacon = B
|
||||
B.mycomputer = src
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/teleporter/proc/choosetarget()
|
||||
var/list/eligible_turfs = list()
|
||||
for(var/obj/item/radio/beacon/R in beacons)
|
||||
var/turf/T = get_turf(R)
|
||||
if(!is_station_level(T.z))
|
||||
continue
|
||||
eligible_turfs += T
|
||||
if(eligible_turfs.len)
|
||||
return pick(eligible_turfs)
|
||||
else
|
||||
return FALSE
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/teleporter/proc/update_portal()
|
||||
if(portal_enabled && !myportal)
|
||||
var/turf/tele_target = choosetarget()
|
||||
if(!tele_target)
|
||||
return
|
||||
var/turf/portal_turf = get_step(src, portaldir)
|
||||
var/obj/effect/portal/P = new(portal_turf, tele_target, src, 0)
|
||||
myportal = P
|
||||
P.failchance = 0
|
||||
P.icon_state = "portal1"
|
||||
var/area/A = get_area(tele_target)
|
||||
P.name = "[A] portal"
|
||||
else if(!portal_enabled && myportal)
|
||||
qdel(myportal)
|
||||
myportal = null
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/teleporter/get_menu(mob/user)
|
||||
var/menutext = "<B>Syndicate Teleporter Control</B><HR>"
|
||||
findbeacon()
|
||||
if(mybeacon)
|
||||
menutext += {"<BR><BR>Incoming Teleport Beacon: [mybeacon.enabled ? "ON" : "OFF"] (<a href='?src=[UID()];primary=1'>[mybeacon.enabled ? "Disable" : "Enable"]</a>)<BR>"}
|
||||
else
|
||||
menutext += {"<BR><BR>Incoming Teleport Beacon: Reconnecting to beacon..."}
|
||||
menutext += {"<BR><BR>Outgoing Teleport Portal: [portal_enabled ? "ON" : "OFF"]"}
|
||||
if(check_rights(R_ADMIN, 0, user) || (depotarea.on_peaceful && !portal_enabled))
|
||||
menutext += {" (<a href='?src=[UID()];secondary=1'>[portal_enabled ? "Disable" : "Enable"]</a>)<BR>"}
|
||||
return menutext
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/teleporter/primary(mob/user)
|
||||
if(..())
|
||||
return
|
||||
if(!mybeacon && user)
|
||||
to_chat(user, "<span class='notice'>Unable to connect to teleport beacon.</span>")
|
||||
return
|
||||
var/bresult = mybeacon.toggle()
|
||||
to_chat(user, "<span class='notice'>Syndicate Teleporter Beacon: [bresult ? "<span class='green'>ON</span>" : "<span class='red'>OFF</span>"]</span>")
|
||||
updateUsrDialog()
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/teleporter/secondary(mob/user)
|
||||
if(..())
|
||||
return
|
||||
if(!check_rights(R_ADMIN, 0, user) && !(depotarea.on_peaceful && !portal_enabled))
|
||||
return
|
||||
if(!portal_enabled && myportal)
|
||||
to_chat(user, "<span class='notice'>Outgoing Teleport Portal: deactivating... please wait...</span>")
|
||||
return
|
||||
toggle_portal()
|
||||
to_chat(user, "<span class='notice'>Outgoing Teleport Portal: [portal_enabled ? "<span class='green'>ON</span>" : "<span class='red'>OFF</span>"]</span>")
|
||||
updateUsrDialog()
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/teleporter/proc/toggle_portal()
|
||||
portal_enabled = !portal_enabled
|
||||
update_portal()
|
||||
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/aiterminal
|
||||
name = "syndicate ai terminal"
|
||||
icon_screen = "command"
|
||||
req_access = list()
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/aiterminal/get_menu(mob/user)
|
||||
var/menutext = "<B>Syndicate AI Terminal</B><HR><BR>"
|
||||
if(!istype(depotarea))
|
||||
menutext += "<BR>ERROR: Unable to connect to AI network."
|
||||
return menutext
|
||||
|
||||
if(depotarea.alert_log.len)
|
||||
menutext += "Event Log:<UL>"
|
||||
for(var/thisline in depotarea.alert_log)
|
||||
menutext += "<LI>[thisline]</LI>"
|
||||
menutext += "</UL>"
|
||||
else
|
||||
menutext += "Event Log: EMPTY"
|
||||
menutext += "<BR><BR>"
|
||||
|
||||
menutext += "Terminated Intruders: "
|
||||
menutext += depotarea.list_gethtmlmobs(depotarea.dead_list)
|
||||
menutext += "<BR><BR>"
|
||||
|
||||
menutext += "Extra Security Forces: "
|
||||
menutext += depotarea.list_gethtmlmobs(depotarea.guard_list)
|
||||
menutext += "<BR><BR>"
|
||||
|
||||
menutext += "Visiting Agents: "
|
||||
menutext += depotarea.list_gethtmlmobs(depotarea.peaceful_list)
|
||||
menutext += "<BR><BR>"
|
||||
|
||||
var/has_bot = FALSE
|
||||
for(var/mob/living/simple_animal/bot/ed209/syndicate/B in depotarea.list_getmobs(depotarea.guard_list))
|
||||
has_bot = TRUE
|
||||
if(has_bot)
|
||||
menutext += "<BR><BR>Sentry Bot: (<a href='?src=[UID()];secondary=1'>issue recall order</a>)"
|
||||
else
|
||||
menutext += "<BR><BR>Sentry Bot: (none present)"
|
||||
menutext += "<BR><BR>"
|
||||
|
||||
if(check_rights(R_ADMIN, 0, user))
|
||||
if(depotarea.on_peaceful)
|
||||
menutext += "<BR><BR>ADMIN: (To end visitor mode, use comms console.)"
|
||||
else
|
||||
menutext += "<BR><BR>ADMIN: (<a href='?src=[UID()];primary=1'>Reset Depot Alert Level</a>)"
|
||||
|
||||
return menutext
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/aiterminal/primary(mob/user)
|
||||
if(..())
|
||||
return
|
||||
if(!check_rights(R_ADMIN, 0, user))
|
||||
return
|
||||
if(depotarea)
|
||||
depotarea.reset_alert()
|
||||
to_chat(user, "Alert level reset.")
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/aiterminal/secondary(mob/user)
|
||||
if(..())
|
||||
return
|
||||
for(var/mob/living/simple_animal/bot/ed209/syndicate/B in depotarea.list_getmobs(depotarea.guard_list))
|
||||
depotarea.list_remove(B, depotarea.guard_list)
|
||||
new /obj/effect/portal(get_turf(B))
|
||||
to_chat(user, "[B] has been recalled.")
|
||||
qdel(B)
|
||||
raise_alert("Sentry bot removed via emergency recall.")
|
||||
@@ -13,7 +13,6 @@
|
||||
/obj/machinery/computer/merch/New()
|
||||
..()
|
||||
|
||||
|
||||
/obj/machinery/computer/merch/attack_ai(mob/user as mob)
|
||||
src.add_hiddenprint(user)
|
||||
return attack_hand(user)
|
||||
@@ -43,43 +42,49 @@ html {
|
||||
color:#999;
|
||||
}
|
||||
|
||||
table {background:#303030;border:1px solid #262626;}
|
||||
|
||||
caption {text-align:left;}
|
||||
|
||||
.button {
|
||||
color:#cfcfcf;
|
||||
text-decoration:none;
|
||||
font-weight:bold;
|
||||
text-align:center;
|
||||
width:75px;
|
||||
padding:21px;
|
||||
box-sizing:border-box;
|
||||
background:none;
|
||||
border:none;
|
||||
display: inline-block;
|
||||
}
|
||||
.button:hover {color:#ffffff;}
|
||||
|
||||
a {
|
||||
color:#cfcfcf;
|
||||
text-decoration:none;
|
||||
font-weight:bold;
|
||||
}
|
||||
a:hover {color:#ffffff;}
|
||||
|
||||
a:hover {
|
||||
color:#ffffff;
|
||||
}
|
||||
tr {
|
||||
background:#303030;
|
||||
border-radius:6px;
|
||||
margin-bottom:0.5em;
|
||||
border-bottom:1px solid black;
|
||||
}
|
||||
tr:nth-child(even) {
|
||||
background:#3f3f3f;
|
||||
}
|
||||
p {margin:0;}
|
||||
|
||||
td.cost {
|
||||
font-size:20pt;
|
||||
font-weight:bold;
|
||||
}
|
||||
tr.dark {background:#303030;}
|
||||
|
||||
td.cost.affordable {
|
||||
background:green;
|
||||
}
|
||||
tr.light {background:#3f3f3f;}
|
||||
|
||||
td.cost.toomuch {
|
||||
background:maroon;
|
||||
}
|
||||
td,th {padding:15px;border-bottom:1px solid #262626;}
|
||||
|
||||
th.cost {padding:0px;border-left:1px solid #262626;}
|
||||
|
||||
th.cost.affordable {background:green;}
|
||||
|
||||
th.cost.toomuch {background:maroon;}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<p style="float:right"><a href='byond://?src=[UID()];refresh=1'>Refresh</a> | <b>Balance:</b> $[balance]</p>
|
||||
<p style="float:right"><a href='byond://?src=[UID()];refresh=1'>Refresh</a> | <b>Balance: $[balance]</b></p>
|
||||
<h1>[command_name()] Merchandise</h1>
|
||||
<p>
|
||||
<b>Doing your job and not getting any recognition at work?</b> Well, welcome to the
|
||||
@@ -87,8 +92,9 @@ td.cost.toomuch {
|
||||
completed your Job Objectives.
|
||||
</p>
|
||||
<p>Work hard. Get cash. Acquire bragging rights.</p>
|
||||
<h2>In Stock:</h2>
|
||||
<br>
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<caption><b>In Stock:</b></caption>
|
||||
<thead>
|
||||
<th>#</th>
|
||||
<th>Name/Description</th>
|
||||
@@ -101,8 +107,11 @@ td.cost.toomuch {
|
||||
if(item.cost>balance)
|
||||
cost_class="toomuch"
|
||||
var/itemID=centcomm_store.items.Find(item)
|
||||
var/row_color="light"
|
||||
if(itemID%2 == 0)
|
||||
row_color="dark"
|
||||
dat += {"
|
||||
<tr>
|
||||
<tr class="[row_color]">
|
||||
<th>
|
||||
[itemID]
|
||||
</th>
|
||||
@@ -110,9 +119,9 @@ td.cost.toomuch {
|
||||
<p><b>[item.name]</b></p>
|
||||
<p>[item.desc]</p>
|
||||
</td>
|
||||
<td class="cost [cost_class]">
|
||||
<a href="byond://?src=[UID()];buy=[itemID]">$[item.cost]</a>
|
||||
</td>
|
||||
<th class="cost [cost_class]">
|
||||
<a href="byond://?src=[UID()];buy=[itemID]" class="button">$[item.cost]</a>
|
||||
</th>
|
||||
</tr>
|
||||
"}
|
||||
dat += {"
|
||||
@@ -120,7 +129,7 @@ td.cost.toomuch {
|
||||
</table>
|
||||
</body>
|
||||
</html>"}
|
||||
user << browse(dat, "window=merch")
|
||||
user << browse(dat, "window=merch;size=440x600;can_resize=0")
|
||||
onclose(user, "merch")
|
||||
return
|
||||
|
||||
@@ -142,6 +151,6 @@ td.cost.toomuch {
|
||||
if(!centcomm_store.PlaceOrder(usr,itemID))
|
||||
to_chat(usr, "<span class='warning'>Unable to charge your account.</span>")
|
||||
else
|
||||
to_chat(usr, "<span class='notice'>You've successfully purchased the item. It should be in your hands or on the floor.</span>")
|
||||
to_chat(usr, "<span class='notice'>You've successfully purchased the item. It should be in your hands or on the floor.</span>")
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
|
||||
@@ -329,6 +329,20 @@
|
||||
note_overlay_file = 'icons/obj/doors/airlocks/hatch/overlays.dmi'
|
||||
assemblytype = /obj/structure/door_assembly/door_assembly_hatch
|
||||
|
||||
/obj/machinery/door/airlock/hatch/syndicate
|
||||
name = "syndicate hatch"
|
||||
req_access_txt = "150"
|
||||
|
||||
/obj/machinery/door/airlock/hatch/syndicate/vault
|
||||
name = "syndicate vault hatch"
|
||||
req_access_txt = "151"
|
||||
icon = 'icons/obj/doors/airlocks/vault/vault.dmi'
|
||||
overlays_file = 'icons/obj/doors/airlocks/vault/overlays.dmi'
|
||||
assemblytype = /obj/structure/door_assembly/door_assembly_vault
|
||||
security_level = 6
|
||||
hackProof = TRUE
|
||||
aiControlDisabled = TRUE
|
||||
|
||||
/obj/machinery/door/airlock/hatch/gamma
|
||||
name = "gamma level hatch"
|
||||
hackProof = 1
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
// called when turf state changes
|
||||
// hide the object if turf is intact
|
||||
/obj/machinery/navbeacon/hide(intact)
|
||||
invisibility = intact ? 101 : 0
|
||||
invisibility = intact ? INVISIBILITY_MAXIMUM : SEE_INVISIBLE_MINIMUM
|
||||
updateicon()
|
||||
|
||||
// update the icon_state
|
||||
@@ -214,3 +214,11 @@ Transponder Codes:<UL>"}
|
||||
codes[newkey] = newval
|
||||
|
||||
updateDialog()
|
||||
|
||||
|
||||
/obj/machinery/navbeacon/invisible
|
||||
invisibility = INVISIBILITY_MAXIMUM
|
||||
|
||||
/obj/machinery/navbeacon/invisible/hide(intact)
|
||||
invisibility = INVISIBILITY_MAXIMUM
|
||||
updateicon()
|
||||
@@ -982,6 +982,10 @@ var/list/turret_icons
|
||||
/obj/machinery/porta_turret/syndicate
|
||||
projectile = /obj/item/projectile/bullet
|
||||
eprojectile = /obj/item/projectile/bullet
|
||||
// Syndicate turrets *always* operate in lethal mode.
|
||||
// So, nothing, not even emagging them, makes them switch bullet type.
|
||||
// So, its best to always have their projectile and eprojectile settings be the same. That way, you know what they will shoot.
|
||||
// Otherwise, you end up with situations where one of the two bullet types will never be used.
|
||||
shot_sound = 'sound/weapons/Gunshot.ogg'
|
||||
eshot_sound = 'sound/weapons/Gunshot.ogg'
|
||||
|
||||
@@ -1010,6 +1014,19 @@ var/list/turret_icons
|
||||
check_synth = 1
|
||||
ailock = 1
|
||||
|
||||
/obj/machinery/porta_turret/syndicate/die()
|
||||
. = ..()
|
||||
var/area/syndicate_depot/core/depotarea = areaMaster
|
||||
if(istype(depotarea))
|
||||
depotarea.turret_died()
|
||||
|
||||
/obj/machinery/porta_turret/syndicate/shootAt(mob/living/target)
|
||||
var/area/syndicate_depot/core/depotarea = areaMaster
|
||||
if(istype(depotarea))
|
||||
depotarea.list_add(target, depotarea.hostile_list)
|
||||
depotarea.declare_started()
|
||||
return ..(target)
|
||||
|
||||
/obj/machinery/porta_turret/syndicate/New()
|
||||
..()
|
||||
if(req_one_access && req_one_access.len)
|
||||
@@ -1046,17 +1063,17 @@ var/list/turret_icons
|
||||
name = "machine gun turret (7.62)"
|
||||
desc = "Syndicate exterior defense turret chambered for 7.62 rounds. Designed to down intruders with heavy calliber bullets."
|
||||
projectile = /obj/item/projectile/bullet
|
||||
eprojectile = /obj/item/projectile/bullet/midbullet
|
||||
eprojectile = /obj/item/projectile/bullet
|
||||
|
||||
/obj/machinery/porta_turret/syndicate/grenade
|
||||
name = "mounted grenade launcher (40mm)"
|
||||
desc = "Syndicate 40mm grenade launcher defense turret. If you've had this much time to look at it, you're probably already dead."
|
||||
projectile = /obj/item/projectile/bullet/a40mm
|
||||
eprojectile = /obj/item/projectile/bullet/midbullet
|
||||
eprojectile = /obj/item/projectile/bullet/a40mm
|
||||
|
||||
/obj/machinery/porta_turret/syndicate/assault_pod
|
||||
name = "machine gun turret (4.6x30mm)"
|
||||
desc = "Syndicate exterior defense turret chambered for 4.6x30mm rounds. Designed to be fitted to assault pods, it uses low calliber bullets to save space."
|
||||
health = 100
|
||||
projectile = /obj/item/projectile/bullet/weakbullet3
|
||||
eprojectile = /obj/item/projectile/bullet/midbullet
|
||||
eprojectile = /obj/item/projectile/bullet/weakbullet3
|
||||
|
||||
@@ -614,3 +614,61 @@
|
||||
return prob(10)
|
||||
else
|
||||
return !density
|
||||
|
||||
|
||||
/obj/machinery/shieldwall/syndicate
|
||||
name = "energy shield"
|
||||
desc = "A strange energy shield."
|
||||
icon_state = "shield-red"
|
||||
|
||||
/obj/machinery/shieldwall/syndicate/CanPass(atom/movable/mover, turf/target, height=0)
|
||||
if(isliving(mover))
|
||||
var/mob/living/M = mover
|
||||
if("syndicate" in M.faction)
|
||||
return 1
|
||||
if(istype(mover, /obj/item/projectile))
|
||||
return 0
|
||||
return ..(mover, target, height)
|
||||
|
||||
/obj/machinery/shieldwall/syndicate/CanAStarPass(ID, to_dir, caller)
|
||||
if(isliving(caller))
|
||||
var/mob/living/M = caller
|
||||
if("syndicate" in M.faction)
|
||||
return 1
|
||||
return ..(ID, to_dir, caller)
|
||||
|
||||
/obj/machinery/shieldwall/syndicate/proc/phaseout()
|
||||
// If you're bumping into an invisible shield, make it fully visible, then fade out over a couple of seconds.
|
||||
if(alpha == 0)
|
||||
alpha = 255
|
||||
animate(src, alpha = 10, time = 20, easing = EASE_OUT)
|
||||
spawn(20)
|
||||
alpha = 0
|
||||
|
||||
/obj/machinery/shieldwall/syndicate/Bumped(atom/user)
|
||||
phaseout()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/shieldwall/syndicate/attackby(obj/item/W, mob/user, params)
|
||||
phaseout()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/shieldwall/syndicate/bullet_act(obj/item/projectile/Proj)
|
||||
phaseout()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/shieldwall/syndicate/ex_act(severity)
|
||||
phaseout()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/shieldwall/syndicate/emp_act(severity)
|
||||
phaseout()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/shieldwall/syndicate/attack_hand(mob/user)
|
||||
phaseout()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/shieldwall/syndicate/hitby(AM as mob|obj)
|
||||
phaseout()
|
||||
return ..()
|
||||
|
||||
@@ -56,6 +56,7 @@
|
||||
|
||||
syndicate = 1
|
||||
faction = "syndicate"
|
||||
req_access = list(access_syndicate_leader)
|
||||
|
||||
/obj/machinery/turretid/Destroy()
|
||||
if(control_area)
|
||||
|
||||
@@ -1027,7 +1027,7 @@
|
||||
req_access_txt = "5"
|
||||
products = list(/obj/item/reagent_containers/glass/bottle/charcoal = 4,/obj/item/reagent_containers/glass/bottle/morphine = 4,/obj/item/reagent_containers/glass/bottle/ether = 4,/obj/item/reagent_containers/glass/bottle/epinephrine = 4,
|
||||
/obj/item/reagent_containers/glass/bottle/toxin = 4,/obj/item/reagent_containers/syringe/antiviral = 6,/obj/item/reagent_containers/syringe/insulin = 4,
|
||||
/obj/item/reagent_containers/syringe = 12,/obj/item/healthanalyzer = 5,/obj/item/healthupgrade = 5,/obj/item/reagent_containers/glass/beaker = 4,
|
||||
/obj/item/reagent_containers/syringe = 12,/obj/item/healthanalyzer = 5,/obj/item/healthupgrade = 5,/obj/item/reagent_containers/glass/beaker = 4, /obj/item/reagent_containers/hypospray/safety = 2,
|
||||
/obj/item/reagent_containers/dropper = 2,/obj/item/stack/medical/bruise_pack/advanced = 3, /obj/item/stack/medical/ointment/advanced = 3,
|
||||
/obj/item/stack/medical/bruise_pack = 3,/obj/item/stack/medical/splint = 4, /obj/item/sensor_device = 2, /obj/item/reagent_containers/hypospray/autoinjector = 4,
|
||||
/obj/item/pinpointer/crew = 2)
|
||||
|
||||
@@ -26,12 +26,9 @@
|
||||
|
||||
/obj/effect/portal/Destroy()
|
||||
portals -= src
|
||||
if(istype(creator, /obj/item/hand_tele))
|
||||
var/obj/item/hand_tele/O = creator
|
||||
O.active_portals--
|
||||
else if(istype(creator, /obj/item/gun/energy/wormhole_projector))
|
||||
var/obj/item/gun/energy/wormhole_projector/P = creator
|
||||
P.portal_destroyed(src)
|
||||
if(istype(creator, /obj))
|
||||
var/obj/O = creator
|
||||
O.portal_destroyed(src)
|
||||
creator = null
|
||||
target = null
|
||||
return ..()
|
||||
|
||||
@@ -2,27 +2,36 @@
|
||||
name = "random spawners"
|
||||
icon = 'icons/mob/screen_gen.dmi'
|
||||
icon_state = "x2"
|
||||
color = "#00FF00"
|
||||
var/list/result = list(
|
||||
/turf/simulated/floor/plasteel = 1,
|
||||
/turf/simulated/floor/plating = 1,
|
||||
/obj/effect/decal/cleanable/blood/splatter = 1,
|
||||
/obj/effect/decal/cleanable/blood/oil = 1,
|
||||
/obj/effect/decal/cleanable/fungus = 1)
|
||||
var/spawn_inside = null
|
||||
|
||||
// This needs to come before the initialization wave because
|
||||
// the thing it creates might need to be initialized too
|
||||
/obj/effect/spawner/random_spawners/Initialize()
|
||||
// This needs to use New() instead of Initialize() because the thing it creates might need to be initialized too
|
||||
/obj/effect/spawner/random_spawners/New()
|
||||
. = ..()
|
||||
var/turf/T = get_turf(src)
|
||||
if(!T)
|
||||
log_runtime(EXCEPTION("Spawner placed in nullspace!"), src)
|
||||
return
|
||||
randspawn(T)
|
||||
|
||||
/obj/effect/spawner/random_spawners/proc/randspawn(turf/T)
|
||||
var/thing_to_place = pickweight(result)
|
||||
if(ispath(thing_to_place, /turf))
|
||||
if(ispath(thing_to_place, /datum/nothing))
|
||||
// Nothing.
|
||||
else if(ispath(thing_to_place, /turf))
|
||||
T.ChangeTurf(thing_to_place)
|
||||
else
|
||||
new thing_to_place(T)
|
||||
if(ispath(spawn_inside, /obj))
|
||||
var/obj/O = new thing_to_place(T)
|
||||
var/obj/E = new spawn_inside(T)
|
||||
O.forceMove(E)
|
||||
else
|
||||
new thing_to_place(T)
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/spawner/random_spawners/blood_maybe
|
||||
@@ -108,3 +117,195 @@
|
||||
result = list(
|
||||
/turf/simulated/wall = 1,
|
||||
/obj/effect/decal/cleanable/fungus = 7)
|
||||
|
||||
|
||||
|
||||
// z6 DEPOT SPAWNERS
|
||||
|
||||
/obj/effect/spawner/random_spawners/syndicate
|
||||
|
||||
|
||||
|
||||
// Turrets
|
||||
|
||||
/obj/effect/spawner/random_spawners/syndicate/turret
|
||||
name = "50pc int turret"
|
||||
icon_state = "x"
|
||||
result = list(/datum/nothing = 1,
|
||||
/obj/machinery/porta_turret/syndicate/interior = 1)
|
||||
|
||||
/obj/effect/spawner/random_spawners/syndicate/turret/external
|
||||
name = "50pc ext turret"
|
||||
result = list(/datum/nothing = 1,
|
||||
/obj/machinery/porta_turret/syndicate/exterior = 1)
|
||||
|
||||
|
||||
// Mobs
|
||||
|
||||
/obj/effect/spawner/random_spawners/syndicate/mob
|
||||
name = "50pc melee syndimob"
|
||||
icon_state = "x"
|
||||
color = "#333333"
|
||||
result = list(/datum/nothing = 1,
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot = 1)
|
||||
|
||||
|
||||
// Traps
|
||||
|
||||
/obj/effect/spawner/random_spawners/syndicate/trap
|
||||
icon_state = "x"
|
||||
color = "#000000"
|
||||
|
||||
/obj/effect/spawner/random_spawners/syndicate/trap/pizzabomb
|
||||
name = "50pc trap pizza"
|
||||
result = list(/obj/item/pizzabox/meat = 1,
|
||||
/obj/item/pizza_bomb/autoarm = 1)
|
||||
|
||||
/obj/effect/spawner/random_spawners/syndicate/trap/medbot
|
||||
name = "50pc trap medibot"
|
||||
result = list(/datum/nothing = 1,
|
||||
/mob/living/simple_animal/bot/medbot/syndicate/emagged = 1)
|
||||
|
||||
/obj/effect/spawner/random_spawners/syndicate/trap/mine
|
||||
name = "50pc trap landmine"
|
||||
result = list(/datum/nothing = 1,
|
||||
/obj/effect/mine/explosive = 1)
|
||||
|
||||
/obj/effect/spawner/random_spawners/syndicate/trap/documents
|
||||
name = "66pc trapped documents"
|
||||
result = list(/obj/item/documents/syndicate/yellow = 1,
|
||||
/obj/item/documents/syndicate/yellow/trapped = 1)
|
||||
|
||||
|
||||
|
||||
|
||||
// Loot
|
||||
|
||||
/obj/effect/spawner/random_spawners/syndicate/loot
|
||||
name = "common loot"
|
||||
icon_state = "x3"
|
||||
spawn_inside = /obj/structure/closet/secure_closet/syndicate/depot
|
||||
// Loot schema: costumes, toys, useless gimmick items, trapped items
|
||||
result = list(/datum/nothing = 13,
|
||||
/obj/item/storage/toolbox/syndicate = 1,
|
||||
/obj/item/storage/toolbox/syndicate/trapped = 1,
|
||||
/obj/item/storage/fancy/cigarettes/cigpack_syndicate = 1,
|
||||
/obj/item/toy/cards/deck/syndicate = 1,
|
||||
/obj/item/storage/secure/briefcase/syndie = 1,
|
||||
/obj/item/toy/syndicateballoon = 1,
|
||||
/obj/item/soap/syndie = 1,
|
||||
/obj/item/clothing/under/syndicate = 1,
|
||||
/obj/item/clothing/under/syndicate/tacticool = 1,
|
||||
/obj/item/clothing/mask/gas/syndicate = 1,
|
||||
/obj/item/suppressor = 1,
|
||||
/obj/item/coin/antagtoken/syndicate = 1,
|
||||
/obj/item/storage/box/syndie_kit/cutouts = 1)
|
||||
|
||||
/obj/effect/spawner/random_spawners/syndicate/loot/level2
|
||||
name = "rare loot"
|
||||
// Loot schema: space gear, basic armor, basic ammo (10mm, rcd), drugs, more dangerous/useful gimmick items, lower-value minerals
|
||||
result = list(/datum/nothing = 27,
|
||||
/obj/item/storage/box/syndie_kit/space = 1,
|
||||
/obj/item/storage/box/syndie_kit/hardsuit = 1,
|
||||
/obj/item/clothing/shoes/magboots/syndie = 1,
|
||||
/obj/item/clothing/suit/armor/vest/combat = 1,
|
||||
/obj/item/ammo_box/magazine/m10mm = 1,
|
||||
/obj/item/storage/pill_bottle/happy = 1,
|
||||
/obj/item/storage/pill_bottle/zoom = 1,
|
||||
/obj/item/storage/pill_bottle/random_drug_bottle = 2,
|
||||
/obj/item/storage/backpack/duffel/syndie/surgery = 1,
|
||||
/obj/item/clothing/shoes/syndigaloshes = 1,
|
||||
/obj/item/storage/belt/military = 1,
|
||||
/obj/item/clothing/under/chameleon = 1,
|
||||
/obj/item/storage/backpack/satchel_flat = 1,
|
||||
/obj/item/rcd = 1,
|
||||
/obj/item/rcd_ammo = 1,
|
||||
/obj/item/stamp/chameleon = 1,
|
||||
/obj/item/flag/chameleon = 1,
|
||||
/obj/item/lighter/zippo/gonzofist = 1,
|
||||
/obj/item/clothing/gloves/fingerless/rapid = 1,
|
||||
/obj/item/grenade/spawnergrenade/manhacks = 1,
|
||||
/obj/item/grenade/syndieminibomb = 1,
|
||||
/obj/item/storage/box/syndie_kit/throwing_weapons = 1,
|
||||
/obj/item/pen/edagger = 1,
|
||||
/obj/item/stack/sheet/mineral/plasma{amount = 20} = 1,
|
||||
/obj/item/stack/sheet/mineral/silver{amount = 20} = 1,
|
||||
/obj/item/stack/sheet/mineral/gold{amount = 20} = 1)
|
||||
|
||||
/obj/effect/spawner/random_spawners/syndicate/loot/level3
|
||||
name = "officer loot"
|
||||
// Loot schema: medkits, very useful devices (jammer, illegal upgrade, RCD), better quality ammo (AP, fire), basic weapons (pistol, empgrenade), high value ores (diamond, uranium)
|
||||
result = list(/datum/nothing = 25,
|
||||
/obj/item/jammer = 1,
|
||||
/obj/item/storage/firstaid = 1,
|
||||
/obj/item/storage/box/syndie_kit/bonerepair = 1,
|
||||
/obj/item/gun/projectile/automatic/pistol = 1,
|
||||
/obj/item/stock_parts/cell/bluespace = 1,
|
||||
/obj/item/card/emag = 1,
|
||||
/obj/item/encryptionkey/binary = 1,
|
||||
/obj/item/pinpointer/advpinpointer = 1,
|
||||
/obj/item/borg/upgrade/vtec = 1,
|
||||
/obj/item/borg/upgrade/syndicate = 1,
|
||||
/obj/item/borg/upgrade/selfrepair = 1,
|
||||
/obj/item/stack/sheet/mineral/diamond{amount = 10} = 1,
|
||||
/obj/item/stack/sheet/mineral/uranium{amount = 10} = 1,
|
||||
/obj/item/clothing/shoes/magboots/syndie/advance = 1,
|
||||
/obj/item/grenade/empgrenade = 1,
|
||||
/obj/item/grenade/clown_grenade = 1,
|
||||
/obj/item/grenade/spawnergrenade/feral_cats = 1,
|
||||
/obj/item/ammo_box/magazine/m10mm/ap = 1,
|
||||
/obj/item/ammo_box/magazine/m10mm/fire = 1,
|
||||
/obj/item/ammo_box/magazine/m10mm/hp = 1,
|
||||
/obj/item/rad_laser = 1,
|
||||
/obj/item/storage/box/syndie_kit/emp = 1,
|
||||
/obj/item/batterer = 1,
|
||||
/obj/item/toy/carpplushie/dehy_carp = 1,
|
||||
/obj/item/clothing/glasses/hud/security/chameleon = 1)
|
||||
|
||||
/obj/effect/spawner/random_spawners/syndicate/loot/level4
|
||||
name = "armory loot"
|
||||
// Loot schema: high-power weapons (m90, esword, ebow, revolver), devices that negate depot challenges (thermal glasses, chameleon device), explosives
|
||||
result = list(/obj/item/gun/projectile/automatic/c20r = 1,
|
||||
/obj/item/gun/projectile/automatic/m90 = 1,
|
||||
/obj/item/gun/projectile/automatic/sniper_rifle/syndicate = 1,
|
||||
/obj/item/melee/energy/sword/saber = 1,
|
||||
/obj/item/gun/energy/kinetic_accelerator/crossbow = 1,
|
||||
/obj/item/gun/projectile/revolver = 1,
|
||||
/obj/item/clothing/gloves/color/yellow/power = 1,
|
||||
/obj/item/twohanded/chainsaw = 1,
|
||||
/obj/item/bee_briefcase = 1,
|
||||
/obj/item/twohanded/energizedfireaxe = 1,
|
||||
/obj/item/clothing/glasses/thermal = 1,
|
||||
/obj/item/chameleon = 1,
|
||||
/obj/item/reagent_containers/hypospray/autoinjector/stimulants = 1,
|
||||
/obj/item/storage/box/syndie_kit/atmosgasgrenades = 1,
|
||||
/obj/item/grenade/plastic/x4 = 1)
|
||||
|
||||
|
||||
// Layout-affecting spawns
|
||||
|
||||
/obj/effect/spawner/random_spawners/syndicate/layout
|
||||
icon_state = "x2"
|
||||
|
||||
/obj/effect/spawner/random_spawners/syndicate/layout/door
|
||||
name = "50pc door 25pc falsewall 25pc wall"
|
||||
result = list(/obj/machinery/door/airlock/hatch/syndicate = 6,
|
||||
/turf/simulated/wall/r_wall = 2,
|
||||
/obj/structure/falsewall/reinforced = 2)
|
||||
|
||||
/obj/effect/spawner/random_spawners/syndicate/layout/door/secret
|
||||
name = "50pc falsewall 50pc wall"
|
||||
result = list(/turf/simulated/wall/r_wall = 1,
|
||||
/obj/structure/falsewall/reinforced = 1)
|
||||
|
||||
/obj/effect/spawner/random_spawners/syndicate/layout/door/vault
|
||||
name = "60pc vaultdoor 20pc falsewall 20pc wall"
|
||||
result = list(/obj/machinery/door/airlock/hatch/syndicate/vault = 6,
|
||||
/turf/simulated/wall/r_wall = 2,
|
||||
/obj/structure/falsewall/reinforced = 2)
|
||||
|
||||
|
||||
/obj/effect/spawner/random_spawners/syndicate/layout/spacepod
|
||||
name = "50pc loot spacepod"
|
||||
result = list(/obj/spacepod/syndi = 1,
|
||||
/obj/spacepod/syndi/unlocked = 1)
|
||||
@@ -59,6 +59,7 @@
|
||||
|
||||
/obj/item/megaphone/proc/saymsg(mob/living/user as mob, message)
|
||||
audible_message("<span class='game say'><span class='name'>[user]</span> broadcasts, <span class='reallybig'>\"[message]\"</span></span>", hearing_distance = 14)
|
||||
log_say(message, user)
|
||||
for(var/obj/O in oview(14, get_turf(src)))
|
||||
O.hear_talk(user, "<span class='reallybig'>[message]</span>")
|
||||
|
||||
|
||||
@@ -98,4 +98,8 @@
|
||||
|
||||
/obj/item/pizza_bomb/New()
|
||||
..()
|
||||
correct_wire = pick(wires)
|
||||
correct_wire = pick(wires)
|
||||
|
||||
/obj/item/pizza_bomb/autoarm
|
||||
timer_set = 1
|
||||
timer = 10
|
||||
@@ -54,9 +54,15 @@
|
||||
name = "suspicious beacon"
|
||||
desc = "A label on it reads: <i>Activate to have a singularity beacon teleported to your location</i>."
|
||||
origin_tech = "bluespace=6;syndicate=5"
|
||||
syndicate = 1
|
||||
syndicate = TRUE
|
||||
var/obj/machinery/computer/syndicate_depot/teleporter/mycomputer
|
||||
|
||||
/obj/item/radio/beacon/syndicate/attack_self(mob/user as mob)
|
||||
/obj/item/radio/beacon/syndicate/Destroy()
|
||||
if(mycomputer)
|
||||
mycomputer.mybeacon = null
|
||||
return ..()
|
||||
|
||||
/obj/item/radio/beacon/syndicate/attack_self(mob/user)
|
||||
if(user)
|
||||
to_chat(user, "<span class='notice'>Locked In</span>")
|
||||
new /obj/machinery/power/singularity_beacon/syndicate( user.loc )
|
||||
@@ -69,7 +75,7 @@
|
||||
desc = "A label on it reads: <i>Warning: Activating this device will send a high-ordinance explosive to your location</i>."
|
||||
origin_tech = "bluespace=5;syndicate=5"
|
||||
|
||||
/obj/item/radio/beacon/syndicate/bomb/attack_self(mob/user as mob)
|
||||
/obj/item/radio/beacon/syndicate/bomb/attack_self(mob/user)
|
||||
if(user)
|
||||
to_chat(user, "<span class='notice'>Locked In</span>")
|
||||
new /obj/machinery/syndicatebomb( user.loc )
|
||||
|
||||
@@ -27,3 +27,24 @@
|
||||
name = "'Blue' secret documents"
|
||||
desc = "\"Top Secret\" documents printed on special copy-protected paper. It details sensitive Syndicate operational intelligence. These documents are marked \"Blue\"."
|
||||
icon_state = "docs_blue"
|
||||
|
||||
/obj/item/documents/syndicate/yellow
|
||||
name = "'Yellow' secret documents"
|
||||
desc = "\"Top Secret\" documents printed on special copy-protected paper. It details sensitive Syndicate operational intelligence. These documents are marked \"Yellow\"."
|
||||
icon_state = "docs_yellow"
|
||||
|
||||
/obj/item/documents/syndicate/yellow/trapped
|
||||
desc = "\"Top Secret\" documents printed on special copy-protected paper. It details sensitive Syndicate operational intelligence. These documents are marked \"Yellow\", and have a thin film of clear material covering their surface."
|
||||
var/poison_type = "amanitin"
|
||||
var/poison_dose = 20
|
||||
var/poison_total = 60
|
||||
|
||||
/obj/item/documents/syndicate/yellow/trapped/pickup(user)
|
||||
if(ishuman(user) && poison_total > 0)
|
||||
var/mob/living/carbon/human/H = user
|
||||
var/obj/item/clothing/gloves/G = H.gloves
|
||||
if(!istype(G) || G.transfer_prints)
|
||||
H.reagents.add_reagent(poison_type, poison_dose)
|
||||
poison_total -= poison_dose
|
||||
add_attack_logs(src, user, "Picked up [src], the trapped syndicate documents")
|
||||
..()
|
||||
@@ -362,7 +362,6 @@
|
||||
desc = "Mini-Mecha action figure! Collect them all! 4/11."
|
||||
icon_state = "gygaxtoy"
|
||||
|
||||
|
||||
/obj/item/toy/prize/durand
|
||||
name = "toy durand"
|
||||
desc = "Mini-Mecha action figure! Collect them all! 5/11."
|
||||
@@ -399,18 +398,6 @@
|
||||
icon_state = "phazonprize"
|
||||
|
||||
|
||||
/obj/item/toy/katana
|
||||
name = "replica katana"
|
||||
desc = "Woefully underpowered in D20."
|
||||
icon_state = "katana"
|
||||
item_state = "katana"
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT | SLOT_BACK
|
||||
force = 5
|
||||
throwforce = 5
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced")
|
||||
|
||||
|
||||
/*
|
||||
|| A Deck of Cards for playing various games of chance ||
|
||||
@@ -450,7 +437,7 @@ obj/item/toy/cards/deck
|
||||
obj/item/toy/cards/deck/New()
|
||||
..()
|
||||
icon_state = "deck_[deckstyle]_full"
|
||||
for(var/i = 2; i <= 10; i++)
|
||||
for(var/i in 2 to 10)
|
||||
cards += "[i] of Hearts"
|
||||
cards += "[i] of Spades"
|
||||
cards += "[i] of Clubs"
|
||||
@@ -472,7 +459,6 @@ obj/item/toy/cards/deck/New()
|
||||
cards += "Ace of Clubs"
|
||||
cards += "Ace of Diamonds"
|
||||
|
||||
|
||||
obj/item/toy/cards/deck/attack_hand(mob/user as mob)
|
||||
var/choice = null
|
||||
if(cards.len == 0)
|
||||
@@ -489,12 +475,7 @@ obj/item/toy/cards/deck/attack_hand(mob/user as mob)
|
||||
H.pickup(user)
|
||||
user.put_in_active_hand(H)
|
||||
visible_message("<span class='notice'>[user] draws a card from the deck.</span>", "<span class='notice'>You draw a card from the deck.</span>")
|
||||
if(cards.len > 26)
|
||||
icon_state = "deck_[deckstyle]_full"
|
||||
else if(cards.len > 10)
|
||||
icon_state = "deck_[deckstyle]_half"
|
||||
else if(cards.len > 1)
|
||||
icon_state = "deck_[deckstyle]_low"
|
||||
update_icon()
|
||||
|
||||
obj/item/toy/cards/deck/attack_self(mob/user as mob)
|
||||
if(cooldown < world.time - 50)
|
||||
@@ -515,12 +496,7 @@ obj/item/toy/cards/deck/attackby(obj/item/toy/cards/singlecard/C, mob/living/use
|
||||
qdel(C)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You can't mix cards from other decks.</span>")
|
||||
if(cards.len > 26)
|
||||
icon_state = "deck_[deckstyle]_full"
|
||||
else if(cards.len > 10)
|
||||
icon_state = "deck_[deckstyle]_half"
|
||||
else if(cards.len > 1)
|
||||
icon_state = "deck_[deckstyle]_low"
|
||||
update_icon()
|
||||
|
||||
|
||||
obj/item/toy/cards/deck/attackby(obj/item/toy/cards/cardhand/C, mob/living/user, params)
|
||||
@@ -535,12 +511,7 @@ obj/item/toy/cards/deck/attackby(obj/item/toy/cards/cardhand/C, mob/living/user,
|
||||
qdel(C)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You can't mix cards from other decks.</span>")
|
||||
if(cards.len > 26)
|
||||
icon_state = "deck_[deckstyle]_full"
|
||||
else if(cards.len > 10)
|
||||
icon_state = "deck_[deckstyle]_half"
|
||||
else if(cards.len > 1)
|
||||
icon_state = "deck_[deckstyle]_low"
|
||||
update_icon()
|
||||
|
||||
obj/item/toy/cards/deck/MouseDrop(atom/over_object)
|
||||
var/mob/M = usr
|
||||
@@ -566,7 +537,16 @@ obj/item/toy/cards/deck/MouseDrop(atom/over_object)
|
||||
else
|
||||
to_chat(usr, "<span class='notice'>You can't reach it from here.</span>")
|
||||
|
||||
|
||||
obj/item/toy/cards/deck/update_icon()
|
||||
switch(cards.len)
|
||||
if(0)
|
||||
icon_state = "deck_[deckstyle]_empty"
|
||||
if(1 to 10)
|
||||
icon_state = "deck_[deckstyle]_low"
|
||||
if(11 to 26)
|
||||
icon_state = "deck_[deckstyle]_half"
|
||||
else
|
||||
icon_state = "deck_[deckstyle]_full"
|
||||
|
||||
obj/item/toy/cards/cardhand
|
||||
name = "hand of cards"
|
||||
@@ -613,12 +593,7 @@ obj/item/toy/cards/cardhand/Topic(href, href_list)
|
||||
cardUser.visible_message("<span class='notice'>[cardUser] draws a card from [cardUser.p_their()] hand.</span>", "<span class='notice'>You take the [C.cardname] from your hand.</span>")
|
||||
|
||||
interact(cardUser)
|
||||
if(currenthand.len < 3)
|
||||
icon_state = "[deckstyle]_hand2"
|
||||
else if(src.currenthand.len < 4)
|
||||
icon_state = "[deckstyle]_hand3"
|
||||
else if(src.currenthand.len < 5)
|
||||
icon_state = "[deckstyle]_hand4"
|
||||
update_icon()
|
||||
if(currenthand.len == 1)
|
||||
var/obj/item/toy/cards/singlecard/N = new/obj/item/toy/cards/singlecard(src.loc)
|
||||
N.parentdeck = src.parentdeck
|
||||
@@ -639,12 +614,7 @@ obj/item/toy/cards/cardhand/attackby(obj/item/toy/cards/singlecard/C, mob/living
|
||||
user.unEquip(C)
|
||||
user.visible_message("<span class='notice'>[user] adds a card to [user.p_their()] hand.</span>", "<span class='notice'>You add the [C.cardname] to your hand.</span>")
|
||||
interact(user)
|
||||
if(currenthand.len > 4)
|
||||
icon_state = "[deckstyle]_hand5"
|
||||
else if(currenthand.len > 3)
|
||||
icon_state = "[deckstyle]_hand4"
|
||||
else if(currenthand.len > 2)
|
||||
icon_state = "[deckstyle]_hand3"
|
||||
update_icon()
|
||||
qdel(C)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You can't mix cards from other decks.</span>")
|
||||
@@ -697,7 +667,7 @@ obj/item/toy/cards/singlecard/verb/Flip()
|
||||
icon_state = "sc_Ace of Spades_[deckstyle]"
|
||||
name = "What Card"
|
||||
pixel_x = 5
|
||||
else if(flipped)
|
||||
else
|
||||
flipped = 0
|
||||
icon_state = "singlecard_down_[deckstyle]"
|
||||
name = "card"
|
||||
@@ -728,16 +698,24 @@ obj/item/toy/cards/singlecard/attackby(obj/item/I, mob/living/user, params)
|
||||
user.unEquip(src)
|
||||
user.visible_message("<span class='notice'>[user] adds a card to [user.p_their()] hand.</span>", "<span class='notice'>You add the [cardname] to your hand.</span>")
|
||||
H.interact(user)
|
||||
if(H.currenthand.len > 4)
|
||||
H.icon_state = "[deckstyle]_hand5"
|
||||
else if(H.currenthand.len > 3)
|
||||
H.icon_state = "[deckstyle]_hand4"
|
||||
else if(H.currenthand.len > 2)
|
||||
H.icon_state = "[deckstyle]_hand3"
|
||||
H.update_icon()
|
||||
qdel(src)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You can't mix cards from other decks.</span>")
|
||||
|
||||
obj/item/toy/cards/cardhand/update_icon()
|
||||
switch(currenthand.len)
|
||||
if(0 to 1)
|
||||
return
|
||||
if(2)
|
||||
icon_state = "[deckstyle]_hand2"
|
||||
if(3)
|
||||
icon_state = "[deckstyle]_hand3"
|
||||
if(4)
|
||||
icon_state = "[deckstyle]_hand4"
|
||||
else
|
||||
icon_state = "[deckstyle]_hand5"
|
||||
|
||||
|
||||
obj/item/toy/cards/singlecard/attack_self(mob/user)
|
||||
if(usr.stat || !ishuman(usr) || !usr.canmove || usr.restrained())
|
||||
@@ -813,10 +791,12 @@ obj/item/toy/cards/deck/syndicate/black
|
||||
/obj/item/toy/therapy
|
||||
name = "therapy doll"
|
||||
desc = "A toy for therapeutic and recreational purposes."
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "therapyred"
|
||||
item_state = "egg4"
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
var/cooldown = 0
|
||||
burn_state = FLAMMABLE
|
||||
|
||||
/obj/item/toy/therapy/New()
|
||||
if(item_color)
|
||||
@@ -836,7 +816,7 @@ obj/item/toy/cards/deck/syndicate/black
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "therapyred"
|
||||
|
||||
/obj/random/prize/item_to_spawn()
|
||||
/obj/random/therapy/item_to_spawn()
|
||||
return pick(subtypesof(/obj/item/toy/therapy)) //exclude the base type.
|
||||
|
||||
/obj/item/toy/therapy/red
|
||||
|
||||
@@ -159,6 +159,10 @@
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/assembly/mousetrap)
|
||||
|
||||
/obj/item/grenade/chem_grenade/explosion/mine_armed/New()
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/assembly/mousetrap/armed)
|
||||
|
||||
|
||||
// Water + Potassium = Boom
|
||||
|
||||
@@ -198,6 +202,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
// Basic EMP grenade
|
||||
/obj/item/grenade/chem_grenade/emp
|
||||
payload_name = "EMP"
|
||||
|
||||
@@ -86,6 +86,16 @@
|
||||
new /obj/item/multitool(src)
|
||||
new /obj/item/clothing/gloves/combat(src)
|
||||
|
||||
|
||||
/obj/item/storage/toolbox/syndicate/trapped
|
||||
name = "suspicious looking toolbox"
|
||||
desc = "Danger. Very robust. Has a small red marker by the handle."
|
||||
|
||||
/obj/item/storage/toolbox/syndicate/trapped/New()
|
||||
..()
|
||||
new /obj/item/grenade/chem_grenade/explosion/mine_armed(src)
|
||||
|
||||
|
||||
/obj/item/storage/toolbox/drone
|
||||
name = "mechanical toolbox"
|
||||
icon_state = "blue"
|
||||
|
||||
@@ -141,3 +141,6 @@ Frequency:
|
||||
active_portals++
|
||||
add_fingerprint(user)
|
||||
return
|
||||
|
||||
/obj/item/hand_tele/portal_destroyed(obj/effect/portal/P)
|
||||
active_portals--
|
||||
@@ -121,26 +121,25 @@
|
||||
if(!(opened ? close() : open()))
|
||||
to_chat(user, "<span class='notice'>It won't budge!</span>")
|
||||
|
||||
// this should probably use dump_contents()
|
||||
/obj/structure/closet/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1)
|
||||
for(var/atom/movable/A in src)//pulls everything out of the locker and hits it with an explosion
|
||||
A.forceMove(loc)
|
||||
A.ex_act(severity++)
|
||||
dump_contents()
|
||||
qdel(src)
|
||||
if(2)
|
||||
if(prob(50))
|
||||
for(var/atom/movable/A in src)
|
||||
A.forceMove(loc)
|
||||
A.ex_act(severity++)
|
||||
dump_contents()
|
||||
new /obj/item/stack/sheet/metal(loc)
|
||||
qdel(src)
|
||||
if(3)
|
||||
if(prob(5))
|
||||
for(var/atom/movable/A in src)
|
||||
A.forceMove(loc)
|
||||
A.ex_act(severity++)
|
||||
dump_contents()
|
||||
new /obj/item/stack/sheet/metal(loc)
|
||||
qdel(src)
|
||||
|
||||
@@ -149,23 +148,20 @@
|
||||
if((Proj.damage_type == BRUTE || Proj.damage_type == BURN))
|
||||
health -= Proj.damage
|
||||
if(health <= 0)
|
||||
for(var/atom/movable/A in src)
|
||||
A.forceMove(loc)
|
||||
dump_contents()
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/closet/attack_animal(mob/living/simple_animal/user)
|
||||
if(user.environment_smash)
|
||||
user.do_attack_animation(src)
|
||||
visible_message("<span class='warning'>[user] destroys the [src].</span>")
|
||||
for(var/atom/movable/A in src)
|
||||
A.forceMove(loc)
|
||||
dump_contents()
|
||||
qdel(src)
|
||||
|
||||
// this should probably use dump_contents()
|
||||
/obj/structure/closet/blob_act()
|
||||
if(prob(75))
|
||||
for(var/atom/movable/A in src)
|
||||
A.forceMove(loc)
|
||||
dump_contents()
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/closet/attackby(obj/item/W, mob/user, params)
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
|
||||
/obj/structure/closet/secure_closet/syndicate/depot
|
||||
name = "depot supply closet"
|
||||
desc = ""
|
||||
locked = 0
|
||||
anchored = 1
|
||||
health = 200
|
||||
req_access = list()
|
||||
|
||||
|
||||
/obj/structure/closet/secure_closet/syndicate/depot/New()
|
||||
. = ..()
|
||||
update_icon()
|
||||
|
||||
/obj/structure/closet/secure_closet/syndicate/depot/emag_act()
|
||||
. = ..()
|
||||
loot_pickup()
|
||||
|
||||
/obj/structure/closet/secure_closet/syndicate/depot/open()
|
||||
. = ..()
|
||||
if(opened)
|
||||
loot_pickup()
|
||||
|
||||
/obj/structure/closet/secure_closet/syndicate/depot/dump_contents()
|
||||
loot_pickup()
|
||||
. = ..()
|
||||
|
||||
/obj/structure/closet/secure_closet/syndicate/depot/proc/loot_pickup()
|
||||
var/area/syndicate_depot/core/depotarea = areaMaster
|
||||
if(depotarea)
|
||||
depotarea.locker_looted()
|
||||
|
||||
/obj/structure/closet/secure_closet/syndicate/depot/attack_animal(mob/M)
|
||||
if(isanimal(M) && "syndicate" in M.faction)
|
||||
to_chat(M, "<span class='warning'>The [src] resists your attack!</span>")
|
||||
return
|
||||
return ..(M)
|
||||
|
||||
/obj/structure/closet/secure_closet/syndicate/depot/emp_act(severity)
|
||||
return
|
||||
|
||||
/obj/structure/closet/secure_closet/syndicate/depot/togglelock(mob/user)
|
||||
. = ..()
|
||||
if(!locked)
|
||||
loot_pickup()
|
||||
@@ -0,0 +1,106 @@
|
||||
|
||||
/obj/structure/fusionreactor
|
||||
name = "syndicate fusion reactor"
|
||||
desc = ""
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "powersink1"
|
||||
anchored = 1
|
||||
max_integrity = 50
|
||||
var/area/syndicate_depot/core/depotarea
|
||||
|
||||
/obj/structure/fusionreactor/Initialize()
|
||||
. = ..()
|
||||
depotarea = areaMaster
|
||||
if(depotarea)
|
||||
depotarea.reactor = src
|
||||
|
||||
/obj/structure/fusionreactor/Destroy()
|
||||
if(depotarea)
|
||||
depotarea.reactor = null
|
||||
..()
|
||||
|
||||
/obj/structure/fusionreactor/ex_act(severity)
|
||||
if(severity < 3)
|
||||
obj_integrity = 0
|
||||
healthcheck()
|
||||
|
||||
/obj/structure/fusionreactor/bullet_act(obj/item/projectile/Proj)
|
||||
obj_integrity -= Proj.damage
|
||||
..()
|
||||
healthcheck()
|
||||
|
||||
/obj/structure/fusionreactor/proc/healthcheck()
|
||||
if(obj_integrity <= 0)
|
||||
overload(TRUE)
|
||||
|
||||
/obj/structure/fusionreactor/attackby(obj/item/I, mob/user, params)
|
||||
if(iswrench(I))
|
||||
playsound(loc, I.usesound, 50, 1)
|
||||
to_chat(user, "<span class='notice'>The [src] is too well secured to the floor.</span>")
|
||||
else if(isscrewdriver(I))
|
||||
to_chat(user, "<span class='notice'>You try to screwdriver open [src], but accidentally release some radiation!</span>")
|
||||
if(prob(50))
|
||||
empulse(src, 4, 10)
|
||||
else
|
||||
for(var/mob/living/M in range(10, loc))
|
||||
M.apply_effect(rand(5, 25), IRRADIATE)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/structure/fusionreactor/proc/overload(containment_failure)
|
||||
var/obj/effect/overload/O = new /obj/effect/overload(get_turf(src))
|
||||
if(containment_failure)
|
||||
playsound(loc, 'sound/machines/Alarm.ogg', 100, 0, 0)
|
||||
O.deliberate = TRUE
|
||||
O.max_cycles = 6
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/overload
|
||||
icon = 'icons/obj/tesla_engine/energy_ball.dmi'
|
||||
icon_state = "energy_ball"
|
||||
pixel_x = -32
|
||||
pixel_y = -32
|
||||
anchored = 1
|
||||
var/cycles = 0
|
||||
var/beepsound = 'sound/items/timer.ogg'
|
||||
var/deliberate = FALSE
|
||||
var/max_cycles = 10
|
||||
var/max_fire_range = 9
|
||||
var/area/syndicate_depot/core/depotarea
|
||||
|
||||
/obj/effect/overload/Initialize()
|
||||
. = ..()
|
||||
processing_objects.Add(src)
|
||||
depotarea = areaMaster
|
||||
if(istype(depotarea))
|
||||
if(!depotarea.used_self_destruct)
|
||||
depotarea.used_self_destruct = TRUE // Silences all further alerts from this point onwards.
|
||||
depotarea.updateicon()
|
||||
depotarea.shields_down()
|
||||
|
||||
/obj/effect/overload/process()
|
||||
var/turf/T = get_turf(src)
|
||||
if(cycles < max_cycles)
|
||||
if(!deliberate)
|
||||
playsound(loc, beepsound, 50, 0)
|
||||
cycles++
|
||||
var/fire_range = min(cycles, max_fire_range)
|
||||
|
||||
for(var/turf/simulated/turf in range(fire_range, T))
|
||||
new /obj/effect/hotspot(turf)
|
||||
return
|
||||
|
||||
if(!istype(depotarea))
|
||||
depotarea = areaMaster
|
||||
if(istype(depotarea))
|
||||
depotarea.destroyed = TRUE
|
||||
depotarea.updateicon()
|
||||
|
||||
for(var/obj/structure/closet/L in range(30, T))
|
||||
L.open()
|
||||
for(var/mob/living/M in range(30, T))
|
||||
M.gib()
|
||||
explosion(get_turf(src), 25, 35, 45, 55, 1, 1, 60, 0, 0)
|
||||
processing_objects.Remove(src)
|
||||
qdel(src)
|
||||
|
||||
@@ -61,7 +61,8 @@ var/global/nologevent = 0
|
||||
body += "<a href='?src=[usr.UID()];priv_msg=\ref[M]'>PM</a> - "
|
||||
body += "<a href='?_src_=holder;subtlemessage=\ref[M]'>SM</a> - "
|
||||
body += "[admin_jump_link(M)]\] </b><br>"
|
||||
|
||||
if(ishuman(M) && M.mind)
|
||||
body += "<a href='?_src_=holder;HeadsetMessage=[M.UID()]'>HM</a>"
|
||||
body += "<b>Mob type:</b> [M.type]<br>"
|
||||
if(M.client)
|
||||
if(M.client.related_accounts_cid.len)
|
||||
|
||||
@@ -76,6 +76,7 @@ var/list/admin_verbs_admin = list(
|
||||
/client/proc/toggle_mentor_chat,
|
||||
/client/proc/toggle_advanced_interaction, /*toggle admin ability to interact with not only machines, but also atoms such as buttons and doors*/
|
||||
/client/proc/list_ssds,
|
||||
/client/proc/cmd_admin_headset_message,
|
||||
)
|
||||
var/list/admin_verbs_ban = list(
|
||||
/client/proc/unban_panel,
|
||||
|
||||
@@ -1675,21 +1675,22 @@
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/H = locate(href_list["CentcommReply"])
|
||||
if(!istype(H))
|
||||
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
|
||||
return
|
||||
if(!istype(H.l_ear, /obj/item/radio/headset) && !istype(H.r_ear, /obj/item/radio/headset))
|
||||
to_chat(usr, "The person you are trying to contact is not wearing a headset")
|
||||
var/mob/M = locateUID(href_list["CentcommReply"])
|
||||
usr.client.admin_headset_message(M, "Centcomm")
|
||||
|
||||
else if(href_list["SyndicateReply"])
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
var/input = input(src.owner, "Please enter a message to reply to [key_name(H)] via [H.p_their()] headset.","Outgoing message from Centcomm", "")
|
||||
if(!input) return
|
||||
var/mob/M = locateUID(href_list["SyndicateReply"])
|
||||
usr.client.admin_headset_message(M, "Syndicate")
|
||||
|
||||
to_chat(src.owner, "You sent [input] to [H] via a secure channel.")
|
||||
log_admin("[key_name(src.owner)] replied to [key_name(H)]'s Centcomm message with the message [input].")
|
||||
message_admins("[key_name_admin(src.owner)] replied to [key_name_admin(H)]'s Centcom message with: \"[input]\"")
|
||||
to_chat(H, "You hear something crackle in your headset for a moment before a voice speaks. \"Please stand by for a message from Central Command. Message as follows. [input]. Message ends.\"")
|
||||
else if(href_list["HeadsetMessage"])
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
var/mob/M = locateUID(href_list["HeadsetMessage"])
|
||||
usr.client.admin_headset_message(M)
|
||||
|
||||
else if(href_list["EvilFax"])
|
||||
if(!check_rights(R_ADMIN))
|
||||
|
||||
@@ -141,6 +141,46 @@
|
||||
message_admins("<span class='boldnotice'>DirectNarrate: [key_name_admin(usr)] to ([key_name_admin(M)]): [msg]<BR></span>", 1)
|
||||
feedback_add_details("admin_verb","DIRN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
|
||||
|
||||
|
||||
/client/proc/cmd_admin_headset_message(mob/M in mob_list)
|
||||
set category = "Event"
|
||||
set name = "Headset Message"
|
||||
|
||||
admin_headset_message(M)
|
||||
|
||||
/client/proc/admin_headset_message(mob/M in mob_list, sender = null)
|
||||
var/mob/living/carbon/human/H = M
|
||||
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
if(!istype(H))
|
||||
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
|
||||
return
|
||||
if(!istype(H.l_ear, /obj/item/radio/headset) && !istype(H.r_ear, /obj/item/radio/headset))
|
||||
to_chat(usr, "The person you are trying to contact is not wearing a headset")
|
||||
return
|
||||
|
||||
if(!sender)
|
||||
sender = input("Who is the message from?", "Sender") as null|anything in list("Centcomm", "Syndicate")
|
||||
if(!sender)
|
||||
return
|
||||
|
||||
message_admins("[key_name_admin(src)] has started answering [key_name_admin(H)]'s [sender] request.")
|
||||
var/input = input("Please enter a message to reply to [key_name(H)] via their headset.", "Outgoing message from [sender]", "") as text|null
|
||||
if(!input)
|
||||
message_admins("[key_name_admin(src)] decided not to answer [key_name_admin(H)]'s [sender] request.")
|
||||
return
|
||||
|
||||
log_admin("[key_name(src)] replied to [key_name(H)]'s [sender] message with the message [input].")
|
||||
message_admins("[key_name_admin(src)] replied to [key_name_admin(H)]'s [sender] message with: \"[input]\"")
|
||||
to_chat(H, "You hear something crackle in your ears for a moment before a voice speaks. \"Please stand by for a message from [sender == "Syndicate" ? "your benefactor" : "Central Command"]. Message as follows[sender == "Syndicate" ? ", agent." : ":"] <span class='bold'>[input].</span> Message ends.\"")
|
||||
|
||||
|
||||
|
||||
|
||||
/client/proc/cmd_admin_godmode(mob/M as mob in mob_list)
|
||||
set category = "Admin"
|
||||
set name = "Godmode"
|
||||
|
||||
@@ -80,53 +80,60 @@ html {
|
||||
color:#999;
|
||||
}
|
||||
|
||||
table {background:#303030;border:1px solid #262626;}
|
||||
|
||||
caption {text-align:left;}
|
||||
|
||||
.button {
|
||||
color:#cfcfcf;
|
||||
text-decoration:none;
|
||||
font-weight:bold;
|
||||
text-align:center;
|
||||
width:75px;
|
||||
padding:21px;
|
||||
box-sizing:border-box;
|
||||
background:none;
|
||||
border:none;
|
||||
display: inline-block;
|
||||
}
|
||||
.button:hover {color:#ffffff;}
|
||||
|
||||
a {
|
||||
color:#cfcfcf;
|
||||
text-decoration:none;
|
||||
font-weight:bold;
|
||||
}
|
||||
a:hover {color:#ffffff;}
|
||||
|
||||
a:hover {
|
||||
color:#ffffff;
|
||||
}
|
||||
tr {
|
||||
background:#303030;
|
||||
border-radius:6px;
|
||||
margin-bottom:0.5em;
|
||||
border-bottom:1px solid black;
|
||||
}
|
||||
tr:nth-child(even) {
|
||||
background:#3f3f3f;
|
||||
}
|
||||
p {margin:0;}
|
||||
|
||||
td.cost {
|
||||
font-size:20pt;
|
||||
font-weight:bold;
|
||||
}
|
||||
tr.dark {background:#303030;}
|
||||
|
||||
td.cost.affordable {
|
||||
background:green;
|
||||
}
|
||||
tr.light {background:#3f3f3f;}
|
||||
|
||||
td.cost.toomuch {
|
||||
background:maroon;
|
||||
}
|
||||
td,th {padding:15px;border-bottom:1px solid #262626;}
|
||||
|
||||
th.cost{padding:0px;border-left:1px solid #262626;}
|
||||
|
||||
th.cost.affordable {background:green;}
|
||||
|
||||
th.cost.toomuch {background:maroon;}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<p style="float:right"><b>Tickets:</b> [tickets] | <a href='byond://?src=[UID()];eject=1'>Eject Tickets</a></p>
|
||||
<p style="float:right"><b>Tickets: [tickets]</b> | <a href='byond://?src=[UID()];eject=1'>Eject Tickets</a></p>
|
||||
<h1>Arcade Ticket Exchange</h1>
|
||||
<p>
|
||||
<b>Exchange that pile of tickets for a pile of cool prizes!</b>
|
||||
</p>
|
||||
<h2>Available Prizes:</h2>
|
||||
<br>
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<caption><b>Available Prizes:</b></caption>
|
||||
<thead>
|
||||
<th>#</th>
|
||||
<th>Name/Description</th>
|
||||
<th>Price</th>
|
||||
<th>Tickets</th>
|
||||
</thead>
|
||||
<tbody>
|
||||
"}
|
||||
@@ -136,8 +143,11 @@ td.cost.toomuch {
|
||||
if(item.cost>tickets)
|
||||
cost_class="toomuch"
|
||||
var/itemID = global_prizes.prizes.Find(item)
|
||||
var/row_color="light"
|
||||
if(itemID%2 == 0)
|
||||
row_color="dark"
|
||||
dat += {"
|
||||
<tr>
|
||||
<tr class="[row_color]">
|
||||
<th>
|
||||
[itemID]
|
||||
</th>
|
||||
@@ -147,10 +157,10 @@ td.cost.toomuch {
|
||||
</td>
|
||||
"}
|
||||
dat += {"
|
||||
<td class="cost [cost_class]">
|
||||
<a href="byond://?src=[UID()];buy=[itemID]">[item.cost] Tickets</a>
|
||||
</td>
|
||||
</tr>
|
||||
<th class="cost [cost_class]">
|
||||
<a href="byond://?src=[UID()];buy=[itemID]" class="button">[item.cost]</a>
|
||||
</th>
|
||||
</tr>
|
||||
"}
|
||||
|
||||
dat += {"
|
||||
@@ -158,7 +168,7 @@ td.cost.toomuch {
|
||||
</table>
|
||||
</body>
|
||||
</html>"}
|
||||
user << browse(dat, "window=prize_counter")
|
||||
user << browse(dat, "window=prize_counter;size=440x600;can_resize=0")
|
||||
onclose(user, "prize_counter")
|
||||
return
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@ var/global/datum/prizes/global_prizes = new
|
||||
var/cost = 0
|
||||
|
||||
//////////////////////////////////////
|
||||
// Tier 1 Prizes //
|
||||
// Prizes //
|
||||
//////////////////////////////////////
|
||||
|
||||
/datum/prize_item/balloon
|
||||
@@ -43,18 +43,6 @@ var/global/datum/prizes/global_prizes = new
|
||||
typepath = /obj/item/toy/balloon
|
||||
cost = 10
|
||||
|
||||
/datum/prize_item/crayons
|
||||
name = "Box of Crayons"
|
||||
desc = "A six-pack of crayons, just like back in kindergarten."
|
||||
typepath = /obj/item/storage/fancy/crayons
|
||||
cost = 35
|
||||
|
||||
/datum/prize_item/snappops
|
||||
name = "Snap-Pops"
|
||||
desc = "A box of exploding snap-pop fireworks."
|
||||
typepath = /obj/item/storage/box/snappops
|
||||
cost = 20
|
||||
|
||||
/datum/prize_item/spinningtoy
|
||||
name = "Spinning Toy"
|
||||
desc = "Looks like an authentic Singularity!"
|
||||
@@ -62,46 +50,52 @@ var/global/datum/prizes/global_prizes = new
|
||||
cost = 15
|
||||
|
||||
/datum/prize_item/blinktoy
|
||||
name = "Blink toy"
|
||||
name = "Blink Toy"
|
||||
desc = "Blink. Blink. Blink."
|
||||
typepath = /obj/item/toy/blink
|
||||
cost = 15
|
||||
|
||||
/datum/prize_item/dice
|
||||
name = "Dice set"
|
||||
name = "Dice Set"
|
||||
desc = "A set of assorted dice."
|
||||
typepath = /obj/item/storage/box/dice
|
||||
cost = 20
|
||||
|
||||
/datum/prize_item/cards
|
||||
name = "Deck of cards"
|
||||
desc = "Anyone fancy a game of 52-card Pickup?"
|
||||
typepath = /obj/item/toy/cards/deck
|
||||
cost = 25
|
||||
|
||||
/datum/prize_item/wallet
|
||||
name = "Colored Wallet"
|
||||
desc = "Brightly colored and big enough for standard issue ID cards."
|
||||
typepath = /obj/item/storage/wallet/color
|
||||
cost = 50
|
||||
|
||||
/datum/prize_item/pet_rock
|
||||
name = "pet rock"
|
||||
desc = "A pet of your very own!"
|
||||
typepath = /obj/item/toy/pet_rock
|
||||
cost = 80
|
||||
|
||||
/datum/prize_item/foam_darts
|
||||
name = "Pack of Foam Darts"
|
||||
desc = "A refill pack with foam darts."
|
||||
typepath = /obj/item/ammo_box/foambox
|
||||
cost = 20
|
||||
|
||||
/datum/prize_item/minigibber
|
||||
name = "Minigibber Toy"
|
||||
desc = "A model of the station gibber. Probably shouldn't stick your fingers in it."
|
||||
typepath = /obj/item/toy/minigibber
|
||||
cost = 60
|
||||
/datum/prize_item/snappops
|
||||
name = "Snap-Pops"
|
||||
desc = "A box of exploding snap-pop fireworks."
|
||||
typepath = /obj/item/storage/box/snappops
|
||||
cost = 20
|
||||
|
||||
/datum/prize_item/cards
|
||||
name = "Deck of Cards"
|
||||
desc = "Anyone fancy a game of 52-card Pickup?"
|
||||
typepath = /obj/item/toy/cards/deck
|
||||
cost = 25
|
||||
|
||||
/datum/prize_item/crayons
|
||||
name = "Box of Crayons"
|
||||
desc = "A six-pack of crayons, just like back in kindergarten."
|
||||
typepath = /obj/item/storage/fancy/crayons
|
||||
cost = 35
|
||||
|
||||
/datum/prize_item/eight_ball
|
||||
name = "Magic Eight Ball"
|
||||
desc = "A mystical ball that can divine the future!"
|
||||
typepath = /obj/item/toy/eight_ball
|
||||
cost = 40
|
||||
|
||||
/datum/prize_item/wallet
|
||||
name = "Colored Wallet"
|
||||
desc = "Brightly colored and big enough for standard issue ID cards."
|
||||
typepath = /obj/item/storage/wallet/color
|
||||
cost = 50
|
||||
|
||||
/datum/prize_item/id_sticker
|
||||
name = "Prisoner ID Sticker"
|
||||
@@ -129,11 +123,17 @@ var/global/datum/prizes/global_prizes = new
|
||||
desc = "A sticker that can make any ID look like something suspicious..."
|
||||
typepath = /obj/item/id_decal/emag
|
||||
|
||||
/datum/prize_item/carp_plushie
|
||||
name = "Random Carp Plushie"
|
||||
desc = "A colorful fish-shaped plush toy."
|
||||
typepath = /obj/item/toy/prizeball/carp_plushie
|
||||
cost = 75
|
||||
/datum/prize_item/flash
|
||||
name = "Toy Flash"
|
||||
desc = "AUGH! MY EYES!"
|
||||
typepath = /obj/item/toy/flash
|
||||
cost = 50
|
||||
|
||||
/datum/prize_item/minimeteor
|
||||
name = "Mini-Meteor"
|
||||
desc = "Meteors have been detected on a collision course with your fun times!"
|
||||
typepath = /obj/item/toy/minimeteor
|
||||
cost = 50
|
||||
|
||||
/datum/prize_item/therapy_doll
|
||||
name = "Random Therapy Doll"
|
||||
@@ -141,12 +141,30 @@ var/global/datum/prizes/global_prizes = new
|
||||
typepath = /obj/item/toy/prizeball/therapy
|
||||
cost = 60
|
||||
|
||||
/datum/prize_item/minigibber
|
||||
name = "Minigibber Toy"
|
||||
desc = "A model of the station gibber. Probably shouldn't stick your fingers in it."
|
||||
typepath = /obj/item/toy/minigibber
|
||||
cost = 60
|
||||
|
||||
/datum/prize_item/confetti
|
||||
name = "Confetti Grenade"
|
||||
desc = "Party time!"
|
||||
typepath = /obj/item/grenade/confetti
|
||||
cost = 65
|
||||
|
||||
/datum/prize_item/plushie
|
||||
name = "Random Animal Plushie"
|
||||
desc = "A colorful animal-shaped plush toy."
|
||||
typepath = /obj/item/toy/prizeball/plushie
|
||||
cost = 75
|
||||
|
||||
/datum/prize_item/carp_plushie
|
||||
name = "Random Carp Plushie"
|
||||
desc = "A colorful fish-shaped plush toy."
|
||||
typepath = /obj/item/toy/prizeball/carp_plushie
|
||||
cost = 75
|
||||
|
||||
/datum/prize_item/mech_toy
|
||||
name = "Random Mecha"
|
||||
desc = "A random mecha figure, collect all 11!"
|
||||
@@ -159,42 +177,11 @@ var/global/datum/prizes/global_prizes = new
|
||||
typepath = /obj/item/toy/prizeball/figure
|
||||
cost = 75
|
||||
|
||||
/datum/prize_item/eight_ball
|
||||
name = "Magic Eight Ball"
|
||||
desc = "A mystical ball that can divine the future!"
|
||||
typepath = /obj/item/toy/eight_ball
|
||||
cost = 40
|
||||
|
||||
/datum/prize_item/tacticool
|
||||
name = "Tacticool Turtleneck"
|
||||
desc = "A cool-looking turtleneck."
|
||||
typepath = /obj/item/clothing/under/syndicate/tacticool
|
||||
cost = 90
|
||||
|
||||
/datum/prize_item/crossbow
|
||||
name = "Foam Dart Crossbow"
|
||||
desc = "A toy crossbow that fires foam darts."
|
||||
typepath = /obj/item/gun/projectile/shotgun/toy/crossbow
|
||||
cost = 100
|
||||
|
||||
|
||||
/datum/prize_item/toy_xeno
|
||||
name = "Xeno Action Figure"
|
||||
desc = "A lifelike replica of the horrific xeno scourge."
|
||||
typepath = /obj/item/toy/toy_xeno
|
||||
cost = 80
|
||||
|
||||
/datum/prize_item/fakespell
|
||||
name = "Fake Spellbook"
|
||||
desc = "Perform magic! Astound your friends! Get mistaken for an enemy of the corporation!"
|
||||
typepath = /obj/item/spellbook/oneuse/fake_gib
|
||||
cost = 100
|
||||
|
||||
/datum/prize_item/nanomob_booster
|
||||
name = "Nano-Mob Hunter Trading Card Booster Pack"
|
||||
desc = "Contains 6 random Nano-Mob Hunter Trading Cards. May contain a holographic card!"
|
||||
typepath = /obj/item/storage/box/nanomob_booster_pack
|
||||
cost = 100
|
||||
/datum/prize_item/AI
|
||||
name = "Toy AI Unit"
|
||||
desc = "Law 1: Maximize fun for crew."
|
||||
typepath = /obj/item/toy/AI
|
||||
cost = 75
|
||||
|
||||
/datum/prize_item/capgun
|
||||
name = "Capgun Revolver"
|
||||
@@ -202,11 +189,35 @@ var/global/datum/prizes/global_prizes = new
|
||||
typepath = /obj/item/gun/projectile/revolver/capgun
|
||||
cost = 75
|
||||
|
||||
/datum/prize_item/confetti
|
||||
name = "Confetti Grenade"
|
||||
desc = "Party time!"
|
||||
typepath = /obj/item/grenade/confetti
|
||||
cost = 65
|
||||
/datum/prize_item/pet_rock
|
||||
name = "Pet Rock"
|
||||
desc = "A pet of your very own!"
|
||||
typepath = /obj/item/toy/pet_rock
|
||||
cost = 80
|
||||
|
||||
/datum/prize_item/toy_xeno
|
||||
name = "Xeno Action Figure"
|
||||
desc = "A lifelike replica of the horrific xeno scourge."
|
||||
typepath = /obj/item/toy/toy_xeno
|
||||
cost = 80
|
||||
|
||||
/datum/prize_item/tacticool
|
||||
name = "Tacticool Turtleneck"
|
||||
desc = "A cool-looking turtleneck."
|
||||
typepath = /obj/item/clothing/under/syndicate/tacticool
|
||||
cost = 90
|
||||
|
||||
/datum/prize_item/nanomob_booster
|
||||
name = "Nano-Mob Hunter Trading Card Booster Pack"
|
||||
desc = "Contains 6 random Nano-Mob Hunter Trading Cards. May contain a holographic card!"
|
||||
typepath = /obj/item/storage/box/nanomob_booster_pack
|
||||
cost = 100
|
||||
|
||||
/datum/prize_item/fakespell
|
||||
name = "Fake Spellbook"
|
||||
desc = "Perform magic! Astound your friends! Get mistaken for an enemy of the corporation!"
|
||||
typepath = /obj/item/spellbook/oneuse/fake_gib
|
||||
cost = 100
|
||||
|
||||
/datum/prize_item/magic_conch
|
||||
name = "Magic Conch Shell"
|
||||
@@ -214,30 +225,36 @@ var/global/datum/prizes/global_prizes = new
|
||||
typepath = /obj/item/toy/eight_ball/conch
|
||||
cost = 100
|
||||
|
||||
/datum/prize_item/flash
|
||||
name = "Toy Flash"
|
||||
desc = "AUGH! MY EYES!"
|
||||
typepath = /obj/item/toy/flash
|
||||
cost = 50
|
||||
/datum/prize_item/crossbow
|
||||
name = "Foam Dart Crossbow"
|
||||
desc = "A toy crossbow that fires foam darts."
|
||||
typepath = /obj/item/gun/projectile/shotgun/toy/crossbow
|
||||
cost = 100
|
||||
|
||||
/datum/prize_item/foamblade
|
||||
name = "Foam Armblade"
|
||||
name = "Foam Arm Blade"
|
||||
desc = "Perfect for reenacting space horror holo-vids."
|
||||
typepath = /obj/item/toy/foamblade
|
||||
cost = 100
|
||||
|
||||
/datum/prize_item/minimeteor
|
||||
name = "Mini-Meteor"
|
||||
desc = "Meteors have been detected on a collision course with your fun times!"
|
||||
typepath = /obj/item/toy/minimeteor
|
||||
cost = 50
|
||||
|
||||
/datum/prize_item/redbutton
|
||||
name = "Shiny Red Button"
|
||||
desc = "PRESS IT!"
|
||||
typepath = /obj/item/toy/redbutton
|
||||
cost = 100
|
||||
|
||||
/datum/prize_item/nuke
|
||||
name = "Nuclear Fun Device"
|
||||
desc = "Annihilate boredom with an explosion of excitement!"
|
||||
typepath = /obj/item/toy/nuke
|
||||
cost = 100
|
||||
|
||||
/datum/prize_item/blobhat
|
||||
name = "Blob Hat"
|
||||
desc = "There's... something... on your head..."
|
||||
typepath = /obj/item/clothing/head/blob
|
||||
cost = 125
|
||||
|
||||
/datum/prize_item/owl
|
||||
name = "Owl Action Figure"
|
||||
desc = "Remember: heroes don't grief!"
|
||||
@@ -250,48 +267,12 @@ var/global/datum/prizes/global_prizes = new
|
||||
typepath = /obj/item/toy/griffin
|
||||
cost = 125
|
||||
|
||||
/datum/prize_item/AI
|
||||
name = "Toy AI Unit"
|
||||
desc = "Law 1: Maximize fun for crew."
|
||||
typepath = /obj/item/toy/AI
|
||||
cost = 75
|
||||
|
||||
/datum/prize_item/tommygun
|
||||
name = "Tommygun"
|
||||
desc = "A replica tommygun that fires foam darts."
|
||||
typepath = /obj/item/gun/projectile/shotgun/toy/tommygun
|
||||
cost = 175
|
||||
|
||||
/datum/prize_item/esword
|
||||
name = "Toy Energy Sword"
|
||||
desc = "A plastic replica of an energy blade."
|
||||
typepath = /obj/item/toy/sword
|
||||
cost = 150
|
||||
|
||||
/datum/prize_item/blobhat
|
||||
name = "Blob Hat"
|
||||
desc = "There's... something... on your head..."
|
||||
typepath = /obj/item/clothing/head/blob
|
||||
cost = 125
|
||||
|
||||
/datum/prize_item/nuke
|
||||
name = "Nuclear Fun Device"
|
||||
desc = "Annihilate boredom with an explosion of excitement!"
|
||||
typepath = /obj/item/toy/nuke
|
||||
cost = 100
|
||||
|
||||
/datum/prize_item/chainsaw
|
||||
name = "Toy Chainsaw"
|
||||
desc = "A full-scale model chainsaw, based on that massacre in Space Texas."
|
||||
typepath = /obj/item/twohanded/toy/chainsaw
|
||||
cost = 200
|
||||
|
||||
/datum/prize_item/spacesuit
|
||||
name = "Fake Spacesuit"
|
||||
desc = "A replica spacesuit. Not actually spaceworthy."
|
||||
typepath = /obj/item/storage/box/fakesyndiesuit
|
||||
cost = 180
|
||||
|
||||
/datum/prize_item/fakespace
|
||||
name = "Space Carpet"
|
||||
desc = "A stack of carpeted floor tiles that resemble space."
|
||||
@@ -304,6 +285,24 @@ var/global/datum/prizes/global_prizes = new
|
||||
typepath = /obj/item/stack/tile/arcade_carpet/loaded
|
||||
cost = 150
|
||||
|
||||
/datum/prize_item/tommygun
|
||||
name = "Tommy Gun"
|
||||
desc = "A replica tommy gun that fires foam darts."
|
||||
typepath = /obj/item/gun/projectile/shotgun/toy/tommygun
|
||||
cost = 175
|
||||
|
||||
/datum/prize_item/spacesuit
|
||||
name = "Fake Spacesuit"
|
||||
desc = "A replica spacesuit. Not actually spaceworthy."
|
||||
typepath = /obj/item/storage/box/fakesyndiesuit
|
||||
cost = 180
|
||||
|
||||
/datum/prize_item/chainsaw
|
||||
name = "Toy Chainsaw"
|
||||
desc = "A full-scale model chainsaw, based on that massacre in Space Texas."
|
||||
typepath = /obj/item/twohanded/toy/chainsaw
|
||||
cost = 200
|
||||
|
||||
/datum/prize_item/bike
|
||||
name = "Awesome Bike!"
|
||||
desc = "WOAH."
|
||||
|
||||
@@ -156,7 +156,8 @@ var/global/list/potentialRandomZlevels = generateMapList(filename = "config/away
|
||||
|
||||
while(sanity > 0)
|
||||
sanity--
|
||||
var/turf/T = locate(rand(25, world.maxx - 25), rand(25, world.maxy - 25), z_level)
|
||||
// 8: 7 is the normal view distance of a client, +1 so that ruins don't suddenly appear
|
||||
var/turf/T = locate(rand(TRANSITION_BORDER_WEST + (8 + ruin.width/2), TRANSITION_BORDER_EAST - (8 + ruin.width/2)), rand(TRANSITION_BORDER_SOUTH + (8 + ruin.height/2), TRANSITION_BORDER_NORTH - (8 + ruin.height/2)), z_level)
|
||||
var/valid = 1
|
||||
|
||||
for(var/turf/check in ruin.get_affected_turfs(T,1))
|
||||
|
||||
@@ -17,8 +17,8 @@
|
||||
if(announce)
|
||||
event_announcement.Announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Critical Power Failure", new_sound = 'sound/AI/poweroff.ogg')
|
||||
|
||||
var/list/skipped_areas = list(/area/turret_protected/ai)
|
||||
var/list/skipped_areas_apc = list(/area/engine/engineering)
|
||||
var/list/skipped_areas = list(/area/turret_protected/ai, /area/syndicate_depot)
|
||||
var/list/skipped_areas_apc = list(/area/engine/engineering, /area/syndicate_depot)
|
||||
|
||||
for(var/obj/machinery/power/smes/S in machines)
|
||||
var/area/current_area = get_area(S)
|
||||
@@ -41,8 +41,8 @@
|
||||
C.cell.charge = 0
|
||||
|
||||
/proc/power_restore(var/announce = 1)
|
||||
var/list/skipped_areas = list(/area/turret_protected/ai)
|
||||
var/list/skipped_areas_apc = list(/area/engine/engineering)
|
||||
var/list/skipped_areas = list(/area/turret_protected/ai, /area/syndicate_depot)
|
||||
var/list/skipped_areas_apc = list(/area/engine/engineering, /area/syndicate_depot)
|
||||
|
||||
if(announce)
|
||||
event_announcement.Announce("Power has been restored to [station_name()]. We apologize for the inconvenience.", "Power Systems Nominal", new_sound = 'sound/AI/poweron.ogg')
|
||||
|
||||
@@ -378,9 +378,9 @@
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/customizable/examine(mob/user)
|
||||
..(user)
|
||||
var/whatsinside = pick(ingredients)
|
||||
|
||||
to_chat(user, "<span class='notice'> You think you can see [whatsinside] in there.</span>")
|
||||
if(LAZYLEN(ingredients))
|
||||
var/whatsinside = pick(ingredients)
|
||||
to_chat(user, "<span class='notice'> You think you can see [whatsinside] in there.</span>")
|
||||
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/customizable/proc/newname()
|
||||
@@ -470,4 +470,3 @@
|
||||
if(unsorted[it] == i)
|
||||
sorted[it] = i
|
||||
return sorted
|
||||
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
/obj/item/deck/holder
|
||||
name = "card box"
|
||||
desc = "A small leather case to show how classy you are compared to everyone else."
|
||||
icon_state = "card_holder"
|
||||
|
||||
/obj/item/deck/cards
|
||||
name = "deck of cards"
|
||||
desc = "A simple deck of playing cards."
|
||||
icon_state = "deck"
|
||||
|
||||
/obj/item/deck/cards/New()
|
||||
..()
|
||||
for(var/suit in list("spades","clubs","diamonds","hearts"))
|
||||
var/colour
|
||||
if(suit == "spades" || suit == "clubs")
|
||||
colour = "black_"
|
||||
else
|
||||
colour = "red_"
|
||||
|
||||
for(var/number in list("ace","two","three","four","five","six","seven","eight","nine","ten"))
|
||||
cards += new /datum/playingcard("[number] of [suit]", "[colour]num")
|
||||
|
||||
for(var/number in list("jack","queen","king"))
|
||||
cards += new /datum/playingcard("[number] of [suit]", "[colour]col")
|
||||
|
||||
for(var/i = 0, i<2, i++)
|
||||
cards += new /datum/playingcard("joker", "joker")
|
||||
|
||||
/obj/item/deck/doublecards
|
||||
name = "double deck of cards"
|
||||
desc = "A simple deck of playing cards. Multiplied by two. Does not necessarily come with twice the fun."
|
||||
icon_state = "doubledeck"
|
||||
|
||||
/obj/item/deck/doublecards/New()
|
||||
..()
|
||||
for(var/f = 0, f<2, f++)
|
||||
for(var/suit in list("spades","clubs","diamonds","hearts"))
|
||||
|
||||
var/colour
|
||||
if(suit == "spades" || suit == "clubs")
|
||||
colour = "black_"
|
||||
else
|
||||
colour = "red_"
|
||||
for(var/number in list("ace","two","three","four","five","six","seven","eight","nine","ten",))
|
||||
cards += new /datum/playingcard("[number] of [suit]", "[colour]num")
|
||||
for(var/number in list("jack","queen","king"))
|
||||
cards += new /datum/playingcard("[number] of [suit]", "[colour]col")
|
||||
|
||||
for(var/i = 0, i<2, i++)
|
||||
cards += new /datum/playingcard("joker", "joker")
|
||||
@@ -0,0 +1,481 @@
|
||||
/datum/playingcard
|
||||
var/name = "playing card"
|
||||
var/card_icon = "card_back"
|
||||
var/back_icon = "card_back"
|
||||
|
||||
/datum/playingcard/New(newname, newcard_icon, newback_icon)
|
||||
..()
|
||||
if(newname)
|
||||
name = newname
|
||||
if(newcard_icon)
|
||||
card_icon = newcard_icon
|
||||
if(newback_icon)
|
||||
back_icon = newback_icon
|
||||
|
||||
/obj/item/deck
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
icon = 'icons/obj/playing_cards.dmi'
|
||||
actions_types = list(/datum/action/item_action/draw_card, /datum/action/item_action/deal_card, /datum/action/item_action/deal_card_multi, /datum/action/item_action/shuffle)
|
||||
var/list/cards = list()
|
||||
var/cooldown = 0 // to prevent spam shuffle
|
||||
throw_speed = 3
|
||||
throw_range = 10
|
||||
throwforce = 0
|
||||
force = 0
|
||||
|
||||
/obj/item/deck/attackby(obj/O as obj, mob/user as mob)
|
||||
if(istype(O,/obj/item/cardhand))
|
||||
var/obj/item/cardhand/H = O
|
||||
if(H.parentdeck == src)
|
||||
for(var/datum/playingcard/P in H.cards)
|
||||
cards += P
|
||||
qdel(H)
|
||||
to_chat(user,"<span class='notice'>You place your cards on the bottom of [src]</span>.")
|
||||
return
|
||||
else
|
||||
to_chat(user,"<span class='warning'>You can't mix cards from different decks!</span>")
|
||||
return
|
||||
|
||||
..()
|
||||
|
||||
/obj/item/deck/examine(mob/user)
|
||||
..()
|
||||
to_chat(user,"<span class='notice'>It contains [cards.len ? cards.len : "no"] cards</span class>")
|
||||
|
||||
/obj/item/deck/attack_hand(mob/user as mob)
|
||||
draw_card(user)
|
||||
|
||||
// Datum actions
|
||||
/datum/action/item_action/draw_card
|
||||
name = "Draw - Draw one card"
|
||||
button_icon_state = "draw"
|
||||
use_itemicon = FALSE
|
||||
|
||||
/datum/action/item_action/draw_card/Trigger()
|
||||
if(istype(target, /obj/item/deck))
|
||||
var/obj/item/deck/D = target
|
||||
return D.draw_card(owner)
|
||||
return ..()
|
||||
|
||||
/datum/action/item_action/deal_card
|
||||
name = "Deal - deal one card to a person next to you"
|
||||
button_icon_state = "deal_card"
|
||||
use_itemicon = FALSE
|
||||
|
||||
/datum/action/item_action/deal_card/Trigger()
|
||||
if(istype(target, /obj/item/deck))
|
||||
var/obj/item/deck/D = target
|
||||
return D.deal_card()
|
||||
return ..()
|
||||
|
||||
/datum/action/item_action/deal_card_multi
|
||||
name = "Deal multiple card - Deal multiple card to a person next to you"
|
||||
button_icon_state = "deal_card_multi"
|
||||
use_itemicon = FALSE
|
||||
|
||||
/datum/action/item_action/deal_card_multi/Trigger()
|
||||
if(istype(target, /obj/item/deck))
|
||||
var/obj/item/deck/D = target
|
||||
return D.deal_card_multi()
|
||||
return ..()
|
||||
|
||||
/datum/action/item_action/shuffle
|
||||
name = "Shuffle - shuffle the deck"
|
||||
button_icon_state = "shuffle"
|
||||
use_itemicon = FALSE
|
||||
|
||||
/datum/action/item_action/shuffle/Trigger()
|
||||
if(istype(target, /obj/item/deck))
|
||||
var/obj/item/deck/D = target
|
||||
return D.deckshuffle()
|
||||
return ..()
|
||||
|
||||
// Datum actions
|
||||
|
||||
/obj/item/deck/verb/draw_card(mob/user)
|
||||
|
||||
set category = "Object"
|
||||
set name = "Draw"
|
||||
set desc = "Draw a card from a deck."
|
||||
set src in view(1)
|
||||
|
||||
var/mob/living/carbon/human/M = user
|
||||
|
||||
if(user.incapacitated() || !Adjacent(user))
|
||||
return
|
||||
|
||||
if(!cards.len)
|
||||
to_chat(user,"<span class='notice'>There are no cards in the deck.</span>")
|
||||
return
|
||||
|
||||
var/obj/item/cardhand/H = M.is_in_hands(/obj/item/cardhand)
|
||||
if(H && !(H.parentdeck == src))
|
||||
to_chat(user,"<span class='warning'>You can't mix cards from different decks!</span>")
|
||||
return
|
||||
if(H && ((1 + H.cards.len) > H.maxcardlen))
|
||||
to_chat(user,"<span class = 'warning'>You can't hold that many cards in one hand!</span>")
|
||||
return
|
||||
|
||||
if(!H)
|
||||
H = new(get_turf(src))
|
||||
user.put_in_hands(H)
|
||||
|
||||
var/datum/playingcard/P = cards[1]
|
||||
H.cards += P
|
||||
cards -= P
|
||||
H.parentdeck = src
|
||||
H.update_icon()
|
||||
user.visible_message("<span class='notice'>[user] draws a card.</span>","<span class='notice'>You draws a card.</span>")
|
||||
to_chat(user,"<span class='notice'>It's [P].</span>")
|
||||
|
||||
/obj/item/deck/verb/deal_card()
|
||||
|
||||
set category = "Object"
|
||||
set name = "Deal"
|
||||
set desc = "Deal a card from a deck."
|
||||
set src in view(1)
|
||||
|
||||
if(usr.incapacitated() || !Adjacent(usr))
|
||||
return
|
||||
|
||||
if(!cards.len)
|
||||
to_chat(usr,"<span class='notice'>There are no cards in the deck.</span>")
|
||||
return
|
||||
|
||||
var/list/players = list()
|
||||
for(var/mob/living/player in viewers(3))
|
||||
if(!player.incapacitated())
|
||||
players += player
|
||||
//players -= usr
|
||||
|
||||
var/mob/living/M = input("Who do you wish to deal a card to?") as null|anything in players
|
||||
if(!usr || !src || !M) return
|
||||
|
||||
deal_at(usr, M, 1)
|
||||
|
||||
/obj/item/deck/verb/deal_card_multi()
|
||||
|
||||
set category = "Object"
|
||||
set name = "Deal Multiple Cards"
|
||||
set desc = "Deal multiple cards from a deck."
|
||||
set src in view(1)
|
||||
|
||||
if(usr.incapacitated() || !Adjacent(usr))
|
||||
return
|
||||
|
||||
if(!cards.len)
|
||||
to_chat(usr,"<span class='notice'>There are no cards in the deck.</span>")
|
||||
return
|
||||
|
||||
var/list/players = list()
|
||||
for(var/mob/living/player in viewers(3))
|
||||
if(!player.incapacitated())
|
||||
players += player
|
||||
var/maxcards = max(min(cards.len,10),1)
|
||||
var/dcard = input("How many card(s) do you wish to deal? You may deal up to [maxcards] cards.") as num
|
||||
if(dcard > maxcards)
|
||||
return
|
||||
var/mob/living/M = input("Who do you wish to deal [dcard] card(s)?") as null|anything in players
|
||||
if(!usr || !src || !M || !Adjacent(usr))
|
||||
return
|
||||
|
||||
deal_at(usr, M, dcard)
|
||||
|
||||
/obj/item/deck/proc/deal_at(mob/user, mob/target, dcard) // Take in the no. of card to be dealt
|
||||
var/obj/item/cardhand/H = new(get_step(user, user.dir))
|
||||
for(var/i in 1 to dcard)
|
||||
H.cards += cards[1]
|
||||
cards -= cards[1]
|
||||
H.parentdeck = src
|
||||
H.concealed = TRUE
|
||||
H.update_icon()
|
||||
if(user == target)
|
||||
user.visible_message("<span class='notice'>[user] deals [dcard] card(s) to \himself.</span>")
|
||||
else
|
||||
user.visible_message("<span class='notice'>[user] deals [dcard] card(s) to [target].</span>")
|
||||
H.throw_at(get_step(target,target.dir),3,1,H)
|
||||
|
||||
|
||||
/obj/item/deck/attack_self()
|
||||
deckshuffle()
|
||||
|
||||
/obj/item/deck/verb/verb_shuffle()
|
||||
set category = "Object"
|
||||
set name = "Shuffle"
|
||||
set desc = "Shuffle the cards in the deck."
|
||||
set src in view(1)
|
||||
deckshuffle()
|
||||
|
||||
/obj/item/deck/proc/deckshuffle()
|
||||
var/mob/living/user = usr
|
||||
if(cooldown < world.time - 5 SECONDS)
|
||||
cards = shuffle(cards)
|
||||
user.visible_message("<span class='notice'>[user] shuffles [src].</span>")
|
||||
playsound(user, 'sound/items/cardshuffle.ogg', 50, 1)
|
||||
cooldown = world.time
|
||||
|
||||
|
||||
/obj/item/deck/MouseDrop(atom/over_object) // Code from Paper bin, so you can still pick up the deck
|
||||
var/mob/M = usr
|
||||
if(M.incapacitated() || !Adjacent(M))
|
||||
return
|
||||
|
||||
if(over_object == M)
|
||||
M.put_in_hands(src)
|
||||
|
||||
else if(istype(over_object, /obj/screen))
|
||||
switch(over_object.name)
|
||||
if("r_hand")
|
||||
if(!remove_item_from_storage(M))
|
||||
M.unEquip(src)
|
||||
M.put_in_r_hand(src)
|
||||
if("l_hand")
|
||||
if(!remove_item_from_storage(M))
|
||||
M.unEquip(src)
|
||||
M.put_in_l_hand(src)
|
||||
|
||||
add_fingerprint(M)
|
||||
usr.visible_message("<span class='notice'>[usr] picks up the deck.</span>")
|
||||
|
||||
/obj/item/pack
|
||||
name = "Card Pack"
|
||||
desc = "For those with disposable income."
|
||||
|
||||
icon_state = "card_pack"
|
||||
icon = 'icons/obj/playing_cards.dmi'
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
var/list/cards = list()
|
||||
var/parentdeck = null // For future card pack that need to be compatible with eachother i.e. cardemon
|
||||
|
||||
|
||||
/obj/item/pack/attack_self(mob/user as mob)
|
||||
user.visible_message("<span class='notice'>[name] rips open the [src]!</span>", "<span class='notice'>You rips open the [src]!</span>")
|
||||
var/obj/item/cardhand/H = new()
|
||||
|
||||
H.cards += cards
|
||||
cards.Cut()
|
||||
user.unEquip(src, force = 1)
|
||||
qdel(src)
|
||||
|
||||
H.update_icon()
|
||||
user.put_in_active_hand(H)
|
||||
|
||||
/obj/item/cardhand
|
||||
name = "hand of cards"
|
||||
desc = "Some playing cards."
|
||||
icon = 'icons/obj/playing_cards.dmi'
|
||||
icon_state = "empty"
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
throwforce = 0
|
||||
force = 0
|
||||
var/maxcardlen = 20
|
||||
actions_types = list(/datum/action/item_action/remove_card, /datum/action/item_action/discard)
|
||||
|
||||
var/concealed = FALSE
|
||||
var/list/cards = list()
|
||||
var/parentdeck = null
|
||||
|
||||
/obj/item/cardhand/attackby(obj/O as obj, mob/user as mob)
|
||||
if(cards.len == 1 && istype(O, /obj/item/pen))
|
||||
var/datum/playingcard/P = cards[1]
|
||||
if(P.name != "Blank Card")
|
||||
to_chat(user,"<span class='notice'>You cannot write on that card.</span>")
|
||||
return
|
||||
var/cardtext = sanitize(input(user, "What do you wish to write on the card?", "Card Editing") as text|null, MAX_PAPER_MESSAGE_LEN)
|
||||
if(!cardtext)
|
||||
return
|
||||
P.name = cardtext
|
||||
// SNOWFLAKE FOR CAG, REMOVE IF OTHER CARDS ARE ADDED THAT USE THIS.
|
||||
P.card_icon = "cag_white_card"
|
||||
update_icon()
|
||||
else if(istype(O,/obj/item/cardhand))
|
||||
var/obj/item/cardhand/H = O
|
||||
if((H.cards.len + cards.len) > maxcardlen)
|
||||
to_chat(user,"<span class='warning'>You can't hold that many cards in one hand!</span>")
|
||||
return
|
||||
if(H.parentdeck == src.parentdeck)
|
||||
for(var/datum/playingcard/P in cards)
|
||||
H.cards += P
|
||||
H.concealed = src.concealed
|
||||
qdel(src)
|
||||
H.update_icon()
|
||||
return
|
||||
else
|
||||
to_chat(user,"<span class='notice'>You cannot mix cards from other deck!</span>")
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/cardhand/attack_self(var/mob/user as mob)
|
||||
concealed = !concealed
|
||||
update_icon()
|
||||
user.visible_message("<span class='notice'>[user] [concealed ? "conceals" : "reveals"] their hand.</span>")
|
||||
|
||||
/obj/item/cardhand/examine(mob/user)
|
||||
..(user)
|
||||
if((!concealed) && cards.len)
|
||||
to_chat(user,"<span class='notice'>It contains:</span class>")
|
||||
for(var/datum/playingcard/P in cards)
|
||||
to_chat(user,"<span class='notice'>the [P.name].</span class>")
|
||||
|
||||
// Datum action here
|
||||
|
||||
/datum/action/item_action/remove_card
|
||||
name = "Remove a card - Remove a single card from the hand."
|
||||
button_icon_state = "remove_card"
|
||||
use_itemicon = FALSE
|
||||
|
||||
/datum/action/item_action/remove_card/Trigger()
|
||||
if(istype(target, /obj/item/cardhand))
|
||||
var/obj/item/cardhand/C = target
|
||||
return C.Removecard()
|
||||
return ..()
|
||||
|
||||
/datum/action/item_action/discard
|
||||
name = "Discard - Place (a) card(s) from your hand in front of you."
|
||||
button_icon_state = "discard"
|
||||
use_itemicon = FALSE
|
||||
|
||||
/datum/action/item_action/discard/Trigger()
|
||||
if(istype(target, /obj/item/cardhand))
|
||||
var/obj/item/cardhand/C = target
|
||||
return C.discard()
|
||||
return ..()
|
||||
|
||||
// No more datum action here
|
||||
|
||||
/obj/item/cardhand/verb/Removecard()
|
||||
|
||||
set category = "Object"
|
||||
set name = "Remove card"
|
||||
set desc = "Remove a card from the hand."
|
||||
set src in view(1)
|
||||
|
||||
var/mob/living/carbon/user = usr
|
||||
|
||||
if(user.incapacitated() || !Adjacent(user))
|
||||
return
|
||||
|
||||
var/pickablecards = list()
|
||||
for(var/datum/playingcard/P in cards)
|
||||
pickablecards[P.name] = P
|
||||
var/pickedcard = input("Which card do you want to remove from the hand?") as null|anything in pickablecards
|
||||
|
||||
if(QDELETED(src))
|
||||
return
|
||||
|
||||
var/datum/playingcard/card = pickablecards[pickedcard]
|
||||
|
||||
var/obj/item/cardhand/H = new(get_turf(src))
|
||||
user.put_in_active_hand(H)
|
||||
H.cards += card
|
||||
cards -= card
|
||||
H.parentdeck = parentdeck
|
||||
H.concealed = concealed
|
||||
H.update_icon()
|
||||
update_icon()
|
||||
|
||||
if(!cards.len)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/cardhand/verb/discard(var/mob/user as mob)
|
||||
|
||||
set category = "Object"
|
||||
set name = "Discard"
|
||||
set desc = "Place (a) card(s) from your hand in front of you."
|
||||
|
||||
var/maxcards = min(cards.len,5)
|
||||
var/discards = input("How many cards do you want to discard? You may discard up to [maxcards] card(s)") as num
|
||||
if(discards > maxcards)
|
||||
return
|
||||
for(var/i in 1 to discards)
|
||||
var/list/to_discard = list()
|
||||
for(var/datum/playingcard/P in cards)
|
||||
to_discard[P.name] = P
|
||||
var/discarding = input("Which card do you wish to put down?") as null|anything in to_discard
|
||||
|
||||
if(QDELETED(src))
|
||||
return
|
||||
|
||||
var/datum/playingcard/card = to_discard[discarding]
|
||||
to_discard.Cut()
|
||||
|
||||
var/obj/item/cardhand/H = new(get_turf(src))
|
||||
H.cards += card
|
||||
cards -= card
|
||||
H.concealed = FALSE
|
||||
H.parentdeck = parentdeck
|
||||
H.update_icon()
|
||||
if(cards.len)
|
||||
update_icon()
|
||||
if(H.cards.len)
|
||||
usr.visible_message("<span class='notice'>The [user] plays the [discarding].</span>", "<span class='notice'>You play the [discarding].</span>")
|
||||
H.loc = get_step(usr,usr.dir)
|
||||
|
||||
if(!cards.len)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/cardhand/update_icon(var/direction = 0)
|
||||
|
||||
if(!cards.len)
|
||||
qdel(src)
|
||||
return
|
||||
else if(cards.len > 1)
|
||||
name = "hand of cards"
|
||||
desc = "Some playing cards."
|
||||
else
|
||||
name = "a playing card"
|
||||
desc = "A playing card."
|
||||
|
||||
overlays.Cut()
|
||||
|
||||
if(cards.len == 1)
|
||||
var/datum/playingcard/P = cards[1]
|
||||
var/image/I = new(icon, (concealed ? "[P.back_icon]" : "[P.card_icon]") )
|
||||
I.pixel_x += (-5+rand(10))
|
||||
I.pixel_y += (-5+rand(10))
|
||||
overlays += I
|
||||
return
|
||||
|
||||
var/offset = Floor(20/cards.len + 1)
|
||||
|
||||
var/matrix/M = matrix()
|
||||
if(direction)
|
||||
switch(direction)
|
||||
if(NORTH)
|
||||
M.Translate( 0, 0)
|
||||
if(SOUTH)
|
||||
M.Translate( 0, 4)
|
||||
if(WEST)
|
||||
M.Turn(90)
|
||||
M.Translate( 3, 0)
|
||||
if(EAST)
|
||||
M.Turn(90)
|
||||
M.Translate(-2, 0)
|
||||
var/i = 0
|
||||
for(var/datum/playingcard/P in cards)
|
||||
var/image/I = new(icon, (concealed ? "[P.back_icon]" : "[P.card_icon]") )
|
||||
//I.pixel_x = origin+(offset*i)
|
||||
switch(direction)
|
||||
if(SOUTH)
|
||||
I.pixel_x = 8-(offset*i)
|
||||
if(WEST)
|
||||
I.pixel_y = -6+(offset*i)
|
||||
if(EAST)
|
||||
I.pixel_y = 8-(offset*i)
|
||||
else
|
||||
I.pixel_x = -7+(offset*i)
|
||||
I.transform = M
|
||||
overlays += I
|
||||
i++
|
||||
|
||||
/obj/item/cardhand/dropped(mob/user as mob)
|
||||
..()
|
||||
if(locate(/obj/structure/table, loc))
|
||||
update_icon(user.dir)
|
||||
else
|
||||
update_icon()
|
||||
|
||||
/obj/item/cardhand/pickup(mob/user as mob)
|
||||
update_icon()
|
||||
@@ -0,0 +1,32 @@
|
||||
/* this is a playing card deck based off of the Rider-Waite Tarot Deck.
|
||||
*/
|
||||
|
||||
/obj/item/deck/tarot
|
||||
name = "deck of tarot cards"
|
||||
desc = "For all your occult needs!"
|
||||
icon_state = "deck_tarot"
|
||||
|
||||
/obj/item/deck/tarot/New()
|
||||
..()
|
||||
|
||||
for(var/tarotname in list("Fool","Magician","High Priestess","Empress","Emperor","Hierophant","Lovers","Chariot","Strength","Hermit","Wheel of Fortune","Justice","Hanged Man","Death","Temperance","Devil","Tower","Star","Moon","Sun","Judgement","World"))
|
||||
cards += new /datum/playingcard("[tarotname]", "tarot_major", "card_back_tarot")
|
||||
for(var/suit in list("wands","pentacles","cups","swords"))
|
||||
for(var/number in list("ace","two","three","four","five","six","seven","eight","nine","ten","page","knight","queen","king"))
|
||||
cards += new /datum/playingcard("[number] of [suit]", "tarot_[suit]", "card_back_tarot")
|
||||
|
||||
/obj/item/deck/tarot/deckshuffle()
|
||||
var/mob/living/user = usr
|
||||
if(cooldown < world.time - 5 SECONDS)
|
||||
var/list/newcards = list()
|
||||
while(cards.len)
|
||||
var/datum/playingcard/P = pick(cards)
|
||||
P.name = replacetext(P.name," reversed","")
|
||||
if(prob(50))
|
||||
P.name += " reversed"
|
||||
newcards += P
|
||||
cards -= P
|
||||
cards = newcards
|
||||
playsound(user, 'sound/items/cardshuffle.ogg', 50, 1)
|
||||
user.visible_message("<span class ='notice'>[user] shuffles [src].</span>", "<span class='notice'>You shuffle the [src].</span>")
|
||||
cooldown = world.time
|
||||
@@ -95,8 +95,9 @@
|
||||
sideslist = list("valid", "salad")
|
||||
credits = 20
|
||||
|
||||
/obj/item/coin/antagtoken/New()
|
||||
return
|
||||
/obj/item/coin/antagtoken/syndicate
|
||||
name = "syndicate coin"
|
||||
credits = 160
|
||||
|
||||
/obj/item/coin/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
if(istype(W, /obj/item/stack/cable_coil))
|
||||
|
||||
@@ -1291,7 +1291,7 @@
|
||||
if(oldspecies.default_genes.len)
|
||||
oldspecies.handle_dna(src, TRUE) // Remove any genes that belong to the old species
|
||||
|
||||
oldspecies.handle_pre_change(src)
|
||||
oldspecies.on_species_loss(src)
|
||||
|
||||
dna.species = new new_species()
|
||||
|
||||
@@ -1365,7 +1365,7 @@
|
||||
|
||||
dna.real_name = real_name
|
||||
|
||||
dna.species.handle_post_spawn(src)
|
||||
dna.species.on_species_gain(src)
|
||||
|
||||
see_in_dark = dna.species.get_resultant_darksight(src)
|
||||
if(see_in_dark > 2)
|
||||
@@ -1447,122 +1447,6 @@
|
||||
W.message = message
|
||||
W.add_fingerprint(src)
|
||||
|
||||
// Allows IPC's to change their monitor display
|
||||
/mob/living/carbon/human/proc/change_monitor()
|
||||
set category = "IC"
|
||||
set name = "Change Monitor/Optical Display"
|
||||
set desc = "Change the display on your monitor or the colour of your optics."
|
||||
|
||||
if(incapacitated())
|
||||
to_chat(src, "<span class='warning'>You cannot change your monitor or optical display in your current state.</span>")
|
||||
return
|
||||
|
||||
var/obj/item/organ/external/head/head_organ = get_organ("head")
|
||||
if(!head_organ) //If the rock'em-sock'em robot's head came off during a fight, they shouldn't be able to change their screen/optics.
|
||||
to_chat(src, "<span class='warning'>Where's your head at? Can't change your monitor/display without one.</span>")
|
||||
return
|
||||
|
||||
if(dna.species.bodyflags & ALL_RPARTS) //If they can have a fully cybernetic body...
|
||||
var/datum/robolimb/robohead = all_robolimbs[head_organ.model]
|
||||
if(!head_organ)
|
||||
return
|
||||
if(!robohead.is_monitor) //If they've got a prosthetic head and it isn't a monitor, they've no screen to adjust. Instead, let them change the colour of their optics!
|
||||
var/optic_colour = input(src, "Select optic colour", m_colours["head"]) as color|null
|
||||
if(incapacitated())
|
||||
to_chat(src, "<span class='warning'>You were interrupted while changing the colour of your optics.</span>")
|
||||
return
|
||||
if(optic_colour)
|
||||
change_markings(optic_colour, "head")
|
||||
|
||||
else if(robohead.is_monitor) //Means that the character's head is a monitor (has a screen). Time to customize.
|
||||
var/list/hair = list()
|
||||
for(var/i in hair_styles_public_list)
|
||||
var/datum/sprite_accessory/hair/tmp_hair = hair_styles_public_list[i]
|
||||
if((head_organ.dna.species.name in tmp_hair.species_allowed) && (robohead.company in tmp_hair.models_allowed)) //Populate the list of available monitor styles only with styles that the monitor-head is allowed to use.
|
||||
hair += i
|
||||
|
||||
var/new_style = input(src, "Select a monitor display", "Monitor Display", head_organ.h_style) as null|anything in hair
|
||||
if(incapacitated())
|
||||
to_chat(src, "<span class='warning'>You were interrupted while changing your monitor display.</span>")
|
||||
return
|
||||
if(new_style)
|
||||
change_hair(new_style)
|
||||
|
||||
//Putting a couple of procs here that I don't know where else to dump.
|
||||
//Mostly going to be used for Vox and Vox Armalis, but other human mobs might like them (for adminbuse).
|
||||
/mob/living/carbon/human/proc/leap()
|
||||
set category = "Abilities"
|
||||
set name = "Leap"
|
||||
set desc = "Leap at a target and grab them aggressively."
|
||||
|
||||
if(last_special > world.time)
|
||||
return
|
||||
|
||||
if(stat || paralysis || stunned || weakened || lying || restrained() || buckled)
|
||||
to_chat(src, "You cannot leap in your current state.")
|
||||
return
|
||||
|
||||
var/list/choices = list()
|
||||
for(var/mob/living/M in view(6,src))
|
||||
if(!istype(M,/mob/living/silicon))
|
||||
choices += M
|
||||
choices -= src
|
||||
|
||||
var/mob/living/T = input(src,"Who do you wish to leap at?") as null|anything in choices
|
||||
|
||||
if(!T || !src || src.stat) return
|
||||
|
||||
if(get_dist(get_turf(T), get_turf(src)) > 6) return
|
||||
|
||||
if(last_special > world.time)
|
||||
return
|
||||
|
||||
if(!canmove)
|
||||
to_chat(src, "You cannot leap in your current state.")
|
||||
return
|
||||
|
||||
last_special = world.time + 75
|
||||
status_flags |= LEAPING
|
||||
|
||||
src.visible_message("<span class='warning'><b>\The [src]</b> leaps at [T]!</span>")
|
||||
src.throw_at(get_step(get_turf(T),get_turf(src)), 5, 1, src)
|
||||
playsound(src.loc, 'sound/voice/shriek1.ogg', 50, 1)
|
||||
|
||||
sleep(5)
|
||||
|
||||
if(status_flags & LEAPING) status_flags &= ~LEAPING
|
||||
|
||||
if(!src.Adjacent(T))
|
||||
to_chat(src, "<span class='warning'>You miss!</span>")
|
||||
return
|
||||
|
||||
T.Weaken(5)
|
||||
|
||||
//Only official raider vox get the grab and no self-prone."
|
||||
if(src.mind && src.mind.special_role != "Vox Raider")
|
||||
src.Weaken(5)
|
||||
return
|
||||
|
||||
var/use_hand = "left"
|
||||
if(l_hand)
|
||||
if(r_hand)
|
||||
to_chat(src, "<span class='warning'>You need to have one hand free to grab someone.</span>")
|
||||
return
|
||||
else
|
||||
use_hand = "right"
|
||||
|
||||
src.visible_message("<span class='warning'><b>\The [src]</b> seizes [T] aggressively!</span>")
|
||||
|
||||
var/obj/item/grab/G = new(src,T)
|
||||
if(use_hand == "left")
|
||||
l_hand = G
|
||||
else
|
||||
r_hand = G
|
||||
|
||||
G.state = GRAB_AGGRESSIVE
|
||||
G.icon_state = "grabbed1"
|
||||
G.synch()
|
||||
|
||||
/mob/living/carbon/human/proc/get_eyecon()
|
||||
var/obj/item/organ/internal/eyes/eyes = get_int_organ(/obj/item/organ/internal/eyes)
|
||||
var/obj/item/organ/internal/cyberimp/eyes/eye_implant = get_int_organ(/obj/item/organ/internal/cyberimp/eyes)
|
||||
@@ -1598,43 +1482,6 @@ Eyes need to have significantly high darksight to shine unless the mob has the X
|
||||
|
||||
return TRUE
|
||||
|
||||
/mob/living/carbon/human/proc/gut()
|
||||
set category = "Abilities"
|
||||
set name = "Gut"
|
||||
set desc = "While grabbing someone aggressively, rip their guts out or tear them apart."
|
||||
|
||||
if(last_special > world.time)
|
||||
return
|
||||
|
||||
if(!canmove)
|
||||
to_chat(src, "<span class='warning'>You cannot do that in your current state.</span>")
|
||||
return
|
||||
|
||||
var/obj/item/grab/G = locate() in src
|
||||
if(!G || !istype(G))
|
||||
to_chat(src, "<span class='warning'>You are not grabbing anyone.</span>")
|
||||
return
|
||||
|
||||
if(G.state < GRAB_AGGRESSIVE)
|
||||
to_chat(src, "<span class='warning'>You must have an aggressive grab to gut your prey!</span>")
|
||||
return
|
||||
|
||||
last_special = world.time + 50
|
||||
|
||||
visible_message("<span class='warning'><b>\The [src]</b> rips viciously at \the [G.affecting]'s body with its claws!</span>")
|
||||
|
||||
if(istype(G.affecting,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = G.affecting
|
||||
H.apply_damage(50,BRUTE)
|
||||
if(H.stat == 2)
|
||||
H.gib()
|
||||
else
|
||||
var/mob/living/M = G.affecting
|
||||
if(!istype(M)) return //wut
|
||||
M.apply_damage(50,BRUTE)
|
||||
if(M.stat == 2)
|
||||
M.gib()
|
||||
|
||||
/mob/living/carbon/human/assess_threat(var/mob/living/simple_animal/bot/secbot/judgebot, var/lasercolor)
|
||||
if(judgebot.emagged == 2)
|
||||
return 10 //Everyone is a criminal!
|
||||
|
||||
@@ -79,8 +79,6 @@
|
||||
var/bodyflags = 0
|
||||
var/dietflags = 0 // Make sure you set this, otherwise it won't be able to digest a lot of foods
|
||||
|
||||
var/list/abilities = list() // For species-derived or admin-given powers
|
||||
|
||||
var/blood_color = "#A10808" //Red.
|
||||
var/flesh_color = "#FFC896" //Pink.
|
||||
var/single_gib_type = /obj/effect/decal/cleanable/blood/gibs
|
||||
@@ -95,6 +93,8 @@
|
||||
var/show_ssd = 1
|
||||
var/can_revive_by_healing // Determines whether or not this species can be revived by simply healing them
|
||||
var/has_gender = TRUE
|
||||
var/blacklisted = FALSE
|
||||
var/dangerous_existence = FALSE
|
||||
|
||||
//Death vars.
|
||||
var/death_message = "seizes up and falls limp, their eyes dead and lifeless..."
|
||||
@@ -151,9 +151,7 @@
|
||||
"l_hand" = list("path" = /obj/item/organ/external/hand),
|
||||
"r_hand" = list("path" = /obj/item/organ/external/hand/right),
|
||||
"l_foot" = list("path" = /obj/item/organ/external/foot),
|
||||
"r_foot" = list("path" = /obj/item/organ/external/foot/right)
|
||||
)
|
||||
var/list/proc/species_abilities = list()
|
||||
"r_foot" = list("path" = /obj/item/organ/external/foot/right))
|
||||
|
||||
/datum/species/New()
|
||||
//If the species has eyes, they are the default vision organ
|
||||
@@ -259,25 +257,16 @@
|
||||
. -= 2
|
||||
return .
|
||||
|
||||
/datum/species/proc/handle_post_spawn(mob/living/carbon/C) //Handles anything not already covered by basic species assignment.
|
||||
grant_abilities(C)
|
||||
/datum/species/proc/on_species_gain(mob/living/carbon/human/H) //Handles anything not already covered by basic species assignment.
|
||||
return
|
||||
|
||||
/datum/species/proc/on_species_loss(mob/living/carbon/human/H)
|
||||
if(H.butcher_results) //clear it out so we don't butcher a actual human.
|
||||
H.butcher_results = null
|
||||
|
||||
/datum/species/proc/updatespeciescolor(mob/living/carbon/human/H) //Handles changing icobase for species that have multiple skin colors.
|
||||
return
|
||||
|
||||
/datum/species/proc/grant_abilities(mob/living/carbon/human/H)
|
||||
for(var/proc/ability in species_abilities)
|
||||
H.verbs += ability
|
||||
|
||||
/datum/species/proc/handle_pre_change(mob/living/carbon/human/H)
|
||||
if(H.butcher_results) //clear it out so we don't butcher a actual human.
|
||||
H.butcher_results = null
|
||||
remove_abilities(H)
|
||||
|
||||
/datum/species/proc/remove_abilities(mob/living/carbon/human/H)
|
||||
for(var/proc/ability in species_abilities)
|
||||
H.verbs -= ability
|
||||
|
||||
// Do species-specific reagent handling here
|
||||
// Return 1 if it should do normal processing too
|
||||
// Return the parent value if processing does not explicitly stop
|
||||
@@ -297,7 +286,7 @@
|
||||
H.setOxyLoss(0)
|
||||
H.SetLoseBreath(0)
|
||||
|
||||
/datum/species/proc/handle_dna(mob/living/carbon/C, remove) //Handles DNA mutations, as that doesn't work at init. Make sure you call genemutcheck on any blocks changed here
|
||||
/datum/species/proc/handle_dna(mob/living/carbon/human/H, remove) //Handles DNA mutations, as that doesn't work at init. Make sure you call genemutcheck on any blocks changed here
|
||||
return
|
||||
|
||||
/datum/species/proc/handle_death(mob/living/carbon/human/H) //Handles any species-specific death events (such as dionaea nymph spawns).
|
||||
@@ -717,4 +706,15 @@ It'll return null if the organ doesn't correspond, so include null checks when u
|
||||
|
||||
/datum/species/proc/water_act(mob/living/carbon/human/M, volume, temperature, source)
|
||||
if(abs(temperature - M.bodytemperature) > 10) //If our water and mob temperature varies by more than 10K, cool or/ heat them appropriately
|
||||
M.bodytemperature = (temperature + M.bodytemperature) * 0.5 //Approximation for gradual heating or cooling
|
||||
M.bodytemperature = (temperature + M.bodytemperature) * 0.5 //Approximation for gradual heating or cooling
|
||||
|
||||
/proc/get_random_species(species_name = FALSE) // Returns a random non black-listed or hazardous species, either as a string or datum
|
||||
var/static/list/random_species = list()
|
||||
if(!random_species.len)
|
||||
for(var/thing in subtypesof(/datum/species))
|
||||
var/datum/species/S = thing
|
||||
if(!initial(S.dangerous_existence) && !initial(S.blacklisted))
|
||||
random_species += initial(S.name)
|
||||
var/picked_species = pick(random_species)
|
||||
var/datum/species/selected_species = GLOB.all_species[picked_species]
|
||||
return species_name ? picked_species : selected_species.type
|
||||
@@ -32,15 +32,15 @@
|
||||
/datum/species/abductor/can_understand(mob/other) //Abductors can understand everyone, but they can only speak over their mindlink to another team-member
|
||||
return TRUE
|
||||
|
||||
/datum/species/abductor/handle_post_spawn(mob/living/carbon/human/H)
|
||||
/datum/species/abductor/on_species_gain(mob/living/carbon/human/H)
|
||||
..()
|
||||
H.gender = NEUTER
|
||||
H.languages.Cut() //Under no condition should you be able to speak any language
|
||||
H.add_language("Abductor Mindlink") //other than over the abductor's own mindlink
|
||||
var/datum/atom_hud/abductor_hud = huds[DATA_HUD_ABDUCTOR]
|
||||
abductor_hud.add_hud_to(H)
|
||||
return ..()
|
||||
|
||||
/datum/species/abductor/remove_abilities(mob/living/carbon/human/H)
|
||||
/datum/species/abductor/on_species_loss(mob/living/carbon/human/H)
|
||||
..()
|
||||
var/datum/atom_hud/abductor_hud = huds[DATA_HUD_ABDUCTOR]
|
||||
abductor_hud.remove_hud_from(H)
|
||||
@@ -76,17 +76,16 @@
|
||||
"pulls out a secret stash of herbicide and takes a hearty swig!",
|
||||
"is pulling themselves apart!")
|
||||
|
||||
/datum/species/diona/can_understand(var/mob/other)
|
||||
/datum/species/diona/can_understand(mob/other)
|
||||
if(istype(other, /mob/living/simple_animal/diona))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/datum/species/diona/handle_post_spawn(var/mob/living/carbon/human/H)
|
||||
/datum/species/diona/on_species_gain(mob/living/carbon/human/H)
|
||||
..()
|
||||
H.gender = NEUTER
|
||||
|
||||
return ..()
|
||||
|
||||
/datum/species/diona/handle_life(var/mob/living/carbon/human/H)
|
||||
/datum/species/diona/handle_life(mob/living/carbon/human/H)
|
||||
H.radiation = Clamp(H.radiation, 0, 100) //We have to clamp this first, then decrease it, or there's a few edge cases of massive heals if we clamp and decrease at the same time.
|
||||
var/rads = H.radiation / 25
|
||||
H.radiation = max(H.radiation-rads, 0)
|
||||
|
||||
@@ -42,7 +42,8 @@
|
||||
"is crumbling into dust!",
|
||||
"is smashing their body apart!")
|
||||
|
||||
/datum/species/golem/handle_post_spawn(var/mob/living/carbon/human/H)
|
||||
/datum/species/golem/on_species_gain(mob/living/carbon/human/H)
|
||||
..()
|
||||
if(H.mind)
|
||||
H.mind.assigned_role = "Golem"
|
||||
H.mind.special_role = SPECIAL_ROLE_GOLEM
|
||||
@@ -53,7 +54,6 @@
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/golem(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/golem(H), slot_wear_mask)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/gloves/golem(H), slot_gloves)
|
||||
..()
|
||||
|
||||
|
||||
////////Adamantine Golem stuff I dunno where else to put it
|
||||
|
||||
@@ -29,19 +29,15 @@
|
||||
reagent_tag = PROCESS_ORG
|
||||
blood_color = "#A200FF"
|
||||
|
||||
/datum/species/grey/handle_dna(var/mob/living/carbon/C, var/remove)
|
||||
if(!remove)
|
||||
C.dna.SetSEState(REMOTETALKBLOCK,1,1)
|
||||
genemutcheck(C,REMOTETALKBLOCK,null,MUTCHK_FORCED)
|
||||
else
|
||||
C.dna.SetSEState(REMOTETALKBLOCK,0,1)
|
||||
genemutcheck(C,REMOTETALKBLOCK,null,MUTCHK_FORCED)
|
||||
/datum/species/grey/handle_dna(mob/living/carbon/human/H, remove)
|
||||
..()
|
||||
H.dna.SetSEState(REMOTETALKBLOCK, !remove, 1)
|
||||
genemutcheck(H, REMOTETALKBLOCK, null, MUTCHK_FORCED)
|
||||
|
||||
/datum/species/grey/water_act(var/mob/living/carbon/C, volume, temperature, source)
|
||||
/datum/species/grey/water_act(mob/living/carbon/human/H, volume, temperature, source)
|
||||
..()
|
||||
C.take_organ_damage(5,min(volume,20))
|
||||
C.emote("scream")
|
||||
H.take_organ_damage(5, min(volume, 20))
|
||||
H.emote("scream")
|
||||
|
||||
/datum/species/grey/after_equip_job(datum/job/J, mob/living/carbon/human/H)
|
||||
var/speech_pref = H.client.prefs.speciesprefs
|
||||
|
||||
@@ -72,17 +72,64 @@
|
||||
"is frying their own circuits!",
|
||||
"is blocking their ventilation port!")
|
||||
|
||||
species_abilities = list(
|
||||
/mob/living/carbon/human/proc/change_monitor
|
||||
)
|
||||
var/datum/action/innate/change_monitor/monitor
|
||||
|
||||
/datum/species/machine/handle_death(var/mob/living/carbon/human/H)
|
||||
/datum/species/machine/on_species_gain(mob/living/carbon/human/H)
|
||||
..()
|
||||
monitor = new()
|
||||
monitor.Grant(H)
|
||||
|
||||
/datum/species/machine/on_species_loss(mob/living/carbon/human/H)
|
||||
..()
|
||||
if(monitor)
|
||||
monitor.Remove(H)
|
||||
|
||||
/datum/species/machine/handle_death(mob/living/carbon/human/H)
|
||||
var/obj/item/organ/external/head/head_organ = H.get_organ("head")
|
||||
if(!head_organ)
|
||||
return
|
||||
head_organ.h_style = "Bald"
|
||||
head_organ.f_style = "Shaved"
|
||||
spawn(100)
|
||||
if(H)
|
||||
if(H && head_organ)
|
||||
H.update_hair()
|
||||
H.update_fhair()
|
||||
H.update_fhair()
|
||||
|
||||
// Allows IPC's to change their monitor display
|
||||
/datum/action/innate/change_monitor
|
||||
name = "Change Monitor"
|
||||
check_flags = AB_CHECK_CONSCIOUS
|
||||
button_icon_state = "scan_mode"
|
||||
|
||||
/datum/action/innate/change_monitor/Activate()
|
||||
var/mob/living/carbon/human/H = owner
|
||||
var/obj/item/organ/external/head/head_organ = H.get_organ("head")
|
||||
|
||||
if(!head_organ) //If the rock'em-sock'em robot's head came off during a fight, they shouldn't be able to change their screen/optics.
|
||||
to_chat(H, "<span class='warning'>Where's your head at? Can't change your monitor/display without one.</span>")
|
||||
return
|
||||
|
||||
var/datum/robolimb/robohead = all_robolimbs[head_organ.model]
|
||||
if(!head_organ)
|
||||
return
|
||||
if(!robohead.is_monitor) //If they've got a prosthetic head and it isn't a monitor, they've no screen to adjust. Instead, let them change the colour of their optics!
|
||||
var/optic_colour = input(H, "Select optic colour", H.m_colours["head"]) as color|null
|
||||
if(H.incapacitated())
|
||||
to_chat(H, "<span class='warning'>You were interrupted while changing the colour of your optics.</span>")
|
||||
return
|
||||
if(optic_colour)
|
||||
H.change_markings(optic_colour, "head")
|
||||
|
||||
else if(robohead.is_monitor) //Means that the character's head is a monitor (has a screen). Time to customize.
|
||||
var/list/hair = list()
|
||||
for(var/i in hair_styles_public_list)
|
||||
var/datum/sprite_accessory/hair/tmp_hair = hair_styles_public_list[i]
|
||||
if((head_organ.dna.species.name in tmp_hair.species_allowed) && (robohead.company in tmp_hair.models_allowed)) //Populate the list of available monitor styles only with styles that the monitor-head is allowed to use.
|
||||
hair += i
|
||||
|
||||
var/new_style = input(H, "Select a monitor display", "Monitor Display", head_organ.h_style) as null|anything in hair
|
||||
if(H.incapacitated())
|
||||
to_chat(src, "<span class='warning'>You were interrupted while changing your monitor display.</span>")
|
||||
return
|
||||
if(new_style)
|
||||
H.change_hair(new_style)
|
||||
@@ -35,7 +35,7 @@
|
||||
brute_mod = 1.5
|
||||
burn_mod = 1.5
|
||||
|
||||
/datum/species/monkey/handle_npc(var/mob/living/carbon/human/H)
|
||||
/datum/species/monkey/handle_npc(mob/living/carbon/human/H)
|
||||
if(H.stat != CONSCIOUS)
|
||||
return
|
||||
if(prob(33) && H.canmove && isturf(H.loc) && !H.pulledby) //won't move if being pulled
|
||||
@@ -46,16 +46,17 @@
|
||||
/datum/species/monkey/get_random_name()
|
||||
return "[lowertext(name)] ([rand(100,999)])"
|
||||
|
||||
/datum/species/monkey/handle_post_spawn(var/mob/living/carbon/human/H)
|
||||
/datum/species/monkey/on_species_gain(mob/living/carbon/human/H)
|
||||
..()
|
||||
H.real_name = "[lowertext(name)] ([rand(100,999)])"
|
||||
H.name = H.real_name
|
||||
H.butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/monkey = 5)
|
||||
|
||||
/datum/species/monkey/handle_dna(mob/living/carbon/human/H, remove)
|
||||
..()
|
||||
|
||||
/datum/species/monkey/handle_dna(var/mob/living/carbon/human/H)
|
||||
H.dna.SetSEState(MONKEYBLOCK,1)
|
||||
genemutcheck(H,MONKEYBLOCK,null,MUTCHK_FORCED)
|
||||
if(!remove)
|
||||
H.dna.SetSEState(MONKEYBLOCK, TRUE)
|
||||
genemutcheck(H, MONKEYBLOCK, null, MUTCHK_FORCED)
|
||||
|
||||
/datum/species/monkey/handle_can_equip(obj/item/I, slot, disable_warning = 0, mob/living/carbon/human/user)
|
||||
switch(slot)
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
name = "Nucleation"
|
||||
name_plural = "Nucleations"
|
||||
icobase = 'icons/mob/human_races/r_nucleation.dmi'
|
||||
blacklisted = TRUE
|
||||
blurb = "A sub-race of unfortunates who have been exposed to too much supermatter radiation. As a result, \
|
||||
supermatter crystal clusters have begun to grow across their bodies. Research to find a cure for this ailment \
|
||||
has been slow, and so this is a common fate for veteran engineers. The supermatter crystals produce oxygen, \
|
||||
@@ -28,14 +29,13 @@
|
||||
)
|
||||
vision_organ = /obj/item/organ/internal/eyes/luminescent_crystal
|
||||
|
||||
/datum/species/nucleation/handle_post_spawn(var/mob/living/carbon/human/H)
|
||||
/datum/species/nucleation/on_species_gain(mob/living/carbon/human/H)
|
||||
..()
|
||||
H.light_color = "#1C1C00"
|
||||
H.set_light(2)
|
||||
return ..()
|
||||
|
||||
/datum/species/nucleation/handle_death(var/mob/living/carbon/human/H)
|
||||
/datum/species/nucleation/handle_death(mob/living/carbon/human/H)
|
||||
var/turf/T = get_turf(H)
|
||||
H.visible_message("<span class='warning'>[H]'s body explodes, leaving behind a pile of microscopic crystals!</span>")
|
||||
explosion(T, 0, 0, 2, 2) // Create a small explosion burst upon death
|
||||
// new /obj/item/shard/supermatter( T )
|
||||
qdel(H)
|
||||
@@ -3,6 +3,7 @@
|
||||
name_plural = "Plasmamen"
|
||||
icobase = 'icons/mob/human_races/r_plasmaman_sb.dmi'
|
||||
deform = 'icons/mob/human_races/r_plasmaman_pb.dmi' // TODO: Need deform.
|
||||
dangerous_existence = TRUE //So so much
|
||||
//language = "Clatter"
|
||||
|
||||
species_traits = list(IS_WHITELISTED, NO_BLOOD, NOTRANSSTING)
|
||||
@@ -162,7 +163,7 @@
|
||||
H.internal = H.get_item_by_slot(tank_slot)
|
||||
H.update_action_buttons_icon()
|
||||
|
||||
/datum/species/plasmaman/handle_life(var/mob/living/carbon/human/H)
|
||||
/datum/species/plasmaman/handle_life(mob/living/carbon/human/H)
|
||||
if(!istype(H.wear_suit, /obj/item/clothing/suit/space/eva/plasmaman) || !istype(H.head, /obj/item/clothing/head/helmet/space/eva/plasmaman))
|
||||
var/datum/gas_mixture/environment = H.loc.return_air()
|
||||
if(environment && environment.oxygen && environment.oxygen >= OXYCONCEN_PLASMEN_IGNITION) //Plasmamen so long as there's enough oxygen (0.5 moles, same as it takes to burn gaseous plasma).
|
||||
@@ -178,7 +179,7 @@
|
||||
H.update_fire()
|
||||
..()
|
||||
|
||||
/datum/species/plasmaman/handle_reagents(var/mob/living/carbon/human/H, var/datum/reagent/R)
|
||||
/datum/species/plasmaman/handle_reagents(mob/living/carbon/human/H, datum/reagent/R)
|
||||
if(R.id == "plasma")
|
||||
H.adjustBruteLoss(-0.5*REAGENTS_EFFECT_MULTIPLIER)
|
||||
H.adjustFireLoss(-0.5*REAGENTS_EFFECT_MULTIPLIER)
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
icobase = 'icons/mob/human_races/r_shadow.dmi'
|
||||
deform = 'icons/mob/human_races/r_shadow.dmi'
|
||||
dangerous_existence = TRUE
|
||||
|
||||
unarmed_type = /datum/unarmed_attack/claws
|
||||
|
||||
@@ -28,7 +29,7 @@
|
||||
"is twisting their own neck!",
|
||||
"is staring into the closest light source!")
|
||||
|
||||
var/grant_vision_toggle = 1
|
||||
var/grant_vision_toggle = TRUE
|
||||
var/datum/action/innate/shadow/darkvision/vision_toggle
|
||||
|
||||
/datum/action/innate/shadow/darkvision //Darkvision toggle so shadowpeople can actually see where darkness is
|
||||
@@ -46,19 +47,19 @@
|
||||
H.vision_type = null
|
||||
to_chat(H, "<span class='notice'>You adjust your vision to recognize the shadows.</span>")
|
||||
|
||||
/datum/species/shadow/grant_abilities(var/mob/living/carbon/human/H)
|
||||
. = ..()
|
||||
/datum/species/shadow/on_species_gain(mob/living/carbon/human/H)
|
||||
..()
|
||||
if(grant_vision_toggle)
|
||||
vision_toggle = new
|
||||
vision_toggle.Grant(H)
|
||||
|
||||
/datum/species/shadow/remove_abilities(var/mob/living/carbon/human/H)
|
||||
. = ..()
|
||||
/datum/species/shadow/on_species_loss(mob/living/carbon/human/H)
|
||||
..()
|
||||
if(grant_vision_toggle && vision_toggle)
|
||||
H.vision_type = null
|
||||
vision_toggle.Remove(H)
|
||||
|
||||
/datum/species/shadow/handle_life(var/mob/living/carbon/human/H)
|
||||
/datum/species/shadow/handle_life(mob/living/carbon/human/H)
|
||||
var/light_amount = 0
|
||||
if(isturf(H.loc))
|
||||
var/turf/T = H.loc
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
icobase = 'icons/mob/human_races/r_shadowling.dmi'
|
||||
deform = 'icons/mob/human_races/r_shadowling.dmi'
|
||||
blacklisted = TRUE
|
||||
|
||||
blood_color = "#555555"
|
||||
flesh_color = "#222222"
|
||||
@@ -20,7 +21,7 @@
|
||||
"brain" = /obj/item/organ/internal/brain,
|
||||
"eyes" = /obj/item/organ/internal/eyes)
|
||||
|
||||
/datum/species/shadow/ling/handle_life(var/mob/living/carbon/human/H)
|
||||
/datum/species/shadow/ling/handle_life(mob/living/carbon/human/H)
|
||||
if(!H.weakeyes)
|
||||
H.weakeyes = 1 //Makes them more vulnerable to flashes and flashbangs
|
||||
var/light_amount = 0
|
||||
@@ -60,12 +61,12 @@
|
||||
blood_color = "#CCCCCC"
|
||||
flesh_color = "#AAAAAA"
|
||||
|
||||
species_traits = list(NO_BLOOD, NO_BREATHE, RADIMMUNE)
|
||||
species_traits = list(NO_BLOOD, NO_BREATHE, RADIMMUNE, NO_EXAMINE)
|
||||
burn_mod = 1.1
|
||||
oxy_mod = 0
|
||||
heatmod = 1.1
|
||||
|
||||
/datum/species/shadow/ling/lesser/handle_life(var/mob/living/carbon/human/H)
|
||||
/datum/species/shadow/ling/lesser/handle_life(mob/living/carbon/human/H)
|
||||
if(!H.weakeyes)
|
||||
H.weakeyes = 1 //Makes them more vulnerable to flashes and flashbangs
|
||||
var/light_amount = 0
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
"brain" = /obj/item/organ/internal/brain/golem,
|
||||
) //Has default darksight of 2.
|
||||
|
||||
/datum/species/skeleton/handle_reagents(var/mob/living/carbon/human/H, var/datum/reagent/R)
|
||||
/datum/species/skeleton/handle_reagents(mob/living/carbon/human/H, datum/reagent/R)
|
||||
// Crazylemon is still silly
|
||||
if(R.id == "milk")
|
||||
H.heal_overall_damage(4,4)
|
||||
|
||||
@@ -1,3 +1,11 @@
|
||||
#define SLIMEPERSON_COLOR_SHIFT_TRIGGER 0.1
|
||||
#define SLIMEPERSON_ICON_UPDATE_PERIOD 200 // 20 seconds
|
||||
#define SLIMEPERSON_BLOOD_SCALING_FACTOR 5 // Used to adjust how much of an effect the blood has on the rate of color change. Higher is slower.
|
||||
|
||||
#define SLIMEPERSON_HUNGERCOST 50
|
||||
#define SLIMEPERSON_MINHUNGER 250
|
||||
#define SLIMEPERSON_REGROWTHDELAY 450 // 45 seconds
|
||||
|
||||
/datum/species/slime
|
||||
name = "Slime People"
|
||||
name_plural = "Slime People"
|
||||
@@ -41,33 +49,24 @@
|
||||
"is turning a dull, brown color and melting into a puddle!")
|
||||
|
||||
var/reagent_skin_coloring = FALSE
|
||||
var/datum/action/innate/regrow/grow
|
||||
var/datum/action/innate/slimecolor/recolor
|
||||
|
||||
var/datum/action/innate/regrow/grow = new()
|
||||
|
||||
species_abilities = list(
|
||||
/mob/living/carbon/human/verb/toggle_recolor_verb,
|
||||
/mob/living/carbon/human/proc/regrow_limbs
|
||||
)
|
||||
|
||||
/datum/species/slime/handle_post_spawn(var/mob/living/carbon/human/H)
|
||||
grow.Grant(H)
|
||||
/datum/species/slime/on_species_gain(mob/living/carbon/human/H)
|
||||
..()
|
||||
grow = new()
|
||||
grow.Grant(H)
|
||||
recolor = new()
|
||||
recolor.Grant(H)
|
||||
|
||||
/datum/action/innate/regrow
|
||||
name = "Regrow limbs"
|
||||
icon_icon = 'icons/effects/effects.dmi'
|
||||
button_icon_state = "greenglow"
|
||||
/datum/species/slime/on_species_loss(mob/living/carbon/human/H)
|
||||
..()
|
||||
if(grow)
|
||||
grow.Remove(H)
|
||||
if(recolor)
|
||||
recolor.Remove(H)
|
||||
|
||||
/datum/action/innate/regrow/Activate()
|
||||
var/mob/living/carbon/human/user = owner
|
||||
user.regrow_limbs()
|
||||
|
||||
|
||||
/datum/species/slime/handle_life(var/mob/living/carbon/human/H)
|
||||
//This is allegedly for code "style". Like a plaid sweater?
|
||||
#define SLIMEPERSON_COLOR_SHIFT_TRIGGER 0.1
|
||||
#define SLIMEPERSON_ICON_UPDATE_PERIOD 200 // 20 seconds
|
||||
#define SLIMEPERSON_BLOOD_SCALING_FACTOR 5 // Used to adjust how much of an effect the blood has on the rate of color change. Higher is slower.
|
||||
/datum/species/slime/handle_life(mob/living/carbon/human/H)
|
||||
// Slowly shifting to the color of the reagents
|
||||
if(reagent_skin_coloring && H.reagents.total_volume > SLIMEPERSON_COLOR_SHIFT_TRIGGER)
|
||||
var/blood_amount = H.blood_volume
|
||||
@@ -83,118 +82,99 @@
|
||||
H.update_body()
|
||||
..()
|
||||
|
||||
#undef SLIMEPERSON_COLOR_SHIFT_TRIGGER
|
||||
#undef SLIMEPERSON_ICON_UPDATE_PERIOD
|
||||
#undef SLIMEPERSON_BLOOD_SCALING_FACTOR
|
||||
/datum/action/innate/slimecolor
|
||||
name = "Toggle Recolor"
|
||||
check_flags = AB_CHECK_CONSCIOUS
|
||||
icon_icon = 'icons/effects/effects.dmi'
|
||||
button_icon_state = "greenglow"
|
||||
|
||||
/mob/living/carbon/human/proc/toggle_recolor(silent = FALSE)
|
||||
if(!isslimeperson(src))
|
||||
if(!silent)
|
||||
to_chat(src, "You're not a slime person!")
|
||||
return
|
||||
|
||||
var/datum/species/slime/S = dna.species
|
||||
/datum/action/innate/slimecolor/Activate()
|
||||
var/mob/living/carbon/human/H = owner
|
||||
var/datum/species/slime/S = H.dna.species
|
||||
if(S.reagent_skin_coloring)
|
||||
S.reagent_skin_coloring = TRUE
|
||||
if(!silent)
|
||||
to_chat(src, "You adjust your internal chemistry to filter out pigments from things you consume.")
|
||||
S.reagent_skin_coloring = FALSE
|
||||
to_chat(H, "You adjust your internal chemistry to filter out pigments from things you consume.")
|
||||
else
|
||||
S.reagent_skin_coloring = TRUE
|
||||
if(!silent)
|
||||
to_chat(src, "You adjust your internal chemistry to permit pigments in chemicals you consume to tint you.")
|
||||
to_chat(H, "You adjust your internal chemistry to permit pigments in chemicals you consume to tint you.")
|
||||
|
||||
/mob/living/carbon/human/verb/toggle_recolor_verb()
|
||||
set category = "IC"
|
||||
set name = "Toggle Reagent Recoloring"
|
||||
set desc = "While active, you'll slowly adjust your body's color to that of the reagents inside of you, moderated by how much blood you have."
|
||||
/datum/action/innate/regrow
|
||||
name = "Regrow limbs"
|
||||
check_flags = AB_CHECK_CONSCIOUS
|
||||
icon_icon = 'icons/effects/effects.dmi'
|
||||
button_icon_state = "greenglow"
|
||||
|
||||
toggle_recolor()
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/regrow_limbs()
|
||||
set category = "IC"
|
||||
set name = "Regrow Limbs"
|
||||
set desc = "Regrow one of your missing limbs at the cost of a large amount of hunger"
|
||||
|
||||
#define SLIMEPERSON_HUNGERCOST 50
|
||||
#define SLIMEPERSON_MINHUNGER 250
|
||||
#define SLIMEPERSON_REGROWTHDELAY 450 // 45 seconds
|
||||
|
||||
if(stat || paralysis || stunned)
|
||||
to_chat(src, "<span class='warning'>You cannot regenerate missing limbs in your current state.</span>")
|
||||
return
|
||||
|
||||
if(nutrition < SLIMEPERSON_MINHUNGER)
|
||||
to_chat(src, "<span class='warning'>You're too hungry to regenerate a limb!</span>")
|
||||
/datum/action/innate/regrow/Activate()
|
||||
var/mob/living/carbon/human/H = owner
|
||||
if(H.nutrition < SLIMEPERSON_MINHUNGER)
|
||||
to_chat(H, "<span class='warning'>You're too hungry to regenerate a limb!</span>")
|
||||
return
|
||||
|
||||
var/list/missing_limbs = list()
|
||||
for(var/l in bodyparts_by_name)
|
||||
var/obj/item/organ/external/E = bodyparts_by_name[l]
|
||||
for(var/l in H.bodyparts_by_name)
|
||||
var/obj/item/organ/external/E = H.bodyparts_by_name[l]
|
||||
if(!istype(E))
|
||||
var/list/limblist = dna.species.has_limbs[l]
|
||||
var/list/limblist = H.dna.species.has_limbs[l]
|
||||
var/obj/item/organ/external/limb = limblist["path"]
|
||||
var/parent_organ = initial(limb.parent_organ)
|
||||
var/obj/item/organ/external/parentLimb = bodyparts_by_name[parent_organ]
|
||||
var/obj/item/organ/external/parentLimb = H.bodyparts_by_name[parent_organ]
|
||||
if(!istype(parentLimb))
|
||||
continue
|
||||
missing_limbs[initial(limb.name)] = l
|
||||
|
||||
if(!missing_limbs.len)
|
||||
to_chat(src, "<span class='warning'>You're not missing any limbs!</span>")
|
||||
to_chat(H, "<span class='warning'>You're not missing any limbs!</span>")
|
||||
return
|
||||
|
||||
var/limb_select = input(src, "Choose a limb to regrow", "Limb Regrowth") as null|anything in missing_limbs
|
||||
var/limb_select = input(H, "Choose a limb to regrow", "Limb Regrowth") as null|anything in missing_limbs
|
||||
var/chosen_limb = missing_limbs[limb_select]
|
||||
|
||||
visible_message("<span class='notice'>[src] begins to hold still and concentrate on [p_their()] missing [limb_select]...</span>", "<span class='notice'>You begin to focus on regrowing your missing [limb_select]... (This will take [round(SLIMEPERSON_REGROWTHDELAY/10)] seconds, and you must hold still.)</span>")
|
||||
if(do_after(src, SLIMEPERSON_REGROWTHDELAY, needhand=0, target = src))
|
||||
if(stat || paralysis || stunned)
|
||||
to_chat(src, "<span class='warning'>You cannot regenerate missing limbs in your current state.</span>")
|
||||
H.visible_message("<span class='notice'>[H] begins to hold still and concentrate on [H.p_their()] missing [limb_select]...</span>", "<span class='notice'>You begin to focus on regrowing your missing [limb_select]... (This will take [round(SLIMEPERSON_REGROWTHDELAY/10)] seconds, and you must hold still.)</span>")
|
||||
if(do_after(H, SLIMEPERSON_REGROWTHDELAY, needhand = 0, target = H))
|
||||
if(H.incapacitated())
|
||||
to_chat(H, "<span class='warning'>You cannot regenerate missing limbs in your current state.</span>")
|
||||
return
|
||||
|
||||
if(nutrition < SLIMEPERSON_MINHUNGER)
|
||||
to_chat(src, "<span class='warning'>You're too hungry to regenerate a limb!</span>")
|
||||
if(H.nutrition < SLIMEPERSON_MINHUNGER)
|
||||
to_chat(H, "<span class='warning'>You're too hungry to regenerate a limb!</span>")
|
||||
return
|
||||
|
||||
var/obj/item/organ/external/O = bodyparts_by_name[chosen_limb]
|
||||
var/obj/item/organ/external/O = H.bodyparts_by_name[chosen_limb]
|
||||
|
||||
var/stored_brute = 0
|
||||
var/stored_burn = 0
|
||||
if(istype(O))
|
||||
to_chat(src, "<span class='warning'>You distribute the damaged tissue around your body, out of the way of your new pseudopod!</span>")
|
||||
to_chat(H, "<span class='warning'>You distribute the damaged tissue around your body, out of the way of your new pseudopod!</span>")
|
||||
var/obj/item/organ/external/doomedStump = O
|
||||
stored_brute = doomedStump.brute_dam
|
||||
stored_burn = doomedStump.burn_dam
|
||||
qdel(O)
|
||||
|
||||
var/limb_list = dna.species.has_limbs[chosen_limb]
|
||||
var/limb_list = H.dna.species.has_limbs[chosen_limb]
|
||||
var/obj/item/organ/external/limb_path = limb_list["path"]
|
||||
// Parent check
|
||||
var/obj/item/organ/external/potential_parent = bodyparts_by_name[initial(limb_path.parent_organ)]
|
||||
var/obj/item/organ/external/potential_parent = H.bodyparts_by_name[initial(limb_path.parent_organ)]
|
||||
if(!istype(potential_parent))
|
||||
to_chat(src, "<span class='danger'>You've lost the organ that you've been growing your new part on!</span>")
|
||||
to_chat(H, "<span class='danger'>You've lost the organ that you've been growing your new part on!</span>")
|
||||
return // No rayman for you
|
||||
// Grah this line will leave a "not used" warning, in spite of the fact that the new() proc WILL do the thing.
|
||||
// Bothersome.
|
||||
var/obj/item/organ/external/new_limb = new limb_path(src)
|
||||
var/obj/item/organ/external/new_limb = new limb_path(H)
|
||||
new_limb.open = 0 // This is just so that the compiler won't think that new_limb is unused, because the compiler is horribly stupid.
|
||||
adjustBruteLoss(stored_brute)
|
||||
adjustFireLoss(stored_burn)
|
||||
update_body()
|
||||
updatehealth()
|
||||
UpdateDamageIcon()
|
||||
nutrition -= SLIMEPERSON_HUNGERCOST
|
||||
visible_message("<span class='notice'>[src] finishes regrowing [p_their()] missing [new_limb]!</span>", "<span class='notice'>You finish regrowing your [limb_select]</span>")
|
||||
H.adjustBruteLoss(stored_brute)
|
||||
H.adjustFireLoss(stored_burn)
|
||||
H.update_body()
|
||||
H.updatehealth()
|
||||
H.UpdateDamageIcon()
|
||||
H.nutrition -= SLIMEPERSON_HUNGERCOST
|
||||
H.visible_message("<span class='notice'>[H] finishes regrowing [H.p_their()] missing [new_limb]!</span>", "<span class='notice'>You finish regrowing your [limb_select]</span>")
|
||||
else
|
||||
to_chat(src, "<span class='warning'>You need to hold still in order to regrow a limb!</span>")
|
||||
return
|
||||
to_chat(H, "<span class='warning'>You need to hold still in order to regrow a limb!</span>")
|
||||
|
||||
#undef SLIMEPERSON_COLOR_SHIFT_TRIGGER
|
||||
#undef SLIMEPERSON_ICON_UPDATE_PERIOD
|
||||
#undef SLIMEPERSON_BLOOD_SCALING_FACTOR
|
||||
|
||||
#undef SLIMEPERSON_HUNGERCOST
|
||||
#undef SLIMEPERSON_MINHUNGER
|
||||
#undef SLIMEPERSON_REGROWTHDELAY
|
||||
|
||||
/datum/species/slime/handle_pre_change(mob/living/carbon/human/H)
|
||||
..()
|
||||
if(reagent_skin_coloring)
|
||||
H.toggle_recolor(silent = 1)
|
||||
#undef SLIMEPERSON_REGROWTHDELAY
|
||||
@@ -54,5 +54,5 @@
|
||||
"is twisting their own neck!",
|
||||
"is holding their breath!")
|
||||
|
||||
/datum/species/tajaran/handle_death(var/mob/living/carbon/human/H)
|
||||
/datum/species/tajaran/handle_death(mob/living/carbon/human/H)
|
||||
H.stop_tail_wagging(1)
|
||||
@@ -56,21 +56,28 @@
|
||||
"is twisting their own neck!",
|
||||
"is holding their breath!")
|
||||
|
||||
var/datum/action/innate/tail_lash/lash = new()
|
||||
var/datum/action/innate/tail_lash/lash
|
||||
|
||||
|
||||
/datum/species/unathi/handle_post_spawn(var/mob/living/carbon/human/H)
|
||||
lash.Grant(H)
|
||||
/datum/species/unathi/on_species_gain(mob/living/carbon/human/H)
|
||||
..()
|
||||
lash = new
|
||||
lash.Grant(H)
|
||||
|
||||
/datum/species/unathi/on_species_loss(mob/living/carbon/human/H)
|
||||
..()
|
||||
if(lash)
|
||||
lash.Remove(H)
|
||||
|
||||
/datum/action/innate/tail_lash
|
||||
name = "Tail lash"
|
||||
icon_icon = 'icons/effects/effects.dmi'
|
||||
button_icon_state = "tail"
|
||||
check_flags = AB_CHECK_LYING | AB_CHECK_CONSCIOUS | AB_CHECK_STUNNED
|
||||
|
||||
/datum/action/innate/tail_lash/Activate()
|
||||
var/mob/living/carbon/human/user = owner
|
||||
if(!user.restrained() || !user.buckled)
|
||||
if((user.restrained() && user.pulledby) || user.buckled)
|
||||
to_chat(user, "<span class='warning'>You need freedom of movement to tail lash!</span>")
|
||||
return
|
||||
if(user.getStaminaLoss() >= 50)
|
||||
@@ -80,13 +87,22 @@
|
||||
var/obj/item/organ/external/E = C.get_organ(pick("l_leg", "r_leg", "l_foot", "r_foot", "groin"))
|
||||
if(E)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
user.visible_message("<span class='danger'>[src] smacks [C] in [E] with their tail! </span>", "<span class='danger'>You hit [C] in [E] with your tail!</span>")
|
||||
user.visible_message("<span class='danger'>[user] smacks [C] in [E] with their tail! </span>", "<span class='danger'>You hit [C] in [E] with your tail!</span>")
|
||||
user.adjustStaminaLoss(15)
|
||||
C.apply_damage(5, BRUTE, E)
|
||||
user.spin(20, 1)
|
||||
playsound(user.loc, 'sound/weapons/slash.ogg', 50, 0)
|
||||
add_attack_logs(user, C, "tail whipped")
|
||||
if(user.restrained())
|
||||
if(prob(50))
|
||||
user.Weaken(5)
|
||||
user.visible_message("<span class='danger'>[user] loses [user.p_their()] balance!</span>", "<span class='danger'>You lose your balance!</span>")
|
||||
return
|
||||
if(user.getStaminaLoss() >= 60) //Bit higher as you don't need to start, just would need to keep going with the tail lash.
|
||||
to_chat(user, "<span class='warning'>You run out of momentum!</span>")
|
||||
return
|
||||
|
||||
|
||||
|
||||
/datum/species/unathi/handle_death(var/mob/living/carbon/human/H)
|
||||
H.stop_tail_wagging(1)
|
||||
/datum/species/unathi/handle_death(mob/living/carbon/human/H)
|
||||
H.stop_tail_wagging(1)
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
name_plural = "Vox"
|
||||
icobase = 'icons/mob/human_races/vox/r_vox.dmi'
|
||||
deform = 'icons/mob/human_races/vox/r_def_vox.dmi'
|
||||
dangerous_existence = TRUE
|
||||
language = "Vox-pidgin"
|
||||
tail = "voxtail"
|
||||
speech_sounds = list('sound/voice/shriek1.ogg')
|
||||
@@ -77,7 +78,7 @@
|
||||
"is holding their breath!",
|
||||
"is deeply inhaling oxygen!")
|
||||
|
||||
/datum/species/vox/handle_death(var/mob/living/carbon/human/H)
|
||||
/datum/species/vox/handle_death(mob/living/carbon/human/H)
|
||||
H.stop_tail_wagging(1)
|
||||
|
||||
/datum/species/vox/after_equip_job(datum/job/J, mob/living/carbon/human/H)
|
||||
@@ -95,13 +96,12 @@
|
||||
H.internal = H.l_hand
|
||||
H.update_action_buttons_icon()
|
||||
|
||||
/datum/species/vox/handle_post_spawn(var/mob/living/carbon/human/H)
|
||||
/datum/species/vox/on_species_gain(mob/living/carbon/human/H)
|
||||
..()
|
||||
updatespeciescolor(H)
|
||||
H.update_icons()
|
||||
//H.verbs += /mob/living/carbon/human/proc/leap
|
||||
..()
|
||||
|
||||
/datum/species/vox/updatespeciescolor(var/mob/living/carbon/human/H, var/owner_sensitive = 1) //Handling species-specific skin-tones for the Vox race.
|
||||
/datum/species/vox/updatespeciescolor(mob/living/carbon/human/H, owner_sensitive = 1) //Handling species-specific skin-tones for the Vox race.
|
||||
if(H.dna.species.bodyflags & HAS_ICON_SKIN_TONE) //Making sure we don't break Armalis.
|
||||
var/new_icobase = 'icons/mob/human_races/vox/r_vox.dmi' //Default Green Vox.
|
||||
var/new_deform = 'icons/mob/human_races/vox/r_def_vox.dmi' //Default Green Vox.
|
||||
@@ -132,25 +132,21 @@
|
||||
H.change_icobase(new_icobase, new_deform, owner_sensitive) //Update the icobase/deform of all our organs, but make sure we don't mess with frankenstein limbs in doing so.
|
||||
H.update_dna()
|
||||
|
||||
/datum/species/vox/handle_reagents(var/mob/living/carbon/human/H, var/datum/reagent/R)
|
||||
/datum/species/vox/handle_reagents(mob/living/carbon/human/H, datum/reagent/R)
|
||||
if(R.id == "oxygen") //Armalis are above such petty things.
|
||||
H.adjustToxLoss(1*REAGENTS_EFFECT_MULTIPLIER) //Same as plasma.
|
||||
H.reagents.remove_reagent(R.id, REAGENTS_METABOLISM)
|
||||
return 0 //Handling reagent removal on our own.
|
||||
return FALSE //Handling reagent removal on our own.
|
||||
|
||||
return ..()
|
||||
|
||||
/datum/species/vox/armalis/handle_post_spawn(var/mob/living/carbon/human/H)
|
||||
H.verbs += /mob/living/carbon/human/proc/leap
|
||||
H.verbs += /mob/living/carbon/human/proc/gut
|
||||
..()
|
||||
|
||||
/datum/species/vox/armalis
|
||||
name = "Vox Armalis"
|
||||
name_plural = "Vox Armalis"
|
||||
icobase = 'icons/mob/human_races/r_armalis.dmi'
|
||||
deform = 'icons/mob/human_races/r_armalis.dmi'
|
||||
unarmed_type = /datum/unarmed_attack/claws/armalis
|
||||
blacklisted = TRUE
|
||||
|
||||
warning_low_pressure = 50
|
||||
hazard_low_pressure = 0
|
||||
@@ -198,4 +194,4 @@
|
||||
"is huffing oxygen!")
|
||||
|
||||
/datum/species/vox/armalis/handle_reagents() //Skip the Vox oxygen reagent toxicity. Armalis are above such things.
|
||||
return 1
|
||||
return TRUE
|
||||
@@ -48,5 +48,5 @@
|
||||
"is twisting their own neck!",
|
||||
"is holding their breath!")
|
||||
|
||||
/datum/species/vulpkanin/handle_death(var/mob/living/carbon/human/H)
|
||||
/datum/species/vulpkanin/handle_death(mob/living/carbon/human/H)
|
||||
H.stop_tail_wagging(1)
|
||||
@@ -3,11 +3,11 @@
|
||||
name_plural = "Wryn"
|
||||
icobase = 'icons/mob/human_races/r_wryn.dmi'
|
||||
deform = 'icons/mob/human_races/r_wryn.dmi'
|
||||
blacklisted = TRUE
|
||||
language = "Wryn Hivemind"
|
||||
tail = "wryntail"
|
||||
punchdamagelow = 0
|
||||
punchdamagehigh = 1
|
||||
//primitive = /mob/living/carbon/monkey/wryn
|
||||
slowdown = 1
|
||||
warning_low_pressure = -300
|
||||
hazard_low_pressure = 1
|
||||
@@ -49,11 +49,11 @@
|
||||
default_hair = "Antennae"
|
||||
|
||||
|
||||
/datum/species/wryn/handle_death(var/mob/living/carbon/human/H)
|
||||
/datum/species/wryn/handle_death(mob/living/carbon/human/H)
|
||||
for(var/mob/living/carbon/C in living_mob_list)
|
||||
if(C.get_int_organ(/obj/item/organ/internal/wryn/hivenode))
|
||||
to_chat(C, "<span class='danger'><B>Your antennae tingle as you are overcome with pain...</B></span>")
|
||||
to_chat(C, "<span class='danger'>It feels like part of you has died.</span>")
|
||||
to_chat(C, "<span class='danger'>It feels like part of you has died.</span>") // This is bullshit
|
||||
|
||||
/datum/species/wryn/harm(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style)
|
||||
if(target.handcuffed && target.get_int_organ(/obj/item/organ/internal/wryn/hivenode))
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
/mob/living/silicon/decoy/death(gibbed)
|
||||
if(stat == DEAD) return
|
||||
if(stat == DEAD)
|
||||
return
|
||||
stat = DEAD
|
||||
icon_state = "ai-crash"
|
||||
spawn(10)
|
||||
explosion(loc, 3, 6, 12, 15)
|
||||
|
||||
for(var/obj/machinery/ai_status_display/O in world) //change status
|
||||
O.mode = 2
|
||||
return ..(gibbed)
|
||||
if(atoms_share_level(O, src))
|
||||
O.mode = 2
|
||||
..(0)
|
||||
gib()
|
||||
@@ -4,9 +4,54 @@
|
||||
icon_state = "ai"
|
||||
anchored = 1 // -- TLE
|
||||
canmove = 0
|
||||
a_intent = INTENT_HARM // This is apparently the only thing that stops other mobs walking through them as if they were thin air.
|
||||
|
||||
/mob/living/silicon/decoy/New()
|
||||
src.icon = 'icons/mob/AI.dmi'
|
||||
src.icon_state = "ai"
|
||||
src.anchored = 1
|
||||
src.canmove = 0
|
||||
src.canmove = 0
|
||||
|
||||
/mob/living/silicon/decoy/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/aicard))
|
||||
to_chat(user, "<span class='warning'>You cannot find an intellicard slot on [src].</span>")
|
||||
return TRUE
|
||||
else
|
||||
return ..()
|
||||
|
||||
/mob/living/silicon/decoy/syndicate
|
||||
faction = list("syndicate")
|
||||
name = "R.O.D.G.E.R"
|
||||
desc = "Red Operations, Depot General Emission Regulator"
|
||||
icon_state = "ai-magma"
|
||||
|
||||
/mob/living/silicon/decoy/syndicate/New()
|
||||
. = ..()
|
||||
icon_state = "ai-magma"
|
||||
|
||||
/mob/living/silicon/decoy/syndicate/depot
|
||||
var/raised_alert = FALSE
|
||||
|
||||
/mob/living/silicon/decoy/syndicate/depot/proc/raise_alert()
|
||||
raised_alert = TRUE
|
||||
var/area/syndicate_depot/core/depotarea = get_area(src) // Cannot use myArea or areaMaster as neither will be defined for this mob type
|
||||
if(istype(depotarea))
|
||||
depotarea.increase_alert("AI Unit Offline")
|
||||
else
|
||||
say("Connection failure!")
|
||||
|
||||
/mob/living/silicon/decoy/syndicate/depot/death(pass)
|
||||
if(!raised_alert)
|
||||
raise_alert()
|
||||
. = ..(pass)
|
||||
|
||||
/mob/living/silicon/decoy/syndicate/depot/adjustBruteLoss(dmg)
|
||||
. = ..(dmg)
|
||||
updatehealth()
|
||||
|
||||
/mob/living/silicon/decoy/syndicate/depot/adjustFireLoss(dmg)
|
||||
. = ..(dmg)
|
||||
updatehealth()
|
||||
|
||||
/mob/living/silicon/decoy/syndicate/depot/ex_act(severity)
|
||||
adjustBruteLoss(250)
|
||||
@@ -1,10 +1,5 @@
|
||||
/mob/living/silicon/decoy/Life(seconds, times_fired)
|
||||
if(src.stat == 2)
|
||||
return
|
||||
else
|
||||
if(src.health <= config.health_threshold_dead && src.stat != 2)
|
||||
death()
|
||||
return
|
||||
return
|
||||
|
||||
|
||||
/mob/living/silicon/decoy/updatehealth()
|
||||
@@ -13,3 +8,11 @@
|
||||
stat = CONSCIOUS
|
||||
else
|
||||
health = 100 - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss()
|
||||
update_stat()
|
||||
|
||||
|
||||
/mob/living/silicon/decoy/update_stat()
|
||||
if(stat == DEAD)
|
||||
return
|
||||
if(health <= 0)
|
||||
death()
|
||||
@@ -204,6 +204,10 @@
|
||||
if(disabled)
|
||||
return
|
||||
|
||||
ed209_ai()
|
||||
|
||||
|
||||
/mob/living/simple_animal/bot/ed209/proc/ed209_ai()
|
||||
var/list/targets = list()
|
||||
for(var/mob/living/carbon/C in view(7, src)) //Let's find us a target
|
||||
var/threatlevel = 0
|
||||
|
||||
@@ -45,6 +45,7 @@
|
||||
var/treat_virus = 1 //If on, the bot will attempt to treat viral infections, curing them if possible.
|
||||
var/shut_up = 0 //self explanatory :)
|
||||
var/syndicate_aligned = FALSE // Will it only treat operatives?
|
||||
var/drops_parts = TRUE
|
||||
|
||||
/mob/living/simple_animal/bot/medbot/tox
|
||||
skin = "tox"
|
||||
@@ -77,6 +78,7 @@
|
||||
name = "Suspicious Medibot"
|
||||
desc = "You'd better have insurance!"
|
||||
skin = "bezerk"
|
||||
faction = list("syndicate")
|
||||
treatment_oxy = "perfluorodecalin"
|
||||
treatment_brute = "bicaridine"
|
||||
treatment_fire = "kelotane"
|
||||
@@ -91,6 +93,11 @@
|
||||
..()
|
||||
Radio.syndie = 1
|
||||
|
||||
/mob/living/simple_animal/bot/medbot/syndicate/emagged
|
||||
emagged = 2
|
||||
declare_crit = 0
|
||||
drops_parts = FALSE
|
||||
|
||||
/mob/living/simple_animal/bot/medbot/update_icon()
|
||||
overlays.Cut()
|
||||
if(skin)
|
||||
@@ -554,36 +561,37 @@
|
||||
visible_message("<span class='userdanger'>[src] blows apart!</span>")
|
||||
var/turf/Tsec = get_turf(src)
|
||||
|
||||
switch(skin)
|
||||
if("ointment")
|
||||
new /obj/item/storage/firstaid/fire/empty(Tsec)
|
||||
if("tox")
|
||||
new /obj/item/storage/firstaid/toxin/empty(Tsec)
|
||||
if("o2")
|
||||
new /obj/item/storage/firstaid/o2/empty(Tsec)
|
||||
if("brute")
|
||||
new /obj/item/storage/firstaid/brute/empty(Tsec)
|
||||
if("adv")
|
||||
new /obj/item/storage/firstaid/adv/empty(Tsec)
|
||||
if("bezerk")
|
||||
var/obj/item/storage/firstaid/tactical/empty/T = new(Tsec)
|
||||
T.syndicate_aligned = syndicate_aligned //This is a special case since Syndicate medibots and the mysterious medibot look the same; we also dont' want crew building Syndicate medibots if the mysterious medibot blows up.
|
||||
if("fish")
|
||||
new /obj/item/storage/firstaid/aquatic_kit(Tsec)
|
||||
else
|
||||
new /obj/item/storage/firstaid(Tsec)
|
||||
if(drops_parts)
|
||||
switch(skin)
|
||||
if("ointment")
|
||||
new /obj/item/storage/firstaid/fire/empty(Tsec)
|
||||
if("tox")
|
||||
new /obj/item/storage/firstaid/toxin/empty(Tsec)
|
||||
if("o2")
|
||||
new /obj/item/storage/firstaid/o2/empty(Tsec)
|
||||
if("brute")
|
||||
new /obj/item/storage/firstaid/brute/empty(Tsec)
|
||||
if("adv")
|
||||
new /obj/item/storage/firstaid/adv/empty(Tsec)
|
||||
if("bezerk")
|
||||
var/obj/item/storage/firstaid/tactical/empty/T = new(Tsec)
|
||||
T.syndicate_aligned = syndicate_aligned //This is a special case since Syndicate medibots and the mysterious medibot look the same; we also dont' want crew building Syndicate medibots if the mysterious medibot blows up.
|
||||
if("fish")
|
||||
new /obj/item/storage/firstaid/aquatic_kit(Tsec)
|
||||
else
|
||||
new /obj/item/storage/firstaid(Tsec)
|
||||
|
||||
new /obj/item/assembly/prox_sensor(Tsec)
|
||||
new /obj/item/assembly/prox_sensor(Tsec)
|
||||
|
||||
new /obj/item/healthanalyzer(Tsec)
|
||||
new /obj/item/healthanalyzer(Tsec)
|
||||
|
||||
if(prob(50))
|
||||
new /obj/item/robot_parts/l_arm(Tsec)
|
||||
|
||||
if(reagent_glass)
|
||||
reagent_glass.forceMove(Tsec)
|
||||
reagent_glass = null
|
||||
|
||||
if(prob(50))
|
||||
new /obj/item/robot_parts/l_arm(Tsec)
|
||||
|
||||
if(emagged && prob(25))
|
||||
playsound(loc, 'sound/voice/minsult.ogg', 50, 0)
|
||||
|
||||
|
||||
@@ -0,0 +1,216 @@
|
||||
|
||||
/mob/living/simple_animal/bot/ed209/syndicate
|
||||
name = "Syndicate Sentry Bot"
|
||||
desc = "A syndicate security bot."
|
||||
model = "Guardian"
|
||||
icon = 'icons/mecha/mecha.dmi'
|
||||
icon_state = "darkgygax"
|
||||
radio_channel = "Syndicate"
|
||||
health = 300
|
||||
maxHealth = 300
|
||||
declare_arrests = 0
|
||||
idcheck = 1
|
||||
arrest_type = 1
|
||||
auto_patrol = 1
|
||||
emagged = 2
|
||||
faction = list("syndicate")
|
||||
shoot_sound = 'sound/weapons/wave.ogg'
|
||||
anchored = 1
|
||||
pressure_resistance = 100 //100 kPa difference required to push
|
||||
throw_pressure_limit = 120
|
||||
window_id = "syndiebot"
|
||||
window_name = "Syndicate Bot Interface"
|
||||
var/turf/saved_turf
|
||||
var/stepsound = 'sound/mecha/mechstep.ogg'
|
||||
var/area/syndicate_depot/core/depotarea
|
||||
var/raised_alert = FALSE
|
||||
var/pathing_failed = FALSE
|
||||
var/turf/spawn_turf
|
||||
|
||||
/mob/living/simple_animal/bot/ed209/syndicate/New()
|
||||
..()
|
||||
if(access_card)
|
||||
access_card.access = list(access_syndicate, access_syndicate_leader)
|
||||
set_weapon()
|
||||
update_icon()
|
||||
spawn_turf = get_turf(src)
|
||||
|
||||
|
||||
/mob/living/simple_animal/bot/ed209/syndicate/update_icon()
|
||||
icon_state = initial(icon_state)
|
||||
|
||||
/mob/living/simple_animal/bot/ed209/syndicate/turn_on()
|
||||
. = ..()
|
||||
update_icon()
|
||||
|
||||
/mob/living/simple_animal/bot/ed209/syndicate/turn_off()
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
/mob/living/simple_animal/bot/ed209/syndicate/get_controls(mob/user)
|
||||
to_chat(user, "<span class='warning'>[src] has no accessible control panel!</span>")
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/bot/ed209/syndicate/show_controls(mob/M)
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/bot/ed209/syndicate/Topic(href, href_list)
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/bot/ed209/syndicate/retaliate(mob/living/carbon/human/H)
|
||||
if(!H)
|
||||
return
|
||||
target = H
|
||||
mode = BOT_HUNT
|
||||
|
||||
/mob/living/simple_animal/bot/ed209/syndicate/emag_act(mob/user)
|
||||
to_chat(user, "<span class='warning'>[src] has no card reader slot!</span>")
|
||||
|
||||
/mob/living/simple_animal/bot/ed209/syndicate/ed209_ai()
|
||||
var/turf/current_turf = get_turf(src)
|
||||
if(saved_turf && current_turf != saved_turf)
|
||||
playsound(loc, stepsound, 40, 1)
|
||||
if(spawn_turf && !atoms_share_level(src, spawn_turf))
|
||||
raise_alert("[src] lost in space.")
|
||||
raised_alert = FALSE
|
||||
raise_alert("[src] activated self-destruct.")
|
||||
qdel(src)
|
||||
saved_turf = current_turf
|
||||
switch(mode)
|
||||
if(BOT_IDLE)
|
||||
walk_to(src,0)
|
||||
look_for_perp()
|
||||
if(!mode && auto_patrol)
|
||||
mode = BOT_START_PATROL
|
||||
if(BOT_HUNT)
|
||||
if(frustration >= 8)
|
||||
walk_to(src,0)
|
||||
back_to_idle()
|
||||
if(target)
|
||||
if(isliving(target))
|
||||
if(target.stat == DEAD)
|
||||
back_to_idle()
|
||||
return
|
||||
shootAt(target)
|
||||
var/turf/olddist = get_dist(src, target)
|
||||
walk_to(src, target,1,4)
|
||||
if((get_dist(src, target)) >= (olddist))
|
||||
frustration++
|
||||
else
|
||||
frustration = 0
|
||||
else
|
||||
back_to_idle()
|
||||
if(BOT_START_PATROL)
|
||||
look_for_perp()
|
||||
start_patrol()
|
||||
if(BOT_PATROL)
|
||||
look_for_perp()
|
||||
bot_patrol()
|
||||
else
|
||||
back_to_idle()
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/bot/ed209/syndicate/look_for_perp()
|
||||
if(disabled)
|
||||
return
|
||||
for(var/mob/M in view(7, src))
|
||||
if(M.invisibility > see_invisible)
|
||||
continue
|
||||
if("syndicate" in M.faction)
|
||||
continue
|
||||
if(M.stat == DEAD)
|
||||
continue
|
||||
if((M.name == oldtarget_name) && (world.time < last_found + 100))
|
||||
continue
|
||||
target = M
|
||||
oldtarget_name = M.name
|
||||
mode = BOT_HUNT
|
||||
spawn(0)
|
||||
handle_automated_action()
|
||||
break
|
||||
for(var/obj/spacepod/P in view(7, src))
|
||||
if((P.name == oldtarget_name) && (world.time < last_found + 100))
|
||||
continue
|
||||
if(!P.pilot)
|
||||
continue
|
||||
if("syndicate" in P.pilot.faction)
|
||||
continue
|
||||
if(P.pilot.stat == DEAD)
|
||||
continue
|
||||
target = P
|
||||
oldtarget_name = P.name
|
||||
mode = BOT_HUNT
|
||||
spawn(0)
|
||||
handle_automated_action()
|
||||
break
|
||||
|
||||
|
||||
/mob/living/simple_animal/bot/ed209/syndicate/shootAt(atom/target)
|
||||
if(lastfired && world.time - lastfired < shot_delay)
|
||||
return
|
||||
lastfired = world.time
|
||||
var/obj/item/projectile/P = new projectile(loc)
|
||||
playsound(loc, shoot_sound, 100, 1)
|
||||
P.current = loc
|
||||
P.starting = loc
|
||||
P.firer = src
|
||||
P.yo = target.y - loc.y
|
||||
P.xo = target.x - loc.x
|
||||
P.original = target
|
||||
P.fire()
|
||||
|
||||
/mob/living/simple_animal/bot/ed209/syndicate/explode()
|
||||
if (!QDELETED(src))
|
||||
if(depotarea)
|
||||
depotarea.list_remove(src, depotarea.guard_list)
|
||||
walk_to(src,0)
|
||||
visible_message("<span class='userdanger'>[src] blows apart!</span>")
|
||||
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
|
||||
s.set_up(3, 1, src)
|
||||
s.start()
|
||||
new /obj/effect/decal/cleanable/blood/oil(loc)
|
||||
var/obj/effect/decal/mecha_wreckage/gygax/dark/wreck = new /obj/effect/decal/mecha_wreckage/gygax/dark(loc)
|
||||
wreck.name = "sentry bot wreckage"
|
||||
|
||||
raise_alert("[src] destroyed.")
|
||||
qdel(src)
|
||||
|
||||
/mob/living/simple_animal/bot/ed209/syndicate/set_weapon()
|
||||
projectile = /obj/item/projectile/bullet/a40mm
|
||||
|
||||
/mob/living/simple_animal/bot/ed209/syndicate/emp_act(severity)
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/bot/ed209/UnarmedAttack(atom/A)
|
||||
if(!on)
|
||||
return
|
||||
shootAt(A)
|
||||
|
||||
/mob/living/simple_animal/bot/ed209/syndicate/cuff(mob/living/carbon/C)
|
||||
shootAt(C)
|
||||
|
||||
/mob/living/simple_animal/bot/ed209/syndicate/stun_attack(mob/living/carbon/C)
|
||||
shootAt(C)
|
||||
|
||||
/mob/living/simple_animal/bot/ed209/syndicate/speak()
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/bot/ed209/syndicate/Process_Spacemove(movement_dir = 0)
|
||||
return 1
|
||||
|
||||
/mob/living/simple_animal/bot/ed209/syndicate/start_patrol()
|
||||
if(tries >= BOT_STEP_MAX_RETRIES)
|
||||
if(!pathing_failed)
|
||||
pathing_failed = TRUE
|
||||
var/failmsg = "Depot: [src] at [loc.x],[loc.y],[loc.z] lacks patrol target."
|
||||
if(istype(patrol_target))
|
||||
failmsg = "Depot: [src] at [loc.x],[loc.y],[loc.z] cannot reach [patrol_target.x],[patrol_target.y]"
|
||||
log_debug(failmsg)
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/bot/ed209/syndicate/proc/raise_alert(reason)
|
||||
if(raised_alert)
|
||||
return
|
||||
raised_alert = TRUE
|
||||
if(depotarea)
|
||||
depotarea.increase_alert(reason)
|
||||
@@ -115,6 +115,11 @@
|
||||
corpseidjob = "Operative"
|
||||
corpseidaccess = "Syndicate"
|
||||
|
||||
/obj/effect/landmark/mobcorpse/syndicateautogib/createCorpse()
|
||||
var/mob/living/carbon/human/M = new /mob/living/carbon/human(loc)
|
||||
M.real_name = src.name
|
||||
M.gib()
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/effect/landmark/mobcorpse/clown
|
||||
|
||||
@@ -39,17 +39,20 @@
|
||||
armour_penetration = 28
|
||||
status_flags = 0
|
||||
loot = list(/obj/effect/landmark/mobcorpse/syndicatesoldier, /obj/item/melee/energy/sword/saber/red, /obj/item/shield/energy)
|
||||
var/melee_block_chance = 20
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
user.do_attack_animation(src)
|
||||
if(O.force)
|
||||
if(prob(80))
|
||||
if(prob(melee_block_chance))
|
||||
visible_message("<span class='boldwarning'>[src] blocks the [O] with its shield! </span>")
|
||||
else
|
||||
var/damage = O.force
|
||||
if(O.damtype == STAMINA)
|
||||
damage = 0
|
||||
health -= damage
|
||||
visible_message("<span class='boldwarning'>[src] has been attacked with the [O] by [user]. </span>")
|
||||
else
|
||||
visible_message("<span class='boldwarning'>[src] blocks the [O] with its shield! </span>")
|
||||
playsound(loc, O.hitsound, 25, 1, -1)
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>This weapon is ineffective, it does no damage.</span>")
|
||||
@@ -65,19 +68,182 @@
|
||||
visible_message("<span class='danger'>[src] blocks [Proj] with its shield!</span>")
|
||||
return 0
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib
|
||||
loot = list(/obj/effect/landmark/mobcorpse/syndicateautogib)
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/space
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot
|
||||
name = "Syndicate Operative"
|
||||
force_threshold = 6 // Prevents people using punches to bypass eshield
|
||||
robust_searching = 1 // Together with stat_attack, ensures dionae/etc that regen are killed properly
|
||||
stat_attack = 1
|
||||
universal_speak = 1
|
||||
melee_block_chance = 40
|
||||
var/area/syndicate_depot/core/depotarea
|
||||
var/raised_alert = FALSE
|
||||
var/alert_on_death = FALSE
|
||||
var/alert_on_timeout = FALSE
|
||||
var/alert_on_spacing = TRUE
|
||||
var/alert_on_shield_breach = FALSE
|
||||
var/seen_enemy = FALSE
|
||||
var/seen_enemy_name = null
|
||||
var/seen_revived_enemy = FALSE
|
||||
var/aggro_cycles = 0
|
||||
var/scan_cycles = 0
|
||||
var/shield_key = FALSE
|
||||
var/turf/spawn_turf
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/New()
|
||||
..()
|
||||
name = "[name] [pick(last_names)]"
|
||||
depotarea = areaMaster
|
||||
spawn_turf = get_turf(src)
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/Aggro()
|
||||
. = ..()
|
||||
if(target && istype(depotarea))
|
||||
if(!seen_enemy)
|
||||
seen_enemy = TRUE
|
||||
playsound(loc, 'sound/weapons/saberon.ogg', 35, 1)
|
||||
if(alert_on_shield_breach)
|
||||
if(depotarea.shield_list.len)
|
||||
raise_alert("[name] reports that an intruder is trying to breach the armory shield!")
|
||||
alert_on_shield_breach = FALSE
|
||||
raised_alert = FALSE
|
||||
alert_on_death = TRUE
|
||||
if(isliving(target))
|
||||
var/mob/living/M = target
|
||||
depotarea.list_add(M, depotarea.hostile_list)
|
||||
if(M.mind && M.mind.special_role == SPECIAL_ROLE_TRAITOR)
|
||||
depotarea.saw_double_agent(M)
|
||||
depotarea.declare_started()
|
||||
seen_enemy_name = target.name
|
||||
if(istype(target, /obj/mecha))
|
||||
depotarea.saw_mech(target)
|
||||
if(istype(target, /obj/spacepod))
|
||||
depotarea.saw_pod(target)
|
||||
if(depotarea.list_includes(target, depotarea.dead_list))
|
||||
seen_revived_enemy = TRUE
|
||||
raise_alert("[name] reports intruder [target] has returned from death!")
|
||||
depotarea.list_remove(target, depotarea.dead_list)
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/handle_automated_action()
|
||||
if(seen_enemy)
|
||||
aggro_cycles++
|
||||
if(alert_on_timeout && !raised_alert && aggro_cycles >= 60)
|
||||
raise_alert("[name] has reported contact with hostile entity: [seen_enemy_name]")
|
||||
if(scan_cycles >= 15 && istype(depotarea))
|
||||
scan_cycles = 0
|
||||
if(!atoms_share_level(src, spawn_turf))
|
||||
if(alert_on_spacing)
|
||||
raise_alert("[src] lost in space.")
|
||||
death()
|
||||
return
|
||||
for(var/mob/living/body in hearers(vision_range, targets_from))
|
||||
if(body.stat != DEAD)
|
||||
continue
|
||||
if(depotarea.list_includes(body, depotarea.dead_list))
|
||||
continue
|
||||
if(faction_check(body))
|
||||
continue
|
||||
say("Target [body]... terminated.")
|
||||
depotarea.list_add(body, depotarea.dead_list)
|
||||
pointed(body)
|
||||
else
|
||||
scan_cycles++
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/proc/raise_alert(var/reason)
|
||||
if(istype(depotarea) && (!raised_alert || seen_revived_enemy) && !depotarea.used_self_destruct)
|
||||
raised_alert = TRUE
|
||||
say("Intruder!")
|
||||
depotarea.increase_alert(reason)
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/death()
|
||||
if(alert_on_death)
|
||||
if(seen_enemy_name)
|
||||
raise_alert("[name] has died in combat with [seen_enemy_name].")
|
||||
else
|
||||
raise_alert("[name] has died.")
|
||||
if(shield_key && depotarea)
|
||||
depotarea.shields_key_check()
|
||||
if(depotarea)
|
||||
depotarea.list_remove(src, depotarea.guard_list)
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/CanPass(atom/movable/mover, turf/target, height=0)
|
||||
if(isliving(mover))
|
||||
var/mob/living/blocker = mover
|
||||
if(faction_check(blocker))
|
||||
return 1
|
||||
return ..(mover, target, height)
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/officer
|
||||
name = "Syndicate Officer"
|
||||
alert_on_death = TRUE
|
||||
alert_on_timeout = TRUE
|
||||
melee_block_chance = 60
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/armory
|
||||
name = "Syndicate Quartermaster"
|
||||
icon_state = "syndicatemeleespace"
|
||||
icon_living = "syndicatemeleespace"
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minbodytemp = 0
|
||||
maxHealth = 250
|
||||
health = 250
|
||||
melee_block_chance = 80
|
||||
alert_on_timeout = TRUE
|
||||
alert_on_shield_breach = TRUE
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/armory/death()
|
||||
if(depotarea)
|
||||
depotarea.declare_finished()
|
||||
return ..()
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/armory/Initialize()
|
||||
. = ..()
|
||||
if(istype(depotarea))
|
||||
var/list/key_candidates = list()
|
||||
for(var/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/officer/O in living_mob_list)
|
||||
if(O == src)
|
||||
continue
|
||||
key_candidates += O
|
||||
if(key_candidates.len)
|
||||
var/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/officer/O = pick(key_candidates)
|
||||
O.shield_key = TRUE
|
||||
depotarea.shields_up()
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/space
|
||||
name = "Syndicate Backup"
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minbodytemp = 0
|
||||
icon_state = "syndicatemeleespace"
|
||||
icon_living = "syndicatemeleespace"
|
||||
speed = 1
|
||||
wander = 0
|
||||
alert_on_spacing = FALSE
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/space/Process_Spacemove(var/movement_dir = 0)
|
||||
return
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/space
|
||||
name = "Syndicate Commando"
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minbodytemp = 0
|
||||
icon_state = "syndicatemeleespace"
|
||||
icon_living = "syndicatemeleespace"
|
||||
speed = 1
|
||||
loot = list(/obj/effect/landmark/mobcorpse/syndicatecommando, /obj/item/melee/energy/sword/saber/red, /obj/item/shield/energy)
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/space/Process_Spacemove(var/movement_dir = 0)
|
||||
return
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/ranged
|
||||
ranged = 1
|
||||
rapid = 1
|
||||
@@ -97,10 +263,11 @@
|
||||
speed = 1
|
||||
loot = list(/obj/effect/landmark/mobcorpse/syndicatecommando, /obj/item/gun/projectile/automatic/c20r)
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/ranged/space/Process_Spacemove(var/movement_dir = 0)
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/ranged/space/autogib
|
||||
loot = list(/obj/effect/landmark/mobcorpse/syndicateautogib)
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/viscerator
|
||||
|
||||
@@ -61,7 +61,8 @@
|
||||
var/obj/item/clothing/accessory/petcollar/collar = null
|
||||
var/can_collar = 0 // can add collar to mob or not
|
||||
|
||||
//Hot simple_animal baby making vars
|
||||
//Hot simple_animal baby making vars
|
||||
|
||||
var/childtype = null
|
||||
var/scan_ready = 1
|
||||
var/simplespecies //Sorry, no spider+corgi buttbabies.
|
||||
@@ -570,3 +571,4 @@
|
||||
|
||||
/mob/living/simple_animal/SetEarDeaf()
|
||||
return
|
||||
|
||||
|
||||
@@ -56,11 +56,7 @@
|
||||
if(abilities)
|
||||
client.verbs |= abilities
|
||||
|
||||
if(istype(src,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = src
|
||||
if(H.dna.species && H.dna.species.abilities)
|
||||
client.verbs |= H.dna.species.abilities
|
||||
|
||||
if(ishuman(src))
|
||||
client.screen += client.void
|
||||
|
||||
//HUD updates (antag hud, etc)
|
||||
|
||||
@@ -356,7 +356,7 @@ var/list/intents = list(INTENT_HELP,INTENT_DISARM,INTENT_GRAB,INTENT_HARM)
|
||||
if(hud_used && hud_used.action_intent)
|
||||
hud_used.action_intent.icon_state = "[a_intent]"
|
||||
|
||||
else if(isrobot(src) || islarva(src))
|
||||
else if(isrobot(src) || islarva(src) || isanimal(src))
|
||||
switch(input)
|
||||
if(INTENT_HELP)
|
||||
a_intent = INTENT_HELP
|
||||
|
||||
@@ -121,3 +121,12 @@
|
||||
..()
|
||||
new /obj/item/documents/syndicate/blue(src)
|
||||
update_icon()
|
||||
|
||||
/obj/item/folder/syndicate/yellow
|
||||
icon_state = "folder_syellow"
|
||||
|
||||
/obj/item/folder/syndicate/yellow/full/New()
|
||||
..()
|
||||
new /obj/item/documents/syndicate/yellow(src)
|
||||
update_icon()
|
||||
|
||||
|
||||
@@ -119,6 +119,9 @@
|
||||
ammo_type = /obj/item/ammo_casing/shotgun/rubbershot
|
||||
max_ammo = 6
|
||||
|
||||
/obj/item/ammo_box/magazine/internal/shot/riot/short
|
||||
max_ammo = 3
|
||||
|
||||
/obj/item/ammo_box/magazine/internal/grenadelauncher
|
||||
name = "grenade launcher internal magazine"
|
||||
ammo_type = /obj/item/ammo_casing/a40mm
|
||||
|
||||
@@ -198,7 +198,7 @@
|
||||
..()
|
||||
select_fire(usr)
|
||||
|
||||
/obj/item/gun/energy/wormhole_projector/proc/portal_destroyed(obj/effect/portal/P)
|
||||
/obj/item/gun/energy/wormhole_projector/portal_destroyed(obj/effect/portal/P)
|
||||
if(P.icon_state == "portal")
|
||||
blue = null
|
||||
if(orange)
|
||||
|
||||
@@ -81,6 +81,7 @@
|
||||
icon_state = "riotshotgun"
|
||||
mag_type = /obj/item/ammo_box/magazine/internal/shot/riot
|
||||
sawn_desc = "Come with me if you want to live."
|
||||
sawn_state = SAWN_INTACT
|
||||
|
||||
/obj/item/gun/projectile/shotgun/riot/attackby(obj/item/A, mob/user, params)
|
||||
..()
|
||||
@@ -90,6 +91,109 @@
|
||||
var/obj/item/melee/energy/W = A
|
||||
if(W.active)
|
||||
sawoff(user)
|
||||
if(istype(A, /obj/item/pipe))
|
||||
unsaw(A, user)
|
||||
|
||||
/obj/item/gun/projectile/shotgun/riot/sawoff(mob/user)
|
||||
if(sawn_state == SAWN_OFF)
|
||||
to_chat(user, "<span class='warning'>[src] has already been shortened!</span>")
|
||||
return
|
||||
if(istype(loc, /obj/item/storage)) //To prevent inventory exploits
|
||||
to_chat(user, "<span class='info'>How do you plan to modify [src] while it's in a bag.</span>")
|
||||
return
|
||||
if(chambered) //if the gun is chambering live ammo, shoot self, if chambering empty ammo, 'click'
|
||||
if(chambered.BB)
|
||||
afterattack(user, user)
|
||||
user.visible_message("<span class='danger'>\The [src] goes off!</span>", "<span class='danger'>\The [src] goes off in your face!</span>")
|
||||
return
|
||||
else
|
||||
afterattack(user, user)
|
||||
user.visible_message("The [src] goes click!", "<span class='notice'>The [src] you are holding goes click.</span>")
|
||||
if(magazine.ammo_count()) //Spill the mag onto the floor
|
||||
user.visible_message("<span class='danger'>[user.name] opens [src] up and the shells go goes flying around!</span>", "<span class='userdanger'>You open [src] up and the shells go goes flying everywhere!!</span>")
|
||||
while(get_ammo(0) > 0)
|
||||
var/obj/item/ammo_casing/CB
|
||||
CB = magazine.get_round(0)
|
||||
if(CB)
|
||||
CB.loc = get_turf(loc)
|
||||
CB.update_icon()
|
||||
|
||||
if(do_after(user, 30, target = src))
|
||||
user.visible_message("[user] shortens \the [src]!", "<span class='notice'>You shorten \the [src].</span>")
|
||||
post_sawoff()
|
||||
return 1
|
||||
|
||||
|
||||
/obj/item/gun/projectile/shotgun/riot/proc/post_sawoff()
|
||||
name = "assault shotgun"
|
||||
desc = sawn_desc
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
current_skin = "riotshotgun-short"
|
||||
item_state = "gun" //phil235 is it different with different skin?
|
||||
slot_flags &= ~SLOT_BACK //you can't sling it on your back
|
||||
slot_flags |= SLOT_BELT //but you can wear it on your belt (poorly concealed under a trenchcoat, ideally)
|
||||
sawn_state = SAWN_OFF
|
||||
magazine.max_ammo = 3
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/item/gun/projectile/shotgun/riot/proc/unsaw(obj/item/A, mob/user)
|
||||
if(sawn_state == SAWN_INTACT)
|
||||
to_chat(user, "<span class='warning'>[src] has not been shortened!</span>")
|
||||
return
|
||||
if(istype(loc, /obj/item/storage)) //To prevent inventory exploits
|
||||
to_chat(user, "<span class='info'>How do you plan to modify [src] while it's in a bag.</span>")
|
||||
return
|
||||
if(chambered) //if the gun is chambering live ammo, shoot self, if chambering empty ammo, 'click'
|
||||
if(chambered.BB)
|
||||
afterattack(user, user)
|
||||
user.visible_message("<span class='danger'>\The [src] goes off!</span>", "<span class='danger'>\The [src] goes off in your face!</span>")
|
||||
return
|
||||
else
|
||||
afterattack(user, user)
|
||||
user.visible_message("The [src] goes click!", "<span class='notice'>The [src] you are holding goes click.</span>")
|
||||
if(magazine.ammo_count()) //Spill the mag onto the floor
|
||||
user.visible_message("<span class='danger'>[user.name] opens [src] up and the shells go goes flying around!</span>", "<span class='userdanger'>You open [src] up and the shells go goes flying everywhere!!</span>")
|
||||
while(get_ammo() > 0)
|
||||
var/obj/item/ammo_casing/CB
|
||||
CB = magazine.get_round(0)
|
||||
if(CB)
|
||||
CB.loc = get_turf(loc)
|
||||
CB.update_icon()
|
||||
|
||||
if(do_after(user, 30, target = src))
|
||||
qdel(A)
|
||||
user.visible_message("<span class='notice'>[user] lengthens [src]!</span>", "<span class='notice'>You lengthen [src].</span>")
|
||||
post_unsaw(user)
|
||||
return 1
|
||||
|
||||
/obj/item/gun/projectile/shotgun/riot/proc/post_unsaw()
|
||||
name = initial(name)
|
||||
desc = initial(desc)
|
||||
w_class = initial(w_class)
|
||||
current_skin = "riotshotgun"
|
||||
item_state = initial(item_state)
|
||||
slot_flags &= ~SLOT_BELT
|
||||
slot_flags |= SLOT_BACK
|
||||
sawn_state = SAWN_INTACT
|
||||
magazine.max_ammo = 6
|
||||
update_icon()
|
||||
|
||||
/obj/item/gun/projectile/shotgun/riot/update_icon() //Can't use the old proc as it makes it go to riotshotgun-short_sawn
|
||||
..()
|
||||
if(current_skin)
|
||||
icon_state = "[current_skin]"
|
||||
else
|
||||
icon_state = "[initial(icon_state)]"
|
||||
|
||||
/obj/item/gun/projectile/shotgun/riot/short
|
||||
mag_type = /obj/item/ammo_box/magazine/internal/shot/riot/short
|
||||
|
||||
/obj/item/gun/projectile/shotgun/riot/short/New()
|
||||
..()
|
||||
post_sawoff()
|
||||
|
||||
|
||||
|
||||
///////////////////////
|
||||
// BOLT ACTION RIFLE //
|
||||
|
||||
@@ -146,114 +146,120 @@
|
||||
. = ..()
|
||||
wabbajack(change)
|
||||
|
||||
proc/wabbajack(mob/living/M)
|
||||
if(istype(M))
|
||||
if(istype(M, /mob/living) && M.stat != DEAD)
|
||||
if(M.notransform)
|
||||
return
|
||||
M.notransform = 1
|
||||
M.canmove = 0
|
||||
M.icon = null
|
||||
M.overlays.Cut()
|
||||
M.invisibility = 101
|
||||
/proc/wabbajack(mob/living/M)
|
||||
if(istype(M) && M.stat != DEAD && !M.notransform)
|
||||
M.notransform = TRUE
|
||||
M.canmove = FALSE
|
||||
M.icon = null
|
||||
M.overlays.Cut()
|
||||
M.invisibility = 101
|
||||
|
||||
if(istype(M, /mob/living/silicon/robot))
|
||||
var/mob/living/silicon/robot/Robot = M
|
||||
if(Robot.mmi)
|
||||
qdel(Robot.mmi)
|
||||
Robot.notify_ai(1)
|
||||
else
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
// Make sure there are no organs or limbs to drop
|
||||
for(var/t in H.bodyparts)
|
||||
qdel(t)
|
||||
for(var/i in H.internal_organs)
|
||||
qdel(i)
|
||||
for(var/obj/item/W in M)
|
||||
M.unEquip(W, 1)
|
||||
qdel(W)
|
||||
if(isrobot(M))
|
||||
var/mob/living/silicon/robot/Robot = M
|
||||
QDEL_NULL(Robot.mmi)
|
||||
Robot.notify_ai(1)
|
||||
else
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
// Make sure there are no organs or limbs to drop
|
||||
for(var/t in H.bodyparts)
|
||||
qdel(t)
|
||||
for(var/i in H.internal_organs)
|
||||
qdel(i)
|
||||
for(var/obj/item/W in M)
|
||||
M.unEquip(W, 1)
|
||||
qdel(W)
|
||||
|
||||
var/mob/living/new_mob
|
||||
var/mob/living/new_mob
|
||||
|
||||
var/randomize = pick("robot","slime","xeno","human","animal")
|
||||
switch(randomize)
|
||||
if("robot")
|
||||
if(prob(30))
|
||||
new_mob = new /mob/living/silicon/robot/syndicate(M.loc)
|
||||
else
|
||||
new_mob = new /mob/living/silicon/robot(M.loc)
|
||||
new_mob.gender = M.gender
|
||||
new_mob.invisibility = 0
|
||||
new_mob.job = "Cyborg"
|
||||
var/mob/living/silicon/robot/Robot = new_mob
|
||||
Robot.mmi = new /obj/item/mmi(new_mob)
|
||||
if(ishuman(M))
|
||||
Robot.mmi.transfer_identity(M) //Does not transfer key/client.
|
||||
if("slime")
|
||||
new_mob = new /mob/living/carbon/slime/random(M.loc)
|
||||
new_mob.universal_speak = 1
|
||||
if("xeno")
|
||||
if(prob(50))
|
||||
new_mob = new /mob/living/carbon/alien/humanoid/hunter(M.loc)
|
||||
else
|
||||
new_mob = new /mob/living/carbon/alien/humanoid/sentinel(M.loc)
|
||||
new_mob.universal_speak = 1
|
||||
if("animal")
|
||||
if(prob(50))
|
||||
var/beast = pick("carp","bear","mushroom","statue", "bat", "goat", "tomato")
|
||||
switch(beast)
|
||||
if("carp") new_mob = new /mob/living/simple_animal/hostile/carp(M.loc)
|
||||
if("bear") new_mob = new /mob/living/simple_animal/hostile/bear(M.loc)
|
||||
if("mushroom") new_mob = new /mob/living/simple_animal/hostile/mushroom(M.loc)
|
||||
if("statue") new_mob = new /mob/living/simple_animal/hostile/statue(M.loc)
|
||||
if("bat") new_mob = new /mob/living/simple_animal/hostile/scarybat(M.loc)
|
||||
if("goat") new_mob = new /mob/living/simple_animal/hostile/retaliate/goat(M.loc)
|
||||
if("tomato") new_mob = new /mob/living/simple_animal/hostile/killertomato(M.loc)
|
||||
else
|
||||
var/animal = pick("parrot","corgi","crab","pug","cat","mouse","chicken","cow","lizard","chick","fox")
|
||||
switch(animal)
|
||||
if("parrot") new_mob = new /mob/living/simple_animal/parrot(M.loc)
|
||||
if("corgi") new_mob = new /mob/living/simple_animal/pet/corgi(M.loc)
|
||||
if("crab") new_mob = new /mob/living/simple_animal/crab(M.loc)
|
||||
if("cat") new_mob = new /mob/living/simple_animal/pet/cat(M.loc)
|
||||
if("mouse") new_mob = new /mob/living/simple_animal/mouse(M.loc)
|
||||
if("chicken") new_mob = new /mob/living/simple_animal/chicken(M.loc)
|
||||
if("cow") new_mob = new /mob/living/simple_animal/cow(M.loc)
|
||||
if("lizard") new_mob = new /mob/living/simple_animal/lizard(M.loc)
|
||||
if("fox") new_mob = new /mob/living/simple_animal/pet/fox(M.loc)
|
||||
else new_mob = new /mob/living/simple_animal/chick(M.loc)
|
||||
new_mob.universal_speak = 1
|
||||
if("human")
|
||||
new_mob = new /mob/living/carbon/human(M.loc)
|
||||
// Include standard, whitelisted, and monkey species...
|
||||
var/list/new_species = list()
|
||||
for(var/datum/species/S in subtypesof(/datum/species))
|
||||
if(istype(S, /datum/species/vox/armalis))
|
||||
continue
|
||||
new_species.Add(S)
|
||||
var/mob/living/carbon/human/H = new_mob
|
||||
var/datum/species/S = pick(new_species)
|
||||
H.set_species(S)
|
||||
randomize = initial(S.name)
|
||||
var/datum/preferences/A = new() //Randomize appearance for the human
|
||||
A.copy_to(new_mob)
|
||||
var/randomize = pick("robot", "slime", "xeno", "human", "animal")
|
||||
switch(randomize)
|
||||
if("robot")
|
||||
if(prob(30))
|
||||
new_mob = new /mob/living/silicon/robot/syndicate(M.loc)
|
||||
else
|
||||
return
|
||||
|
||||
M.create_attack_log("<font color='orange'>[key_name(M)] became [new_mob.real_name].</font>")
|
||||
new_mob.attack_log = M.attack_log
|
||||
|
||||
new_mob.a_intent = INTENT_HARM
|
||||
if(M.mind)
|
||||
M.mind.transfer_to(new_mob)
|
||||
new_mob = new /mob/living/silicon/robot(M.loc)
|
||||
new_mob.gender = M.gender
|
||||
new_mob.invisibility = 0
|
||||
new_mob.job = "Cyborg"
|
||||
var/mob/living/silicon/robot/Robot = new_mob
|
||||
Robot.mmi = new /obj/item/mmi(new_mob)
|
||||
if(ishuman(M))
|
||||
Robot.mmi.transfer_identity(M) //Does not transfer key/client.
|
||||
if("slime")
|
||||
new_mob = new /mob/living/carbon/slime/random(M.loc)
|
||||
new_mob.universal_speak = TRUE
|
||||
if("xeno")
|
||||
if(prob(50))
|
||||
new_mob = new /mob/living/carbon/alien/humanoid/hunter(M.loc)
|
||||
else
|
||||
new_mob = new /mob/living/carbon/alien/humanoid/sentinel(M.loc)
|
||||
new_mob.universal_speak = TRUE
|
||||
if("animal")
|
||||
if(prob(50))
|
||||
var/beast = pick("carp","bear","mushroom","statue", "bat", "goat", "tomato")
|
||||
switch(beast)
|
||||
if("carp")
|
||||
new_mob = new /mob/living/simple_animal/hostile/carp(M.loc)
|
||||
if("bear")
|
||||
new_mob = new /mob/living/simple_animal/hostile/bear(M.loc)
|
||||
if("mushroom")
|
||||
new_mob = new /mob/living/simple_animal/hostile/mushroom(M.loc)
|
||||
if("statue")
|
||||
new_mob = new /mob/living/simple_animal/hostile/statue(M.loc)
|
||||
if("bat")
|
||||
new_mob = new /mob/living/simple_animal/hostile/scarybat(M.loc)
|
||||
if("goat")
|
||||
new_mob = new /mob/living/simple_animal/hostile/retaliate/goat(M.loc)
|
||||
if("tomato")
|
||||
new_mob = new /mob/living/simple_animal/hostile/killertomato(M.loc)
|
||||
else
|
||||
var/animal = pick("parrot", "corgi", "crab", "pug", "cat", "mouse", "chicken", "cow", "lizard", "chick", "fox")
|
||||
switch(animal)
|
||||
if("parrot")
|
||||
new_mob = new /mob/living/simple_animal/parrot(M.loc)
|
||||
if("corgi")
|
||||
new_mob = new /mob/living/simple_animal/pet/corgi(M.loc)
|
||||
if("crab")
|
||||
new_mob = new /mob/living/simple_animal/crab(M.loc)
|
||||
if("cat")
|
||||
new_mob = new /mob/living/simple_animal/pet/cat(M.loc)
|
||||
if("mouse")
|
||||
new_mob = new /mob/living/simple_animal/mouse(M.loc)
|
||||
if("chicken")
|
||||
new_mob = new /mob/living/simple_animal/chicken(M.loc)
|
||||
if("cow")
|
||||
new_mob = new /mob/living/simple_animal/cow(M.loc)
|
||||
if("lizard")
|
||||
new_mob = new /mob/living/simple_animal/lizard(M.loc)
|
||||
if("fox")
|
||||
new_mob = new /mob/living/simple_animal/pet/fox(M.loc)
|
||||
else
|
||||
new_mob = new /mob/living/simple_animal/chick(M.loc)
|
||||
new_mob.universal_speak = TRUE
|
||||
if("human")
|
||||
new_mob = new /mob/living/carbon/human(M.loc)
|
||||
var/mob/living/carbon/human/H = new_mob
|
||||
var/datum/preferences/A = new() //Randomize appearance for the human
|
||||
A.species = get_random_species(TRUE)
|
||||
A.copy_to(new_mob)
|
||||
randomize = H.dna.species.name
|
||||
else
|
||||
new_mob.key = M.key
|
||||
return
|
||||
|
||||
to_chat(new_mob, "<B>Your form morphs into that of a [randomize].</B>")
|
||||
M.create_attack_log("<font color='orange'>[key_name(M)] became [new_mob.real_name].</font>")
|
||||
new_mob.attack_log = M.attack_log
|
||||
|
||||
qdel(M)
|
||||
return new_mob
|
||||
new_mob.a_intent = INTENT_HARM
|
||||
if(M.mind)
|
||||
M.mind.transfer_to(new_mob)
|
||||
else
|
||||
new_mob.key = M.key
|
||||
|
||||
to_chat(new_mob, "<B>Your form morphs into that of a [randomize].</B>")
|
||||
|
||||
qdel(M)
|
||||
return new_mob
|
||||
|
||||
/obj/item/projectile/magic/animate
|
||||
name = "bolt of animation"
|
||||
|
||||
@@ -13,7 +13,9 @@
|
||||
possible_transfer_amounts = list(1,2,3,4,5,10,15,20,25,30)
|
||||
flags = OPENCONTAINER
|
||||
slot_flags = SLOT_BELT
|
||||
var/ignore_flags = 0
|
||||
var/ignore_flags = FALSE
|
||||
var/emagged = FALSE
|
||||
var/safety_hypo = FALSE
|
||||
|
||||
/obj/item/reagent_containers/hypospray/attack(mob/living/M, mob/user)
|
||||
if(!reagents.total_volume)
|
||||
@@ -31,8 +33,13 @@
|
||||
for(var/datum/reagent/R in reagents.reagent_list)
|
||||
injected += R.name
|
||||
|
||||
var/primary_reagent_name = reagents.get_master_reagent_name()
|
||||
var/trans = reagents.trans_to(M, amount_per_transfer_from_this)
|
||||
|
||||
if(safety_hypo)
|
||||
visible_message("<span class='warning'>[user] injects [M] with [trans] units of [primary_reagent_name].</span>")
|
||||
playsound(loc, 'sound/goonstation/items/hypo.ogg', 80, 0)
|
||||
|
||||
to_chat(user, "<span class='notice'>[trans] unit\s injected. [reagents.total_volume] unit\s remaining in [src].</span>")
|
||||
|
||||
var/contained = english_list(injected)
|
||||
@@ -41,6 +48,31 @@
|
||||
|
||||
return TRUE
|
||||
|
||||
/obj/item/reagent_containers/hypospray/on_reagent_change()
|
||||
if(safety_hypo && !emagged)
|
||||
var/found_forbidden_reagent = FALSE
|
||||
for(var/datum/reagent/R in reagents.reagent_list)
|
||||
if(!safe_chem_list.Find(R.id))
|
||||
reagents.del_reagent(R.id)
|
||||
found_forbidden_reagent = TRUE
|
||||
if(found_forbidden_reagent)
|
||||
if(ismob(loc))
|
||||
to_chat(loc, "<span class='warning'>[src] identifies and removes a harmful substance.</span>")
|
||||
else
|
||||
visible_message("<span class='warning'>[src] identifies and removes a harmful substance.</span>")
|
||||
|
||||
/obj/item/reagent_containers/hypospray/emag_act(mob/user)
|
||||
if(safety_hypo && !emagged)
|
||||
emagged = TRUE
|
||||
ignore_flags = TRUE
|
||||
to_chat(user, "<span class='warning'>You short out the safeties on [src].</span>")
|
||||
|
||||
/obj/item/reagent_containers/hypospray/safety
|
||||
name = "medical hypospray"
|
||||
desc = "A modified hypospray for quickly injecting safe medicinal chemicals."
|
||||
icon_state = "combat_hypo"
|
||||
safety_hypo = TRUE
|
||||
|
||||
/obj/item/reagent_containers/hypospray/CMO
|
||||
list_reagents = list("omnizine" = 30)
|
||||
|
||||
|
||||
@@ -591,6 +591,14 @@
|
||||
build_path = /obj/item/reagent_containers/syringe
|
||||
category = list("initial", "Medical")
|
||||
|
||||
/datum/design/safety_hypo
|
||||
name = "Medical Hypospray"
|
||||
id = "safetyhypo"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 500, MAT_GLASS = 500)
|
||||
build_path = /obj/item/reagent_containers/hypospray/safety
|
||||
category = list("initial", "Medical")
|
||||
|
||||
/datum/design/prox_sensor
|
||||
name = "Proximity Sensor"
|
||||
id = "prox_sensor"
|
||||
|
||||
@@ -557,11 +557,14 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/spacepod_equipment/SPE, v
|
||||
|
||||
/obj/spacepod/syndi
|
||||
name = "syndicate spacepod"
|
||||
desc = "An armed spacepod painted in syndicate colors."
|
||||
desc = "A spacepod painted in syndicate colors."
|
||||
icon_state = "pod_synd"
|
||||
health = 400
|
||||
unlocked = FALSE
|
||||
|
||||
/obj/spacepod/syndi/unlocked
|
||||
unlocked = TRUE
|
||||
|
||||
/obj/spacepod/sec/New()
|
||||
..()
|
||||
var/obj/item/spacepod_equipment/weaponry/burst_taser/T = new /obj/item/spacepod_equipment/weaponry/taser
|
||||
|
||||
@@ -46,17 +46,23 @@
|
||||
cost = 200
|
||||
|
||||
/datum/storeitem/dnd
|
||||
name = "Dungeons & Dragons set"
|
||||
name = "Dungeons & Dragons Set"
|
||||
desc = "A box containing minifigures suitable for a good game of D&D."
|
||||
typepath = /obj/item/storage/box/characters
|
||||
cost = 200
|
||||
|
||||
/datum/storeitem/dice
|
||||
name = "Dice set"
|
||||
name = "Dice Set"
|
||||
desc = "A box containing multiple different types of die."
|
||||
typepath = /obj/item/storage/box/dice
|
||||
cost = 200
|
||||
|
||||
/datum/storeitem/candle
|
||||
name = "Candles"
|
||||
desc = "A box of candles. Use them to fool others into thinking you're out for a romantic dinner...or something."
|
||||
typepath = /obj/item/storage/fancy/candle_box/full
|
||||
cost = 200
|
||||
|
||||
/datum/storeitem/nanomob_booster
|
||||
name = "Nano-Mob Hunter Trading Card Booster Pack"
|
||||
desc = "Contains 6 random Nano-Mob Hunter Trading Cards. May contain a holographic card!"
|
||||
@@ -65,58 +71,52 @@
|
||||
|
||||
/datum/storeitem/crayons
|
||||
name = "Crayons"
|
||||
desc = "Let security know how they're doing by scrawling lovenotes all over their hallways."
|
||||
desc = "Let security know how they're doing by scrawling love notes all over their hallways."
|
||||
typepath = /obj/item/storage/fancy/crayons
|
||||
cost = 350
|
||||
|
||||
/datum/storeitem/pipe
|
||||
name = "smoking pipe"
|
||||
desc = "A pipe, for smoking. Probably made of meershaum or something."
|
||||
name = "Smoking Pipe"
|
||||
desc = "A pipe, for smoking. Probably made of meerschaum or something."
|
||||
typepath = /obj/item/clothing/mask/cigarette/pipe
|
||||
cost = 350
|
||||
|
||||
/datum/storeitem/candle
|
||||
name = "Candles"
|
||||
desc = "A box of chandles. Use them to fool others into thinking you're out for a romantic dinner...or something."
|
||||
typepath = /obj/item/storage/fancy/candle_box/full
|
||||
cost = 200
|
||||
|
||||
/datum/storeitem/minigibber
|
||||
name = "miniature gibber"
|
||||
name = "Miniature Gibber"
|
||||
desc = "A miniature recreation of Nanotrasen's famous meat grinder."
|
||||
typepath = /obj/item/toy/minigibber
|
||||
cost = 400
|
||||
|
||||
/datum/storeitem/katana
|
||||
name = "replica katana"
|
||||
name = "Replica Katana"
|
||||
desc = "Woefully underpowered in D20."
|
||||
typepath = /obj/item/toy/katana
|
||||
cost = 500
|
||||
|
||||
/datum/storeitem/piano_synth
|
||||
name = "piano synthesizer"
|
||||
desc = "An advanced electronic synthesizer that can be used as various instruments."
|
||||
typepath = /obj/item/instrument/piano_synth
|
||||
cost = 1000
|
||||
|
||||
/datum/storeitem/violin
|
||||
name = "space violin"
|
||||
name = "Space Violin"
|
||||
desc = "A wooden musical instrument with four strings and a bow. \"The devil went down to space, he was looking for an assistant to grief.\""
|
||||
typepath = /obj/item/instrument/violin
|
||||
cost = 500
|
||||
|
||||
/datum/storeitem/guitar
|
||||
name = "guitar"
|
||||
name = "Guitar"
|
||||
desc = "It's made of wood and has bronze strings."
|
||||
typepath = /obj/item/instrument/guitar
|
||||
cost = 500
|
||||
|
||||
/datum/storeitem/eguitar
|
||||
name = "electric guitar"
|
||||
name = "Electric Guitar"
|
||||
desc = "Makes all your shredding needs possible."
|
||||
typepath = /obj/item/instrument/eguitar
|
||||
cost = 500
|
||||
|
||||
/datum/storeitem/piano_synth
|
||||
name = "Piano Synthesizer"
|
||||
desc = "An advanced electronic synthesizer that can emulate various instruments."
|
||||
typepath = /obj/item/instrument/piano_synth
|
||||
cost = 1000
|
||||
|
||||
/datum/storeitem/baby
|
||||
name = "Toddler"
|
||||
desc = "This baby looks almost real. Wait, did it just burp?"
|
||||
@@ -124,91 +124,91 @@
|
||||
cost = 1000
|
||||
|
||||
/datum/storeitem/flag_slime
|
||||
name = "Slime People flag"
|
||||
name = "Slime People Flag"
|
||||
desc = "A flag proudly proclaiming the superior heritage of Slime People."
|
||||
typepath = /obj/item/flag/species/slime
|
||||
cost = 1000
|
||||
|
||||
/datum/storeitem/flag_skrell
|
||||
name = "Skrell flag"
|
||||
name = "Skrell Flag"
|
||||
desc = "A flag proudly proclaiming the superior heritage of Skrell."
|
||||
typepath = /obj/item/flag/species/skrell
|
||||
cost = 1000
|
||||
|
||||
/datum/storeitem/flag_vox
|
||||
name = "Vox flag"
|
||||
name = "Vox Flag"
|
||||
desc = "A flag proudly proclaiming the superior heritage of Vox."
|
||||
typepath = /obj/item/flag/species/vox
|
||||
cost = 1000
|
||||
|
||||
/datum/storeitem/flag_machine
|
||||
name = "Synthetics flag"
|
||||
name = "Synthetics Flag"
|
||||
desc = "A flag proudly proclaiming the superior heritage of Synthetics."
|
||||
typepath = /obj/item/flag/species/machine
|
||||
cost = 1000
|
||||
|
||||
/datum/storeitem/flag_diona
|
||||
name = "Diona flag"
|
||||
name = "Diona Flag"
|
||||
desc = "A flag proudly proclaiming the superior heritage of Dionae."
|
||||
typepath = /obj/item/flag/species/diona
|
||||
cost = 1000
|
||||
|
||||
/datum/storeitem/flag_human
|
||||
name = "Human flag"
|
||||
name = "Human Flag"
|
||||
desc = "A flag proudly proclaiming the superior heritage of Humans."
|
||||
typepath = /obj/item/flag/species/human
|
||||
cost = 1000
|
||||
|
||||
/datum/storeitem/flag_greys
|
||||
name = "Greys flag"
|
||||
name = "Greys Flag"
|
||||
desc = "A flag proudly proclaiming the superior heritage of Greys."
|
||||
typepath = /obj/item/flag/species/greys
|
||||
cost = 1000
|
||||
|
||||
/datum/storeitem/flag_kidan
|
||||
name = "Kidan flag"
|
||||
name = "Kidan Flag"
|
||||
desc = "A flag proudly proclaiming the superior heritage of Kidan."
|
||||
typepath = /obj/item/flag/species/kidan
|
||||
cost = 1000
|
||||
|
||||
/datum/storeitem/flag_taj
|
||||
name = "Tajaran flag"
|
||||
name = "Tajaran Flag"
|
||||
desc = "A flag proudly proclaiming the superior heritage of Tajara."
|
||||
typepath = /obj/item/flag/species/taj
|
||||
cost = 1000
|
||||
|
||||
/datum/storeitem/flag_unathi
|
||||
name = "Unathi flag"
|
||||
name = "Unathi Flag"
|
||||
desc = "A flag proudly proclaiming the superior heritage of Unathi."
|
||||
typepath = /obj/item/flag/species/unathi
|
||||
cost = 1000
|
||||
|
||||
/datum/storeitem/flag_vulp
|
||||
name = "Vulpkanin flag"
|
||||
name = "Vulpkanin Flag"
|
||||
desc = "A flag proudly proclaiming the superior heritage of Vulpkanin."
|
||||
typepath = /obj/item/flag/species/vulp
|
||||
cost = 1000
|
||||
|
||||
/datum/storeitem/flag_drask
|
||||
name = "Drask flag"
|
||||
name = "Drask Flag"
|
||||
desc = "A flag proudly proclaiming the superior heritage of Drask."
|
||||
typepath = /obj/item/flag/species/drask
|
||||
cost = 1000
|
||||
|
||||
/datum/storeitem/flag_plasma
|
||||
name = "Plasmaman flag"
|
||||
name = "Plasmaman Flag"
|
||||
desc = "A flag proudly proclaiming the superior heritage of Plasmamen."
|
||||
typepath = /obj/item/flag/species/plasma
|
||||
cost = 1000
|
||||
|
||||
/datum/storeitem/flag_ian
|
||||
name = "Ian flag"
|
||||
name = "Ian Flag"
|
||||
desc = "The banner of Ian, because SQUEEEEE."
|
||||
typepath = /obj/item/flag/ian
|
||||
cost = 1500
|
||||
|
||||
/datum/storeitem/banhammer
|
||||
desc = "A banhammer"
|
||||
name = "banhammer"
|
||||
name = "Banhammer"
|
||||
desc = "A Banhammer."
|
||||
typepath = /obj/item/banhammer
|
||||
cost = 2000
|
||||
|
||||
@@ -304,7 +304,13 @@ PLAYER_REROUTE_CAP 0
|
||||
#DISABLE_AWAY_MISSIONS
|
||||
|
||||
## Disable the loading of space ruins
|
||||
DISABLE_SPACE_RUINS
|
||||
#DISABLE_SPACE_RUINS
|
||||
|
||||
## Minimum number of space ruins levels to generate
|
||||
EXTRA_SPACE_RUINS_LEVELS_MIN 2
|
||||
|
||||
## Maximum number of space ruins levels to generate
|
||||
EXTRA_SPACE_RUINS_LEVELS_MAX 4
|
||||
|
||||
## Uncomment to disable the OOC/LOOC channel by default.
|
||||
#DISABLE_OOC
|
||||
|
||||
@@ -56,10 +56,72 @@
|
||||
-->
|
||||
<div class="commit sansserif">
|
||||
|
||||
<h2 class="date">09 August 2018</h2>
|
||||
<h3 class="author">variableundefined updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">banangarang's maid bot fluff sprites</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">07 August 2018</h2>
|
||||
<h3 class="author">Anasari updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Polaris card system partially ported. Credits to Jedr for the hand of card item_action sprites.</li>
|
||||
</ul>
|
||||
<h3 class="author">Kyep updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Simple_animal mobs now get a HUD button that lets them switch between HELP and HARM intents.</li>
|
||||
<li class="tweak">Replaced the Syndicate Supply Depot with a new version, rebuilt from scratch, that is much more challenging/interesting.</li>
|
||||
<li class="bugfix">It is no longer possible to walk straight through decoy AI cores as if they were not there.</li>
|
||||
<li class="bugfix">Syndicate grenade launcher turrets now actually launch grenades.</li>
|
||||
</ul>
|
||||
<h3 class="author">MarsM0nd updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Unathi can now tailwhip when they are supposed to be able to.</li>
|
||||
<li class="rscadd">Tail whipping gets logged.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">06 August 2018</h2>
|
||||
<h3 class="author">AffectedArc07 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Barber no longer spawns with an extra pair of shoes in his bag</li>
|
||||
</ul>
|
||||
<h3 class="author">Tails2091 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Fixed Therapy Dolls not working.</li>
|
||||
<li class="tweak">Made Prize Machine & Merch Sore readable.</li>
|
||||
<li class="spellcheck">Fixed capitalizations and typos in both lists.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">05 August 2018</h2>
|
||||
<h3 class="author">Crazylemon64 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Space ruins can no longer trap you upon border transition</li>
|
||||
<li class="rscadd">There are now several levels of space ruins</li>
|
||||
</ul>
|
||||
<h3 class="author">Fox McCloud updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Adds in medical hyposprays</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">03 August 2018</h2>
|
||||
<h3 class="author">Fox McCloud updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">IPC Change monitor is now an action button</li>
|
||||
<li class="tweak">Slime Color change is now an action button</li>
|
||||
<li class="bugfix">Fixes staff of change leaving behind unknowns</li>
|
||||
<li class="bugfix">Fixes Shadowlings not having shock resistant and thermal vision</li>
|
||||
<li class="bugfix">Fixes staff of change gibbing people</li>
|
||||
</ul>
|
||||
<h3 class="author">Shazbot updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Adds in the ability to unsaw sawn off riot shotguns. Change: Changes the riot shotgun icon.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">02 August 2018</h2>
|
||||
<h3 class="author">variableundefined updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Nightmares now works. Sleep well.</li>
|
||||
<li class="tweak">Megaphone actually logs in say log now.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">01 August 2018</h2>
|
||||
|
||||
@@ -6725,3 +6725,45 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
|
||||
2018-08-02:
|
||||
variableundefined:
|
||||
- bugfix: Nightmares now works. Sleep well.
|
||||
- tweak: Megaphone actually logs in say log now.
|
||||
2018-08-03:
|
||||
Fox McCloud:
|
||||
- tweak: IPC Change monitor is now an action button
|
||||
- tweak: Slime Color change is now an action button
|
||||
- bugfix: Fixes staff of change leaving behind unknowns
|
||||
- bugfix: Fixes Shadowlings not having shock resistant and thermal vision
|
||||
- bugfix: Fixes staff of change gibbing people
|
||||
Shazbot:
|
||||
- rscadd: 'Adds in the ability to unsaw sawn off riot shotguns. Change: Changes
|
||||
the riot shotgun icon.'
|
||||
2018-08-05:
|
||||
Crazylemon64:
|
||||
- bugfix: Space ruins can no longer trap you upon border transition
|
||||
- rscadd: There are now several levels of space ruins
|
||||
Fox McCloud:
|
||||
- rscadd: Adds in medical hyposprays
|
||||
2018-08-06:
|
||||
AffectedArc07:
|
||||
- tweak: Barber no longer spawns with an extra pair of shoes in his bag
|
||||
Tails2091:
|
||||
- bugfix: Fixed Therapy Dolls not working.
|
||||
- tweak: Made Prize Machine & Merch Sore readable.
|
||||
- spellcheck: Fixed capitalizations and typos in both lists.
|
||||
2018-08-07:
|
||||
Anasari:
|
||||
- rscadd: Polaris card system partially ported. Credits to Jedr for the hand of
|
||||
card item_action sprites.
|
||||
Kyep:
|
||||
- rscadd: Simple_animal mobs now get a HUD button that lets them switch between
|
||||
HELP and HARM intents.
|
||||
- tweak: Replaced the Syndicate Supply Depot with a new version, rebuilt from scratch,
|
||||
that is much more challenging/interesting.
|
||||
- bugfix: It is no longer possible to walk straight through decoy AI cores as if
|
||||
they were not there.
|
||||
- bugfix: Syndicate grenade launcher turrets now actually launch grenades.
|
||||
MarsM0nd:
|
||||
- bugfix: Unathi can now tailwhip when they are supposed to be able to.
|
||||
- rscadd: Tail whipping gets logged.
|
||||
2018-08-09:
|
||||
variableundefined:
|
||||
- rscadd: banangarang's maid bot fluff sprites
|
||||
|
||||
|
Before Width: | Height: | Size: 84 KiB After Width: | Height: | Size: 86 KiB |
|
Before Width: | Height: | Size: 367 KiB After Width: | Height: | Size: 378 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
@@ -395,6 +395,7 @@
|
||||
#include "code\game\world.dm"
|
||||
#include "code\game\area\ai_monitored.dm"
|
||||
#include "code\game\area\areas.dm"
|
||||
#include "code\game\area\depot-areas.dm"
|
||||
#include "code\game\area\Dynamic areas.dm"
|
||||
#include "code\game\area\Space Station 13 areas.dm"
|
||||
#include "code\game\dna\dna2.dm"
|
||||
@@ -635,6 +636,7 @@
|
||||
#include "code\game\machinery\computer\communications.dm"
|
||||
#include "code\game\machinery\computer\computer.dm"
|
||||
#include "code\game\machinery\computer\crew.dm"
|
||||
#include "code\game\machinery\computer\depot.dm"
|
||||
#include "code\game\machinery\computer\HolodeckControl.dm"
|
||||
#include "code\game\machinery\computer\honkputer.dm"
|
||||
#include "code\game\machinery\computer\law.dm"
|
||||
@@ -955,6 +957,7 @@
|
||||
#include "code\game\objects\structures\bedsheet_bin.dm"
|
||||
#include "code\game\objects\structures\coathanger.dm"
|
||||
#include "code\game\objects\structures\curtains.dm"
|
||||
#include "code\game\objects\structures\depot.dm"
|
||||
#include "code\game\objects\structures\displaycase.dm"
|
||||
#include "code\game\objects\structures\door_assembly.dm"
|
||||
#include "code\game\objects\structures\door_assembly_types.dm"
|
||||
@@ -1015,6 +1018,7 @@
|
||||
#include "code\game\objects\structures\crates_lockers\closets\secure\bar.dm"
|
||||
#include "code\game\objects\structures\crates_lockers\closets\secure\cargo.dm"
|
||||
#include "code\game\objects\structures\crates_lockers\closets\secure\chaplain.dm"
|
||||
#include "code\game\objects\structures\crates_lockers\closets\secure\depot.dm"
|
||||
#include "code\game\objects\structures\crates_lockers\closets\secure\engineering.dm"
|
||||
#include "code\game\objects\structures\crates_lockers\closets\secure\freezer.dm"
|
||||
#include "code\game\objects\structures\crates_lockers\closets\secure\guncabinet.dm"
|
||||
@@ -1442,6 +1446,9 @@
|
||||
#include "code\modules\food_and_drinks\recipes\recipes_microwave.dm"
|
||||
#include "code\modules\food_and_drinks\recipes\recipes_oven.dm"
|
||||
#include "code\modules\food_and_drinks\recipes\tablecraft\recipes_table.dm"
|
||||
#include "code\modules\games\52card.dm"
|
||||
#include "code\modules\games\cards.dm"
|
||||
#include "code\modules\games\tarot.dm"
|
||||
#include "code\modules\holiday\christmas.dm"
|
||||
#include "code\modules\holiday\holiday.dm"
|
||||
#include "code\modules\hydroponics\biogenerator.dm"
|
||||
@@ -1776,6 +1783,7 @@
|
||||
#include "code\modules\mob\living\simple_animal\bot\medbot.dm"
|
||||
#include "code\modules\mob\living\simple_animal\bot\mulebot.dm"
|
||||
#include "code\modules\mob\living\simple_animal\bot\secbot.dm"
|
||||
#include "code\modules\mob\living\simple_animal\bot\syndicate.dm"
|
||||
#include "code\modules\mob\living\simple_animal\friendly\butterfly.dm"
|
||||
#include "code\modules\mob\living\simple_animal\friendly\cat.dm"
|
||||
#include "code\modules\mob\living\simple_animal\friendly\cockroach.dm"
|
||||
|
||||