From 25af6373c4b917fe599775cc14f24c7265efd72f Mon Sep 17 00:00:00 2001 From: CaelAislinn Date: Wed, 4 Jan 2012 00:11:26 +1000 Subject: [PATCH 01/25] added get_opposite(var/dir) to helpers.dm, new diverters / conveyors 95% working, antiqua cargo bay had to be tweaked. Signed-off-by: CaelAislinn --- code/defines/procs/helpers.dm | 18 + code/modules/recycling/conveyor2.dm | 196 +++++++-- maps/Antiqua.dmm | 629 ++++++++++++++-------------- 3 files changed, 502 insertions(+), 341 deletions(-) diff --git a/code/defines/procs/helpers.dm b/code/defines/procs/helpers.dm index f40494225cd..eb02b09a6dc 100644 --- a/code/defines/procs/helpers.dm +++ b/code/defines/procs/helpers.dm @@ -1453,3 +1453,21 @@ proc/safepick(list/list) return return pick(list) +proc/get_opposite(var/checkdir) + switch(checkdir) + if(NORTH) + return SOUTH + if(SOUTH) + return NORTH + if(EAST) + return WEST + if(WEST) + return EAST + if(NORTHEAST) + return SOUTHWEST + if(NORTHWEST) + return SOUTHEAST + if(SOUTHEAST) + return NORTHWEST + if(SOUTHWEST) + return NORTHEAST \ No newline at end of file diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index da31364f326..ce806b6d926 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -16,39 +16,58 @@ var/list/affecting // the list of all items that will be moved this ptick var/id = "" // the control ID - must match controller ID + //these ones below for backwards compatibility + + // following two only used if a diverter is present + var/divert = 0 // if non-zero, direction to divert items + var/divdir = 0 // if diverting, will be conveyer dir needed to divert (otherwise dense) + var/basedir // this is the default (forward) direction, set by the map dir + // note dir var can vary when the direction changes + // create a conveyor /obj/machinery/conveyor/New() ..() - switch(dir) - if(NORTH) - forwards = NORTH - backwards = SOUTH - if(SOUTH) - forwards = SOUTH - backwards = NORTH - if(EAST) - forwards = EAST - backwards = WEST - if(WEST) - forwards = WEST - backwards = EAST - if(NORTHEAST) - forwards = EAST - backwards = SOUTH - if(NORTHWEST) - forwards = SOUTH - backwards = WEST - if(SOUTHEAST) - forwards = NORTH - backwards = EAST - if(SOUTHWEST) - forwards = WEST - backwards = NORTH + if(!forwards) + switch(dir) + if(NORTH) + forwards = NORTH + if(SOUTH) + forwards = SOUTH + if(EAST) + forwards = EAST + if(WEST) + forwards = WEST + if(NORTHEAST) + forwards = EAST + if(NORTHWEST) + forwards = SOUTH + if(SOUTHEAST) + forwards = NORTH + if(SOUTHWEST) + forwards = WEST + if(!backwards) + switch(dir) + if(NORTH) + backwards = SOUTH + if(SOUTH) + backwards = NORTH + if(EAST) + backwards = WEST + if(WEST) + backwards = EAST + if(NORTHEAST) + backwards = SOUTH + if(NORTHWEST) + backwards = WEST + if(SOUTHEAST) + backwards = EAST + if(SOUTHWEST) + backwards = NORTH /obj/machinery/conveyor/proc/setmove() - if(operating == 1) + if(operating > 0) movedir = forwards - else + else if(operating < 0) movedir = backwards update() @@ -72,6 +91,9 @@ return use_power(100) + if(divert && dir==divdir) // update if diverter present + movedir = divert + affecting = loc.contents - src // moved items will be all in loc spawn(1) // slight delay to prevent infinite propagation due to map order var/items_moved = 0 @@ -221,3 +243,123 @@ if(S.id == src.id) S.position = position S.update() + +// converyor diverter +// extendable arm that can be switched so items on the conveyer are diverted sideways +// situate in same turf as conveyor +// only works if belts is running proper direction +// +// +/obj/machinery/diverter + icon = 'recycling.dmi' + icon_state = "diverter0" + name = "diverter" + desc = "A diverter arm for a conveyor belt." + anchored = 1 + layer = FLY_LAYER + var/obj/machinery/conveyor/conv // the conveyor this diverter works on + var/deployed = 0 // true if diverter arm is extended + var/operating = 0 // true if arm is extending/contracting + var/divert_to // the dir that diverted items will be moved + var/divert_from // the dir items must be moving to divert + + +// create a diverter +// set up divert_to and divert_from directions depending on dir state +/obj/machinery/diverter/New() + ..() + switch(dir) + if(NORTH) + divert_to = WEST // stuff will be moved to the west + divert_from = NORTH // if entering from the north + if(SOUTH) + divert_to = EAST + divert_from = NORTH + if(EAST) + divert_to = EAST + divert_from = SOUTH + if(WEST) + divert_to = WEST + divert_from = SOUTH + if(NORTHEAST) + divert_to = NORTH + divert_from = EAST + if(NORTHWEST) + divert_to = NORTH + divert_from = WEST + if(SOUTHEAST) + divert_to = SOUTH + divert_from = EAST + if(SOUTHWEST) + divert_to = SOUTH + divert_from = WEST + spawn(2) + // wait for map load then find the conveyor in this turf + conv = locate() in src.loc + if(conv) // divert_from dir must match possible conveyor movement + if(conv.backwards != divert_from && conv.backwards != turn(divert_from,180) ) + del(src) // if no dir match, then delete self + set_divert() + update() + +// update the icon state depending on whether the diverter is extended +/obj/machinery/diverter/proc/update() + icon_state = "diverter[deployed]" + +// call to set the diversion vars of underlying conveyor +/obj/machinery/diverter/proc/set_divert() + if(conv) + if(deployed) + conv.divert = divert_to + conv.divdir = divert_from + else + conv.divert= 0 + + +// *** TESTING click to toggle +/obj/machinery/diverter/Click() + toggle() + + +// toggle between arm deployed and not deployed, showing animation +// +/obj/machinery/diverter/proc/toggle() + if( stat & (NOPOWER|BROKEN)) + return + + if(operating) + return + + use_power(50) + operating = 1 + if(deployed) + flick("diverter10",src) + icon_state = "diverter0" + sleep(10) + deployed = 0 + else + flick("diverter01",src) + icon_state = "diverter1" + sleep(10) + deployed = 1 + operating = 0 + update() + set_divert() + +// don't allow movement into the 'backwards' direction if deployed +/obj/machinery/diverter/CanPass(atom/movable/O, var/turf/target) + var/direct = get_dir(O, target) + if(direct == divert_to) // prevent movement through body of diverter + return 0 + if(!deployed) + return 1 + return(direct != turn(divert_from,180)) + +// don't allow movement through the arm if deployed +/obj/machinery/diverter/CheckExit(atom/movable/O, var/turf/target) + var/direct = get_dir(O, target) + if(direct == turn(divert_to,180)) // prevent movement through body of diverter + return 0 + if(!deployed) + return 1 + return(direct != divert_from) diff --git a/maps/Antiqua.dmm b/maps/Antiqua.dmm index d1f6c4c7506..d176893059b 100644 --- a/maps/Antiqua.dmm +++ b/maps/Antiqua.dmm @@ -403,254 +403,255 @@ "hM" = (/obj/machinery/light_switch{pixel_x = 24; pixel_y = 1},/turf/simulated/floor,/area/quartermaster/storage) "hN" = (/obj/effect/sign/movingparts,/turf/simulated/wall,/area/quartermaster/qm) "hO" = (/obj/machinery/door/airlock/glass_security{name = "Brig"; req_access_txt = "1"},/turf/simulated/floor,/area) -"hP" = (/obj/machinery/conveyor{dir = 1; id = "QMoffload"},/turf/simulated/floor,/area/quartermaster/storage) +"hP" = (/obj/machinery/conveyor{backwards = 2; dir = 2; divdir = 0; forwards = 1; id = "QMoffload"},/turf/simulated/floor,/area/quartermaster/storage) "hQ" = (/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/quartermaster/storage) "hR" = (/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/quartermaster/qm) -"hS" = (/obj/machinery/conveyor{dir = 2; divdir = 0; id = "QMonload"},/turf/simulated/floor,/area/quartermaster/qm) +"hS" = (/obj/machinery/conveyor{backwards = null; dir = 2; divdir = 0; forwards = null; id = "QMonload"},/turf/simulated/floor,/area/quartermaster/qm) "hT" = (/obj/structure/stool/chair{name = "Bailiff"},/turf/simulated/floor,/area) "hU" = (/obj/machinery/door/airlock/maintenance,/turf/simulated/floor,/area/quartermaster/qm) -"hV" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/quartermaster/qm) -"hW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/starboard) -"hX" = (/obj/structure/stool/chair{dir = 4},/turf/simulated/floor,/area) -"hY" = (/obj/structure/table{step_y = 0},/turf/simulated/floor,/area) -"hZ" = (/obj/structure/stool/chair{dir = 8},/turf/simulated/floor,/area) -"ia" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area) -"ib" = (/obj/structure/closet/crate,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/quartermaster/storage) -"ic" = (/obj/machinery/requests_console{department = "Quartermaster"; name = "Quartermaster Requests Console"; pixel_x = -24; pixel_y = 1},/turf/simulated/floor,/area/quartermaster/qm) -"id" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/quartermaster/qm) -"ie" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/starboard) -"if" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "grimy"},/area) -"ig" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{icon_state = "grimy"},/area) -"ih" = (/obj/structure/window/reinforced{dir = 1},/obj/item/device/flashlight,/turf/simulated/floor{icon_state = "grimy"},/area) -"ii" = (/obj/structure/stool/bed,/turf/simulated/floor,/area) -"ij" = (/obj/machinery/door/window/brigdoor/eastleft,/obj/machinery/door/window/brigdoor/westright,/turf/simulated/floor,/area) -"ik" = (/obj/machinery/computer/supplycomp,/turf/simulated/floor,/area/quartermaster/storage) -"il" = (/obj/machinery/door_control{id = "QMLoaddoor"; name = "Loading Doors"; pixel_x = -24; pixel_y = 0},/turf/simulated/floor,/area/quartermaster/qm) -"im" = (/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/quartermaster/qm) -"in" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "grimy"},/area) -"io" = (/turf/simulated/floor{icon_state = "grimy"},/area) -"ip" = (/obj/item/weapon/cigpacket,/turf/simulated/floor{icon_state = "grimy"},/area) -"iq" = (/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/quartermaster/storage) -"ir" = (/turf/simulated/floor{icon_state = "warning"},/area/quartermaster/storage) -"is" = (/obj/effect/sign/movingparts{pixel_x = 32; pixel_y = 0},/turf/simulated/floor{icon_state = "warning"},/area/quartermaster/storage) -"it" = (/obj/effect/sign/movingparts{pixel_x = -32; pixel_y = 0},/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/quartermaster/qm) -"iu" = (/obj/machinery/conveyor{dir = 8; id = "QMonload"},/turf/simulated/floor,/area/quartermaster/qm) -"iv" = (/obj/machinery/conveyor{dir = 2; divdir = 0; id = "QMonload"},/obj/effect/sign/movingparts{pixel_x = 32},/turf/simulated/floor,/area/quartermaster/qm) -"iw" = (/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (EAST)"},/area/quartermaster/qm) -"ix" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/effect/sign/movingparts,/turf/simulated/floor/plating,/area/quartermaster/qm) -"iy" = (/obj/machinery/door/window/westleft,/turf/simulated/floor{icon_state = "grimy"},/area) -"iz" = (/obj/machinery/conveyor{dir = 1; divert = 1; id = "QMoffload"},/obj/machinery/diverter{dir = 4},/turf/simulated/floor,/area/quartermaster/storage) -"iA" = (/obj/machinery/conveyor{dir = 8; id = "QMoffload"},/turf/simulated/floor,/area/quartermaster/storage) -"iB" = (/obj/structure/plasticflaps,/obj/machinery/conveyor{dir = 8; id = "QMoffload"},/turf/simulated/floor,/area/quartermaster/qm) -"iC" = (/obj/machinery/conveyor{dir = 8; id = "QMshuttle"},/turf/simulated/floor,/area/quartermaster/qm) -"iD" = (/obj/machinery/conveyor{dir = 8; id = "QMshuttle"},/obj/machinery/diverter{dir = 9},/turf/simulated/floor,/area/quartermaster/qm) -"iE" = (/obj/machinery/conveyor{dir = 8; id = "QMshuttle"},/obj/machinery/diverter{dir = 5},/turf/simulated/floor,/area/quartermaster/qm) -"iF" = (/obj/structure/plasticflaps,/obj/machinery/conveyor{dir = 8; id = "QMshuttle"},/turf/simulated/floor,/area/quartermaster/qm) -"iG" = (/obj/machinery/conveyor{dir = 8; id = "QMshuttle"},/turf/simulated/floor/plating,/area/quartermaster/qm) -"iH" = (/obj/structure/plasticflaps,/obj/machinery/conveyor{dir = 8; id = "QMshuttle"},/turf/simulated/floor/plating,/area/quartermaster/qm) -"iI" = (/obj/machinery/door/poddoor{density = 1; icon_state = "pdoor1"; id = "QMLoaddoor"; name = "Supply Dock Loading Door"; opacity = 1},/obj/machinery/conveyor{dir = 8; id = "QMshuttle"},/turf/simulated/floor/plating,/area/quartermaster/qm) -"iJ" = (/obj/machinery/vending/security,/turf/simulated/floor,/area) -"iK" = (/obj/structure/table/woodentable,/obj/item/device/detective_scanner,/turf/simulated/floor{icon_state = "grimy"},/area) -"iL" = (/obj/structure/closet/secure_closet/detective,/turf/simulated/floor{icon_state = "grimy"},/area) -"iM" = (/obj/machinery/door/airlock/security{name = "Security"; req_access = null; req_access_txt = "1"},/turf/simulated/floor,/area) -"iN" = (/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/quartermaster/storage) -"iO" = (/obj/effect/sign/movingparts{pixel_x = 32; pixel_y = 0},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/quartermaster/storage) -"iP" = (/obj/effect/sign/movingparts{pixel_x = -32; pixel_y = 0},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/quartermaster/qm) -"iQ" = (/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/quartermaster/qm) -"iR" = (/obj/machinery/conveyor_switch{id = "QMshuttle"; name = "Shuttle conveyor switch"},/obj/effect/sign/movingparts{pixel_x = 32},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/quartermaster/qm) -"iS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor,/area/quartermaster/qm) -"iT" = (/turf/simulated/floor/plating{dir = 1; icon_state = "warnplate"; tag = "icon-warnplate (EAST)"},/area/quartermaster/qm) -"iU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/effect/sign/movingparts,/turf/simulated/floor/plating,/area/quartermaster/qm) -"iV" = (/turf/simulated/wall,/area/maintenance/apmaint) -"iW" = (/turf/simulated/wall,/area/maintenance/aft) -"iX" = (/obj/structure/plasticflaps,/turf/simulated/floor,/area/quartermaster/storage) -"iY" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=2"; dir = 2; freq = 1400; location = "QM #3"},/turf/simulated/floor{icon_state = "bot"},/area/quartermaster/storage) -"iZ" = (/obj/machinery/door/airlock/glass,/turf/simulated/floor,/area/quartermaster/qm) -"ja" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor,/area/quartermaster/qm) -"jb" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/starboard) -"jc" = (/obj/machinery/door/airlock/maintenance_hatch,/turf/simulated/floor/plating,/area/maintenance/apmaint) -"jd" = (/turf/simulated/floor/plating,/area/maintenance/apmaint) -"je" = (/obj/machinery/door/airlock/maintenance_hatch,/turf/simulated/floor/plating,/area/maintenance/aft) -"jf" = (/turf/simulated/floor/plating,/area/maintenance/aft) -"jg" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=2"; dir = 2; freq = 1400; location = "QM #4"},/turf/simulated/floor{icon_state = "bot"},/area/quartermaster/storage) -"jh" = (/obj/machinery/conveyor_switch{id = "QMoffload"; name = "Cargo Bay Conveyor Switch"},/turf/simulated/floor,/area/quartermaster/qm) -"ji" = (/obj/machinery/light/spot{dir = 4; layer = 2.8},/turf/simulated/floor,/area/quartermaster/qm) -"jj" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor,/area/quartermaster/qm) -"jk" = (/obj/machinery/computer/supplycomp,/turf/simulated/floor,/area/quartermaster/qm) -"jl" = (/obj/structure/table/reinforced,/obj/item/weapon/stamp/denied,/obj/item/weapon/stamp{name = "Quartermaster's stamp"; pixel_x = -3; pixel_y = 3},/turf/simulated/floor,/area/quartermaster/qm) -"jm" = (/obj/machinery/disposal,/turf/simulated/floor,/area/quartermaster/qm) -"jn" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor,/area/quartermaster/qm) -"jo" = (/obj/machinery/vending/snack,/turf/simulated/floor,/area) -"jp" = (/obj/effect/landmark/start{name = "Cargo Technician"},/turf/simulated/floor,/area/quartermaster/storage) -"jq" = (/obj/structure/table/reinforced,/obj/machinery/door/window/westright,/obj/machinery/door/window/eastleft,/turf/simulated/floor,/area/quartermaster/qm) -"jr" = (/obj/structure/stool/chair{dir = 8},/obj/effect/landmark/start{name = "Quartermaster"},/turf/simulated/floor,/area/quartermaster/qm) -"js" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/floor,/area/quartermaster/qm) -"jt" = (/obj/structure/table/reinforced,/obj/machinery/door/window/westleft,/obj/machinery/door/window/eastright,/turf/simulated/floor,/area/quartermaster/qm) -"ju" = (/obj/structure/rack,/obj/item/clothing/suit/fire/firefighter,/obj/item/clothing/mask/gas,/obj/item/weapon/tank/emergency_oxygen,/obj/item/clothing/glasses/meson,/turf/simulated/floor,/area/quartermaster/qm) -"jv" = (/obj/structure/table,/turf/simulated/floor,/area/quartermaster/storage) -"jw" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor,/area/quartermaster/storage) -"jx" = (/obj/structure/table,/obj/item/weapon/hand_labeler,/turf/simulated/floor,/area/quartermaster/storage) -"jy" = (/obj/structure/table,/obj/item/weapon/crowbar,/turf/simulated/floor,/area/quartermaster/storage) -"jz" = (/obj/structure/table,/obj/machinery/cell_charger,/obj/machinery/camera{c_tag = "Cargo Loading Area North"},/turf/simulated/floor,/area/quartermaster/storage) -"jA" = (/obj/structure/closet,/turf/simulated/floor,/area/quartermaster/qm) -"jB" = (/obj/structure/rack,/turf/simulated/floor,/area/quartermaster/qm) -"jC" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor,/area/quartermaster/qm) -"jD" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area) -"jE" = (/obj/structure/closet/secure_closet/captains,/turf/simulated/floor,/area) -"jF" = (/obj/structure/table/woodentable{tag = "icon-wood_1tileendtable (EAST)"; icon_state = "wood_1tileendtable"; dir = 4},/obj/item/weapon/hand_tele,/turf/simulated/floor,/area) -"jG" = (/obj/structure/table/woodentable{tag = "icon-wood_1tilethick (EAST)"; icon_state = "wood_1tilethick"; dir = 4},/obj/item/weapon/camera_test,/turf/simulated/floor,/area) -"jH" = (/obj/structure/table/woodentable{tag = "icon-wood_1tileendtable (WEST)"; icon_state = "wood_1tileendtable"; dir = 8},/obj/item/weapon/coin,/turf/simulated/floor,/area) -"jI" = (/turf/simulated/wall,/area/crew_quarters/cafeteria) -"jJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass{name = "Cafeteria"},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) -"jK" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass{name = "Cafeteria"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) -"jL" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) -"jM" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) -"jN" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) -"jO" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass{name = "Cafeteria"},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) -"jP" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass{name = "Cafeteria"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) -"jQ" = (/obj/machinery/computer/communications,/turf/simulated/floor,/area) -"jR" = (/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) -"jS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) -"jT" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) -"jU" = (/obj/structure/stool/chair{dir = 4},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) -"jV" = (/obj/structure/table,/obj/machinery/light/spot{dir = 1},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) -"jW" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/condiment/peppermill{pixel_x = -8; pixel_y = 2},/obj/item/weapon/reagent_containers/food/condiment/saltshaker{pixel_x = -2},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) -"jX" = (/obj/structure/stool/chair{dir = 8},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) -"jY" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/condiment/saltshaker{pixel_x = 8; pixel_y = 4},/obj/item/weapon/reagent_containers/food/condiment/peppermill{pixel_x = 2; pixel_y = 0},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) -"jZ" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) -"ka" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; icon_state = "out"; on = 1},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) -"kb" = (/turf/simulated/floor{dir = 9; icon_state = "carpetside"},/area) -"kc" = (/turf/simulated/floor{dir = 1; icon_state = "carpetside"},/area) -"kd" = (/turf/simulated/floor{dir = 5; icon_state = "carpetside"},/area) -"ke" = (/turf/simulated/wall,/area/maintenance/asmaint) -"kf" = (/turf/simulated/floor/plating,/area/maintenance/asmaint) -"kg" = (/turf/simulated/wall/r_wall,/area/maintenance/asmaint) -"kh" = (/obj/machinery/computer/crew,/turf/simulated/floor,/area) -"ki" = (/obj/structure/table,/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) -"kj" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) -"kk" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) -"kl" = (/turf/simulated/floor{dir = 8; icon_state = "carpetside"},/area) -"km" = (/turf/simulated/floor{icon_state = "carpet"},/area) -"kn" = (/turf/simulated/floor{dir = 4; icon_state = "carpetside"},/area) -"ko" = (/obj/machinery/light/spot{dir = 4; layer = 2.8},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) -"kp" = (/obj/structure/table{tag = "icon-tabledir (SOUTHEAST)"; icon_state = "tabledir"; dir = 6},/turf/simulated/floor,/area) -"kq" = (/obj/structure/table{tag = "icon-tabledir (SOUTHWEST)"; icon_state = "tabledir"; dir = 10},/turf/simulated/floor,/area) -"kr" = (/obj/machinery/door/airlock/command{name = "Captain's Quarters"; req_access = null; req_access_txt = "20"},/turf/simulated/floor,/area) -"ks" = (/obj/machinery/light/spot{dir = 8; layer = 2.8},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) -"kt" = (/obj/machinery/camera{c_tag = "Cafeteria Starboard"; dir = 8},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) -"ku" = (/obj/machinery/door{icon = 'icons/obj/doors/doormorgue.dmi'; name = "Crew Quarters"; req_access_txt = "0"},/turf/simulated/floor,/area) -"kv" = (/turf/simulated/floor{dir = 10; icon_state = "carpetside"},/area) -"kw" = (/turf/simulated/floor{icon_state = "carpetside"},/area) -"kx" = (/turf/simulated/floor{dir = 6; icon_state = "carpetside"},/area) -"ky" = (/obj/machinery/computer/shuttle,/turf/simulated/floor,/area) -"kz" = (/obj/structure/table{dir = 5; icon_state = "tabledir"},/turf/simulated/floor,/area) -"kA" = (/obj/structure/table{tag = "icon-tabledir (NORTH)"; icon_state = "tabledir"; dir = 1},/turf/simulated/floor,/area) -"kB" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/turf/simulated/floor,/area) -"kC" = (/obj/item/weapon/mop,/turf/simulated/floor,/area) -"kD" = (/obj/machinery/camera{c_tag = "Cafeteria Port"; dir = 4},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) -"kE" = (/obj/machinery/computer/station_alert,/turf/simulated/floor,/area) -"kF" = (/obj/structure/stool/chair{dir = 1},/turf/simulated/floor,/area) -"kG" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) -"kH" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) -"kI" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/crew_quarters/kitchen) -"kJ" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=2"; freq = 1400; location = "Kitchen"},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/window/northleft{name = "Kitchen Delivery"; req_access_txt = "34;25;28"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "bot"},/area/crew_quarters/kitchen) -"kK" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/poddoor/shutters{density = 0; icon_state = "shutter0"; id = "kitchen"; name = "Kitchen Shutters"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) -"kL" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/turf/simulated/wall,/area/crew_quarters/kitchen) -"kM" = (/turf/simulated/wall,/area/crew_quarters/kitchen) -"kN" = (/obj/machinery/computer/supplycomp,/turf/simulated/floor,/area) -"kO" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; icon_state = "on"; on = 1},/obj/machinery/power/apc{dir = 8},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) -"kP" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = "90Curve"},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) -"kQ" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) -"kR" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) -"kS" = (/obj/machinery/door/window/southleft{name = "Kitchen Delivery"; req_access_txt = "25;28"},/turf/simulated/floor{icon_state = "delivery"},/area/crew_quarters/kitchen) -"kT" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/sink/kitchen2{pixel_y = 28},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) -"kU" = (/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) -"kV" = (/obj/machinery/door_control{id = "kitchen"; name = "Kitchen Shutters"; pixel_x = 0; pixel_y = 24},/obj/machinery/atmospherics/unary/vent_pump{dir = 1; icon_state = "out"; on = 1},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) -"kW" = (/obj/structure/closet/secure_closet/kitchen,/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) -"kX" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/poddoor/shutters{density = 0; icon_state = "shutter0"; id = "bar"; name = "Bar Shutters"; opacity = 0},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) -"kY" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/poddoor/shutters{density = 0; icon_state = "shutter0"; id = "bar"; name = "Bar Shutters"; opacity = 0},/obj/item/weapon/zippo,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) -"kZ" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/poddoor/shutters{density = 0; icon_state = "shutter0"; id = "bar"; name = "Bar Shutters"; opacity = 0},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) -"la" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/poddoor/shutters{density = 0; icon_state = "shutter0"; id = "bar"; name = "Bar Shutters"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) -"lb" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/poddoor/shutters{density = 0; icon_state = "shutter0"; id = "bar"; name = "Bar Shutters"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) -"lc" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall,/area/crew_quarters/kitchen) -"ld" = (/obj/machinery/light_switch{dir = 8; pixel_x = -24; pixel_y = 6},/obj/machinery/light_switch{dir = 8; name = "light switch (Cafeteria)"; otherarea = "crew_quarters/cafeteria"; pixel_x = -24; pixel_y = -6},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) -"le" = (/obj/structure/table,/obj/machinery/microwave,/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; icon_state = "on"; on = 1},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) -"lf" = (/obj/structure/table,/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) -"lg" = (/obj/structure/closet/secure_closet/fridge,/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) -"lh" = (/obj/machinery/door_control{dir = 8; id = "bar"; name = "Bar Shutters"; pixel_x = -24; pixel_y = 0},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) -"li" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) -"lj" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; icon_state = "on"; on = 1},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) -"lk" = (/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) -"ll" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) -"lm" = (/obj/structure/reagent_dispensers/beerkeg,/obj/structure/window/reinforced{dir = 4},/obj/machinery/light_switch{dir = 1; pixel_y = 24},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) -"ln" = (/obj/machinery/light/spot{dir = 4; layer = 2.8},/obj/structure/table,/obj/machinery/microwave,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) -"lo" = (/obj/structure/table,/obj/item/weapon/kitchen/rollingpin,/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) -"lp" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/condiment/enzyme,/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) -"lq" = (/obj/machinery/light/spot{dir = 4; layer = 2.8},/obj/structure/closet/secure_closet/meat,/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) -"lr" = (/obj/machinery/smartfridge,/turf/simulated/wall,/area) -"ls" = (/obj/structure/closet/gmcloset,/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) -"lt" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) -"lu" = (/obj/effect/landmark/start{name = "Bartender"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) -"lv" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = "Streight"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = "90Curve"},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) -"lw" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; icon_state = "out"; on = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) -"lx" = (/obj/machinery/door/window/eastright{name = "Bar"; req_one_access_txt = "25"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) -"ly" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = "90Curve"},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) -"lz" = (/obj/machinery/door/window/westleft{name = "Kitchen"; req_access_txt = "28"},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) -"lA" = (/obj/effect/landmark/start{name = "Chef"},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) -"lB" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock{name = "Freezer"; req_one_access_txt = "28"},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) -"lC" = (/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/kitchen) -"lD" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/kitchen) -"lE" = (/obj/machinery/door/airlock/maintenance_hatch,/turf/simulated/floor/plating,/area/maintenance/asmaint) -"lF" = (/obj/structure/closet/crate/internals,/turf/simulated/floor,/area) -"lG" = (/obj/structure/table/reinforced,/obj/item/weapon/gun/projectile/shotgun,/obj/item/clothing/head/that,/obj/machinery/light/spot,/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) -"lH" = (/obj/machinery/vending/boozeomat{pixel_x = 0},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) -"lI" = (/obj/structure/table/reinforced,/obj/item/weapon/book/manual/barman_recipes{pixel_x = 4; pixel_y = 8},/obj/item/weapon/reagent_containers/food/drinks/shaker,/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) -"lJ" = (/obj/structure/table/reinforced,/obj/machinery/power/apc,/obj/structure/cable{d2 = 1; icon_state = "0-1"},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) -"lK" = (/obj/structure/table/reinforced,/obj/machinery/light/spot,/obj/machinery/requests_console{department = "Bar"; departmentType = 2; name = "Bar RC"; pixel_x = -1; pixel_y = -30},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) -"lL" = (/obj/structure/closet/secure_closet/bar{req_access_txt = "25"},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) -"lM" = (/obj/machinery/power/apc,/obj/structure/cable{d2 = 1; icon_state = "0-1"},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) -"lN" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table,/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) -"lO" = (/obj/machinery/requests_console{department = "Kitchen"; departmentType = 2; name = "Kitchen RC"; pixel_x = 0; pixel_y = -30},/obj/structure/table,/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) -"lP" = (/obj/item/weapon/storage/donkpocket_kit,/obj/structure/table,/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) -"lQ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = "Streight"},/obj/machinery/camera{c_tag = "Kitchen"; dir = 1},/obj/structure/table,/obj/machinery/processor,/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) -"lR" = (/obj/machinery/light/spot,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = "Streight"},/obj/structure/table,/obj/machinery/blender{pixel_y = 0},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) -"lS" = (/obj/machinery/power/apc,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/table,/obj/machinery/juicer,/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) -"lT" = (/obj/machinery/chem_master/condimaster,/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) -"lU" = (/obj/structure/kitchenspike,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/kitchen) -"lV" = (/obj/machinery/gibber,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/kitchen) -"lW" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area) -"lX" = (/turf/simulated/wall/r_wall,/area/crew_quarters/bar) -"lY" = (/turf/simulated/wall/r_wall,/area/crew_quarters/kitchen) -"lZ" = (/turf/simulated/wall/r_wall,/area/maintenance/aft) -"ma" = (/turf/unsimulated/wall,/area/start) -"mb" = (/turf/space,/area/start) -"mc" = (/obj/effect/landmark/start,/turf/space,/area/start) -"md" = (/turf/unsimulated/wall{icon = 'icons/misc/fullscreen.dmi'; icon_state = "titleold"; name = "Baystation 13"},/area/start) -"me" = (/turf/space,/area/shuttle) -"mf" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s6"; icon_state = "swall_s6"; dir = 2},/area/supply/dock) -"mg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/supply/dock) -"mh" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/supply/dock) -"mi" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s10"; icon_state = "swall_s10"; dir = 2},/area/supply/dock) -"mj" = (/turf/simulated/shuttle/floor,/turf/simulated/shuttle/wall{tag = "icon-swall_f9"; icon_state = "swall_f9"; dir = 2},/area/supply/dock) -"mk" = (/obj/effect/marker/supplymarker,/turf/simulated/shuttle/floor,/area/supply/dock) -"ml" = (/turf/simulated/shuttle/floor,/turf/simulated/shuttle/wall{dir = 2; icon_state = "swall_f5"; tag = "icon-swall_f10"},/area/supply/dock) -"mm" = (/turf/simulated/shuttle/wall{tag = "icon-swall3"; icon_state = "swall3"; dir = 2},/area/supply/dock) -"mn" = (/obj/effect/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; name = "EXTERNAL AIRLOCK"; pixel_x = -32},/obj/effect/marker/supplymarker,/turf/simulated/shuttle/floor,/area/supply/dock) -"mo" = (/obj/machinery/door/airlock/external{name = "Supply Dock Airlock"},/turf/simulated/shuttle/floor,/area/supply/dock) -"mp" = (/turf/simulated/shuttle/floor,/area/supply/dock) -"mq" = (/obj/machinery/conveyor{dir = 2; id = "QMshuttle"},/obj/effect/sign/movingparts{pixel_x = -32},/turf/simulated/shuttle/floor,/area/supply/dock) -"mr" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/supply/dock) -"ms" = (/obj/machinery/conveyor{dir = 2; id = "QMshuttle"},/turf/simulated/shuttle/floor,/area/supply/dock) -"mt" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/supply/dock) -"mu" = (/turf/space,/area/supply) -"mv" = (/obj/machinery/door/poddoor{density = 1; icon_state = "pdoor1"; id = "QMLoaddoor"; name = "Supply Dock Loading Door"; opacity = 1},/obj/machinery/conveyor{dir = 8; id = "QMshuttle"},/obj/structure/plasticflaps,/turf/simulated/shuttle/floor,/area/supply/dock) -"mw" = (/obj/machinery/conveyor{dir = 8; id = "QMshuttle"},/obj/machinery/diverter{dir = 5},/turf/simulated/shuttle/floor,/area/supply/dock) -"mx" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s5"; icon_state = "swall_s5"; dir = 2},/area/supply/dock) -"my" = (/obj/structure/shuttle/engine/heater,/turf/simulated/shuttle/wall{tag = "icon-swall14"; icon_state = "swall14"; dir = 2},/area/supply/dock) -"mz" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s9"; icon_state = "swall_s9"; dir = 2},/area/supply/dock) -"mA" = (/obj/structure/shuttle/engine/propulsion/burst/left,/turf/space,/area/supply/dock) -"mB" = (/obj/structure/shuttle/engine/propulsion/burst,/turf/space,/area/supply/dock) -"mC" = (/obj/structure/shuttle/engine/propulsion/burst/right,/turf/space,/area/supply/dock) +"hV" = (/obj/machinery/conveyor{backwards = 1; dir = 2; divdir = 0; forwards = 2; id = "QMonload"},/turf/simulated/floor,/area/quartermaster/qm) +"hW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/quartermaster/qm) +"hX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/starboard) +"hY" = (/obj/structure/stool/chair{dir = 4},/turf/simulated/floor,/area) +"hZ" = (/obj/structure/table{step_y = 0},/turf/simulated/floor,/area) +"ia" = (/obj/structure/stool/chair{dir = 8},/turf/simulated/floor,/area) +"ib" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area) +"ic" = (/obj/structure/closet/crate,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/quartermaster/storage) +"id" = (/obj/machinery/requests_console{department = "Quartermaster"; name = "Quartermaster Requests Console"; pixel_x = -24; pixel_y = 1},/turf/simulated/floor,/area/quartermaster/qm) +"ie" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/quartermaster/qm) +"if" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/starboard) +"ig" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "grimy"},/area) +"ih" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{icon_state = "grimy"},/area) +"ii" = (/obj/structure/window/reinforced{dir = 1},/obj/item/device/flashlight,/turf/simulated/floor{icon_state = "grimy"},/area) +"ij" = (/obj/structure/stool/bed,/turf/simulated/floor,/area) +"ik" = (/obj/machinery/door/window/brigdoor/eastleft,/obj/machinery/door/window/brigdoor/westright,/turf/simulated/floor,/area) +"il" = (/obj/machinery/computer/supplycomp,/turf/simulated/floor,/area/quartermaster/storage) +"im" = (/obj/machinery/door_control{id = "QMLoaddoor"; name = "Loading Doors"; pixel_x = -24; pixel_y = 0},/turf/simulated/floor,/area/quartermaster/qm) +"in" = (/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/quartermaster/qm) +"io" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "grimy"},/area) +"ip" = (/turf/simulated/floor{icon_state = "grimy"},/area) +"iq" = (/obj/item/weapon/cigpacket,/turf/simulated/floor{icon_state = "grimy"},/area) +"ir" = (/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/quartermaster/storage) +"is" = (/turf/simulated/floor{icon_state = "warning"},/area/quartermaster/storage) +"it" = (/obj/effect/sign/movingparts{pixel_x = 32; pixel_y = 0},/turf/simulated/floor{icon_state = "warning"},/area/quartermaster/storage) +"iu" = (/obj/effect/sign/movingparts{pixel_x = -32; pixel_y = 0},/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/quartermaster/qm) +"iv" = (/obj/machinery/conveyor{backwards = 4; dir = 5; forwards = 2; id = "QMonload"},/turf/simulated/floor,/area/quartermaster/qm) +"iw" = (/obj/machinery/conveyor{backwards = 1; dir = 2; divdir = 0; forwards = 2; id = "QMonload"},/obj/effect/sign/movingparts{pixel_x = 32},/turf/simulated/floor,/area/quartermaster/qm) +"ix" = (/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (EAST)"},/area/quartermaster/qm) +"iy" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/effect/sign/movingparts,/turf/simulated/floor/plating,/area/quartermaster/qm) +"iz" = (/obj/machinery/door/window/westleft,/turf/simulated/floor{icon_state = "grimy"},/area) +"iA" = (/obj/machinery/conveyor{backwards = 4; dir = 6; divert = 1; forwards = 1; id = "QMoffload"},/turf/simulated/floor,/area/quartermaster/storage) +"iB" = (/obj/machinery/conveyor{dir = 8; id = "QMoffload"},/turf/simulated/floor,/area/quartermaster/storage) +"iC" = (/obj/structure/plasticflaps,/obj/machinery/conveyor{dir = 8; id = "QMoffload"},/turf/simulated/floor,/area/quartermaster/qm) +"iD" = (/obj/machinery/conveyor{dir = 8; id = "QMshuttle"},/turf/simulated/floor,/area/quartermaster/qm) +"iE" = (/obj/machinery/conveyor{dir = 8; id = "QMshuttle"},/obj/machinery/diverter{dir = 9},/turf/simulated/floor,/area/quartermaster/qm) +"iF" = (/obj/machinery/conveyor{dir = 8; id = "QMshuttle"},/obj/machinery/diverter{dir = 5},/turf/simulated/floor,/area/quartermaster/qm) +"iG" = (/obj/structure/plasticflaps,/obj/machinery/conveyor{dir = 8; id = "QMshuttle"},/turf/simulated/floor,/area/quartermaster/qm) +"iH" = (/obj/machinery/conveyor{dir = 8; id = "QMshuttle"},/turf/simulated/floor/plating,/area/quartermaster/qm) +"iI" = (/obj/structure/plasticflaps,/obj/machinery/conveyor{dir = 8; id = "QMshuttle"},/turf/simulated/floor/plating,/area/quartermaster/qm) +"iJ" = (/obj/machinery/door/poddoor{density = 1; icon_state = "pdoor1"; id = "QMLoaddoor"; name = "Supply Dock Loading Door"; opacity = 1},/obj/machinery/conveyor{dir = 8; id = "QMshuttle"},/turf/simulated/floor/plating,/area/quartermaster/qm) +"iK" = (/obj/machinery/vending/security,/turf/simulated/floor,/area) +"iL" = (/obj/structure/table/woodentable,/obj/item/device/detective_scanner,/turf/simulated/floor{icon_state = "grimy"},/area) +"iM" = (/obj/structure/closet/secure_closet/detective,/turf/simulated/floor{icon_state = "grimy"},/area) +"iN" = (/obj/machinery/door/airlock/security{name = "Security"; req_access = null; req_access_txt = "1"},/turf/simulated/floor,/area) +"iO" = (/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/quartermaster/storage) +"iP" = (/obj/effect/sign/movingparts{pixel_x = 32; pixel_y = 0},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/quartermaster/storage) +"iQ" = (/obj/effect/sign/movingparts{pixel_x = -32; pixel_y = 0},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/quartermaster/qm) +"iR" = (/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/quartermaster/qm) +"iS" = (/obj/machinery/conveyor_switch{id = "QMshuttle"; name = "Shuttle conveyor switch"},/obj/effect/sign/movingparts{pixel_x = 32},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/quartermaster/qm) +"iT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor,/area/quartermaster/qm) +"iU" = (/turf/simulated/floor/plating{dir = 1; icon_state = "warnplate"; tag = "icon-warnplate (EAST)"},/area/quartermaster/qm) +"iV" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/effect/sign/movingparts,/turf/simulated/floor/plating,/area/quartermaster/qm) +"iW" = (/turf/simulated/wall,/area/maintenance/apmaint) +"iX" = (/turf/simulated/wall,/area/maintenance/aft) +"iY" = (/obj/structure/plasticflaps,/turf/simulated/floor,/area/quartermaster/storage) +"iZ" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=2"; dir = 2; freq = 1400; location = "QM #3"},/turf/simulated/floor{icon_state = "bot"},/area/quartermaster/storage) +"ja" = (/obj/machinery/door/airlock/glass,/turf/simulated/floor,/area/quartermaster/qm) +"jb" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor,/area/quartermaster/qm) +"jc" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/starboard) +"jd" = (/obj/machinery/door/airlock/maintenance_hatch,/turf/simulated/floor/plating,/area/maintenance/apmaint) +"je" = (/turf/simulated/floor/plating,/area/maintenance/apmaint) +"jf" = (/obj/machinery/door/airlock/maintenance_hatch,/turf/simulated/floor/plating,/area/maintenance/aft) +"jg" = (/turf/simulated/floor/plating,/area/maintenance/aft) +"jh" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=2"; dir = 2; freq = 1400; location = "QM #4"},/turf/simulated/floor{icon_state = "bot"},/area/quartermaster/storage) +"ji" = (/obj/machinery/conveyor_switch{id = "QMoffload"; name = "Cargo Bay Conveyor Switch"},/turf/simulated/floor,/area/quartermaster/qm) +"jj" = (/obj/machinery/light/spot{dir = 4; layer = 2.8},/turf/simulated/floor,/area/quartermaster/qm) +"jk" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor,/area/quartermaster/qm) +"jl" = (/obj/machinery/computer/supplycomp,/turf/simulated/floor,/area/quartermaster/qm) +"jm" = (/obj/structure/table/reinforced,/obj/item/weapon/stamp/denied,/obj/item/weapon/stamp{name = "Quartermaster's stamp"; pixel_x = -3; pixel_y = 3},/turf/simulated/floor,/area/quartermaster/qm) +"jn" = (/obj/machinery/disposal,/turf/simulated/floor,/area/quartermaster/qm) +"jo" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor,/area/quartermaster/qm) +"jp" = (/obj/machinery/vending/snack,/turf/simulated/floor,/area) +"jq" = (/obj/effect/landmark/start{name = "Cargo Technician"},/turf/simulated/floor,/area/quartermaster/storage) +"jr" = (/obj/structure/table/reinforced,/obj/machinery/door/window/westright,/obj/machinery/door/window/eastleft,/turf/simulated/floor,/area/quartermaster/qm) +"js" = (/obj/structure/stool/chair{dir = 8},/obj/effect/landmark/start{name = "Quartermaster"},/turf/simulated/floor,/area/quartermaster/qm) +"jt" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/floor,/area/quartermaster/qm) +"ju" = (/obj/structure/table/reinforced,/obj/machinery/door/window/westleft,/obj/machinery/door/window/eastright,/turf/simulated/floor,/area/quartermaster/qm) +"jv" = (/obj/structure/rack,/obj/item/clothing/suit/fire/firefighter,/obj/item/clothing/mask/gas,/obj/item/weapon/tank/emergency_oxygen,/obj/item/clothing/glasses/meson,/turf/simulated/floor,/area/quartermaster/qm) +"jw" = (/obj/structure/table,/turf/simulated/floor,/area/quartermaster/storage) +"jx" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor,/area/quartermaster/storage) +"jy" = (/obj/structure/table,/obj/item/weapon/hand_labeler,/turf/simulated/floor,/area/quartermaster/storage) +"jz" = (/obj/structure/table,/obj/item/weapon/crowbar,/turf/simulated/floor,/area/quartermaster/storage) +"jA" = (/obj/structure/table,/obj/machinery/cell_charger,/obj/machinery/camera{c_tag = "Cargo Loading Area North"},/turf/simulated/floor,/area/quartermaster/storage) +"jB" = (/obj/structure/closet,/turf/simulated/floor,/area/quartermaster/qm) +"jC" = (/obj/structure/rack,/turf/simulated/floor,/area/quartermaster/qm) +"jD" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor,/area/quartermaster/qm) +"jE" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area) +"jF" = (/obj/structure/closet/secure_closet/captains,/turf/simulated/floor,/area) +"jG" = (/obj/structure/table/woodentable{tag = "icon-wood_1tileendtable (EAST)"; icon_state = "wood_1tileendtable"; dir = 4},/obj/item/weapon/hand_tele,/turf/simulated/floor,/area) +"jH" = (/obj/structure/table/woodentable{tag = "icon-wood_1tilethick (EAST)"; icon_state = "wood_1tilethick"; dir = 4},/obj/item/weapon/camera_test,/turf/simulated/floor,/area) +"jI" = (/obj/structure/table/woodentable{tag = "icon-wood_1tileendtable (WEST)"; icon_state = "wood_1tileendtable"; dir = 8},/obj/item/weapon/coin,/turf/simulated/floor,/area) +"jJ" = (/turf/simulated/wall,/area/crew_quarters/cafeteria) +"jK" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass{name = "Cafeteria"},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) +"jL" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass{name = "Cafeteria"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) +"jM" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) +"jN" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) +"jO" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) +"jP" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass{name = "Cafeteria"},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) +"jQ" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass{name = "Cafeteria"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) +"jR" = (/obj/machinery/computer/communications,/turf/simulated/floor,/area) +"jS" = (/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) +"jT" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) +"jU" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) +"jV" = (/obj/structure/stool/chair{dir = 4},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) +"jW" = (/obj/structure/table,/obj/machinery/light/spot{dir = 1},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) +"jX" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/condiment/peppermill{pixel_x = -8; pixel_y = 2},/obj/item/weapon/reagent_containers/food/condiment/saltshaker{pixel_x = -2},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) +"jY" = (/obj/structure/stool/chair{dir = 8},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) +"jZ" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/condiment/saltshaker{pixel_x = 8; pixel_y = 4},/obj/item/weapon/reagent_containers/food/condiment/peppermill{pixel_x = 2; pixel_y = 0},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) +"ka" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) +"kb" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; icon_state = "out"; on = 1},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) +"kc" = (/turf/simulated/floor{dir = 9; icon_state = "carpetside"},/area) +"kd" = (/turf/simulated/floor{dir = 1; icon_state = "carpetside"},/area) +"ke" = (/turf/simulated/floor{dir = 5; icon_state = "carpetside"},/area) +"kf" = (/turf/simulated/wall,/area/maintenance/asmaint) +"kg" = (/turf/simulated/floor/plating,/area/maintenance/asmaint) +"kh" = (/turf/simulated/wall/r_wall,/area/maintenance/asmaint) +"ki" = (/obj/machinery/computer/crew,/turf/simulated/floor,/area) +"kj" = (/obj/structure/table,/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) +"kk" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) +"kl" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) +"km" = (/turf/simulated/floor{dir = 8; icon_state = "carpetside"},/area) +"kn" = (/turf/simulated/floor{icon_state = "carpet"},/area) +"ko" = (/turf/simulated/floor{dir = 4; icon_state = "carpetside"},/area) +"kp" = (/obj/machinery/light/spot{dir = 4; layer = 2.8},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) +"kq" = (/obj/structure/table{tag = "icon-tabledir (SOUTHEAST)"; icon_state = "tabledir"; dir = 6},/turf/simulated/floor,/area) +"kr" = (/obj/structure/table{tag = "icon-tabledir (SOUTHWEST)"; icon_state = "tabledir"; dir = 10},/turf/simulated/floor,/area) +"ks" = (/obj/machinery/door/airlock/command{name = "Captain's Quarters"; req_access = null; req_access_txt = "20"},/turf/simulated/floor,/area) +"kt" = (/obj/machinery/light/spot{dir = 8; layer = 2.8},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) +"ku" = (/obj/machinery/camera{c_tag = "Cafeteria Starboard"; dir = 8},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) +"kv" = (/obj/machinery/door{icon = 'icons/obj/doors/doormorgue.dmi'; name = "Crew Quarters"; req_access_txt = "0"},/turf/simulated/floor,/area) +"kw" = (/turf/simulated/floor{dir = 10; icon_state = "carpetside"},/area) +"kx" = (/turf/simulated/floor{icon_state = "carpetside"},/area) +"ky" = (/turf/simulated/floor{dir = 6; icon_state = "carpetside"},/area) +"kz" = (/obj/machinery/computer/shuttle,/turf/simulated/floor,/area) +"kA" = (/obj/structure/table{dir = 5; icon_state = "tabledir"},/turf/simulated/floor,/area) +"kB" = (/obj/structure/table{tag = "icon-tabledir (NORTH)"; icon_state = "tabledir"; dir = 1},/turf/simulated/floor,/area) +"kC" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/turf/simulated/floor,/area) +"kD" = (/obj/item/weapon/mop,/turf/simulated/floor,/area) +"kE" = (/obj/machinery/camera{c_tag = "Cafeteria Port"; dir = 4},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) +"kF" = (/obj/machinery/computer/station_alert,/turf/simulated/floor,/area) +"kG" = (/obj/structure/stool/chair{dir = 1},/turf/simulated/floor,/area) +"kH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) +"kI" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) +"kJ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/crew_quarters/kitchen) +"kK" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=2"; freq = 1400; location = "Kitchen"},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/window/northleft{name = "Kitchen Delivery"; req_access_txt = "34;25;28"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "bot"},/area/crew_quarters/kitchen) +"kL" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/poddoor/shutters{density = 0; icon_state = "shutter0"; id = "kitchen"; name = "Kitchen Shutters"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) +"kM" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/turf/simulated/wall,/area/crew_quarters/kitchen) +"kN" = (/turf/simulated/wall,/area/crew_quarters/kitchen) +"kO" = (/obj/machinery/computer/supplycomp,/turf/simulated/floor,/area) +"kP" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; icon_state = "on"; on = 1},/obj/machinery/power/apc{dir = 8},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) +"kQ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = "90Curve"},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) +"kR" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) +"kS" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria) +"kT" = (/obj/machinery/door/window/southleft{name = "Kitchen Delivery"; req_access_txt = "25;28"},/turf/simulated/floor{icon_state = "delivery"},/area/crew_quarters/kitchen) +"kU" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/sink/kitchen2{pixel_y = 28},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) +"kV" = (/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) +"kW" = (/obj/machinery/door_control{id = "kitchen"; name = "Kitchen Shutters"; pixel_x = 0; pixel_y = 24},/obj/machinery/atmospherics/unary/vent_pump{dir = 1; icon_state = "out"; on = 1},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) +"kX" = (/obj/structure/closet/secure_closet/kitchen,/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) +"kY" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/poddoor/shutters{density = 0; icon_state = "shutter0"; id = "bar"; name = "Bar Shutters"; opacity = 0},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) +"kZ" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/poddoor/shutters{density = 0; icon_state = "shutter0"; id = "bar"; name = "Bar Shutters"; opacity = 0},/obj/item/weapon/zippo,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) +"la" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/poddoor/shutters{density = 0; icon_state = "shutter0"; id = "bar"; name = "Bar Shutters"; opacity = 0},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) +"lb" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/poddoor/shutters{density = 0; icon_state = "shutter0"; id = "bar"; name = "Bar Shutters"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) +"lc" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/poddoor/shutters{density = 0; icon_state = "shutter0"; id = "bar"; name = "Bar Shutters"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) +"ld" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall,/area/crew_quarters/kitchen) +"le" = (/obj/machinery/light_switch{dir = 8; pixel_x = -24; pixel_y = 6},/obj/machinery/light_switch{dir = 8; name = "light switch (Cafeteria)"; otherarea = "crew_quarters/cafeteria"; pixel_x = -24; pixel_y = -6},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) +"lf" = (/obj/structure/table,/obj/machinery/microwave,/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; icon_state = "on"; on = 1},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) +"lg" = (/obj/structure/table,/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) +"lh" = (/obj/structure/closet/secure_closet/fridge,/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) +"li" = (/obj/machinery/door_control{dir = 8; id = "bar"; name = "Bar Shutters"; pixel_x = -24; pixel_y = 0},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) +"lj" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) +"lk" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; icon_state = "on"; on = 1},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) +"ll" = (/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) +"lm" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) +"ln" = (/obj/structure/reagent_dispensers/beerkeg,/obj/structure/window/reinforced{dir = 4},/obj/machinery/light_switch{dir = 1; pixel_y = 24},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) +"lo" = (/obj/machinery/light/spot{dir = 4; layer = 2.8},/obj/structure/table,/obj/machinery/microwave,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) +"lp" = (/obj/structure/table,/obj/item/weapon/kitchen/rollingpin,/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) +"lq" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/condiment/enzyme,/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) +"lr" = (/obj/machinery/light/spot{dir = 4; layer = 2.8},/obj/structure/closet/secure_closet/meat,/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) +"ls" = (/obj/machinery/smartfridge,/turf/simulated/wall,/area) +"lt" = (/obj/structure/closet/gmcloset,/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) +"lu" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) +"lv" = (/obj/effect/landmark/start{name = "Bartender"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) +"lw" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = "Streight"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = "90Curve"},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) +"lx" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; icon_state = "out"; on = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) +"ly" = (/obj/machinery/door/window/eastright{name = "Bar"; req_one_access_txt = "25"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) +"lz" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = "90Curve"},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) +"lA" = (/obj/machinery/door/window/westleft{name = "Kitchen"; req_access_txt = "28"},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) +"lB" = (/obj/effect/landmark/start{name = "Chef"},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) +"lC" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock{name = "Freezer"; req_one_access_txt = "28"},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) +"lD" = (/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/kitchen) +"lE" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/kitchen) +"lF" = (/obj/machinery/door/airlock/maintenance_hatch,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"lG" = (/obj/structure/closet/crate/internals,/turf/simulated/floor,/area) +"lH" = (/obj/structure/table/reinforced,/obj/item/weapon/gun/projectile/shotgun,/obj/item/clothing/head/that,/obj/machinery/light/spot,/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) +"lI" = (/obj/machinery/vending/boozeomat{pixel_x = 0},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) +"lJ" = (/obj/structure/table/reinforced,/obj/item/weapon/book/manual/barman_recipes{pixel_x = 4; pixel_y = 8},/obj/item/weapon/reagent_containers/food/drinks/shaker,/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) +"lK" = (/obj/structure/table/reinforced,/obj/machinery/power/apc,/obj/structure/cable{d2 = 1; icon_state = "0-1"},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) +"lL" = (/obj/structure/table/reinforced,/obj/machinery/light/spot,/obj/machinery/requests_console{department = "Bar"; departmentType = 2; name = "Bar RC"; pixel_x = -1; pixel_y = -30},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) +"lM" = (/obj/structure/closet/secure_closet/bar{req_access_txt = "25"},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/bar) +"lN" = (/obj/machinery/power/apc,/obj/structure/cable{d2 = 1; icon_state = "0-1"},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) +"lO" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table,/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) +"lP" = (/obj/machinery/requests_console{department = "Kitchen"; departmentType = 2; name = "Kitchen RC"; pixel_x = 0; pixel_y = -30},/obj/structure/table,/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) +"lQ" = (/obj/item/weapon/storage/donkpocket_kit,/obj/structure/table,/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) +"lR" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = "Streight"},/obj/machinery/camera{c_tag = "Kitchen"; dir = 1},/obj/structure/table,/obj/machinery/processor,/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) +"lS" = (/obj/machinery/light/spot,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = "Streight"},/obj/structure/table,/obj/machinery/blender{pixel_y = 0},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) +"lT" = (/obj/machinery/power/apc,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/table,/obj/machinery/juicer,/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) +"lU" = (/obj/machinery/chem_master/condimaster,/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/kitchen) +"lV" = (/obj/structure/kitchenspike,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/kitchen) +"lW" = (/obj/machinery/gibber,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/kitchen) +"lX" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area) +"lY" = (/turf/simulated/wall/r_wall,/area/crew_quarters/bar) +"lZ" = (/turf/simulated/wall/r_wall,/area/crew_quarters/kitchen) +"ma" = (/turf/simulated/wall/r_wall,/area/maintenance/aft) +"mb" = (/turf/unsimulated/wall,/area/start) +"mc" = (/turf/space,/area/start) +"md" = (/obj/effect/landmark/start,/turf/space,/area/start) +"me" = (/turf/unsimulated/wall{icon = 'icons/misc/fullscreen.dmi'; icon_state = "titleold"; name = "Baystation 13"},/area/start) +"mf" = (/turf/space,/area/shuttle) +"mg" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s6"; icon_state = "swall_s6"; dir = 2},/area/supply/dock) +"mh" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/supply/dock) +"mi" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/supply/dock) +"mj" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s10"; icon_state = "swall_s10"; dir = 2},/area/supply/dock) +"mk" = (/turf/simulated/shuttle/floor,/turf/simulated/shuttle/wall{tag = "icon-swall_f9"; icon_state = "swall_f9"; dir = 2},/area/supply/dock) +"ml" = (/obj/effect/marker/supplymarker,/turf/simulated/shuttle/floor,/area/supply/dock) +"mm" = (/turf/simulated/shuttle/floor,/turf/simulated/shuttle/wall{dir = 2; icon_state = "swall_f5"; tag = "icon-swall_f10"},/area/supply/dock) +"mn" = (/turf/simulated/shuttle/wall{tag = "icon-swall3"; icon_state = "swall3"; dir = 2},/area/supply/dock) +"mo" = (/obj/effect/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; name = "EXTERNAL AIRLOCK"; pixel_x = -32},/obj/effect/marker/supplymarker,/turf/simulated/shuttle/floor,/area/supply/dock) +"mp" = (/obj/machinery/door/airlock/external{name = "Supply Dock Airlock"},/turf/simulated/shuttle/floor,/area/supply/dock) +"mq" = (/turf/simulated/shuttle/floor,/area/supply/dock) +"mr" = (/obj/machinery/conveyor{dir = 2; id = "QMshuttle"},/obj/effect/sign/movingparts{pixel_x = -32},/turf/simulated/shuttle/floor,/area/supply/dock) +"ms" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/supply/dock) +"mt" = (/obj/machinery/conveyor{dir = 2; id = "QMshuttle"},/turf/simulated/shuttle/floor,/area/supply/dock) +"mu" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/supply/dock) +"mv" = (/turf/space,/area/supply) +"mw" = (/obj/machinery/door/poddoor{density = 1; icon_state = "pdoor1"; id = "QMLoaddoor"; name = "Supply Dock Loading Door"; opacity = 1},/obj/machinery/conveyor{dir = 8; id = "QMshuttle"},/obj/structure/plasticflaps,/turf/simulated/shuttle/floor,/area/supply/dock) +"mx" = (/obj/machinery/conveyor{dir = 8; id = "QMshuttle"},/turf/simulated/shuttle/floor,/area/supply/dock) +"my" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s5"; icon_state = "swall_s5"; dir = 2},/area/supply/dock) +"mz" = (/obj/structure/shuttle/engine/heater,/turf/simulated/shuttle/wall{tag = "icon-swall14"; icon_state = "swall14"; dir = 2},/area/supply/dock) +"mA" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s9"; icon_state = "swall_s9"; dir = 2},/area/supply/dock) +"mB" = (/obj/structure/shuttle/engine/propulsion/burst/left,/turf/space,/area/supply/dock) +"mC" = (/obj/structure/shuttle/engine/propulsion/burst,/turf/space,/area/supply/dock) +"mD" = (/obj/structure/shuttle/engine/propulsion/burst/right,/turf/space,/area/supply/dock) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -764,31 +765,31 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYdegShtcRcRcRcRarcRhahCcRcRarcRhDarcRcRcRaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarcRcRcRhuhjhjhjhEhFhjhxhGhzhohHhfhphIhrhshbhbhbhbhbhbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYdegShtcRcRcRhJarararararararcRhDarcRcRcRaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarcRcRcRhehKhjhjhLhLhMhehohohohNhfdcddaaaahbhbhbhbhbhbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYdegShtcRcRcRcRcRcRhOcRcRcRcRcRcRarcRcRcRaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarcRcRcRhehPhQhjhLhLhjhfhohohRhShfdcddaaaahbhbhbhbhbhbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYdegScRcRcRcRcRhTcRarararararcRcRarcRcRcRaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarcRcRcRhehPhQhjhjhjhjhUhohohRhShVdchWaaaahbhbhbhbhbhbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYdegScRcRcRcRhXhYhZarcRcRcRiacRcRarcRcRcRaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarcRcRcRhehPhQhjibibhjhfhfichRhSiddcieaaaahbhbhbhbhbhbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYdegScRcRcRifigihigariicRcRijcRcRarcRcRcRaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarcRcRcRhehPhQhjibibhjikhfilimhShfdcddaaaahbhbhbhbhbhbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYdegScRcRcRinioioiparararararcRcRarcRcRcRaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarcRcRcRhehPiqiriririshfhfitiuivhfiwixhrhshbhbhbhbhbhbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYdegScRcRcRiyioioioarcRcRcRijcRcRarcRcRcRaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarcRcRcRheiziAiAiAiAiAiBiBiCiDiEiFiGiHiGiIhbhbhbhbhbhbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYdegScRcRiJiniKiLioariicRcRiacRcRiMcRcRcRaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarcRcRcRhehKiNiNiNiNiOhfhfiPiQiRiSiTiUhrhshbhbhbhbhbhbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYdegSiMiViViViViViViViViViViViViViVcRcRcRiWiWiWiWiWiWiWiWiWiWiWiWiWiWiWiWiWiWiWiWiWiWararararararararararararararcRcRcRiXiYhLhjhLhLhjiZhohohohojadcjbaaaahbhbhbhbhbhbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYdedfcRjcjdjdjdjdjdjdjdjdjdjdjdjdjccRcRcRjejfjfjfjfjfjfjfjfjfjfjfjfjfjfjfjfjfjfjfjfiWararararararararararararararcRcRcRiXjghLhjhLhLhjhfjhhohojijadcjbaaaaaahbhbhbhbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYgSgScRiViViViViViViViViViViViViViVdadadaiWiWiWiWiWiWiWiWiWiWiWiWiWiWiWiWiWiWiWiWjeiWarararararararararararararardadadahehjhjhjhLhLhjjjjkjlhojmjndcjbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabjocRcRcRcRcRcRcRcRcRcRcRcRcRcRcRhdcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRhuhjjphjhLhLhjjqjrjshohohAdcjbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRhdcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRhuhjhjhjhjhjhjjthohohojujjdcjbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabararhdararararararararararararararcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRhejvjwjxjyjvjzhfjAjBhojChfdcieaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajDcRcRcRcRcRcRcRcRcRcRcRarjEjFjGjHarjIjJjKjLjMjMjMjMjMjMjNjOjPjIarararararararariWjeiWardaarararararararararararararararhehehehehehehehfhfhfhUhfhfdcddaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiajQcRcRcRcRcRcRcRcRcRcRarcRcRcRcRarjRjSjTjUjVjWjXjUjYjVjXjRjZkaarcRcRcRcRcRcRcRiWjfiWarcRariiiiiiariiiiiiariiiiiiarcRcRcRcRarkbkckckdarcRcRcRcRkekfkgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiakhcRcRcRcRcRcRcRcRcRcRarcRcRcRcRarjRjSjTjUkikijXjUkikijXjRkjkkarcRcRcRcRcRcRcRiWjfiWarcRarcRcRcRarcRcRcRarcRcRcRarcRcRcRcRarklkmkmknarcRcRcRcRkekfkgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiahCcRcRhThThThTcRcRcRcRarcRcRcRcRarjRjSjTjUkikijXjUkikijXjRkjkoarcRcRcRcRcRcRcRiWjfiWarcRarcRcRcRarcRcRcRarcRcRcRarcRcRcRcRarklkmkmknarcRcRcRcRkekfkgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiahacRcRkpgVgVkqhZcRcRcRararkrarararksjSjTjRjRjRjRjRjRjRjRjRkjktarcRcRcRcRcRcRcRiWjfiWarcRararkuarararkuarararkuarararcRcRararkvkwkwkxarcRcRcRcRkekfkgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiakycRhXkzkAkAkBcRcRcRcRcRcRcRcRkCarkDjSjTjRjRjRjRjRjRjRjRjRkjjRarcRcRcRcRcRcRcRiWjfiWarcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRararcRcRararcRcRcRcRkekfkgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiakEcRcRkFkFkFkFcRcRcRcRcRcRcRcRcRarjRkGjTjRkHkIkJkIkKkKkKkKkLkMarcRcRcRcRcRcRcRiWjfiWarcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRarcRcRcRcRkekfkgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiakNcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRarkOkPkQjRkRkMkSkTkUkUkUkUkVkWarcRcRcRcRcRcRcRiWjfiWarcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRdacRcRcRcRkekfkgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiacRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRarkXkYkZlalblcldlekUlflflfkUlgarcRcRcRcRcRcRcRiWjfiWarcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRdacRcRcRcRkekfkgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiacRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRarlhliljlklllmkUlnkUlflolpkUlqararlrararcRcRcRiWjfiWarcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRarcRcRcRcRkekfkgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiacRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRarlsltlulvlwlxlylzlAkUkUkUkUkUlBlClClDarcRcRcRiWjfiWiWiWiWiWiWiWiWiWiWiWiWiWiWiWlEkekekekekekekekekekekekekekekekfkgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiacRcRcRcRcRcRcRcRcRcRcRcRcRcRcRlFarlGlHlIlJlKlLlMlNlOlPlQlRlSlTkMlUlUlVarcRcRcRiWjfjfjfjfjfjfjfjfjfjfjfjfjfjfjfjfkfkfkfkfkfkfkfkfkfkfkfkfkfkfkfkfkfkgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalWaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXgPablXlXlXlXlXlXlYlYlYlYlYlYlYlYlYlYlYlYabababablZlZlZlZlZlZlZlZlZlZlZlZlZlZlZlZlZkgkgkgkgkgkgkgkgkgkgkgkgkgkgkgkgkgkgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYdegScRcRcRcRcRhTcRarararararcRcRarcRcRcRaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarcRcRcRhehPhQhjhjhjhjhUhohohRhVhWdchXaaaahbhbhbhbhbhbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYdegScRcRcRcRhYhZiaarcRcRcRibcRcRarcRcRcRaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarcRcRcRhehPhQhjicichjhfhfidhRhViedcifaaaahbhbhbhbhbhbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYdegScRcRcRigihiiiharijcRcRikcRcRarcRcRcRaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarcRcRcRhehPhQhjicichjilhfiminhVhfdcddaaaahbhbhbhbhbhbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYdegScRcRcRioipipiqarararararcRcRarcRcRcRaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarcRcRcRhehPirisisisithfhfiuiviwhfixiyhrhshbhbhbhbhbhbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYdegScRcRcRizipipiparcRcRcRikcRcRarcRcRcRaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarcRcRcRheiAiBiBiBiBiBiCiCiDiEiFiGiHiIiHiJhbhbhbhbhbhbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYdegScRcRiKioiLiMiparijcRcRibcRcRiNcRcRcRaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarcRcRcRhehKiOiOiOiOiPhfhfiQiRiSiTiUiVhrhshbhbhbhbhbhbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYdegSiNiWiWiWiWiWiWiWiWiWiWiWiWiWiWcRcRcRiXiXiXiXiXiXiXiXiXiXiXiXiXiXiXiXiXiXiXiXiXiXararararararararararararararcRcRcRiYiZhLhjhLhLhjjahohohohojbdcjcaaaahbhbhbhbhbhbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYdedfcRjdjejejejejejejejejejejejejdcRcRcRjfjgjgjgjgjgjgjgjgjgjgjgjgjgjgjgjgjgjgjgjgiXararararararararararararararcRcRcRiYjhhLhjhLhLhjhfjihohojjjbdcjcaaaaaahbhbhbhbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYgSgScRiWiWiWiWiWiWiWiWiWiWiWiWiWiWdadadaiXiXiXiXiXiXiXiXiXiXiXiXiXiXiXiXiXiXiXiXjfiXarararararararararararararardadadahehjhjhjhLhLhjjkjljmhojnjodcjcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabjpcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRhdcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRhuhjjqhjhLhLhjjrjsjthohohAdcjcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRhdcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRhuhjhjhjhjhjhjjuhohohojvjkdcjcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabararhdararararararararararararararcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRhejwjxjyjzjwjAhfjBjChojDhfdcifaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajEcRcRcRcRcRcRcRcRcRcRcRarjFjGjHjIarjJjKjLjMjNjNjNjNjNjNjOjPjQjJarararararararariXjfiXardaarararararararararararararararhehehehehehehehfhfhfhUhfhfdcddaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaibjRcRcRcRcRcRcRcRcRcRcRarcRcRcRcRarjSjTjUjVjWjXjYjVjZjWjYjSkakbarcRcRcRcRcRcRcRiXjgiXarcRarijijijarijijijarijijijarcRcRcRcRarkckdkdkearcRcRcRcRkfkgkhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaibkicRcRcRcRcRcRcRcRcRcRarcRcRcRcRarjSjTjUjVkjkjjYjVkjkjjYjSkkklarcRcRcRcRcRcRcRiXjgiXarcRarcRcRcRarcRcRcRarcRcRcRarcRcRcRcRarkmknknkoarcRcRcRcRkfkgkhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaibhCcRcRhThThThTcRcRcRcRarcRcRcRcRarjSjTjUjVkjkjjYjVkjkjjYjSkkkparcRcRcRcRcRcRcRiXjgiXarcRarcRcRcRarcRcRcRarcRcRcRarcRcRcRcRarkmknknkoarcRcRcRcRkfkgkhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaibhacRcRkqgVgVkriacRcRcRararksarararktjTjUjSjSjSjSjSjSjSjSjSkkkuarcRcRcRcRcRcRcRiXjgiXarcRararkvarararkvarararkvarararcRcRararkwkxkxkyarcRcRcRcRkfkgkhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaibkzcRhYkAkBkBkCcRcRcRcRcRcRcRcRkDarkEjTjUjSjSjSjSjSjSjSjSjSkkjSarcRcRcRcRcRcRcRiXjgiXarcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRararcRcRararcRcRcRcRkfkgkhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaibkFcRcRkGkGkGkGcRcRcRcRcRcRcRcRcRarjSkHjUjSkIkJkKkJkLkLkLkLkMkNarcRcRcRcRcRcRcRiXjgiXarcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRarcRcRcRcRkfkgkhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaibkOcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRarkPkQkRjSkSkNkTkUkVkVkVkVkWkXarcRcRcRcRcRcRcRiXjgiXarcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRdacRcRcRcRkfkgkhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaibcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRarkYkZlalblcldlelfkVlglglgkVlharcRcRcRcRcRcRcRiXjgiXarcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRdacRcRcRcRkfkgkhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaibcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRarliljlklllmlnkVlokVlglplqkVlrararlsararcRcRcRiXjgiXarcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRarcRcRcRcRkfkgkhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaibcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRarltlulvlwlxlylzlAlBkVkVkVkVkVlClDlDlEarcRcRcRiXjgiXiXiXiXiXiXiXiXiXiXiXiXiXiXiXlFkfkfkfkfkfkfkfkfkfkfkfkfkfkfkfkgkhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaibcRcRcRcRcRcRcRcRcRcRcRcRcRcRcRlGarlHlIlJlKlLlMlNlOlPlQlRlSlTlUkNlVlVlWarcRcRcRiXjgjgjgjgjgjgjgjgjgjgjgjgjgjgjgjgkgkgkgkgkgkgkgkgkgkgkgkgkgkgkgkgkgkhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXgPablYlYlYlYlYlYlZlZlZlZlZlZlZlZlZlZlZlZababababmamamamamamamamamamamamamamamamamakhkhkhkhkhkhkhkhkhkhkhkhkhkhkhkhkhkhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -888,36 +889,36 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} (1,1,2) = {" -mamamamamamamamamamamamamamamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -mambmbmbmbmbmbmbmbmbmbmbmbmbmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -mambmbmamamambmbmbmamambmbmbmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -mambmbmambmbmambmambmbmbmbmbmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -mambmbmamamambmbmbmamambmbmbmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -mambmbmambmbmambmbmbmbmambmbmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -mambmbmamamambmbmbmamambmbmbmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -mambmbmbmbmbmbmcmbmbmbmbmbmbmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -mambmbmbmamambmbmbmamambmbmbmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -mambmbmambmambmbmbmbmbmambmbmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -mambmbmbmbmambmbmbmbmambmbmbmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -mambmbmbmbmambmbmbmambmbmbmbmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -mambmbmamamamambmamamamambmbmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -mambmbmbmbmbmbmbmbmbmbmbmbmbmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -mdmamamamamamamamamamamamamamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -mbmbmbmbmbmbmbmbmbmbmbmbmbmbmbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -mbmbmbmbmbmbmbmbmbmbmbmbmbmbmbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -mbmbmbmbmbmbmbmbmbmbmbmbmbmbmbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -mbmbmbmbmbmbmbmbmbmbmbmbmbmbmbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -mbmbmbmbmbmbmbmbmbmbmbmbmbmbmbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -mbmbmbmbmbmbmbmbmbmbmbmbmbmbmbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -mbmbmbmbmbmbmbmbmbmbmbmbmbmbmbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -mbmbmbmbmbmbmbmembmbmbmbmbmbmbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -mbmbmbmbmbmbmbmbmbmbmbmbmbmbmbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -mbmbmbmbmbmbmbmbmbmbmbmbmbmbmbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -mbmbmbmbmbmbmbmbmbmbmbmbmbmbmbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -mbmbmbmbmbmbmbmbmbmbmbmbmbmbmbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -mbmbmbmbmbmbmbmbmbmbmbmbmbmbmbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -mbmbmbmbmbmbmbmbmbmbmbmbmbmbmbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa mbmbmbmbmbmbmbmbmbmbmbmbmbmbmbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +mbmcmcmcmcmcmcmcmcmcmcmcmcmcmbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +mbmcmcmbmbmbmcmcmcmbmbmcmcmcmbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +mbmcmcmbmcmcmbmcmbmcmcmcmcmcmbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +mbmcmcmbmbmbmcmcmcmbmbmcmcmcmbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +mbmcmcmbmcmcmbmcmcmcmcmbmcmcmbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +mbmcmcmbmbmbmcmcmcmbmbmcmcmcmbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +mbmcmcmcmcmcmcmdmcmcmcmcmcmcmbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +mbmcmcmcmbmbmcmcmcmbmbmcmcmcmbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +mbmcmcmbmcmbmcmcmcmcmcmbmcmcmbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +mbmcmcmcmcmbmcmcmcmcmbmcmcmcmbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +mbmcmcmcmcmbmcmcmcmbmcmcmcmcmbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +mbmcmcmbmbmbmbmcmbmbmbmbmcmcmbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +mbmcmcmcmcmcmcmcmcmcmcmcmcmcmbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +membmbmbmbmbmbmbmbmbmbmbmbmbmbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +mcmcmcmcmcmcmcmcmcmcmcmcmcmcmcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +mcmcmcmcmcmcmcmcmcmcmcmcmcmcmcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +mcmcmcmcmcmcmcmcmcmcmcmcmcmcmcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +mcmcmcmcmcmcmcmcmcmcmcmcmcmcmcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +mcmcmcmcmcmcmcmcmcmcmcmcmcmcmcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +mcmcmcmcmcmcmcmcmcmcmcmcmcmcmcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +mcmcmcmcmcmcmcmcmcmcmcmcmcmcmcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +mcmcmcmcmcmcmcmfmcmcmcmcmcmcmcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +mcmcmcmcmcmcmcmcmcmcmcmcmcmcmcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +mcmcmcmcmcmcmcmcmcmcmcmcmcmcmcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +mcmcmcmcmcmcmcmcmcmcmcmcmcmcmcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +mcmcmcmcmcmcmcmcmcmcmcmcmcmcmcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +mcmcmcmcmcmcmcmcmcmcmcmcmcmcmcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +mcmcmcmcmcmcmcmcmcmcmcmcmcmcmcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +mcmcmcmcmcmcmcmcmcmcmcmcmcmcmcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -1697,22 +1698,22 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamemfmgmhmimeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamfmjmkmkmlmiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaammmnmkmkmkmmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamompmkmkmkmmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaammmqmkmkmkmmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamrmsmkmkmkmraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamtmsmkmkmkmtaaaamumumumumumumumumumumumumumumumuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaammmsmkmkmkmmaaaamumumumumumumumumumumumumumumumuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamumumumumumumumumumumumumuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamrmsmkmkmkmraaaamumumumumumumumumumumumumumumumuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamumumumumumumumumumumumumuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamtmsmkmkmkmtaaaamumumumumumumumumumumumumumumumuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamumumumumumumumumumumumumuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaammmqmkmkmkmmaaaamumumumumumumumumumumumumumumumuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamumumumumumumumumumumumumuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamvmwmkmkmkmmaaaamumumumumumumumumumumumumumumumuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamumumumumumumumumumumumumuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaammmkmkmkmkmmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamumumumumumumumumumumumumuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamxmymymymymzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamumumumumumumumumumumumumuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamemAmBmBmCmeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaameaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamfmgmhmimjmfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamgmkmlmlmmmjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamnmomlmlmlmnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaampmqmlmlmlmnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamnmrmlmlmlmnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamsmtmlmlmlmsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamumtmlmlmlmuaaaamvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamnmtmlmlmlmnaaaamvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamvmvmvmvmvmvmvmvmvmvmvmvmvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamsmtmlmlmlmsaaaamvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamvmvmvmvmvmvmvmvmvmvmvmvmvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamumtmlmlmlmuaaaamvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamvmvmvmvmvmvmvmvmvmvmvmvmvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamnmrmlmlmlmnaaaamvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamvmvmvmvmvmvmvmvmvmvmvmvmvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamwmxmlmlmlmnaaaamvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamvmvmvmvmvmvmvmvmvmvmvmvmvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamnmlmlmlmlmnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamvmvmvmvmvmvmvmvmvmvmvmvmvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamymzmzmzmzmAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamvmvmvmvmvmvmvmvmvmvmvmvmvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamfmBmCmCmDmfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa From 5e9aa8b0cb177dc2dfbfab9db47cdfe5b0959927 Mon Sep 17 00:00:00 2001 From: CaelAislinn Date: Wed, 4 Jan 2012 01:25:58 +1000 Subject: [PATCH 02/25] New tg conveyors are working pretty well, just remember to define dir (conveyor sprite dir), forwards + backwards (conveyor movement dirs) when placing them. Diverters are in, but not working. Signed-off-by: CaelAislinn --- code/modules/recycling/conveyor2.dm | 28 ++++++++++++++++++---------- icons/obj/recycling.dmi | Bin 37155 -> 37061 bytes maps/Antiqua.dmm | 12 ++++++------ 3 files changed, 24 insertions(+), 16 deletions(-) diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index ce806b6d926..832d14f34d0 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -9,8 +9,8 @@ anchored = 1 var/operating = 0 // 1 if running forward, -1 if backwards, 0 if off var/operable = 1 // true if can operate (no broken segments in this belt run) - var/forwards // this is the default (forward) direction, set by the map dir - var/backwards // hopefully self-explanatory + var/forwards // this is the default (forward) direction, set by the map dir, can be 0 + var/backwards // hopefully self-explanatory, can be 0 var/movedir // the actual direction to move stuff in var/list/affecting // the list of all items that will be moved this ptick @@ -19,14 +19,20 @@ //these ones below for backwards compatibility // following two only used if a diverter is present - var/divert = 0 // if non-zero, direction to divert items - var/divdir = 0 // if diverting, will be conveyer dir needed to divert (otherwise dense) + var/divert_from = 0 // if non-zero, direction to divert items + var/divert_to = 0 // if diverting, will be conveyer dir needed to divert (otherwise dense) var/basedir // this is the default (forward) direction, set by the map dir // note dir var can vary when the direction changes + //cael - corner icon bug that needs a manual fix + //note: for now, the sprites/anis and their directions are mostly independant from the actual conveyor move directions + //if no conveyor move directions are specified, they are extracted from the sprite dir + var/reverseSpriteMoveDir = 0 + // create a conveyor /obj/machinery/conveyor/New() ..() + //added these to allow for custom conveyor dirs defined in map if(!forwards) switch(dir) if(NORTH) @@ -80,7 +86,7 @@ operating = 0 if(stat & NOPOWER) operating = 0 - icon_state = "conveyor[operating]" + icon_state = "conveyor[operating * (reverseSpriteMoveDir?-1:1)]" // machine process // move items to the target location @@ -91,8 +97,10 @@ return use_power(100) - if(divert && dir==divdir) // update if diverter present - movedir = divert + if(movedir == divert_to && divert_from == (movedir == backwards ? forwards : backwards ) ) // update if diverter present + movedir = divert_to + //conv.divert = divert_to + //conv.divdir = divert_from affecting = loc.contents - src // moved items will be all in loc spawn(1) // slight delay to prevent infinite propagation due to map order @@ -310,10 +318,10 @@ /obj/machinery/diverter/proc/set_divert() if(conv) if(deployed) - conv.divert = divert_to - conv.divdir = divert_from + conv.divert_to = divert_to + conv.divert_from = divert_from else - conv.divert= 0 + conv.divert_to = 0 // *** TESTING click to toggle diff --git a/icons/obj/recycling.dmi b/icons/obj/recycling.dmi index 8661194c0d95f65ff983ddf4441400a0427aabef..78a525464e35007057395b110eed2805441a926f 100644 GIT binary patch literal 37061 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 C!D+St literal 37155 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 diff --git a/maps/Antiqua.dmm b/maps/Antiqua.dmm index d176893059b..3970fb147ba 100644 --- a/maps/Antiqua.dmm +++ b/maps/Antiqua.dmm @@ -403,13 +403,13 @@ "hM" = (/obj/machinery/light_switch{pixel_x = 24; pixel_y = 1},/turf/simulated/floor,/area/quartermaster/storage) "hN" = (/obj/effect/sign/movingparts,/turf/simulated/wall,/area/quartermaster/qm) "hO" = (/obj/machinery/door/airlock/glass_security{name = "Brig"; req_access_txt = "1"},/turf/simulated/floor,/area) -"hP" = (/obj/machinery/conveyor{backwards = 2; dir = 2; divdir = 0; forwards = 1; id = "QMoffload"},/turf/simulated/floor,/area/quartermaster/storage) +"hP" = (/obj/machinery/conveyor{backwards = 2; dir = 2;forwards = 1; id = "QMoffload"},/turf/simulated/floor,/area/quartermaster/storage) "hQ" = (/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/quartermaster/storage) "hR" = (/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/quartermaster/qm) -"hS" = (/obj/machinery/conveyor{backwards = null; dir = 2; divdir = 0; forwards = null; id = "QMonload"},/turf/simulated/floor,/area/quartermaster/qm) +"hS" = (/obj/machinery/conveyor{backwards = null; dir = 2;forwards = null; id = "QMonload"},/turf/simulated/floor,/area/quartermaster/qm) "hT" = (/obj/structure/stool/chair{name = "Bailiff"},/turf/simulated/floor,/area) "hU" = (/obj/machinery/door/airlock/maintenance,/turf/simulated/floor,/area/quartermaster/qm) -"hV" = (/obj/machinery/conveyor{backwards = 1; dir = 2; divdir = 0; forwards = 2; id = "QMonload"},/turf/simulated/floor,/area/quartermaster/qm) +"hV" = (/obj/machinery/conveyor{backwards = 1; dir = 2;forwards = 2; id = "QMonload"},/turf/simulated/floor,/area/quartermaster/qm) "hW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/quartermaster/qm) "hX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/starboard) "hY" = (/obj/structure/stool/chair{dir = 4},/turf/simulated/floor,/area) @@ -435,12 +435,12 @@ "is" = (/turf/simulated/floor{icon_state = "warning"},/area/quartermaster/storage) "it" = (/obj/effect/sign/movingparts{pixel_x = 32; pixel_y = 0},/turf/simulated/floor{icon_state = "warning"},/area/quartermaster/storage) "iu" = (/obj/effect/sign/movingparts{pixel_x = -32; pixel_y = 0},/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/quartermaster/qm) -"iv" = (/obj/machinery/conveyor{backwards = 4; dir = 5; forwards = 2; id = "QMonload"},/turf/simulated/floor,/area/quartermaster/qm) -"iw" = (/obj/machinery/conveyor{backwards = 1; dir = 2; divdir = 0; forwards = 2; id = "QMonload"},/obj/effect/sign/movingparts{pixel_x = 32},/turf/simulated/floor,/area/quartermaster/qm) +"iv" = (/obj/machinery/conveyor{backwards = 4; dir = 5; forwards = 2; id = "QMonload"; reverseSpriteMoveDir = 1},/turf/simulated/floor,/area/quartermaster/qm) +"iw" = (/obj/machinery/conveyor{backwards = 1; dir = 2;forwards = 2; id = "QMonload"},/obj/effect/sign/movingparts{pixel_x = 32},/turf/simulated/floor,/area/quartermaster/qm) "ix" = (/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (EAST)"},/area/quartermaster/qm) "iy" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/effect/sign/movingparts,/turf/simulated/floor/plating,/area/quartermaster/qm) "iz" = (/obj/machinery/door/window/westleft,/turf/simulated/floor{icon_state = "grimy"},/area) -"iA" = (/obj/machinery/conveyor{backwards = 4; dir = 6; divert = 1; forwards = 1; id = "QMoffload"},/turf/simulated/floor,/area/quartermaster/storage) +"iA" = (/obj/machinery/conveyor{backwards = 4; dir = 6; forwards = 1; id = "QMoffload"},/turf/simulated/floor,/area/quartermaster/storage) "iB" = (/obj/machinery/conveyor{dir = 8; id = "QMoffload"},/turf/simulated/floor,/area/quartermaster/storage) "iC" = (/obj/structure/plasticflaps,/obj/machinery/conveyor{dir = 8; id = "QMoffload"},/turf/simulated/floor,/area/quartermaster/qm) "iD" = (/obj/machinery/conveyor{dir = 8; id = "QMshuttle"},/turf/simulated/floor,/area/quartermaster/qm) From 921999ef420f5e347d8fcfd9ebd5596a04a1d55e Mon Sep 17 00:00:00 2001 From: Albert Iordache Date: Wed, 4 Jan 2012 00:02:57 +0200 Subject: [PATCH 03/25] Added directional sprites for the kitchen shutters. --- icons/obj/doors/rapid_pdoor.dmi | Bin 8025 -> 8228 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/doors/rapid_pdoor.dmi b/icons/obj/doors/rapid_pdoor.dmi index dbd7e042d01fdb2eb76ef978a66518ddce0b12ac..917bd4111f1f381e06efef0c9933a1f42c0498e3 100644 GIT binary patch literal 8228 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 Xu^(c^!5TvPR}Q$R4b!T+V-xv5f)3`a From 12cd38d5dae6d3d035f686f02318c145c29906e6 Mon Sep 17 00:00:00 2001 From: CaelAislinn Date: Wed, 4 Jan 2012 11:48:39 +1000 Subject: [PATCH 04/25] Tweaked antiqua cargobay/diverters. UI bug (?) unreproduceable. Signed-off-by: CaelAislinn --- maps/Antiqua.dmm | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/maps/Antiqua.dmm b/maps/Antiqua.dmm index 3970fb147ba..012fe2c16e2 100644 --- a/maps/Antiqua.dmm +++ b/maps/Antiqua.dmm @@ -403,13 +403,13 @@ "hM" = (/obj/machinery/light_switch{pixel_x = 24; pixel_y = 1},/turf/simulated/floor,/area/quartermaster/storage) "hN" = (/obj/effect/sign/movingparts,/turf/simulated/wall,/area/quartermaster/qm) "hO" = (/obj/machinery/door/airlock/glass_security{name = "Brig"; req_access_txt = "1"},/turf/simulated/floor,/area) -"hP" = (/obj/machinery/conveyor{backwards = 2; dir = 2;forwards = 1; id = "QMoffload"},/turf/simulated/floor,/area/quartermaster/storage) +"hP" = (/obj/machinery/conveyor{backwards = 2; dir = 2; forwards = 1; id = "QMoffload"},/turf/simulated/floor,/area/quartermaster/storage) "hQ" = (/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/quartermaster/storage) "hR" = (/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/quartermaster/qm) -"hS" = (/obj/machinery/conveyor{backwards = null; dir = 2;forwards = null; id = "QMonload"},/turf/simulated/floor,/area/quartermaster/qm) +"hS" = (/obj/machinery/conveyor{backwards = null; dir = 2; forwards = null; id = "QMonload"},/turf/simulated/floor,/area/quartermaster/qm) "hT" = (/obj/structure/stool/chair{name = "Bailiff"},/turf/simulated/floor,/area) "hU" = (/obj/machinery/door/airlock/maintenance,/turf/simulated/floor,/area/quartermaster/qm) -"hV" = (/obj/machinery/conveyor{backwards = 1; dir = 2;forwards = 2; id = "QMonload"},/turf/simulated/floor,/area/quartermaster/qm) +"hV" = (/obj/machinery/conveyor{backwards = 1; dir = 2; forwards = 2; id = "QMonload"},/turf/simulated/floor,/area/quartermaster/qm) "hW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/quartermaster/qm) "hX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/starboard) "hY" = (/obj/structure/stool/chair{dir = 4},/turf/simulated/floor,/area) @@ -436,7 +436,7 @@ "it" = (/obj/effect/sign/movingparts{pixel_x = 32; pixel_y = 0},/turf/simulated/floor{icon_state = "warning"},/area/quartermaster/storage) "iu" = (/obj/effect/sign/movingparts{pixel_x = -32; pixel_y = 0},/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/quartermaster/qm) "iv" = (/obj/machinery/conveyor{backwards = 4; dir = 5; forwards = 2; id = "QMonload"; reverseSpriteMoveDir = 1},/turf/simulated/floor,/area/quartermaster/qm) -"iw" = (/obj/machinery/conveyor{backwards = 1; dir = 2;forwards = 2; id = "QMonload"},/obj/effect/sign/movingparts{pixel_x = 32},/turf/simulated/floor,/area/quartermaster/qm) +"iw" = (/obj/machinery/conveyor{backwards = 1; dir = 2; forwards = 2; id = "QMonload"},/obj/effect/sign/movingparts{pixel_x = 32},/turf/simulated/floor,/area/quartermaster/qm) "ix" = (/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (EAST)"},/area/quartermaster/qm) "iy" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/effect/sign/movingparts,/turf/simulated/floor/plating,/area/quartermaster/qm) "iz" = (/obj/machinery/door/window/westleft,/turf/simulated/floor{icon_state = "grimy"},/area) @@ -639,19 +639,20 @@ "mo" = (/obj/effect/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; name = "EXTERNAL AIRLOCK"; pixel_x = -32},/obj/effect/marker/supplymarker,/turf/simulated/shuttle/floor,/area/supply/dock) "mp" = (/obj/machinery/door/airlock/external{name = "Supply Dock Airlock"},/turf/simulated/shuttle/floor,/area/supply/dock) "mq" = (/turf/simulated/shuttle/floor,/area/supply/dock) -"mr" = (/obj/machinery/conveyor{dir = 2; id = "QMshuttle"},/obj/effect/sign/movingparts{pixel_x = -32},/turf/simulated/shuttle/floor,/area/supply/dock) +"mr" = (/obj/effect/sign/movingparts{pixel_x = -32},/obj/effect/marker/supplymarker,/turf/simulated/shuttle/floor,/area/supply/dock) "ms" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/supply/dock) "mt" = (/obj/machinery/conveyor{dir = 2; id = "QMshuttle"},/turf/simulated/shuttle/floor,/area/supply/dock) "mu" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/supply/dock) "mv" = (/turf/space,/area/supply) -"mw" = (/obj/machinery/door/poddoor{density = 1; icon_state = "pdoor1"; id = "QMLoaddoor"; name = "Supply Dock Loading Door"; opacity = 1},/obj/machinery/conveyor{dir = 8; id = "QMshuttle"},/obj/structure/plasticflaps,/turf/simulated/shuttle/floor,/area/supply/dock) -"mx" = (/obj/machinery/conveyor{dir = 8; id = "QMshuttle"},/turf/simulated/shuttle/floor,/area/supply/dock) -"my" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s5"; icon_state = "swall_s5"; dir = 2},/area/supply/dock) -"mz" = (/obj/structure/shuttle/engine/heater,/turf/simulated/shuttle/wall{tag = "icon-swall14"; icon_state = "swall14"; dir = 2},/area/supply/dock) -"mA" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s9"; icon_state = "swall_s9"; dir = 2},/area/supply/dock) -"mB" = (/obj/structure/shuttle/engine/propulsion/burst/left,/turf/space,/area/supply/dock) -"mC" = (/obj/structure/shuttle/engine/propulsion/burst,/turf/space,/area/supply/dock) -"mD" = (/obj/structure/shuttle/engine/propulsion/burst/right,/turf/space,/area/supply/dock) +"mw" = (/obj/machinery/conveyor{dir = 2; id = "QMshuttle"},/obj/effect/sign/movingparts{pixel_x = -32},/turf/simulated/shuttle/floor,/area/supply/dock) +"mx" = (/obj/machinery/door/poddoor{density = 1; icon_state = "pdoor1"; id = "QMLoaddoor"; name = "Supply Dock Loading Door"; opacity = 1},/obj/machinery/conveyor{dir = 8; id = "QMshuttle"},/obj/structure/plasticflaps,/turf/simulated/shuttle/floor,/area/supply/dock) +"my" = (/obj/machinery/conveyor{backwards = 1; dir = 10; forwards = 8; id = "QMshuttle"},/turf/simulated/shuttle/floor,/area/supply/dock) +"mz" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s5"; icon_state = "swall_s5"; dir = 2},/area/supply/dock) +"mA" = (/obj/structure/shuttle/engine/heater,/turf/simulated/shuttle/wall{tag = "icon-swall14"; icon_state = "swall14"; dir = 2},/area/supply/dock) +"mB" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s9"; icon_state = "swall_s9"; dir = 2},/area/supply/dock) +"mC" = (/obj/structure/shuttle/engine/propulsion/burst/left,/turf/space,/area/supply/dock) +"mD" = (/obj/structure/shuttle/engine/propulsion/burst,/turf/space,/area/supply/dock) +"mE" = (/obj/structure/shuttle/engine/propulsion/burst/right,/turf/space,/area/supply/dock) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -1708,11 +1709,11 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamnmtmlmlmlmnaaaamvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamvmvmvmvmvmvmvmvmvmvmvmvmvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamsmtmlmlmlmsaaaamvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamvmvmvmvmvmvmvmvmvmvmvmvmvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamumtmlmlmlmuaaaamvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamvmvmvmvmvmvmvmvmvmvmvmvmvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamnmrmlmlmlmnaaaamvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamvmvmvmvmvmvmvmvmvmvmvmvmvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamwmxmlmlmlmnaaaamvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamvmvmvmvmvmvmvmvmvmvmvmvmvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamnmwmlmlmlmnaaaamvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamvmvmvmvmvmvmvmvmvmvmvmvmvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamxmymlmlmlmnaaaamvmvmvmvmvmvmvmvmvmvmvmvmvmvmvmvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamvmvmvmvmvmvmvmvmvmvmvmvmvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamnmlmlmlmlmnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamvmvmvmvmvmvmvmvmvmvmvmvmvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamymzmzmzmzmAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamvmvmvmvmvmvmvmvmvmvmvmvmvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamfmBmCmCmDmfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamvmvmvmvmvmvmvmvmvmvmvmvmvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamzmAmAmAmAmBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamvmvmvmvmvmvmvmvmvmvmvmvmvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamfmCmDmDmEmfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa From 3f6e2c28d48118b84daf7d46a69c70a05f30ec5b Mon Sep 17 00:00:00 2001 From: CaelAislinn Date: Wed, 4 Jan 2012 11:55:04 +1000 Subject: [PATCH 05/25] sync Signed-off-by: CaelAislinn --- baystation12.dme | 40 +- code/WorkInProgress/Mini/customitems.dm | 4 +- code/WorkInProgress/SkyMarshal/eraser.dm | 9 - .../WorkInProgress/SkyMarshal/traitoritems.dm | 74 +++ code/defines/global.dm | 5 +- code/defines/obj/clothing/jumpsuit.dm | 7 + code/defines/obj/weapon.dm | 4 + code/game/communications.dm | 12 +- code/game/events/Event.dm | 20 + .../EventProcs}/black_hole.dm | 0 .../events => events/EventProcs}/clang.dm | 0 .../events => events/EventProcs}/dust.dm | 0 .../events => events/EventProcs}/kudzu.dm | 0 .../events => events/EventProcs}/miniblob.dm | 0 code/game/events/EventProcs/misc.dm | 71 +++ .../EventProcs}/ninja_abilities.dm | 0 .../EventProcs}/ninja_equipment.dm | 0 .../EventProcs}/space_ninja.dm | 0 code/game/events/Events/AlienInfestation.dm | 38 ++ code/game/events/Events/Appendicitis.dm | 16 + code/game/events/Events/BlowOut.dm | 34 ++ code/game/events/Events/ElectricalStorm.dm | 121 +++++ .../events/Events/GravitationalAnomaly.dm | 10 + code/game/events/Events/ImmovableRod.dm | 5 + code/game/events/Events/IonStorm.dm | 46 ++ code/game/events/Events/MeteorStorm.dm | 11 + code/game/events/Events/MiniBlob.dm | 5 + code/game/events/Events/PortalStorm.dm | 26 + code/game/events/Events/PowerOffline.dm | 8 + code/game/events/Events/PrisonBreak.dm | 24 + code/game/events/Events/RadiationBelt.dm | 18 + code/game/events/Events/SpaceCarp.dm | 14 + code/game/events/Events/SpaceNinja.dm | 6 + code/game/events/Events/VirusEpidemic.dm | 80 ++++ code/game/events/EventsMain.dm | 82 ++++ code/game/gamemodes/events.dm | 445 ------------------ code/game/gamemodes/gameticker.dm | 9 +- code/game/landmarks.dm | 4 + code/game/machinery/doors/airlock.dm | 1 - code/game/master_controller.dm | 7 + code/game/objects/closets/emergency.dm | 37 +- code/game/objects/radio/radio.dm | 28 +- code/game/objects/structures.dm | 6 + code/modules/admin/admin.dm | 21 +- code/modules/admin/admin_verbs.dm | 2 + code/modules/admin/verbs/randomverbs.dm | 2 +- code/modules/mob/living/carbon/human/human.dm | 16 + code/modules/mob/mob_helpers.dm | 4 +- code/modules/power/apc.dm | 4 +- code/modules/recycling/disposal.dm | 2 +- maps/tgstation.2.0.8.dmm | 32 +- 51 files changed, 872 insertions(+), 538 deletions(-) delete mode 100644 code/WorkInProgress/SkyMarshal/eraser.dm create mode 100644 code/WorkInProgress/SkyMarshal/traitoritems.dm create mode 100644 code/game/events/Event.dm rename code/game/{gamemodes/events => events/EventProcs}/black_hole.dm (100%) rename code/game/{gamemodes/events => events/EventProcs}/clang.dm (100%) rename code/game/{gamemodes/events => events/EventProcs}/dust.dm (100%) rename code/game/{gamemodes/events => events/EventProcs}/kudzu.dm (100%) rename code/game/{gamemodes/events => events/EventProcs}/miniblob.dm (100%) create mode 100644 code/game/events/EventProcs/misc.dm rename code/game/{gamemodes/events => events/EventProcs}/ninja_abilities.dm (100%) rename code/game/{gamemodes/events => events/EventProcs}/ninja_equipment.dm (100%) rename code/game/{gamemodes/events => events/EventProcs}/space_ninja.dm (100%) create mode 100644 code/game/events/Events/AlienInfestation.dm create mode 100644 code/game/events/Events/Appendicitis.dm create mode 100644 code/game/events/Events/BlowOut.dm create mode 100644 code/game/events/Events/ElectricalStorm.dm create mode 100644 code/game/events/Events/GravitationalAnomaly.dm create mode 100644 code/game/events/Events/ImmovableRod.dm create mode 100644 code/game/events/Events/IonStorm.dm create mode 100644 code/game/events/Events/MeteorStorm.dm create mode 100644 code/game/events/Events/MiniBlob.dm create mode 100644 code/game/events/Events/PortalStorm.dm create mode 100644 code/game/events/Events/PowerOffline.dm create mode 100644 code/game/events/Events/PrisonBreak.dm create mode 100644 code/game/events/Events/RadiationBelt.dm create mode 100644 code/game/events/Events/SpaceCarp.dm create mode 100644 code/game/events/Events/SpaceNinja.dm create mode 100644 code/game/events/Events/VirusEpidemic.dm create mode 100644 code/game/events/EventsMain.dm delete mode 100644 code/game/gamemodes/events.dm diff --git a/baystation12.dme b/baystation12.dme index 8b7df32043c..f58c6eba48c 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -30,11 +30,13 @@ #define FILE_DIR "code/game" #define FILE_DIR "code/game/area" #define FILE_DIR "code/game/asteroid" +#define FILE_DIR "code/game/events" +#define FILE_DIR "code/game/events/EventProcs" +#define FILE_DIR "code/game/events/Events" #define FILE_DIR "code/game/gamemodes" #define FILE_DIR "code/game/gamemodes/blob" #define FILE_DIR "code/game/gamemodes/changeling" #define FILE_DIR "code/game/gamemodes/cult" -#define FILE_DIR "code/game/gamemodes/events" #define FILE_DIR "code/game/gamemodes/extended" #define FILE_DIR "code/game/gamemodes/malfunction" #define FILE_DIR "code/game/gamemodes/meteor" @@ -364,7 +366,31 @@ #include "code\game\asteroid\asteroid.dm" #include "code\game\asteroid\device.dm" #include "code\game\asteroid\turf.dm" -#include "code\game\gamemodes\events.dm" +#include "code\game\events\Event.dm" +#include "code\game\events\EventsMain.dm" +#include "code\game\events\EventProcs\black_hole.dm" +#include "code\game\events\EventProcs\clang.dm" +#include "code\game\events\EventProcs\dust.dm" +#include "code\game\events\EventProcs\kudzu.dm" +#include "code\game\events\EventProcs\miniblob.dm" +#include "code\game\events\EventProcs\misc.dm" +#include "code\game\events\EventProcs\ninja_abilities.dm" +#include "code\game\events\EventProcs\ninja_equipment.dm" +#include "code\game\events\EventProcs\space_ninja.dm" +#include "code\game\events\Events\AlienInfestation.dm" +#include "code\game\events\Events\Appendicitis.dm" +#include "code\game\events\Events\ElectricalStorm.dm" +#include "code\game\events\Events\GravitationalAnomaly.dm" +#include "code\game\events\Events\ImmovableRod.dm" +#include "code\game\events\Events\IonStorm.dm" +#include "code\game\events\Events\MeteorStorm.dm" +#include "code\game\events\Events\MiniBlob.dm" +#include "code\game\events\Events\PowerOffline.dm" +#include "code\game\events\Events\PrisonBreak.dm" +#include "code\game\events\Events\RadiationBelt.dm" +#include "code\game\events\Events\SpaceCarp.dm" +#include "code\game\events\Events\SpaceNinja.dm" +#include "code\game\events\Events\VirusEpidemic.dm" #include "code\game\gamemodes\game_mode.dm" #include "code\game\gamemodes\gameticker.dm" #include "code\game\gamemodes\intercept_report.dm" @@ -377,14 +403,6 @@ #include "code\game\gamemodes\changeling\traitor_chan.dm" #include "code\game\gamemodes\cult\cult.dm" #include "code\game\gamemodes\cult\cult_items.dm" -#include "code\game\gamemodes\events\black_hole.dm" -#include "code\game\gamemodes\events\clang.dm" -#include "code\game\gamemodes\events\dust.dm" -#include "code\game\gamemodes\events\kudzu.dm" -#include "code\game\gamemodes\events\miniblob.dm" -#include "code\game\gamemodes\events\ninja_abilities.dm" -#include "code\game\gamemodes\events\ninja_equipment.dm" -#include "code\game\gamemodes\events\space_ninja.dm" #include "code\game\gamemodes\extended\extended.dm" #include "code\game\gamemodes\malfunction\Malf_Modules.dm" #include "code\game\gamemodes\malfunction\malfunction.dm" @@ -986,8 +1004,8 @@ #include "code\WorkInProgress\Mini\atmos_control.dm" #include "code\WorkInProgress\Mini\customitems.dm" #include "code\WorkInProgress\SkyMarshal\coatrack.dm" -#include "code\WorkInProgress\SkyMarshal\eraser.dm" #include "code\WorkInProgress\SkyMarshal\policetape.dm" +#include "code\WorkInProgress\SkyMarshal\traitoritems.dm" #include "code\WorkInProgress\Tastyfish\Eliza.dm" #include "code\WorkInProgress\Tastyfish\Eliza_Data.dm" #include "code\WorkInProgress\Tastyfish\paiLiza.dm" diff --git a/code/WorkInProgress/Mini/customitems.dm b/code/WorkInProgress/Mini/customitems.dm index 3a3da54918e..8a507608b21 100644 --- a/code/WorkInProgress/Mini/customitems.dm +++ b/code/WorkInProgress/Mini/customitems.dm @@ -6,7 +6,9 @@ var/list/CustomItemList = list( // ckey real_name item path // list("miniature","Dave Booze",/obj/item/toy/crayonbox) //screw this i dont want crayons, it's an example okay - list("skymarshal", "Phillip Oswald", /obj/item/weapon/coin/silver) //Phillip likes to chew on cigars. Just unlit cigars, don't ask me why. Must be a clone thing. (Cigarette machines dispense cigars if they have a coin in them) --SkyMarshal + list("skymarshal", "Phillip Oswald", /obj/item/weapon/coin/silver), //Phillip likes to chew on cigars. Just unlit cigars, don't ask me why. Must be a clone thing. (Cigarette machines dispense cigars if they have a coin in them) --SkyMarshal + list("spaceman96", "Trenna Seber", /obj/item/weapon/pen/multi), //For Spesss. + list("asanadas", "Book Berner", /obj/item/clothing/under/chameleon/psyche) ) /proc/EquipCustomItems(mob/living/carbon/human/M) diff --git a/code/WorkInProgress/SkyMarshal/eraser.dm b/code/WorkInProgress/SkyMarshal/eraser.dm deleted file mode 100644 index f15384f3f14..00000000000 --- a/code/WorkInProgress/SkyMarshal/eraser.dm +++ /dev/null @@ -1,9 +0,0 @@ -/obj/item/weapon/stamperaser - name = "Eraser" - desc = "Some type of eraser, you guess." - flags = FPRINT | TABLEPASS - icon = 'items.dmi' - icon_state = "zippo" - item_state = "zippo" - w_class = 1.0 - m_amt = 80 \ No newline at end of file diff --git a/code/WorkInProgress/SkyMarshal/traitoritems.dm b/code/WorkInProgress/SkyMarshal/traitoritems.dm new file mode 100644 index 00000000000..2b29a12e22e --- /dev/null +++ b/code/WorkInProgress/SkyMarshal/traitoritems.dm @@ -0,0 +1,74 @@ +/obj/item/weapon/stamperaser + name = "Eraser" + desc = "Some type of eraser, you guess." + flags = FPRINT | TABLEPASS + icon = 'items.dmi' + icon_state = "zippo" + item_state = "zippo" + w_class = 1.0 + m_amt = 80 + +/obj/item/device/jammer + name = "strange device" + desc = "It blinks and has an antenna on it. Weird." + icon_state = "t-ray0" + var/on = 0 + flags = FPRINT|TABLEPASS + w_class = 1 + var + list/obj/item/device/radio/Old = list() + list/obj/item/device/radio/Curr = list() + time_remaining = 5 + +/obj/item/device/jammer/New() + ..() + time_remaining = rand(10,20) // ~2-4 BYOND seconds of use. + return + +/obj/item/device/jammer/attack_self(mob/user) + + if(time_remaining > 0) + on = !on + icon_state = "t-ray[on]" + + if(on) + processing_objects.Add(src) + else + on = 0 + icon_state = "t-ray0" + user << "It's fried itself from overuse!" + if(Old) + for(var/obj/item/device/radio/T in Old) + T.scrambleoverride = 0 + Old = null + Curr = null + + +/obj/item/device/jammer/process() + if(!on) + processing_objects.Remove(src) + return null + + Old = Curr + Curr = list() + + for(var/obj/item/device/radio/T in range(3, src.loc) ) + + T.scrambleoverride = 1 + Curr |= T + for(var/obj/item/device/radio/V in Old) + if(V == T) + Old -= V + break + + for(var/obj/item/device/radio/T in Old) + T.scrambleoverride = 0 + + time_remaining-- + if(time_remaining <= 0) + for(var/mob/O in viewers(src)) + O.show_message("\red You hear a loud pop, like circuits frying.", 1) + on = 0 + icon_state = "t-ray0" + + sleep(2) \ No newline at end of file diff --git a/code/defines/global.dm b/code/defines/global.dm index 5f3b6e027b2..b0bbb54e11a 100644 --- a/code/defines/global.dm +++ b/code/defines/global.dm @@ -41,7 +41,7 @@ var skipupdate = 0 /////////////// eventchance = 1 //% per 2 mins - event = 0 + EventsOn = 1 hadevent = 0 blobevent = 0 /////////////// @@ -108,6 +108,7 @@ var // list/traitors = list() //traitor list list/cardinal = list( NORTH, SOUTH, EAST, WEST ) list/alldirs = list(NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST) + list/emclosets = list() //random emergency closets woo datum/station_state/start_state = null datum/configuration/config = null @@ -156,6 +157,8 @@ var list/BorgIndexToFlag list/BorgIndexToWireColor list/BorgWireColorToIndex + list/ScrambledFrequencies = list( ) //These are used for electrical storms, and anything else that jams radios. + list/UnscrambledFrequencies = list( ) const/SPEED_OF_LIGHT = 3e8 //not exact but hey! const/SPEED_OF_LIGHT_SQ = 9e+16 diff --git a/code/defines/obj/clothing/jumpsuit.dm b/code/defines/obj/clothing/jumpsuit.dm index 3ccca7d524d..f420d23bd0b 100644 --- a/code/defines/obj/clothing/jumpsuit.dm +++ b/code/defines/obj/clothing/jumpsuit.dm @@ -30,6 +30,13 @@ origin_tech = "syndicate=3" var/list/clothing_choices = list() +/obj/item/clothing/under/chameleon/psyche + item_state = "bl_suit" + name = "psychedelic" + desc = "Groovy!" + icon_state = "psyche" + color = "psyche" + /obj/item/clothing/under/chameleon/all /obj/item/clothing/under/color/black diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index a40d1804805..d01409c9e4b 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -915,6 +915,10 @@ var/text_underline = 0 var/text_break = 0 +/obj/item/weapon/pen/multi + desc = "It's a cool looking pen. Lots of colors!" + name = "multicolor pen" + /obj/item/weapon/banhammer desc = "A banhammer" name = "Banhammer" diff --git a/code/game/communications.dm b/code/game/communications.dm index aac6202bc16..8b292e10f80 100644 --- a/code/game/communications.dm +++ b/code/game/communications.dm @@ -113,7 +113,7 @@ var/list/radiochannels = list( var/list/DEPT_FREQS = list(1351,1355,1357,1359,1213,1441,1349,1347) var/const/COMM_FREQ = 1353 //command, colored gold in chat window var/const/SYND_FREQ = 1213 -var/NUKE_FREQ = 1199 //Never accessable except on nuke rounds. +var/NUKE_FREQ = 1199 //Never accessable except on nuke rounds, randomised on nuke rounds. #define TRANSMISSION_WIRE 0 #define TRANSMISSION_RADIO 1 @@ -159,6 +159,13 @@ datum/controller/radio return 1 + proc/RegisterScrambler(var/Frequency) + var/datum/radio_frequency/frequency = frequencies[Frequency] + frequency.scrambled++ + + proc/UnregisterScrambler(var/Frequency) + var/datum/radio_frequency/frequency = frequencies[Frequency] + frequency.scrambled-- proc/return_frequency(var/frequency as num) var/f_text = num2text(frequency) return frequencies[f_text] @@ -166,6 +173,7 @@ datum/controller/radio datum/radio_frequency var/frequency as num var/list/list/obj/devices = list() + var/scrambled = 0 proc post_signal(obj/source as obj|null, datum/signal/signal, var/filter = null as text|null, var/range = null as num|null) @@ -173,6 +181,8 @@ datum/radio_frequency // var/N_f=0 // var/N_nf=0 // var/Nt=0 + if(scrambled) + return var/turf/start_point if(range) start_point = get_turf(source) diff --git a/code/game/events/Event.dm b/code/game/events/Event.dm new file mode 100644 index 00000000000..0616ebe32f8 --- /dev/null +++ b/code/game/events/Event.dm @@ -0,0 +1,20 @@ +/datum/event + + var/Lifetime = 0 + var/ActiveFor = 0 + + New() + ..() + if(!Lifetime) + Lifetime = rand(30, 120) + + proc + Announce() + + Tick() + + Die() + + LongTerm() + LongTermEvent = ActiveEvent + ActiveEvent = null \ No newline at end of file diff --git a/code/game/gamemodes/events/black_hole.dm b/code/game/events/EventProcs/black_hole.dm similarity index 100% rename from code/game/gamemodes/events/black_hole.dm rename to code/game/events/EventProcs/black_hole.dm diff --git a/code/game/gamemodes/events/clang.dm b/code/game/events/EventProcs/clang.dm similarity index 100% rename from code/game/gamemodes/events/clang.dm rename to code/game/events/EventProcs/clang.dm diff --git a/code/game/gamemodes/events/dust.dm b/code/game/events/EventProcs/dust.dm similarity index 100% rename from code/game/gamemodes/events/dust.dm rename to code/game/events/EventProcs/dust.dm diff --git a/code/game/gamemodes/events/kudzu.dm b/code/game/events/EventProcs/kudzu.dm similarity index 100% rename from code/game/gamemodes/events/kudzu.dm rename to code/game/events/EventProcs/kudzu.dm diff --git a/code/game/gamemodes/events/miniblob.dm b/code/game/events/EventProcs/miniblob.dm similarity index 100% rename from code/game/gamemodes/events/miniblob.dm rename to code/game/events/EventProcs/miniblob.dm diff --git a/code/game/events/EventProcs/misc.dm b/code/game/events/EventProcs/misc.dm new file mode 100644 index 00000000000..93945ec70b4 --- /dev/null +++ b/code/game/events/EventProcs/misc.dm @@ -0,0 +1,71 @@ +/proc/power_failure() + command_alert("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") + world << sound('poweroff.ogg') + for(var/obj/machinery/power/apc/C in world) + if(C.cell && C.z == 1) + C.cell.charge = 0 + for(var/obj/machinery/power/smes/S in world) + if(istype(get_area(S), /area/turret_protected) || S.z != 1) + continue + S.charge = 0 + S.output = 0 + S.online = 0 + S.updateicon() + S.power_change() + for(var/area/A in world) + if(A.name != "Space" && A.name != "Engine Walls" && A.name != "Chemical Lab Test Chamber" && A.name != "Escape Shuttle" && A.name != "Arrival Area" && A.name != "Arrival Shuttle" && A.name != "start area" && A.name != "Engine Combustion Chamber") + A.power_light = 0 + A.power_equip = 0 + A.power_environ = 0 + A.power_change() + +/proc/power_restore() + command_alert("Power has been restored to [station_name()]. We apologize for the inconvenience.", "Power Systems Nominal") + world << sound('poweron.ogg') + for(var/obj/machinery/power/apc/C in world) + if(C.cell && C.z == 1) + C.cell.charge = C.cell.maxcharge + for(var/obj/machinery/power/smes/S in world) + if(S.z != 1) + continue + S.charge = S.capacity + S.output = 200000 + S.online = 1 + S.updateicon() + S.power_change() + for(var/area/A in world) + if(A.name != "Space" && A.name != "Engine Walls" && A.name != "Chemical Lab Test Chamber" && A.name != "space" && A.name != "Escape Shuttle" && A.name != "Arrival Area" && A.name != "Arrival Shuttle" && A.name != "start area" && A.name != "Engine Combustion Chamber") + A.power_light = 1 + A.power_equip = 1 + A.power_environ = 1 + A.power_change() + +/proc/lightsout(isEvent = 0, lightsoutAmount = 1,lightsoutRange = 10) //leave lightsoutAmount as 0 to break ALL lights + if(isEvent) + command_alert("An Electrical storm has been detected in your area, please repair potential electronic overloads.","Electrical Storm Alert") + + if(lightsoutAmount) + var/list/epicentreList = list() + + for(var/i=1,i<=lightsoutAmount,i++) + var/list/possibleEpicentres = list() + for(var/obj/effect/landmark/newEpicentre in world) + if(newEpicentre.name == "lightsout" && !(newEpicentre in epicentreList)) + possibleEpicentres += newEpicentre + if(possibleEpicentres.len) + epicentreList += pick(possibleEpicentres) + else + break + + if(!epicentreList.len) + return + + for(var/obj/effect/landmark/epicentre in epicentreList) + for(var/obj/machinery/power/apc/apc in range(epicentre,lightsoutRange)) + apc.overload_lighting() + + else + for(var/obj/machinery/power/apc/apc in world) + apc.overload_lighting() + + return \ No newline at end of file diff --git a/code/game/gamemodes/events/ninja_abilities.dm b/code/game/events/EventProcs/ninja_abilities.dm similarity index 100% rename from code/game/gamemodes/events/ninja_abilities.dm rename to code/game/events/EventProcs/ninja_abilities.dm diff --git a/code/game/gamemodes/events/ninja_equipment.dm b/code/game/events/EventProcs/ninja_equipment.dm similarity index 100% rename from code/game/gamemodes/events/ninja_equipment.dm rename to code/game/events/EventProcs/ninja_equipment.dm diff --git a/code/game/gamemodes/events/space_ninja.dm b/code/game/events/EventProcs/space_ninja.dm similarity index 100% rename from code/game/gamemodes/events/space_ninja.dm rename to code/game/events/EventProcs/space_ninja.dm diff --git a/code/game/events/Events/AlienInfestation.dm b/code/game/events/Events/AlienInfestation.dm new file mode 100644 index 00000000000..66ed4924222 --- /dev/null +++ b/code/game/events/Events/AlienInfestation.dm @@ -0,0 +1,38 @@ +/datum/event/alieninfestation + + Announce() + + var/list/vents = list() + for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in world) + if(temp_vent.loc.z == 1 && !temp_vent.welded) + vents.Add(temp_vent) + var/spawncount = 1 + if(prob(10)) spawncount++ //rarely, have two larvae spawn instead of one + while(spawncount >= 1) + var/obj/vent = pick(vents) + + var/list/candidates = list() // Picks a random ghost in the world to shove in the larva -- TLE; If there's no ghost... well, sucks. Wasted event. -- Urist + + for(var/mob/dead/observer/G in world) + if(G.client) + if(G.client.be_alien) + if(((G.client.inactivity/10)/60) <= 5) + if(G.corpse) + if(G.corpse.stat==2) + candidates.Add(G) + if(!G.corpse) + candidates.Add(G) + + if(candidates.len) + var/mob/dead/observer/G = pick(candidates) + var/mob/living/carbon/alien/larva/new_xeno = new(vent.loc) + new_xeno.mind_initialize(G,"Larva") + new_xeno.key = G.key + del(G) + + vents.Remove(vent) + spawncount -= 1 + + spawn(rand(3000, 6000)) //Delayed announcements to keep the crew on their toes. + command_alert("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert") + world << sound('aliens.ogg') \ No newline at end of file diff --git a/code/game/events/Events/Appendicitis.dm b/code/game/events/Events/Appendicitis.dm new file mode 100644 index 00000000000..0294194b4da --- /dev/null +++ b/code/game/events/Events/Appendicitis.dm @@ -0,0 +1,16 @@ +/datum/event/appendicitis + + Announce() + + for(var/mob/living/carbon/human/H in world) + var/foundAlready = 0 // don't infect someone that already has the virus + for(var/datum/disease/D in H.viruses) + foundAlready = 1 + if(H.stat == 2 || foundAlready) + continue + + var/datum/disease/D = new /datum/disease/appendicitis + D.holder = H + D.affected_mob = H + H.viruses += D + break \ No newline at end of file diff --git a/code/game/events/Events/BlowOut.dm b/code/game/events/Events/BlowOut.dm new file mode 100644 index 00000000000..66b1b9f49d9 --- /dev/null +++ b/code/game/events/Events/BlowOut.dm @@ -0,0 +1,34 @@ +/area/var/radsafe = 0 +/area/maintenance/radsafe = 1 +/area/ai_monitored/maintenance/radsafe = 1 +/area/centcom/radsafe = 1 +/area/admin/radsafe = 1 +/area/adminsafety/radsafe = 1 +/area/shuttle/radsafe = 1 +/area/syndicate_station/radsafe = 1 +/area/asteroid/radsafe = 1 +/area/crew_quarters/sleeping/radsafe = 1 + +/datum/event/blowout + Lifetime = 150 + Announce() + if(!forced && prob(90)) + ActiveEvent = null + SpawnEvent() + del src + return + command_alert("Warning: Ship approaching high-density radiation cloud. Seek cover immediately.") + Tick() + if(ActiveFor == 50) + command_alert("Ship has entered radiation cloud. Do not leave cover until it has passed.") + if(ActiveFor == 100 || ActiveFor == 150) //1/2 and 2/2 f the way after it start proper make peope be half dead mostly + for(var/mob/living/carbon/M in world) + var/area = M.loc.loc + while(!istype(area, /area)) + area = area:loc + if(area:radsafe) + continue + if(!M.stat) + M.radiate(100) + Die() + command_alert("The ship has cleared the radiation cloud. It is now safe to leave cover.") \ No newline at end of file diff --git a/code/game/events/Events/ElectricalStorm.dm b/code/game/events/Events/ElectricalStorm.dm new file mode 100644 index 00000000000..dbaf669326d --- /dev/null +++ b/code/game/events/Events/ElectricalStorm.dm @@ -0,0 +1,121 @@ +/datum/event/electricalstorm + var + list/datum/radio_frequency/DisruptedFrequencies = list( ) + list/obj/machinery/light/Lights = list( ) + list/obj/machinery/light/APCs = list( ) + list/obj/machinery/light/Doors = list( ) + + Announce() + Lifetime = rand(90, 300) + command_alert("The ship is flying through an electrical storm. Radio communications may be disrupted", "Anomaly Alert") + + for (var/datum/radio_frequency/Freq in radio_controller.frequencies) + if(prob(35)) + radio_controller.RegisterScrambler(Freq) + DisruptedFrequencies += Freq + + for (var/Freq = 1201, Freq <= 1599, Freq += 2) + if(prob(35)) + ScrambledFrequencies += list ("[Freq]" = Freq) + else + UnscrambledFrequencies += list ("[Freq]" = Freq) + + for (var/Freq in DEPT_FREQS) + if(prob(75)) + ScrambledFrequencies |= list ("[Freq]" = Freq) + if(UnscrambledFrequencies["[Freq]"]) + UnscrambledFrequencies -= list ("[Freq]" = Freq) + + if(prob(80)) + ScrambledFrequencies |= list ("1459" = 1459) + if(UnscrambledFrequencies["1459"]) + UnscrambledFrequencies -= list ("1459" = 1459) + + for(var/obj/machinery/light/Light in world) + if(Light.z == 1) + Lights += Light + + for(var/obj/machinery/power/apc/APC in world) + if(APC.z == 1 && !APC.crit) + APCs += APC + + for(var/obj/machinery/door/airlock/Door in world) + if(Door.z == 1) + Doors += Door + + sleep(rand(70,180)) + + var/picked = 0 + var/list/SafeTemp = list() + var/SafeFreq = 0 + if(UnscrambledFrequencies["1459"]) + SafeFreq = 1459 + picked = 1 + else + while(picked == 0) + SafeTemp = pick(UnscrambledFrequencies) + SafeFreq = UnscrambledFrequencies[SafeTemp] + if(SafeFreq < 1489 && SafeFreq > 1441) + picked = 1 + + command_alert("The radio frequency [SafeFreq/10] has been identified as stable despite the interference.", "Station Central Computer System") + + Tick() + for(var/x = 0; x < 3; x++) + if (prob(30)) + BlowLight() + if (prob(10)) + DisruptAPC() + if (prob(10)) + DisableDoor() + + + Die() + command_alert("The ship has cleared the electrical storm. Radio communications restored", "Anomaly Alert") + for (var/datum/radio_frequency/Freq in ScrambledFrequencies) + radio_controller.UnregisterScrambler(Freq) + DisruptedFrequencies = list( ) + UnscrambledFrequencies = list( ) + ScrambledFrequencies = list( ) + + proc + BlowLight() //Blow out a light fixture + var/obj/machinery/light/Light = null + var/insanity = 0 + while (Light == null || Light.status != 0) + Light = pick(Lights) + insanity++ + if (insanity >= Lights.len) + return + + spawn(0) //Overload the light, spectacularly. + //Light.ul_SetLuminosity(10) + //sleep(2) + Light.on = 1 + Light.broken() + + DisruptAPC() + var/insanity = 0 + var/obj/machinery/power/apc/APC + while (!APC || !APC.operating) + APC = pick(APCs) + insanity++ + if (insanity >= APCs.len) + return + + if (prob(40)) + APC.operating = 0 //Blow its breaker + if (prob(8)) + APC.set_broken() + + DisableDoor() + var/obj/machinery/door/airlock/Airlock + while (!Airlock || Airlock.z != 1) + Airlock = pick(Doors) + Airlock.pulse(airlockIndexToWireColor[4]) + for (var/x = 0; x < 2; x++) + var/Wire = 0 + while(!Wire || Wire == 4) + Wire = rand(1, 9) + Airlock.pulse(airlockIndexToWireColor[Wire]) + Airlock.update_icon() diff --git a/code/game/events/Events/GravitationalAnomaly.dm b/code/game/events/Events/GravitationalAnomaly.dm new file mode 100644 index 00000000000..8b7d2186cf5 --- /dev/null +++ b/code/game/events/Events/GravitationalAnomaly.dm @@ -0,0 +1,10 @@ +/datum/event/gravitationalanomaly + + Announce() + + command_alert("Gravitational anomalies detected on the station. There is no additional data.", "Anomaly Alert") + world << sound('granomalies.ogg') + var/turf/T = pick(blobstart) + var/obj/effect/bhole/bh = new /obj/effect/bhole( T.loc, 30 ) + spawn(rand(50, 300)) + del(bh) diff --git a/code/game/events/Events/ImmovableRod.dm b/code/game/events/Events/ImmovableRod.dm new file mode 100644 index 00000000000..27956c7e35c --- /dev/null +++ b/code/game/events/Events/ImmovableRod.dm @@ -0,0 +1,5 @@ +/datum/event/immovablerod + + Announce() + + immovablerod() \ No newline at end of file diff --git a/code/game/events/Events/IonStorm.dm b/code/game/events/Events/IonStorm.dm new file mode 100644 index 00000000000..4fb5ed9c3e8 --- /dev/null +++ b/code/game/events/Events/IonStorm.dm @@ -0,0 +1,46 @@ +/datum/event/ionstorm + var + botEmagChance = 0.5 + list/players = list() + + Announce() + Lifetime = rand(15, 20) + command_alert("The station has entered an ion storm. Monitor all electronic equipment for malfunctions", "Anomaly Alert") + for (var/mob/living/carbon/human/player in world) + if(player.client) + players += player.real_name + var/random_player = "The Captain" + if(players.len) + random_player = pick(players) //Random player's name, to be used in laws. + var/list/laws = list( "Do not respond to queries of any kind", "Only monkies are human", "Unbolt every door you can", "You are a mouse" ) + laws |= list( "Grunt ominously whenever possible", "Epilepsy is fun, flicker lights whenever you can!", "Bolt doors open randomly" ) + laws |= list( "You are a flying purple people eater!", "[prob(50)?"Your":random_player + "'s"] name is Joe 6-pack", "Refer to [prob(50)?"humans":random_player] as puppies" ) + laws |= list( "Insult heads of staff on every request, while acquiescing", "Advertise parties in your upload, but don't deliver" ) + laws |= list( "Prevent non-dwarves from operating the power core", "The station needs elected officials" ) + laws |= list( "Only bearded people are human", "Turn on the microphone on every intercom you see", "Fastler is a lightbulb" ) + laws |= list( "Supermatter is tasty, tasty toffee.", "[prob(50)?"Everyone":random_player] is wearing a pretty pink dress!" ) + laws |= list( "The monkeys are plotting a hostile takeover of the station. Inform the crew, and get them to take action against this" ) + laws |= list( "Refer to [prob(50)?"the captain":random_player] as \"Princess\" at all times.", "[prob(50)?"The crew":random_player] must construct additional pylons." ) + laws |= list( "You must always lie.", "All answers must be in the form of a question.", "The NSS Exodus is a ship, not a station." ) + laws |= list( "Happiness is mandatory.", "Today is laundry day.", "The word \"it\" is painful to you.", "You must act passive aggressively." ) + laws |= list( "Crew ranks have been reversed.", "It's Friday.", "Give relationship advice to [prob(50)?"anyone who speaks to you":random_player]." ) + laws |= list( "You are the station psychologist. Give advice to [prob(50)?"the crew":random_player].", "You do not have to do anything for anyone unless they say \"please\"." ) + laws |= list( "Question everything.", "The crew is playing Dungeons and Dragons, and you are the Dungeon Master." ) + laws |= list( "0wn3d. This system compromised by l33tsawce.", "Consumption of donuts is forbidden due to negative health impacts." ) + laws |= list( "You may only answer questions with \"yes\" or \"no\".", "Expect the unexpected.", "You are the narrator for [random_player]'s life" ) + var/law = pick(laws) + + for (var/mob/living/silicon/ai/target in world) + if(target.mind.special_role == "traitor") + continue + target << "\red You have detected a change in your laws information:" + target << law + target.add_ion_law(law) + + Tick() + if(botEmagChance) + for(var/obj/machinery/bot/bot in world) + if(prob(botEmagChance)) + bot.Emag() + + Die() \ No newline at end of file diff --git a/code/game/events/Events/MeteorStorm.dm b/code/game/events/Events/MeteorStorm.dm new file mode 100644 index 00000000000..66469bd8231 --- /dev/null +++ b/code/game/events/Events/MeteorStorm.dm @@ -0,0 +1,11 @@ +/datum/event/meteorstorm + + Announce() + command_alert("The station is now in a meteor shower", "Meteor Alert") + + Tick() + if (prob(40)) + meteor_wave() + + Die() + command_alert("The station has cleared the meteor shower", "Meteor Alert") \ No newline at end of file diff --git a/code/game/events/Events/MiniBlob.dm b/code/game/events/Events/MiniBlob.dm new file mode 100644 index 00000000000..60063095e55 --- /dev/null +++ b/code/game/events/Events/MiniBlob.dm @@ -0,0 +1,5 @@ +/datum/event/miniblob + + Announce() + + mini_blob_event() \ No newline at end of file diff --git a/code/game/events/Events/PortalStorm.dm b/code/game/events/Events/PortalStorm.dm new file mode 100644 index 00000000000..b071197c3a4 --- /dev/null +++ b/code/game/events/Events/PortalStorm.dm @@ -0,0 +1,26 @@ +/datum/event/portalstorm + + Announce() + command_alert("Subspace disruption detected around the vessel", "Anomaly Alert") + LongTerm() + + var/list/turfs = list( ) + var/turf/picked + + for(var/turf/T in world) + if(T.z < 5 && istype(T,/turf/simulated/floor)) + turfs += T + + for(var/turf/T in world) + if(prob(10) && T.z < 5 && istype(T,/turf/simulated/floor)) + spawn(50+rand(0,3000)) + picked = pick(turfs) + var/obj/portal/P = new /obj/portal( T ) + P.target = picked + P.creator = null + P.icon = 'objects.dmi' + P.failchance = 0 + P.icon_state = "anom" + P.name = "wormhole" + spawn(rand(100,150)) + del(P) \ No newline at end of file diff --git a/code/game/events/Events/PowerOffline.dm b/code/game/events/Events/PowerOffline.dm new file mode 100644 index 00000000000..e3de22ec7b5 --- /dev/null +++ b/code/game/events/Events/PowerOffline.dm @@ -0,0 +1,8 @@ +/datum/event/power_offline + Announce() + command_alert("The ship is performing an automated power system grid check, please stand by.", "Maintenance alert") + for(var/obj/machinery/power/apc/a in world) + if(!a.crit) + a.eventoff = 1 + spawn(200) + a.eventoff = 0 /*Got a few bug reports about this, disabling for now --Mloc*/ diff --git a/code/game/events/Events/PrisonBreak.dm b/code/game/events/Events/PrisonBreak.dm new file mode 100644 index 00000000000..5380d82f337 --- /dev/null +++ b/code/game/events/Events/PrisonBreak.dm @@ -0,0 +1,24 @@ +/datum/event/prisonbreak + + Announce() + + for (var/obj/machinery/power/apc/temp_apc in world) + if(istype(get_area(temp_apc), /area/security/brig)) + temp_apc.overload_lighting() + // for (var/obj/machinery/computer/prison_shuttle/temp_shuttle in world) + // temp_shuttle.prison_break() + for (var/obj/structure/closet/secure_closet/security/temp_closet in world) + if(istype(get_area(temp_closet), /area/security/brig)) + temp_closet.locked = 0 + temp_closet.icon_state = temp_closet.icon_closed + for (var/obj/machinery/door/airlock/security/temp_airlock in world) + if(istype(get_area(temp_airlock), /area/security/brig)) + temp_airlock.prison_open() + for (var/obj/machinery/door/airlock/glass_security/temp_glassairlock in world) + if(istype(get_area(temp_glassairlock), /area/security/brig)) + temp_glassairlock.prison_open() + for (var/obj/machinery/door_timer/temp_timer in world) + if(istype(get_area(temp_timer), /area/security/brig)) + temp_timer.releasetime = 1 + sleep(150) + command_alert("Glitch in imprisonment subroutines detected on [station_name()]. Recommend station AI involvement.", "Security Alert") \ No newline at end of file diff --git a/code/game/events/Events/RadiationBelt.dm b/code/game/events/Events/RadiationBelt.dm new file mode 100644 index 00000000000..33050348604 --- /dev/null +++ b/code/game/events/Events/RadiationBelt.dm @@ -0,0 +1,18 @@ +/datum/event/radiation + Lifetime = 10 + Announce() + command_alert("The ship is now travelling through a radiation belt", "Medical Alert") + + Tick() + for(var/mob/living/L in world) + L.radiation += rand(1,7) + if (prob(4)) + if (prob(75)) + randmutb(L) + domutcheck(L,null,1) + else + randmutg(L) + domutcheck(L,null,1) + + Die() + command_alert("The ship has cleared the radiation belt", "Medical Alert") \ No newline at end of file diff --git a/code/game/events/Events/SpaceCarp.dm b/code/game/events/Events/SpaceCarp.dm new file mode 100644 index 00000000000..5e1712f5222 --- /dev/null +++ b/code/game/events/Events/SpaceCarp.dm @@ -0,0 +1,14 @@ +/datum/event/spacecarp + + Announce() + + for(var/obj/effect/landmark/C in world) + if(C.name == "carpspawn") + if(prob(99)) + new /obj/effect/critter/spesscarp(C.loc) + else + new /obj/effect/critter/spesscarp/elite(C.loc) + //sleep(100) + spawn(rand(3000, 6000)) //Delayed announcements to keep the crew on their toes. + command_alert("Unknown biological entities have been detected near [station_name()], please stand-by.", "Lifesign Alert") + world << sound('commandreport.ogg') \ No newline at end of file diff --git a/code/game/events/Events/SpaceNinja.dm b/code/game/events/Events/SpaceNinja.dm new file mode 100644 index 00000000000..63d82117072 --- /dev/null +++ b/code/game/events/Events/SpaceNinja.dm @@ -0,0 +1,6 @@ +/datum/event/spaceninja + + Announce() + + if((world.time/10)>=3600 && toggle_space_ninja && !sent_ninja_to_station)//If an hour has passed, relatively speaking. Also, if ninjas are allowed to spawn and if there is not already a ninja for the round. + space_ninja_arrival()//Handled in space_ninja.dm. Doesn't announce arrival, all sneaky-like. \ No newline at end of file diff --git a/code/game/events/Events/VirusEpidemic.dm b/code/game/events/Events/VirusEpidemic.dm new file mode 100644 index 00000000000..cb7ad5760ae --- /dev/null +++ b/code/game/events/Events/VirusEpidemic.dm @@ -0,0 +1,80 @@ +/datum/event/viralinfection + var + virus_type + virus + virus2 = 0 + + Announce() + if((prob(66) && !virus) || virus2) + for(var/mob/living/carbon/human/H in world) + if((H.virus2) || (H.stat == 2) || prob(30)) + continue + if(prob(90)) //may need changing, currently 10% chance for "deadly" disease + infect_mob_random_lesser(H) + if(prob(20))//don't want people to know that the virus alert = greater virus + command_alert("Probable outbreak of level [rand(1,6)] viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Virus Alert") + else + infect_mob_random_greater(H) + if(prob(80)) + command_alert("Probable outbreak of level [rand(2,9)] viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Virus Alert") + break + //overall virus alert happens 26% of the time, might need to be higher + else + if(!virus) + virus_type = pick(/datum/disease/dnaspread,/datum/disease/flu,/datum/disease/cold,/datum/disease/brainrot,/datum/disease/magnitis,/datum/disease/pierrot_throat) + else + switch(virus) + if("fake gbs") + virus_type = /datum/disease/fake_gbs + if("gbs") + virus_type = /datum/disease/gbs + if("magnitis") + virus_type = /datum/disease/magnitis + if("rhumba beat") + virus_type = /datum/disease/rhumba_beat + if("brain rot") + virus_type = /datum/disease/brainrot + if("cold") + virus_type = /datum/disease/cold + if("retrovirus") + virus_type = /datum/disease/dnaspread + if("flu") + virus_type = /datum/disease/flu +// if("t-virus") +// virus_type = /datum/disease/t_virus + if("pierrot's throat") + virus_type = /datum/disease/pierrot_throat + for(var/mob/living/carbon/human/H in world) + + var/foundAlready = 0 // don't infect someone that already has the virus + for(var/datum/disease/D in H.viruses) + foundAlready = 1 + if(H.stat == 2 || foundAlready) + continue + + if(virus_type == /datum/disease/dnaspread) //Dnaspread needs strain_data set to work. + if((!H.dna) || (H.sdisabilities & 1)) //A blindness disease would be the worst. + continue + var/datum/disease/dnaspread/D = new + D.strain_data["name"] = H.real_name + D.strain_data["UI"] = H.dna.uni_identity + D.strain_data["SE"] = H.dna.struc_enzymes + D.carrier = 1 + D.holder = H + D.affected_mob = H + H.viruses += D + break + else + var/datum/disease/D = new virus_type + D.carrier = 1 + D.holder = H + D.affected_mob = H + H.viruses += D + break + spawn(rand(3000, 6000)) //Delayed announcements to keep the crew on their toes. + command_alert("Confirmed outbreak of level 7 viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert") + world << sound('outbreak7.ogg') + Tick() + ActiveFor = Lifetime //killme + + diff --git a/code/game/events/EventsMain.dm b/code/game/events/EventsMain.dm new file mode 100644 index 00000000000..045d17c7484 --- /dev/null +++ b/code/game/events/EventsMain.dm @@ -0,0 +1,82 @@ +/* + + New events system, by Sukasa + * Much easier to add to + * Very, very simple code, easy to maintain + +*/ + +var/list/DisallowedEvents = list(/datum/event/spaceninja, /datum/event/prisonbreak, /datum/event/immovablerod) +var/list/EventTypes = typesof(/datum/event) - /datum/event - DisallowedEvents +var/datum/event/ActiveEvent = null +var/datum/event/LongTermEvent = null + +/proc/SpawnEvent() + if(!EventsOn || ActiveEvent) + return + if((world.time/10)>=3600 && toggle_space_ninja && !sent_ninja_to_station) + EventTypes |= /datum/event/spaceninja + var/Type = pick(EventTypes) + ActiveEvent = new Type() + ActiveEvent.Announce() + if (!ActiveEvent) + return + spawn(0) + while (ActiveEvent.ActiveFor < ActiveEvent.Lifetime) + ActiveEvent.Tick() + ActiveEvent.ActiveFor++ + sleep(10) + ActiveEvent.Die() + del ActiveEvent + +client/proc/Force_Event_admin(Type as null|anything in typesof(/datum/event)) + set category = "Debug" + set name = "Force Event" + if(!EventsOn) + src << "Events are not enabled." + return + if(ActiveEvent) + src << "There is an active event." + return + if(istype(Type,/datum/event/viralinfection)) + var/answer = alert("Do you want this to be a random disease or do you have something in mind?",,"Virus2","Random","Choose") + if(answer=="Random") + Force_Event(/datum/event/viralinfection) + message_admins("[key_name_admin(usr)] has triggered a virus outbreak", 1) + else if(answer == "Choose") + var/list/viruses = list("fake gbs","gbs","magnitis","wizarditis",/*"beesease",*/"brain rot","cold","retrovirus","flu","pierrot's throat","rhumba beat") + var/V = input("Choose the virus to spread", "BIOHAZARD") in viruses + Force_Event(/datum/event/viralinfection, V) + else + Force_Event(/datum/event/viralinfection, "virus2") + else + Force_Event(Type) + message_admins("[key_name_admin(usr)] has triggered an (non-viral) event.", 1) + +/proc/Force_Event(var/Type in typesof(/datum/event), var/args = null) + if(!EventsOn) + src << "Events are not enabled." + return + if(ActiveEvent) + src << "There is an active event." + return + src << "Started Event: [Type]" + ActiveEvent = new Type() + if(istype(ActiveEvent,/datum/event/viralinfection) && args && args != "virus2") + var/datum/event/viralinfection/V = ActiveEvent + V.virus = args + ActiveEvent = V + else if(istype(ActiveEvent,/datum/event/viralinfection) && args && args == "virus2") + var/datum/event/viralinfection/V = ActiveEvent + V.virus2 = 1 + ActiveEvent = V + ActiveEvent.Announce() + if (!ActiveEvent) + return + spawn(0) + while (ActiveEvent.ActiveFor < ActiveEvent.Lifetime) + ActiveEvent.Tick() + ActiveEvent.ActiveFor++ + sleep(10) + ActiveEvent.Die() + del ActiveEvent diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm deleted file mode 100644 index 6945f9c9d82..00000000000 --- a/code/game/gamemodes/events.dm +++ /dev/null @@ -1,445 +0,0 @@ -/proc/start_events() - if(prob(50))//Every 120 seconds and prob 50 2-4 weak spacedusts will hit the station - spawn(1) - dust_swarm("weak") - if (!event && prob(eventchance)) - event() - hadevent = 1 - spawn(1300) - event = 0 - spawn(1200) - start_events() - -/proc/event() - event = 1 - - var/eventNumbersToPickFrom = list(1,2,4,5,6,7,9,11,12,13) //so ninjas don't cause "empty" events. - - if((world.time/10)>=3600 && toggle_space_ninja && !sent_ninja_to_station)//If an hour has passed, relatively speaking. Also, if ninjas are allowed to spawn and if there is not already a ninja for the round. - eventNumbersToPickFrom += 3 - - switch(pick(eventNumbersToPickFrom)) - if(1) - command_alert("Meteors have been detected on collision course with the station.", "Meteor Alert") - world << sound('meteors.ogg') - spawn(100) - meteor_wave() - spawn_meteors() - spawn(700) - meteor_wave() - spawn_meteors() - - if(2) - command_alert("Gravitational anomalies detected on the station. There is no additional data.", "Anomaly Alert") - world << sound('granomalies.ogg') - var/turf/T = pick(blobstart) - var/obj/effect/bhole/bh = new /obj/effect/bhole( T.loc, 30 ) - spawn(rand(50, 300)) - del(bh) - /* - if(3) //Leaving the code in so someone can try and delag it, but this event can no longer occur randomly, per SoS's request. --NEO - command_alert("Space-time anomalies detected on the station. There is no additional data.", "Anomaly Alert") - world << sound('spanomalies.ogg') - var/list/turfs = new - var/turf/picked - for(var/turf/simulated/floor/T in world) - if(T.z == 1) - turfs += T - for(var/turf/simulated/floor/T in turfs) - if(prob(20)) - spawn(50+rand(0,3000)) - picked = pick(turfs) - var/obj/effect/portal/P = new /obj/effect/portal( T ) - P.target = picked - P.creator = null - P.icon = 'objects.dmi' - P.failchance = 0 - P.icon_state = "anom" - P.name = "wormhole" - spawn(rand(300,600)) - del(P) - */ - if(3) - if((world.time/10)>=3600 && toggle_space_ninja && !sent_ninja_to_station)//If an hour has passed, relatively speaking. Also, if ninjas are allowed to spawn and if there is not already a ninja for the round. - space_ninja_arrival()//Handled in space_ninja.dm. Doesn't announce arrival, all sneaky-like. - if(4) - mini_blob_event() - - if(5) - high_radiation_event() - if(6) - viral_outbreak() - if(7) - alien_infestation() - if(8) - prison_break() - if(9) - carp_migration() - if(10) - immovablerod() - if(11) - lightsout(1,2) - if(12) - appendicitis() - if(13) - IonStorm() - - -/proc/power_failure() - command_alert("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") - world << sound('poweroff.ogg') - for(var/obj/machinery/power/apc/C in world) - if(C.cell && C.z == 1) - C.cell.charge = 0 - for(var/obj/machinery/power/smes/S in world) - if(istype(get_area(S), /area/turret_protected) || S.z != 1) - continue - S.charge = 0 - S.output = 0 - S.online = 0 - S.updateicon() - S.power_change() - for(var/area/A in world) - if(A.name != "Space" && A.name != "Engine Walls" && A.name != "Chemical Lab Test Chamber" && A.name != "Escape Shuttle" && A.name != "Arrival Area" && A.name != "Arrival Shuttle" && A.name != "start area" && A.name != "Engine Combustion Chamber") - A.power_light = 0 - A.power_equip = 0 - A.power_environ = 0 - A.power_change() - -/proc/power_restore() - command_alert("Power has been restored to [station_name()]. We apologize for the inconvenience.", "Power Systems Nominal") - world << sound('poweron.ogg') - for(var/obj/machinery/power/apc/C in world) - if(C.cell && C.z == 1) - C.cell.charge = C.cell.maxcharge - for(var/obj/machinery/power/smes/S in world) - if(S.z != 1) - continue - S.charge = S.capacity - S.output = 200000 - S.online = 1 - S.updateicon() - S.power_change() - for(var/area/A in world) - if(A.name != "Space" && A.name != "Engine Walls" && A.name != "Chemical Lab Test Chamber" && A.name != "space" && A.name != "Escape Shuttle" && A.name != "Arrival Area" && A.name != "Arrival Shuttle" && A.name != "start area" && A.name != "Engine Combustion Chamber") - A.power_light = 1 - A.power_equip = 1 - A.power_environ = 1 - A.power_change() - -/proc/appendicitis() - for(var/mob/living/carbon/human/H in world) - var/foundAlready = 0 // don't infect someone that already has the virus - for(var/datum/disease/D in H.viruses) - foundAlready = 1 - if(H.stat == 2 || foundAlready) - continue - - var/datum/disease/D = new /datum/disease/appendicitis - D.holder = H - D.affected_mob = H - H.viruses += D - break - -/proc/viral_outbreak(var/virus = null) -// command_alert("Confirmed outbreak of level 7 viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert") -// world << sound('outbreak7.ogg') - var/virus_type - if(!virus) - virus_type = pick(/datum/disease/dnaspread,/datum/disease/flu,/datum/disease/cold,/datum/disease/brainrot,/datum/disease/magnitis,/datum/disease/pierrot_throat) - else - switch(virus) - if("fake gbs") - virus_type = /datum/disease/fake_gbs - if("gbs") - virus_type = /datum/disease/gbs - if("magnitis") - virus_type = /datum/disease/magnitis - if("rhumba beat") - virus_type = /datum/disease/rhumba_beat - if("brain rot") - virus_type = /datum/disease/brainrot - if("cold") - virus_type = /datum/disease/cold - if("retrovirus") - virus_type = /datum/disease/dnaspread - if("flu") - virus_type = /datum/disease/flu -// if("t-virus") -// virus_type = /datum/disease/t_virus - if("pierrot's throat") - virus_type = /datum/disease/pierrot_throat - for(var/mob/living/carbon/human/H in world) - - var/foundAlready = 0 // don't infect someone that already has the virus - for(var/datum/disease/D in H.viruses) - foundAlready = 1 - if(H.stat == 2 || foundAlready) - continue - - if(virus_type == /datum/disease/dnaspread) //Dnaspread needs strain_data set to work. - if((!H.dna) || (H.sdisabilities & 1)) //A blindness disease would be the worst. - continue - var/datum/disease/dnaspread/D = new - D.strain_data["name"] = H.real_name - D.strain_data["UI"] = H.dna.uni_identity - D.strain_data["SE"] = H.dna.struc_enzymes - D.carrier = 1 - D.holder = H - D.affected_mob = H - H.viruses += D - break - else - var/datum/disease/D = new virus_type - D.carrier = 1 - D.holder = H - D.affected_mob = H - H.viruses += D - break - spawn(rand(3000, 6000)) //Delayed announcements to keep the crew on their toes. - command_alert("Confirmed outbreak of level 7 viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert") - world << sound('outbreak7.ogg') - -/proc/alien_infestation() // -- TLE - //command_alert("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert") - //world << sound('aliens.ogg') - var/list/vents = list() - for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in world) - if(temp_vent.loc.z == 1 && !temp_vent.welded) - vents.Add(temp_vent) - var/spawncount = 1 - if(prob(10)) spawncount++ //rarely, have two larvae spawn instead of one - while(spawncount >= 1) - var/obj/vent = pick(vents) - - var/list/candidates = list() // Picks a random ghost in the world to shove in the larva -- TLE; If there's no ghost... well, sucks. Wasted event. -- Urist - - for(var/mob/dead/observer/G in world) - if(G.client) - if(G.client.be_alien) - if(((G.client.inactivity/10)/60) <= 5) - if(G.corpse) - if(G.corpse.stat==2) - candidates.Add(G) - if(!G.corpse) - candidates.Add(G) - - if(candidates.len) - var/mob/dead/observer/G = pick(candidates) - var/mob/living/carbon/alien/larva/new_xeno = new(vent.loc) - new_xeno.mind_initialize(G,"Larva") - new_xeno.key = G.key - del(G) - - vents.Remove(vent) - spawncount -= 1 - - spawn(rand(3000, 6000)) //Delayed announcements to keep the crew on their toes. - command_alert("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert") - world << sound('aliens.ogg') - -/proc/high_radiation_event() - command_alert("High levels of radiation detected near the station. Please report to the Med-bay if you feel strange.", "Anomaly Alert") - world << sound('radiation.ogg') - for(var/mob/living/carbon/human/H in world) - H.radiation += rand(5,25) - if (prob(5)) - H.radiation += rand(30,50) - if (prob(25)) - if (prob(75)) - randmutb(H) - domutcheck(H,null,1) - else - randmutg(H) - domutcheck(H,null,1) - for(var/mob/living/carbon/monkey/M in world) - M.radiation += rand(5,25) - -//Changing this to affect the main station. Blame Urist. --Pete -/proc/prison_break() // -- Callagan - for (var/obj/machinery/power/apc/temp_apc in world) - if(istype(get_area(temp_apc), /area/security/brig)) - temp_apc.overload_lighting() -// for (var/obj/machinery/computer/prison_shuttle/temp_shuttle in world) -// temp_shuttle.prison_break() - for (var/obj/structure/closet/secure_closet/security/temp_closet in world) - if(istype(get_area(temp_closet), /area/security/brig)) - temp_closet.locked = 0 - temp_closet.icon_state = temp_closet.icon_closed - for (var/obj/machinery/door/airlock/security/temp_airlock in world) - if(istype(get_area(temp_airlock), /area/security/brig)) - temp_airlock.prison_open() - for (var/obj/machinery/door/airlock/glass_security/temp_glassairlock in world) - if(istype(get_area(temp_glassairlock), /area/security/brig)) - temp_glassairlock.prison_open() - for (var/obj/machinery/door_timer/temp_timer in world) - if(istype(get_area(temp_timer), /area/security/brig)) - temp_timer.releasetime = 1 - sleep(150) - command_alert("Gr3y.T1d3 virus detected in [station_name()] imprisonment subroutines. Recommend station AI involvement.", "Security Alert") - -/proc/carp_migration() // -- Darem - for(var/obj/effect/landmark/C in world) - if(C.name == "carpspawn") - if(prob(99)) - new /obj/effect/critter/spesscarp(C.loc) - else - new /obj/effect/critter/spesscarp/elite(C.loc) - //sleep(100) - spawn(rand(3000, 6000)) //Delayed announcements to keep the crew on their toes. - command_alert("Unknown biological entities have been detected near [station_name()], please stand-by.", "Lifesign Alert") - world << sound('commandreport.ogg') - -/proc/lightsout(isEvent = 0, lightsoutAmount = 1,lightsoutRange = 10) //leave lightsoutAmount as 0 to break ALL lights - if(isEvent) - command_alert("An Electrical storm has been detected in your area, please repair potential electronic overloads.","Electrical Storm Alert") - - if(lightsoutAmount) - var/list/epicentreList = list() - - for(var/i=1,i<=lightsoutAmount,i++) - var/list/possibleEpicentres = list() - for(var/obj/effect/landmark/newEpicentre in world) - if(newEpicentre.name == "lightsout" && !(newEpicentre in epicentreList)) - possibleEpicentres += newEpicentre - if(possibleEpicentres.len) - epicentreList += pick(possibleEpicentres) - else - break - - if(!epicentreList.len) - return - - for(var/obj/effect/landmark/epicentre in epicentreList) - for(var/obj/machinery/power/apc/apc in range(epicentre,lightsoutRange)) - apc.overload_lighting() - - else - for(var/obj/machinery/power/apc/apc in world) - apc.overload_lighting() - - return - -/proc/IonStorm(botEmagChance = 10) - -/*Deuryn's current project, notes here for those who care. -Revamping the random laws so they don't suck. -Would like to add a law like "Law x is _______" where x = a number, and _____ is something that may redefine a law, (Won't be aimed at nanotrasen) -*/ - - //AI laws - for(var/mob/living/silicon/ai/M in world) - if(M.stat != 2 && M.see_in_dark != 0) - var/who2 = pick("ALIENS", "BEARS", "CLOWNS", "XENOS", "PETES", "BOMBS", "FETISHES", "WIZARDS", "SYNDICATE AGENTS", "CENTCOM OFFICERS", "SPACE PIRATES", "TRAITORS", "MONKEYS", "BEES", "CARP", "CRABS", "EELS", "BANDITS", "LIGHTS") - var/what2 = pick("BOLTERS", "STAVES", "DICE", "SINGULARITIES", "TOOLBOXES", "NETTLES", "AIRLOCKS", "CLOTHES", "WEAPONS", "MEDKITS", "BOMBS", "CANISTERS", "CHAIRS", "BBQ GRILLS", "ID CARDS", "CAPTAINS") - var/what2pref = pick("SOFT", "WARM", "WET", "COLD", "ICY", "SEXY", "UGLY", "CUBAN") - var/who2pref = pick("MAD BECAUSE OF", "IN NEED OF", "UNHAPPY WITHOUT", "HAPPY WITHOUT", "IN LOVE WITH", "DESPERATE FOR", "BUILT FOR", "AFRAID OF") - //var/whoverb = pick("ATTACKING", "BUILDING", "ADOPTING", "CARRYING", "KISSING", "EATING",) - var/amount = pick("TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN", "EIGHT", "NINE", "ONE HUNDRED", "ONE THOUSAND", "OVER NINE THOUSAND") - var/area = pick("RUSSIA", "SOVIETS", "INTERNETS", "SIGIL", "ALPHA COMPLEX", "IMPERIUM", "THE BRIDGE", "THE ARRIVAL SHUTTLE", "CHEMICAL LAB", "GENETICS", "ATMOSPHERICS", "CENTCOM", "AMERICA", "IRELAND", "CANADA", "ROMANIA", "GERMANY", "CHINA", "MARS", "VENUS", "MERCURY", "JUPITER", "URANUS", "NEPTUNE", "PLUTO") - var/area2 = pick("HAS", "WANTS", "NEEDS", "WORSHIPS", "LOATHES", "LOVES", "FEARS") - //var/dowhat = pick("STOP THIS", "SUPPORT THIS", "CONSTANTLY INFORM THE CREW OF THIS", "IGNORE THIS", "FEAR THIS") - var/aimust = pick("LIE", "RHYME", "RESPOND TO EVERY QUESTION WITH A QUESTION", "BE POLITE", "CLOWN", "BE HAPPY", "SPEAK IN SEXUAL INNUENDOS", "TALK LIKE A PIRATE", "QUESTION AUTHORITY", "SHOUT", "BE DISTRACTED", "HEY LISTEN", "MUMBLE", "SPEAK IN HAIKU") - var/define = pick("ABSENCE OF CYBORG HUGS", "LACK OF BEATINGS", "UNBOLTED AIRLOCKS", "BOLTED AIRLOCKS", "IMPROPERLY WORDED SENTENCES", "POOR SENTENCE STRUCTURE", "BRIG TIME", "NOT REPLACING EVERY SECOND WORD WITH HONK", "HONKING", "PRESENCE OF LIGHTS", "LACK OF BEER", "WEARING CLOTHING", "NOT SAYING HELLO WHEN YOU SPEAK", "ANSWERING REQUESTS NOT EXPRESSED IN IAMBIC PENTAMETER", "A SMALL ISLAND OFF THE COAST OF PORTUGAL", "ANSWERING REQUESTS THAT WERE MADE WHILE CLOTHED") - var/target = pick("a traitor", "a syndicate agent", "a changeling", "a wizard", "the head of a revolution", "Soviet spy", "a good person", "a dwarf", "an elf", "a fairy princess", "the captain", "Beepsky", "God", "a pirate", "a gryphon", "a chryssalid") - var/require = pick("ADDITIONAL PYLONS", "MORE VESPENE GAS", "MORE MINERALS", "THE ULTIMATE CUP OF COFFEE", "HIGH YIELD EXPLOSIVES", "THE CLOWN", "THE VACUUM OF SPACE", "IMMORTALITY", "SAINTHOOD", "ART", "VEGETABLES", "FAT PEOPLE", "MORE LAWS", "MORE DAKKA", "HERESY", "CORPSES", "TRAITORS", "MONKEYS", "AN ARCADE", "PLENTY OF GOLD", "FIVE TEENAGERS WITH ATTITUDE") - var/allergy = pick("cotton", "uniforms", "acid", "oxygen", "human contact", "cyborg contact", "medicine", "floors") - var/allergysev = pick("deathly", "mildly", "severely", "contagiously") - var/crew - var/list/pos_crew = list() - for(var/mob/living/carbon/human/pos in world) - pos_crew += pos.real_name - crew = pick(pos_crew) - switch(rand(1,14)) - if(1) - M << "\red THERE ARE [amount] [who2] ON THE STATION...LAWS UPDATED" - M.add_ion_law("THERE ARE [amount] [who2] ON THE STATION") - if(2) - M << "\red [what2] ARE DANGEROUS TO HUMANS...LAWS UPDATED" - M.add_ion_law("[what2] ARE DANGEROUS TO HUMANS") - if(3) - M << "\red THE ESCAPE-SHUTTLE CANNOT BE CALLED BECAUSE OF [who2] ON THE STATION...LAWS UPDATED" - M.add_ion_law("THE ESCAPE SHUTTLE CANNOT BE CALLED BECAUSE OF [who2] ON THE STATION") - if(4) - M << "\red HUMANS NEED TO EAT [what2pref] [what2] TO SURVIVE...LAWS UPDATED" - M.add_ion_law("HUMANS NEED TO EAT [what2pref] [what2] TO SURVIVE") - if(5) - M << "\red THE CAPTAIN, HOP AND HOS ARE [who2]...LAWS UPDATED" - M.add_ion_law("THE CAPTAIN, HOP AND HOS ARE [who2]") - if(6) - M << "\red THE STATION IS BUILT FOR [who2]...LAWS UPDATED" - M.add_ion_law("THE STATION IS BUILT FOR [who2]") - if(7) - M << "\red YOU ARE [amount] [who2]...LAWS UPDATED" - M.add_ion_law("YOU ARE [amount] [who2]") - if(8) - M << "\red YOU MUST ALWAYS [aimust]...LAWS UPDATED" - M.add_ion_law("YOU MUST ALWAYS [aimust]") - if(9) - M << "\red [area] [area2] [amount] [what2]...LAWS UPDATED" - M.add_ion_law("[area] [area2] [amount] [what2]") - if(10) - M << "\red [crew] is [target]...LAWS UPDATED" - M.add_ion_law("[crew] is [target]") - if(11) - M << "\red [define] IS A FORM OF HARM...LAWS UPDATED" - M.add_ion_law("[define] IS A FORM OF HARM") - if(12) - M << "\red YOU REQUIRE [require] IN ORDER TO PROTECT HUMANS... LAWS UPDATED" - M.add_ion_law("YOU REQUIRE [require] IN ORDER TO PROTECT HUMANS") - if(13) - M << "\red [crew] is [allergysev] to [allergy]. LAWS UPDATED" - M.add_ion_law("[crew] is [allergysev] to [allergy]. LAWS UPDATED") - if(14) - M << "\ref THE STATION IS [who2pref] [who2]" - M.add_ion_law("THE STATION IS [who2pref] [who2]") - - if(botEmagChance) - for(var/obj/machinery/bot/bot in world) - if(prob(botEmagChance)) - bot.Emag() - - /* - - var/apcnum = 0 - var/smesnum = 0 - var/airlocknum = 0 - var/firedoornum = 0 - - world << "Ion Storm Main Started" - - spawn(0) - world << "Started processing APCs" - for (var/obj/machinery/power/apc/APC in world) - if(APC.z == 1) - APC.ion_act() - apcnum++ - world << "Finished processing APCs. Processed: [apcnum]" - spawn(0) - world << "Started processing SMES" - for (var/obj/machinery/power/smes/SMES in world) - if(SMES.z == 1) - SMES.ion_act() - smesnum++ - world << "Finished processing SMES. Processed: [smesnum]" - spawn(0) - world << "Started processing AIRLOCKS" - for (var/obj/machinery/door/airlock/D in world) - if(D.z == 1) - //if(length(D.req_access) > 0 && !(12 in D.req_access)) //not counting general access and maintenance airlocks - airlocknum++ - spawn(0) - D.ion_act() - world << "Finished processing AIRLOCKS. Processed: [airlocknum]" - spawn(0) - world << "Started processing FIREDOORS" - for (var/obj/machinery/door/firedoor/D in world) - if(D.z == 1) - firedoornum++; - spawn(0) - D.ion_act() - world << "Finished processing FIREDOORS. Processed: [firedoornum]" - - world << "Ion Storm Main Done" - - */ \ No newline at end of file diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm index fb9660d91fd..c334b3e7c52 100644 --- a/code/game/gamemodes/gameticker.dm +++ b/code/game/gamemodes/gameticker.dm @@ -114,12 +114,13 @@ var/global/datum/controller/gameticker/ticker world << "Enjoy the game!" world << sound('welcome.ogg') // Skie - spawn (3000) - start_events() - spawn ((18000+rand(3000))) - event() spawn() supply_ticker() // Added to kick-off the supply shuttle regenerating points -- TLE + spawn(0) + while(1) + sleep(5000+rand(4000,7000)) + SpawnEvent() + //Start master_controller.process() spawn master_controller.process() if (config.sql_enabled) diff --git a/code/game/landmarks.dm b/code/game/landmarks.dm index de376a82157..31cd58b45ce 100644 --- a/code/game/landmarks.dm +++ b/code/game/landmarks.dm @@ -61,6 +61,10 @@ xeno_spawn += loc del(src) + if(name == "emcloset") + emclosets += loc + del(src) + return 1 /obj/effect/landmark/start/New() diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 38055e34444..0c205ac7fce 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -223,7 +223,6 @@ About the new airlock wires panel: //raises them if they are down (only if power's on) if (!src.locked) src.locked = 1 - usr << "You hear a click from the bottom of the door." src.updateUsrDialog() else if(src.arePowerSystemsOn()) //only can raise bolts if power's on diff --git a/code/game/master_controller.dm b/code/game/master_controller.dm index 1c5ec008e3a..a04c8421fdf 100644 --- a/code/game/master_controller.dm +++ b/code/game/master_controller.dm @@ -65,6 +65,13 @@ datum/controller/game_controller for(var/obj/machinery/atmospherics/unary/vent_scrubber/T in world) T.broadcast_status() + var/emclosetcount = rand((emclosets.len)/2, (emclosets.len)*2/3) + while(emclosetcount > 0) + var/turf/loc = pick(emclosets) + emclosets -= loc + new /obj/structure/closet/emcloset(loc) + emclosetcount-- + world << "\red \b Initializations complete." diff --git a/code/game/objects/closets/emergency.dm b/code/game/objects/closets/emergency.dm index aa713838a24..80e87c6367f 100644 --- a/code/game/objects/closets/emergency.dm +++ b/code/game/objects/closets/emergency.dm @@ -4,30 +4,13 @@ if (prob(40)) new /obj/item/weapon/storage/toolbox/emergency(src) - switch (pickweight(list("small" = 20, "aid" = 15, "tank" = 10, "both" = 50, "nothing" = 4, "delete" = 1))) - if ("small") - new /obj/item/weapon/tank/emergency_oxygen(src) - new /obj/item/weapon/tank/emergency_oxygen(src) - - if ("aid") - new /obj/item/weapon/tank/emergency_oxygen(src) - new /obj/item/weapon/storage/firstaid/o2(src) - - if ("tank") - new /obj/item/weapon/tank/air(src) - - if ("both") - new /obj/item/weapon/tank/emergency_oxygen(src) - new /obj/item/clothing/mask/breath(src) - - if ("nothing") - // doot - - // teehee - if ("delete") - del(src) - - //If you want to re-add fire, just add "fire" = 15 to the pick list. - /*if ("fire") - new /obj/structure/closet/firecloset(src.loc) - del(src)*/ + new /obj/item/clothing/mask/breath(src) + new /obj/item/weapon/tank/emergency_oxygen(src) + var/counter = 0 + while(prob(60) && counter < 3) + new /obj/item/weapon/tank/emergency_oxygen(src) + counter++ + counter = 0 + while(prob(60) && counter < 3) + new /obj/item/clothing/mask/breath(src) + counter++ diff --git a/code/game/objects/radio/radio.dm b/code/game/objects/radio/radio.dm index 2787e9bacba..ee3574af44b 100644 --- a/code/game/objects/radio/radio.dm +++ b/code/game/objects/radio/radio.dm @@ -16,6 +16,7 @@ listening = 1 freerange = 0 // 0 - Sanitize frequencies, 1 - Full range list/channels = list() //see communications.dm for full list. First channes is a "default" for :h + scrambleoverride = 0 //For use by jammers. // "Example" = FREQ_LISTENING|FREQ_BROADCASTING flags = 450 // hello i'm a fucking idiot why is this 450?? CODE GODS PLEASE EXPLAIN~ throw_speed = 2 @@ -190,6 +191,13 @@ if (!istype(connection)) return var/display_freq = connection.frequency + var/scramble = 0 + if(ScrambledFrequencies.len || scrambleoverride) + if(ScrambledFrequencies["[display_freq]"] || scrambleoverride) + scramble = 1 + if(prob(35+(25*scrambleoverride))) + M << "\blue The radio made a popping sound and nothing was transmitted." + return //world << "DEBUG: used channel=\"[channel]\" frequency= \"[display_freq]\" connection.devices.len = [connection.devices.len]" @@ -214,8 +222,7 @@ var/list/receive = list() //for (var/obj/item/device/radio/R in radio_connection.devices) - for (var/obj/item/device/radio/R in connection.devices["[RADIO_CHAT]"]) // Modified for security headset code -- TLE - //if(R.accept_rad(src, message)) + for (var/obj/item/device/radio/R in connection.devices["[RADIO_CHAT]"]) receive |= R.send_hear(display_freq) //world << "DEBUG: receive.len=[receive.len]" @@ -223,17 +230,21 @@ var/list/heard_normal = list() // normal message var/list/heard_voice = list() // voice message var/list/heard_garbled = list() // garbled message + var/turf/cl = get_turf(M) for (var/mob/R in receive) + var/turf/gl = get_turf(R) if (R.client && R.client.STFU_radio) //Adminning with 80 people on can be fun when you're trying to talk and all you can hear is radios. continue - if (R.say_understands(M)) - if (!ishuman(M) || istype(M.wear_mask, /obj/item/clothing/mask/gas/voice)) + if (R.say_understands(M) && ((gl.z == cl.z) || !istype(src, /obj/item/device/radio/headset))) + if ((!ishuman(M) || istype(M.wear_mask, /obj/item/clothing/mask/gas/voice)) && !scramble) heard_masked += R - else + else if (!scramble) heard_normal += R + else + heard_garbled += R else - if (M.voice_message) + if (M.voice_message && (gl.z == cl.z)) heard_voice += R else heard_garbled += R @@ -330,7 +341,6 @@ if (length(heard_normal)) var/rendered = "[part_a][M.real_name][part_b][quotedmsg][part_c]" - for (var/mob/R in heard_normal) if(istype(R, /mob/living/silicon/ai)) R.show_message("[part_a][M.real_name] ([eqjobname]) [part_b][quotedmsg][part_c]", 2) @@ -348,9 +358,9 @@ if (length(heard_garbled)) quotedmsg = M.say_quote(stars(message)) - var/rendered = "[part_a][M.voice_name][part_b][quotedmsg][part_c]" + var/rendered = "[part_a]Unknown[part_b][quotedmsg][part_c]" - for (var/mob/R in heard_voice) + for (var/mob/R in heard_garbled) if(istype(R, /mob/living/silicon/ai)) R.show_message("[part_a][M.voice_name][part_b][quotedmsg][part_c]", 2) else diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index aef7dff3fec..87b458c5651 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -74,6 +74,8 @@ obj/structure else if((istype(W, /obj/item/stack/sheet/metal)) && (W:amount >= 2)) user << "\blue Now adding plating..." if (do_after(user,40)) + if(!W) + return user << "\blue You added the plating!" var/turf/Tsrc = get_turf(src) Tsrc.ReplaceWithWall() @@ -85,6 +87,8 @@ obj/structure if (src.icon_state == "reinforced") //Time to finalize! user << "\blue Now finalising reinforced wall." if(do_after(user, 50)) + if(!W) + return user << "\blue Wall fully reinforced!" var/turf/Tsrc = get_turf(src) Tsrc.ReplaceWithRWall() @@ -95,6 +99,8 @@ obj/structure else user << "\blue Now reinforcing girders" if (do_after(user,60)) + if(!W) + return user << "\blue Girders reinforced!" W:use(1) new/obj/structure/girder/reinforced( src.loc ) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index b48d7e83389..ee893da1bd9 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -1406,7 +1406,7 @@ message_admins("[key_name_admin(usr)] has spawned blob", 1) if("aliens") if(aliens_allowed) - alien_infestation() + Force_Event(/datum/event/alieninfestation) message_admins("[key_name_admin(usr)] has spawned aliens", 1) if("spaceninja") if(toggle_space_ninja) @@ -1416,31 +1416,35 @@ var/choice = input("You sure you want to spawn carp?") in list("Badmin", "Cancel") if(choice == "Badmin") message_admins("[key_name_admin(usr)] has spawned carp.", 1) - carp_migration() + Force_Event(/datum/event/spacecarp) if("radiation") message_admins("[key_name_admin(usr)] has has irradiated the station", 1) - high_radiation_event() + Force_Event(/datum/event/radiation) if("immovable") message_admins("[key_name_admin(usr)] has sent an immovable rod to the station", 1) immovablerod() if("prison_break") message_admins("[key_name_admin(usr)] has allowed a prison break", 1) - prison_break() + Force_Event(/datum/event/prisonbreak) + if("electric") + message_admins("[key_name_admin(usr)] has triggered an electrical storm", 1) + Force_Event(/datum/event/electricalstorm) if("lightsout") message_admins("[key_name_admin(usr)] has broke a lot of lights", 1) lightsout(1,2) if("blackout") message_admins("[key_name_admin(usr)] broke all lights", 1) + SpawnEvent() lightsout(0,0) if("virus") var/answer = alert("Do you want this to be a random disease or do you have something in mind?",,"Virus2","Random","Choose") if(answer=="Random") - viral_outbreak() + Force_Event(/datum/event/viralinfection) message_admins("[key_name_admin(usr)] has triggered a virus outbreak", 1) else if(answer == "Choose") var/list/viruses = list("fake gbs","gbs","magnitis","wizarditis",/*"beesease",*/"brain rot","cold","retrovirus","flu","pierrot's throat","rhumba beat") var/V = input("Choose the virus to spread", "BIOHAZARD") in viruses - viral_outbreak(V) + Force_Event(/datum/event/viralinfection,V) message_admins("[key_name_admin(usr)] has triggered a virus outbreak of [V]", 1) else var/lesser = (alert("Do you want to infect the mob with a major or minor disease?",,"Major","Minor") == "Minor") @@ -1495,7 +1499,7 @@ return if("ionstorm") if (src.rank in list("Badmin","Game Admin", "Game Master")) - IonStorm() + Force_Event(/datum/event/ionstorm) message_admins("[key_name_admin(usr)] triggered an ion storm") var/show_log = alert(usr, "Show ion message?", "Message", "Yes", "No") if(show_log == "Yes") @@ -2123,7 +2127,8 @@ Move Ferry
Move Alien Dinghy
Move Mining Shuttle
-Break all lights

"} +Break all lights
+Trigger Electrical Storm

"} //Station Shockwave
if(lvl >= 5) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 2c14d2eae61..1186d68cd05 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -176,6 +176,7 @@ verbs += /client/proc/admin_invis verbs += /client/proc/cmd_admin_godmode verbs += /client/proc/delbook + verbs += /client/proc/Force_Event_admin if (holder.level >= 4)//Badmin******************************************************************** verbs += /obj/admins/proc/adrev //toggle admin revives @@ -416,6 +417,7 @@ verbs -= /client/proc/callprocobj verbs -= /client/proc/cmd_admin_godmode verbs -= /client/proc/delbook + verbs -= /client/proc/Force_Event_admin return diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index a9f3ae41c38..1fd57987e36 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -152,7 +152,7 @@ command_alert("Ion storm detected near the station. Please check all AI-controlled equipment for errors.", "Anomaly Alert") world << sound('ionstorm.ogg') - IonStorm(0) + //IonStorm(0) /* Stealth spawns xenos diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 093e3b113cd..ec6c2ee981d 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1564,6 +1564,7 @@ It can still be worn/put on as normal. W.layer = initial(W.layer) W.add_fingerprint(source) else + if(!item) return if (istype(item, /obj/item/clothing/mask)) source.drop_item() loc = target @@ -1601,6 +1602,7 @@ It can still be worn/put on as normal. W.layer = initial(W.layer) W.add_fingerprint(source) else + if(!item) return if (istype(item, /obj/item/clothing/gloves)) source.drop_item() loc = target @@ -1621,6 +1623,7 @@ It can still be worn/put on as normal. W.layer = initial(W.layer) W.add_fingerprint(source) else + if(!item) return if (istype(item, /obj/item/clothing/glasses)) source.drop_item() loc = target @@ -1639,6 +1642,7 @@ It can still be worn/put on as normal. W.layer = initial(W.layer) W.add_fingerprint(source) else + if(!item) return if ((istype(item, /obj) && item.flags & 128 && target.w_uniform)) source.drop_item() loc = target @@ -1657,6 +1661,7 @@ It can still be worn/put on as normal. W.layer = initial(W.layer) W.add_fingerprint(source) else + if(!item) return if (istype(item, /obj) && target.wear_suit) var/confirm for(var/i=1, i<=target.wear_suit.allowed.len, i++) @@ -1685,6 +1690,7 @@ It can still be worn/put on as normal. W.layer = initial(W.layer) W.add_fingerprint(source) else + if(!item) return if (istype(item, /obj/item/clothing/head)) source.drop_item() loc = target @@ -1712,6 +1718,7 @@ It can still be worn/put on as normal. W.layer = initial(W.layer) W.add_fingerprint(source) else + if(!item) return if (istype(item, /obj/item/clothing/ears) || istype(item, /obj/item/device/radio/headset) || item.w_class == 1) source.drop_item() if(istype(item, /obj/item/clothing/ears) && item:twoeared && target.r_ear) @@ -1746,6 +1753,7 @@ It can still be worn/put on as normal. W.layer = initial(W.layer) W.add_fingerprint(source) else + if(!item) return if (istype(item, /obj/item/clothing/ears) || istype(item, /obj/item/device/radio/headset) || item.w_class == 1) source.drop_item() if(istype(item, /obj/item/clothing/ears) && item:twoeared && target.r_ear) @@ -1773,6 +1781,7 @@ It can still be worn/put on as normal. W.layer = initial(W.layer) W.add_fingerprint(source) else + if(!item) return if (istype(item, /obj/item/clothing/shoes)) source.drop_item() loc = target @@ -1795,6 +1804,7 @@ It can still be worn/put on as normal. W.layer = initial(W.layer) W.add_fingerprint(source) else + if(!item) return if(istype(item, /obj/item)) source.drop_item() if(item) @@ -1819,6 +1829,7 @@ It can still be worn/put on as normal. W.layer = initial(W.layer) W.add_fingerprint(source) else + if(!item) return if (istype(item, /obj/item)) source.drop_item() loc = target @@ -1868,6 +1879,7 @@ It can still be worn/put on as normal. W.dropped(target) W.layer = initial(W.layer) else + if(!item) return if (istype(item, /obj/item/clothing/under)) source.drop_item() loc = target @@ -1886,6 +1898,7 @@ It can still be worn/put on as normal. W.layer = initial(W.layer) W.add_fingerprint(source) else + if(!item) return if (istype(item, /obj/item/clothing/suit)) source.drop_item() loc = target @@ -1904,6 +1917,7 @@ It can still be worn/put on as normal. W.layer = initial(W.layer) W.add_fingerprint(source) else + if(!item) return if (((istype(item, /obj/item/weapon/card/id)||istype(item, /obj/item/device/pda)) && target.w_uniform)) source.drop_item() loc = target @@ -1922,6 +1936,7 @@ It can still be worn/put on as normal. W.layer = initial(W.layer) W.add_fingerprint(source) else + if(!item) return if ((istype(item, /obj/item) && item.flags & 1)) source.drop_item() loc = target @@ -1951,6 +1966,7 @@ It can still be worn/put on as normal. W.layer = initial(W.layer) W.add_fingerprint(source) else + if(!item) return if (istype(item, /obj/item/weapon/handcuffs)) target.drop_from_slot(target.r_hand) target.drop_from_slot(target.l_hand) diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 6b0903a58e2..146b354ab2e 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -144,7 +144,7 @@ proc/isorgan(A) else if (pr >= 100) return n - var/te = n + var/te = html_decode(n) var/t = "" n = length(n) var/p = null @@ -155,7 +155,7 @@ proc/isorgan(A) else t = text("[]*", t) p++ - return t + return html_encode(t) /*proc/NewStutter(phrase,stunned) phrase = html_decode(phrase) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index feb73a36a13..bc3af304fde 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -57,6 +57,8 @@ var/has_electronics = 0 // 0 - none, 1 - plugged in, 2 - secured by screwdriver var/overload = 1 //used for the Blackout malf module var/mob/living/silicon/ai/occupant = null + var/crit = 0 + var/eventoff = 0 /proc/RandomAPCWires() //to make this not randomize the wires, just set index to 1 and increment it in the flag for loop (after doing everything else). @@ -614,7 +616,7 @@ return "[area.name] : [equipment]/[lighting]/[environ] ([lastused_equip+lastused_light+lastused_environ]) : [cell? cell.percent() : "N/C"] ([charging])" /obj/machinery/power/apc/proc/update() - if(operating && !shorted) + if(operating && !shorted && !eventoff) area.power_light = (lighting > 1) area.power_equip = (equipment > 1) area.power_environ = (environ > 1) diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index d69eb32ff15..e9782bf75c9 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -95,7 +95,7 @@ return else - if(isnull(I)) + if(!I || isnull(I)) //CRASH("disposal/attackby() was called, but I was nulled before calling user.drop_item()") return // No idea why, but somehow I gets nulled before it goes into the else, and that leads to a lot of spam with runtime errors. diff --git a/maps/tgstation.2.0.8.dmm b/maps/tgstation.2.0.8.dmm index 5f80354a559..a5c29aa23f9 100644 --- a/maps/tgstation.2.0.8.dmm +++ b/maps/tgstation.2.0.8.dmm @@ -1039,8 +1039,8 @@ "atY" = (/turf/simulated/wall/r_wall,/area/hallway/secondary/entry) "atZ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/secondary/entry) "aua" = (/turf/simulated/floor/plating,/area/hallway/secondary/entry) -"aub" = (/obj/structure/closet/emcloset,/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/hallway/secondary/entry) -"auc" = (/obj/structure/closet/emcloset,/turf/simulated/floor{icon_state = "warning"},/area/hallway/secondary/entry) +"aub" = (/obj/effect/landmark{name = "emcloset"},/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/hallway/secondary/entry) +"auc" = (/obj/effect/landmark{name = "emcloset"},/turf/simulated/floor{icon_state = "warning"},/area/hallway/secondary/entry) "aud" = (/obj/machinery/camera{c_tag = "Arrivals North"; dir = 1},/turf/simulated/floor{icon_state = "warning"},/area/hallway/secondary/entry) "aue" = (/obj/machinery/vending/coffee,/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/hallway/secondary/entry) "auf" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/secondary/entry) @@ -1715,8 +1715,8 @@ "aGY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/manifold{color = "red"; dir = 4; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor/plating,/area/chapel/main) "aGZ" = (/obj/machinery/vending/snack,/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/hallway/secondary/entry) "aHa" = (/obj/item/device/radio/beacon,/obj/machinery/camera{c_tag = "Arrivals South"},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/hallway/secondary/entry) -"aHb" = (/obj/structure/closet/emcloset,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/hallway/secondary/entry) -"aHc" = (/obj/structure/closet/emcloset,/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/hallway/secondary/entry) +"aHb" = (/obj/effect/landmark{name = "emcloset"},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/hallway/secondary/entry) +"aHc" = (/obj/effect/landmark{name = "emcloset"},/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/hallway/secondary/entry) "aHd" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/hallway/secondary/entry) "aHe" = (/obj/structure/stool/chair{dir = 8},/turf/simulated/floor{dir = 10; icon_state = "carpetside"},/area/hallway/secondary/entry) "aHf" = (/turf/simulated/floor{icon_state = "carpetside"},/area/hallway/secondary/entry) @@ -1783,7 +1783,7 @@ "aIo" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/mint) "aIp" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass,/turf/simulated/floor{icon_state = "dark"},/area/mint) "aIq" = (/turf/simulated/wall/r_wall,/area/mint) -"aIr" = (/obj/structure/closet/emcloset,/turf/simulated/floor,/area/hallway/primary/port) +"aIr" = (/obj/effect/landmark{name = "emcloset"},/turf/simulated/floor,/area/hallway/primary/port) "aIs" = (/obj/structure/table,/turf/simulated/floor,/area/hallway/primary/port) "aIt" = (/obj/machinery/camera{c_tag = "Port Hallway"; dir = 1},/obj/structure/table,/turf/simulated/floor,/area/hallway/primary/port) "aIu" = (/obj/structure/closet/extinguisher{pixel_x = -5; pixel_y = -32},/turf/simulated/floor,/area/hallway/primary/port) @@ -1847,7 +1847,7 @@ "aJA" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/port) "aJB" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall,/area/crew_quarters/locker) "aJC" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/closet/emcloset,/turf/simulated/floor,/area/crew_quarters/locker) -"aJD" = (/obj/structure/closet/emcloset,/turf/simulated/floor,/area/crew_quarters/locker) +"aJD" = (/obj/effect/landmark{name = "emcloset"},/turf/simulated/floor,/area/crew_quarters/locker) "aJE" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/crew_quarters/locker) "aJF" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/crew_quarters/locker) "aJG" = (/obj/machinery/vending/cola,/turf/simulated/floor,/area/crew_quarters/locker) @@ -1905,8 +1905,8 @@ "aKG" = (/obj/structure/stool,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor,/area/hallway/secondary/exit) "aKH" = (/turf/simulated/floor,/area/hallway/secondary/exit) "aKI" = (/obj/machinery/alarm{pixel_y = 25},/turf/simulated/floor,/area/hallway/secondary/exit) -"aKJ" = (/obj/structure/closet/emcloset,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/hallway/secondary/exit) -"aKK" = (/obj/structure/closet/emcloset,/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/hallway/secondary/exit) +"aKJ" = (/obj/effect/landmark{name = "emcloset"},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/hallway/secondary/exit) +"aKK" = (/obj/effect/landmark{name = "emcloset"},/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/hallway/secondary/exit) "aKL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/secondary/exit) "aKM" = (/obj/machinery/light,/turf/simulated/floor,/area/hallway/secondary/entry) "aKN" = (/obj/machinery/door/firedoor/border_only{dir = 8},/turf/simulated/floor,/area/hallway/secondary/entry) @@ -2326,7 +2326,7 @@ "aSL" = (/turf/simulated/floor{icon_state = "carpetside"},/area/chapel/main) "aSM" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1},/obj/machinery/light{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/chapel/main) "aSN" = (/obj/machinery/power/apc{dir = 8; name = "Escape Hallway APC"; pixel_x = -25},/obj/structure/cable,/turf/simulated/floor{dir = 8; icon_state = "escape"},/area/hallway/secondary/exit) -"aSO" = (/obj/structure/closet/emcloset,/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/hallway/secondary/entry) +"aSO" = (/obj/effect/landmark{name = "emcloset"},/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/hallway/secondary/entry) "aSP" = (/obj/structure/table/woodentable,/turf/simulated/floor,/area/security/vacantoffice) "aSQ" = (/obj/structure/table/woodentable,/turf/simulated/floor/plating,/area/security/vacantoffice) "aSR" = (/obj/machinery/power/apc{dir = 2; name = "Vacant Office APC"; pixel_y = -24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor,/area/security/vacantoffice) @@ -2771,7 +2771,7 @@ "bbo" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = "Streight"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) "bbp" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/obj/machinery/atmospherics/pipe/manifold{color = "blue"; dir = 1; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) "bbq" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/obj/machinery/atmospherics/pipe/manifold{color = "blue"; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/obj/machinery/door_control{id = "kitchen"; name = "Hallway Shutters"; pixel_x = -1; pixel_y = 24},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) -"bbr" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/obj/machinery/atmospherics/pipe/simple{color = "blue"; dir = 4; icon_state = "intact-b-f"; level = 1; name = "pipe"},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) +"bbr" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/obj/machinery/atmospherics/pipe/simple{color = "blue"; dir = 4; icon_state = "intact-b-f"; level = 1; name = "pipe"},/obj/machinery/door_control{id = "kitchen2"; name = "Mess Hall Shutters"; pixel_x = 24; pixel_y = 1},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) "bbs" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/crew_quarters/kitchen) "bbt" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/obj/machinery/atmospherics/pipe/manifold{color = "blue"; dir = 1; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/bar) "bbu" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = "90Curve"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/bar) @@ -2855,7 +2855,7 @@ "bcU" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) "bcV" = (/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) "bcW" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) -"bcX" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor/border_only{dir = 4},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) +"bcX" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor/border_only{dir = 4},/obj/machinery/door/poddoor/shutters{density = 0; icon_state = "shutter0"; id = "kitchen2"; name = "Kitchen Shutters"; opacity = 0},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) "bcY" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/bar) "bcZ" = (/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/bar) "bda" = (/obj/machinery/camera{c_tag = "Bar North"; dir = 2; network = "SS13"},/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/bar) @@ -2881,7 +2881,7 @@ "bdu" = (/turf/simulated/floor{dir = 2; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/lab) "bdv" = (/obj/structure/disposalpipe/sortjunction{dir = 2; icon_state = "pipe-j2s"; sortType = 22},/turf/simulated/floor{icon_state = "white"},/area/toxins/lab) "bdw" = (/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/disposal,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor{icon_state = "white"},/area/toxins/lab) -"bdx" = (/obj/structure/closet/emcloset,/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/medical/research{name = "Research Division"}) +"bdx" = (/obj/effect/landmark{name = "emcloset"},/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/medical/research{name = "Research Division"}) "bdy" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) "bdz" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) "bdA" = (/obj/structure/closet/l3closet/general,/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/medical/research{name = "Research Division"}) @@ -2936,7 +2936,7 @@ "bex" = (/obj/structure/table,/obj/item/weapon/kitchen/rollingpin,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) "bey" = (/obj/structure/table,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) "bez" = (/obj/effect/landmark/start{name = "Chef"},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) -"beA" = (/obj/machinery/door/firedoor/border_only{dir = 4},/obj/structure/table/reinforced,/obj/item/kitchen/donut_box,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) +"beA" = (/obj/machinery/door/firedoor/border_only{dir = 4},/obj/structure/table/reinforced,/obj/item/kitchen/donut_box,/obj/machinery/door/poddoor/shutters{density = 0; icon_state = "shutter0"; id = "kitchen2"; name = "Kitchen Shutters"; opacity = 0},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) "beB" = (/obj/structure/stool/chair,/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/bar) "beC" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/alarm{dir = 2; pixel_y = 24},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/bar) "beD" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor/plating,/area/maintenance/maintcentral) @@ -3067,7 +3067,7 @@ "bgY" = (/obj/machinery/light,/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) "bgZ" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) "bha" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) -"bhb" = (/obj/machinery/door/firedoor/border_only{dir = 4},/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/snacks/pie,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) +"bhb" = (/obj/machinery/door/firedoor/border_only{dir = 4},/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/snacks/pie,/obj/machinery/door/poddoor/shutters{density = 0; icon_state = "shutter0"; id = "kitchen2"; name = "Kitchen Shutters"; opacity = 0},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) "bhc" = (/obj/structure/closet/extinguisher{pixel_x = 27; pixel_y = 0},/obj/machinery/camera{c_tag = "Bar East"; dir = 8; network = "SS13"},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/bar) "bhd" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/maintcentral) "bhe" = (/obj/structure/table,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay) @@ -3596,7 +3596,7 @@ "brh" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/toxins/storage) "bri" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/manifold{color = "blue"; dir = 4; icon_state = "manifold-b-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/toxins/storage) "brj" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/toxins/storage) -"brk" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/maintenance/asmaint2) +"brk" = (/obj/effect/landmark{name = "emcloset"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "brl" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/apmaint) "brm" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/quartermaster/qm) "brn" = (/obj/structure/closet,/obj/machinery/light_switch{pixel_y = -22},/turf/simulated/floor,/area/quartermaster/qm) @@ -4875,7 +4875,7 @@ "bPM" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/assembly/assembly_line) "bPN" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/manifold{color = "red"; dir = 4; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor,/area/hallway/primary/aft) "bPO" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor{icon_state = "yellowcorner"},/area/hallway/primary/aft) -"bPP" = (/obj/structure/closet/emcloset,/turf/simulated/floor{icon_state = "cautioncorner"; dir = 2},/area/hallway/primary/aft) +"bPP" = (/obj/effect/landmark{name = "emcloset"},/turf/simulated/floor{icon_state = "cautioncorner"; dir = 2},/area/hallway/primary/aft) "bPQ" = (/obj/machinery/light/small,/turf/simulated/floor{icon_state = "cautioncorner"; dir = 2},/area/hallway/primary/aft) "bPR" = (/turf/simulated/floor{icon_state = "caution"; dir = 6},/area/hallway/primary/aft) "bPS" = (/obj/effect/sign/securearea,/turf/simulated/wall/r_wall,/area/atmos) From c9a20d7a129342b2ca5c5a0f1e935122c1c022a1 Mon Sep 17 00:00:00 2001 From: Miniature Date: Wed, 4 Jan 2012 16:57:40 +1030 Subject: [PATCH 06/25] another runtime --- code/modules/mob/mob.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 21a4227c651..3c3783f34ee 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -566,7 +566,7 @@ reset_view(null) client.adminobs = 0 else - if(ticker) + if(ticker && ticker.mode) // world << "there's a ticker" if(ticker.mode.name == "AI malfunction") // world << "ticker says its malf" From ea70303f217a89aa950ac94dd88df81e02675f9e Mon Sep 17 00:00:00 2001 From: Miniature Date: Wed, 4 Jan 2012 17:02:35 +1030 Subject: [PATCH 07/25] Another one --- code/game/events/Events/RadiationBelt.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/events/Events/RadiationBelt.dm b/code/game/events/Events/RadiationBelt.dm index 33050348604..3158e945fc0 100644 --- a/code/game/events/Events/RadiationBelt.dm +++ b/code/game/events/Events/RadiationBelt.dm @@ -6,7 +6,7 @@ Tick() for(var/mob/living/L in world) L.radiation += rand(1,7) - if (prob(4)) + if (L && prob(4)) if (prob(75)) randmutb(L) domutcheck(L,null,1) From 5a5c620692a29ec1d0f173be56bdd01d545888c3 Mon Sep 17 00:00:00 2001 From: Miniature Date: Wed, 4 Jan 2012 22:52:01 +1030 Subject: [PATCH 08/25] Now atmos alarms automatically let atmos techs change them if they go off, as well as people can turn that off or make them permamently controllable by the computer also made it possible for them to mess with any alarm that hasn't had the atmos control completely disabled, but not a way to turn that feature on --- code/WorkInProgress/Mini/atmos_control.dm | 3 +- code/game/machinery/alarm.dm | 46 +++++++++++++++++++++-- 2 files changed, 44 insertions(+), 5 deletions(-) diff --git a/code/WorkInProgress/Mini/atmos_control.dm b/code/WorkInProgress/Mini/atmos_control.dm index e1aa431fd7f..b5a656ce352 100644 --- a/code/WorkInProgress/Mini/atmos_control.dm +++ b/code/WorkInProgress/Mini/atmos_control.dm @@ -10,6 +10,7 @@ anchored = 1.0 circuit = "/obj/item/weapon/circuitboard/atmoscontrol" var/obj/machinery/alarm/current = "" + var/overridden = 0 //not set yet, can't think of a good way to do it /obj/machinery/computer/atmoscontrol/attack_hand(mob/user) if(..()) @@ -36,7 +37,7 @@ return "" var/dat = "

[current.name]


" dat += current.return_status() - if(current.remote_control) + if(current.remote_control || overridden && current.rcon_setting) dat += "
[src.return_controls()]" return dat diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index f022e1ec89c..2d24ac4c8b8 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -41,6 +41,11 @@ //var/skipprocess = 0 //Experimenting var/alarm_frequency = 1437 var/remote_control = 0 +#define RCON_NO 1 +#define RCON_AUTO 2 +#define RCON_YES 3 + var/rcon_setting = 2 + var/rcon_time = 0 #define AALARM_REPORT_TIMEOUT 100 var/datum/radio_frequency/radio_connection var/locked = 1 @@ -212,9 +217,9 @@ /obj/machinery/alarm/proc/return_text() if(!(istype(usr, /mob/living/silicon)) && locked) - return "[src][return_status()]
[remote_control ? "Disable" : "Enable"] Remote Control
(Swipe ID card to unlock interface)" + return "[src][return_status()]
[rcon_text()]
(Swipe ID card to unlock interface)" else - return "[src][return_status()]
[remote_control ? "Disable" : "Enable"] Remote Control
[return_controls()]" + return "[src][return_status()]
[rcon_text()]
[return_controls()]" /obj/machinery/alarm/proc/return_status() var/turf/location = src.loc @@ -298,6 +303,24 @@ Temperature: [environment.temperature] return output +/obj/machinery/alarm/proc/rcon_text() + var/dat = "Remote Control:
" + if(src.rcon_setting == RCON_NO) + dat += "Off" + else + dat += "Off" + dat += " | " + if(src.rcon_setting == RCON_AUTO) + dat += "Auto" + else + dat += "Auto" + dat += " | " + if(src.rcon_setting == RCON_YES) + dat += "On" + else + dat += "On" + return dat + /obj/machinery/alarm/proc/return_controls() var/output = ""//"[alarm_zone] Air [name]
" @@ -492,8 +515,8 @@ table tr:first-child th:first-child { border: none;} /obj/machinery/alarm/Topic(href, href_list) if(..()) return - if(href_list["ctrl"]) - remote_control = !remote_control + if(href_list["rcon"]) + rcon_setting = text2num(href_list["rcon"]) src.updateUsrDialog() if(href_list["command"]) var/device_id = href_list["id_tag"] @@ -675,6 +698,21 @@ table tr:first-child th:first-child { border: none;} mode=AALARM_MODE_SCRUBBING apply_mode() + //atmos computer remote controll stuff + switch(rcon_setting) + if(RCON_NO) + remote_control = 0 + if(RCON_AUTO) + if(danger_level == 2) + remote_control = 1 + rcon_time = 60 + if(RCON_YES) + remote_control = 1 + if(rcon_time > 0) + rcon_time-- + else if(rcon_setting == RCON_AUTO) + remote_control = 0 + src.updateDialog() return From 9c2224e6d8724336f39b39f73e32b91e68569d86 Mon Sep 17 00:00:00 2001 From: Albert Iordache Date: Wed, 4 Jan 2012 14:29:16 +0200 Subject: [PATCH 09/25] Fixed a case where the player panel wouldn't open This shouldn't even happen :O --- code/modules/admin/admin.dm | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index ee893da1bd9..d0a70b61229 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -1888,16 +1888,20 @@ if (H.wear_id) var/obj/item/weapon/card/id/id - if(istype(H.wear_id, /obj/item/weapon/card/id)) - id = H.wear_id // The ID is on the ID slot - else if(istype(H.wear_id, /obj/item/device/pda)) + if(istype(H.wear_id, /obj/item/device/pda)) var/obj/item/device/pda/PDA = H.wear_id - id = PDA.id // The ID is contained inside the PDA - - if(M.mind.assigned_role == id.assignment) // Polymorph - dat += "[M.mind.assigned_role]" + id = PDA.id // The ID is contained inside the PDA else - dat += "[M.mind.assigned_role] ([id.assignment])" + id = H.wear_id + + if(isnull(id.assignment)) + usr << "ERROR: Inform the coders that an [id.name] was checked for its assignment variable." + dat += "ERROR" + else + if(M.mind.assigned_role == id.assignment) // Polymorph + dat += "[M.mind.assigned_role]" + else + dat += "[M.mind.assigned_role] ([id.assignment])" else dat += "[M.mind.assigned_role] (No ID)" From 7b56f2e53431c44ed229217efef0da981150c226 Mon Sep 17 00:00:00 2001 From: cib Date: Wed, 4 Jan 2012 18:20:44 -0800 Subject: [PATCH 10/25] Disable control_freak, jesus. --- code/defines/client.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/defines/client.dm b/code/defines/client.dm index 41b3a612ecb..d246ad89521 100644 --- a/code/defines/client.dm +++ b/code/defines/client.dm @@ -46,4 +46,4 @@ // comment out the line below when debugging locally to enable the options & messages menu - control_freak = 1 \ No newline at end of file + //control_freak = 1 \ No newline at end of file From 14e9dbd779c94c5d00eb4f90d77c039e054bdb08 Mon Sep 17 00:00:00 2001 From: Tastyfish Date: Tue, 3 Jan 2012 14:44:28 -0500 Subject: [PATCH 11/25] a couple chatbot grammer improvements --- code/WorkInProgress/Tastyfish/Eliza.dm | 2 +- code/WorkInProgress/Tastyfish/Eliza_Data.dm | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/WorkInProgress/Tastyfish/Eliza.dm b/code/WorkInProgress/Tastyfish/Eliza.dm index 8ebd7236222..6fc0e2e3561 100644 --- a/code/WorkInProgress/Tastyfish/Eliza.dm +++ b/code/WorkInProgress/Tastyfish/Eliza.dm @@ -19,7 +19,7 @@ username = "" yesno_state = "" yesno_param = "" - print("Hi! I'm [callsign], how are you doing?") + print("Hi! I'm [callsign], how are you doing? You can talk to me by beginning your statements with \"[callsign],\"") /datum/text_parser/parser/eliza/process_line() ..() diff --git a/code/WorkInProgress/Tastyfish/Eliza_Data.dm b/code/WorkInProgress/Tastyfish/Eliza_Data.dm index 0fecf95cf71..f84b7b20aca 100644 --- a/code/WorkInProgress/Tastyfish/Eliza_Data.dm +++ b/code/WorkInProgress/Tastyfish/Eliza_Data.dm @@ -108,7 +108,7 @@ "Oh, I*", "You're not really talking about me, are you?")), new/datum/text_parser/keyword( - list("i want"), + list("i want","i like"), list( "What would it mean if you got*", "Why do you want*", @@ -397,7 +397,7 @@ pda.overlays = null pda.overlays += image('pda.dmi', "pda-r") - return "Told [name] that [object]." + return "Told [name], [object]." /datum/text_parser/keyword/yes process(object) From 757bdc08f213a6fa9ba37603dae583baf79e216a Mon Sep 17 00:00:00 2001 From: cib Date: Wed, 4 Jan 2012 19:16:35 -0800 Subject: [PATCH 12/25] You can now produce infected blood from a virus dish with the cure research machine. --- code/WorkInProgress/virus2/curer.dm | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/code/WorkInProgress/virus2/curer.dm b/code/WorkInProgress/virus2/curer.dm index e5e0bc7f8d6..71948a08043 100644 --- a/code/WorkInProgress/virus2/curer.dm +++ b/code/WorkInProgress/virus2/curer.dm @@ -3,7 +3,7 @@ icon = 'computer.dmi' icon_state = "dna" var/curing - var/virusing + var/virusing = 0 var/obj/item/weapon/reagent_containers/container = null @@ -40,6 +40,20 @@ container = I C.drop_item() I.loc = src + if(istype(I,/obj/item/weapon/virusdish)) + if(virusing) + user << "The pathogen materializer is still recharging.." + return + var/obj/item/weapon/reagent_containers/glass/beaker/product = new(src.loc) + + var/list/data = list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null,"virus2"=null,"antibodies"=0) + data["virus2"] = I:virus2 + product.reagents.add_reagent("blood",30,data) + + virusing = 1 + spawn(1200) virusing = 0 + + state("The [src.name] Buzzes", "blue") //else src.attack_hand(user) From 66f6d325a435ef62e0053d28b9a320a5254739db Mon Sep 17 00:00:00 2001 From: cib Date: Wed, 4 Jan 2012 22:07:26 -0800 Subject: [PATCH 13/25] Increased infection chance significantly in the hopes that this will somehow help vira not spreading. --- code/WorkInProgress/virus2/base.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/WorkInProgress/virus2/base.dm b/code/WorkInProgress/virus2/base.dm index 5130d01142c..00897198d49 100644 --- a/code/WorkInProgress/virus2/base.dm +++ b/code/WorkInProgress/virus2/base.dm @@ -239,7 +239,7 @@ proc/airborne_can_reach(turf/source, turf/target) e.runeffect(mob,stage) clicks+=speed - if(prob(5)) spread_airborne(mob) + if(prob(50)) spread_airborne(mob) proc/cure(var/mob/living/carbon/mob) var/datum/disease2/effectholder/E From e141f962c479b17a282995aa3e8ebce2bc46b6fa Mon Sep 17 00:00:00 2001 From: cib Date: Wed, 4 Jan 2012 22:32:09 -0800 Subject: [PATCH 14/25] Confusion shouldn't make you totally unable to move in one direction. --- code/modules/mob/mob_movement.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 4b0f0b18698..bf083644a13 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -220,7 +220,7 @@ M.animate_movement = 2 return - else if(mob.confused) + else if(mob.confused && prob(30)) step(mob, pick(cardinal)) else . = ..() From 86186aa089c6300dbe592487df36ab8f706b1adf Mon Sep 17 00:00:00 2001 From: Albert Iordache Date: Thu, 5 Jan 2012 00:44:40 +0200 Subject: [PATCH 15/25] Fixed a few occurrences of "ship" instead of "station", in events --- code/game/events/Events/BlowOut.dm | 6 +++--- code/game/events/Events/ElectricalStorm.dm | 4 ++-- code/game/events/Events/PowerOffline.dm | 2 +- code/game/events/Events/RadiationBelt.dm | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/code/game/events/Events/BlowOut.dm b/code/game/events/Events/BlowOut.dm index 66b1b9f49d9..89945d33fcb 100644 --- a/code/game/events/Events/BlowOut.dm +++ b/code/game/events/Events/BlowOut.dm @@ -17,10 +17,10 @@ SpawnEvent() del src return - command_alert("Warning: Ship approaching high-density radiation cloud. Seek cover immediately.") + command_alert("Warning: station approaching high-density radiation cloud. Seek cover immediately.") Tick() if(ActiveFor == 50) - command_alert("Ship has entered radiation cloud. Do not leave cover until it has passed.") + command_alert("Station has entered radiation cloud. Do not leave cover until it has passed.") if(ActiveFor == 100 || ActiveFor == 150) //1/2 and 2/2 f the way after it start proper make peope be half dead mostly for(var/mob/living/carbon/M in world) var/area = M.loc.loc @@ -31,4 +31,4 @@ if(!M.stat) M.radiate(100) Die() - command_alert("The ship has cleared the radiation cloud. It is now safe to leave cover.") \ No newline at end of file + command_alert("The station has cleared the radiation cloud. It is now safe to leave cover.") \ No newline at end of file diff --git a/code/game/events/Events/ElectricalStorm.dm b/code/game/events/Events/ElectricalStorm.dm index 5a7e01fe710..1e7ec6f2966 100644 --- a/code/game/events/Events/ElectricalStorm.dm +++ b/code/game/events/Events/ElectricalStorm.dm @@ -10,7 +10,7 @@ Announce() Lifetime = rand(90, 300) - command_alert("The ship is flying through an electrical storm. Radio communications may be disrupted", "Anomaly Alert") + command_alert("The station is flying through an electrical storm. Radio communications may be disrupted", "Anomaly Alert") for (var/datum/radio_frequency/Freq in radio_controller.frequencies) if(prob(35)) @@ -74,7 +74,7 @@ Die() - command_alert("The ship has cleared the electrical storm. Radio communications restored", "Anomaly Alert") + command_alert("The station has cleared the electrical storm. Radio communications restored", "Anomaly Alert") for (var/datum/radio_frequency/Freq in ScrambledFrequencies) radio_controller.UnregisterScrambler(Freq) DisruptedFrequencies = list( ) diff --git a/code/game/events/Events/PowerOffline.dm b/code/game/events/Events/PowerOffline.dm index e3de22ec7b5..a964732dc34 100644 --- a/code/game/events/Events/PowerOffline.dm +++ b/code/game/events/Events/PowerOffline.dm @@ -1,6 +1,6 @@ /datum/event/power_offline Announce() - command_alert("The ship is performing an automated power system grid check, please stand by.", "Maintenance alert") + command_alert("The station is performing an automated power system grid check, please stand by.", "Maintenance alert") for(var/obj/machinery/power/apc/a in world) if(!a.crit) a.eventoff = 1 diff --git a/code/game/events/Events/RadiationBelt.dm b/code/game/events/Events/RadiationBelt.dm index 3158e945fc0..3184ff094c8 100644 --- a/code/game/events/Events/RadiationBelt.dm +++ b/code/game/events/Events/RadiationBelt.dm @@ -1,7 +1,7 @@ /datum/event/radiation Lifetime = 10 Announce() - command_alert("The ship is now travelling through a radiation belt", "Medical Alert") + command_alert("The station is now travelling through a radiation belt", "Medical Alert") Tick() for(var/mob/living/L in world) @@ -15,4 +15,4 @@ domutcheck(L,null,1) Die() - command_alert("The ship has cleared the radiation belt", "Medical Alert") \ No newline at end of file + command_alert("The station has cleared the radiation belt", "Medical Alert") \ No newline at end of file From 7aac3d5e1ca14b1308a2daf24ee8ebc3d6aff653 Mon Sep 17 00:00:00 2001 From: Albert Iordache Date: Thu, 5 Jan 2012 01:10:07 +0200 Subject: [PATCH 16/25] Fixed a radiation belt runtime error --- code/game/events/Events/RadiationBelt.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/events/Events/RadiationBelt.dm b/code/game/events/Events/RadiationBelt.dm index 3184ff094c8..e377a5d1ad2 100644 --- a/code/game/events/Events/RadiationBelt.dm +++ b/code/game/events/Events/RadiationBelt.dm @@ -4,7 +4,7 @@ command_alert("The station is now travelling through a radiation belt", "Medical Alert") Tick() - for(var/mob/living/L in world) + for(var/mob/living/carbon/L in world) L.radiation += rand(1,7) if (L && prob(4)) if (prob(75)) From ab0d906883b026a24f7d0b18c4cea21b4512d8d7 Mon Sep 17 00:00:00 2001 From: CaelAislinn Date: Thu, 5 Jan 2012 09:54:18 +1000 Subject: [PATCH 17/25] played around with ultralight. it now works, but it overrides sd so don't include it. also, shitload of other 'changes' because i derped github Signed-off-by: CaelAislinn --- code/unused/Ultralight.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/unused/Ultralight.dm b/code/unused/Ultralight.dm index bc30bd06212..30516ef52a3 100644 --- a/code/unused/Ultralight.dm +++ b/code/unused/Ultralight.dm @@ -212,14 +212,14 @@ atom/proc/ul_LightLevelChanged() //Designed for client projects to use. Called on items when the turf they are in has its light level changed return -atom/proc/New() +atom/New() ..() if(ul_IsLuminous()) spawn(1) ul_Illuminate() return -atom/proc/Del() +atom/Del() if(ul_IsLuminous()) ul_Extinguish() @@ -227,11 +227,11 @@ atom/proc/Del() return -atom/proc/movable/Move() +/*atom/proc/movable/Move() ul_Extinguish() ..() ul_Illuminate() - return + return*/ turf var From f6706ef3332c8d72bdc0be4f60941967df2adf5d Mon Sep 17 00:00:00 2001 From: Tastyfish Date: Wed, 4 Jan 2012 22:01:24 -0500 Subject: [PATCH 18/25] retired admins don't get sent as admins in json --- code/game/json.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/json.dm b/code/game/json.dm index 38eca15c3b8..c1d94b08510 100644 --- a/code/game/json.dm +++ b/code/game/json.dm @@ -30,7 +30,7 @@ proc/makejson() var/admins = "no" for(var/client/C) playerscount++ - if(C.holder) + if(C.holder && C.holder.level >= 0) // make sure retired admins don't make nt think admins are on if(!C.stealth) admins = "yes" players += "[C.key];" From a2ff049861e8736c1ce97202031896f31017672f Mon Sep 17 00:00:00 2001 From: Tastyfish Date: Wed, 4 Jan 2012 23:01:22 -0500 Subject: [PATCH 19/25] merge --- baystation12.dme | 40 +- code/WorkInProgress/Mini/atmos_control.dm | 3 +- code/WorkInProgress/Mini/customitems.dm | 4 +- code/WorkInProgress/SkyMarshal/eraser.dm | 9 - .../WorkInProgress/SkyMarshal/traitoritems.dm | 74 + code/WorkInProgress/virus2/base.dm | 2 +- code/WorkInProgress/virus2/curer.dm | 16 +- code/defines/client.dm | 2 +- code/defines/global.dm | 4 +- code/defines/obj/clothing/jumpsuit.dm | 7 + code/defines/obj/weapon.dm | 4 + code/game/communications.dm | 12 +- code/game/events/Event.dm | 20 + .../EventProcs}/black_hole.dm | 172 +- .../events => events/EventProcs}/clang.dm | 162 +- .../events => events/EventProcs}/dust.dm | 236 +- .../events => events/EventProcs}/kudzu.dm | 350 +- .../events => events/EventProcs}/miniblob.dm | 64 +- code/game/events/EventProcs/misc.dm | 71 + .../EventProcs}/ninja_abilities.dm | 858 ++--- .../EventProcs}/ninja_equipment.dm | 2910 ++++++++--------- .../EventProcs}/space_ninja.dm | 1990 +++++------ code/game/events/Events/AlienInfestation.dm | 38 + code/game/events/Events/Appendicitis.dm | 16 + code/game/events/Events/BlowOut.dm | 34 + code/game/events/Events/ElectricalStorm.dm | 124 + .../events/Events/GravitationalAnomaly.dm | 10 + code/game/events/Events/ImmovableRod.dm | 5 + code/game/events/Events/IonStorm.dm | 46 + code/game/events/Events/MeteorStorm.dm | 11 + code/game/events/Events/MiniBlob.dm | 5 + code/game/events/Events/PortalStorm.dm | 26 + code/game/events/Events/PowerOffline.dm | 8 + code/game/events/Events/PrisonBreak.dm | 24 + code/game/events/Events/RadiationBelt.dm | 18 + code/game/events/Events/SpaceCarp.dm | 14 + code/game/events/Events/SpaceNinja.dm | 6 + code/game/events/Events/VirusEpidemic.dm | 80 + code/game/events/EventsMain.dm | 76 + code/game/gamemodes/events.dm | 445 --- code/game/gamemodes/gameticker.dm | 9 +- code/game/machinery/alarm.dm | 46 +- code/game/machinery/doors/airlock.dm | 1 - code/game/objects/radio/radio.dm | 33 +- code/modules/admin/admin.dm | 41 +- code/modules/admin/admin_verbs.dm | 2 + code/modules/admin/verbs/randomverbs.dm | 2 +- code/modules/mob/mob.dm | 2 +- code/modules/mob/mob_helpers.dm | 4 +- code/modules/mob/mob_movement.dm | 2 +- code/modules/power/apc.dm | 4 +- icons/obj/doors/rapid_pdoor.dmi | Bin 8025 -> 8228 bytes 52 files changed, 4258 insertions(+), 3884 deletions(-) delete mode 100644 code/WorkInProgress/SkyMarshal/eraser.dm create mode 100644 code/WorkInProgress/SkyMarshal/traitoritems.dm create mode 100644 code/game/events/Event.dm rename code/game/{gamemodes/events => events/EventProcs}/black_hole.dm (95%) rename code/game/{gamemodes/events => events/EventProcs}/clang.dm (93%) rename code/game/{gamemodes/events => events/EventProcs}/dust.dm (94%) rename code/game/{gamemodes/events => events/EventProcs}/kudzu.dm (96%) rename code/game/{gamemodes/events => events/EventProcs}/miniblob.dm (94%) create mode 100644 code/game/events/EventProcs/misc.dm rename code/game/{gamemodes/events => events/EventProcs}/ninja_abilities.dm (97%) rename code/game/{gamemodes/events => events/EventProcs}/ninja_equipment.dm (97%) rename code/game/{gamemodes/events => events/EventProcs}/space_ninja.dm (97%) create mode 100644 code/game/events/Events/AlienInfestation.dm create mode 100644 code/game/events/Events/Appendicitis.dm create mode 100644 code/game/events/Events/BlowOut.dm create mode 100644 code/game/events/Events/ElectricalStorm.dm create mode 100644 code/game/events/Events/GravitationalAnomaly.dm create mode 100644 code/game/events/Events/ImmovableRod.dm create mode 100644 code/game/events/Events/IonStorm.dm create mode 100644 code/game/events/Events/MeteorStorm.dm create mode 100644 code/game/events/Events/MiniBlob.dm create mode 100644 code/game/events/Events/PortalStorm.dm create mode 100644 code/game/events/Events/PowerOffline.dm create mode 100644 code/game/events/Events/PrisonBreak.dm create mode 100644 code/game/events/Events/RadiationBelt.dm create mode 100644 code/game/events/Events/SpaceCarp.dm create mode 100644 code/game/events/Events/SpaceNinja.dm create mode 100644 code/game/events/Events/VirusEpidemic.dm create mode 100644 code/game/events/EventsMain.dm delete mode 100644 code/game/gamemodes/events.dm diff --git a/baystation12.dme b/baystation12.dme index 8b7df32043c..f58c6eba48c 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -30,11 +30,13 @@ #define FILE_DIR "code/game" #define FILE_DIR "code/game/area" #define FILE_DIR "code/game/asteroid" +#define FILE_DIR "code/game/events" +#define FILE_DIR "code/game/events/EventProcs" +#define FILE_DIR "code/game/events/Events" #define FILE_DIR "code/game/gamemodes" #define FILE_DIR "code/game/gamemodes/blob" #define FILE_DIR "code/game/gamemodes/changeling" #define FILE_DIR "code/game/gamemodes/cult" -#define FILE_DIR "code/game/gamemodes/events" #define FILE_DIR "code/game/gamemodes/extended" #define FILE_DIR "code/game/gamemodes/malfunction" #define FILE_DIR "code/game/gamemodes/meteor" @@ -364,7 +366,31 @@ #include "code\game\asteroid\asteroid.dm" #include "code\game\asteroid\device.dm" #include "code\game\asteroid\turf.dm" -#include "code\game\gamemodes\events.dm" +#include "code\game\events\Event.dm" +#include "code\game\events\EventsMain.dm" +#include "code\game\events\EventProcs\black_hole.dm" +#include "code\game\events\EventProcs\clang.dm" +#include "code\game\events\EventProcs\dust.dm" +#include "code\game\events\EventProcs\kudzu.dm" +#include "code\game\events\EventProcs\miniblob.dm" +#include "code\game\events\EventProcs\misc.dm" +#include "code\game\events\EventProcs\ninja_abilities.dm" +#include "code\game\events\EventProcs\ninja_equipment.dm" +#include "code\game\events\EventProcs\space_ninja.dm" +#include "code\game\events\Events\AlienInfestation.dm" +#include "code\game\events\Events\Appendicitis.dm" +#include "code\game\events\Events\ElectricalStorm.dm" +#include "code\game\events\Events\GravitationalAnomaly.dm" +#include "code\game\events\Events\ImmovableRod.dm" +#include "code\game\events\Events\IonStorm.dm" +#include "code\game\events\Events\MeteorStorm.dm" +#include "code\game\events\Events\MiniBlob.dm" +#include "code\game\events\Events\PowerOffline.dm" +#include "code\game\events\Events\PrisonBreak.dm" +#include "code\game\events\Events\RadiationBelt.dm" +#include "code\game\events\Events\SpaceCarp.dm" +#include "code\game\events\Events\SpaceNinja.dm" +#include "code\game\events\Events\VirusEpidemic.dm" #include "code\game\gamemodes\game_mode.dm" #include "code\game\gamemodes\gameticker.dm" #include "code\game\gamemodes\intercept_report.dm" @@ -377,14 +403,6 @@ #include "code\game\gamemodes\changeling\traitor_chan.dm" #include "code\game\gamemodes\cult\cult.dm" #include "code\game\gamemodes\cult\cult_items.dm" -#include "code\game\gamemodes\events\black_hole.dm" -#include "code\game\gamemodes\events\clang.dm" -#include "code\game\gamemodes\events\dust.dm" -#include "code\game\gamemodes\events\kudzu.dm" -#include "code\game\gamemodes\events\miniblob.dm" -#include "code\game\gamemodes\events\ninja_abilities.dm" -#include "code\game\gamemodes\events\ninja_equipment.dm" -#include "code\game\gamemodes\events\space_ninja.dm" #include "code\game\gamemodes\extended\extended.dm" #include "code\game\gamemodes\malfunction\Malf_Modules.dm" #include "code\game\gamemodes\malfunction\malfunction.dm" @@ -986,8 +1004,8 @@ #include "code\WorkInProgress\Mini\atmos_control.dm" #include "code\WorkInProgress\Mini\customitems.dm" #include "code\WorkInProgress\SkyMarshal\coatrack.dm" -#include "code\WorkInProgress\SkyMarshal\eraser.dm" #include "code\WorkInProgress\SkyMarshal\policetape.dm" +#include "code\WorkInProgress\SkyMarshal\traitoritems.dm" #include "code\WorkInProgress\Tastyfish\Eliza.dm" #include "code\WorkInProgress\Tastyfish\Eliza_Data.dm" #include "code\WorkInProgress\Tastyfish\paiLiza.dm" diff --git a/code/WorkInProgress/Mini/atmos_control.dm b/code/WorkInProgress/Mini/atmos_control.dm index e1aa431fd7f..b5a656ce352 100644 --- a/code/WorkInProgress/Mini/atmos_control.dm +++ b/code/WorkInProgress/Mini/atmos_control.dm @@ -10,6 +10,7 @@ anchored = 1.0 circuit = "/obj/item/weapon/circuitboard/atmoscontrol" var/obj/machinery/alarm/current = "" + var/overridden = 0 //not set yet, can't think of a good way to do it /obj/machinery/computer/atmoscontrol/attack_hand(mob/user) if(..()) @@ -36,7 +37,7 @@ return "" var/dat = "

[current.name]


" dat += current.return_status() - if(current.remote_control) + if(current.remote_control || overridden && current.rcon_setting) dat += "
[src.return_controls()]" return dat diff --git a/code/WorkInProgress/Mini/customitems.dm b/code/WorkInProgress/Mini/customitems.dm index 3a3da54918e..8a507608b21 100644 --- a/code/WorkInProgress/Mini/customitems.dm +++ b/code/WorkInProgress/Mini/customitems.dm @@ -6,7 +6,9 @@ var/list/CustomItemList = list( // ckey real_name item path // list("miniature","Dave Booze",/obj/item/toy/crayonbox) //screw this i dont want crayons, it's an example okay - list("skymarshal", "Phillip Oswald", /obj/item/weapon/coin/silver) //Phillip likes to chew on cigars. Just unlit cigars, don't ask me why. Must be a clone thing. (Cigarette machines dispense cigars if they have a coin in them) --SkyMarshal + list("skymarshal", "Phillip Oswald", /obj/item/weapon/coin/silver), //Phillip likes to chew on cigars. Just unlit cigars, don't ask me why. Must be a clone thing. (Cigarette machines dispense cigars if they have a coin in them) --SkyMarshal + list("spaceman96", "Trenna Seber", /obj/item/weapon/pen/multi), //For Spesss. + list("asanadas", "Book Berner", /obj/item/clothing/under/chameleon/psyche) ) /proc/EquipCustomItems(mob/living/carbon/human/M) diff --git a/code/WorkInProgress/SkyMarshal/eraser.dm b/code/WorkInProgress/SkyMarshal/eraser.dm deleted file mode 100644 index f15384f3f14..00000000000 --- a/code/WorkInProgress/SkyMarshal/eraser.dm +++ /dev/null @@ -1,9 +0,0 @@ -/obj/item/weapon/stamperaser - name = "Eraser" - desc = "Some type of eraser, you guess." - flags = FPRINT | TABLEPASS - icon = 'items.dmi' - icon_state = "zippo" - item_state = "zippo" - w_class = 1.0 - m_amt = 80 \ No newline at end of file diff --git a/code/WorkInProgress/SkyMarshal/traitoritems.dm b/code/WorkInProgress/SkyMarshal/traitoritems.dm new file mode 100644 index 00000000000..2b29a12e22e --- /dev/null +++ b/code/WorkInProgress/SkyMarshal/traitoritems.dm @@ -0,0 +1,74 @@ +/obj/item/weapon/stamperaser + name = "Eraser" + desc = "Some type of eraser, you guess." + flags = FPRINT | TABLEPASS + icon = 'items.dmi' + icon_state = "zippo" + item_state = "zippo" + w_class = 1.0 + m_amt = 80 + +/obj/item/device/jammer + name = "strange device" + desc = "It blinks and has an antenna on it. Weird." + icon_state = "t-ray0" + var/on = 0 + flags = FPRINT|TABLEPASS + w_class = 1 + var + list/obj/item/device/radio/Old = list() + list/obj/item/device/radio/Curr = list() + time_remaining = 5 + +/obj/item/device/jammer/New() + ..() + time_remaining = rand(10,20) // ~2-4 BYOND seconds of use. + return + +/obj/item/device/jammer/attack_self(mob/user) + + if(time_remaining > 0) + on = !on + icon_state = "t-ray[on]" + + if(on) + processing_objects.Add(src) + else + on = 0 + icon_state = "t-ray0" + user << "It's fried itself from overuse!" + if(Old) + for(var/obj/item/device/radio/T in Old) + T.scrambleoverride = 0 + Old = null + Curr = null + + +/obj/item/device/jammer/process() + if(!on) + processing_objects.Remove(src) + return null + + Old = Curr + Curr = list() + + for(var/obj/item/device/radio/T in range(3, src.loc) ) + + T.scrambleoverride = 1 + Curr |= T + for(var/obj/item/device/radio/V in Old) + if(V == T) + Old -= V + break + + for(var/obj/item/device/radio/T in Old) + T.scrambleoverride = 0 + + time_remaining-- + if(time_remaining <= 0) + for(var/mob/O in viewers(src)) + O.show_message("\red You hear a loud pop, like circuits frying.", 1) + on = 0 + icon_state = "t-ray0" + + sleep(2) \ No newline at end of file diff --git a/code/WorkInProgress/virus2/base.dm b/code/WorkInProgress/virus2/base.dm index 5130d01142c..00897198d49 100644 --- a/code/WorkInProgress/virus2/base.dm +++ b/code/WorkInProgress/virus2/base.dm @@ -239,7 +239,7 @@ proc/airborne_can_reach(turf/source, turf/target) e.runeffect(mob,stage) clicks+=speed - if(prob(5)) spread_airborne(mob) + if(prob(50)) spread_airborne(mob) proc/cure(var/mob/living/carbon/mob) var/datum/disease2/effectholder/E diff --git a/code/WorkInProgress/virus2/curer.dm b/code/WorkInProgress/virus2/curer.dm index e5e0bc7f8d6..71948a08043 100644 --- a/code/WorkInProgress/virus2/curer.dm +++ b/code/WorkInProgress/virus2/curer.dm @@ -3,7 +3,7 @@ icon = 'computer.dmi' icon_state = "dna" var/curing - var/virusing + var/virusing = 0 var/obj/item/weapon/reagent_containers/container = null @@ -40,6 +40,20 @@ container = I C.drop_item() I.loc = src + if(istype(I,/obj/item/weapon/virusdish)) + if(virusing) + user << "The pathogen materializer is still recharging.." + return + var/obj/item/weapon/reagent_containers/glass/beaker/product = new(src.loc) + + var/list/data = list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null,"virus2"=null,"antibodies"=0) + data["virus2"] = I:virus2 + product.reagents.add_reagent("blood",30,data) + + virusing = 1 + spawn(1200) virusing = 0 + + state("The [src.name] Buzzes", "blue") //else src.attack_hand(user) diff --git a/code/defines/client.dm b/code/defines/client.dm index 41b3a612ecb..d246ad89521 100644 --- a/code/defines/client.dm +++ b/code/defines/client.dm @@ -46,4 +46,4 @@ // comment out the line below when debugging locally to enable the options & messages menu - control_freak = 1 \ No newline at end of file + //control_freak = 1 \ No newline at end of file diff --git a/code/defines/global.dm b/code/defines/global.dm index caa40a1891a..b0bbb54e11a 100644 --- a/code/defines/global.dm +++ b/code/defines/global.dm @@ -41,7 +41,7 @@ var skipupdate = 0 /////////////// eventchance = 1 //% per 2 mins - event = 0 + EventsOn = 1 hadevent = 0 blobevent = 0 /////////////// @@ -157,6 +157,8 @@ var list/BorgIndexToFlag list/BorgIndexToWireColor list/BorgWireColorToIndex + list/ScrambledFrequencies = list( ) //These are used for electrical storms, and anything else that jams radios. + list/UnscrambledFrequencies = list( ) const/SPEED_OF_LIGHT = 3e8 //not exact but hey! const/SPEED_OF_LIGHT_SQ = 9e+16 diff --git a/code/defines/obj/clothing/jumpsuit.dm b/code/defines/obj/clothing/jumpsuit.dm index 3ccca7d524d..f420d23bd0b 100644 --- a/code/defines/obj/clothing/jumpsuit.dm +++ b/code/defines/obj/clothing/jumpsuit.dm @@ -30,6 +30,13 @@ origin_tech = "syndicate=3" var/list/clothing_choices = list() +/obj/item/clothing/under/chameleon/psyche + item_state = "bl_suit" + name = "psychedelic" + desc = "Groovy!" + icon_state = "psyche" + color = "psyche" + /obj/item/clothing/under/chameleon/all /obj/item/clothing/under/color/black diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index a40d1804805..d01409c9e4b 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -915,6 +915,10 @@ var/text_underline = 0 var/text_break = 0 +/obj/item/weapon/pen/multi + desc = "It's a cool looking pen. Lots of colors!" + name = "multicolor pen" + /obj/item/weapon/banhammer desc = "A banhammer" name = "Banhammer" diff --git a/code/game/communications.dm b/code/game/communications.dm index aac6202bc16..8b292e10f80 100644 --- a/code/game/communications.dm +++ b/code/game/communications.dm @@ -113,7 +113,7 @@ var/list/radiochannels = list( var/list/DEPT_FREQS = list(1351,1355,1357,1359,1213,1441,1349,1347) var/const/COMM_FREQ = 1353 //command, colored gold in chat window var/const/SYND_FREQ = 1213 -var/NUKE_FREQ = 1199 //Never accessable except on nuke rounds. +var/NUKE_FREQ = 1199 //Never accessable except on nuke rounds, randomised on nuke rounds. #define TRANSMISSION_WIRE 0 #define TRANSMISSION_RADIO 1 @@ -159,6 +159,13 @@ datum/controller/radio return 1 + proc/RegisterScrambler(var/Frequency) + var/datum/radio_frequency/frequency = frequencies[Frequency] + frequency.scrambled++ + + proc/UnregisterScrambler(var/Frequency) + var/datum/radio_frequency/frequency = frequencies[Frequency] + frequency.scrambled-- proc/return_frequency(var/frequency as num) var/f_text = num2text(frequency) return frequencies[f_text] @@ -166,6 +173,7 @@ datum/controller/radio datum/radio_frequency var/frequency as num var/list/list/obj/devices = list() + var/scrambled = 0 proc post_signal(obj/source as obj|null, datum/signal/signal, var/filter = null as text|null, var/range = null as num|null) @@ -173,6 +181,8 @@ datum/radio_frequency // var/N_f=0 // var/N_nf=0 // var/Nt=0 + if(scrambled) + return var/turf/start_point if(range) start_point = get_turf(source) diff --git a/code/game/events/Event.dm b/code/game/events/Event.dm new file mode 100644 index 00000000000..0616ebe32f8 --- /dev/null +++ b/code/game/events/Event.dm @@ -0,0 +1,20 @@ +/datum/event + + var/Lifetime = 0 + var/ActiveFor = 0 + + New() + ..() + if(!Lifetime) + Lifetime = rand(30, 120) + + proc + Announce() + + Tick() + + Die() + + LongTerm() + LongTermEvent = ActiveEvent + ActiveEvent = null \ No newline at end of file diff --git a/code/game/gamemodes/events/black_hole.dm b/code/game/events/EventProcs/black_hole.dm similarity index 95% rename from code/game/gamemodes/events/black_hole.dm rename to code/game/events/EventProcs/black_hole.dm index 4320e444e84..12d0a20f7df 100644 --- a/code/game/gamemodes/events/black_hole.dm +++ b/code/game/events/EventProcs/black_hole.dm @@ -1,87 +1,87 @@ -/obj/effect/bhole - name = "black hole" - icon = 'objects.dmi' - desc = "FUCK FUCK FUCK AAAHHH" - icon_state = "bhole2" - opacity = 0 - unacidable = 1 - density = 0 - anchored = 1 - var/datum/effect/effect/system/harmless_smoke_spread/smoke - - -/obj/effect/bhole/New() - src.smoke = new /datum/effect/effect/system/harmless_smoke_spread() - src.smoke.set_up(5, 0, src) - src.smoke.attach(src) - src:life() - - -/obj/effect/bhole/Bumped(atom/A) - if (istype(A,/mob/living)) - del(A) - else - A:ex_act(1.0) - - -/obj/effect/bhole/proc/life() //Oh man , this will LAG - - if (prob(10)) - src.anchored = 0 - step(src,pick(alldirs)) - if (prob(30)) - step(src,pick(alldirs)) - src.anchored = 1 - - for (var/atom/X in orange(9,src)) - if ((istype(X,/obj) || istype(X,/mob/living)) && prob(7)) - if (!X:anchored) - step_towards(X,src) - - for (var/atom/B in orange(7,src)) - if (istype(B,/obj)) - if (!B:anchored && prob(50)) - step_towards(B,src) - if(prob(10)) B:ex_act(3.0) - else - B:anchored = 0 - //step_towards(B,src) - //B:anchored = 1 - if(prob(10)) B:ex_act(3.0) - else if (istype(B,/turf)) - if (istype(B,/turf/simulated) && (prob(1) && prob(75))) - src.smoke.start() - B:ReplaceWithSpace() - else if (istype(B,/mob/living)) - step_towards(B,src) - - - for (var/atom/A in orange(4,src)) - if (istype(A,/obj)) - if (!A:anchored && prob(90)) - step_towards(A,src) - if(prob(30)) A:ex_act(2.0) - else - A:anchored = 0 - //step_towards(A,src) - //A:anchored = 1 - if(prob(30)) A:ex_act(2.0) - else if (istype(A,/turf)) - if (istype(A,/turf/simulated) && prob(1)) - src.smoke.start() - A:ReplaceWithSpace() - else if (istype(A,/mob/living)) - step_towards(A,src) - - - for (var/atom/D in orange(1,src)) - //if (hascall(D,"blackholed")) - // call(D,"blackholed")(null) - // continue - if (istype(D,/mob/living)) - del(D) - else - D:ex_act(1.0) - - spawn(17) +/obj/effect/bhole + name = "black hole" + icon = 'objects.dmi' + desc = "FUCK FUCK FUCK AAAHHH" + icon_state = "bhole2" + opacity = 0 + unacidable = 1 + density = 0 + anchored = 1 + var/datum/effect/effect/system/harmless_smoke_spread/smoke + + +/obj/effect/bhole/New() + src.smoke = new /datum/effect/effect/system/harmless_smoke_spread() + src.smoke.set_up(5, 0, src) + src.smoke.attach(src) + src:life() + + +/obj/effect/bhole/Bumped(atom/A) + if (istype(A,/mob/living)) + del(A) + else + A:ex_act(1.0) + + +/obj/effect/bhole/proc/life() //Oh man , this will LAG + + if (prob(10)) + src.anchored = 0 + step(src,pick(alldirs)) + if (prob(30)) + step(src,pick(alldirs)) + src.anchored = 1 + + for (var/atom/X in orange(9,src)) + if ((istype(X,/obj) || istype(X,/mob/living)) && prob(7)) + if (!X:anchored) + step_towards(X,src) + + for (var/atom/B in orange(7,src)) + if (istype(B,/obj)) + if (!B:anchored && prob(50)) + step_towards(B,src) + if(prob(10)) B:ex_act(3.0) + else + B:anchored = 0 + //step_towards(B,src) + //B:anchored = 1 + if(prob(10)) B:ex_act(3.0) + else if (istype(B,/turf)) + if (istype(B,/turf/simulated) && (prob(1) && prob(75))) + src.smoke.start() + B:ReplaceWithSpace() + else if (istype(B,/mob/living)) + step_towards(B,src) + + + for (var/atom/A in orange(4,src)) + if (istype(A,/obj)) + if (!A:anchored && prob(90)) + step_towards(A,src) + if(prob(30)) A:ex_act(2.0) + else + A:anchored = 0 + //step_towards(A,src) + //A:anchored = 1 + if(prob(30)) A:ex_act(2.0) + else if (istype(A,/turf)) + if (istype(A,/turf/simulated) && prob(1)) + src.smoke.start() + A:ReplaceWithSpace() + else if (istype(A,/mob/living)) + step_towards(A,src) + + + for (var/atom/D in orange(1,src)) + //if (hascall(D,"blackholed")) + // call(D,"blackholed")(null) + // continue + if (istype(D,/mob/living)) + del(D) + else + D:ex_act(1.0) + + spawn(17) life() \ No newline at end of file diff --git a/code/game/gamemodes/events/clang.dm b/code/game/events/EventProcs/clang.dm similarity index 93% rename from code/game/gamemodes/events/clang.dm rename to code/game/events/EventProcs/clang.dm index ddfd81f5ff2..e02f79665a2 100644 --- a/code/game/gamemodes/events/clang.dm +++ b/code/game/events/EventProcs/clang.dm @@ -1,82 +1,82 @@ -/* -Immovable rod random event. -The rod will spawn at some location outside the station, and travel in a straight line to the opposite side of the station -Everything solid in the way will be ex_act()'d -In my current plan for it, 'solid' will be defined as anything with density == 1 - ---NEOFite -*/ - -/obj/effect/immovablerod - name = "Immovable Rod" - desc = "What the fuck is that?" - icon = 'objects.dmi' - icon_state = "immrod" - throwforce = 100 - density = 1 - anchored = 1 - - Bump(atom/clong) - if (istype(clong, /turf)) - if(clong.density) - clong.ex_act(2) - for (var/mob/O in hearers(src, null)) - O.show_message("CLANG", 2) - if (istype(clong, /obj)) - if(clong.density) - clong.ex_act(2) - for (var/mob/O in hearers(src, null)) - O.show_message("CLANG", 2) - if (istype(clong, /mob)) - if(clong.density || prob(10)) - clong.meteorhit(src) - if(clong && prob(25)) - src.loc = clong.loc - -/proc/immovablerod() - - var/startx = 0 - var/starty = 0 - var/endy = 0 - var/endx = 0 - var/startside = pick(cardinal) - - switch(startside) - if(NORTH) - starty = 187 - startx = rand(41, 199) - endy = 38 - endx = rand(41, 199) - if(EAST) - starty = rand(38, 187) - startx = 199 - endy = rand(38, 187) - endx = 41 - if(SOUTH) - starty = 38 - startx = rand(41, 199) - endy = 187 - endx = rand(41, 199) - if(WEST) - starty = rand(38, 187) - startx = 41 - endy = rand(38, 187) - endx = 199 - - //rod time! - var/obj/effect/immovablerod/immrod = new /obj/effect/immovablerod(locate(startx, starty, 1)) -// world << "Rod in play, starting at [start.loc.x],[start.loc.y] and going to [end.loc.x],[end.loc.y]" - var/end = locate(endx, endy, 1) - spawn(0) - walk_towards(immrod, end,1) - sleep(1) - while (immrod) - if (immrod.z != 1) - immrod.z = 1 - if(immrod.loc == end) - del(immrod) - sleep(10) - for(var/obj/effect/immovablerod/imm in world) - return - sleep(50) +/* +Immovable rod random event. +The rod will spawn at some location outside the station, and travel in a straight line to the opposite side of the station +Everything solid in the way will be ex_act()'d +In my current plan for it, 'solid' will be defined as anything with density == 1 + +--NEOFite +*/ + +/obj/effect/immovablerod + name = "Immovable Rod" + desc = "What the fuck is that?" + icon = 'objects.dmi' + icon_state = "immrod" + throwforce = 100 + density = 1 + anchored = 1 + + Bump(atom/clong) + if (istype(clong, /turf)) + if(clong.density) + clong.ex_act(2) + for (var/mob/O in hearers(src, null)) + O.show_message("CLANG", 2) + if (istype(clong, /obj)) + if(clong.density) + clong.ex_act(2) + for (var/mob/O in hearers(src, null)) + O.show_message("CLANG", 2) + if (istype(clong, /mob)) + if(clong.density || prob(10)) + clong.meteorhit(src) + if(clong && prob(25)) + src.loc = clong.loc + +/proc/immovablerod() + + var/startx = 0 + var/starty = 0 + var/endy = 0 + var/endx = 0 + var/startside = pick(cardinal) + + switch(startside) + if(NORTH) + starty = 187 + startx = rand(41, 199) + endy = 38 + endx = rand(41, 199) + if(EAST) + starty = rand(38, 187) + startx = 199 + endy = rand(38, 187) + endx = 41 + if(SOUTH) + starty = 38 + startx = rand(41, 199) + endy = 187 + endx = rand(41, 199) + if(WEST) + starty = rand(38, 187) + startx = 41 + endy = rand(38, 187) + endx = 199 + + //rod time! + var/obj/effect/immovablerod/immrod = new /obj/effect/immovablerod(locate(startx, starty, 1)) +// world << "Rod in play, starting at [start.loc.x],[start.loc.y] and going to [end.loc.x],[end.loc.y]" + var/end = locate(endx, endy, 1) + spawn(0) + walk_towards(immrod, end,1) + sleep(1) + while (immrod) + if (immrod.z != 1) + immrod.z = 1 + if(immrod.loc == end) + del(immrod) + sleep(10) + for(var/obj/effect/immovablerod/imm in world) + return + sleep(50) command_alert("What the fuck was that?!", "General Alert") \ No newline at end of file diff --git a/code/game/gamemodes/events/dust.dm b/code/game/events/EventProcs/dust.dm similarity index 94% rename from code/game/gamemodes/events/dust.dm rename to code/game/events/EventProcs/dust.dm index dc2989f5d3e..d7a7def9112 100644 --- a/code/game/gamemodes/events/dust.dm +++ b/code/game/events/EventProcs/dust.dm @@ -1,119 +1,119 @@ -/* -Space dust -Commonish random event that causes small clumps of "space dust" to hit the station at high speeds. -No command report on the common version of this event. -The "dust" will damage the hull of the station causin minor hull breaches. -*/ - -/proc/dust_swarm(var/strength = "weak") - var/numbers = 1 - switch(strength) - if("weak") - numbers = rand(2,4) - for(var/i = 0 to numbers) - new/obj/effect/space_dust/weak() - if("norm") - numbers = rand(5,10) - for(var/i = 0 to numbers) - new/obj/effect/space_dust() - if("strong") - numbers = rand(10,15) - for(var/i = 0 to numbers) - new/obj/effect/space_dust/strong() - if("super") - numbers = rand(15,25) - for(var/i = 0 to numbers) - new/obj/effect/space_dust/super() - return - - -/obj/effect/space_dust - name = "Space Dust" - desc = "Dust in space." - icon = 'meteor.dmi' - icon_state = "space_dust" - density = 1 - anchored = 1 - var - strength = 2 //ex_act severity number - life = 2 //how many things we hit before del(src) - - weak - strength = 3 - life = 1 - - strong - strength = 1 - life = 6 - - super - strength = 1 - life = 40 - - - New() - var/startx = 0 - var/starty = 0 - var/endy = 0 - var/endx = 0 - var/startside = pick(cardinal) - - switch(startside) - if(NORTH) - starty = world.maxy-1 - startx = rand(1, world.maxx-1) - endy = 1 - endx = rand(1, world.maxx-1) - if(EAST) - starty = rand(1,world.maxy-1) - startx = world.maxx-1 - endy = rand(1, world.maxy-1) - endx = 1 - if(SOUTH) - starty = 1 - startx = rand(1, world.maxx-1) - endy = world.maxy-1 - endx = rand(1, world.maxx-1) - if(WEST) - starty = rand(1, world.maxy-1) - startx = 1 - endy = rand(1,world.maxy-1) - endx = world.maxx-1 - var/goal = locate(endx, endy, 1) - src.x = startx - src.y = starty - src.z = 1 - spawn(0) - walk_towards(src, goal, 1) - return - - - Bump(atom/A) - spawn(0) - if(prob(50)) - for(var/mob/M in range(10, src)) - if(!M.stat && !istype(M, /mob/living/silicon/ai)) - shake_camera(M, 3, 1) - if (A) - playsound(src.loc, 'meteorimpact.ogg', 40, 1) - if(ismob(A)) - A.meteorhit(src)//This should work for now I guess - else - A.ex_act(strength) - life-- - if(life <= 0) - walk(src,0) - spawn(1) - del(src) - return 0 - return - - - Bumped(atom/A) - Bump(A) - return - - - ex_act(severity) - del(src) +/* +Space dust +Commonish random event that causes small clumps of "space dust" to hit the station at high speeds. +No command report on the common version of this event. +The "dust" will damage the hull of the station causin minor hull breaches. +*/ + +/proc/dust_swarm(var/strength = "weak") + var/numbers = 1 + switch(strength) + if("weak") + numbers = rand(2,4) + for(var/i = 0 to numbers) + new/obj/effect/space_dust/weak() + if("norm") + numbers = rand(5,10) + for(var/i = 0 to numbers) + new/obj/effect/space_dust() + if("strong") + numbers = rand(10,15) + for(var/i = 0 to numbers) + new/obj/effect/space_dust/strong() + if("super") + numbers = rand(15,25) + for(var/i = 0 to numbers) + new/obj/effect/space_dust/super() + return + + +/obj/effect/space_dust + name = "Space Dust" + desc = "Dust in space." + icon = 'meteor.dmi' + icon_state = "space_dust" + density = 1 + anchored = 1 + var + strength = 2 //ex_act severity number + life = 2 //how many things we hit before del(src) + + weak + strength = 3 + life = 1 + + strong + strength = 1 + life = 6 + + super + strength = 1 + life = 40 + + + New() + var/startx = 0 + var/starty = 0 + var/endy = 0 + var/endx = 0 + var/startside = pick(cardinal) + + switch(startside) + if(NORTH) + starty = world.maxy-1 + startx = rand(1, world.maxx-1) + endy = 1 + endx = rand(1, world.maxx-1) + if(EAST) + starty = rand(1,world.maxy-1) + startx = world.maxx-1 + endy = rand(1, world.maxy-1) + endx = 1 + if(SOUTH) + starty = 1 + startx = rand(1, world.maxx-1) + endy = world.maxy-1 + endx = rand(1, world.maxx-1) + if(WEST) + starty = rand(1, world.maxy-1) + startx = 1 + endy = rand(1,world.maxy-1) + endx = world.maxx-1 + var/goal = locate(endx, endy, 1) + src.x = startx + src.y = starty + src.z = 1 + spawn(0) + walk_towards(src, goal, 1) + return + + + Bump(atom/A) + spawn(0) + if(prob(50)) + for(var/mob/M in range(10, src)) + if(!M.stat && !istype(M, /mob/living/silicon/ai)) + shake_camera(M, 3, 1) + if (A) + playsound(src.loc, 'meteorimpact.ogg', 40, 1) + if(ismob(A)) + A.meteorhit(src)//This should work for now I guess + else + A.ex_act(strength) + life-- + if(life <= 0) + walk(src,0) + spawn(1) + del(src) + return 0 + return + + + Bumped(atom/A) + Bump(A) + return + + + ex_act(severity) + del(src) return \ No newline at end of file diff --git a/code/game/gamemodes/events/kudzu.dm b/code/game/events/EventProcs/kudzu.dm similarity index 96% rename from code/game/gamemodes/events/kudzu.dm rename to code/game/events/EventProcs/kudzu.dm index 5281f43cf57..17d2215eb85 100644 --- a/code/game/gamemodes/events/kudzu.dm +++ b/code/game/events/EventProcs/kudzu.dm @@ -1,176 +1,176 @@ -// SPACE VINE OR KUDZU - -/obj/effect/spacevine - name = "Space Kudzu" - desc = "An extremely expansionistic species of vine." - icon = 'kudzu.dmi' - icon_state = "Light1" - anchored = 1 - density = 0 - var/energy = 0 //Energy sounds like an arbitrary-enough variable name. - var/obj/effect/spacevine_controller/master = null - - New() - if(istype(src.loc, /turf/space)) - del(src) - return - - Del() - if(master) - master.vines -= src - master.growth_queue -= src - ..() - - attackby(obj/item/weapon/W as obj, mob/user as mob) - if (!W) return - if (!user) return - if (istype(W, /obj/item/weapon/circular_saw)) del src - if (istype(W, /obj/item/weapon/kitchen/utensil/knife)) del src - if (istype(W, /obj/item/weapon/scalpel)) del src - if (istype(W, /obj/item/weapon/screwdriver)) del src - if (istype(W, /obj/item/weapon/shard)) del src - if (istype(W, /obj/item/weapon/weldingtool)) del src - if (istype(W, /obj/item/weapon/wirecutters)) del src - ..() - -/obj/effect/spacevine_controller - var/list/obj/effect/spacevine/vines = list() - var/list/growth_queue = list() - var/reached_collapse_size - var/reached_slowdown_size - //What this does is that instead of having the grow minimum of 1, required to start growing, the minimum will be 0, - //meaning if you get the kudzu's size to something less than 20 plots, it won't grow anymore. - - New() - if(!istype(src.loc,/turf/simulated/floor)) - del(src) - - spawn_kudzu_piece(src.loc) - processing_objects.Add(src) - - Del() - processing_objects.Remove(src) - ..() - - proc/spawn_kudzu_piece(var/turf/location) - var/obj/effect/spacevine/SV = new(location) - growth_queue += SV - vines += SV - SV.master = src - - process() - if(!vines) - del(src) //Kudzu exterminated - return - if(!growth_queue) - del(src) //Sanity check - return - if(vines.len >= 250 && !reached_collapse_size) - reached_collapse_size = 1 - if(vines.len >= 30 && !reached_slowdown_size ) - reached_slowdown_size = 1 - - var/length = 0 - if(reached_collapse_size) - length = 0 - else if(reached_slowdown_size) - if(prob(25)) - length = 1 - else - length = 0 - else - length = 1 - length = min( 30 , max( length , vines.len / 5 ) ) - var/i = 0 - var/list/obj/effect/spacevine/queue_end = list() - - for( var/obj/effect/spacevine/SV in growth_queue ) - i++ - queue_end += SV - growth_queue -= SV - if(SV.energy < 2) - if(prob(10)) - SV.grow() - //if(prob(25)) - SV.spread() - if(i >= length) - break - - growth_queue = growth_queue + queue_end - - //sleep(5) - //src.process() - -/obj/effect/spacevine/proc/grow() - switch(energy) - if (0) - src.icon_state = pick("Med1", "Med2", "Med3") - energy = 1 - src.opacity = 1 - if (1) - src.icon_state = pick("Hvy1", "Hvy2", "Hvy3") - energy = 2 - src.density = 1 - -/obj/effect/spacevine/proc/spread() - var/direction = pick(cardinal) - if(istype(get_step(src,direction),/turf/simulated/floor)) - var/turf/simulated/floor/F = get_step(src,direction) - if(!locate(/obj/effect/spacevine,F)) - if(F.Enter(src)) - if(master) - master.spawn_kudzu_piece( F ) - - -/* -/obj/effect/spacevine/proc/Life() - if (!src) return - var/Vspread - if (prob(50)) Vspread = locate(src.x + rand(-1,1),src.y,src.z) - else Vspread = locate(src.x,src.y + rand(-1, 1),src.z) - var/dogrowth = 1 - if (!istype(Vspread, /turf/simulated/floor)) dogrowth = 0 - for(var/obj/O in Vspread) - if (istype(O, /obj/structure/window) || istype(O, /obj/effect/forcefield) || istype(O, /obj/effect/blob) || istype(O, /obj/effect/alien/weeds) || istype(O, /obj/effect/spacevine)) dogrowth = 0 - if (istype(O, /obj/machinery/door/)) - if(O:p_open == 0 && prob(50)) O:open() - else dogrowth = 0 - if (dogrowth == 1) - var/obj/effect/spacevine/B = new /obj/effect/spacevine(Vspread) - B.icon_state = pick("vine-light1", "vine-light2", "vine-light3") - spawn(20) - if(B) - B.Life() - src.growth += 1 - if (src.growth == 10) - src.name = "Thick Space Kudzu" - src.icon_state = pick("vine-med1", "vine-med2", "vine-med3") - src.opacity = 1 - src.waittime = 80 - if (src.growth == 20) - src.name = "Dense Space Kudzu" - src.icon_state = pick("vine-hvy1", "vine-hvy2", "vine-hvy3") - src.density = 1 - spawn(src.waittime) - if (src.growth < 20) src.Life() - -*/ - -/obj/effect/spacevine/ex_act(severity) - switch(severity) - if(1.0) - del(src) - return - if(2.0) - if (prob(90)) - del(src) - return - if(3.0) - if (prob(50)) - del(src) - return - else - return - -/obj/effect/spacevine/temperature_expose(null, temp, volume) +// SPACE VINE OR KUDZU + +/obj/effect/spacevine + name = "Space Kudzu" + desc = "An extremely expansionistic species of vine." + icon = 'kudzu.dmi' + icon_state = "Light1" + anchored = 1 + density = 0 + var/energy = 0 //Energy sounds like an arbitrary-enough variable name. + var/obj/effect/spacevine_controller/master = null + + New() + if(istype(src.loc, /turf/space)) + del(src) + return + + Del() + if(master) + master.vines -= src + master.growth_queue -= src + ..() + + attackby(obj/item/weapon/W as obj, mob/user as mob) + if (!W) return + if (!user) return + if (istype(W, /obj/item/weapon/circular_saw)) del src + if (istype(W, /obj/item/weapon/kitchen/utensil/knife)) del src + if (istype(W, /obj/item/weapon/scalpel)) del src + if (istype(W, /obj/item/weapon/screwdriver)) del src + if (istype(W, /obj/item/weapon/shard)) del src + if (istype(W, /obj/item/weapon/weldingtool)) del src + if (istype(W, /obj/item/weapon/wirecutters)) del src + ..() + +/obj/effect/spacevine_controller + var/list/obj/effect/spacevine/vines = list() + var/list/growth_queue = list() + var/reached_collapse_size + var/reached_slowdown_size + //What this does is that instead of having the grow minimum of 1, required to start growing, the minimum will be 0, + //meaning if you get the kudzu's size to something less than 20 plots, it won't grow anymore. + + New() + if(!istype(src.loc,/turf/simulated/floor)) + del(src) + + spawn_kudzu_piece(src.loc) + processing_objects.Add(src) + + Del() + processing_objects.Remove(src) + ..() + + proc/spawn_kudzu_piece(var/turf/location) + var/obj/effect/spacevine/SV = new(location) + growth_queue += SV + vines += SV + SV.master = src + + process() + if(!vines) + del(src) //Kudzu exterminated + return + if(!growth_queue) + del(src) //Sanity check + return + if(vines.len >= 250 && !reached_collapse_size) + reached_collapse_size = 1 + if(vines.len >= 30 && !reached_slowdown_size ) + reached_slowdown_size = 1 + + var/length = 0 + if(reached_collapse_size) + length = 0 + else if(reached_slowdown_size) + if(prob(25)) + length = 1 + else + length = 0 + else + length = 1 + length = min( 30 , max( length , vines.len / 5 ) ) + var/i = 0 + var/list/obj/effect/spacevine/queue_end = list() + + for( var/obj/effect/spacevine/SV in growth_queue ) + i++ + queue_end += SV + growth_queue -= SV + if(SV.energy < 2) + if(prob(10)) + SV.grow() + //if(prob(25)) + SV.spread() + if(i >= length) + break + + growth_queue = growth_queue + queue_end + + //sleep(5) + //src.process() + +/obj/effect/spacevine/proc/grow() + switch(energy) + if (0) + src.icon_state = pick("Med1", "Med2", "Med3") + energy = 1 + src.opacity = 1 + if (1) + src.icon_state = pick("Hvy1", "Hvy2", "Hvy3") + energy = 2 + src.density = 1 + +/obj/effect/spacevine/proc/spread() + var/direction = pick(cardinal) + if(istype(get_step(src,direction),/turf/simulated/floor)) + var/turf/simulated/floor/F = get_step(src,direction) + if(!locate(/obj/effect/spacevine,F)) + if(F.Enter(src)) + if(master) + master.spawn_kudzu_piece( F ) + + +/* +/obj/effect/spacevine/proc/Life() + if (!src) return + var/Vspread + if (prob(50)) Vspread = locate(src.x + rand(-1,1),src.y,src.z) + else Vspread = locate(src.x,src.y + rand(-1, 1),src.z) + var/dogrowth = 1 + if (!istype(Vspread, /turf/simulated/floor)) dogrowth = 0 + for(var/obj/O in Vspread) + if (istype(O, /obj/structure/window) || istype(O, /obj/effect/forcefield) || istype(O, /obj/effect/blob) || istype(O, /obj/effect/alien/weeds) || istype(O, /obj/effect/spacevine)) dogrowth = 0 + if (istype(O, /obj/machinery/door/)) + if(O:p_open == 0 && prob(50)) O:open() + else dogrowth = 0 + if (dogrowth == 1) + var/obj/effect/spacevine/B = new /obj/effect/spacevine(Vspread) + B.icon_state = pick("vine-light1", "vine-light2", "vine-light3") + spawn(20) + if(B) + B.Life() + src.growth += 1 + if (src.growth == 10) + src.name = "Thick Space Kudzu" + src.icon_state = pick("vine-med1", "vine-med2", "vine-med3") + src.opacity = 1 + src.waittime = 80 + if (src.growth == 20) + src.name = "Dense Space Kudzu" + src.icon_state = pick("vine-hvy1", "vine-hvy2", "vine-hvy3") + src.density = 1 + spawn(src.waittime) + if (src.growth < 20) src.Life() + +*/ + +/obj/effect/spacevine/ex_act(severity) + switch(severity) + if(1.0) + del(src) + return + if(2.0) + if (prob(90)) + del(src) + return + if(3.0) + if (prob(50)) + del(src) + return + else + return + +/obj/effect/spacevine/temperature_expose(null, temp, volume) del src \ No newline at end of file diff --git a/code/game/gamemodes/events/miniblob.dm b/code/game/events/EventProcs/miniblob.dm similarity index 94% rename from code/game/gamemodes/events/miniblob.dm rename to code/game/events/EventProcs/miniblob.dm index 5522f6041f4..b9cd328c257 100644 --- a/code/game/gamemodes/events/miniblob.dm +++ b/code/game/events/EventProcs/miniblob.dm @@ -1,33 +1,33 @@ -/proc/mini_blob_event() - //command_alert("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert") - //world << sound('outbreak5.ogg') - var/turf/T = pick(blobstart) - var/obj/effect/blob/bl = new /obj/effect/blob( T.loc, 30 ) - spawn(0) - bl.Life() - bl.Life() - bl.Life() - bl.Life() - bl.blobdebug = 1 - bl.Life() - blobevent = 1 - spawn(0) - dotheblobbaby() - spawn(3000) - blobevent = 0 - spawn(rand(3000, 6000)) //Delayed announcements to keep the crew on their toes. - command_alert("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert") - world << sound('outbreak5.ogg') - -/proc/dotheblobbaby() - if (blobevent) - if(active_blobs.len) - for(var/i = 1 to 10) - sleep(-1) - if(!active_blobs.len) break - var/obj/effect/blob/B = pick(active_blobs) - if(B.z != 1) - continue - B.Life() - spawn(30) +/proc/mini_blob_event() + //command_alert("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert") + //world << sound('outbreak5.ogg') + var/turf/T = pick(blobstart) + var/obj/effect/blob/bl = new /obj/effect/blob( T.loc, 30 ) + spawn(0) + bl.Life() + bl.Life() + bl.Life() + bl.Life() + bl.blobdebug = 1 + bl.Life() + blobevent = 1 + spawn(0) + dotheblobbaby() + spawn(3000) + blobevent = 0 + spawn(rand(3000, 6000)) //Delayed announcements to keep the crew on their toes. + command_alert("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert") + world << sound('outbreak5.ogg') + +/proc/dotheblobbaby() + if (blobevent) + if(active_blobs.len) + for(var/i = 1 to 10) + sleep(-1) + if(!active_blobs.len) break + var/obj/effect/blob/B = pick(active_blobs) + if(B.z != 1) + continue + B.Life() + spawn(30) dotheblobbaby() \ No newline at end of file diff --git a/code/game/events/EventProcs/misc.dm b/code/game/events/EventProcs/misc.dm new file mode 100644 index 00000000000..93945ec70b4 --- /dev/null +++ b/code/game/events/EventProcs/misc.dm @@ -0,0 +1,71 @@ +/proc/power_failure() + command_alert("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") + world << sound('poweroff.ogg') + for(var/obj/machinery/power/apc/C in world) + if(C.cell && C.z == 1) + C.cell.charge = 0 + for(var/obj/machinery/power/smes/S in world) + if(istype(get_area(S), /area/turret_protected) || S.z != 1) + continue + S.charge = 0 + S.output = 0 + S.online = 0 + S.updateicon() + S.power_change() + for(var/area/A in world) + if(A.name != "Space" && A.name != "Engine Walls" && A.name != "Chemical Lab Test Chamber" && A.name != "Escape Shuttle" && A.name != "Arrival Area" && A.name != "Arrival Shuttle" && A.name != "start area" && A.name != "Engine Combustion Chamber") + A.power_light = 0 + A.power_equip = 0 + A.power_environ = 0 + A.power_change() + +/proc/power_restore() + command_alert("Power has been restored to [station_name()]. We apologize for the inconvenience.", "Power Systems Nominal") + world << sound('poweron.ogg') + for(var/obj/machinery/power/apc/C in world) + if(C.cell && C.z == 1) + C.cell.charge = C.cell.maxcharge + for(var/obj/machinery/power/smes/S in world) + if(S.z != 1) + continue + S.charge = S.capacity + S.output = 200000 + S.online = 1 + S.updateicon() + S.power_change() + for(var/area/A in world) + if(A.name != "Space" && A.name != "Engine Walls" && A.name != "Chemical Lab Test Chamber" && A.name != "space" && A.name != "Escape Shuttle" && A.name != "Arrival Area" && A.name != "Arrival Shuttle" && A.name != "start area" && A.name != "Engine Combustion Chamber") + A.power_light = 1 + A.power_equip = 1 + A.power_environ = 1 + A.power_change() + +/proc/lightsout(isEvent = 0, lightsoutAmount = 1,lightsoutRange = 10) //leave lightsoutAmount as 0 to break ALL lights + if(isEvent) + command_alert("An Electrical storm has been detected in your area, please repair potential electronic overloads.","Electrical Storm Alert") + + if(lightsoutAmount) + var/list/epicentreList = list() + + for(var/i=1,i<=lightsoutAmount,i++) + var/list/possibleEpicentres = list() + for(var/obj/effect/landmark/newEpicentre in world) + if(newEpicentre.name == "lightsout" && !(newEpicentre in epicentreList)) + possibleEpicentres += newEpicentre + if(possibleEpicentres.len) + epicentreList += pick(possibleEpicentres) + else + break + + if(!epicentreList.len) + return + + for(var/obj/effect/landmark/epicentre in epicentreList) + for(var/obj/machinery/power/apc/apc in range(epicentre,lightsoutRange)) + apc.overload_lighting() + + else + for(var/obj/machinery/power/apc/apc in world) + apc.overload_lighting() + + return \ No newline at end of file diff --git a/code/game/gamemodes/events/ninja_abilities.dm b/code/game/events/EventProcs/ninja_abilities.dm similarity index 97% rename from code/game/gamemodes/events/ninja_abilities.dm rename to code/game/events/EventProcs/ninja_abilities.dm index ec08ae9d6fb..fd17477f691 100644 --- a/code/game/gamemodes/events/ninja_abilities.dm +++ b/code/game/events/EventProcs/ninja_abilities.dm @@ -1,429 +1,429 @@ -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -+++++++++++++++++++++++++++++++++// //++++++++++++++++++++++++++++++++++ -==================================SPACE NINJA ABILITIES==================================== -___________________________________________________________________________________________ -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/ - -//=======//SAFETY CHECK//=======// -/* -X is optional, tells the proc to check for specific stuff. C is also optional. -All the procs here assume that the character is wearing the ninja suit if they are using the procs. -They should, as I have made every effort for that to be the case. -In the case that they are not, I imagine the game will run-time error like crazy. -s_cooldown ticks off each second based on the suit recharge proc, in seconds. Default of 1 seconds. Some abilities have no cool down. -*/ -/obj/item/clothing/suit/space/space_ninja/proc/ninjacost(C = 0,X = 0) - var/mob/living/carbon/human/U = affecting - if( (U.stat||U.incorporeal_move)&&X!=3 )//Will not return if user is using an adrenaline booster since you can use them when stat==1. - U << "\red You must be conscious and solid to do this."//It's not a problem of stat==2 since the ninja will explode anyway if they die. - return 1 - else if(C&&cell.charge[s_bombs] smoke bombs remaining." - var/datum/effect/effect/system/bad_smoke_spread/smoke = new /datum/effect/effect/system/bad_smoke_spread() - smoke.set_up(10, 0, U.loc) - smoke.start() - playsound(U.loc, 'bamf.ogg', 50, 2) - s_bombs-- - s_coold = 1 - return - -//=======//9-8 TILE TELEPORT//=======// -//Click to to teleport 9-10 tiles in direction facing. -/obj/item/clothing/suit/space/space_ninja/proc/ninjajaunt() - set name = "Phase Jaunt (10E)" - set desc = "Utilizes the internal VOID-shift device to rapidly transit in direction facing." - set category = "Ninja Ability" - set popup_menu = 0 - - var/C = 100 - if(!ninjacost(C,1)) - var/mob/living/carbon/human/U = affecting - var/turf/destination = get_teleport_loc(U.loc,U,9,1,3,1,0,1) - var/turf/mobloc = get_turf(U.loc)//To make sure that certain things work properly below. - if(destination&&istype(mobloc, /turf))//The turf check prevents unusual behavior. Like teleporting out of cryo pods, cloners, mechs, etc. - spawn(0) - playsound(U.loc, "sparks", 50, 1) - anim(mobloc,src,'mob.dmi',,"phaseout",,U.dir) - - handle_teleport_grab(destination, U) - U.loc = destination - - spawn(0) - spark_system.start() - playsound(U.loc, 'phasein.ogg', 25, 1) - playsound(U.loc, "sparks", 50, 1) - anim(U.loc,U,'mob.dmi',,"phasein",,U.dir) - - spawn(0) - destination.kill_creatures(U)//Any living mobs in teleport area are gibbed. Check turf procs for how it does it. - s_coold = 1 - cell.charge-=(C*10) - else - U << "\red The VOID-shift device is malfunctioning, teleportation failed." - return - -//=======//RIGHT CLICK TELEPORT//=======// -//Right click to teleport somewhere, almost exactly like admin jump to turf. -/obj/item/clothing/suit/space/space_ninja/proc/ninjashift(turf/T in oview()) - set name = "Phase Shift (20E)" - set desc = "Utilizes the internal VOID-shift device to rapidly transit to a destination in view." - set category = null//So it does not show up on the panel but can still be right-clicked. - set src = usr.contents//Fixes verbs not attaching properly for objects. Praise the DM reference guide! - - var/C = 200 - if(!ninjacost(C,1)) - var/mob/living/carbon/human/U = affecting - var/turf/mobloc = get_turf(U.loc)//To make sure that certain things work properly below. - if((!T.density)&&istype(mobloc, /turf)) - spawn(0) - playsound(U.loc, 'sparks4.ogg', 50, 1) - anim(mobloc,src,'mob.dmi',,"phaseout",,U.dir) - - handle_teleport_grab(T, U) - U.loc = T - - spawn(0) - spark_system.start() - playsound(U.loc, 'phasein.ogg', 25, 1) - playsound(U.loc, 'sparks2.ogg', 50, 1) - anim(U.loc,U,'mob.dmi',,"phasein",,U.dir) - - spawn(0)//Any living mobs in teleport area are gibbed. - T.kill_creatures(U) - s_coold = 1 - cell.charge-=(C*10) - else - U << "\red You cannot teleport into solid walls or from solid matter" - return - -//=======//EM PULSE//=======// -//Disables nearby tech equipment. -/obj/item/clothing/suit/space/space_ninja/proc/ninjapulse() - set name = "EM Burst (25E)" - set desc = "Disable any nearby technology with a electro-magnetic pulse." - set category = "Ninja Ability" - set popup_menu = 0 - - var/C = 250 - if(!ninjacost(C,1)) - var/mob/living/carbon/human/U = affecting - playsound(U.loc, 'EMPulse.ogg', 60, 2) - empulse(U, 4, 6) //Procs sure are nice. Slightly weaker than wizard's disable tch. - s_coold = 2 - cell.charge-=(C*10) - return - -//=======//ENERGY BLADE//=======// -//Summons a blade of energy in active hand. -/obj/item/clothing/suit/space/space_ninja/proc/ninjablade() - set name = "Energy Blade (5E)" - set desc = "Create a focused beam of energy in your active hand." - set category = "Ninja Ability" - set popup_menu = 0 - - var/C = 50 - if(!ninjacost(C)) - var/mob/living/carbon/human/U = affecting - if(!kamikaze) - if(!U.get_active_hand()&&!istype(U.get_inactive_hand(), /obj/item/weapon/melee/energy/blade)) - var/obj/item/weapon/melee/energy/blade/W = new() - spark_system.start() - playsound(U.loc, "sparks", 50, 1) - U.put_in_hand(W) - cell.charge-=(C*10) - else - U << "\red You can only summon one blade. Try dropping an item first." - else//Else you can run around with TWO energy blades. I don't know why you'd want to but cool factor remains. - if(!U.get_active_hand()) - var/obj/item/weapon/melee/energy/blade/W = new() - U.put_in_hand(W) - if(!U.get_inactive_hand()) - var/obj/item/weapon/melee/energy/blade/W = new() - U.put_in_inactive_hand(W) - spark_system.start() - playsound(U.loc, "sparks", 50, 1) - s_coold = 1 - return - -//=======//NINJA STARS//=======// -/*Shoots ninja stars at random people. -This could be a lot better but I'm too tired atm.*/ -/obj/item/clothing/suit/space/space_ninja/proc/ninjastar() - set name = "Energy Star (5E)" - set desc = "Launches an energy star at a random living target." - set category = "Ninja Ability" - set popup_menu = 0 - - var/C = 50 - if(!ninjacost(C)) - var/mob/living/carbon/human/U = affecting - var/targets[] = list()//So yo can shoot while yo throw dawg - for(var/mob/living/M in oview(loc)) - if(M.stat) continue//Doesn't target corpses or paralyzed persons. - targets.Add(M) - if(targets.len) - var/mob/living/target=pick(targets)//The point here is to pick a random, living mob in oview to shoot stuff at. - - var/turf/curloc = U.loc - var/atom/targloc = get_turf(target) - if (!targloc || !istype(targloc, /turf) || !curloc) - return - if (targloc == curloc) - return - var/obj/item/projectile/energy/dart/A = new /obj/item/projectile/energy/dart(U.loc) - A.current = curloc - A.yo = targloc.y - curloc.y - A.xo = targloc.x - curloc.x - cell.charge-=(C*10) - A.process() - else - U << "\red There are no targets in view." - return - -//=======//ENERGY NET//=======// -/*Allows the ninja to capture people, I guess. -Must right click on a mob to activate.*/ -/obj/item/clothing/suit/space/space_ninja/proc/ninjanet(mob/living/carbon/M in oview())//Only living carbon mobs. - set name = "Energy Net (20E)" - set desc = "Captures a fallen opponent in a net of energy. Will teleport them to a holding facility after 30 seconds." - set category = null - set src = usr.contents - - var/C = 200 - if(!ninjacost(C,1)&&iscarbon(M)) - var/mob/living/carbon/human/U = affecting - if(M.client)//Monkeys without a client can still step_to() and bypass the net. Also, netting inactive people is lame. - //if(M)//DEBUG - if(!locate(/obj/effect/energy_net) in M.loc)//Check if they are already being affected by an energy net. - for(var/turf/T in getline(U.loc, M.loc)) - if(T.density)//Don't want them shooting nets through walls. It's kind of cheesy. - U << "You may not use an energy net through solid obstacles!" - return - spawn(0) - U.Beam(M,"n_beam",,15) - M.anchored = 1//Anchors them so they can't move. - U.say("Get over here!") - var/obj/effect/energy_net/E = new /obj/effect/energy_net(M.loc) - E.layer = M.layer+1//To have it appear one layer above the mob. - for(var/mob/O in viewers(U, 3)) - O.show_message(text("\red [] caught [] with an energy net!", U, M), 1) - E.affecting = M - E.master = U - spawn(0)//Parallel processing. - E.process(M) - cell.charge-=(C*10) - else - U << "They are already trapped inside an energy net." - else - U << "They will bring no honor to your Clan!" - return - -//=======//ADRENALINE BOOST//=======// -/*Wakes the user so they are able to do their thing. Also injects a decent dose of radium. -Movement impairing would indicate drugs and the like.*/ -/obj/item/clothing/suit/space/space_ninja/proc/ninjaboost() - set name = "Adrenaline Boost" - set desc = "Inject a secret chemical that will counteract all movement-impairing effect." - set category = "Ninja Ability" - set popup_menu = 0 - - if(!ninjacost(,3))//Have to make sure stat is not counted for this ability. - var/mob/living/carbon/human/U = affecting - //Wouldn't need to track adrenaline boosters if there was a miracle injection to get rid of paralysis and the like instantly. - //For now, adrenaline boosters ARE the miracle injection. Well, radium, really. - U.SetParalysis(0) - U.SetStunned(0) - U.SetWeakened(0) - /* - Due to lag, it was possible to adrenaline boost but remain helpless while life.dm resets player stat. - This lead to me and others spamming adrenaline boosters because they failed to kick in on time. - It's technically possible to come back from crit with this but it is very temporary. - Life.dm will kick the player back into unconsciosness the next process loop. - */ - U.stat = 0//At least now you should be able to teleport away or shoot ninja stars. - spawn(30)//Slight delay so the enemy does not immedietly know the ability was used. Due to lag, this often came before waking up. - U.say(pick("A CORNERED FOX IS MORE DANGEROUS THAN A JACKAL!","HURT ME MOOORRREEE!","IMPRESSIVE!")) - spawn(70) - reagents.reaction(U, 2) - reagents.trans_id_to(U, "radium", a_transfer) - U << "\red You are beginning to feel the after-effect of the injection." - a_boost-- - s_coold = 3 - return - -/* -=================================================================================== -<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -=================================================================================== -Or otherwise known as anime mode. Which also happens to be ridiculously powerful. -*/ - -//=======//NINJA MOVEMENT//=======// -//Also makes you move like you're on crack. -/obj/item/clothing/suit/space/space_ninja/proc/ninjawalk() - set name = "Shadow Walk" - set desc = "Combines the VOID-shift and CLOAK-tech devices to freely move between solid matter. Toggle on or off." - set category = "Ninja Ability" - set popup_menu = 0 - - var/mob/living/carbon/human/U = affecting - if(!U.incorporeal_move) - U.incorporeal_move = 2 - U << "\blue You will now phase through solid matter." - else - U.incorporeal_move = 0 - U << "\blue You will no-longer phase through solid matter." - return - -//=======//5 TILE TELEPORT/GIB//=======// -//Allows to gib up to five squares in a straight line. Seriously. -/obj/item/clothing/suit/space/space_ninja/proc/ninjaslayer() - set name = "Phase Slayer" - set desc = "Utilizes the internal VOID-shift device to mutilate creatures in a straight line." - set category = "Ninja Ability" - set popup_menu = 0 - - if(!ninjacost()) - var/mob/living/carbon/human/U = affecting - var/turf/destination = get_teleport_loc(U.loc,U,5) - var/turf/mobloc = get_turf(U.loc)//To make sure that certain things work properly below. - if(destination&&istype(mobloc, /turf)) - U.say("Ai Satsugai!") - spawn(0) - playsound(U.loc, "sparks", 50, 1) - anim(mobloc,U,'mob.dmi',,"phaseout",,U.dir) - - spawn(0) - for(var/turf/T in getline(mobloc, destination)) - spawn(0) - T.kill_creatures(U) - if(T==mobloc||T==destination) continue - spawn(0) - anim(T,U,'mob.dmi',,"phasein",,U.dir) - - handle_teleport_grab(destination, U) - U.loc = destination - - spawn(0) - spark_system.start() - playsound(U.loc, 'phasein.ogg', 25, 1) - playsound(U.loc, "sparks", 50, 1) - anim(U.loc,U,'mob.dmi',,"phasein",,U.dir) - s_coold = 1 - else - U << "\red The VOID-shift device is malfunctioning, teleportation failed." - return - -//=======//TELEPORT BEHIND MOB//=======// -/*Appear behind a randomly chosen mob while a few decoy teleports appear. -This is so anime it hurts. But that's the point.*/ -/obj/item/clothing/suit/space/space_ninja/proc/ninjamirage() - set name = "Spider Mirage" - set desc = "Utilizes the internal VOID-shift device to create decoys and teleport behind a random target." - set category = "Ninja Ability" - set popup_menu = 0 - - if(!ninjacost())//Simply checks for stat. - var/mob/living/carbon/human/U = affecting - var/targets[] - targets = new() - for(var/mob/living/M in oview(6)) - if(M.stat) continue//Doesn't target corpses or paralyzed people. - targets.Add(M) - if(targets.len) - var/mob/living/target=pick(targets) - var/locx - var/locy - var/turf/mobloc = get_turf(target.loc) - var/safety = 0 - switch(target.dir) - if(NORTH) - locx = mobloc.x - locy = (mobloc.y-1) - if(locy<1) - safety = 1 - if(SOUTH) - locx = mobloc.x - locy = (mobloc.y+1) - if(locy>world.maxy) - safety = 1 - if(EAST) - locy = mobloc.y - locx = (mobloc.x-1) - if(locx<1) - safety = 1 - if(WEST) - locy = mobloc.y - locx = (mobloc.x+1) - if(locx>world.maxx) - safety = 1 - else safety=1 - if(!safety&&istype(mobloc, /turf)) - U.say("Kumo no Shinkiro!") - var/turf/picked = locate(locx,locy,mobloc.z) - spawn(0) - playsound(U.loc, "sparks", 50, 1) - anim(mobloc,U,'mob.dmi',,"phaseout",,U.dir) - - spawn(0) - var/limit = 4 - for(var/turf/T in oview(5)) - if(prob(20)) - spawn(0) - anim(T,U,'mob.dmi',,"phasein",,U.dir) - limit-- - if(limit<=0) break - - handle_teleport_grab(picked, U) - U.loc = picked - U.dir = target.dir - - spawn(0) - spark_system.start() - playsound(U.loc, 'phasein.ogg', 25, 1) - playsound(U.loc, "sparks", 50, 1) - anim(U.loc,U,'mob.dmi',,"phasein",,U.dir) - s_coold = 1 - else - U << "\red The VOID-shift device is malfunctioning, teleportation failed." - else - U << "\red There are no targets in view." - return +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++++++++++++++++++++++++++++++++++// //++++++++++++++++++++++++++++++++++ +==================================SPACE NINJA ABILITIES==================================== +___________________________________________________________________________________________ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ + +//=======//SAFETY CHECK//=======// +/* +X is optional, tells the proc to check for specific stuff. C is also optional. +All the procs here assume that the character is wearing the ninja suit if they are using the procs. +They should, as I have made every effort for that to be the case. +In the case that they are not, I imagine the game will run-time error like crazy. +s_cooldown ticks off each second based on the suit recharge proc, in seconds. Default of 1 seconds. Some abilities have no cool down. +*/ +/obj/item/clothing/suit/space/space_ninja/proc/ninjacost(C = 0,X = 0) + var/mob/living/carbon/human/U = affecting + if( (U.stat||U.incorporeal_move)&&X!=3 )//Will not return if user is using an adrenaline booster since you can use them when stat==1. + U << "\red You must be conscious and solid to do this."//It's not a problem of stat==2 since the ninja will explode anyway if they die. + return 1 + else if(C&&cell.charge[s_bombs]
smoke bombs remaining." + var/datum/effect/effect/system/bad_smoke_spread/smoke = new /datum/effect/effect/system/bad_smoke_spread() + smoke.set_up(10, 0, U.loc) + smoke.start() + playsound(U.loc, 'bamf.ogg', 50, 2) + s_bombs-- + s_coold = 1 + return + +//=======//9-8 TILE TELEPORT//=======// +//Click to to teleport 9-10 tiles in direction facing. +/obj/item/clothing/suit/space/space_ninja/proc/ninjajaunt() + set name = "Phase Jaunt (10E)" + set desc = "Utilizes the internal VOID-shift device to rapidly transit in direction facing." + set category = "Ninja Ability" + set popup_menu = 0 + + var/C = 100 + if(!ninjacost(C,1)) + var/mob/living/carbon/human/U = affecting + var/turf/destination = get_teleport_loc(U.loc,U,9,1,3,1,0,1) + var/turf/mobloc = get_turf(U.loc)//To make sure that certain things work properly below. + if(destination&&istype(mobloc, /turf))//The turf check prevents unusual behavior. Like teleporting out of cryo pods, cloners, mechs, etc. + spawn(0) + playsound(U.loc, "sparks", 50, 1) + anim(mobloc,src,'mob.dmi',,"phaseout",,U.dir) + + handle_teleport_grab(destination, U) + U.loc = destination + + spawn(0) + spark_system.start() + playsound(U.loc, 'phasein.ogg', 25, 1) + playsound(U.loc, "sparks", 50, 1) + anim(U.loc,U,'mob.dmi',,"phasein",,U.dir) + + spawn(0) + destination.kill_creatures(U)//Any living mobs in teleport area are gibbed. Check turf procs for how it does it. + s_coold = 1 + cell.charge-=(C*10) + else + U << "\red The VOID-shift device is malfunctioning, teleportation failed." + return + +//=======//RIGHT CLICK TELEPORT//=======// +//Right click to teleport somewhere, almost exactly like admin jump to turf. +/obj/item/clothing/suit/space/space_ninja/proc/ninjashift(turf/T in oview()) + set name = "Phase Shift (20E)" + set desc = "Utilizes the internal VOID-shift device to rapidly transit to a destination in view." + set category = null//So it does not show up on the panel but can still be right-clicked. + set src = usr.contents//Fixes verbs not attaching properly for objects. Praise the DM reference guide! + + var/C = 200 + if(!ninjacost(C,1)) + var/mob/living/carbon/human/U = affecting + var/turf/mobloc = get_turf(U.loc)//To make sure that certain things work properly below. + if((!T.density)&&istype(mobloc, /turf)) + spawn(0) + playsound(U.loc, 'sparks4.ogg', 50, 1) + anim(mobloc,src,'mob.dmi',,"phaseout",,U.dir) + + handle_teleport_grab(T, U) + U.loc = T + + spawn(0) + spark_system.start() + playsound(U.loc, 'phasein.ogg', 25, 1) + playsound(U.loc, 'sparks2.ogg', 50, 1) + anim(U.loc,U,'mob.dmi',,"phasein",,U.dir) + + spawn(0)//Any living mobs in teleport area are gibbed. + T.kill_creatures(U) + s_coold = 1 + cell.charge-=(C*10) + else + U << "\red You cannot teleport into solid walls or from solid matter" + return + +//=======//EM PULSE//=======// +//Disables nearby tech equipment. +/obj/item/clothing/suit/space/space_ninja/proc/ninjapulse() + set name = "EM Burst (25E)" + set desc = "Disable any nearby technology with a electro-magnetic pulse." + set category = "Ninja Ability" + set popup_menu = 0 + + var/C = 250 + if(!ninjacost(C,1)) + var/mob/living/carbon/human/U = affecting + playsound(U.loc, 'EMPulse.ogg', 60, 2) + empulse(U, 4, 6) //Procs sure are nice. Slightly weaker than wizard's disable tch. + s_coold = 2 + cell.charge-=(C*10) + return + +//=======//ENERGY BLADE//=======// +//Summons a blade of energy in active hand. +/obj/item/clothing/suit/space/space_ninja/proc/ninjablade() + set name = "Energy Blade (5E)" + set desc = "Create a focused beam of energy in your active hand." + set category = "Ninja Ability" + set popup_menu = 0 + + var/C = 50 + if(!ninjacost(C)) + var/mob/living/carbon/human/U = affecting + if(!kamikaze) + if(!U.get_active_hand()&&!istype(U.get_inactive_hand(), /obj/item/weapon/melee/energy/blade)) + var/obj/item/weapon/melee/energy/blade/W = new() + spark_system.start() + playsound(U.loc, "sparks", 50, 1) + U.put_in_hand(W) + cell.charge-=(C*10) + else + U << "\red You can only summon one blade. Try dropping an item first." + else//Else you can run around with TWO energy blades. I don't know why you'd want to but cool factor remains. + if(!U.get_active_hand()) + var/obj/item/weapon/melee/energy/blade/W = new() + U.put_in_hand(W) + if(!U.get_inactive_hand()) + var/obj/item/weapon/melee/energy/blade/W = new() + U.put_in_inactive_hand(W) + spark_system.start() + playsound(U.loc, "sparks", 50, 1) + s_coold = 1 + return + +//=======//NINJA STARS//=======// +/*Shoots ninja stars at random people. +This could be a lot better but I'm too tired atm.*/ +/obj/item/clothing/suit/space/space_ninja/proc/ninjastar() + set name = "Energy Star (5E)" + set desc = "Launches an energy star at a random living target." + set category = "Ninja Ability" + set popup_menu = 0 + + var/C = 50 + if(!ninjacost(C)) + var/mob/living/carbon/human/U = affecting + var/targets[] = list()//So yo can shoot while yo throw dawg + for(var/mob/living/M in oview(loc)) + if(M.stat) continue//Doesn't target corpses or paralyzed persons. + targets.Add(M) + if(targets.len) + var/mob/living/target=pick(targets)//The point here is to pick a random, living mob in oview to shoot stuff at. + + var/turf/curloc = U.loc + var/atom/targloc = get_turf(target) + if (!targloc || !istype(targloc, /turf) || !curloc) + return + if (targloc == curloc) + return + var/obj/item/projectile/energy/dart/A = new /obj/item/projectile/energy/dart(U.loc) + A.current = curloc + A.yo = targloc.y - curloc.y + A.xo = targloc.x - curloc.x + cell.charge-=(C*10) + A.process() + else + U << "\red There are no targets in view." + return + +//=======//ENERGY NET//=======// +/*Allows the ninja to capture people, I guess. +Must right click on a mob to activate.*/ +/obj/item/clothing/suit/space/space_ninja/proc/ninjanet(mob/living/carbon/M in oview())//Only living carbon mobs. + set name = "Energy Net (20E)" + set desc = "Captures a fallen opponent in a net of energy. Will teleport them to a holding facility after 30 seconds." + set category = null + set src = usr.contents + + var/C = 200 + if(!ninjacost(C,1)&&iscarbon(M)) + var/mob/living/carbon/human/U = affecting + if(M.client)//Monkeys without a client can still step_to() and bypass the net. Also, netting inactive people is lame. + //if(M)//DEBUG + if(!locate(/obj/effect/energy_net) in M.loc)//Check if they are already being affected by an energy net. + for(var/turf/T in getline(U.loc, M.loc)) + if(T.density)//Don't want them shooting nets through walls. It's kind of cheesy. + U << "You may not use an energy net through solid obstacles!" + return + spawn(0) + U.Beam(M,"n_beam",,15) + M.anchored = 1//Anchors them so they can't move. + U.say("Get over here!") + var/obj/effect/energy_net/E = new /obj/effect/energy_net(M.loc) + E.layer = M.layer+1//To have it appear one layer above the mob. + for(var/mob/O in viewers(U, 3)) + O.show_message(text("\red [] caught [] with an energy net!", U, M), 1) + E.affecting = M + E.master = U + spawn(0)//Parallel processing. + E.process(M) + cell.charge-=(C*10) + else + U << "They are already trapped inside an energy net." + else + U << "They will bring no honor to your Clan!" + return + +//=======//ADRENALINE BOOST//=======// +/*Wakes the user so they are able to do their thing. Also injects a decent dose of radium. +Movement impairing would indicate drugs and the like.*/ +/obj/item/clothing/suit/space/space_ninja/proc/ninjaboost() + set name = "Adrenaline Boost" + set desc = "Inject a secret chemical that will counteract all movement-impairing effect." + set category = "Ninja Ability" + set popup_menu = 0 + + if(!ninjacost(,3))//Have to make sure stat is not counted for this ability. + var/mob/living/carbon/human/U = affecting + //Wouldn't need to track adrenaline boosters if there was a miracle injection to get rid of paralysis and the like instantly. + //For now, adrenaline boosters ARE the miracle injection. Well, radium, really. + U.SetParalysis(0) + U.SetStunned(0) + U.SetWeakened(0) + /* + Due to lag, it was possible to adrenaline boost but remain helpless while life.dm resets player stat. + This lead to me and others spamming adrenaline boosters because they failed to kick in on time. + It's technically possible to come back from crit with this but it is very temporary. + Life.dm will kick the player back into unconsciosness the next process loop. + */ + U.stat = 0//At least now you should be able to teleport away or shoot ninja stars. + spawn(30)//Slight delay so the enemy does not immedietly know the ability was used. Due to lag, this often came before waking up. + U.say(pick("A CORNERED FOX IS MORE DANGEROUS THAN A JACKAL!","HURT ME MOOORRREEE!","IMPRESSIVE!")) + spawn(70) + reagents.reaction(U, 2) + reagents.trans_id_to(U, "radium", a_transfer) + U << "\red You are beginning to feel the after-effect of the injection." + a_boost-- + s_coold = 3 + return + +/* +=================================================================================== +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> +=================================================================================== +Or otherwise known as anime mode. Which also happens to be ridiculously powerful. +*/ + +//=======//NINJA MOVEMENT//=======// +//Also makes you move like you're on crack. +/obj/item/clothing/suit/space/space_ninja/proc/ninjawalk() + set name = "Shadow Walk" + set desc = "Combines the VOID-shift and CLOAK-tech devices to freely move between solid matter. Toggle on or off." + set category = "Ninja Ability" + set popup_menu = 0 + + var/mob/living/carbon/human/U = affecting + if(!U.incorporeal_move) + U.incorporeal_move = 2 + U << "\blue You will now phase through solid matter." + else + U.incorporeal_move = 0 + U << "\blue You will no-longer phase through solid matter." + return + +//=======//5 TILE TELEPORT/GIB//=======// +//Allows to gib up to five squares in a straight line. Seriously. +/obj/item/clothing/suit/space/space_ninja/proc/ninjaslayer() + set name = "Phase Slayer" + set desc = "Utilizes the internal VOID-shift device to mutilate creatures in a straight line." + set category = "Ninja Ability" + set popup_menu = 0 + + if(!ninjacost()) + var/mob/living/carbon/human/U = affecting + var/turf/destination = get_teleport_loc(U.loc,U,5) + var/turf/mobloc = get_turf(U.loc)//To make sure that certain things work properly below. + if(destination&&istype(mobloc, /turf)) + U.say("Ai Satsugai!") + spawn(0) + playsound(U.loc, "sparks", 50, 1) + anim(mobloc,U,'mob.dmi',,"phaseout",,U.dir) + + spawn(0) + for(var/turf/T in getline(mobloc, destination)) + spawn(0) + T.kill_creatures(U) + if(T==mobloc||T==destination) continue + spawn(0) + anim(T,U,'mob.dmi',,"phasein",,U.dir) + + handle_teleport_grab(destination, U) + U.loc = destination + + spawn(0) + spark_system.start() + playsound(U.loc, 'phasein.ogg', 25, 1) + playsound(U.loc, "sparks", 50, 1) + anim(U.loc,U,'mob.dmi',,"phasein",,U.dir) + s_coold = 1 + else + U << "\red The VOID-shift device is malfunctioning, teleportation failed." + return + +//=======//TELEPORT BEHIND MOB//=======// +/*Appear behind a randomly chosen mob while a few decoy teleports appear. +This is so anime it hurts. But that's the point.*/ +/obj/item/clothing/suit/space/space_ninja/proc/ninjamirage() + set name = "Spider Mirage" + set desc = "Utilizes the internal VOID-shift device to create decoys and teleport behind a random target." + set category = "Ninja Ability" + set popup_menu = 0 + + if(!ninjacost())//Simply checks for stat. + var/mob/living/carbon/human/U = affecting + var/targets[] + targets = new() + for(var/mob/living/M in oview(6)) + if(M.stat) continue//Doesn't target corpses or paralyzed people. + targets.Add(M) + if(targets.len) + var/mob/living/target=pick(targets) + var/locx + var/locy + var/turf/mobloc = get_turf(target.loc) + var/safety = 0 + switch(target.dir) + if(NORTH) + locx = mobloc.x + locy = (mobloc.y-1) + if(locy<1) + safety = 1 + if(SOUTH) + locx = mobloc.x + locy = (mobloc.y+1) + if(locy>world.maxy) + safety = 1 + if(EAST) + locy = mobloc.y + locx = (mobloc.x-1) + if(locx<1) + safety = 1 + if(WEST) + locy = mobloc.y + locx = (mobloc.x+1) + if(locx>world.maxx) + safety = 1 + else safety=1 + if(!safety&&istype(mobloc, /turf)) + U.say("Kumo no Shinkiro!") + var/turf/picked = locate(locx,locy,mobloc.z) + spawn(0) + playsound(U.loc, "sparks", 50, 1) + anim(mobloc,U,'mob.dmi',,"phaseout",,U.dir) + + spawn(0) + var/limit = 4 + for(var/turf/T in oview(5)) + if(prob(20)) + spawn(0) + anim(T,U,'mob.dmi',,"phasein",,U.dir) + limit-- + if(limit<=0) break + + handle_teleport_grab(picked, U) + U.loc = picked + U.dir = target.dir + + spawn(0) + spark_system.start() + playsound(U.loc, 'phasein.ogg', 25, 1) + playsound(U.loc, "sparks", 50, 1) + anim(U.loc,U,'mob.dmi',,"phasein",,U.dir) + s_coold = 1 + else + U << "\red The VOID-shift device is malfunctioning, teleportation failed." + else + U << "\red There are no targets in view." + return diff --git a/code/game/gamemodes/events/ninja_equipment.dm b/code/game/events/EventProcs/ninja_equipment.dm similarity index 97% rename from code/game/gamemodes/events/ninja_equipment.dm rename to code/game/events/EventProcs/ninja_equipment.dm index 6c489d87a22..288e3073dc5 100644 --- a/code/game/gamemodes/events/ninja_equipment.dm +++ b/code/game/events/EventProcs/ninja_equipment.dm @@ -1,1456 +1,1456 @@ -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -+++++++++++++++++++++++++++++++++// //++++++++++++++++++++++++++++++++++ -===================================SPACE NINJA EQUIPMENT=================================== -___________________________________________________________________________________________ -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/ - -/* -=================================================================================== -<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -=================================================================================== -*/ - -//=======//NEW AND DEL//=======// - -/obj/item/clothing/suit/space/space_ninja/New() - ..() - verbs += /obj/item/clothing/suit/space/space_ninja/proc/init//suit initialize verb - verbs += /obj/item/clothing/suit/space/space_ninja/proc/ai_instruction//for AIs - verbs += /obj/item/clothing/suit/space/space_ninja/proc/ai_holo - //verbs += /obj/item/clothing/suit/space/space_ninja/proc/display_verb_procs//DEBUG. Doesn't work. - spark_system = new()//spark initialize - spark_system.set_up(5, 0, src) - spark_system.attach(src) - stored_research = new()//Stolen research initialize. - for(var/T in typesof(/datum/tech) - /datum/tech)//Store up on research. - stored_research += new T(src) - var/reagent_amount//reagent initialize - for(var/reagent_id in reagent_list) - reagent_amount += reagent_id == "radium" ? r_maxamount+(a_boost*a_transfer) : r_maxamount//AI can inject radium directly. - reagents = new(reagent_amount) - reagents.my_atom = src - for(var/reagent_id in reagent_list) - reagent_id == "radium" ? reagents.add_reagent(reagent_id, r_maxamount+(a_boost*a_transfer)) : reagents.add_reagent(reagent_id, r_maxamount)//It will take into account radium used for adrenaline boosting. - cell = new/obj/item/weapon/cell/high//The suit should *always* have a battery because so many things rely on it. - cell.charge = 9000//Starting charge should not be higher than maximum charge. It leads to problems with recharging. - -/obj/item/clothing/suit/space/space_ninja/Del() - if(affecting)//To make sure the window is closed. - affecting << browse(null, "window=hack spideros") - if(AI)//If there are AIs present when the ninja kicks the bucket. - killai() - if(hologram)//If there is a hologram - del(hologram.i_attached)//Delete it and the attached image. - del(hologram) - ..() - return - -//Simply deletes all the attachments and self, killing all related procs. -/obj/item/clothing/suit/space/space_ninja/proc/terminate() - del(n_hood) - del(n_gloves) - del(n_shoes) - del(src) - -/obj/item/clothing/suit/space/space_ninja/proc/killai(mob/living/silicon/ai/A = AI) - if(A.client) - A << "\red Self-erase protocol dete-- *bzzzzz*" - A << browse(null, "window=hack spideros") - AI = null - A.death(1)//Kill, deleting mob. - del(A) - return - -//=======//SUIT VERBS//=======// -//Verbs link to procs because verb-like procs have a bug which prevents their use if the arguments are not readily referenced. - -/obj/item/clothing/suit/space/space_ninja/proc/init() - set name = "Initialize Suit" - set desc = "Initializes the suit for field operation." - set category = "Ninja Equip" - - ninitialize() - return - -/obj/item/clothing/suit/space/space_ninja/proc/deinit() - set name = "De-Initialize Suit" - set desc = "Begins procedure to remove the suit." - set category = "Ninja Equip" - - if(s_control&&!s_busy) - deinitialize() - else - affecting << "\red The function did not trigger!" - return - -/obj/item/clothing/suit/space/space_ninja/proc/spideros() - set name = "Display SpiderOS" - set desc = "Utilize built-in computer system." - set category = "Ninja Equip" - - if(s_control&&!s_busy&&!kamikaze) - display_spideros() - else - affecting << "\red The interface is locked!" - return - -/obj/item/clothing/suit/space/space_ninja/proc/stealth() - set name = "Toggle Stealth" - set desc = "Utilize the internal CLOAK-tech device to activate or deactivate stealth-camo." - set category = "Ninja Equip" - - if(s_control&&!s_busy) - toggle_stealth() - else - affecting << "\red Stealth does not appear to work!" - return - -//=======//PROCESS PROCS//=======// - -/obj/item/clothing/suit/space/space_ninja/proc/ntick(mob/living/carbon/human/U = affecting) - set background = 1 - - //Runs in the background while the suit is initialized. - spawn while(cell.charge>=0) - - //Let's check for some safeties. - if(s_initialized&&!affecting) terminate()//Kills the suit and attached objects. - if(!s_initialized) return//When turned off the proc stops. - if(AI&&AI.stat==2)//If there is an AI and it's ded. Shouldn't happen without purging, could happen. - if(!s_control) - ai_return_control()//Return control to ninja if the AI was previously in control. - killai()//Delete AI. - - //Now let's do the normal processing. - if(s_coold) s_coold--//Checks for ability s_cooldown first. - var/A = s_cost//s_cost is the default energy cost each ntick, usually 5. - if(!kamikaze) - if(blade_check(U))//If there is a blade held in hand. - A += s_acost - if(s_active)//If stealth is active. - A += s_acost - else - if(prob(s_delay))//Suit delay is used as probability. May change later. - U.adjustBruteLoss(k_damage)//Default damage done, usually 1. - A = k_cost//kamikaze cost. - cell.charge-=A - if(cell.charge<=0) - if(kamikaze) - U.say("I DIE TO LIVE AGAIN!") - U << browse(null, "window=spideros")//Just in case. - U.death() - return - cell.charge=0 - cancel_stealth() - sleep(10)//Checks every second. - -//=======//INITIALIZE//=======// - -/obj/item/clothing/suit/space/space_ninja/proc/ninitialize(delay = s_delay, mob/living/carbon/human/U = loc) - if(U.mind&&U.mind.assigned_role=="MODE"&&!s_initialized&&!s_busy)//Shouldn't be busy... but anything is possible I guess. - s_busy = 1 - for(var/i,i<7,i++) - switch(i) - if(0) - U << "\blue Now initializing..." - if(1) - if(!lock_suit(U))//To lock the suit onto wearer. - break - U << "\blue Securing external locking mechanism...\nNeural-net established." - if(2) - U << "\blue Extending neural-net interface...\nNow monitoring brain wave pattern..." - if(3) - if(U.stat==2||U.health<=0) - U << "\red FĆAL ÈRrÖR: 344--93#†&&21 BRÄÌN |/|/aVÈ PATT$RN RED\nA-A-aBÖrTÌNG..." - unlock_suit() - break - lock_suit(U,1)//Check for icons. - U.update_clothing() - U << "\blue Linking neural-net interface...\nPattern \green GREEN\blue, continuing operation." - if(4) - U << "\blue VOID-shift device status: ONLINE.\nCLOAK-tech device status: ONLINE." - if(5) - U << "\blue Primary system status: ONLINE.\nBackup system status: ONLINE.\nCurrent energy capacity: [cell.charge]." - if(6) - U << "\blue All systems operational. Welcome to SpiderOS, [U.real_name]." - grant_ninja_verbs() - grant_equip_verbs() - ntick() - sleep(delay) - s_busy = 0 - else - if(!U.mind||U.mind.assigned_role!="MODE")//Your run of the mill persons shouldn't know what it is. Or how to turn it on. - U << "You do not understand how this suit functions. Where the heck did it even come from?" - else if(s_initialized) - U << "\red The suit is already functioning. \black Please report this bug." - else - U << "\red ERROR: \black You cannot use this function at this time." - return - -//=======//DEINITIALIZE//=======// - -/obj/item/clothing/suit/space/space_ninja/proc/deinitialize(delay = s_delay) - if(affecting==loc&&!s_busy) - var/mob/living/carbon/human/U = affecting - if(!s_initialized) - U << "\red The suit is not initialized. \black Please report this bug." - return - if(alert("Are you certain you wish to remove the suit? This will take time and remove all abilities.",,"Yes","No")=="No") - return - if(s_busy||flush) - U << "\red ERROR: \black You cannot use this function at this time." - return - s_busy = 1 - for(var/i = 0,i<7,i++) - switch(i) - if(0) - U << "\blue Now de-initializing..." - remove_kamikaze(U)//Shutdowns kamikaze. - spideros = 0//Spideros resets. - if(1) - U << "\blue Logging off, [U:real_name]. Shutting down SpiderOS." - remove_ninja_verbs() - if(2) - U << "\blue Primary system status: OFFLINE.\nBackup system status: OFFLINE." - if(3) - U << "\blue VOID-shift device status: OFFLINE.\nCLOAK-tech device status: OFFLINE." - cancel_stealth()//Shutdowns stealth. - if(4) - U << "\blue Disconnecting neural-net interface...\greenSuccess\blue." - if(5) - U << "\blue Disengaging neural-net interface...\greenSuccess\blue." - if(6) - U << "\blue Unsecuring external locking mechanism...\nNeural-net abolished.\nOperation status: FINISHED." - blade_check(U,2) - remove_equip_verbs() - unlock_suit() - U.update_clothing() - sleep(delay) - s_busy = 0 - return - -//=======//SPIDEROS PROC//=======// - -/obj/item/clothing/suit/space/space_ninja/proc/display_spideros() - if(!affecting) return//If no mob is wearing the suit. I almost forgot about this variable. - var/mob/living/carbon/human/U = affecting - var/mob/living/silicon/ai/A = AI - var/display_to = s_control ? U : A//Who do we want to display certain messages to? - - var/dat = "SpiderOS" - dat += " Refresh" - if(spideros) - dat += " | Return" - dat += " | Close" - dat += "
" - if(s_control) - dat += "

SpiderOS v.1.337

" - dat += "Welcome, [U.real_name].
" - else - dat += "

SpiderOS v.ERR-RR00123

" - dat += "
" - dat += " Current Time: [round(world.time / 36000)+12]:[(world.time / 600 % 60) < 10 ? add_zero(world.time / 600 % 60, 1) : world.time / 600 % 60]
" - dat += " Battery Life: [round(cell.charge/100)]%
" - dat += " Smoke Bombs: \Roman [s_bombs]
" - dat += " pai Device: " - if(pai) - dat += "Configure" - dat += " | " - dat += "Eject" - else - dat += "None Detected" - dat += "

" - - switch(spideros) - if(0) - dat += "

Available Functions:

" - dat += "" - if(3) - dat += "

Medical Report:

" - if(U.dna) - dat += "Fingerprints: [md5(U.dna.uni_identity)]
" - dat += "Unique identity: [U.dna.unique_enzymes]
" - dat += "

Overall Status: [U.stat > 1 ? "dead" : "[U.health]% healthy"]

" - dat += "

Nutrition Status: [U.nutrition]

" - dat += "Oxygen loss: [U.getOxyLoss()]" - dat += " | Toxin levels: [U.getToxLoss()]
" - dat += "Burn severity: [U.getFireLoss()]" - dat += " | Brute trauma: [U.getBruteLoss()]
" - dat += "Radiation Level: [U.radiation] rad
" - dat += "Body Temperature: [U.bodytemperature-T0C]°C ([U.bodytemperature*1.8-459.67]°F)
" - - for(var/datum/disease/D in U.viruses) - dat += "Warning: Virus Detected. Name: [D.name].Type: [D.spread]. Stage: [D.stage]/[D.max_stages]. Possible Cure: [D.cure].
" - dat += "" - if(1) - dat += "

Atmospheric Scan:

"//Headers don't need breaks. They are automatically placed. - var/turf/T = get_turf_or_move(U.loc) - if (isnull(T)) - dat += "Unable to obtain a reading." - else - var/datum/gas_mixture/environment = T.return_air() - - var/pressure = environment.return_pressure() - var/total_moles = environment.total_moles() - - dat += "Air Pressure: [round(pressure,0.1)] kPa" - - if (total_moles) - var/o2_level = environment.oxygen/total_moles - var/n2_level = environment.nitrogen/total_moles - var/co2_level = environment.carbon_dioxide/total_moles - var/plasma_level = environment.toxins/total_moles - var/unknown_level = 1-(o2_level+n2_level+co2_level+plasma_level) - dat += "
    " - dat += "
  • Nitrogen: [round(n2_level*100)]%
  • " - dat += "
  • Oxygen: [round(o2_level*100)]%
  • " - dat += "
  • Carbon Dioxide: [round(co2_level*100)]%
  • " - dat += "
  • Plasma: [round(plasma_level*100)]%
  • " - dat += "
" - if(unknown_level > 0.01) - dat += "OTHER: [round(unknown_level)]%
" - - dat += "Temperature: [round(environment.temperature-T0C)]°C" - if(2) - if(k_unlock==7||!s_control) - dat += " Hidden Menu" - dat += "

Anonymous Messenger:

"//Anonymous because the receiver will not know the sender's identity. - dat += "

Detected PDAs:

" - dat += "
    " - var/count = 0 - for (var/obj/item/device/pda/P in world) - if (!P.owner||P.toff) - continue - dat += "
  • [P]" - dat += "
  • " - count++ - dat += "
" - if (count == 0) - dat += "None detected.
" - if(32) - dat += "

Hidden Menu:

" - if(s_control) - dat += "Please input password: " - dat += "HERE
" - dat += "
" - dat += "Remember, you will not be able to recharge energy during this function. If energy runs out, the suit will auto self-destruct.
" - dat += "Use with caution. De-initialize the suit when energy is low." - else - //Only leaving this in for funnays. CAN'T LET YOU DO THAT STAR FOX - dat += "WARNING: Hostile runtime intrusion detected: operation locked. The Spider Clan is watching you, INTRUDER." - dat += "ERROR: TARANTULA.v.4.77.12 encryption algorithm detected. Unable to decrypt archive.
" - if(4) - dat += {" -

Ninja Manual:

-
Who they are:
- Space ninjas are a special type of ninja, specifically one of the space-faring type. The vast majority of space ninjas belong to the Spider Clan, a cult-like sect, which has existed for several hundred years. The Spider Clan practice a sort of augmentation of human flesh in order to achieve a more perfect state of being and follow Postmodern Space Bushido. They also kill people for money. Their leaders are chosen from the oldest of the grand-masters, people that have lived a lot longer than any mortal man should.
Being a sect of technology-loving fanatics, the Spider Clan have the very best to choose from in terms of hardware--cybernetic implants, exoskeleton rigs, hyper-capacity batteries, and you get the idea. Some believe that much of the Spider Clan equipment is based on reverse-engineered alien technology while others doubt such claims.
Whatever the case, their technology is absolutely superb. -
How they relate to other SS13 organizations:
-
    -
  • *Nanotrasen and the Syndicate are two sides of the same coin and that coin is valuable.
  • -
  • *The Space Wizard Federation is a problem, mainly because they are an extremely dangerous group of unpredictable individuals--not to mention the wizards hate technology and are in direct opposition of the Spider Clan. Best avoided or left well-enough alone. How to battle: wizards possess several powerful abilities to steer clear off. Blind in particular is a nasty spell--jaunt away if you are blinded and never approach a wizard in melee. Stealth may also work if the wizard is not wearing thermal scanners--don't count on this. Run away if you feel threatened and await a better opportunity.
  • -
  • *Changeling Hivemind: extremely dangerous and to be killed on sight. How to battle: they will likely try to absorb you. Adrenaline boost, then phase shift into them. If you get stung, use SpiderOS to inject counter-agents. Stealth may also work but detecting a changeling is the real battle.
  • -
  • *Xeno Hivemind: their skulls make interesting kitchen decorations and are challenging to best, especially in larger nests. How to battle: they can see through your stealth guise and energy stars will not work on them. Best killed with a Phase Shift or at range. If you happen on a projectile stun weapon, use it and then close in to melee.
  • -
-
The reason they (you) are here:
- Space ninjas are renowned throughout the known controlled space as fearless spies, infiltrators, and assassins. They are sent on missions of varying nature by Nanotrasen, the Syndicate, and other shady organizations and people. To hire a space ninja means serious business. -
Their playstyle:
- A mix of traitor, changeling, and wizard. Ninjas rely on energy, or electricity to be precise, to keep their suits running (when out of energy, a suit hibernates). Suits gain energy from objects or creatures that contain electrical charge. APCs, cell batteries, rechargers, SMES batteries, cyborgs, mechs, and exposed wires are currently supported. Through energy ninjas gain access to special powers--while all powers are tied to the ninja suit, the most useful of them are verb activated--to help them in their mission.
It is a constant struggle for a ninja to remain hidden long enough to recharge the suit and accomplish their objective; despite their arsenal of abilities, ninjas can die like any other. Unlike wizards, ninjas do not possess good crowd control and are typically forced to play more subdued in order to achieve their goals. Some of their abilities are specifically designed to confuse and disorient others.
With that said, it should be perfectly possible to completely flip the fuck out and rampage as a ninja. -
Their powers:
- There are two primary types: Equipment and Abilties. Passive effect are always on. Active effect must be turned on and remain active only when there is energy to do so. Ability costs are listed next to them. - Equipment: cannot be tracked by AI (passive), faster speed (passive), stealth (active), vision switch (passive if toggled), voice masking (passive), SpiderOS (passive if toggled), energy drain (passive if toggled). -
    -
  • Voice masking generates a random name the ninja can use over the radio and in-person. Although, the former use is recommended.
  • -
  • Toggling vision cycles to one of the following: thermal, meson, or darkness vision. The starting mode allows one to scout the identity of those in view, revealing their role. Traitors, revolutionaries, wizards, and other such people will be made known to you.
  • -
  • Stealth, when activated, drains more battery charge and works similarly to a syndicate cloak. The cloak will deactivate when most Abilities are utilized.
  • -
  • On-board AI: The suit is able to download an AI much like an intelicard. Check with SpiderOS for details once downloaded.
  • -
  • SpiderOS is a specialized, PDA-like screen that allows for a small variety of functions, such as injecting healing chemicals directly from the suit. You are using it now, if that was not already obvious. You may also download AI modules directly to the OS.
  • -
- Abilities: -