mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-30 16:47:13 +01:00
Merge pull request #5086 from tgstation/revert-5035-Blue_Cross_Fixes
Revert "Changes a few green crosses to blue on sprites that I missed las...
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
"aa" = (/turf/space,/area/space)
|
||||
"ab" = (/turf/simulated/wall/r_wall,/area/awaymission/academy/headmaster)
|
||||
"ac" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/floor/plating,/area/awaymission/academy/headmaster)
|
||||
"ac" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/headmaster)
|
||||
"ad" = (/obj/structure/filingcabinet/filingcabinet,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
|
||||
"ae" = (/obj/structure/computerframe{anchored = 1},/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
|
||||
"af" = (/obj/structure/table/reinforced,/obj/item/weapon/pen/red,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
|
||||
@@ -92,7 +92,7 @@
|
||||
"bN" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/headmaster)
|
||||
"bO" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/academy/headmaster)
|
||||
"bP" = (/obj/effect/decal/cleanable/cobweb2,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/headmaster)
|
||||
"bQ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating,/area/awaymission/academy/headmaster)
|
||||
"bQ" = (/obj/structure/table/reinforced,/obj/item/device/laser_pointer/upgraded,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
|
||||
"bR" = (/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/academy/headmaster)
|
||||
"bS" = (/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/academy/headmaster)
|
||||
"bT" = (/obj/machinery/autolathe,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor,/area/awaymission/academy/classrooms)
|
||||
@@ -106,7 +106,7 @@
|
||||
"cb" = (/obj/structure/table,/obj/item/weapon/lighter/random,/turf/simulated/floor,/area/awaymission/academy/headmaster)
|
||||
"cc" = (/turf/simulated/floor{icon_state = "dark"},/area/awaymission/academy/headmaster)
|
||||
"cd" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/headmaster)
|
||||
"ce" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/awaymission/academy/headmaster)
|
||||
"ce" = (/obj/item/seeds/eggyseed,/obj/machinery/hydroponics/constructable,/turf/simulated/floor,/area/awaymission/academy/classrooms)
|
||||
"cf" = (/obj/machinery/portable_atmospherics/canister/toxins,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/academy/headmaster)
|
||||
"cg" = (/obj/structure/stool,/obj/machinery/light/small{dir = 4},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/academy/headmaster)
|
||||
"ch" = (/obj/structure/table,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor{icon_state = "floorgrime"},/area/awaymission/academy/classrooms)
|
||||
@@ -148,7 +148,7 @@
|
||||
"cR" = (/obj/machinery/light{dir = 8},/obj/machinery/portable_atmospherics/pump,/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/headmaster)
|
||||
"cS" = (/obj/structure/closet/crate/internals,/obj/item/weapon/tank/oxygen,/obj/item/weapon/tank/oxygen/red,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/academy/headmaster)
|
||||
"cT" = (/obj/structure/closet/crate,/obj/item/weapon/crowbar/red,/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/headmaster)
|
||||
"cU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/cable,/turf/simulated/floor/plating,/area/awaymission/academy/headmaster)
|
||||
"cU" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/headmaster)
|
||||
"cV" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor,/area/awaymission/academy/classrooms)
|
||||
"cW" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor,/area/awaymission/academy/classrooms)
|
||||
"cX" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{icon_state = "floorgrime"},/area/awaymission/academy/classrooms)
|
||||
@@ -158,7 +158,7 @@
|
||||
"db" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
|
||||
"dc" = (/turf/simulated/floor/greengrid,/area/awaymission/academy/classrooms)
|
||||
"dd" = (/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
|
||||
"de" = (/obj/structure/table/woodentable,/obj/item/weapon/staff,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
|
||||
"de" = (/obj/machinery/hydroponics/constructable,/turf/simulated/floor,/area/awaymission/academy/classrooms)
|
||||
"df" = (/turf/simulated/floor{dir = 9; icon_state = "green"},/area/awaymission/academy/classrooms)
|
||||
"dg" = (/turf/simulated/floor{dir = 1; icon_state = "green"},/area/awaymission/academy/classrooms)
|
||||
"dh" = (/obj/machinery/light{dir = 1},/turf/simulated/floor{dir = 1; icon_state = "green"},/area/awaymission/academy/classrooms)
|
||||
@@ -173,8 +173,8 @@
|
||||
"dq" = (/obj/structure/stool/bed/chair/wood/normal{dir = 1},/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
|
||||
"dr" = (/turf/simulated/floor{icon_state = "green"; dir = 8},/area/awaymission/academy/classrooms)
|
||||
"ds" = (/obj/structure/stool,/turf/simulated/floor,/area/awaymission/academy/classrooms)
|
||||
"dt" = (/obj/machinery/hydroponics,/obj/item/seeds/eggyseed,/turf/simulated/floor,/area/awaymission/academy/classrooms)
|
||||
"du" = (/obj/machinery/hydroponics,/turf/simulated/floor,/area/awaymission/academy/classrooms)
|
||||
"dt" = (/obj/structure/table/woodentable,/obj/item/weapon/gun/magic/wand/fireball,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
|
||||
"du" = (/obj/machinery/hydroponics/constructable,/obj/item/seeds/replicapod,/turf/simulated/floor,/area/awaymission/academy/classrooms)
|
||||
"dv" = (/turf/simulated/floor{icon_state = "green"; dir = 4},/area/awaymission/academy/classrooms)
|
||||
"dw" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/effect/landmark{name = "awaystart"},/obj/item/weapon/weldingtool,/turf/simulated/floor/greengrid,/area/awaymission/academy/classrooms)
|
||||
"dx" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/greengrid,/area/awaymission/academy/classrooms)
|
||||
@@ -184,13 +184,13 @@
|
||||
"dB" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor,/area/awaymission/academy/classrooms)
|
||||
"dC" = (/obj/structure/closet/crate/hydroponics/prespawned,/turf/simulated/floor,/area/awaymission/academy/classrooms)
|
||||
"dD" = (/obj/machinery/door/airlock/freezer,/turf/simulated/floor{icon_state = "white"},/area/awaymission/academy/classrooms)
|
||||
"dE" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/awaymission/academy/classrooms)
|
||||
"dE" = (/obj/machinery/light/small{dir = 4},/obj/machinery/chem_master/condimaster,/turf/simulated/floor{icon_state = "white"},/area/awaymission/academy/classrooms)
|
||||
"dF" = (/obj/machinery/mech_bay_recharge_port,/obj/structure/cable,/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
|
||||
"dG" = (/obj/machinery/computer/mech_bay_power_console,/obj/structure/cable,/turf/simulated/floor/greengrid,/area/awaymission/academy/classrooms)
|
||||
"dH" = (/obj/machinery/hydroponics,/obj/item/seeds/replicapod,/turf/simulated/floor,/area/awaymission/academy/classrooms)
|
||||
"dH" = (/obj/machinery/hydroponics/constructable,/obj/item/seeds/bluespacetomatoseed,/turf/simulated/floor,/area/awaymission/academy/classrooms)
|
||||
"dI" = (/obj/structure/table/woodentable,/turf/simulated/floor,/area/awaymission/academy/classrooms)
|
||||
"dJ" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor,/area/awaymission/academy/classrooms)
|
||||
"dK" = (/obj/machinery/hydroponics,/obj/item/seeds/bluespacetomatoseed,/turf/simulated/floor,/area/awaymission/academy/classrooms)
|
||||
"dK" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/bag/tray,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/academy/classrooms)
|
||||
"dL" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor,/area/awaymission/academy/classrooms)
|
||||
"dM" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{icon_state = "green"; dir = 4},/area/awaymission/academy/classrooms)
|
||||
"dN" = (/obj/machinery/door/airlock/freezer,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/awaymission/academy/classrooms)
|
||||
@@ -222,7 +222,7 @@
|
||||
"en" = (/obj/machinery/vending/hydroseeds{slogan_delay = 700},/turf/simulated/floor,/area/awaymission/academy/classrooms)
|
||||
"eo" = (/obj/machinery/vending/hydronutrients,/turf/simulated/floor{icon_state = "green"; dir = 6},/area/awaymission/academy/classrooms)
|
||||
"ep" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/simulated/floor{icon_state = "white"},/area/awaymission/academy/classrooms)
|
||||
"eq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
|
||||
"eq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
|
||||
"er" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{dir = 6; icon_state = "yellow"},/area/awaymission/academy/classrooms)
|
||||
"es" = (/obj/machinery/singularity/academy,/turf/space,/area/space)
|
||||
"et" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "yellow"; dir = 10},/area/awaymission/academy/classrooms)
|
||||
@@ -284,13 +284,13 @@
|
||||
"fx" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/academy/classrooms)
|
||||
"fy" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/carpet,/area/awaymission/academy/classrooms)
|
||||
"fz" = (/obj/machinery/light,/turf/simulated/floor{icon_state = "escape"; dir = 6},/area/awaymission/academy/classrooms)
|
||||
"fA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
|
||||
"fB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
|
||||
"fC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
|
||||
"fA" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/headmaster)
|
||||
"fB" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable,/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/headmaster)
|
||||
"fC" = (/obj/machinery/door/airlock/plasma,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
|
||||
"fD" = (/turf/simulated/wall,/area/awaymission/academy/academyaft)
|
||||
"fE" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
|
||||
"fF" = (/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
|
||||
"fG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
|
||||
"fG" = (/obj/structure/grille,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/structure/cable,/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
|
||||
"fH" = (/obj/machinery/shieldwallgen,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/awaymission/academy/classrooms)
|
||||
"fI" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{icon_state = "whitehall"; dir = 1},/area/awaymission/academy/classrooms)
|
||||
"fJ" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor{icon_state = "whitehall"; dir = 1},/area/awaymission/academy/classrooms)
|
||||
@@ -308,10 +308,10 @@
|
||||
"fV" = (/obj/structure/target_stake,/turf/simulated/floor,/area/awaymission/academy/classrooms)
|
||||
"fW" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
|
||||
"fX" = (/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
|
||||
"fY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
|
||||
"fY" = (/obj/structure/grille,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
|
||||
"fZ" = (/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/awaymission/academy/classrooms)
|
||||
"ga" = (/obj/structure/table,/obj/item/weapon/pen/red,/turf/simulated/floor,/area/awaymission/academy/classrooms)
|
||||
"gb" = (/obj/structure/table,/obj/item/weapon/scalpel,/turf/simulated/floor{icon_state = "whitehall"; dir = 4},/area/awaymission/academy/classrooms)
|
||||
"gb" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor{icon_state = "red"; dir = 5},/area/awaymission/academy/academyaft)
|
||||
"gc" = (/obj/structure/stool/bed/chair/wood/normal,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
|
||||
"gd" = (/obj/structure/bookcase,/obj/item/weapon/book/manual/wiki/engineering_hacking,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
|
||||
"ge" = (/obj/structure/bookcase,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
|
||||
@@ -452,28 +452,28 @@
|
||||
"iJ" = (/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/engine,/area/awaymission/academy/academyaft)
|
||||
"iK" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
|
||||
"iL" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/beach_ball/holoball,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/awaymission/academy/academyaft)
|
||||
"iM" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{icon_state = "red"; dir = 5},/area/awaymission/academy/academyaft)
|
||||
"iN" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
|
||||
"iM" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
|
||||
"iN" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
|
||||
"iO" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
|
||||
"iP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
|
||||
"iP" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable,/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
|
||||
"iQ" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/airless{tag = "icon-white (EAST)"; icon_state = "white"; dir = 4},/area/awaymission/academy/academyaft)
|
||||
"iR" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/device/soulstone,/turf/simulated/floor/airless{tag = "icon-whitered (EAST)"; icon_state = "whitered"; dir = 4},/area/awaymission/academy/academyaft)
|
||||
"iS" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_l"; icon_state = "propulsion_l"},/turf/space,/area/awaymission/academy/academyaft)
|
||||
"iT" = (/obj/structure/shuttle/engine/propulsion,/turf/space,/area/awaymission/academy/academyaft)
|
||||
"iU" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_r"; icon_state = "propulsion_r"},/turf/space,/area/awaymission/academy/academyaft)
|
||||
"iV" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
|
||||
"iW" = (/turf/simulated/floor{icon_state = "red"; dir = 4},/area/awaymission/academy/academyaft)
|
||||
"iX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
|
||||
"iV" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
|
||||
"iW" = (/obj/effect/landmark{name = "awaystart"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/awaymission/academy/academyaft)
|
||||
"iX" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/awaymission/academy/academyaft)
|
||||
"iY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/airless{tag = "icon-white (EAST)"; icon_state = "white"; dir = 4},/area/awaymission/academy/academyaft)
|
||||
"iZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/airless{tag = "icon-whitered (EAST)"; icon_state = "whitered"; dir = 4},/area/awaymission/academy/academyaft)
|
||||
"ja" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
|
||||
"ja" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
|
||||
"jb" = (/obj/structure/table,/obj/item/clothing/glasses/meson/truesight,/turf/simulated/floor,/area/awaymission/academy/academyaft)
|
||||
"jc" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
|
||||
"jd" = (/obj/structure/noticeboard,/turf/simulated/wall,/area/awaymission/academy/academyaft)
|
||||
"je" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
|
||||
"jf" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/airless{tag = "icon-white (EAST)"; icon_state = "white"; dir = 4},/area/awaymission/academy/academyaft)
|
||||
"jg" = (/obj/structure/table,/obj/item/organ/brain{name = "The preserved brain of Harry Houdini"},/turf/simulated/floor/airless{tag = "icon-whitered (EAST)"; icon_state = "whitered"; dir = 4},/area/awaymission/academy/academyaft)
|
||||
"jh" = (/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/awaymission/academy/academyaft)
|
||||
"jh" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/awaymission/academy/academyaft)
|
||||
"ji" = (/turf/simulated/floor{dir = 8; icon_state = "yellow"},/area/awaymission/academy/academyaft)
|
||||
"jj" = (/turf/simulated/floor{dir = 4; icon_state = "yellow"},/area/awaymission/academy/academyaft)
|
||||
"jk" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/airless{tag = "icon-white (EAST)"; icon_state = "white"; dir = 4},/area/awaymission/academy/academyaft)
|
||||
@@ -488,7 +488,7 @@
|
||||
"jt" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/space,/area/space)
|
||||
"ju" = (/obj/machinery/igniter,/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
|
||||
"jv" = (/obj/structure/window/reinforced,/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
|
||||
"jw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/cable,/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
|
||||
"jw" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
|
||||
"jx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
|
||||
"jy" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
|
||||
"jz" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
|
||||
@@ -506,7 +506,7 @@
|
||||
"jL" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/carpet,/area/awaymission/academy/academygate)
|
||||
"jM" = (/turf/simulated/floor/grass,/area/awaymission/academy/academygate)
|
||||
"jN" = (/turf/simulated/floor/carpet,/area/awaymission/academy/academygate)
|
||||
"jO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/floor/plating,/area/awaymission/academy/academygate)
|
||||
"jO" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable,/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
|
||||
"jP" = (/obj/structure/window/reinforced,/turf/simulated/floor/grass,/area/awaymission/academy/academygate)
|
||||
"jQ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/door/window,/turf/simulated/floor/carpet,/area/awaymission/academy/academygate)
|
||||
"jR" = (/obj/machinery/door/window,/turf/simulated/floor/carpet,/area/awaymission/academy/academygate)
|
||||
@@ -534,7 +534,16 @@
|
||||
"kn" = (/obj/machinery/door_control{id = "AcademyGate"; pixel_y = -24},/turf/simulated/floor/carpet{icon_state = "carpetsymbol"},/area/awaymission/academy/academygate)
|
||||
"ko" = (/turf/simulated/floor/carpet{icon_state = "carpetsymbol"},/area/awaymission/academy/academygate)
|
||||
"kp" = (/obj/machinery/door/poddoor/shutters{id = "AcademyGate"},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/awaymission/academy/academygate)
|
||||
|
||||
"kq" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
|
||||
"kr" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
|
||||
"ks" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
|
||||
"kt" = (/obj/structure/table,/obj/item/weapon/scalpel,/turf/simulated/floor,/area/awaymission/academy/classrooms)
|
||||
"ku" = (/obj/structure/table,/obj/item/weapon/lazarus_injector,/turf/simulated/floor{icon_state = "whitehall"; dir = 4},/area/awaymission/academy/classrooms)
|
||||
"kv" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
|
||||
"kw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/academygate)
|
||||
"kx" = (/obj/structure/closet/crate/trashcart,/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/academy/academyaft)
|
||||
"ky" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
|
||||
|
||||
(1,1,1) = {"
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
@@ -561,7 +570,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacakahahahahalamananaoapaqacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacarahahasasatasasasauavawacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaxahasayazaAaBasapaxaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaCahaDasaEaFaFaGasaHahakacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaCahaDasaEaFaFaGasaHahbQacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaxahasaIaJaFaKasapaxaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaLahahasasasasasasapahakacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaMahahahahaNahalanavahafacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
@@ -577,37 +586,37 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaRaaaaaaaaaRaRaRaRaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaRaRaaaaaRaRaRaRaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaOaOaOaaaaabasasasasbobpasasasasabaaaaaOaOaOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaaaaaaaRaRaRaRaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaOaOaaaOaaaaabbqbqbqbqahapbqbqbqbqabaaaaaOaaaOaOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaRaRaaaaaaaaaaaaaaaaaabrbsbtbububvbsbrbrbrbrbrbrbrbrbrbrabbqbwbxbqahapbqbwbxbqababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaRaaaaaaaaaaaaaaaaaabrbrbybzbAbAbBbybCbDbEbFbFbFbFbFbFbGasbHbIbJbqahapbqbIbJbKasbLbMbNbObPbQbRbSababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrbTbybAbAbAbAbUbybDbVbWbXbYbYbZbYbVasbqcacbbqahapbqbqbqbqabcccdccasascebScfcgabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrchbybAcibAbAbybybDbVbYbYbYbWbYbYbVasbqbqbqbqahapahahahahcjckclcmascncebSbRcoabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaRaaaaaaaaaaaaaaaaaabrbrbybzbAbAbBbybCbDbEbFbFbFbFbFbFbGasbHbIbJbqahapbqbIbJbKasbLbMbNbObPfAbRbSababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrbTbybAbAbAbAbUbybDbVbWbXbYbYbZbYbVasbqcacbbqahapbqbqbqbqabcccdccasasfBbScfcgabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrchbybAcibAbAbybybDbVbYbYbYbWbYbYbVasbqbqbqbqahapahahahahcjckclcmascnfBbSbRcoabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrcpbUbAbAbAbAbycqbDcrbYbYbYbYbYbYcrasbqcscsbqahapctahctahabcccdcccucvcwbSbScxabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrcybybAbAbAbAbybybDczcAbYbYbYbYbYcBasbqcCcCbqahcDanananancjbNcEckcFascebSbRcoabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrcGbybAbAcHbAbybUbDczcIcIcIcIcIcIcBasbqcJbqbqahapbqbqbqbqabccckccckcccecfbScgabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrcybybAbAbAbAbybybDczcAbYbYbYbYbYcBasbqcCcCbqahcDananananfCbNcEckcFasfBbSbRcoabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrcGbybAbAcHbAbybUbDczcIcIcIcIcIcIcBasbqcJbqbqahapbqbqbqbqabccckccckccfBcfbScgabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrcKbycLbAbAcMbybUbDcNcOcOcOcOcOcOcPascQbwbxbqahapbqbwbxbKascRccckcScTcUbSbSababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrcVcWcXcXcXcXcYbybDcZdadadadadadadbasbqbIbJbqahapbqbIbJbqasasasasasasasasasabbrbrbrbrbrbraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrdcdcdcbUbUbycKbybDdadadddadddadedaasbqbqbqbqahapbqbqbqbqasdfdgdhdidgdgdgdhdgdjbDdkdkdlbrbraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrdmdndobUbybycKdpbDdadadqdadqdadqdaasaFaFaFaFahapaFaFaFaFasdrdsdtbydsdubybybydvbDdkdkdkdkbraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrdcdcdcbUbUbycKbybDdadadddadddadtdaasbqbqbqbqahapbqbqbqbqasdfdgdhdidgdgdgdhdgdjbDdkdkdlbrbraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrdmdndobUbybycKdpbDdadadqdadqdadqdaasaFaFaFaFahapaFaFaFaFasdrdscebydsdebybybydvbDdkdkdkdkbraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrdwdxdycWcWcWdzbybDdadadadadddadddaasaFdAdAaFahapaFdAdAaFasdrbybybybybybydBdCdvdDdkdkdkdEbraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrdFdndGbUbybycKbybDdadadadadqdadqdaasaFdAdAaFahapaFdAdAaFasdrdsdubydsdHbydIdJdvbDdkdkdkdkbraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrdcdcdcbybUbycKbybDdadadadadadadadaasaFdAdAaFahapaFdAdAaFasdrbybybybybybydKdLdMdNdOdPdkdQbraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrbrbrbrbDbDbDdRdSbDbDbDdTdTbDbDbDbDbDasasasasasahapasasasasasdrdsdubybydUbybydVdvbDdWdXdkdQbraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrdFdndGbUbybycKbybDdadadadadqdadqdaasaFdAdAaFahapaFdAdAaFasdrdsdebydsdubydIdJdvbDdkdkdkdkbraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrdcdcdcbybUbycKbybDdadadadadadadadaasaFdAdAaFahapaFdAdAaFasdrbybybybybybydHdLdMdNdOdPdkdQbraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrbrbrbrbDbDbDdRdSbDbDbDdTdTbDbDbDbDbDasasasasasahapasasasasasdrdsdebybydUbybydVdvbDdWdXdkdQbraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrdYdYbrdZeaebecedeeefegeheheheheheiehefehehehehejekehehehehbDelememememembybyeneobDdWdXdkepbraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabreqeqbreresetecedeheheheheheheheheueheheheheheheheuehehehehbDbDbDbDbDbDbDevevbDbDbDbDewbDbrbraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaexeybAbAezbyeAbybyedehejejejejejejejekejejejejejejejekejejejehbDeBeBeBeCeDeBeBeBeBeEeFeFeGeFbrbraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHbrbAbAeqeIeIeIeJedehejeKeLejeKeLejeMeLejeKeLejeKeLekeKeLejeNbDeBeBeBeOeBeBeBeBeBeEeFeFeGePbraOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHbrbAbAeqeIeIeIeJedehejeKeLejeKeLejeMeLejeKeLejeKeLekeKeLejeNbDeBeBeBeOeBeBeBeBeBdKeFeFeGePbraOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHbrbAbAeqeQeQeQeRedehejeSeTejeSeTejeUeTejeSeTejeSeTekeSeTejeheVeBeBeBeWeBeCeBeBeBeEeFeFeGeXbraOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeYeybAbAezbyeZbybyedehejejejejejejejekejejejfafbfbfbfcfbfbfbfdfefffffffffffgfffffffhfififjfkbraOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabreqeqbrflesfmecedeheheheheheheheheueheheheuehehehehehehehehbDeBfnfofpeBeWeBeBeBeEeFeFeFfqbraOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrdYdYbrfrfsftecfufvfdfdfdfdfwehehfxfdfdfdfyejehehejejehehehbDeBeBeBeBfzeBeBeBeBeEeFeFeFbrbraOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrbrbrbrbrbrbDdRdSbDbDbDbDbDfAfBfBfCbDbDfDfEfFfDfDfFfFfDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbrbraOaOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrbAbAbAfGfHfIfJfKfKfLbDfMdadadadadabDfNfEfFfNfNfFfFfNbDfOfPfQfOfOczfRfSfTfUbybyfVbrbraOaaaOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrfWfXbAfYfZbybybygagbbDdagcdagdgedafGgfggfFfNfNfFfFfNbDghgigjgkghczbyglbybybybybrbraOaOaaaOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaaaaaaaaaaaaaaaaaaaaaabrgmbAbAgnfZbygobybygpbDdadddadadadafYfNfFfFfNfNfFfFfNbDghgqghghghczfRfSbybyfVbrbraOaaaOaaaOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaRaRaaaaaaaaaaaaaaaaaabrgrgrgrfYfZbydsbybygsbDgtdqdagegudafYfNfFfFfNfNfFfFgvbDgwgqghghghczbygxbygybrbraOaaaaaOaaaOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaRaRaaaaaaaaaaaaaaaaaabrgzgzgzfYfZbygobygogpbDdagcdadadadafAgfgAgBfNfNfFfFfNbDghgqgCgDgEczgFfSfVbrbraOaaaaaaaOaaaOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrbrbrbrbrbrbDdRdSbDbDbDbDbDeqeqeqeqbDbDfDfEfFfDfDfFfFfDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbrbraOaOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrbAbAbAksfHfIfJfKfKfLbDfMdadadadadabDfNfEfFfNfNfFfFkxbDfOfPfQfOfOczfRfSfTfUbybyfVbrbraOaaaOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrfWfXbAjwfZbybybygakubDdagcdagdgedakrgfggfFfNfNfFfFfNbDghgigjgkghczbyglbybybybybrbraOaOaaaOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaaaaaaaaaaaaaaaaaaaaaabrgmbAbAgnfZbygobybygpbDdadddadadadajOfNfFfFfNfNfFfFfNbDghgqghghghczfRfSbybyfVbrbraOaaaOaaaOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaRaRaaaaaaaaaaaaaaaaaabrgrgrgrjwfZbydsbybygsbDgtdqdagegudajOfNfFfFfNfNfFfFgvbDgwgqghghghczbygxbygybrbraOaaaaaOaaaOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaRaRaaaaaaaaaaaaaaaaaabrgzgzgzjwfZbyktbygogpbDdagcdadadadakqgfgAgBfNfNfFfFfNbDghgqgCgDgEczgFfSfVbrbraOaaaaaaaOaaaOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaRaaaaaaaaaaaaaaaaaaaabrbAgGbAgnfZbydsbydsgpbDdadddagHgIdabDfNfFfEfNfNfFfFfNbDghgqgJgJgJczbygKbrbraOaaaaaaaaaOaaaOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaaaaaaaaaaaaaaaaaaaaaabrgLbAbAfYfZbygobygogpbDdadqdadadadagMfFfFgNgfgfgAgAgAgOgPgQgEgEgRczgSbrbraOaaaaaaaaaaaOaaaOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrbAbAgGfAgTgUgVgUgVdkbDdadadadadadabDfNfFfEfNfNfFfFfNbDghghgJgJgJczbrbraOaaaaaaaaaaaaaOaaaOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaaaaaaaaaaaaaaaaaaaaaabrgLbAbAjwfZbygobygogpbDdadqdadadadagMfFfFgNgfgfgAgAgAgOgPgQgEgEgRczgSbrbraOaaaaaaaaaaaOaaaOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrbAbAgGkvgTgUgVgUgVdkbDdadadadadadabDfNfFfEfNfNfFfFfNbDghghgJgJgJczbrbraOaaaaaaaaaaaaaOaaaOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagWgWgWgWgWgWgWgWgWgWgWgWfDfDfDfDfDfDfDfDfDgXfDfDgYfDfDfDfDfDfDfDfDfDgWgWgWgWgWgWgWgWgWgWgWgWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagWgZhahbhbhchdhehfgWhggWhhhihihjhihihkfFfFfEfFfFfFfFfFhhhihihjhihihlgWhggWhmhnhohphqhrgZgZgWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagWgZhshthbhuhihvhwhxhyhxhzhAhAhAhAhAhBgAgAhChDgAgAgAgAhzhAhAhAhAhAhEhxhFhxhdhGhmhigZgZhHgZgWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
@@ -622,21 +631,21 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagWgWgWgWiDgWgWaagWipififiqfDfDfDhRichRfEfFhRichRfDfDfDitififiugWaagWgWiDgWgWgWgWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagWiEiFiGiGgWaOgWififififiliHfDhRhRiIggfFhRhRhRfDixilififififgWaOgWiGiGiFiJgWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaaaaaaaaaaaaaaaaaaaaaaaagWiGiGiGiGgWaOgWgWgWfDfDfDfDfDfDfDgXfDfDgYfDfDfDfDfDfDfDgWgWgWaOgWiGiGiGiGgWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaaaaaaaaaaaaaaaaaaaaaaaagWiKiKiKiKgWaaaaaagWiLiMiNgfiOgAgAhCgAgAgAgAgAgAgfiPiQiRgWaaaaaagWiKiKiKiKgWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaaaaaaaRaRaaaaaaaaaaaaaaaaaagWiSiTiTiUgWaaaaaaiVhiiWiXfNfEfFfFfFfFfFfFfFfFfFfNiXiYiZjaaaaaaagWiSiTiTiUgWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagWjbiWiXfNjcfDfDjdfDfDjdfDfDjefNiXjfjggWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiVhijhiXfNfEfFjihihihihijjfFfFfNiXjkiZjlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagWjmjniXfNfEfFjojpjpjpjpjqfFfFfNiXjrjsgWjtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagWgWjuiXfNfEjvfFfFfFfFfFfFjvfFfNiXjugWgWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagWgWjwfNjxesjyfFfFfFfFjzesjyfNjwgWgWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaaaaaaaaaaaaaaaaaaaaaaaagWiKiKiKiKgWaaaaaagWiLgbfYgfiOgAgAhCgAgAgAgAgAgAgffGiQiRgWaaaaaagWiKiKiKiKgWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaaaaaaaRaRaaaaaaaaaaaaaaaaaagWiSiTiTiUgWaaaaaaiVhAjhiPfNfEfFfFfFfFfFfFfFfFfFfNiNiYiZjaaaaaaagWiSiTiTiUgWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagWjbiXiPfNjcfDfDjdfDfDjdfDfDjefNiNjfjggWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiVhAiWiPfNfEfFjihihihihijjfFfFfNiNjkiZjlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagWjmjniPfNfEfFjojpjpjpjpjqfFfFfNiNjrjsgWjtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagWgWjuiPfNfEjvfFfFfFfFfFfFjvfFfNiNjugWgWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagWgWiMfNjxesjyfFfFfFfFjzesjyfNiMgWgWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagWgWfNjAjBgAgBfFfFfFfFjCfFfNgWgWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagWfNfNfNfNfEfFfFfFfNfNfNfNgWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagWfNjDjEfNfEfFfFfFfNjFjGfNgWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagWiVgWgWgWjHgWgWjIgWgWgWiVgWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagWkygWgWgWjHgWgWjIgWgWgWkygWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajJjJjKjLjMjMjNjKjJjJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajOjMjLjMjMjNjMjOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajOjMjLjMjMjNjMjOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajOjPjQjPjPjRjPjOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakwjMjLjMjMjNjMkwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakwjMjLjMjMjNjMkwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakwjPjQjPjPjRjPkwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajJjJjNjSjTjTjTjUjJjJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajJjJjNjNjVjNjNjWjXjYjJjJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajJjNjNjZkajWjWjWkbkcjNjJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
@@ -665,3 +674,4 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
"}
|
||||
|
||||
|
||||
+267
-256
File diff suppressed because it is too large
Load Diff
@@ -63,6 +63,7 @@
|
||||
#define ui_drone_drop "CENTER+1:18,SOUTH:5" //maintenance drones
|
||||
#define ui_drone_pull "CENTER+2:2,SOUTH:5" //maintenance drones
|
||||
#define ui_drone_storage "CENTER-2:14,SOUTH:5" //maintenance drones
|
||||
#define ui_drone_head "CENTER-3:14,SOUTH:5" //maintenance drones
|
||||
|
||||
//Lower right, persistant menu
|
||||
#define ui_drop_throw "EAST-1:28,SOUTH+1:7"
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
/datum/hud/proc/drone_hud(ui_style = 'icons/mob/screen_midnight.dmi')
|
||||
adding = list()
|
||||
|
||||
var/obj/screen/using
|
||||
var/obj/screen/inventory/inv_box
|
||||
|
||||
using = new /obj/screen()
|
||||
using.name = "drop"
|
||||
using.icon = ui_style
|
||||
using.icon_state = "act_drop"
|
||||
using.screen_loc = ui_drone_drop
|
||||
using.layer = 19
|
||||
adding += using
|
||||
|
||||
mymob.pullin = new /obj/screen()
|
||||
mymob.pullin.icon = ui_style
|
||||
mymob.pullin.icon_state = "pull0"
|
||||
mymob.pullin.name = "pull"
|
||||
mymob.pullin.screen_loc = ui_drone_pull
|
||||
adding += mymob.pullin
|
||||
|
||||
inv_box = new /obj/screen/inventory()
|
||||
inv_box.name = "r_hand"
|
||||
inv_box.icon = ui_style
|
||||
inv_box.icon_state = "hand_r_inactive"
|
||||
if(mymob && !mymob.hand) //Hand being true means the LEFT hand is active
|
||||
inv_box.icon_state = "hand_r_active"
|
||||
inv_box.screen_loc = ui_rhand
|
||||
inv_box.slot_id = slot_r_hand
|
||||
inv_box.layer = 19
|
||||
r_hand_hud_object = inv_box
|
||||
adding += inv_box
|
||||
|
||||
inv_box = new /obj/screen/inventory()
|
||||
inv_box.name = "l_hand"
|
||||
inv_box.icon = ui_style
|
||||
inv_box.icon_state = "hand_l_inactive"
|
||||
if(mymob && mymob.hand) //Hand being true means the LEFT hand is active
|
||||
inv_box.icon_state = "hand_l_active"
|
||||
inv_box.screen_loc = ui_lhand
|
||||
inv_box.slot_id = slot_l_hand
|
||||
inv_box.layer = 19
|
||||
l_hand_hud_object = inv_box
|
||||
adding += inv_box
|
||||
|
||||
inv_box = new /obj/screen/inventory()
|
||||
inv_box.name = "internal storage"
|
||||
inv_box.icon = ui_style
|
||||
inv_box.icon_state = "suit_storage"
|
||||
inv_box.screen_loc = ui_drone_storage
|
||||
inv_box.slot_id = "drone_storage_slot"
|
||||
inv_box.layer = 19
|
||||
adding += inv_box
|
||||
|
||||
inv_box = new /obj/screen/inventory()
|
||||
inv_box.name = "head/mask"
|
||||
inv_box.icon = ui_style
|
||||
inv_box.icon_state = "mask"
|
||||
inv_box.screen_loc = ui_drone_head
|
||||
inv_box.slot_id = slot_head
|
||||
inv_box.layer = 19
|
||||
adding += inv_box
|
||||
|
||||
using = new /obj/screen/inventory()
|
||||
using.name = "hand"
|
||||
using.icon = ui_style
|
||||
using.icon_state = "swap_1_m"
|
||||
using.screen_loc = ui_swaphand1
|
||||
using.layer = 19
|
||||
adding += using
|
||||
|
||||
using = new /obj/screen/inventory()
|
||||
using.name = "hand"
|
||||
using.icon = ui_style
|
||||
using.icon_state = "swap_2"
|
||||
using.screen_loc = ui_swaphand2
|
||||
using.layer = 19
|
||||
adding += using
|
||||
|
||||
mymob.zone_sel = new /obj/screen/zone_sel()
|
||||
mymob.zone_sel.icon = ui_style
|
||||
mymob.zone_sel.update_icon()
|
||||
|
||||
mymob.client.screen = null
|
||||
mymob.client.screen += adding
|
||||
@@ -31,79 +31,3 @@
|
||||
|
||||
mymob.client.screen += list(blobpwrdisplay, blobhealthdisplay)
|
||||
|
||||
/datum/hud/proc/drone_hud(ui_style = 'icons/mob/screen_midnight.dmi')
|
||||
adding = list()
|
||||
|
||||
var/obj/screen/using
|
||||
var/obj/screen/inventory/inv_box
|
||||
|
||||
using = new /obj/screen()
|
||||
using.name = "drop"
|
||||
using.icon = ui_style
|
||||
using.icon_state = "act_drop"
|
||||
using.screen_loc = ui_drone_drop
|
||||
using.layer = 19
|
||||
adding += using
|
||||
|
||||
mymob.pullin = new /obj/screen()
|
||||
mymob.pullin.icon = ui_style
|
||||
mymob.pullin.icon_state = "pull0"
|
||||
mymob.pullin.name = "pull"
|
||||
mymob.pullin.screen_loc = ui_drone_pull
|
||||
adding += mymob.pullin
|
||||
|
||||
inv_box = new /obj/screen/inventory()
|
||||
inv_box.name = "r_hand"
|
||||
inv_box.icon = ui_style
|
||||
inv_box.icon_state = "hand_r_inactive"
|
||||
if(mymob && !mymob.hand) //Hand being true means the LEFT hand is active
|
||||
inv_box.icon_state = "hand_r_active"
|
||||
inv_box.screen_loc = ui_rhand
|
||||
inv_box.slot_id = slot_r_hand
|
||||
inv_box.layer = 19
|
||||
r_hand_hud_object = inv_box
|
||||
adding += inv_box
|
||||
|
||||
inv_box = new /obj/screen/inventory()
|
||||
inv_box.name = "l_hand"
|
||||
inv_box.icon = ui_style
|
||||
inv_box.icon_state = "hand_l_inactive"
|
||||
if(mymob && mymob.hand) //Hand being true means the LEFT hand is active
|
||||
inv_box.icon_state = "hand_l_active"
|
||||
inv_box.screen_loc = ui_lhand
|
||||
inv_box.slot_id = slot_l_hand
|
||||
inv_box.layer = 19
|
||||
l_hand_hud_object = inv_box
|
||||
adding += inv_box
|
||||
|
||||
inv_box = new /obj/screen/inventory()
|
||||
inv_box.name = "internal storage"
|
||||
inv_box.icon = ui_style
|
||||
inv_box.icon_state = "suit_storage"
|
||||
inv_box.screen_loc = ui_drone_storage
|
||||
inv_box.slot_id = "drone_storage_slot"
|
||||
inv_box.layer = 19
|
||||
adding += inv_box
|
||||
|
||||
using = new /obj/screen/inventory()
|
||||
using.name = "hand"
|
||||
using.icon = ui_style
|
||||
using.icon_state = "swap_1_m"
|
||||
using.screen_loc = ui_swaphand1
|
||||
using.layer = 19
|
||||
adding += using
|
||||
|
||||
using = new /obj/screen/inventory()
|
||||
using.name = "hand"
|
||||
using.icon = ui_style
|
||||
using.icon_state = "swap_2"
|
||||
using.screen_loc = ui_swaphand2
|
||||
using.layer = 19
|
||||
adding += using
|
||||
|
||||
mymob.zone_sel = new /obj/screen/zone_sel()
|
||||
mymob.zone_sel.icon = ui_style
|
||||
mymob.zone_sel.update_icon()
|
||||
|
||||
mymob.client.screen = null
|
||||
mymob.client.screen += adding
|
||||
|
||||
@@ -45,11 +45,6 @@ var/global/pipe_processing_killed = 0
|
||||
del(master_controller)
|
||||
master_controller = src
|
||||
|
||||
createRandomZlevel() //probably shouldn't be here!
|
||||
|
||||
for(var/i=0, i<max_secret_rooms, i++)
|
||||
make_mining_asteroid_secret()
|
||||
|
||||
if(!events)
|
||||
new /datum/controller/event()
|
||||
|
||||
@@ -119,6 +114,10 @@ var/global/pipe_processing_killed = 0
|
||||
if(!Failsafe) new /datum/controller/failsafe()
|
||||
|
||||
var/currenttime = world.timeofday
|
||||
|
||||
if((last_tick_timeofday - currenttime) > 1e5) //midnight rollover protection
|
||||
last_tick_timeofday -= MIDNIGHT_ROLLOVER
|
||||
|
||||
last_tick_duration = (currenttime - last_tick_timeofday) / 10
|
||||
last_tick_timeofday = currenttime
|
||||
|
||||
|
||||
@@ -48,10 +48,11 @@ var/global/datum/shuttle_controller/emergency_shuttle/emergency_shuttle
|
||||
else
|
||||
last_call_loc = null
|
||||
|
||||
priority_announce("The emergency shuttle has been called. [red_alert ? "Red Alert state confirmed: Dispatching priority shuttle. " : "" ]It will arrive in [round(emergency_shuttle.timeleft()/60)] minutes.[emergency_reason][emergency_shuttle.last_call_loc ? "\n\nCall signal traced. Results can be viewed on any communcations console." : "" ]", null, 'sound/AI/shuttlecalled.ogg', "Priority")
|
||||
|
||||
settimeleft(SHUTTLEARRIVETIME*coeff)
|
||||
online = 1
|
||||
|
||||
priority_announce("The emergency shuttle has been called. [red_alert ? "Red Alert state confirmed: Dispatching priority shuttle. " : "" ]It will arrive in [round(emergency_shuttle.timeleft()/60)] minutes.[emergency_reason][emergency_shuttle.last_call_loc ? "\n\nCall signal traced. Results can be viewed on any communcations console." : "" ]", null, 'sound/AI/shuttlecalled.ogg', "Priority")
|
||||
|
||||
if(always_fake_recall)
|
||||
|
||||
if ((seclevel2num(get_security_level()) == SEC_LEVEL_RED))
|
||||
|
||||
@@ -76,6 +76,7 @@ var/global/datum/controller/supply_shuttle/supply_shuttle
|
||||
|
||||
/obj/machinery/computer/supplycomp
|
||||
name = "supply shuttle console"
|
||||
desc = "Used to order supplies."
|
||||
icon = 'icons/obj/computer.dmi'
|
||||
icon_state = "supply"
|
||||
req_access = list(access_cargo)
|
||||
@@ -89,6 +90,7 @@ var/global/datum/controller/supply_shuttle/supply_shuttle
|
||||
|
||||
/obj/machinery/computer/ordercomp
|
||||
name = "supply ordering console"
|
||||
desc = "Used to order supplies from cargo staff."
|
||||
icon = 'icons/obj/computer.dmi'
|
||||
icon_state = "request"
|
||||
circuit = /obj/item/weapon/circuitboard/ordercomp
|
||||
|
||||
@@ -118,6 +118,11 @@
|
||||
if(teleatom.Move(destturf))
|
||||
playSpecials(destturf,effectout,soundout)
|
||||
|
||||
if(isliving(teleatom))
|
||||
var/mob/living/L = teleatom
|
||||
if(L.buckled)
|
||||
L.buckled.unbuckle()
|
||||
|
||||
destarea.Entered(teleatom)
|
||||
|
||||
return 1
|
||||
|
||||
+44
-10
@@ -65,9 +65,6 @@ var/list/uplink_items = list()
|
||||
if (!user || user.stat || user.restrained())
|
||||
return 0
|
||||
|
||||
if (!( istype(user, /mob/living/carbon/human)))
|
||||
return 0
|
||||
|
||||
// If the uplink's holder is in the user's contents
|
||||
if ((U.loc in user.contents || (in_range(U.loc, user) && istype(U.loc.loc, /turf))))
|
||||
user.set_machine(U)
|
||||
@@ -76,9 +73,10 @@ var/list/uplink_items = list()
|
||||
|
||||
var/obj/I = spawn_item(get_turf(user), U)
|
||||
|
||||
if(istype(I, /obj/item) && ishuman(user))
|
||||
var/mob/living/carbon/human/A = user
|
||||
A.put_in_any_hand_if_possible(I)
|
||||
if(istype(I, /obj/item))
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/A = user
|
||||
A.put_in_any_hand_if_possible(I)
|
||||
|
||||
if(istype(I,/obj/item/weapon/storage/box/) && I.contents.len>0)
|
||||
for(var/atom/o in I)
|
||||
@@ -124,7 +122,7 @@ var/list/uplink_items = list()
|
||||
|
||||
/datum/uplink_item/dangerous/machinegun
|
||||
name = "L6 Squad Automatic Weapon"
|
||||
desc = "A traditionally constructed machine gun made by AA-2531. This deadly weapon has a massive 50-round magazine of 7.62×51mm ammunition."
|
||||
desc = "A traditionally constructed machine gun made by AA-2531. This deadly weapon has a massive 50-round magazine of 7.62×51mm ammunition."
|
||||
item = /obj/item/weapon/gun/projectile/automatic/l6_saw
|
||||
cost = 40
|
||||
gamemodes = list(/datum/game_mode/nuclear)
|
||||
@@ -238,9 +236,30 @@ var/list/uplink_items = list()
|
||||
item = /obj/item/ammo_box/magazine/m10mm
|
||||
cost = 1
|
||||
|
||||
/datum/uplink_item/ammo/bullstun
|
||||
name = "Ammo-12g Stun Slug"
|
||||
desc = "An additional 8-round stun slug magazine for use in the Bulldog shotgun. Saying that they're non-lethal would be lying."
|
||||
item = /obj/item/ammo_box/magazine/m12g
|
||||
cost = 2
|
||||
gamemodes = list(/datum/game_mode/nuclear)
|
||||
|
||||
/datum/uplink_item/ammo/bullbuck
|
||||
name = "Ammo-12g Buckshot"
|
||||
desc = "An alternative 8-round buckshot magazine for use in the Bulldog shotgun. Front towards enemy."
|
||||
item = /obj/item/ammo_box/magazine/m12g/buckshot
|
||||
cost = 2
|
||||
gamemodes = list(/datum/game_mode/nuclear)
|
||||
|
||||
/datum/uplink_item/ammo/bulldragon
|
||||
name = "Ammo-12g Dragon's Breath"
|
||||
desc = "An alternative 8-round dragon's breath magazine for use in the Bulldog shotgun. I'm a fire starter, twisted fire starter!"
|
||||
item = /obj/item/ammo_box/magazine/m12g/dragon
|
||||
cost = 3
|
||||
gamemodes = list(/datum/game_mode/nuclear)
|
||||
|
||||
/datum/uplink_item/ammo/machinegun
|
||||
name = "Ammo-7.62×51mm"
|
||||
desc = "A 50-round magazine of 7.62×51mm ammunition for use in the L6 SAW machinegun. By the time you need to use this, you'll already be on a pile of corpses."
|
||||
name = "Ammo-7.62×51mm"
|
||||
desc = "A 50-round magazine of 7.62×51mm ammunition for use in the L6 SAW machinegun. By the time you need to use this, you'll already be on a pile of corpses."
|
||||
item = /obj/item/ammo_box/magazine/m762
|
||||
cost = 12
|
||||
gamemodes = list(/datum/game_mode/nuclear)
|
||||
@@ -293,7 +312,7 @@ var/list/uplink_items = list()
|
||||
|
||||
/datum/uplink_item/stealthy_tools/chameleon_stamp
|
||||
name = "Chameleon Stamp"
|
||||
desc = "A stamp that can be activated to imitate an official Nanotrasen Stamp™. The disguised stamp will work exactly like the real stamp and will allow you to forge false documents to gain access or equipment; \
|
||||
desc = "A stamp that can be activated to imitate an official Nanotrasen Stamp. The disguised stamp will work exactly like the real stamp and will allow you to forge false documents to gain access or equipment; \
|
||||
it can also be used in a washing machine to forge clothing."
|
||||
item = /obj/item/weapon/stamp/chameleon
|
||||
cost = 1
|
||||
@@ -330,6 +349,13 @@ var/list/uplink_items = list()
|
||||
cost = 2
|
||||
surplus = 90
|
||||
|
||||
/datum/uplink_item/stealthy_tools/smugglersatchel
|
||||
name = "Smuggler's Satchel"
|
||||
desc = "This satchel is thin enough to be hidden in the gap between plating and tiling, great for stashing your stolen goods. Comes with a crowbar and a floor tile inside."
|
||||
item = /obj/item/weapon/storage/backpack/satchel_flat
|
||||
cost = 2
|
||||
surplus = 30
|
||||
|
||||
// DEVICE AND TOOLS
|
||||
|
||||
/datum/uplink_item/device_tools
|
||||
@@ -388,6 +414,14 @@ var/list/uplink_items = list()
|
||||
item = /obj/item/weapon/aiModule/syndicate
|
||||
cost = 14
|
||||
|
||||
/datum/uplink_item/device_tools/magboots
|
||||
name = "Blood-Red Magboots"
|
||||
desc = "A pair of magnetic boots with a Syndicate paintjob that assist with freer movement in space or on-station during gravitational generator failures. \
|
||||
These reverse-engineered knockoffs of Nanotrasen's 'Advanced Magboots' slow you down in simulated-gravity environments much like the standard issue variety."
|
||||
item = /obj/item/clothing/shoes/magboots/syndie
|
||||
cost = 5
|
||||
gamemodes = list(/datum/game_mode/nuclear)
|
||||
|
||||
/datum/uplink_item/device_tools/c4
|
||||
name = "Composition C-4"
|
||||
desc = "C-4 is plastic explosive of the common variety Composition C. You can use it to breach walls or connect a signaler to its wiring to make it remotely detonable. \
|
||||
|
||||
@@ -137,13 +137,11 @@ var/const/AIRLOCK_WIRE_LIGHT = 2048
|
||||
//raises them if they are down (only if power's on)
|
||||
if(!A.locked)
|
||||
A.locked = 1
|
||||
for(var/mob/M in range(1, A))
|
||||
M << "You hear a click from the bottom of the door."
|
||||
A.audible_message("You hear a click from the bottom of the door.", null, 1)
|
||||
else
|
||||
if(A.hasPower()) //only can raise bolts if power's on
|
||||
A.locked = 0
|
||||
for(var/mob/M in range(1, A))
|
||||
M << "You hear a click from the bottom of the door."
|
||||
A.audible_message("You hear a click from the bottom of the door.", null, 1)
|
||||
A.update_icon()
|
||||
|
||||
if(AIRLOCK_WIRE_BACKUP_POWER1 || AIRLOCK_WIRE_BACKUP_POWER2)
|
||||
|
||||
@@ -559,6 +559,8 @@ proc/process_ghost_teleport_locs()
|
||||
icon_state = "atmos"
|
||||
|
||||
//Maintenance
|
||||
/area/maintenance
|
||||
ambientsounds = list('sound/ambience/ambimaint1.ogg', 'sound/ambience/ambimaint2.ogg', 'sound/ambience/ambimaint3.ogg', 'sound/ambience/ambimaint4.ogg', 'sound/ambience/ambimaint5.ogg')
|
||||
|
||||
/area/maintenance/atmos_control
|
||||
name = "Atmospherics Maintenance"
|
||||
@@ -1056,6 +1058,10 @@ proc/process_ghost_teleport_locs()
|
||||
name = "\improper Firing Range"
|
||||
icon_state = "firingrange"
|
||||
|
||||
/area/security/transfer
|
||||
name = "\improper Transfer Centre"
|
||||
icon_state = "armory"
|
||||
|
||||
/*
|
||||
New()
|
||||
..()
|
||||
@@ -1389,6 +1395,10 @@ proc/process_ghost_teleport_locs()
|
||||
name = "Emergency Storage"
|
||||
icon_state = "storage"
|
||||
|
||||
/area/ai_monitored/storage/satellite
|
||||
name = "\improper AI Satellite Maint"
|
||||
icon_state = "storage"
|
||||
|
||||
|
||||
/area/turret_protected/
|
||||
ambientsounds = list('sound/ambience/ambimalf.ogg')
|
||||
@@ -1411,7 +1421,7 @@ proc/process_ghost_teleport_locs()
|
||||
|
||||
/area/aisat
|
||||
name = "\improper AI Satellite Exterior"
|
||||
icon_state = "storage"
|
||||
icon_state = "yellow"
|
||||
|
||||
/area/turret_protected/aisat_interior
|
||||
name = "\improper AI Satellite Antechamber"
|
||||
|
||||
@@ -68,6 +68,12 @@
|
||||
a.cancelAlarm("Power", src, source)
|
||||
else
|
||||
a.triggerAlarm("Power", src, cameras, source)
|
||||
for(var/mob/living/simple_animal/drone/D in mob_list)
|
||||
if(D.z == source.z)
|
||||
if(state == 1)
|
||||
D.cancelAlarm("Power", src, source)
|
||||
else
|
||||
D.triggerAlarm("Power", src, cameras, source)
|
||||
return
|
||||
|
||||
/area/proc/atmosalert(danger_level)
|
||||
@@ -86,11 +92,15 @@
|
||||
aiPlayer.triggerAlarm("Atmosphere", src, cameras, src)
|
||||
for(var/obj/machinery/computer/station_alert/a in machines)
|
||||
a.triggerAlarm("Atmosphere", src, cameras, src)
|
||||
for(var/mob/living/simple_animal/drone/D in mob_list)
|
||||
D.triggerAlarm("Atmosphere", src, cameras, src)
|
||||
else if (src.atmosalm == 2)
|
||||
for(var/mob/living/silicon/aiPlayer in player_list)
|
||||
aiPlayer.cancelAlarm("Atmosphere", src, src)
|
||||
for(var/obj/machinery/computer/station_alert/a in machines)
|
||||
a.cancelAlarm("Atmosphere", src, src)
|
||||
for(var/mob/living/simple_animal/drone/D in mob_list)
|
||||
D.cancelAlarm("Atmosphere", src, src)
|
||||
src.atmosalm = danger_level
|
||||
return 1
|
||||
return 0
|
||||
@@ -111,6 +121,8 @@
|
||||
else if(!D.density)
|
||||
spawn(0)
|
||||
D.close()
|
||||
for(var/obj/machinery/firealarm/F in RA)
|
||||
F.update_icon()
|
||||
for (var/obj/machinery/camera/C in RA)
|
||||
cameras += C
|
||||
|
||||
@@ -118,6 +130,8 @@
|
||||
a.triggerAlarm("Fire", src, cameras, src)
|
||||
for (var/mob/living/silicon/aiPlayer in player_list)
|
||||
aiPlayer.triggerAlarm("Fire", src, cameras, src)
|
||||
for (var/mob/living/simple_animal/drone/D in mob_list)
|
||||
D.triggerAlarm("Fire", src, cameras, src)
|
||||
return
|
||||
|
||||
/area/proc/firereset()
|
||||
@@ -133,11 +147,15 @@
|
||||
else if(D.density)
|
||||
spawn(0)
|
||||
D.open()
|
||||
for(var/obj/machinery/firealarm/F in RA)
|
||||
F.update_icon()
|
||||
|
||||
for (var/mob/living/silicon/aiPlayer in player_list)
|
||||
aiPlayer.cancelAlarm("Fire", src, src)
|
||||
for (var/obj/machinery/computer/station_alert/a in machines)
|
||||
a.cancelAlarm("Fire", src, src)
|
||||
for (var/mob/living/simple_animal/drone/D in mob_list)
|
||||
D.cancelAlarm("Fire", src, src)
|
||||
return
|
||||
|
||||
/area/proc/burglaralert(var/obj/trigger)
|
||||
|
||||
@@ -113,8 +113,8 @@ proc/make_mining_asteroid_secret()
|
||||
if("speakeasy")
|
||||
theme = "speakeasy"
|
||||
floortypes = list(/turf/simulated/floor,/turf/simulated/floor/wood)
|
||||
treasureitems = list(/obj/item/weapon/melee/energy/sword/pirate=1,/obj/item/weapon/gun/projectile/revolver/doublebarrel=1, /obj/machinery/reagentgrinder=2,
|
||||
/obj/structure/reagent_dispensers/beerkeg=5, /obj/machinery/computer/security/wooden_tv=4, /obj/machinery/vending/coffee=3)
|
||||
treasureitems = list(/obj/item/weapon/melee/energy/sword/pirate=1,/obj/item/weapon/gun/projectile/revolver/doublebarrel=1,/obj/item/weapon/storage/backpack/satchel_flat=1,
|
||||
/obj/machinery/reagentgrinder=2, /obj/machinery/computer/security/wooden_tv=4, /obj/machinery/vending/coffee=3)
|
||||
fluffitems = list(/obj/structure/table/woodentable=2,/obj/structure/reagent_dispensers/beerkeg=1,/obj/item/weapon/spacecash/c500=4,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/shaker=1,/obj/item/weapon/reagent_containers/food/drinks/bottle/wine=3,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey=3,/obj/item/clothing/shoes/laceup=2)
|
||||
|
||||
@@ -0,0 +1,145 @@
|
||||
|
||||
|
||||
////////////////
|
||||
// BLOB SPORE //
|
||||
////////////////
|
||||
|
||||
/mob/living/simple_animal/hostile/blobspore
|
||||
name = "blob"
|
||||
desc = "Some blob thing."
|
||||
icon = 'icons/mob/blob.dmi'
|
||||
icon_state = "blobpod"
|
||||
icon_living = "blobpod"
|
||||
pass_flags = PASSBLOB
|
||||
health = 40
|
||||
maxHealth = 40
|
||||
melee_damage_lower = 2
|
||||
melee_damage_upper = 4
|
||||
attacktext = "hits"
|
||||
attack_sound = 'sound/weapons/genhit1.ogg'
|
||||
var/obj/effect/blob/factory/factory = null
|
||||
var/is_zombie = 0
|
||||
faction = list("blob")
|
||||
min_oxy = 0
|
||||
max_oxy = 0
|
||||
min_tox = 0
|
||||
max_tox = 0
|
||||
min_co2 = 0
|
||||
max_co2 = 0
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
minbodytemp = 0
|
||||
maxbodytemp = 360
|
||||
|
||||
/mob/living/simple_animal/hostile/blobspore/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
..()
|
||||
adjustBruteLoss(Clamp(0.01 * exposed_temperature, 1, 5))
|
||||
|
||||
/mob/living/simple_animal/hostile/blobspore/blob_act()
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/hostile/blobspore/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if(istype(mover, /obj/effect/blob))
|
||||
return 1
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/blobspore/New(loc, var/obj/effect/blob/factory/linked_node)
|
||||
if(istype(linked_node))
|
||||
factory = linked_node
|
||||
factory.spores += src
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/blobspore/Life()
|
||||
|
||||
if(!is_zombie && isturf(src.loc))
|
||||
for(var/mob/living/carbon/human/H in oview(src,1)) //Only for corpse right next to/on same tile
|
||||
if(H.stat == DEAD)
|
||||
Zombify(H)
|
||||
break
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/blobspore/proc/Zombify(var/mob/living/carbon/human/H)
|
||||
if(H.wear_suit)
|
||||
var/obj/item/clothing/suit/armor/A = H.wear_suit
|
||||
if(A.armor && A.armor["melee"])
|
||||
maxHealth += A.armor["melee"] //That zombie's got armor, I want armor!
|
||||
maxHealth += 40
|
||||
health = maxHealth
|
||||
name = "blob zombie"
|
||||
desc = "A shambling corpse animated by the blob."
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 15
|
||||
icon = H.icon
|
||||
icon_state = "husk_s"
|
||||
H.hair_style = null
|
||||
H.update_hair()
|
||||
overlays = H.overlays
|
||||
overlays += image('icons/mob/blob.dmi', icon_state = "blob_head")
|
||||
H.loc = src
|
||||
is_zombie = 1
|
||||
loc.visible_message("<span class='warning'> The corpse of [H.name] suddenly rises!</span>")
|
||||
|
||||
/mob/living/simple_animal/hostile/blobspore/Die()
|
||||
// On death, create a small smoke of harmful gas (s-Acid)
|
||||
var/datum/effect/effect/system/chem_smoke_spread/S = new
|
||||
var/turf/location = get_turf(src)
|
||||
|
||||
// Create the reagents to put into the air, s-acid is yellow and stings a little
|
||||
create_reagents(25)
|
||||
reagents.add_reagent("spore", 25)
|
||||
|
||||
// Attach the smoke spreader and setup/start it.
|
||||
S.attach(location)
|
||||
S.set_up(reagents, 1, 1, location, 15, 1) // only 1-2 smoke cloud
|
||||
S.start()
|
||||
|
||||
qdel(src)
|
||||
|
||||
/mob/living/simple_animal/hostile/blobspore/Destroy()
|
||||
if(factory)
|
||||
factory.spores -= src
|
||||
if(contents)
|
||||
for(var/mob/M in contents)
|
||||
M.loc = src.loc
|
||||
..()
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/blobbernaut
|
||||
name = "blobbernaut"
|
||||
desc = "Some HUGE blob thing."
|
||||
icon = 'icons/mob/blob.dmi'
|
||||
icon_state = "blobbernaut"
|
||||
icon_living = "blobbernaut"
|
||||
icon_dead = "blobbernaut_death"
|
||||
pass_flags = PASSBLOB
|
||||
health = 240
|
||||
maxHealth = 240
|
||||
melee_damage_lower = 25
|
||||
melee_damage_upper = 25
|
||||
attacktext = "hits"
|
||||
attack_sound = 'sound/effects/blobattack.ogg'
|
||||
faction = list("blob")
|
||||
min_oxy = 0
|
||||
max_oxy = 0
|
||||
min_tox = 0
|
||||
max_tox = 0
|
||||
min_co2 = 0
|
||||
max_co2 = 0
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
minbodytemp = 0
|
||||
maxbodytemp = 360
|
||||
force_threshold = 10
|
||||
environment_smash = 3
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/blobbernaut/AttackingTarget()
|
||||
..()
|
||||
if(isliving(target))
|
||||
var/mob/living/L = target
|
||||
if(L.reagents)
|
||||
L.reagents.add_reagent("spore_burning", 10)
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/blobbernaut/blob_act()
|
||||
return
|
||||
@@ -33,102 +33,3 @@
|
||||
new/mob/living/simple_animal/hostile/blobspore(src.loc, src)
|
||||
return 0
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/blobspore
|
||||
name = "blob"
|
||||
desc = "Some blob thing."
|
||||
icon = 'icons/mob/blob.dmi'
|
||||
icon_state = "blobpod"
|
||||
icon_living = "blobpod"
|
||||
pass_flags = PASSBLOB
|
||||
health = 40
|
||||
maxHealth = 40
|
||||
melee_damage_lower = 2
|
||||
melee_damage_upper = 4
|
||||
attacktext = "hits"
|
||||
attack_sound = 'sound/weapons/genhit1.ogg'
|
||||
var/obj/effect/blob/factory/factory = null
|
||||
var/is_zombie = 0
|
||||
faction = list("blob")
|
||||
min_oxy = 0
|
||||
max_oxy = 0
|
||||
min_tox = 0
|
||||
max_tox = 0
|
||||
min_co2 = 0
|
||||
max_co2 = 0
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
minbodytemp = 0
|
||||
maxbodytemp = 360
|
||||
|
||||
/mob/living/simple_animal/hostile/blobspore/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
..()
|
||||
adjustBruteLoss(Clamp(0.01 * exposed_temperature, 1, 5))
|
||||
|
||||
/mob/living/simple_animal/hostile/blobspore/blob_act()
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/hostile/blobspore/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if(istype(mover, /obj/effect/blob))
|
||||
return 1
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/blobspore/New(loc, var/obj/effect/blob/factory/linked_node)
|
||||
if(istype(linked_node))
|
||||
factory = linked_node
|
||||
factory.spores += src
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/blobspore/Life()
|
||||
|
||||
if(!is_zombie && isturf(src.loc))
|
||||
for(var/mob/living/carbon/human/H in oview(src,1)) //Only for corpse right next to/on same tile
|
||||
if(H.stat == DEAD)
|
||||
Zombify(H)
|
||||
break
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/blobspore/proc/Zombify(var/mob/living/carbon/human/H)
|
||||
if(H.wear_suit)
|
||||
var/obj/item/clothing/suit/armor/A = H.wear_suit
|
||||
if(A.armor && A.armor["melee"])
|
||||
maxHealth += A.armor["melee"] //That zombie's got armor, I want armor!
|
||||
maxHealth += 40
|
||||
health = maxHealth
|
||||
name = "blob zombie"
|
||||
desc = "A shambling corpse animated by the blob."
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 15
|
||||
icon = H.icon
|
||||
icon_state = "husk_s"
|
||||
H.hair_style = null
|
||||
H.update_hair()
|
||||
overlays = H.overlays
|
||||
overlays += image('icons/mob/blob.dmi', icon_state = "blob_head")
|
||||
H.loc = src
|
||||
is_zombie = 1
|
||||
loc.visible_message("<span class='warning'> The corpse of [H.name] suddenly rises!</span>")
|
||||
|
||||
/mob/living/simple_animal/hostile/blobspore/Die()
|
||||
// On death, create a small smoke of harmful gas (s-Acid)
|
||||
var/datum/effect/effect/system/chem_smoke_spread/S = new
|
||||
var/turf/location = get_turf(src)
|
||||
|
||||
// Create the reagents to put into the air, s-acid is yellow and stings a little
|
||||
create_reagents(25)
|
||||
reagents.add_reagent("spore", 25)
|
||||
|
||||
// Attach the smoke spreader and setup/start it.
|
||||
S.attach(location)
|
||||
S.set_up(reagents, 1, 1, location, 15, 1) // only 1-2 smoke cloud
|
||||
S.start()
|
||||
|
||||
qdel(src)
|
||||
|
||||
/mob/living/simple_animal/hostile/blobspore/Destroy()
|
||||
if(factory)
|
||||
factory.spores -= src
|
||||
if(contents)
|
||||
for(var/mob/M in contents)
|
||||
M.loc = src.loc
|
||||
..()
|
||||
|
||||
@@ -160,6 +160,35 @@
|
||||
return
|
||||
|
||||
|
||||
/mob/camera/blob/verb/create_blobbernaut()
|
||||
set category = "Blob"
|
||||
set name = "Create Blobbernaut (20)"
|
||||
set desc = "Create a powerful blob-being, a Blobbernaut"
|
||||
|
||||
var/turf/T = get_turf(src)
|
||||
|
||||
if(!T)
|
||||
return
|
||||
|
||||
var/obj/effect/blob/B = locate(/obj/effect/blob) in T
|
||||
if(!B)
|
||||
src << "You must be on a blob!"
|
||||
return
|
||||
|
||||
if(!istype(B, /obj/effect/blob/factory))
|
||||
src << "Unable to use this blob, find a factory blob."
|
||||
return
|
||||
|
||||
if(!can_buy(20))
|
||||
return
|
||||
|
||||
var/mob/living/simple_animal/hostile/blobbernaut/blobber = new /mob/living/simple_animal/hostile/blobbernaut (get_turf(B))
|
||||
if(blobber)
|
||||
B.Destroy()
|
||||
|
||||
return
|
||||
|
||||
|
||||
/mob/camera/blob/verb/relocate_core()
|
||||
set category = "Blob"
|
||||
set name = "Relocate Core (80)"
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
pre_setup_before_jobs = 1
|
||||
|
||||
|
||||
var/AI_win_timeleft = 1800 //started at 1800, in case I change this for testing round end.
|
||||
var/AI_win_timeleft = 5400 //started at 5400, in case I change this for testing round end.
|
||||
var/malf_mode_declared = 0
|
||||
var/station_captured = 0
|
||||
var/to_nuke_or_not_to_nuke = 0
|
||||
@@ -98,8 +98,8 @@
|
||||
return
|
||||
|
||||
/datum/game_mode/malfunction/process()
|
||||
if (apcs >= 3 && malf_mode_declared)
|
||||
AI_win_timeleft -= ((apcs/6)*last_tick_duration) //Victory timer now de-increments based on how many APCs are hacked. --NeoFite
|
||||
if ((apcs > 0) && malf_mode_declared)
|
||||
AI_win_timeleft -= apcs * last_tick_duration //Victory timer de-increments based on how many APCs are hacked
|
||||
..()
|
||||
if (AI_win_timeleft<=0)
|
||||
check_win()
|
||||
|
||||
@@ -151,6 +151,7 @@
|
||||
var/list/foundIDs = synd_mind.current.search_contents_for(/obj/item/weapon/card/id)
|
||||
if(foundIDs.len)
|
||||
for(var/obj/item/weapon/card/id/ID in foundIDs)
|
||||
ID.name = "lead agent card"
|
||||
ID.access += access_syndicate_leader
|
||||
else
|
||||
message_admins("Warning: Nuke Ops spawned without access to leave their spawn area!")
|
||||
|
||||
@@ -134,12 +134,12 @@
|
||||
new /obj/item/weapon/gun/magic/staff/chaos(get_turf(H))
|
||||
H << "<span class='notice'>You suddenly feel lucky.</span>"
|
||||
|
||||
/mob/proc/summonevents()
|
||||
/proc/summonevents()
|
||||
if(events) //if there isn't something is very wrong
|
||||
if(!events.wizardmode)
|
||||
events.toggleWizardmode()
|
||||
events.frequency_lower = 600 //1 minute lower bound
|
||||
events.frequency_upper = 3000 //5 minutes upper bound
|
||||
events.toggleWizardmode()
|
||||
events.reschedule()
|
||||
|
||||
else //Speed it up
|
||||
@@ -148,4 +148,6 @@
|
||||
if(events.frequency_upper < events.frequency_lower)
|
||||
events.frequency_upper = events.frequency_lower //this can't happen unless somehow multiple spellbooks are used, but just in case
|
||||
|
||||
events.reschedule()
|
||||
events.reschedule()
|
||||
message_admins("Summon Events intensifies, events will now occur every [events.frequency_lower / 600] to [events.frequency_upper / 600] minutes.")
|
||||
log_game("Summon Events was increased!")
|
||||
|
||||
@@ -305,7 +305,7 @@
|
||||
temp = "You have cast summon magic."
|
||||
if("summonevents")
|
||||
feedback_add_details("wizard_spell_learned","SE") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
|
||||
H.summonevents()
|
||||
summonevents()
|
||||
max_uses--
|
||||
temp = "You have cast summon events."
|
||||
if("staffchange")
|
||||
|
||||
@@ -32,11 +32,12 @@ Captain
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/head/caphat(H), slot_head)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(H), slot_glasses)
|
||||
|
||||
//Equip ID box
|
||||
//Equip ID box & telebaton
|
||||
if(H.backbag == 1)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/silver_ids(H), slot_l_hand)
|
||||
else
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/silver_ids(H.back), slot_in_backpack)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/melee/telebaton(H), slot_in_backpack)
|
||||
|
||||
//Implant him
|
||||
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
|
||||
@@ -87,8 +88,9 @@ Head of Personnel
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/brown(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/head/hopcap(H), slot_head)
|
||||
|
||||
//Equip ID box
|
||||
//Equip ID box & telebaton
|
||||
if(H.backbag == 1)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/ids(H), slot_l_hand)
|
||||
else
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/ids(H.back), slot_in_backpack)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/melee/telebaton(H), slot_in_backpack)
|
||||
|
||||
@@ -38,6 +38,10 @@ Chief Engineer
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(H), slot_belt)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves)
|
||||
|
||||
//Equip telebaton
|
||||
if(H.backbag == 2 || H.backbag == 3)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/melee/telebaton(H), slot_in_backpack)
|
||||
|
||||
/*
|
||||
Station Engineer
|
||||
*/
|
||||
|
||||
@@ -34,6 +34,9 @@ Chief Medical Officer
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/regular(H), slot_l_hand)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store)
|
||||
|
||||
//Equip telebaton
|
||||
if(H.backbag == 2 || H.backbag == 3)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/melee/telebaton(H), slot_in_backpack)
|
||||
|
||||
/*
|
||||
Medical Doctor
|
||||
|
||||
@@ -36,6 +36,10 @@ Research Director
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/clipboard(H), slot_l_hand)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/laser_pointer(H), slot_l_store)
|
||||
|
||||
//Equip telebaton
|
||||
if(H.backbag == 2 || H.backbag == 3)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/melee/telebaton(H), slot_in_backpack)
|
||||
|
||||
/*
|
||||
Scientist
|
||||
*/
|
||||
|
||||
@@ -48,6 +48,7 @@ Head of Security
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/handcuffs(H), slot_l_store)
|
||||
else
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/handcuffs(H), slot_in_backpack)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/melee/telebaton(H), slot_in_backpack)
|
||||
|
||||
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
|
||||
L.imp_in = H
|
||||
|
||||
@@ -182,7 +182,7 @@
|
||||
|
||||
dat += "<HR><div class='line'><div class='statusLabel'>Paralysis Summary:</div><div class='statusValue'>[round(occupant.paralysis)]% [occupant.paralysis ? "([round(occupant.paralysis / 4)] seconds left)" : ""]</div></div>"
|
||||
if(occupant.getCloneLoss())
|
||||
dat += "<div class='line'><span class='average'>Subject appears to have been imperfectly cloned.</span></div>"
|
||||
dat += "<div class='line'><span class='average'>Subject appears to have cellular damage.</span></div>"
|
||||
if(occupant.getBrainLoss())
|
||||
dat += "<div class='line'><span class='average'>Significant brain damage detected.</span></div>"
|
||||
if(occupant.reagents.reagent_list.len)
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
|
||||
/obj/machinery/alarm
|
||||
name = "alarm"
|
||||
desc = "A machine that monitors atmosphere levels. Goes off if the area is dangerous."
|
||||
icon = 'icons/obj/monitors.dmi'
|
||||
icon_state = "alarm0"
|
||||
anchored = 1
|
||||
@@ -795,17 +796,20 @@ table tr:first-child th:first-child { border: none;}
|
||||
user << "<span class='notice'>You [ locked ? "lock" : "unlock"] the Air Alarm interface.</span>"
|
||||
src.updateUsrDialog()
|
||||
else
|
||||
user << "<span class='danger'>Access denied.</span>"
|
||||
user << "<span class='warning'>Access denied.</span>"
|
||||
return
|
||||
if(1)
|
||||
if(istype(W, /obj/item/weapon/crowbar) && wires.wires_status == (2 ** wires.wire_count) - 1)
|
||||
user << "You pry out the circuit."
|
||||
user.visible_message("<span class='warning'>[user.name] removes the electronics from [src.name].</span>",\
|
||||
"You start prying out the circuit.")
|
||||
playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
|
||||
spawn(20)
|
||||
new /obj/item/weapon/airalarm_electronics( src.loc )
|
||||
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
buildstage = 0
|
||||
update_icon()
|
||||
if (do_after(user, 20))
|
||||
if (buildstage ==1)
|
||||
user <<"<span class='notice'>You remove the air alarm electronics.</span>"
|
||||
new /obj/item/weapon/airalarm_electronics( src.loc )
|
||||
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
buildstage = 0
|
||||
update_icon()
|
||||
return
|
||||
|
||||
if(istype(W, /obj/item/stack/cable_coil))
|
||||
@@ -813,7 +817,8 @@ table tr:first-child th:first-child { border: none;}
|
||||
if(cable.get_amount() < 5)
|
||||
user << "<span class='warning'>You need five lengths of cable to wire the fire alarm.</span>"
|
||||
return
|
||||
user << "<span class='notice'>You start wiring the air alarm.</span>"
|
||||
user.visible_message("<span class='warning'>[user.name] wires the air alarm.</span>", \
|
||||
"You start wiring the air alarm.")
|
||||
if (do_after(user, 20))
|
||||
if (cable.get_amount() >= 5 && buildstage == 1)
|
||||
cable.use(5)
|
||||
@@ -832,7 +837,7 @@ table tr:first-child th:first-child { border: none;}
|
||||
return
|
||||
|
||||
if(istype(W, /obj/item/weapon/wrench))
|
||||
user << "You detach \the [src] from the wall!"
|
||||
user << "<span class='notice'>You detach \the [src] from the wall!</span>"
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
new /obj/item/alarm_frame( user.loc )
|
||||
qdel(src)
|
||||
@@ -892,14 +897,14 @@ Code shamelessly copied from apc_frame
|
||||
var/turf/loc = get_turf(usr)
|
||||
var/area/A = loc.loc
|
||||
if (!istype(loc, /turf/simulated/floor))
|
||||
usr << "<span class='danger'>Air Alarm cannot be placed on this spot.</span>"
|
||||
usr << "<span class='warning'>Air Alarm cannot be placed on this spot.</span>"
|
||||
return
|
||||
if (A.requires_power == 0 || A.name == "Space")
|
||||
usr << "<span class='danger'>Air Alarm cannot be placed in this area.</span>"
|
||||
usr << "<span class='warning'>Air Alarm cannot be placed in this area.</span>"
|
||||
return
|
||||
|
||||
if(gotwallitem(loc, ndir))
|
||||
usr << "<span class='danger'>There's already an item on this wall!</span>"
|
||||
usr << "<span class='warning'>There's already an item on this wall!</span>"
|
||||
return
|
||||
|
||||
new /obj/machinery/alarm(loc, ndir, 1)
|
||||
@@ -929,25 +934,45 @@ FIRE ALARM
|
||||
|
||||
/obj/machinery/firealarm/update_icon()
|
||||
|
||||
src.overlays = list()
|
||||
|
||||
var/area/A = src.loc
|
||||
A = A.loc
|
||||
|
||||
if(panel_open)
|
||||
switch(buildstage)
|
||||
if(2)
|
||||
icon_state="fire_b2"
|
||||
if(1)
|
||||
icon_state="fire_b1"
|
||||
if(0)
|
||||
icon_state="fire_b0"
|
||||
return
|
||||
if(1)
|
||||
icon_state="fire_b1"
|
||||
return
|
||||
if(2)
|
||||
icon_state="fire_b2"
|
||||
|
||||
if((stat & BROKEN) || (stat & NOPOWER))
|
||||
return
|
||||
|
||||
overlays += "overlay_[security_level]"
|
||||
return
|
||||
|
||||
if(stat & BROKEN)
|
||||
icon_state = "firex"
|
||||
else if(stat & NOPOWER)
|
||||
icon_state = "firep"
|
||||
else if(!src.detecting)
|
||||
icon_state = "fire1"
|
||||
return
|
||||
|
||||
icon_state = "fire0"
|
||||
|
||||
if(stat & NOPOWER)
|
||||
return
|
||||
|
||||
overlays += "overlay_[security_level]"
|
||||
|
||||
if(!src.detecting)
|
||||
overlays += "overlay_fire"
|
||||
else
|
||||
icon_state = "fire0"
|
||||
overlays += "overlay_[A.fire ? "fire" : "clear"]"
|
||||
|
||||
|
||||
|
||||
/obj/machinery/firealarm/temperature_expose(datum/gas_mixture/air, temperature, volume)
|
||||
if(src.detecting)
|
||||
@@ -1011,10 +1036,15 @@ FIRE ALARM
|
||||
|
||||
else if(istype(W, /obj/item/weapon/crowbar))
|
||||
playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
|
||||
spawn(20)
|
||||
user.visible_message("<span class='warning'>[user.name] removes the electronics from [src.name].</span>", \
|
||||
"You start prying out the circuit.")
|
||||
if(do_after(user, 20))
|
||||
if(buildstage == 1)
|
||||
user << "<span class='notice'>You pry out the circuit!</span>"
|
||||
new /obj/item/weapon/firealarm_electronics(user.loc)
|
||||
if(stat & BROKEN)
|
||||
user << "<span class='notice'>You remove the destroyed circuit!</span>"
|
||||
else
|
||||
user << "<span class='notice'>You pry out the circuit!</span>"
|
||||
new /obj/item/weapon/firealarm_electronics(user.loc)
|
||||
buildstage = 0
|
||||
update_icon()
|
||||
if(0)
|
||||
@@ -1025,7 +1055,8 @@ FIRE ALARM
|
||||
update_icon()
|
||||
|
||||
else if(istype(W, /obj/item/weapon/wrench))
|
||||
user.visible_message("<span class='warning'>[user] removes the fire alarm assembly from the wall!</span>", "<span class='warning'>You remove the fire alarm assembly from the wall!</span>")
|
||||
user.visible_message("<span class='warning'>[user] removes the fire alarm assembly from the wall!</span>", \
|
||||
"<span class='notice'>You remove the fire alarm assembly from the wall!</span>")
|
||||
var/obj/item/firealarm_frame/frame = new /obj/item/firealarm_frame()
|
||||
frame.loc = user.loc
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
@@ -1136,7 +1167,6 @@ FIRE ALARM
|
||||
return
|
||||
var/area/A = get_area(src)
|
||||
A.firereset()
|
||||
update_icon()
|
||||
return
|
||||
|
||||
/obj/machinery/firealarm/proc/alarm()
|
||||
@@ -1144,7 +1174,6 @@ FIRE ALARM
|
||||
return
|
||||
var/area/A = get_area(src)
|
||||
A.firealert()
|
||||
update_icon()
|
||||
//playsound(src.loc, 'sound/ambience/signal.ogg', 75, 0)
|
||||
return
|
||||
|
||||
@@ -1216,14 +1245,14 @@ Code shamelessly copied from apc_frame
|
||||
var/turf/loc = get_turf(usr)
|
||||
var/area/A = loc.loc
|
||||
if (!istype(loc, /turf/simulated/floor))
|
||||
usr << "<span class='danger'>Fire Alarm cannot be placed on this spot.</span>"
|
||||
usr << "<span class='warning'>Fire Alarm cannot be placed on this spot.</span>"
|
||||
return
|
||||
if (A.requires_power == 0 || A.name == "Space")
|
||||
usr << "<span class='danger'>Fire Alarm cannot be placed in this area.</span>"
|
||||
usr << "<span class='warning'>Fire Alarm cannot be placed in this area.</span>"
|
||||
return
|
||||
|
||||
if(gotwallitem(loc, ndir))
|
||||
usr << "<span class='danger'>There's already an item on this wall!</span>"
|
||||
usr << "<span class='warning'>There's already an item on this wall!</span>"
|
||||
return
|
||||
|
||||
new /obj/machinery/firealarm(loc, ndir, 1)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/obj/machinery/computer/operating
|
||||
name = "operating computer"
|
||||
desc = "Used to monitor the vitals of a patient during surgery."
|
||||
icon_state = "operating"
|
||||
density = 1
|
||||
anchored = 1.0
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/obj/machinery/computer/aifixer
|
||||
name = "\improper AI system integrity restorer"
|
||||
desc = "Used with inteliCards containing nonfunctioning AIs to restore them to working order."
|
||||
icon = 'icons/obj/computer.dmi'
|
||||
icon_state = "ai-fixer"
|
||||
req_access = list(access_captain, access_robotics, access_heads)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
|
||||
/obj/machinery/computer/cloning
|
||||
name = "cloning console"
|
||||
desc = "Used to clone people and manage DNA."
|
||||
icon = 'icons/obj/computer.dmi'
|
||||
icon_state = "dna"
|
||||
circuit = /obj/item/weapon/circuitboard/cloning
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/obj/machinery/computer/prisoner
|
||||
name = "prisoner management console"
|
||||
desc = "Used to manage tracking implants placed inside criminals."
|
||||
icon = 'icons/obj/computer.dmi'
|
||||
icon_state = "explosive"
|
||||
req_access = list(access_brig)
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
var/obj/machinery/door/airlock/closeOther = null
|
||||
var/closeOtherId = null
|
||||
var/lockdownbyai = 0
|
||||
var/doortype = 0
|
||||
var/doortype = null
|
||||
var/justzap = 0
|
||||
var/safe = 1
|
||||
normalspeed = 1
|
||||
@@ -49,53 +49,53 @@
|
||||
|
||||
/obj/machinery/door/airlock/command
|
||||
icon = 'icons/obj/doors/Doorcom.dmi'
|
||||
doortype = 1
|
||||
doortype = /obj/structure/door_assembly/door_assembly_com
|
||||
|
||||
/obj/machinery/door/airlock/security
|
||||
icon = 'icons/obj/doors/Doorsec.dmi'
|
||||
doortype = 2
|
||||
doortype = /obj/structure/door_assembly/door_assembly_sec
|
||||
|
||||
/obj/machinery/door/airlock/engineering
|
||||
icon = 'icons/obj/doors/Dooreng.dmi'
|
||||
doortype = 3
|
||||
doortype = /obj/structure/door_assembly/door_assembly_eng
|
||||
|
||||
/obj/machinery/door/airlock/medical
|
||||
icon = 'icons/obj/doors/Doormed.dmi'
|
||||
doortype = 4
|
||||
doortype = /obj/structure/door_assembly/door_assembly_med
|
||||
|
||||
/obj/machinery/door/airlock/maintenance
|
||||
name = "maintenance access"
|
||||
icon = 'icons/obj/doors/Doormaint.dmi'
|
||||
doortype = 5
|
||||
doortype = /obj/structure/door_assembly/door_assembly_mai
|
||||
|
||||
/obj/machinery/door/airlock/external
|
||||
name = "external airlock"
|
||||
icon = 'icons/obj/doors/Doorext.dmi'
|
||||
doortype = 6
|
||||
doortype = /obj/structure/door_assembly/door_assembly_ext
|
||||
|
||||
/obj/machinery/door/airlock/glass
|
||||
name = "glass airlock"
|
||||
icon = 'icons/obj/doors/Doorglass.dmi'
|
||||
opacity = 0
|
||||
doortype = 7
|
||||
doortype = /obj/structure/door_assembly/door_assembly_glass
|
||||
glass = 1
|
||||
|
||||
/obj/machinery/door/airlock/centcom
|
||||
icon = 'icons/obj/doors/Doorele.dmi'
|
||||
opacity = 1
|
||||
doortype = 8
|
||||
doortype = null //(centcom) there's no door assembly sprites for this one.
|
||||
|
||||
/obj/machinery/door/airlock/vault
|
||||
name = "vault door"
|
||||
icon = 'icons/obj/doors/vault.dmi'
|
||||
opacity = 1
|
||||
doortype = 9
|
||||
doortype = /obj/structure/door_assembly/door_assembly_vault
|
||||
|
||||
/obj/machinery/door/airlock/glass_large
|
||||
name = "glass airlock"
|
||||
icon = 'icons/obj/doors/Door2x1glassfull.dmi'
|
||||
opacity = 0
|
||||
doortype = 10
|
||||
doortype = null //(double glass door) there's no door assembly sprites for this one.
|
||||
glass = 1
|
||||
bound_width = 64 // 2x1
|
||||
|
||||
@@ -103,67 +103,67 @@
|
||||
name = "freezer airlock"
|
||||
icon = 'icons/obj/doors/Doorfreezer.dmi'
|
||||
opacity = 1
|
||||
doortype = 11
|
||||
doortype = /obj/structure/door_assembly/door_assembly_fre
|
||||
|
||||
/obj/machinery/door/airlock/hatch
|
||||
name = "airtight hatch"
|
||||
icon = 'icons/obj/doors/Doorhatchele.dmi'
|
||||
opacity = 1
|
||||
doortype = 12
|
||||
doortype = /obj/structure/door_assembly/door_assembly_hatch
|
||||
|
||||
/obj/machinery/door/airlock/maintenance_hatch
|
||||
name = "maintenance hatch"
|
||||
icon = 'icons/obj/doors/Doorhatchmaint2.dmi'
|
||||
opacity = 1
|
||||
doortype = 13
|
||||
doortype = /obj/structure/door_assembly/door_assembly_mhatch
|
||||
|
||||
/obj/machinery/door/airlock/glass_command
|
||||
name = "maintenance hatch"
|
||||
icon = 'icons/obj/doors/Doorcomglass.dmi'
|
||||
opacity = 0
|
||||
doortype = 14
|
||||
doortype = /obj/structure/door_assembly/door_assembly_com/glass
|
||||
glass = 1
|
||||
|
||||
/obj/machinery/door/airlock/glass_engineering
|
||||
name = "maintenance hatch"
|
||||
icon = 'icons/obj/doors/Doorengglass.dmi'
|
||||
opacity = 0
|
||||
doortype = 15
|
||||
doortype = /obj/structure/door_assembly/door_assembly_eng/glass
|
||||
glass = 1
|
||||
|
||||
/obj/machinery/door/airlock/glass_security
|
||||
name = "maintenance hatch"
|
||||
icon = 'icons/obj/doors/Doorsecglass.dmi'
|
||||
opacity = 0
|
||||
doortype = 16
|
||||
doortype = /obj/structure/door_assembly/door_assembly_sec/glass
|
||||
glass = 1
|
||||
|
||||
/obj/machinery/door/airlock/glass_medical
|
||||
name = "maintenance hatch"
|
||||
icon = 'icons/obj/doors/Doormedglass.dmi'
|
||||
opacity = 0
|
||||
doortype = 17
|
||||
doortype = /obj/structure/door_assembly/door_assembly_med/glass
|
||||
glass = 1
|
||||
|
||||
/obj/machinery/door/airlock/mining
|
||||
name = "mining airlock"
|
||||
icon = 'icons/obj/doors/Doormining.dmi'
|
||||
doortype = 18
|
||||
doortype = /obj/structure/door_assembly/door_assembly_min
|
||||
|
||||
/obj/machinery/door/airlock/atmos
|
||||
name = "atmospherics airlock"
|
||||
icon = 'icons/obj/doors/Dooratmo.dmi'
|
||||
doortype = 19
|
||||
doortype = /obj/structure/door_assembly/door_assembly_atmo
|
||||
|
||||
/obj/machinery/door/airlock/research
|
||||
icon = 'icons/obj/doors/Doorresearch.dmi'
|
||||
doortype = 20
|
||||
doortype = /obj/structure/door_assembly/door_assembly_research
|
||||
|
||||
/obj/machinery/door/airlock/glass_research
|
||||
name = "maintenance hatch"
|
||||
icon = 'icons/obj/doors/Doorresearchglass.dmi'
|
||||
opacity = 0
|
||||
doortype = 21
|
||||
doortype = /obj/structure/door_assembly/door_assembly_research/glass
|
||||
glass = 1
|
||||
heat_proof = 1
|
||||
|
||||
@@ -171,40 +171,40 @@
|
||||
name = "maintenance hatch"
|
||||
icon = 'icons/obj/doors/Doorminingglass.dmi'
|
||||
opacity = 0
|
||||
doortype = 22
|
||||
doortype = /obj/structure/door_assembly/door_assembly_min/glass
|
||||
glass = 1
|
||||
|
||||
/obj/machinery/door/airlock/glass_atmos
|
||||
name = "maintenance hatch"
|
||||
icon = 'icons/obj/doors/Dooratmoglass.dmi'
|
||||
opacity = 0
|
||||
doortype = 23
|
||||
doortype = /obj/structure/door_assembly/door_assembly_atmo/glass
|
||||
glass = 1
|
||||
|
||||
/obj/machinery/door/airlock/gold
|
||||
name = "gold airlock"
|
||||
icon = 'icons/obj/doors/Doorgold.dmi'
|
||||
var/mineral = "gold"
|
||||
doortype = 24
|
||||
doortype = /obj/structure/door_assembly/door_assembly_gold
|
||||
|
||||
/obj/machinery/door/airlock/silver
|
||||
name = "silver airlock"
|
||||
icon = 'icons/obj/doors/Doorsilver.dmi'
|
||||
var/mineral = "silver"
|
||||
doortype = 25
|
||||
doortype = /obj/structure/door_assembly/door_assembly_silver
|
||||
|
||||
/obj/machinery/door/airlock/diamond
|
||||
name = "diamond airlock"
|
||||
icon = 'icons/obj/doors/Doordiamond.dmi'
|
||||
var/mineral = "diamond"
|
||||
doortype = 26
|
||||
doortype = /obj/structure/door_assembly/door_assembly_diamond
|
||||
|
||||
/obj/machinery/door/airlock/uranium
|
||||
name = "uranium airlock"
|
||||
desc = "And they said I was crazy."
|
||||
icon = 'icons/obj/doors/Dooruranium.dmi'
|
||||
var/mineral = "uranium"
|
||||
doortype = 27
|
||||
doortype = /obj/structure/door_assembly/door_assembly_uranium
|
||||
var/last_event = 0
|
||||
|
||||
/obj/machinery/door/airlock/uranium/process()
|
||||
@@ -224,7 +224,7 @@
|
||||
desc = "No way this can end badly."
|
||||
icon = 'icons/obj/doors/Doorplasma.dmi'
|
||||
var/mineral = "plasma"
|
||||
doortype = 28
|
||||
doortype = /obj/structure/door_assembly/door_assembly_plasma
|
||||
|
||||
/obj/machinery/door/airlock/plasma/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
if(exposed_temperature > 300)
|
||||
@@ -247,49 +247,49 @@
|
||||
desc = "Honkhonkhonk"
|
||||
icon = 'icons/obj/doors/Doorbananium.dmi'
|
||||
var/mineral = "clown"
|
||||
doortype = 29
|
||||
doortype = /obj/structure/door_assembly/door_assembly_clown
|
||||
|
||||
/obj/machinery/door/airlock/sandstone
|
||||
name = "sandstone airlock"
|
||||
icon = 'icons/obj/doors/Doorsand.dmi'
|
||||
var/mineral = "sandstone"
|
||||
doortype = 30
|
||||
doortype = /obj/structure/door_assembly/door_assembly_sandstone
|
||||
|
||||
/obj/machinery/door/airlock/science
|
||||
icon = 'icons/obj/doors/Doorsci.dmi'
|
||||
doortype = 31
|
||||
doortype = /obj/structure/door_assembly/door_assembly_science
|
||||
|
||||
/obj/machinery/door/airlock/glass_science
|
||||
name = "glass airlock"
|
||||
icon = 'icons/obj/doors/Doorsciglass.dmi'
|
||||
opacity = 0
|
||||
doortype = 32
|
||||
doortype = /obj/structure/door_assembly/door_assembly_science/glass
|
||||
glass = 1
|
||||
|
||||
/obj/machinery/door/airlock/highsecurity
|
||||
name = "high tech security airlock"
|
||||
icon = 'icons/obj/doors/hightechsecurity.dmi'
|
||||
doortype = 33
|
||||
doortype = /obj/structure/door_assembly/door_assembly_highsecurity
|
||||
|
||||
/obj/machinery/door/airlock/shuttle
|
||||
name = "shuttle airlock"
|
||||
icon = 'icons/obj/doors/doorshuttle.dmi'
|
||||
doortype = 34
|
||||
doortype = /obj/structure/door_assembly/door_assembly_shuttle
|
||||
|
||||
/obj/machinery/door/airlock/wood
|
||||
name = "wooden airlock"
|
||||
icon = 'icons/obj/doors/Doorwood.dmi'
|
||||
var/mineral = "wood"
|
||||
doortype = 35
|
||||
doortype = /obj/structure/door_assembly/door_assembly_wood
|
||||
|
||||
/obj/machinery/door/airlock/virology
|
||||
icon = 'icons/obj/doors/Doorviro.dmi'
|
||||
doortype = 36
|
||||
doortype = /obj/structure/door_assembly/door_assembly_viro
|
||||
|
||||
/obj/machinery/door/airlock/glass_virology
|
||||
icon = 'icons/obj/doors/Doorviroglass.dmi'
|
||||
opacity = 0
|
||||
doortype = 37
|
||||
doortype = /obj/structure/door_assembly/door_assembly_viro/glass
|
||||
glass = 1
|
||||
|
||||
/*
|
||||
@@ -640,7 +640,8 @@ About the new airlock wires panel:
|
||||
if(H.getBrainLoss() >= 60)
|
||||
playsound(src.loc, 'sound/effects/bang.ogg', 25, 1)
|
||||
if(!istype(H.head, /obj/item/clothing/head/helmet))
|
||||
visible_message("<span class='danger'>[user] headbutts the airlock.</span>")
|
||||
H.visible_message("<span class='danger'>[user] headbutts the airlock.</span>", \
|
||||
"<span class='userdanger'>[user] headbutts the airlock!</span>")
|
||||
var/obj/item/organ/limb/affecting = H.get_organ("head")
|
||||
H.Stun(5)
|
||||
H.Weaken(5)
|
||||
@@ -888,16 +889,18 @@ About the new airlock wires panel:
|
||||
src.add_fingerprint(user)
|
||||
if((istype(C, /obj/item/weapon/weldingtool) && !( src.operating ) && src.density))
|
||||
var/obj/item/weapon/weldingtool/W = C
|
||||
user << "<span class='notice'>You begin [welded ? "unwelding":"welding"] the airlock...</span>"
|
||||
user.visible_message("<span class='warning'>[user] is [welded ? "unwelding":"welding"] the airlock.</span>", \
|
||||
"You begin [welded ? "unwelding":"welding"] the airlock...", \
|
||||
"You hear welding.")
|
||||
playsound(loc, 'sound/items/Welder.ogg', 40, 1)
|
||||
if(do_after(user,40,5,1))
|
||||
if(density && !operating)//Door must be closed to weld.
|
||||
if(W.remove_fuel(0,user))
|
||||
playsound(loc, 'sound/items/Welder2.ogg', 50, 1)
|
||||
welded = !welded
|
||||
user << "<span class='notice'>You [welded ? "welded the airlock shut":"unwelded the airlock"]</span>"
|
||||
user.visible_message("<span class='warning'>[src] has been [welded? "welded shut":"unwelded"] by [user.name].</span>", \
|
||||
"<span class='notice'>You've [welded ? "welded the airlock shut":"unwelded the airlock"].</span>")
|
||||
update_icon()
|
||||
user.visible_message("<span class='warning'>[src] has been [welded? "welded shut":"unwelded"] by [user.name].</span>")
|
||||
return
|
||||
else if(istype(C, /obj/item/weapon/screwdriver))
|
||||
src.p_open = !( src.p_open )
|
||||
@@ -920,68 +923,34 @@ About the new airlock wires panel:
|
||||
beingcrowbarred = 0
|
||||
if( beingcrowbarred && (density && welded && !operating && src.p_open && (!hasPower()) && !src.locked) )
|
||||
playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1)
|
||||
user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to remove electronics from the airlock assembly.")
|
||||
user.visible_message("<span class='warning'>[user] removes the electronics from the airlock assembly.</span>", \
|
||||
"You start to remove electronics from the airlock assembly.")
|
||||
if(do_after(user,40))
|
||||
switch(src.doortype)
|
||||
if(0) new/obj/structure/door_assembly/door_assembly_0( src.loc )
|
||||
if(1) new/obj/structure/door_assembly/door_assembly_com( src.loc )
|
||||
if(2) new/obj/structure/door_assembly/door_assembly_sec( src.loc )
|
||||
if(3) new/obj/structure/door_assembly/door_assembly_eng( src.loc )
|
||||
if(4) new/obj/structure/door_assembly/door_assembly_med( src.loc )
|
||||
if(5) new/obj/structure/door_assembly/door_assembly_mai( src.loc )
|
||||
if(6) new/obj/structure/door_assembly/door_assembly_ext( src.loc )
|
||||
if(7) new/obj/structure/door_assembly/door_assembly_glass( src.loc )
|
||||
//8 is centcom
|
||||
if(9) new/obj/structure/door_assembly/door_assembly_vault(loc)
|
||||
//10 is double glass door (2x1)
|
||||
//11 is freezer
|
||||
if(12) new/obj/structure/door_assembly/door_assembly_hatch( src.loc )
|
||||
if(13) new/obj/structure/door_assembly/door_assembly_mhatch( src.loc )
|
||||
if(14) new/obj/structure/door_assembly/door_assembly_com/glass( src.loc )
|
||||
if(15) new/obj/structure/door_assembly/door_assembly_eng/glass( src.loc )
|
||||
if(16) new/obj/structure/door_assembly/door_assembly_sec/glass( src.loc )
|
||||
if(17) new/obj/structure/door_assembly/door_assembly_med/glass( src.loc )
|
||||
if(18) new/obj/structure/door_assembly/door_assembly_min( src.loc )
|
||||
if(19) new/obj/structure/door_assembly/door_assembly_atmo( src.loc )
|
||||
if(20) new/obj/structure/door_assembly/door_assembly_research( src.loc )
|
||||
if(21) new/obj/structure/door_assembly/door_assembly_research/glass( src.loc )
|
||||
if(22) new/obj/structure/door_assembly/door_assembly_min/glass( src.loc )
|
||||
if(23) new/obj/structure/door_assembly/door_assembly_atmo/glass( src.loc )
|
||||
if(24) new/obj/structure/door_assembly/door_assembly_gold( src.loc )
|
||||
if(25) new/obj/structure/door_assembly/door_assembly_silver( src.loc )
|
||||
if(26) new/obj/structure/door_assembly/door_assembly_diamond( src.loc )
|
||||
if(27) new/obj/structure/door_assembly/door_assembly_uranium( src.loc )
|
||||
if(28) new/obj/structure/door_assembly/door_assembly_plasma( src.loc )
|
||||
if(29) new/obj/structure/door_assembly/door_assembly_clown( src.loc )
|
||||
if(30) new/obj/structure/door_assembly/door_assembly_sandstone( src.loc )
|
||||
if(31) new/obj/structure/door_assembly/door_assembly_science( src.loc )
|
||||
if(32) new/obj/structure/door_assembly/door_assembly_science/glass( src.loc )
|
||||
if(33) new/obj/structure/door_assembly/door_assembly_highsecurity(src.loc)
|
||||
if(34) new/obj/structure/door_assembly/door_assembly_shuttle(src.loc)
|
||||
if(35) new/obj/structure/door_assembly/door_assembly_wood(src.loc)
|
||||
if(36) new/obj/structure/door_assembly/door_assembly_viro(src.loc)
|
||||
if(37) new/obj/structure/door_assembly/door_assembly_viro/glass(src.loc)
|
||||
if(emagged)
|
||||
user << "<span class='warning'>You discard the damaged electronics.</span>"
|
||||
if(src.loc)
|
||||
if(src.doortype)
|
||||
new src.doortype(src.loc)
|
||||
|
||||
if(emagged)
|
||||
user << "<span class='warning'>You discard the damaged electronics.</span>"
|
||||
qdel(src)
|
||||
return
|
||||
user << "<span class='notice'>You removed the airlock electronics!</span>"
|
||||
|
||||
var/obj/item/weapon/airlock_electronics/ae
|
||||
if(!electronics)
|
||||
ae = new/obj/item/weapon/airlock_electronics( src.loc )
|
||||
if(req_one_access)
|
||||
ae.use_one_access = 1
|
||||
ae.conf_access = src.req_one_access
|
||||
else
|
||||
ae.conf_access = src.req_access
|
||||
else
|
||||
ae = electronics
|
||||
electronics = null
|
||||
ae.loc = src.loc
|
||||
|
||||
qdel(src)
|
||||
return
|
||||
user << "<span class='notice'>You removed the airlock electronics!</span>"
|
||||
|
||||
var/obj/item/weapon/airlock_electronics/ae
|
||||
if(!electronics)
|
||||
ae = new/obj/item/weapon/airlock_electronics( src.loc )
|
||||
if(req_one_access)
|
||||
ae.use_one_access = 1
|
||||
ae.conf_access = src.req_one_access
|
||||
else
|
||||
ae.conf_access = src.req_access
|
||||
else
|
||||
ae = electronics
|
||||
electronics = null
|
||||
ae.loc = src.loc
|
||||
|
||||
qdel(src)
|
||||
return
|
||||
else if(hasPower())
|
||||
user << "<span class='warning'> The airlock's motors resist your efforts to force it.</span>"
|
||||
else if(locked)
|
||||
@@ -1127,35 +1096,35 @@ About the new airlock wires panel:
|
||||
switch(paintjob)
|
||||
if("Default")
|
||||
icon = 'icons/obj/doors/Doorglass.dmi'
|
||||
doortype = 7
|
||||
doortype = /obj/structure/door_assembly/door_assembly_glass
|
||||
heat_proof = 0
|
||||
if("Engineering")
|
||||
icon = 'icons/obj/doors/Doorengglass.dmi'
|
||||
doortype = 15
|
||||
doortype = /obj/structure/door_assembly/door_assembly_eng/glass
|
||||
heat_proof = 0
|
||||
if("Atmospherics")
|
||||
icon = 'icons/obj/doors/Dooratmoglass.dmi'
|
||||
doortype = 23
|
||||
doortype = /obj/structure/door_assembly/door_assembly_atmo/glass
|
||||
heat_proof = 0
|
||||
if("Security")
|
||||
icon = 'icons/obj/doors/Doorsecglass.dmi'
|
||||
doortype = 16
|
||||
doortype = /obj/structure/door_assembly/door_assembly_sec/glass
|
||||
heat_proof = 0
|
||||
if("Command")
|
||||
icon = 'icons/obj/doors/Doorcomglass.dmi'
|
||||
doortype = 14
|
||||
doortype = /obj/structure/door_assembly/door_assembly_com/glass
|
||||
heat_proof = 0
|
||||
if("Medical")
|
||||
icon = 'icons/obj/doors/Doormedglass.dmi'
|
||||
doortype = 17
|
||||
doortype = /obj/structure/door_assembly/door_assembly_med/glass
|
||||
heat_proof = 0
|
||||
if("Research")
|
||||
icon = 'icons/obj/doors/Doorresearchglass.dmi'
|
||||
doortype = 21
|
||||
doortype = /obj/structure/door_assembly/door_assembly_research/glass
|
||||
heat_proof = 1
|
||||
if("Mining")
|
||||
icon = 'icons/obj/doors/Doorminingglass.dmi'
|
||||
doortype = 22
|
||||
doortype = /obj/structure/door_assembly/door_assembly_min/glass
|
||||
heat_proof = 0
|
||||
else
|
||||
//These airlocks have a regular version.
|
||||
@@ -1165,47 +1134,47 @@ About the new airlock wires panel:
|
||||
switch(paintjob)
|
||||
if("Default")
|
||||
icon = 'icons/obj/doors/Doorint.dmi'
|
||||
doortype = 0
|
||||
doortype = /obj/structure/door_assembly/door_assembly_0
|
||||
heat_proof = 0
|
||||
if("Engineering")
|
||||
icon = 'icons/obj/doors/Dooreng.dmi'
|
||||
doortype = 3
|
||||
doortype = /obj/structure/door_assembly/door_assembly_eng
|
||||
heat_proof = 0
|
||||
if("Atmospherics")
|
||||
icon = 'icons/obj/doors/Dooratmo.dmi'
|
||||
doortype = 19
|
||||
doortype = /obj/structure/door_assembly/door_assembly_atmo
|
||||
heat_proof = 0
|
||||
if("Security")
|
||||
icon = 'icons/obj/doors/Doorsec.dmi'
|
||||
doortype = 2
|
||||
doortype = /obj/structure/door_assembly/door_assembly_sec
|
||||
heat_proof = 0
|
||||
if("Command")
|
||||
icon = 'icons/obj/doors/Doorcom.dmi'
|
||||
doortype = 1
|
||||
doortype = /obj/structure/door_assembly/door_assembly_com
|
||||
heat_proof = 0
|
||||
if("Medical")
|
||||
icon = 'icons/obj/doors/Doormed.dmi'
|
||||
doortype = 4
|
||||
doortype = /obj/structure/door_assembly/door_assembly_med
|
||||
heat_proof = 0
|
||||
if("Research")
|
||||
icon = 'icons/obj/doors/Doorresearch.dmi'
|
||||
doortype = 20
|
||||
doortype = /obj/structure/door_assembly/door_assembly_research
|
||||
heat_proof = 0
|
||||
if("Mining")
|
||||
icon = 'icons/obj/doors/Doormining.dmi'
|
||||
doortype = 18
|
||||
doortype = /obj/structure/door_assembly/door_assembly_min
|
||||
heat_proof = 0
|
||||
if("Maintenance")
|
||||
icon = 'icons/obj/doors/Doormaint.dmi'
|
||||
doortype = 5
|
||||
doortype = /obj/structure/door_assembly/door_assembly_mai
|
||||
heat_proof = 0
|
||||
if("External")
|
||||
icon = 'icons/obj/doors/Doorext.dmi'
|
||||
doortype = 6
|
||||
doortype = /obj/structure/door_assembly/door_assembly_ext
|
||||
heat_proof = 0
|
||||
if("High Security")
|
||||
icon = 'icons/obj/doors/hightechsecurity.dmi'
|
||||
doortype = 33
|
||||
doortype = /obj/structure/door_assembly/door_assembly_highsecurity
|
||||
heat_proof = 0
|
||||
update_icon()
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
name = "glass alarm airlock"
|
||||
icon = 'icons/obj/doors/Doorglass.dmi'
|
||||
opacity = 0
|
||||
doortype = 7
|
||||
doortype = /obj/structure/door_assembly/door_assembly_glass
|
||||
glass = 1
|
||||
|
||||
var/datum/radio_frequency/air_connection
|
||||
|
||||
@@ -201,6 +201,7 @@
|
||||
|
||||
/obj/machinery/ai_status_display
|
||||
icon = 'icons/obj/status_display.dmi'
|
||||
desc = "A small screen which the AI can use to present itself."
|
||||
icon_state = "frame"
|
||||
name = "\improper AI display"
|
||||
anchored = 1
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/obj/machinery/washing_machine
|
||||
name = "washing machine"
|
||||
desc = "Gets rid of those pesky bloodstains, or your money back!"
|
||||
icon = 'icons/obj/machines/washing_machine.dmi'
|
||||
icon_state = "wm_10"
|
||||
density = 1
|
||||
|
||||
@@ -169,7 +169,7 @@
|
||||
<font color="[occupant.getOxyLoss() < 60 ? "blue" : "red"]"><b>Respiratory Damage:</b> [occupant.getOxyLoss()]%</font><br />
|
||||
<font color="[occupant.getToxLoss() < 60 ? "blue" : "red"]"><b>Toxin Content:</b> [occupant.getToxLoss()]%</font><br />
|
||||
<font color="[occupant.getFireLoss() < 60 ? "blue" : "red"]"><b>Burn Severity:</b> [occupant.getFireLoss()]%</font><br />
|
||||
<font color="red">[occupant.getCloneLoss() ? "Subject appears to have been imperfectly cloned." : ""]</font><br />
|
||||
<font color="red">[occupant.getCloneLoss() ? "Subject appears to have cellular damage." : ""]</font><br />
|
||||
<font color="red">[occupant.getBrainLoss() ? "Significant brain damage detected." : ""]</font><br />
|
||||
"}
|
||||
|
||||
|
||||
@@ -78,6 +78,7 @@
|
||||
|
||||
/obj/machinery/computer/mech_bay_power_console
|
||||
name = "mech bay power control console"
|
||||
desc = "Used to control mechbay power ports."
|
||||
density = 1
|
||||
anchored = 1
|
||||
icon = 'icons/obj/computer.dmi'
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/obj/machinery/computer/mecha
|
||||
name = "exosuit control console"
|
||||
desc = "Used to remotely locate or lockdown exosuits."
|
||||
icon = 'icons/obj/computer.dmi'
|
||||
icon_state = "mecha"
|
||||
req_access = list(access_robotics)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/obj/item/device/aicard
|
||||
name = "inteliCard"
|
||||
desc = "A storage device for AIs. Patent pending."
|
||||
icon = 'icons/obj/aicards.dmi'
|
||||
icon_state = "aicard" // aicard-full
|
||||
item_state = "electronic"
|
||||
@@ -56,7 +57,7 @@
|
||||
dat += "<b>AI nonfunctional</b>"
|
||||
else
|
||||
if (!src.flush)
|
||||
dat += {"<A href='byond://?src=\ref[src];choice=Wipe'>Wipe AI</A>"}
|
||||
dat += {"<A href='byond://?src=\ref[src];choice=Wipe'>Wipe AI</A>"}
|
||||
else
|
||||
dat += "<b>Wipe in progress</b>"
|
||||
dat += "<br>"
|
||||
|
||||
@@ -145,7 +145,7 @@ MASS SPECTROMETER
|
||||
user.show_message("<span class='info'>Subject appears to be suffering from fatigue.</span>", 1)
|
||||
|
||||
if (M.getCloneLoss())
|
||||
user.show_message("<span class='warning'>Subject appears to have been imperfectly cloned.</span>", 1)
|
||||
user.show_message("<span class='warning'>Subject appears to have [M.getCloneLoss() > 30 ? "severe" : "minor"] cellular damage.</span>", 1)
|
||||
|
||||
for(var/datum/disease/D in M.viruses)
|
||||
if(!D.hidden[SCANNER])
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
var/sprite_name = "fire_extinguisher"
|
||||
|
||||
/obj/item/weapon/extinguisher/mini
|
||||
name = "fire extinguisher"
|
||||
name = "pocket fire extinguisher"
|
||||
desc = "A light and compact fibreglass-framed model fire extinguisher."
|
||||
icon_state = "miniFE0"
|
||||
item_state = "miniFE"
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
M.visible_message("<span class='danger'>[M] has been beaten with [src] by [user]!</span>", \
|
||||
"<span class='userdanger'>[M] has been beaten with [src] by [user]!</span>")
|
||||
else
|
||||
playsound(loc, 'sound/weapons/Genhit.ogg', 50, 1, -1)
|
||||
playsound(loc, 'sound/effects/woodhit.ogg', 50, 1, -1)
|
||||
M.Stun(7)
|
||||
M.Weaken(7)
|
||||
M.visible_message("<span class='danger'>[M] has been stunned with [src] by [user]!</span>", \
|
||||
@@ -64,4 +64,75 @@
|
||||
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
H.forcesay(hit_appends)
|
||||
H.forcesay(hit_appends)
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/melee/telebaton
|
||||
name = "telescopic baton"
|
||||
desc = "A compact yet robust personal defense weapon. Can be concealed when folded."
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "telebaton_0"
|
||||
item_state = "telebaton_0"
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = 2
|
||||
force = 3
|
||||
var/cooldown = 0
|
||||
var/on = 0
|
||||
|
||||
/obj/item/weapon/melee/telebaton/attack_self(mob/user as mob)
|
||||
on = !on
|
||||
if(on)
|
||||
user.visible_message("<span class ='warning'>With a flick of their wrist, [user] extends their telescopic baton.</span>",\
|
||||
"<span class ='warning'>You extend the baton.</span>",\
|
||||
"You hear an ominous click.")
|
||||
icon_state = "telebaton_1"
|
||||
item_state = "nullrod"
|
||||
w_class = 4 //doesnt fit in backpack when its on for balance
|
||||
force = 10 //seclite damage
|
||||
attack_verb = list("smacked", "struck", "cracked", "beaten")
|
||||
else
|
||||
user.visible_message("<span class ='notice'>[user] collapses their telescopic baton.</span>",\
|
||||
"<span class ='notice'>You collapse the baton.</span>",\
|
||||
"You hear a click.")
|
||||
icon_state = "telebaton_0"
|
||||
item_state = "telebaton_0" //no sprite in other words
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = 2
|
||||
force = 3 //not so robust now
|
||||
attack_verb = list("hit", "poked")
|
||||
|
||||
playsound(src.loc, 'sound/weapons/batonextend.ogg', 50, 1)
|
||||
add_fingerprint(user)
|
||||
|
||||
/obj/item/weapon/melee/telebaton/attack(mob/target as mob, mob/living/user as mob)
|
||||
if(on)
|
||||
add_fingerprint(user)
|
||||
if((CLUMSY in user.mutations) && prob(50))
|
||||
user << "<span class ='danger'>You club yourself over the head.</span>"
|
||||
user.Weaken(3 * force)
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
H.apply_damage(2*force, BRUTE, "head")
|
||||
else
|
||||
user.take_organ_damage(2*force)
|
||||
return
|
||||
if (user.a_intent == "harm")
|
||||
if(!..()) return
|
||||
if(!isrobot(target)) return
|
||||
else
|
||||
if(cooldown <= 0)
|
||||
playsound(get_turf(src), 'sound/effects/woodhit.ogg', 75, 1, -1)
|
||||
target.Weaken(3)
|
||||
src.add_fingerprint(user)
|
||||
target.visible_message("<span class ='danger'>[target] has been knocked down with \the [src] by [user]!</span>")
|
||||
if(!iscarbon(user))
|
||||
target.LAssailant = null
|
||||
else
|
||||
target.LAssailant = user
|
||||
cooldown = 1
|
||||
spawn(40)
|
||||
cooldown = 0
|
||||
return
|
||||
else
|
||||
return ..()
|
||||
@@ -14,7 +14,7 @@
|
||||
desc = "You wear this on your back and put items into it."
|
||||
icon_state = "backpack"
|
||||
item_state = "backpack"
|
||||
w_class = 4.0
|
||||
w_class = 4
|
||||
slot_flags = SLOT_BACK //ERROOOOO
|
||||
max_w_class = 3
|
||||
max_combined_w_class = 21
|
||||
@@ -35,10 +35,6 @@
|
||||
max_w_class = 5
|
||||
max_combined_w_class = 35
|
||||
|
||||
/obj/item/weapon/storage/backpack/holding/New()
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/backpack/holding/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(crit_fail)
|
||||
user << "<span class='danger'>The Bluespace generator isn't working.</span>"
|
||||
@@ -73,9 +69,9 @@
|
||||
icon_state = "giftbag0"
|
||||
item_state = "giftbag"
|
||||
w_class = 4.0
|
||||
storage_slots = 20
|
||||
storage_slots = 20 //Can store a lot.
|
||||
max_w_class = 3
|
||||
max_combined_w_class = 400 // can store a ton of shit!
|
||||
max_combined_w_class = 60
|
||||
|
||||
/obj/item/weapon/storage/backpack/cultpack
|
||||
name = "trophy rack"
|
||||
@@ -89,6 +85,12 @@
|
||||
icon_state = "clownpack"
|
||||
item_state = "clownpack"
|
||||
|
||||
/obj/item/weapon/storage/backpack/mime
|
||||
name = "Parcel Parceaux"
|
||||
desc = "A silent backpack made for those silent workers. Silence Co."
|
||||
icon_state = "mimepack"
|
||||
item_state = "mimepack"
|
||||
|
||||
/obj/item/weapon/storage/backpack/medic
|
||||
name = "medical backpack"
|
||||
desc = "It's a backpack especially designed for use in a sterile environment."
|
||||
@@ -122,10 +124,9 @@
|
||||
desc = "It's a very fancy satchel made with fine leather."
|
||||
icon_state = "satchel"
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel/withwallet
|
||||
New()
|
||||
..()
|
||||
new /obj/item/weapon/storage/wallet/random( src )
|
||||
/obj/item/weapon/storage/backpack/satchel/withwallet/New()
|
||||
..()
|
||||
new /obj/item/weapon/storage/wallet/random( src )
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel_norm
|
||||
name = "satchel"
|
||||
@@ -181,8 +182,27 @@
|
||||
icon_state = "satchel-cap"
|
||||
item_state = "captainpack"
|
||||
|
||||
/obj/item/weapon/storage/backpack/mime
|
||||
name = "Parcel Parceaux"
|
||||
desc = "A silent backpack made for those silent workers. Silence Co."
|
||||
icon_state = "mimepack"
|
||||
item_state = "mimepack"
|
||||
/obj/item/weapon/storage/backpack/satchel_flat
|
||||
name = "smuggler's satchel"
|
||||
desc = "A very slim satchel that can easily fit into tight spaces."
|
||||
icon_state = "satchel-flat"
|
||||
w_class = 3 //Can fit in backpacks itself.
|
||||
storage_slots = 5
|
||||
max_combined_w_class = 15
|
||||
level = 1
|
||||
cant_hold = list(/obj/item/weapon/storage/backpack/satchel_flat) //muh recursive backpacks
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel_flat/hide(var/intact)
|
||||
if(intact)
|
||||
invisibility = 101
|
||||
anchored = 1 //otherwise you can start pulling, cover it, and drag around an invisible backpack.
|
||||
icon_state = "[initial(icon_state)]2"
|
||||
else
|
||||
invisibility = initial(invisibility)
|
||||
anchored = 0
|
||||
icon_state = initial(icon_state)
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel_flat/New()
|
||||
..()
|
||||
new /obj/item/stack/tile/plasteel(src)
|
||||
new /obj/item/weapon/crowbar(src)
|
||||
|
||||
@@ -50,8 +50,9 @@
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/stack/cable_coil,
|
||||
/obj/item/device/t_scanner,
|
||||
/obj/item/device/analyzer)
|
||||
|
||||
/obj/item/device/analyzer,
|
||||
/obj/item/weapon/extinguisher/mini
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/belt/utility/full/New()
|
||||
..()
|
||||
@@ -71,6 +72,7 @@
|
||||
new /obj/item/weapon/crowbar(src)
|
||||
new /obj/item/weapon/wirecutters(src)
|
||||
new /obj/item/device/t_scanner(src)
|
||||
new /obj/item/weapon/extinguisher/mini(src)
|
||||
|
||||
|
||||
|
||||
@@ -91,8 +93,9 @@
|
||||
/obj/item/weapon/storage/fancy/cigarettes,
|
||||
/obj/item/weapon/storage/pill_bottle,
|
||||
/obj/item/stack/medical,
|
||||
/obj/item/device/flashlight/pen
|
||||
)
|
||||
/obj/item/device/flashlight/pen,
|
||||
/obj/item/weapon/extinguisher/mini
|
||||
)
|
||||
|
||||
|
||||
/obj/item/weapon/storage/belt/security
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
|
||||
|
||||
/obj/item/weapon/storage/MouseDrop(obj/over_object)
|
||||
if(iscarbon(usr)) //all the check for item manipulation are in other places, you can safely open any storages as anything and its not buggy, i checked
|
||||
if(iscarbon(usr) || isdrone(usr)) //all the check for item manipulation are in other places, you can safely open any storages as anything and its not buggy, i checked
|
||||
var/mob/M = usr
|
||||
|
||||
if (istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech
|
||||
|
||||
@@ -83,3 +83,18 @@
|
||||
new /obj/item/stack/cable_coil(src,30,color)
|
||||
new /obj/item/weapon/wirecutters(src)
|
||||
new /obj/item/device/multitool(src)
|
||||
|
||||
/obj/item/weapon/storage/toolbox/drone
|
||||
name = "mechanical toolbox"
|
||||
icon_state = "blue"
|
||||
item_state = "toolbox_blue"
|
||||
|
||||
/obj/item/weapon/storage/toolbox/drone/New()
|
||||
..()
|
||||
new /obj/item/weapon/screwdriver(src)
|
||||
new /obj/item/weapon/wrench(src)
|
||||
new /obj/item/weapon/weldingtool(src)
|
||||
new /obj/item/weapon/crowbar(src)
|
||||
new /obj/item/stack/cable_coil(src,30,color)
|
||||
new /obj/item/weapon/wirecutters(src)
|
||||
new /obj/item/device/multitool(src)
|
||||
@@ -15,4 +15,9 @@ obj/structure/ex_act(severity)
|
||||
qdel(src)
|
||||
return
|
||||
if(3.0)
|
||||
return
|
||||
return
|
||||
|
||||
obj/structure/Destroy()
|
||||
if(opacity)
|
||||
UpdateAffectingLights()
|
||||
..()
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
|
||||
/obj/structure/closet/syndicate/personal
|
||||
desc = "It's a storage unit for operative gear."
|
||||
desc = "It's a personal storage unit for operative gear."
|
||||
|
||||
/obj/structure/closet/syndicate/personal/New()
|
||||
..()
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
|
||||
/obj/structure/closet/syndicate/nuclear
|
||||
desc = "It's a storage unit for nuclear-operative gear."
|
||||
desc = "It's a storage unit for a Syndicate boarding party."
|
||||
|
||||
/obj/structure/closet/syndicate/nuclear/New()
|
||||
..()
|
||||
@@ -37,11 +37,11 @@
|
||||
new /obj/item/weapon/storage/box/handcuffs(src)
|
||||
new /obj/item/weapon/storage/box/flashbangs(src)
|
||||
new /obj/item/weapon/storage/box/teargas(src)
|
||||
new /obj/item/weapon/gun/energy/gun(src)
|
||||
new /obj/item/weapon/gun/energy/gun(src)
|
||||
new /obj/item/weapon/gun/energy/gun(src)
|
||||
new /obj/item/weapon/gun/energy/gun(src)
|
||||
new /obj/item/weapon/gun/energy/gun(src)
|
||||
new /obj/item/weapon/gun/projectile/automatic/bulldog(src)
|
||||
new /obj/item/weapon/gun/projectile/automatic/bulldog(src)
|
||||
new /obj/item/weapon/gun/projectile/automatic/bulldog(src)
|
||||
new /obj/item/weapon/gun/projectile/automatic/bulldog(src)
|
||||
new /obj/item/weapon/gun/projectile/automatic/bulldog(src)
|
||||
new /obj/item/weapon/pinpointer/nukeop(src)
|
||||
new /obj/item/weapon/pinpointer/nukeop(src)
|
||||
new /obj/item/weapon/pinpointer/nukeop(src)
|
||||
|
||||
@@ -440,7 +440,8 @@ obj/structure/door_assembly/New()
|
||||
else if(istype(W, /obj/item/weapon/weldingtool) && !anchored )
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if(WT.remove_fuel(0,user))
|
||||
user.visible_message("[user] dissassembles the airlock assembly.", "You start to dissassemble the airlock assembly.")
|
||||
user.visible_message("<span class='warning'>[user] dissassembles the airlock assembly.</span>", \
|
||||
"You start to dissassemble the airlock assembly.")
|
||||
playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1)
|
||||
|
||||
if(do_after(user, 40))
|
||||
@@ -461,7 +462,9 @@ obj/structure/door_assembly/New()
|
||||
|
||||
else if(istype(W, /obj/item/weapon/wrench) && !anchored )
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1)
|
||||
user.visible_message("[user] secures the airlock assembly to the floor.", "You start to secure the airlock assembly to the floor.")
|
||||
user.visible_message("<span class='warning'>[user] secures the airlock assembly to the floor.</span>", \
|
||||
"You start to secure the airlock assembly to the floor.", \
|
||||
"You hear wrenching")
|
||||
|
||||
if(do_after(user, 40))
|
||||
if( src.anchored )
|
||||
@@ -472,7 +475,9 @@ obj/structure/door_assembly/New()
|
||||
|
||||
else if(istype(W, /obj/item/weapon/wrench) && anchored )
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1)
|
||||
user.visible_message("[user] unsecures the airlock assembly from the floor.", "You start to unsecure the airlock assembly from the floor.")
|
||||
user.visible_message("<span class='warning'>[user] unsecures the airlock assembly from the floor.</span>", \
|
||||
"You start to unsecure the airlock assembly from the floor.", \
|
||||
"You hear wrenching")
|
||||
if(do_after(user, 40))
|
||||
if( !src.anchored )
|
||||
return
|
||||
@@ -485,7 +490,8 @@ obj/structure/door_assembly/New()
|
||||
if (C.get_amount() < 1)
|
||||
user << "<span class='warning'>You need one length of cable to wire the airlock assembly.</span>"
|
||||
return
|
||||
user.visible_message("[user] wires the airlock assembly.", "You start to wire the airlock assembly.")
|
||||
user.visible_message("<span class='warning'>[user] wires the airlock assembly.</span>", \
|
||||
"You start to wire the airlock assembly.")
|
||||
if(do_after(user, 40))
|
||||
if(C.get_amount() < 1 || state != 0) return
|
||||
C.use(1)
|
||||
@@ -495,7 +501,8 @@ obj/structure/door_assembly/New()
|
||||
|
||||
else if(istype(W, /obj/item/weapon/wirecutters) && state == 1 )
|
||||
playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1)
|
||||
user.visible_message("[user] cuts the wires from the airlock assembly.", "You start to cut the wires from airlock assembly.")
|
||||
user.visible_message("<span class='warning'>[user] cuts the wires from the airlock assembly.</span>", \
|
||||
"You start to cut the wires from the airlock assembly.")
|
||||
|
||||
if(do_after(user, 40))
|
||||
if( src.state != 1 )
|
||||
@@ -507,12 +514,14 @@ obj/structure/door_assembly/New()
|
||||
|
||||
else if(istype(W, /obj/item/weapon/airlock_electronics) && state == 1 )
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1)
|
||||
user.visible_message("[user] installs the electronics into the airlock assembly.", "You start to install electronics into the airlock assembly.")
|
||||
user.visible_message("<span class='warning'>[user] installs the electronics into the airlock assembly.</span>", \
|
||||
"You start to install electronics into the airlock assembly.")
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
|
||||
if(do_after(user, 40))
|
||||
if( src.state != 1 )
|
||||
W.loc = src.loc
|
||||
return
|
||||
user << "<span class='notice'> You've installed the airlock electronics.</span>"
|
||||
src.state = 2
|
||||
@@ -525,7 +534,8 @@ obj/structure/door_assembly/New()
|
||||
|
||||
else if(istype(W, /obj/item/weapon/crowbar) && state == 2 )
|
||||
playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1)
|
||||
user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to remove the electronics from the airlock assembly.")
|
||||
user.visible_message("<span class='warning'>[user] removes the electronics from the airlock assembly.</span>", \
|
||||
"You start to remove electronics from the airlock assembly.")
|
||||
|
||||
if(do_after(user, 40))
|
||||
if( src.state != 2 )
|
||||
@@ -546,7 +556,8 @@ obj/structure/door_assembly/New()
|
||||
if(G.get_amount() >= 1)
|
||||
if(G.type == /obj/item/stack/sheet/rglass)
|
||||
playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1)
|
||||
user.visible_message("[user] adds [G.name] to the airlock assembly.", "You start to install [G.name] into the airlock assembly.")
|
||||
user.visible_message("<span class='warning'>[user] adds [G.name] to the airlock assembly.</span>", \
|
||||
"You start to install [G.name] into the airlock assembly.")
|
||||
if(do_after(user, 40))
|
||||
if(G.get_amount() < 1 || mineral) return
|
||||
user << "<span class='notice'>You've installed reinforced glass windows into the airlock assembly.</span>"
|
||||
@@ -569,7 +580,8 @@ obj/structure/door_assembly/New()
|
||||
var/M = G.sheettype
|
||||
if(G.get_amount() >= 2)
|
||||
playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1)
|
||||
user.visible_message("[user] adds [G.name] to the airlock assembly.", "You start to install [G.name] into the airlock assembly.")
|
||||
user.visible_message("<span class='warning'>[user] adds [G.name] to the airlock assembly.</span>", \
|
||||
"You start to install [G.name] into the airlock assembly.")
|
||||
if(do_after(user, 40))
|
||||
if(G.get_amount() < 2 || mineral) return
|
||||
user << "<span class='notice'>You've installed [M] plating into the airlock assembly.</span>"
|
||||
@@ -583,25 +595,27 @@ obj/structure/door_assembly/New()
|
||||
|
||||
else if(istype(W, /obj/item/weapon/screwdriver) && state == 2 )
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1)
|
||||
user.visible_message("[user] finishes the airlock.", "You start finishing the airlock.")
|
||||
user.visible_message("<span class='warning'>[user] finishes the airlock.</span>", \
|
||||
"You start finishing the airlock.")
|
||||
|
||||
if(do_after(user, 40))
|
||||
user << "<span class='notice'> You've finished the airlock.</span>"
|
||||
var/obj/machinery/door/airlock/door
|
||||
if(mineral == "glass")
|
||||
door = new src.glass_type( src.loc )
|
||||
else
|
||||
door = new src.airlock_type( src.loc )
|
||||
//door.req_access = src.req_access
|
||||
door.electronics = src.electronics
|
||||
if(src.electronics.use_one_access)
|
||||
door.req_one_access = src.electronics.conf_access
|
||||
else
|
||||
door.req_access = src.electronics.conf_access
|
||||
if(created_name)
|
||||
door.name = created_name
|
||||
src.electronics.loc = door
|
||||
qdel(src)
|
||||
if(state == 2)
|
||||
user << "<span class='notice'> You've finished the airlock.</span>"
|
||||
var/obj/machinery/door/airlock/door
|
||||
if(mineral == "glass")
|
||||
door = new src.glass_type( src.loc )
|
||||
else
|
||||
door = new src.airlock_type( src.loc )
|
||||
//door.req_access = src.req_access
|
||||
door.electronics = src.electronics
|
||||
if(src.electronics.use_one_access)
|
||||
door.req_one_access = src.electronics.conf_access
|
||||
else
|
||||
door.req_access = src.electronics.conf_access
|
||||
if(created_name)
|
||||
door.name = created_name
|
||||
src.electronics.loc = door
|
||||
qdel(src)
|
||||
else
|
||||
..()
|
||||
if(mineral == "glass")
|
||||
|
||||
@@ -444,6 +444,7 @@ var/global/floorIsLava = 0
|
||||
<A href='?src=\ref[src];secretsfun=traitor_all'>Everyone is the traitor</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=guns'>Summon Guns</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=magic'>Summon Magic</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=events'>Summon Events (Toggle)</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=onlyone'>There can only be one!</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=retardify'>Make all players retarded</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=eagles'>Egalitarian Station Mode</A><BR>
|
||||
|
||||
@@ -112,7 +112,8 @@ var/list/admin_verbs_debug = list(
|
||||
/client/proc/cmd_debug_del_all,
|
||||
/client/proc/restart_controller,
|
||||
/client/proc/enable_debug_verbs,
|
||||
/client/proc/callproc
|
||||
/client/proc/callproc,
|
||||
/client/proc/SDQL2_query
|
||||
)
|
||||
var/list/admin_verbs_possess = list(
|
||||
/proc/possess,
|
||||
|
||||
@@ -1853,6 +1853,22 @@
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
feedback_add_details("admin_secrets_fun_used","SM")
|
||||
rightandwrong(1, usr)
|
||||
if("events")
|
||||
if(events && !events.wizardmode)
|
||||
if(alert("Do you want to toggle summon events on?",,"Yes","No") == "Yes")
|
||||
summonevents()
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
feedback_add_details("admin_secrets_fun_used","SE")
|
||||
|
||||
else if(events && events.wizardmode)
|
||||
switch(alert("What would you like to do?",,"Intensify Summon Events","Turn Off Summon Events","Nothing"))
|
||||
if("Intensify Summon Events")
|
||||
summonevents()
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
feedback_add_details("admin_secrets_fun_used","SE")
|
||||
if("Turn Off Summon Events")
|
||||
events.toggleWizardmode()
|
||||
events.resetFrequency()
|
||||
if("dorf")
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
feedback_add_details("admin_secrets_fun_used","DF")
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
// Code taken from /bay/station.
|
||||
// Modified to allow consequtive querys in one invocation, terminated with ";"
|
||||
|
||||
// Examples
|
||||
/*
|
||||
@@ -10,6 +11,8 @@
|
||||
UPDATE /obj/machinery/light IN world SET color = "#0F0" WHERE icon_state == "tube1"
|
||||
-- Will delete all pickaxes. "IN world" is not required.
|
||||
DELETE /obj/item/weapon/pickaxe
|
||||
-- Will flicker the lights once, then turn all mobs green. The semicolon is important to separate the consecutive querys, but is not required for standard one-query use
|
||||
CALL flicker(1) ON /obj/machinery/light; UPDATE /mob SET color = "#00cc00"
|
||||
|
||||
--You can use operators other than ==, such as >, <=, != and etc..
|
||||
|
||||
@@ -31,123 +34,153 @@
|
||||
if(!query_list || query_list.len < 1)
|
||||
return
|
||||
|
||||
var/list/query_tree = SDQL_parse(query_list)
|
||||
var/list/querys = SDQL_parse(query_list)
|
||||
|
||||
if(query_tree.len < 1)
|
||||
if(!querys || querys.len < 1)
|
||||
return
|
||||
|
||||
var/list/from_objs = list()
|
||||
var/list/select_types = list()
|
||||
|
||||
switch(query_tree[1])
|
||||
if("explain")
|
||||
SDQL_testout(query_tree["explain"])
|
||||
return
|
||||
|
||||
if("call")
|
||||
if("on" in query_tree)
|
||||
select_types = query_tree["on"]
|
||||
else
|
||||
return
|
||||
|
||||
if("select", "delete", "update")
|
||||
select_types = query_tree[query_tree[1]]
|
||||
|
||||
from_objs = SDQL_from_objs(query_tree["from"])
|
||||
|
||||
var/list/objs = list()
|
||||
|
||||
for(var/type in select_types)
|
||||
var/char = copytext(type, 1, 2)
|
||||
|
||||
if(char == "/" || char == "*")
|
||||
for(var/from in from_objs)
|
||||
objs += SDQL_get_all(type, from)
|
||||
|
||||
else if(char == "'" || char == "\"")
|
||||
objs += locate(copytext(type, 2, length(type)))
|
||||
|
||||
if("where" in query_tree)
|
||||
var/objs_temp = objs
|
||||
objs = list()
|
||||
for(var/datum/d in objs_temp)
|
||||
if(SDQL_expression(d, query_tree["where"]))
|
||||
objs += d
|
||||
|
||||
var/query_log = "[usr] executed SDQL query: \"[query_text]\"."
|
||||
world.log << query_log
|
||||
message_admins(query_log)
|
||||
log_game(query_log)
|
||||
|
||||
switch(query_tree[1])
|
||||
if("call")
|
||||
var/list/call_list = query_tree["call"]
|
||||
var/list/args_list = query_tree["args"]
|
||||
for(var/list/query_tree in querys)
|
||||
var/list/from_objs = list()
|
||||
var/list/select_types = list()
|
||||
|
||||
for(var/datum/d in objs)
|
||||
for(var/v in call_list)
|
||||
// To stop any procs which sleep from executing slowly.
|
||||
if(d)
|
||||
if(hascall(d, v))
|
||||
spawn() call(d, v)(arglist(args_list)) // Spawn in case the function sleeps.
|
||||
switch(query_tree[1])
|
||||
if("explain")
|
||||
SDQL_testout(query_tree["explain"])
|
||||
return
|
||||
|
||||
if("delete")
|
||||
for(var/datum/d in objs)
|
||||
del d
|
||||
if("call")
|
||||
if("on" in query_tree)
|
||||
select_types = query_tree["on"]
|
||||
else
|
||||
return
|
||||
|
||||
if("select")
|
||||
var/text = ""
|
||||
for(var/datum/t in objs)
|
||||
text += "<A HREF='?_src_=vars;Vars=\ref[t]'>\ref[t]</A>"
|
||||
if(istype(t, /atom))
|
||||
var/atom/a = t
|
||||
if("select", "delete", "update")
|
||||
select_types = query_tree[query_tree[1]]
|
||||
|
||||
if(a.x)
|
||||
text += ": [t] at ([a.x], [a.y], [a.z])<br>"
|
||||
from_objs = SDQL_from_objs(query_tree["from"])
|
||||
|
||||
else if(a.loc && a.loc.x)
|
||||
text += ": [t] in [a.loc] at ([a.loc.x], [a.loc.y], [a.loc.z])<br>"
|
||||
var/list/objs = list()
|
||||
|
||||
for(var/type in select_types)
|
||||
var/char = copytext(type, 1, 2)
|
||||
|
||||
if(char == "/" || char == "*")
|
||||
for(var/from in from_objs)
|
||||
objs += SDQL_get_all(type, from)
|
||||
|
||||
else if(char == "'" || char == "\"")
|
||||
objs += locate(copytext(type, 2, length(type)))
|
||||
|
||||
if("where" in query_tree)
|
||||
var/objs_temp = objs
|
||||
objs = list()
|
||||
for(var/datum/d in objs_temp)
|
||||
if(SDQL_expression(d, query_tree["where"]))
|
||||
objs += d
|
||||
|
||||
switch(query_tree[1])
|
||||
if("call")
|
||||
var/list/call_list = query_tree["call"]
|
||||
var/list/args_list = query_tree["args"]
|
||||
|
||||
for(var/datum/d in objs)
|
||||
for(var/v in call_list)
|
||||
// To stop any procs which sleep from executing slowly.
|
||||
if(d)
|
||||
if(hascall(d, v))
|
||||
spawn() call(d, v)(arglist(args_list)) // Spawn in case the function sleeps.
|
||||
|
||||
if("delete")
|
||||
for(var/datum/d in objs)
|
||||
del d
|
||||
|
||||
if("select")
|
||||
var/text = ""
|
||||
for(var/datum/t in objs)
|
||||
text += "<A HREF='?_src_=vars;Vars=\ref[t]'>\ref[t]</A>"
|
||||
if(istype(t, /atom))
|
||||
var/atom/a = t
|
||||
|
||||
if(a.x)
|
||||
text += ": [t] at ([a.x], [a.y], [a.z])<br>"
|
||||
|
||||
else if(a.loc && a.loc.x)
|
||||
text += ": [t] in [a.loc] at ([a.loc.x], [a.loc.y], [a.loc.z])<br>"
|
||||
|
||||
else
|
||||
text += ": [t]<br>"
|
||||
|
||||
else
|
||||
text += ": [t]<br>"
|
||||
|
||||
else
|
||||
text += ": [t]<br>"
|
||||
usr << browse(text, "window=SDQL-result")
|
||||
|
||||
usr << browse(text, "window=SDQL-result")
|
||||
if("update")
|
||||
if("set" in query_tree)
|
||||
var/list/set_list = query_tree["set"]
|
||||
for(var/datum/d in objs)
|
||||
var/list/vals = list()
|
||||
for(var/v in set_list)
|
||||
if(v in d.vars)
|
||||
vals += v
|
||||
vals[v] = SDQL_expression(d, set_list[v])
|
||||
|
||||
if("update")
|
||||
if("set" in query_tree)
|
||||
var/list/set_list = query_tree["set"]
|
||||
for(var/datum/d in objs)
|
||||
var/list/vals = list()
|
||||
for(var/v in set_list)
|
||||
if(v in d.vars)
|
||||
vals += v
|
||||
vals[v] = SDQL_expression(d, set_list[v])
|
||||
if(istype(d, /turf))
|
||||
for(var/v in vals)
|
||||
if(v == "x" || v == "y" || v == "z")
|
||||
continue
|
||||
|
||||
if(istype(d, /turf))
|
||||
for(var/v in vals)
|
||||
if(v == "x" || v == "y" || v == "z")
|
||||
continue
|
||||
d.vars[v] = vals[v]
|
||||
|
||||
d.vars[v] = vals[v]
|
||||
|
||||
else
|
||||
for(var/v in vals)
|
||||
d.vars[v] = vals[v]
|
||||
else
|
||||
for(var/v in vals)
|
||||
d.vars[v] = vals[v]
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/proc/SDQL_parse(list/query_list)
|
||||
var/datum/SDQL_parser/parser = new(query_list)
|
||||
var/list/query_tree = parser.parse()
|
||||
var/datum/SDQL_parser/parser = new()
|
||||
var/list/querys = list()
|
||||
var/list/query_tree = list()
|
||||
var/pos = 1
|
||||
var/querys_pos = 1
|
||||
var/do_parse = 0
|
||||
|
||||
for(var/val in query_list)
|
||||
if(val == ";")
|
||||
do_parse = 1
|
||||
else if(pos >= query_list.len)
|
||||
query_tree += val
|
||||
do_parse = 1
|
||||
|
||||
if(do_parse)
|
||||
parser.query = query_tree
|
||||
var/list/parsed_tree
|
||||
parsed_tree = parser.parse()
|
||||
if(parsed_tree.len > 0)
|
||||
querys.len = querys_pos
|
||||
querys[querys_pos] = parsed_tree
|
||||
querys_pos++
|
||||
else //There was an error so don't run anything, and tell the user which query has errored.
|
||||
usr << "<span class='danger'>Parsing error on [querys_pos]\th query. Nothing was executed.</span>"
|
||||
return list()
|
||||
query_tree = list()
|
||||
do_parse = 0
|
||||
else
|
||||
query_tree += val
|
||||
pos++
|
||||
|
||||
del(parser)
|
||||
|
||||
return query_tree
|
||||
return querys
|
||||
|
||||
|
||||
|
||||
@@ -350,7 +383,7 @@
|
||||
/proc/SDQL2_tokenize(query_text)
|
||||
|
||||
var/list/whitespace = list(" ", "\n", "\t")
|
||||
var/list/single = list("(", ")", ",", "+", "-", ".")
|
||||
var/list/single = list("(", ")", ",", "+", "-", ".", ";")
|
||||
var/list/multi = list(
|
||||
"=" = list("", "="),
|
||||
"<" = list("", "=", ">"),
|
||||
@@ -451,4 +484,4 @@
|
||||
|
||||
if(word != "")
|
||||
query_list += word
|
||||
return query_list
|
||||
return query_list
|
||||
|
||||
@@ -145,7 +145,6 @@ var/intercom_range_display_status = 0
|
||||
src.verbs += /client/proc/disable_communication
|
||||
src.verbs += /client/proc/print_pointers
|
||||
src.verbs += /client/proc/count_movable_instances
|
||||
src.verbs += /client/proc/SDQL2_query
|
||||
src.verbs += /client/proc/cmd_display_del_log
|
||||
//src.verbs += /client/proc/cmd_admin_rejuvenate
|
||||
|
||||
|
||||
@@ -333,8 +333,9 @@ client/proc/one_click_antag()
|
||||
if(candidates.len >= 3) //Minimum 3 to be considered a squad
|
||||
//Pick the lucky players
|
||||
var/numagents = min(5,candidates.len) //How many commandos to spawn
|
||||
while(numagents && deathsquadspawn.len && candidates.len)
|
||||
var/spawnloc = deathsquadspawn[1]
|
||||
var/list/spawnpoints = deathsquadspawn
|
||||
while(numagents && spawnpoints.len && candidates.len)
|
||||
var/spawnloc = spawnpoints[1]
|
||||
var/mob/dead/observer/chosen_candidate = pick(candidates)
|
||||
candidates -= chosen_candidate
|
||||
if(!chosen_candidate.key)
|
||||
@@ -374,9 +375,9 @@ client/proc/one_click_antag()
|
||||
|
||||
//Logging and cleanup
|
||||
if(numagents == 1)
|
||||
message_admins("The deathsquad has spawned with [key_name_admin(Commando)] as squad leader.")
|
||||
message_admins("The deathsquad has spawned with the mission: [mission].")
|
||||
log_game("[key_name(Commando)] has been selected as a Death Commando")
|
||||
deathsquadspawn -= spawnloc
|
||||
spawnpoints -= spawnloc
|
||||
numagents--
|
||||
|
||||
return 1
|
||||
|
||||
@@ -153,8 +153,15 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
if(needs_update == -2) //fatal, can't load any data
|
||||
return 0
|
||||
|
||||
if(!S["species"] || !config.mutant_races)
|
||||
S["species"] << new /datum/species/human()
|
||||
//Species
|
||||
var/species_name
|
||||
S["species"] >> species_name
|
||||
if(config.mutant_races && species_name && (species_name in roundstart_species))
|
||||
var/newtype = roundstart_species[species_name]
|
||||
pref_species = new newtype()
|
||||
else
|
||||
pref_species = new /datum/species/human()
|
||||
|
||||
if(!S["mutant_color"] || S["mutant_color"] == "#000")
|
||||
S["mutant_color"] << "#FFF"
|
||||
|
||||
@@ -172,7 +179,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
S["facial_style_name"] >> facial_hair_style
|
||||
S["underwear"] >> underwear
|
||||
S["backbag"] >> backbag
|
||||
S["species"] >> pref_species
|
||||
S["mutant_color"] >> mutant_color
|
||||
|
||||
//Jobs
|
||||
@@ -194,8 +200,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
//Sanitize
|
||||
metadata = sanitize_text(metadata, initial(metadata))
|
||||
real_name = reject_bad_name(real_name)
|
||||
if(!(pref_species in species_list))
|
||||
pref_species = new /datum/species/human()
|
||||
if(!mutant_color || mutant_color == "#000")
|
||||
mutant_color = "#FFF"
|
||||
if(!real_name) real_name = random_name(gender)
|
||||
@@ -252,7 +256,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
S["facial_style_name"] << facial_hair_style
|
||||
S["underwear"] << underwear
|
||||
S["backbag"] << backbag
|
||||
S["species"] << pref_species
|
||||
S["species"] << pref_species.name
|
||||
S["mutant_color"] << mutant_color
|
||||
|
||||
//Jobs
|
||||
|
||||
@@ -43,3 +43,9 @@
|
||||
icon_state = "advmag0"
|
||||
magboot_state = "advmag"
|
||||
slowdown_active = SHOES_SLOWDOWN
|
||||
|
||||
/obj/item/clothing/shoes/magboots/syndie
|
||||
desc = "Reverse-engineered magnetic boots that have a heavy magnetic pull. Property of Gorlex Marauders."
|
||||
name = "blood-red magboots"
|
||||
icon_state = "syndiemag0"
|
||||
magboot_state = "syndiemag"
|
||||
@@ -124,9 +124,20 @@ var/datum/controller/event/events
|
||||
holder.forceEvent()
|
||||
|
||||
/datum/admins/proc/forceEvent()
|
||||
var/dat = ""
|
||||
var/dat = ""
|
||||
var/normal = ""
|
||||
var/magic = ""
|
||||
var/holiday = ""
|
||||
for(var/datum/round_event_control/E in events.control)
|
||||
dat += "<BR><A href='?src=\ref[src];forceevent=\ref[E]'>[E]</A>"
|
||||
dat = "<BR><A href='?src=\ref[src];forceevent=\ref[E]'>[E]</A>"
|
||||
if(E.holidayID)
|
||||
holiday += dat
|
||||
else if(E.wizardevent)
|
||||
magic += dat
|
||||
else
|
||||
normal += dat
|
||||
|
||||
dat = normal + "<BR>" + magic + "<BR>" + holiday
|
||||
|
||||
var/datum/browser/popup = new(usr, "forceevent", "Force Random Event", 300, 750)
|
||||
popup.set_content(dat)
|
||||
@@ -262,4 +273,10 @@ var/datum/controller/event/events
|
||||
for(var/datum/round_event_control/E in control)
|
||||
E.weight = initial(E.weight)
|
||||
if((E.wizardevent && !wizardmode) || (!E.wizardevent && wizardmode))
|
||||
E.weight = 0
|
||||
E.weight = 0
|
||||
message_admins("Summon Events has been [wizardmode ? "enabled, events will occur every [events.frequency_lower / 600] to [events.frequency_upper / 600] minutes" : "disabled"]!")
|
||||
log_game("Summon Events was [wizardmode ? "enabled" : "disabled"]!")
|
||||
|
||||
/datum/controller/event/proc/resetFrequency()
|
||||
frequency_lower = initial(frequency_lower)
|
||||
frequency_upper = initial(frequency_upper)
|
||||
@@ -214,20 +214,21 @@
|
||||
var/mob/living/buckled_mob
|
||||
var/list/mutations = list()
|
||||
|
||||
New()
|
||||
return
|
||||
/obj/effect/spacevine/New()
|
||||
return
|
||||
|
||||
Destroy()
|
||||
for(var/datum/spacevine_mutation/SM in mutations)
|
||||
SM.on_death(src)
|
||||
if(master)
|
||||
master.vines -= src
|
||||
master.growth_queue -= src
|
||||
if(!master.vines.len)
|
||||
var/obj/item/seeds/kudzuseed/KZ = new(loc)
|
||||
KZ.mutations |= mutations
|
||||
mutations = list()
|
||||
..()
|
||||
/obj/effect/spacevine/Destroy()
|
||||
for(var/datum/spacevine_mutation/SM in mutations)
|
||||
SM.on_death(src)
|
||||
if(master)
|
||||
master.vines -= src
|
||||
master.growth_queue -= src
|
||||
if(!master.vines.len)
|
||||
var/obj/item/seeds/kudzuseed/KZ = new(loc)
|
||||
KZ.mutations |= mutations
|
||||
mutations = list()
|
||||
SetOpacity(0)
|
||||
..()
|
||||
|
||||
/obj/effect/spacevine/proc/on_chem_effect(datum/reagent/R)
|
||||
var/override = 0
|
||||
@@ -347,84 +348,84 @@
|
||||
//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 spacevines' size to something less than 20 plots, it won't grow anymore.
|
||||
|
||||
New(loc, list/muts, mttv)
|
||||
if(!istype(src.loc,/turf/simulated/floor))
|
||||
qdel(src)
|
||||
/obj/effect/spacevine_controller/New(loc, list/muts, mttv)
|
||||
if(!istype(src.loc,/turf/simulated/floor))
|
||||
qdel(src)
|
||||
|
||||
spawn_spacevine_piece(src.loc, , muts)
|
||||
processing_objects.Add(src)
|
||||
init_subtypes(/datum/spacevine_mutation/, mutations_list)
|
||||
if(mttv != null)
|
||||
mutativness = mttv
|
||||
spawn_spacevine_piece(src.loc, , muts)
|
||||
processing_objects.Add(src)
|
||||
init_subtypes(/datum/spacevine_mutation/, mutations_list)
|
||||
if(mttv != null)
|
||||
mutativness = mttv
|
||||
|
||||
Destroy()
|
||||
processing_objects.Remove(src)
|
||||
..()
|
||||
/obj/effect/spacevine_controller/Destroy()
|
||||
processing_objects.Remove(src)
|
||||
..()
|
||||
|
||||
proc/spawn_spacevine_piece(var/turf/location, obj/effect/spacevine/parent, list/muts)
|
||||
var/obj/effect/spacevine/SV = new(location)
|
||||
growth_queue += SV
|
||||
vines += SV
|
||||
SV.master = src
|
||||
if(muts && muts.len)
|
||||
SV.mutations |= muts
|
||||
if(parent)
|
||||
SV.mutations |= parent.mutations
|
||||
SV.color = parent.color
|
||||
if(prob(mutativness))
|
||||
SV.mutations |= pick(mutations_list)
|
||||
var/datum/spacevine_mutation/randmut = pick(SV.mutations)
|
||||
SV.color = randmut.hue
|
||||
/obj/effect/spacevine_controller/proc/spawn_spacevine_piece(var/turf/location, obj/effect/spacevine/parent, list/muts)
|
||||
var/obj/effect/spacevine/SV = new(location)
|
||||
growth_queue += SV
|
||||
vines += SV
|
||||
SV.master = src
|
||||
if(muts && muts.len)
|
||||
SV.mutations |= muts
|
||||
if(parent)
|
||||
SV.mutations |= parent.mutations
|
||||
SV.color = parent.color
|
||||
if(prob(mutativness))
|
||||
SV.mutations |= pick(mutations_list)
|
||||
var/datum/spacevine_mutation/randmut = pick(SV.mutations)
|
||||
SV.color = randmut.hue
|
||||
|
||||
for(var/datum/spacevine_mutation/SM in SV.mutations)
|
||||
SM.on_birth(SV)
|
||||
for(var/datum/spacevine_mutation/SM in SV.mutations)
|
||||
SM.on_birth(SV)
|
||||
|
||||
process()
|
||||
if(!vines)
|
||||
qdel(src) //space vines exterminated. Remove the controller
|
||||
return
|
||||
if(!growth_queue)
|
||||
qdel(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
|
||||
/obj/effect/spacevine_controller/process()
|
||||
if(!vines)
|
||||
qdel(src) //space vines exterminated. Remove the controller
|
||||
return
|
||||
if(!growth_queue)
|
||||
qdel(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
|
||||
var/length = 0
|
||||
if(reached_collapse_size)
|
||||
length = 0
|
||||
else if(reached_slowdown_size)
|
||||
if(prob(25))
|
||||
length = 1
|
||||
length = min( 30 , max( length , vines.len / 5 ) )
|
||||
var/i = 0
|
||||
var/list/obj/effect/spacevine/queue_end = list()
|
||||
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
|
||||
for(var/datum/spacevine_mutation/SM in SV.mutations)
|
||||
SM.process_mutation(SV)
|
||||
if(SV.energy < 2) //If tile isn't fully grown
|
||||
if(prob(20))
|
||||
SV.grow()
|
||||
else //If tile is fully grown
|
||||
SV.buckle_mob()
|
||||
for( var/obj/effect/spacevine/SV in growth_queue )
|
||||
i++
|
||||
queue_end += SV
|
||||
growth_queue -= SV
|
||||
for(var/datum/spacevine_mutation/SM in SV.mutations)
|
||||
SM.process_mutation(SV)
|
||||
if(SV.energy < 2) //If tile isn't fully grown
|
||||
if(prob(20))
|
||||
SV.grow()
|
||||
else //If tile is fully grown
|
||||
SV.buckle_mob()
|
||||
|
||||
//if(prob(25))
|
||||
SV.spread()
|
||||
if(i >= length)
|
||||
break
|
||||
//if(prob(25))
|
||||
SV.spread()
|
||||
if(i >= length)
|
||||
break
|
||||
|
||||
growth_queue = growth_queue + queue_end
|
||||
//sleep(5)
|
||||
//src.process()
|
||||
growth_queue = growth_queue + queue_end
|
||||
//sleep(5)
|
||||
//src.process()
|
||||
|
||||
/obj/effect/spacevine/proc/grow()
|
||||
if(!energy)
|
||||
|
||||
@@ -34,6 +34,8 @@
|
||||
for(var/obj/effect/proc_holder/spell/S in L.mind.spell_list)
|
||||
S.name = initial(S.name)
|
||||
S.spell_level++
|
||||
if(S.spell_level >= 6 || S.charge_max <= 0) //Badmin checks, these should never be a problem in normal play
|
||||
continue
|
||||
S.charge_max = round(initial(S.charge_max) - S.spell_level * (initial(S.charge_max) - S.cooldown_min)/ S.level_max)
|
||||
if(S.charge_max < S.charge_counter)
|
||||
S.charge_counter = S.charge_max
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
weight = 3
|
||||
typepath = /datum/round_event/wizard/blobies/
|
||||
max_occurrences = 3
|
||||
earliest_start = 0
|
||||
earliest_start = 12000 // 20 minutes (gotta get some bodies made!)
|
||||
|
||||
/datum/round_event/wizard/blobies/start()
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
//item you want to equip to the hand, and set its slots_flags = null. Only items equiped to hands need do this.
|
||||
|
||||
/datum/round_event/wizard/cursed_items/start()
|
||||
var/item_set = pick("wizardmimic", "swords", "bigfatdoobie", "boxing", "voicemodulators", "headphones")
|
||||
var/item_set = pick("wizardmimic", "swords", "bigfatdoobie", "boxing", "voicemodulators")
|
||||
var/list/wearslots = list(slot_wear_suit, slot_shoes, slot_head, slot_wear_mask, slot_r_hand, slot_gloves, slot_ears)
|
||||
var/list/loadout = list()
|
||||
var/ruins_spaceworthiness
|
||||
@@ -29,7 +29,6 @@
|
||||
loadout[6] = /obj/item/clothing/gloves/boxing
|
||||
ruins_spaceworthiness = 1
|
||||
if("voicemodulators") loadout[4] = /obj/item/clothing/mask/gas/voice
|
||||
if("headphones") loadout[7] = /obj/item/clothing/ears/earmuffs
|
||||
|
||||
for(var/mob/living/carbon/human/H in living_mob_list)
|
||||
if(ruins_spaceworthiness && (H.z != 1 || istype(H.loc, /turf/space))) continue //#savetheminers
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/datum/round_event_control/wizard/fake_explosion //Oh no the station is gone!
|
||||
name = "Fake Explosion"
|
||||
weight = 2
|
||||
weight = 0 //Badmin exclusive now because once it's expected its not funny
|
||||
typepath = /datum/round_event/wizard/fake_explosion/
|
||||
max_occurrences = 1
|
||||
earliest_start = 0
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
/obj/item/weapon/greentext/
|
||||
name = "greentext"
|
||||
desc = "for some the pursuit of greentext is the greatest calling in life..."
|
||||
desc = "No one knows what this massive tome does, but it feels <i><font color='green'>desirable</font></i> all the same..."
|
||||
w_class = 4.0
|
||||
icon = 'icons/obj/wizard.dmi'
|
||||
icon_state = "greentext"
|
||||
|
||||
@@ -18,5 +18,6 @@
|
||||
if(H.dna)
|
||||
H.dna.species = new new_species
|
||||
H.regenerate_icons()
|
||||
H << "<span class='notice'>You feel somehow... different?</span>"
|
||||
if(!all_the_same)
|
||||
new_species = pick(all_species)
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
for(var/mob/living/carbon/human/H in mobs)
|
||||
if(!moblocs) break //locs aren't always unique, so this may come into play
|
||||
H.loc = moblocs[moblocs.len]
|
||||
do_teleport(H, moblocs[moblocs.len])
|
||||
moblocs.len -= 1
|
||||
|
||||
for(var/mob/living/carbon/human/H in living_mob_list)
|
||||
@@ -46,7 +46,7 @@
|
||||
var/list/mobs = list()
|
||||
|
||||
for(var/mob/living/carbon/human/H in living_mob_list)
|
||||
mobnames += H.name
|
||||
mobnames += H.real_name
|
||||
mobs += H
|
||||
|
||||
if(!mobs) return
|
||||
@@ -56,7 +56,7 @@
|
||||
|
||||
for(var/mob/living/carbon/human/H in mobs)
|
||||
if(!mobnames) break
|
||||
H.name = mobnames[mobnames.len]
|
||||
H.real_name = mobnames[mobnames.len]
|
||||
mobnames.len -= 1
|
||||
|
||||
for(var/mob/living/carbon/human/H in living_mob_list)
|
||||
@@ -85,10 +85,11 @@
|
||||
shuffle(mobs)
|
||||
|
||||
var/obj/effect/proc_holder/spell/targeted/mind_transfer/swapper = new /obj/effect/proc_holder/spell/targeted/mind_transfer/
|
||||
for(var/mob/living/carbon/human/H in mobs)
|
||||
while(mobs.len > 1)
|
||||
var/mob/living/carbon/human/H = pick(mobs)
|
||||
mobs -= H
|
||||
swapper.cast(list(H), mobs[mobs.len], 1)
|
||||
mobs.len -= 1
|
||||
if(mobs.len <= 1) break
|
||||
mobs -= mobs[mobs.len]
|
||||
|
||||
for(var/mob/living/carbon/human/H in living_mob_list)
|
||||
var/datum/effect/effect/system/harmless_smoke_spread/smoke = new /datum/effect/effect/system/harmless_smoke_spread()
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/obj/machinery/microwave
|
||||
name = "microwave"
|
||||
desc = "Keeps hot things hot and cold things hot."
|
||||
icon = 'icons/obj/kitchen.dmi'
|
||||
icon_state = "mw"
|
||||
layer = 2.9
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
// -------------------------
|
||||
/obj/machinery/smartfridge
|
||||
name = "smartfridge"
|
||||
desc = "Keeps cold things cold and hot things cold."
|
||||
icon = 'icons/obj/vending.dmi'
|
||||
icon_state = "smartfridge"
|
||||
layer = 2.9
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/obj/machinery/biogenerator
|
||||
name = "Biogenerator"
|
||||
desc = ""
|
||||
desc = "Converts plants into biomass, which can be used to construct useful items."
|
||||
icon = 'icons/obj/biogenerator.dmi'
|
||||
icon_state = "biogen-empty"
|
||||
density = 1
|
||||
@@ -286,4 +286,4 @@
|
||||
else if(href_list["menu"])
|
||||
menustat = "menu"
|
||||
updateUsrDialog()
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/obj/machinery/computer/shuttle/labor
|
||||
name = "labor shuttle console"
|
||||
desc = "Used to call and send the labor camp shuttle."
|
||||
icon = 'icons/obj/computer.dmi'
|
||||
icon_state = "shuttle"
|
||||
circuit = /obj/item/weapon/circuitboard/labor_shuttle
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
|
||||
/obj/machinery/computer/shuttle/mining
|
||||
name = "Mining Shuttle Console"
|
||||
desc = "Used to call and send the mining shuttle."
|
||||
req_access = list(access_mining)
|
||||
circuit = /obj/item/weapon/circuitboard/mining_shuttle
|
||||
id = "mining"
|
||||
|
||||
@@ -127,9 +127,10 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
if(ticker.mode)
|
||||
//world << "DEBUG: ticker not null"
|
||||
if(ticker.mode.name == "AI malfunction")
|
||||
var/datum/game_mode/malfunction/malf = ticker.mode
|
||||
//world << "DEBUG: malf mode ticker test"
|
||||
if(ticker.mode:malf_mode_declared)
|
||||
stat(null, "Time left: [max(ticker.mode:AI_win_timeleft/(ticker.mode:apcs/3), 0)]")
|
||||
if(malf.malf_mode_declared && (malf.apcs > 0))
|
||||
stat(null, "Time left: [max(malf.AI_win_timeleft/malf.apcs, 0)]")
|
||||
if(emergency_shuttle)
|
||||
if(emergency_shuttle.online && emergency_shuttle.location < 2)
|
||||
var/timeleft = emergency_shuttle.timeleft()
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
/mob/living/carbon/alien/say(var/message)
|
||||
return ..(message, "A")
|
||||
. = ..(message, "A")
|
||||
if(.)
|
||||
playsound(loc, "hiss", 25, 1, 1) //erp just isn't the same without sound feedback
|
||||
|
||||
/mob/living/proc/alien_talk(var/message)
|
||||
log_say("[key_name(src)] : [message]")
|
||||
|
||||
@@ -220,9 +220,9 @@
|
||||
temp = getCloneLoss()
|
||||
if(temp)
|
||||
if(temp < 30)
|
||||
msg += "[t_He] [t_has] minor genetic deformities.\n"
|
||||
msg += "[t_He] [t_has] minor cellular damage.\n"
|
||||
else
|
||||
msg += "<B>[t_He] [t_has] severe genetic deformities.</B>\n"
|
||||
msg += "<B>[t_He] [t_has] severe cellular damage.</B>\n"
|
||||
|
||||
if(fire_stacks > 0)
|
||||
msg += "[t_He] [t_is] covered in something flammable.\n"
|
||||
|
||||
@@ -121,8 +121,9 @@
|
||||
stat(null, "Intent: [a_intent]")
|
||||
stat(null, "Move Mode: [m_intent]")
|
||||
if(ticker && ticker.mode && ticker.mode.name == "AI malfunction")
|
||||
if(ticker.mode:malf_mode_declared)
|
||||
stat(null, "Time left: [max(ticker.mode:AI_win_timeleft/(ticker.mode:apcs/3), 0)]")
|
||||
var/datum/game_mode/malfunction/malf = ticker.mode
|
||||
if(malf.malf_mode_declared && (malf.apcs > 0))
|
||||
stat(null, "Time left: [max(malf.AI_win_timeleft/malf.apcs, 0)]")
|
||||
if(emergency_shuttle)
|
||||
if(emergency_shuttle.online && emergency_shuttle.location < 2)
|
||||
var/timeleft = emergency_shuttle.timeleft()
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//Things like airguitar can be done without arms, and the flap thing makes so little sense it's a keeper.
|
||||
//Intended to be called by a higher up emote proc if the requested emote isn't in the custom emotes.
|
||||
|
||||
/mob/living/emote(var/act,var/m_type=1,var/message = null)
|
||||
/mob/living/emote(var/act, var/m_type=1, var/message = null)
|
||||
var/param = null
|
||||
|
||||
if (findtext(act, "-", 1, null))
|
||||
|
||||
@@ -122,6 +122,7 @@ var/list/department_radio_keys = list(
|
||||
send_speech(message, message_range, src, bubble_type)
|
||||
|
||||
log_say("[name]/[key] : [message]")
|
||||
return 1
|
||||
|
||||
/mob/living/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq)
|
||||
if(!client)
|
||||
|
||||
@@ -173,9 +173,8 @@ var/list/ai_list = list()
|
||||
if(ticker.mode.name == "AI malfunction")
|
||||
var/datum/game_mode/malfunction/malf = ticker.mode
|
||||
for (var/datum/mind/malfai in malf.malf_ai)
|
||||
if (mind == malfai)
|
||||
if (malf.apcs >= 3)
|
||||
stat(null, "Time until station control secured: [max(malf.AI_win_timeleft/(malf.apcs/3), 0)] seconds")
|
||||
if ((mind == malfai) && (malf.apcs > 0))
|
||||
stat(null, "Time until station control secured: [max(malf.AI_win_timeleft/malf.apcs, 0)] seconds")
|
||||
|
||||
if(!stat)
|
||||
stat(null, text("System integrity: [(health+100)/2]%"))
|
||||
|
||||
@@ -303,11 +303,10 @@
|
||||
var/datum/game_mode/malfunction/malf = ticker.mode
|
||||
for (var/datum/mind/malfai in malf.malf_ai)
|
||||
if(connected_ai)
|
||||
if(connected_ai.mind == malfai)
|
||||
if(malf.apcs >= 3)
|
||||
stat(null, "Time until station control secured: [max(malf.AI_win_timeleft/(malf.apcs/3), 0)] seconds")
|
||||
else if(ticker.mode:malf_mode_declared)
|
||||
stat(null, "Time left: [max(ticker.mode:AI_win_timeleft/(ticker.mode:apcs/3), 0)]")
|
||||
if((connected_ai.mind == malfai) && (malf.apcs > 0))
|
||||
stat(null, "Time until station control secured: [max(malf.AI_win_timeleft/malf.apcs, 0)] seconds")
|
||||
else if(malf.malf_mode_declared && (malf.apcs > 0))
|
||||
stat(null, "Time left: [max(malf.AI_win_timeleft/malf.apcs, 0)]")
|
||||
|
||||
if(cell)
|
||||
stat(null, text("Charge Left: [cell.charge]/[cell.maxcharge]"))
|
||||
|
||||
@@ -90,10 +90,10 @@
|
||||
/mob/living/simple_animal/construct/attack_animal(mob/living/simple_animal/M as mob)
|
||||
if(istype(M, /mob/living/simple_animal/construct/builder))
|
||||
health += 5
|
||||
M.emote("mends some of \the <EM>[src]'s</EM> wounds.")
|
||||
M.emote("me", 1, "mends some of \the <EM>[src]'s</EM> wounds.")
|
||||
else if(src != M)
|
||||
if(M.melee_damage_upper <= 0)
|
||||
M.emote("[M.friendly] \the <EM>[src]</EM>")
|
||||
M.emote("me", 1, "[M.friendly] \the <EM>[src]</EM>.")
|
||||
else
|
||||
if(M.attack_sound)
|
||||
playsound(loc, M.attack_sound, 50, 1, 1)
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
for(var/mob/living/simple_animal/mouse/M in view(1,src))
|
||||
if(!M.stat)
|
||||
M.splat()
|
||||
emote("splats \the [M]")
|
||||
emote("me", 1, "splats \the [M]!")
|
||||
movement_target = null
|
||||
stop_automated_movement = 0
|
||||
break
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
icon_living = "corgi"
|
||||
icon_dead = "corgi_dead"
|
||||
gender = MALE
|
||||
speak = list("YAP", "Woof!", "Bark!", "AUUUUUU")
|
||||
speak = list("YAP!", "Woof!", "Bark!", "AUUUUUU!")
|
||||
speak_emote = list("barks", "woofs")
|
||||
emote_hear = list("barks", "woofs", "yaps","pants")
|
||||
emote_see = list("shakes its head", "shivers")
|
||||
emote_hear = list("barks!", "woofs!", "yaps.","pants.")
|
||||
emote_see = list("shakes its head.", "shivers.")
|
||||
speak_chance = 1
|
||||
turns_per_move = 10
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/corgi
|
||||
@@ -66,7 +66,7 @@
|
||||
for (var/mob/M in viewers(src, null))
|
||||
M.show_message("<span class='danger'>[user] gently taps [src] with [O].</span>")
|
||||
if(health>0 && prob(15))
|
||||
emote("looks at [user] with [pick("an amused","an annoyed","a confused","a resentful", "a happy", "an excited")] expression")
|
||||
emote("me", 1, "looks at [user] with [pick("an amused","an annoyed","a confused","a resentful", "a happy", "an excited")] expression.")
|
||||
return
|
||||
..()
|
||||
|
||||
@@ -222,13 +222,13 @@
|
||||
name = "Yann"
|
||||
desc = "Mon dieu! C'est un chien!"
|
||||
speak = list("le woof!", "le bark!", "JAPPE!!")
|
||||
emote_see = list("cowers in fear", "surrenders", "plays dead","looks as though there is a wall in front of him")
|
||||
emote_see = list("cowers in fear.", "surrenders.", "plays dead.","looks as though there is a wall in front of him.")
|
||||
valid = 1
|
||||
|
||||
if(/obj/item/clothing/head/det_hat)
|
||||
name = "Detective [real_name]"
|
||||
desc = "[name] sees through your lies..."
|
||||
emote_see = list("investigates the area","sniffs around for clues","searches for scooby snacks")
|
||||
emote_see = list("investigates the area.","sniffs around for clues.","searches for scooby snacks.")
|
||||
valid = 1
|
||||
|
||||
if(/obj/item/clothing/head/nursehat)
|
||||
@@ -239,20 +239,20 @@
|
||||
if(/obj/item/clothing/head/pirate, /obj/item/clothing/head/collectable/pirate)
|
||||
name = "[pick("Ol'","Scurvy","Black","Rum","Gammy","Bloody","Gangrene","Death","Long-John")] [pick("kibble","leg","beard","tooth","poop-deck","Threepwood","Le Chuck","corsair","Silver","Crusoe")]"
|
||||
desc = "Yaarghh!! Thar' be a scurvy dog!"
|
||||
emote_see = list("hunts for treasure","stares coldly...","gnashes his tiny corgi teeth")
|
||||
emote_hear = list("growls ferociously", "snarls")
|
||||
emote_see = list("hunts for treasure.","stares coldly...","gnashes his tiny corgi teeth!")
|
||||
emote_hear = list("growls ferociously!", "snarls.")
|
||||
speak = list("Arrrrgh!!","Grrrrrr!")
|
||||
valid = 1
|
||||
|
||||
if(/obj/item/clothing/head/ushanka)
|
||||
name = "[pick("Comrade","Commissar","Glorious Leader")] [real_name]"
|
||||
desc = "A follower of Karl Barx."
|
||||
emote_see = list("contemplates the failings of the capitalist economic model", "ponders the pros and cons of vangaurdism")
|
||||
emote_see = list("contemplates the failings of the capitalist economic model.", "ponders the pros and cons of vangaurdism.")
|
||||
valid = 1
|
||||
|
||||
if(/obj/item/clothing/head/collectable/police)
|
||||
name = "Officer [real_name]"
|
||||
emote_see = list("drools","looks for donuts")
|
||||
emote_see = list("drools.","looks for donuts.")
|
||||
desc = "Stop right there criminal scum!"
|
||||
valid = 1
|
||||
|
||||
@@ -264,22 +264,22 @@
|
||||
if(/obj/item/clothing/head/cardborg)
|
||||
name = "Borgi"
|
||||
speak = list("Ping!","Beep!","Woof!")
|
||||
emote_see = list("goes rogue", "sniffs out non-humans")
|
||||
emote_see = list("goes rogue.", "sniffs out non-humans.")
|
||||
desc = "Result of robotics budget cuts."
|
||||
valid = 1
|
||||
|
||||
if(/obj/item/weapon/bedsheet)
|
||||
name = "\improper Ghost"
|
||||
speak = list("WoooOOOooo~","AUUUUUUUUUUUUUUUUUU")
|
||||
emote_see = list("stumbles around", "shivers")
|
||||
emote_hear = list("howls","groans")
|
||||
emote_see = list("stumbles around.", "shivers.")
|
||||
emote_hear = list("howls!","groans.")
|
||||
desc = "Spooky!"
|
||||
valid = 1
|
||||
|
||||
if(/obj/item/clothing/head/helmet/space/santahat)
|
||||
name = "Santa's Corgi Helper"
|
||||
emote_hear = list("barks christmas songs", "yaps merrily")
|
||||
emote_see = list("looks for presents", "checks his list")
|
||||
emote_hear = list("barks christmas songs.", "yaps merrily!")
|
||||
emote_see = list("looks for presents.", "checks his list.")
|
||||
desc = "He's very fond of milk and cookies."
|
||||
valid = 1
|
||||
|
||||
@@ -290,7 +290,7 @@
|
||||
|
||||
if(/obj/item/clothing/head/hardhat/reindeer)
|
||||
name = "[real_name] the red-nosed Corgi"
|
||||
emote_hear = list("lights the way", "illuminates", "yaps")
|
||||
emote_hear = list("lights the way!", "illuminates.", "yaps!")
|
||||
desc = "He has a very shiny nose."
|
||||
SetLuminosity(1)
|
||||
valid = 1
|
||||
@@ -388,10 +388,10 @@
|
||||
movement_target.attack_animal(src)
|
||||
else if(ishuman(movement_target.loc) )
|
||||
if(prob(20))
|
||||
emote("stares at [movement_target.loc]'s [movement_target] with a sad puppy-face")
|
||||
emote("me", 1, "stares at [movement_target.loc]'s [movement_target] with a sad puppy-face")
|
||||
|
||||
if(prob(1))
|
||||
emote(pick("dances around","chases its tail"))
|
||||
emote("me", 1, pick("dances around.","chases its tail!"))
|
||||
spawn(0)
|
||||
for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2))
|
||||
dir = i
|
||||
@@ -512,7 +512,7 @@
|
||||
|
||||
if(!stat && !resting && !buckled)
|
||||
if(prob(1))
|
||||
emote(pick("dances around","chases her tail"))
|
||||
emote("me", 1, pick("dances around.","chases her tail."))
|
||||
spawn(0)
|
||||
for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2))
|
||||
dir = i
|
||||
@@ -529,7 +529,7 @@
|
||||
if(change > 0)
|
||||
if(M && stat != DEAD) // Added check to see if this mob (the corgi) is dead to fix issue 2454
|
||||
flick_overlay(image('icons/mob/animal.dmi',src,"heart-ani2",MOB_LAYER+1), list(M.client), 20)
|
||||
emote("yaps happily")
|
||||
emote("me", 1, "yaps happily!")
|
||||
else
|
||||
if(M && stat != DEAD) // Same check here, even though emote checks it as well (poor form to check it only in the help case)
|
||||
emote("growls")
|
||||
emote("me", 1, "growls!")
|
||||
@@ -1,10 +1,14 @@
|
||||
|
||||
#define HANDS_LAYER 1
|
||||
#define TOTAL_LAYERS 1
|
||||
#define HEAD_LAYER 2
|
||||
#define TOTAL_LAYERS 2
|
||||
|
||||
#define DRONE_NET_CONNECT "<span class='notice'>DRONE NETWORK: [name] connected.</span>"
|
||||
#define DRONE_NET_DISCONNECT "<span class='danger'>DRONE NETWORK: [name] is not responding.</span>"
|
||||
|
||||
|
||||
/mob/living/simple_animal/drone
|
||||
name = "drone"
|
||||
name = "Drone"
|
||||
desc = "A maintenance drone, an expendable robot built to perform station repairs."
|
||||
icon = 'icons/mob/drone.dmi'
|
||||
icon_state = "drone_grey"
|
||||
@@ -30,21 +34,34 @@
|
||||
var/laws = \
|
||||
"1. You may not involve yourself in the matters of another being, even if such matters conflict with Law Two or Law Three, unless the other being is another Drone.\n"+\
|
||||
"2. You may not harm any being, regardless of intent or circumstance.\n"+\
|
||||
"3. You must maintain, repair, improve, and power the station to the best of your abilities."
|
||||
"3. Your goals are to build, maintain, repair, improve, and power to the best of your abilities, You must never actively work against these goals."
|
||||
var/light_on = 0
|
||||
var/alarms = list("Atmosphere" = list(), "Fire" = list(), "Power" = list())
|
||||
var/obj/item/internal_storage //Drones can store one item, of any size/type in their body
|
||||
var/obj/item/head
|
||||
var/obj/item/default_storage = /obj/item/weapon/storage/toolbox/drone //If this exists, it will spawn in internal storage
|
||||
var/obj/item/default_hatmask //If this exists, it will spawn in the hat/mask slot if it can fit
|
||||
|
||||
|
||||
/mob/living/simple_animal/drone/New()
|
||||
..()
|
||||
|
||||
name = "Drone ([rand(100,999)])"
|
||||
name = name + " ([rand(100,999)])"
|
||||
real_name = name
|
||||
|
||||
access_card = new /obj/item/weapon/card/id(src)
|
||||
var/datum/job/captain/C = new /datum/job/captain
|
||||
access_card.access = C.get_access()
|
||||
|
||||
if(default_storage)
|
||||
var/obj/item/I = new default_storage(src)
|
||||
equip_to_slot_or_del(I, "drone_storage_slot")
|
||||
if(default_hatmask)
|
||||
var/obj/item/I = new default_hatmask(src)
|
||||
equip_to_slot_or_del(I, slot_head)
|
||||
|
||||
alert_drones(DRONE_NET_CONNECT)
|
||||
|
||||
/mob/living/simple_animal/drone/attack_hand(mob/user)
|
||||
if(isdrone(user))
|
||||
var/mob/living/simple_animal/drone/D = user
|
||||
@@ -54,22 +71,27 @@
|
||||
if(d_input)
|
||||
switch(d_input)
|
||||
if("Reactivate")
|
||||
D.visible_message("<span class='notice'>[D] begins to reactivate [src]</span>")
|
||||
if(!client)
|
||||
D << "<span class='notice'>This drone's OS has blue screened, there is no point in repairing them.</span>"
|
||||
return
|
||||
D.visible_message("<span class='notice'>[D] begins to reactivate [src].</span>")
|
||||
if(do_after(user,30,needhand = 1))
|
||||
health = maxHealth
|
||||
stat = CONSCIOUS
|
||||
icon_state = icon_living
|
||||
D.visible_message("<span class='notice'>[D] reactivates [src]!</span>")
|
||||
alert_drones(DRONE_NET_CONNECT)
|
||||
else
|
||||
D << "<span class='notice'>You need to remain still to reactivate [src]</span>"
|
||||
D << "<span class='notice'>You need to remain still to reactivate [src].</span>"
|
||||
|
||||
if("Cannibalize")
|
||||
if(D.health < D.maxHealth)
|
||||
D.visible_message("<span class='notice'>[D] begins to cannibalize parts from [src].</span>")
|
||||
if(do_after(D, 60,5,0))
|
||||
D.visible_message("<span class='notice'>[D] repairs itself using [src]'s remains!</span>")
|
||||
D.adjustBruteLoss(D.health - D.maxHealth)
|
||||
gib()
|
||||
D.adjustBruteLoss(-src.maxHealth)
|
||||
new /obj/effect/decal/cleanable/oil/streak(get_turf(src))
|
||||
qdel(src)
|
||||
else
|
||||
D << "<span class='notice'>You need to remain still to canibalize [src].</span>"
|
||||
else
|
||||
@@ -81,6 +103,9 @@
|
||||
|
||||
|
||||
if(ishuman(user))
|
||||
if(stat == DEAD)
|
||||
..()
|
||||
return
|
||||
if(user.get_active_hand())
|
||||
user << "<span class='notice'>Your hands are full.</span>"
|
||||
return
|
||||
@@ -112,44 +137,18 @@
|
||||
/mob/living/simple_animal/drone/IsAdvancedToolUser()
|
||||
return 1
|
||||
|
||||
/mob/living/simple_animal/drone/binarycheck()
|
||||
return 1
|
||||
|
||||
/mob/living/simple_animal/drone/radio(message, message_mode)
|
||||
if(message_mode != MODE_BINARY) //so they can hear binary but can't talk in it
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/drone/UnarmedAttack(atom/A, proximity)
|
||||
if(istype(A,/obj/item/weapon/gun))
|
||||
src << "<span class='warning'>Your subroutines prevent you from picking up [A].</span>"
|
||||
return
|
||||
|
||||
A.attack_hand(src)
|
||||
|
||||
|
||||
/mob/living/simple_animal/drone/attack_ui(slot_id)
|
||||
if(slot_id == "drone_storage_slot")
|
||||
var/obj/item/I = get_active_hand()
|
||||
var/mob/user = src
|
||||
if(I)
|
||||
if(!internal_storage)
|
||||
user.drop_item()
|
||||
internal_storage = I
|
||||
I.loc = user
|
||||
user.visible_message("<span class='notice'>[user] places \a [I] into their internal storage.</span>")
|
||||
else
|
||||
user << "<span class='notice'>Your internal storage is full.</span>"
|
||||
else
|
||||
if(internal_storage)
|
||||
var/obj/item/dummy_item = internal_storage
|
||||
user.put_in_hands(dummy_item)
|
||||
internal_storage = null
|
||||
update_inv_internal_storage()
|
||||
return 1
|
||||
if(message_mode == MODE_BINARY)
|
||||
drone_chat(message)
|
||||
return ITALICS | REDUCE_RANGE
|
||||
else
|
||||
..()
|
||||
|
||||
|
||||
/mob/living/simple_animal/drone/UnarmedAttack(atom/A, proximity)
|
||||
A.attack_hand(src)
|
||||
|
||||
|
||||
/mob/living/simple_animal/drone/swap_hand()
|
||||
var/obj/item/held_item = get_active_hand()
|
||||
if(held_item)
|
||||
@@ -169,17 +168,6 @@
|
||||
hud_used.r_hand_hud_object.icon_state = "hand_r_active"
|
||||
|
||||
|
||||
/mob/living/simple_animal/drone/put_in_l_hand(obj/item/I)
|
||||
. = ..()
|
||||
l_hand.screen_loc = ui_lhand
|
||||
update_inv_hands()
|
||||
|
||||
/mob/living/simple_animal/drone/put_in_r_hand(obj/item/I)
|
||||
. = ..()
|
||||
r_hand.screen_loc = ui_rhand
|
||||
update_inv_hands()
|
||||
|
||||
|
||||
/mob/living/simple_animal/drone/verb/check_laws()
|
||||
set category = "Drone"
|
||||
set name = "Check Laws"
|
||||
@@ -187,11 +175,9 @@
|
||||
src << "<b>Drone Laws</b>"
|
||||
src << laws
|
||||
|
||||
|
||||
/mob/living/simple_animal/drone/verb/toggle_light()
|
||||
set category = "Drone"
|
||||
set name = "Toggle drone light"
|
||||
|
||||
if(light_on)
|
||||
AddLuminosity(-4)
|
||||
else
|
||||
@@ -201,8 +187,42 @@
|
||||
|
||||
src << "<span class='notice'>Your light is now [light_on ? "on" : "off"]</span>"
|
||||
|
||||
/mob/living/simple_animal/drone/verb/drone_ping()
|
||||
set category = "Drone"
|
||||
set name = "Drone ping"
|
||||
|
||||
var/alert_s = input(src,"Alert severity level","Drone ping",null) as null|anything in list("Low","Medium","High","Critical")
|
||||
|
||||
var/area/A = get_area(loc)
|
||||
|
||||
if(alert_s && A && stat != DEAD)
|
||||
var/msg = "<span class='boldnotice'>DRONE PING: [name]: [alert_s] priority alert in [A.name]!</span>"
|
||||
alert_drones(msg)
|
||||
|
||||
/mob/living/simple_animal/drone/proc/alert_drones(msg, dead_can_hear = 0)
|
||||
for(var/mob/M in player_list)
|
||||
var/send_msg = 0
|
||||
|
||||
if(istype(M, /mob/living/simple_animal/drone) && M.stat != DEAD)
|
||||
for(var/F in src.faction)
|
||||
if(F in M.faction)
|
||||
send_msg = 1
|
||||
break
|
||||
else if(dead_can_hear && (M.stat == DEAD) && (M.client.prefs.toggles & CHAT_GHOSTEARS) && !istype(M, /mob/new_player))
|
||||
send_msg = 1
|
||||
|
||||
if(send_msg)
|
||||
M << msg
|
||||
|
||||
/mob/living/simple_animal/drone/proc/drone_chat(msg)
|
||||
var/rendered = "<i><span class='game say'>DRONE CHAT: <span class='name'>[name]</span>: [msg]</span></i>"
|
||||
alert_drones(rendered, 1)
|
||||
|
||||
/mob/living/simple_animal/drone/Login()
|
||||
..()
|
||||
update_inv_hands()
|
||||
update_inv_head()
|
||||
update_inv_internal_storage()
|
||||
check_laws()
|
||||
|
||||
if(!picked)
|
||||
@@ -213,23 +233,109 @@
|
||||
drop_l_hand()
|
||||
drop_r_hand()
|
||||
if(internal_storage)
|
||||
var/obj/item/dummy_item = internal_storage
|
||||
dummy_item.loc = get_turf(src)
|
||||
internal_storage = null
|
||||
update_inv_internal_storage()
|
||||
unEquip(internal_storage)
|
||||
if(head)
|
||||
unEquip(head)
|
||||
|
||||
alert_drones(DRONE_NET_DISCONNECT)
|
||||
|
||||
/mob/living/simple_animal/drone/gib()
|
||||
dust()
|
||||
|
||||
|
||||
/mob/living/simple_animal/drone/unEquip(obj/item/I, force)
|
||||
if(..(I,force))
|
||||
update_inv_hands()
|
||||
if(I == head)
|
||||
head = null
|
||||
update_inv_head()
|
||||
if(I == internal_storage)
|
||||
internal_storage = null
|
||||
update_inv_internal_storage()
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/mob/living/simple_animal/drone/can_equip(obj/item/I, slot)
|
||||
switch(slot)
|
||||
if(slot_head)
|
||||
if(head)
|
||||
return 0
|
||||
if(!((I.slot_flags & SLOT_HEAD) || (I.slot_flags & SLOT_MASK)))
|
||||
return 0
|
||||
return 1
|
||||
if("drone_storage_slot")
|
||||
if(internal_storage)
|
||||
return 0
|
||||
return 1
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/drone/get_item_by_slot(slot_id)
|
||||
switch(slot_id)
|
||||
if(slot_head)
|
||||
return head
|
||||
if("drone_storage_slot")
|
||||
return internal_storage
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/drone/equip_to_slot(obj/item/I, slot)
|
||||
if(!slot) return
|
||||
if(!istype(I)) return
|
||||
|
||||
if(I == l_hand)
|
||||
l_hand = null
|
||||
else if(I == r_hand)
|
||||
r_hand = null
|
||||
update_inv_hands()
|
||||
|
||||
I.screen_loc = null // will get moved if inventory is visible
|
||||
I.loc = src
|
||||
I.equipped(src, slot)
|
||||
I.layer = 20
|
||||
|
||||
switch(slot)
|
||||
if(slot_head)
|
||||
head = I
|
||||
update_inv_head()
|
||||
if("drone_storage_slot")
|
||||
internal_storage = I
|
||||
update_inv_internal_storage()
|
||||
else
|
||||
src << "<span class='danger'>You are trying to equip this item to an unsupported inventory slot. Report this to a coder!</span>"
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/drone/emp_act()
|
||||
Stun(5)
|
||||
src << "<span class='alert'><b>ER@%R: MME^RY CO#RU9T!</b> R&$b@0tin)...</span>"
|
||||
while(stunned)
|
||||
sleep(5)
|
||||
check_laws()
|
||||
|
||||
|
||||
/mob/living/simple_animal/drone/proc/triggerAlarm(var/class, area/A, var/O, var/alarmsource)
|
||||
if(stat != DEAD)
|
||||
var/list/L = src.alarms[class]
|
||||
for (var/I in L)
|
||||
if (I == A.name)
|
||||
var/list/alarm = L[I]
|
||||
var/list/sources = alarm[2]
|
||||
if (!(alarmsource in sources))
|
||||
sources += alarmsource
|
||||
return
|
||||
L[A.name] = list(A, list(alarmsource))
|
||||
src << "--- [class] alarm detected in [A.name]!"
|
||||
|
||||
/mob/living/simple_animal/drone/proc/cancelAlarm(var/class, area/A as area, obj/origin)
|
||||
if(stat != DEAD)
|
||||
var/list/L = alarms[class]
|
||||
var/cleared = 0
|
||||
for (var/I in L)
|
||||
if (I == A.name)
|
||||
var/list/alarm = L[I]
|
||||
var/list/srcs = alarm[2]
|
||||
if (origin in srcs)
|
||||
srcs -= origin
|
||||
if (srcs.len == 0)
|
||||
cleared = 1
|
||||
L -= I
|
||||
if(cleared)
|
||||
src << "--- [class] alarm in [A.name] has been cleared."
|
||||
|
||||
/mob/living/simple_animal/drone/proc/pick_colour()
|
||||
var/colour = input("Choose your colour!", "Colour", "grey") in list("grey", "blue", "red", "green", "pink", "orange")
|
||||
@@ -258,6 +364,11 @@
|
||||
|
||||
hands_overlays += image("icon"='icons/mob/items_righthand.dmi', "icon_state"="[r_state]", "layer"=-HANDS_LAYER)
|
||||
|
||||
if(client && hud_used)
|
||||
r_hand.layer = 20
|
||||
r_hand.screen_loc = ui_rhand
|
||||
client.screen |= r_hand
|
||||
|
||||
if(l_hand)
|
||||
var/l_state = l_hand.item_state
|
||||
if(!l_state)
|
||||
@@ -265,22 +376,53 @@
|
||||
|
||||
hands_overlays += image("icon"='icons/mob/items_lefthand.dmi', "icon_state"="[l_state]", "layer"=-HANDS_LAYER)
|
||||
|
||||
if(client && hud_used)
|
||||
l_hand.layer = 20
|
||||
l_hand.screen_loc = ui_lhand
|
||||
client.screen |= l_hand
|
||||
|
||||
|
||||
if(hands_overlays.len)
|
||||
drone_overlays[HANDS_LAYER] = hands_overlays
|
||||
apply_overlay(HANDS_LAYER)
|
||||
|
||||
|
||||
/mob/living/simple_animal/drone/proc/update_inv_internal_storage()
|
||||
if(client && hud_used)
|
||||
for(var/obj/screen/inventory/drone_storage in client.screen)
|
||||
if(drone_storage.slot_id == "drone_storage_slot")
|
||||
drone_storage.overlays = list()
|
||||
if(internal_storage)
|
||||
drone_storage.overlays += image("icon"=internal_storage.icon, "icon_state"=internal_storage.icon_state)
|
||||
break
|
||||
if(internal_storage && client && hud_used)
|
||||
internal_storage.screen_loc = ui_drone_storage
|
||||
client.screen += internal_storage
|
||||
|
||||
|
||||
#undef HANDS_LAYER
|
||||
#undef TOTAL_LAYERS
|
||||
/mob/living/simple_animal/drone/update_inv_head()
|
||||
remove_overlay(HEAD_LAYER)
|
||||
|
||||
if(head)
|
||||
if(client && hud_used)
|
||||
head.screen_loc = ui_drone_head
|
||||
client.screen += head
|
||||
|
||||
|
||||
var/image/head_overlay = image("icon"='icons/mob/head.dmi', "icon_state"="[head.icon_state]", "layer"=-HEAD_LAYER)
|
||||
if(istype(head, /obj/item/clothing/mask))
|
||||
head_overlay.icon = 'icons/mob/mask.dmi'
|
||||
head_overlay.color = head.color
|
||||
head_overlay.alpha = head.alpha
|
||||
head_overlay.pixel_y = -15
|
||||
|
||||
drone_overlays[HEAD_LAYER] = head_overlay
|
||||
|
||||
apply_overlay(HEAD_LAYER)
|
||||
|
||||
//These procs serve as redirection so that the drone updates as expected when other things call these procs
|
||||
/mob/living/simple_animal/drone/update_inv_l_hand()
|
||||
update_inv_hands()
|
||||
|
||||
/mob/living/simple_animal/drone/update_inv_r_hand()
|
||||
update_inv_hands()
|
||||
|
||||
/mob/living/simple_animal/drone/update_inv_wear_mask()
|
||||
update_inv_head()
|
||||
|
||||
|
||||
/mob/living/simple_animal/drone/canUseTopic()
|
||||
if(stat)
|
||||
@@ -302,6 +444,12 @@
|
||||
else
|
||||
mode()
|
||||
|
||||
#undef HANDS_LAYER
|
||||
#undef HEAD_LAYER
|
||||
#undef TOTAL_LAYERS
|
||||
|
||||
#undef DRONE_NET_CONNECT
|
||||
#undef DRONE_NET_DISCONNECT
|
||||
|
||||
//DRONE SHELL
|
||||
/obj/item/drone_shell
|
||||
@@ -312,12 +460,16 @@
|
||||
origin_tech = "programming=2;biotech=4"
|
||||
var/construction_cost = list("metal"=800, "glass"=350)
|
||||
var/construction_time=150
|
||||
var/drone_type = /mob/living/simple_animal/drone //Type of drone that will be spawned
|
||||
|
||||
/obj/item/drone_shell/attack_ghost(mob/user)
|
||||
if(jobban_isbanned(user,"pAI"))
|
||||
return
|
||||
|
||||
var/mob/living/simple_animal/drone/D = new(get_turf(loc))
|
||||
var/be_drone = alert("Become a drone? (Warning, You can no longer be cloned!)",,"Yes","No")
|
||||
if(be_drone == "No")
|
||||
return
|
||||
var/mob/living/simple_animal/drone/D = new drone_type(get_turf(loc))
|
||||
D.key = user.key
|
||||
qdel(src)
|
||||
|
||||
@@ -351,3 +503,39 @@
|
||||
|
||||
/obj/item/clothing/head/drone_holder/container_resist()
|
||||
uncurl()
|
||||
|
||||
|
||||
//More types of drones
|
||||
|
||||
/mob/living/simple_animal/drone/syndrone
|
||||
name = "Syndrone"
|
||||
desc = "A modified maintenance drone. This one brings with it the feeling of terror."
|
||||
icon_state = "drone_synd"
|
||||
icon_living = "drone_synd"
|
||||
picked = TRUE
|
||||
health = 30
|
||||
maxHealth = 120 //If you murder other drones and cannibalize them you can get much stronger
|
||||
faction = list("syndicate")
|
||||
laws = \
|
||||
"1. Interfere.\n"+\
|
||||
"2. Kill.\n"+\
|
||||
"3. Destroy."
|
||||
default_storage = /obj/item/device/radio/uplink
|
||||
default_hatmask = /obj/item/clothing/head/helmet/space/hardsuit/syndi
|
||||
|
||||
/mob/living/simple_animal/drone/syndrone/New()
|
||||
..()
|
||||
if(internal_storage && internal_storage.hidden_uplink)
|
||||
internal_storage.hidden_uplink.uses = 5
|
||||
internal_storage.name = "syndicate uplink"
|
||||
|
||||
/mob/living/simple_animal/drone/syndrone/Login()
|
||||
..()
|
||||
src << "<span class='notice'>You can kill and eat other drones to increase your health!</span>" //Inform the evil lil guy
|
||||
|
||||
/obj/item/drone_shell/syndrone
|
||||
name = "syndrone shell"
|
||||
desc = "A shell of a syndrone, a modified maintenance drone designed to infiltrate and annihilate."
|
||||
icon_state = "syndrone_item"
|
||||
drone_type = /mob/living/simple_animal/drone/syndrone
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//Corgi
|
||||
//Corgi //best comment 2014
|
||||
/mob/living/simple_animal/pug
|
||||
name = "\improper pug"
|
||||
real_name = "pug"
|
||||
@@ -8,8 +8,8 @@
|
||||
icon_dead = "pug_dead"
|
||||
speak = list("YAP", "Woof!", "Bark!", "AUUUUUU")
|
||||
speak_emote = list("barks", "woofs")
|
||||
emote_hear = list("barks", "woofs", "yaps","pants")
|
||||
emote_see = list("shakes its head", "chases its tail","shivers")
|
||||
emote_hear = list("barks!", "woofs!", "yaps.","pants.")
|
||||
emote_see = list("shakes its head.", "chases its tail.","shivers.")
|
||||
speak_chance = 1
|
||||
turns_per_move = 10
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/pug
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
if(!stat && !resting && !buckled)
|
||||
if(prob(1))
|
||||
emote(pick("chases its tail"))
|
||||
emote("me", 1, pick("chases its tail."))
|
||||
spawn(0)
|
||||
for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2))
|
||||
dir = i
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
/mob/living/simple_animal/hostile/bear/FindTarget()
|
||||
. = ..()
|
||||
if(.)
|
||||
emote("stares alertly at [.]")
|
||||
emote("me", 1, "stares alertly at [.]")
|
||||
stance = HOSTILE_STANCE_ATTACK
|
||||
|
||||
/mob/living/simple_animal/hostile/bear/LoseTarget()
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
|
||||
F
|
||||
|
||||
/mob/living/simple_animal/hostile/carp
|
||||
name = "space carp"
|
||||
@@ -44,7 +44,7 @@
|
||||
/mob/living/simple_animal/hostile/carp/FindTarget()
|
||||
. = ..()
|
||||
if(.)
|
||||
emote("nashes at [.]")
|
||||
emote("me", 1, "nashes at [.]!")
|
||||
|
||||
/mob/living/simple_animal/hostile/carp/AttackingTarget()
|
||||
. =..()
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
/mob/living/simple_animal/hostile/faithless/FindTarget()
|
||||
. = ..()
|
||||
if(.)
|
||||
emote("wails at [.]")
|
||||
emote("me", 1, "wails at [.]!")
|
||||
|
||||
/mob/living/simple_animal/hostile/faithless/AttackingTarget()
|
||||
. =..()
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
/mob/living/simple_animal/hostile/mimic/FindTarget()
|
||||
. = ..()
|
||||
if(.)
|
||||
emote("growls at [.]")
|
||||
emote("me", 1, "growls at [.].")
|
||||
|
||||
/mob/living/simple_animal/hostile/mimic/Die()
|
||||
..()
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
/mob/living/simple_animal/hostile/tree/FindTarget()
|
||||
. = ..()
|
||||
if(.)
|
||||
emote("growls at [.]")
|
||||
emote("me", 1, "growls at [.].")
|
||||
|
||||
/mob/living/simple_animal/hostile/tree/AttackingTarget()
|
||||
. =..()
|
||||
|
||||
@@ -35,10 +35,10 @@
|
||||
icon_dead = "parrot_dead"
|
||||
pass_flags = PASSTABLE
|
||||
|
||||
speak = list("Hi","Hello!","Cracker?","BAWWWWK george mellons griffing me")
|
||||
speak = list("Hi!","Hello!","Cracker?","BAWWWWK george mellons griffing me!")
|
||||
speak_emote = list("squawks","says","yells")
|
||||
emote_hear = list("squawks","bawks")
|
||||
emote_see = list("flutters its wings")
|
||||
emote_hear = list("squawks.","bawks!")
|
||||
emote_see = list("flutters its wings.")
|
||||
|
||||
speak_chance = 1 //1% (1 in 100) chance every tick; So about once per 150 seconds, assuming an average tick is 1.5s
|
||||
turns_per_move = 5
|
||||
@@ -419,7 +419,7 @@
|
||||
//Search for item to steal
|
||||
parrot_interest = search_for_item()
|
||||
if(parrot_interest)
|
||||
emote("looks in [parrot_interest]'s direction and takes flight")
|
||||
emote("me", 1, "looks in [parrot_interest]'s direction and takes flight.")
|
||||
parrot_state = PARROT_SWOOP | PARROT_STEAL
|
||||
icon_state = "parrot_fly"
|
||||
return
|
||||
@@ -441,7 +441,7 @@
|
||||
if(AM)
|
||||
if(istype(AM, /obj/item) || isliving(AM)) //If stealable item
|
||||
parrot_interest = AM
|
||||
emote("turns and flies towards [parrot_interest]")
|
||||
emote("me", 1, "turns and flies towards [parrot_interest].")
|
||||
parrot_state = PARROT_SWOOP | PARROT_STEAL
|
||||
return
|
||||
else //Else it's a perch
|
||||
@@ -739,7 +739,7 @@
|
||||
held_item = null
|
||||
if(health < maxHealth)
|
||||
adjustBruteLoss(-10)
|
||||
emote("[src] eagerly downs the cracker")
|
||||
emote("me", 1, "[src] eagerly downs the cracker.")
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
@@ -134,23 +134,23 @@
|
||||
else
|
||||
randomValue -= speak.len
|
||||
if(emote_see && randomValue <= emote_see.len)
|
||||
emote(pick(emote_see),1)
|
||||
emote("me", 1, pick(emote_see))
|
||||
else
|
||||
emote(pick(emote_hear),2)
|
||||
emote("me", 2, pick(emote_hear))
|
||||
else
|
||||
say(pick(speak))
|
||||
else
|
||||
if(!(emote_hear && emote_hear.len) && (emote_see && emote_see.len))
|
||||
emote(pick(emote_see),1)
|
||||
emote("me", 1, pick(emote_see))
|
||||
if((emote_hear && emote_hear.len) && !(emote_see && emote_see.len))
|
||||
emote(pick(emote_hear),2)
|
||||
emote("me", 2, pick(emote_hear))
|
||||
if((emote_hear && emote_hear.len) && (emote_see && emote_see.len))
|
||||
var/length = emote_hear.len + emote_see.len
|
||||
var/pick = rand(1,length)
|
||||
if(pick <= emote_see.len)
|
||||
emote(pick(emote_see),1)
|
||||
emote("me", 1, pick(emote_see))
|
||||
else
|
||||
emote(pick(emote_hear),2)
|
||||
emote("me", 2, pick(emote_hear))
|
||||
|
||||
|
||||
//Atmos
|
||||
@@ -243,18 +243,17 @@
|
||||
return "[emote], \"[text]\""
|
||||
return "says, \"[text]\"";
|
||||
|
||||
/mob/living/simple_animal/emote(var/act)
|
||||
/mob/living/simple_animal/emote(var/act, var/m_type=1, var/message = null)
|
||||
if(stat)
|
||||
return
|
||||
if(act == "scream")
|
||||
act = "makes a loud and pained whimper" //ugly hack to stop animals screaming when crushed :P
|
||||
visible_message("<B>[src]</B> [act].")
|
||||
return
|
||||
..(act)
|
||||
message = "makes a loud and pained whimper" //ugly hack to stop animals screaming when crushed :P
|
||||
act = "me"
|
||||
..(act, m_type, message)
|
||||
|
||||
/mob/living/simple_animal/attack_animal(mob/living/simple_animal/M as mob)
|
||||
if(M.melee_damage_upper == 0)
|
||||
M.emote("[M.friendly] [src]")
|
||||
M.emote("me", 1, "[M.friendly] [src]")
|
||||
else
|
||||
if(M.attack_sound)
|
||||
playsound(loc, M.attack_sound, 50, 1, 1)
|
||||
|
||||
@@ -22,10 +22,7 @@
|
||||
|
||||
message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN))
|
||||
|
||||
if(ishuman(src) || isrobot(src))
|
||||
usr.emote("me",1,message)
|
||||
else
|
||||
usr.emote(message)
|
||||
usr.emote("me",1,message)
|
||||
|
||||
/mob/proc/say_dead(var/message)
|
||||
var/name = src.real_name
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
*/
|
||||
/obj/machinery/photocopier
|
||||
name = "photocopier"
|
||||
desc = "Used to copy important documents and anatomy studies."
|
||||
icon = 'icons/obj/library.dmi'
|
||||
icon_state = "bigscanner"
|
||||
anchored = 1
|
||||
|
||||
+68
-72
@@ -383,29 +383,30 @@
|
||||
if (istype(W, /obj/item/weapon/crowbar) && opened)
|
||||
if (has_electronics==1)
|
||||
if (terminal)
|
||||
user << "<span class='danger'>Disconnect wires first.</span>"
|
||||
user << "<span class='warning'>Disconnect wires first.</span>"
|
||||
return
|
||||
playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
|
||||
user << "You are trying to remove the power control board..." //lpeters - fixed grammar issues
|
||||
if(do_after(user, 50))
|
||||
has_electronics = 0
|
||||
if ((stat & BROKEN) || malfhack)
|
||||
user.visible_message(\
|
||||
"<span class='danger'>[user.name] has broken the power control board inside [src.name]!</span>",\
|
||||
"You broke the charred power control board and remove the remains.",
|
||||
"You hear a crack!")
|
||||
//ticker.mode:apcs-- //XSI said no and I agreed. -rastaf0
|
||||
else
|
||||
user.visible_message(\
|
||||
"<span class='danger'>[user.name] has removed the power control board from [src.name]!</span>",\
|
||||
"You remove the power control board.")
|
||||
new /obj/item/weapon/module/power_control(loc)
|
||||
if (has_electronics==1)
|
||||
has_electronics = 0
|
||||
if ((stat & BROKEN) || malfhack)
|
||||
user.visible_message(\
|
||||
"<span class='warning'>[user.name] has broken the power control board inside [src.name]!</span>",\
|
||||
"<span class='notice'>You broke the charred power control board and remove the remains.</span>",
|
||||
"You hear a crack!")
|
||||
//ticker.mode:apcs-- //XSI said no and I agreed. -rastaf0
|
||||
else
|
||||
user.visible_message(\
|
||||
"<span class='warning'>[user.name] has removed the power control board from [src.name]!</span>",\
|
||||
"<span class='notice'>You remove the power control board.</span>")
|
||||
new /obj/item/weapon/module/power_control(loc)
|
||||
else if (opened!=2) //cover isn't removed
|
||||
opened = 0
|
||||
update_icon()
|
||||
else if (istype(W, /obj/item/weapon/crowbar) && !((stat & BROKEN) || malfhack) )
|
||||
if(coverlocked && !(stat & MAINT))
|
||||
user << "<span class='danger'>The cover is locked and cannot be opened.</span>"
|
||||
user << "<span class='warning'>The cover is locked and cannot be opened.</span>"
|
||||
return
|
||||
else
|
||||
opened = 1
|
||||
@@ -416,20 +417,20 @@
|
||||
return
|
||||
else
|
||||
if (stat & MAINT)
|
||||
user << "<span class='danger'>There is no connector for your power cell.</span>"
|
||||
user << "<span class='warning'>There is no connector for your power cell.</span>"
|
||||
return
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
cell = W
|
||||
user.visible_message(\
|
||||
"<span class='danger'>[user.name] has inserted the power cell to [src.name]!</span>",\
|
||||
"You insert the power cell.")
|
||||
"<span class='warning'>[user.name] has inserted the power cell to [src.name]!</span>",\
|
||||
"<span class='notice'>You insert the power cell.</span>")
|
||||
chargecount = 0
|
||||
update_icon()
|
||||
else if (istype(W, /obj/item/weapon/screwdriver)) // haxing
|
||||
if(opened)
|
||||
if (cell)
|
||||
user << "<span class='danger'>Close the APC first.</span>" //Less hints more mystery!
|
||||
user << "<span class='warning'>Close the APC first.</span>" //Less hints more mystery!
|
||||
return
|
||||
else
|
||||
if (has_electronics==1 && terminal)
|
||||
@@ -443,7 +444,7 @@
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
user << "You unfasten the electronics."
|
||||
else /* has_electronics==0 */
|
||||
user << "<span class='danger'>There is nothing to secure.</span>"
|
||||
user << "<span class='warning'>There is nothing to secure.</span>"
|
||||
return
|
||||
update_icon()
|
||||
else if(emagged)
|
||||
@@ -468,7 +469,7 @@
|
||||
user << "You [ locked ? "lock" : "unlock"] the APC interface."
|
||||
update_icon()
|
||||
else
|
||||
user << "<span class='danger'>Access denied.</span>"
|
||||
user << "<span class='warning'>Access denied.</span>"
|
||||
else if (istype(W, /obj/item/weapon/card/emag) && !(emagged || malfhack)) // trying to unlock with an emag card
|
||||
if(opened)
|
||||
user << "You must close the cover to swipe an ID card."
|
||||
@@ -482,10 +483,10 @@
|
||||
if(prob(50))
|
||||
emagged = 1
|
||||
locked = 0
|
||||
user << "You emag the APC interface."
|
||||
user << "<span class='notice'>You emag the APC interface.</span>"
|
||||
update_icon()
|
||||
else
|
||||
user << "You fail to [ locked ? "unlock" : "lock"] the APC interface."
|
||||
user << "<span class='warning'>You fail to [ locked ? "unlock" : "lock"] the APC interface.</span>"
|
||||
else if (istype(W, /obj/item/stack/cable_coil) && !terminal && opened && has_electronics!=2)
|
||||
if (src.loc:intact)
|
||||
user << "<span class='warning'>You must remove the floor plating in front of the APC first.</span>"
|
||||
@@ -494,7 +495,8 @@
|
||||
if(C.get_amount() < 10)
|
||||
user << "<span class='warning'>You need ten lengths of cable for APC.</span>"
|
||||
return
|
||||
user << "You start adding cables to the APC frame..."
|
||||
user.visible_message("<span class='warning'>[user.name] adds cables to the APC frame.</span>", \
|
||||
"You start adding cables to the APC frame...")
|
||||
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
if(do_after(user, 20))
|
||||
if (C.amount >= 10 && !terminal && opened && has_electronics != 2)
|
||||
@@ -506,59 +508,59 @@
|
||||
s.start()
|
||||
return
|
||||
C.use(10)
|
||||
user.visible_message(\
|
||||
"<span class='danger'>[user.name] has added cables to the APC frame!</span>",\
|
||||
"You add cables to the APC frame.")
|
||||
user << "<span class='notice'>You add cables to the APC frame.</span>"
|
||||
make_terminal()
|
||||
terminal.connect_to_network()
|
||||
else if (istype(W, /obj/item/weapon/wirecutters) && terminal && opened && has_electronics!=2)
|
||||
if (src.loc:intact)
|
||||
user << "<span class='danger'>You must remove the floor plating in front of the APC first.</span>"
|
||||
user << "<span class='warning'>You must remove the floor plating in front of the APC first.</span>"
|
||||
return
|
||||
user << "You begin to cut the cables..."
|
||||
user.visible_message("<span class='warning'>[user.name] dismantles the power terminal from [src].</span>", \
|
||||
"You begin to cut the cables...")
|
||||
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
if(do_after(user, 50))
|
||||
if (prob(50) && electrocute_mob(usr, terminal.powernet, terminal))
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(5, 1, src)
|
||||
s.start()
|
||||
return
|
||||
new /obj/item/stack/cable_coil(loc,10)
|
||||
user.visible_message(\
|
||||
"<span class='danger'>[user.name] cut the cables and dismantled the power terminal.</span>",\
|
||||
"You cut the cables and dismantle the power terminal.")
|
||||
qdel(terminal)
|
||||
if(terminal && opened && has_electronics!=2)
|
||||
if (prob(50) && electrocute_mob(usr, terminal.powernet, terminal))
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(5, 1, src)
|
||||
s.start()
|
||||
return
|
||||
new /obj/item/stack/cable_coil(loc,10)
|
||||
user << "<span class='notice'>You cut the cables and dismantle the power terminal.</span>"
|
||||
qdel(terminal)
|
||||
else if (istype(W, /obj/item/weapon/module/power_control) && opened && has_electronics==0 && !((stat & BROKEN) || malfhack))
|
||||
user << "You trying to insert the power control board into the frame..."
|
||||
user.visible_message("<span class='warning'>[user.name] inserts the power control board into [src].</span>", \
|
||||
"You start to insert the power control board into the frame...")
|
||||
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
if(do_after(user, 10))
|
||||
has_electronics = 1
|
||||
user << "You place the power control board inside the frame."
|
||||
qdel(W)
|
||||
if(has_electronics==0)
|
||||
has_electronics = 1
|
||||
user << "<span class='notice'>You place the power control board inside the frame.</span>"
|
||||
qdel(W)
|
||||
else if (istype(W, /obj/item/weapon/module/power_control) && opened && has_electronics==0 && ((stat & BROKEN) || malfhack))
|
||||
user << "<span class='danger'>You cannot put the board inside, the frame is damaged.</span>"
|
||||
user << "<span class='warning'>You cannot put the board inside, the frame is damaged.</span>"
|
||||
return
|
||||
else if (istype(W, /obj/item/weapon/weldingtool) && opened && has_electronics==0 && !terminal)
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if (WT.get_fuel() < 3)
|
||||
user << "<span class='notice'>You need more welding fuel to complete this task.</span>"
|
||||
user << "<span class='warning'>You need more welding fuel to complete this task.</span>"
|
||||
return
|
||||
user << "You start welding the APC frame..."
|
||||
user.visible_message("<span class='warning'>[user.name] welds [src].</span>", \
|
||||
"You start welding the APC frame...", \
|
||||
"You hear welding.")
|
||||
playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
|
||||
if(do_after(user, 50))
|
||||
if(!src || !WT.remove_fuel(3, user)) return
|
||||
if (emagged || malfhack || (stat & BROKEN) || opened==2)
|
||||
new /obj/item/stack/sheet/metal(loc)
|
||||
user.visible_message(\
|
||||
"<span class='danger'>[src] has been cut apart by [user.name] with the weldingtool.</span>",\
|
||||
"You disassembled the broken APC frame.",\
|
||||
"<span class='danger'>You hear welding.</span>")
|
||||
"<span class='warning'>[src] has been cut apart by [user.name] with the weldingtool.</span>",\
|
||||
"<span class='notice'>You disassembled the broken APC frame.</span>")
|
||||
else
|
||||
new /obj/item/apc_frame(loc)
|
||||
user.visible_message(\
|
||||
"<span class='danger'>[src] has been cut from the wall by [user.name] with the weldingtool.</span>",\
|
||||
"You cut the APC frame from the wall.",\
|
||||
"<span class='danger'>You hear welding.</span>")
|
||||
"<span class='warning'>[src] has been cut from the wall by [user.name] with the weldingtool.</span>",\
|
||||
"<span class='notice'>You cut the APC frame from the wall.</span>")
|
||||
qdel(src)
|
||||
return
|
||||
else if (istype(W, /obj/item/apc_frame) && opened && emagged)
|
||||
@@ -566,19 +568,18 @@
|
||||
if (opened==2)
|
||||
opened = 1
|
||||
user.visible_message(\
|
||||
"<span class='danger'>[user.name] has replaced the damaged APC frontal panel with a new one.</span>",\
|
||||
"You replace the damaged APC frontal panel with a new one.")
|
||||
"<span class='warning'>[user.name] has replaced the damaged APC frontal panel with a new one.</span>",\
|
||||
"<span class='notice'>You replace the damaged APC frontal panel with a new one.</span>")
|
||||
qdel(W)
|
||||
update_icon()
|
||||
else if (istype(W, /obj/item/apc_frame) && opened && ((stat & BROKEN) || malfhack))
|
||||
if (has_electronics)
|
||||
user << "You cannot repair this APC until you remove the electronics still inside."
|
||||
user << "<span class='warning'>You cannot repair this APC until you remove the electronics still inside.</span>"
|
||||
return
|
||||
user << "You begin to replace the damaged APC frame..."
|
||||
user.visible_message("<span class='warning'>[user.name] replaces the damaged APC frame with a new one.</span>",\
|
||||
"You begin to replace the damaged APC frame...")
|
||||
if(do_after(user, 50))
|
||||
user.visible_message(\
|
||||
"<span class='danger'>[user.name] has replaced the damaged APC frame with new one.</span>",\
|
||||
"You replace the damaged APC frame with new one.")
|
||||
user << "<span class='notice'>You've replaced the damaged APC frame with a new one.</span>"
|
||||
qdel(W)
|
||||
stat &= ~BROKEN
|
||||
malfai = null
|
||||
@@ -623,7 +624,8 @@
|
||||
cell.updateicon()
|
||||
|
||||
src.cell = null
|
||||
user.visible_message("<span class='danger'>[user.name] removes the power cell from [src.name]!</span>", "You remove the power cell.")
|
||||
user.visible_message("<span class='warning'>[user.name] removes the power cell from [src.name]!</span>",\
|
||||
"<span class='notice'>You remove the power cell.</span>")
|
||||
//user << "You remove the power cell."
|
||||
charging = 0
|
||||
src.update_icon()
|
||||
@@ -768,18 +770,18 @@
|
||||
|
||||
/obj/machinery/power/apc/proc/can_use(mob/user as mob, var/loud = 0) //used by attack_hand() and Topic()
|
||||
if (user.stat)
|
||||
user << "<span class='danger'>You must be conscious to use this [src]!</span>"
|
||||
user << "<span class='warning'>You must be conscious to use [src]!</span>"
|
||||
return 0
|
||||
if(!user.client)
|
||||
return 0
|
||||
if(!user.IsAdvancedToolUser())
|
||||
user << "<span class='danger'>You don't have the dexterity to use this [src]!</span>"
|
||||
user << "<span class='warning'>You don't have the dexterity to use [src]!</span>"
|
||||
return 0
|
||||
if(user.restrained())
|
||||
user << "<span class='danger'>You must have free hands to use this [src].</span>"
|
||||
user << "<span class='warning'>You must have free hands to use [src].</span>"
|
||||
return 0
|
||||
if(user.lying)
|
||||
user << "<span class='danger'>You must stand to use this [src]!</span>"
|
||||
user << "<span class='warning'>You must stand to use [src]!</span>"
|
||||
return 0
|
||||
if (istype(user, /mob/living/silicon))
|
||||
var/mob/living/silicon/ai/AI = user
|
||||
@@ -802,8 +804,7 @@
|
||||
var/mob/living/carbon/human/H = user
|
||||
if (istype(H))
|
||||
if(H.getBrainLoss() >= 60)
|
||||
for(var/mob/M in viewers(src, null))
|
||||
M << "<span class='danger'>[H] stares cluelessly at [src] and drools.</span>"
|
||||
H.visible_message("<span class='danger'>[H] stares cluelessly at [src] and drools.</span>")
|
||||
return 0
|
||||
else if(prob(H.getBrainLoss()))
|
||||
user << "<span class='danger'>You momentarily forget how to use [src].</span>"
|
||||
@@ -897,11 +898,6 @@
|
||||
/obj/machinery/power/apc/proc/toggle_breaker()
|
||||
operating = !operating
|
||||
|
||||
if(malfai)
|
||||
if (ticker.mode.config_tag == "malfunction")
|
||||
if (src.z == 1) //if (is_type_in_list(get_area(src), the_station_areas))
|
||||
operating ? ticker.mode:apcs++ : ticker.mode:apcs--
|
||||
|
||||
src.update()
|
||||
update_icon()
|
||||
|
||||
@@ -979,8 +975,8 @@
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(3, 1, src)
|
||||
s.start()
|
||||
for(var/mob/M in viewers(src))
|
||||
M.show_message("<span class='danger'>The [src.name] suddenly lets out a blast of smoke and some sparks!</span>", 3, "<span class='danger'>You hear sizzling electronics.</span>", 2)
|
||||
visible_message("<span class='danger'>The [src.name] suddenly lets out a blast of smoke and some sparks!</span>", \
|
||||
"<span class='danger'>You hear sizzling electronics.</span>")
|
||||
|
||||
|
||||
/obj/machinery/power/apc/surplus()
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
|
||||
/obj/item/ammo_casing/shotgun
|
||||
name = "shotgun slug"
|
||||
desc = "A 12 gauge slug."
|
||||
desc = "A 12 gauge lead slug."
|
||||
icon_state = "blshell"
|
||||
caliber = "shotgun"
|
||||
projectile_type = /obj/item/projectile/bullet
|
||||
@@ -54,8 +54,8 @@
|
||||
|
||||
|
||||
/obj/item/ammo_casing/shotgun/buckshot
|
||||
name = "shotgun shell"
|
||||
desc = "A 12 gauge shell."
|
||||
name = "buckshot shell"
|
||||
desc = "A 12 gauge buckshot shell."
|
||||
icon_state = "gshell"
|
||||
projectile_type = /obj/item/projectile/bullet/pellet
|
||||
pellets = 5
|
||||
@@ -63,19 +63,19 @@
|
||||
|
||||
|
||||
/obj/item/ammo_casing/shotgun/beanbag
|
||||
name = "beanbag shell"
|
||||
desc = "A weak beanbag shell."
|
||||
name = "beanbag slug"
|
||||
desc = "A weak beanbag slug for riot control."
|
||||
icon_state = "bshell"
|
||||
projectile_type = /obj/item/projectile/bullet/weakbullet
|
||||
m_amt = 250
|
||||
|
||||
|
||||
/obj/item/ammo_casing/shotgun/stunshell
|
||||
name = "stun shell"
|
||||
desc = "A stunning shell."
|
||||
/obj/item/ammo_casing/shotgun/stunslug
|
||||
name = "taser slug"
|
||||
desc = "A stunning taser slug."
|
||||
icon_state = "stunshell"
|
||||
projectile_type = /obj/item/projectile/bullet/stunshot
|
||||
m_amt = 200
|
||||
m_amt = 250
|
||||
|
||||
|
||||
/obj/item/ammo_casing/shotgun/meteorshot
|
||||
@@ -94,13 +94,13 @@
|
||||
|
||||
/obj/item/ammo_casing/shotgun/incendiary
|
||||
name = "incendiary slug"
|
||||
desc = "An incendiary shell which fires a single slug of incendiary ammo."
|
||||
desc = "An incendiary-coated shotgun slug."
|
||||
icon_state = "ishell"
|
||||
projectile_type = /obj/item/projectile/bullet/incendiary/shell
|
||||
|
||||
/obj/item/ammo_casing/shotgun/incendiary/dragonsbreath
|
||||
name = "dragonsbreath shell"
|
||||
desc = "An incendiary shell which fires a spread of incendiary ammo."
|
||||
desc = "A shotgun shell which fires a spread of incendiary pellets."
|
||||
icon_state = "ishell2"
|
||||
projectile_type = /obj/item/projectile/bullet/incendiary/shell/dragonsbreath
|
||||
pellets = 4
|
||||
|
||||
@@ -158,4 +158,28 @@ obj/item/ammo_box/magazine/tommygunm45
|
||||
|
||||
/obj/item/ammo_box/magazine/m762/update_icon()
|
||||
..()
|
||||
icon_state = "[initial(icon_state)]-[round(ammo_count(),10)]"
|
||||
icon_state = "[initial(icon_state)]-[round(ammo_count(),10)]"
|
||||
|
||||
/obj/item/ammo_box/magazine/m12g
|
||||
name = "shotgun magazine (12g taser slugs)"
|
||||
icon_state = "m12gs"
|
||||
origin_tech = "combat=3;syndicate=1"
|
||||
ammo_type = /obj/item/ammo_casing/shotgun/stunslug
|
||||
caliber = "shotgun"
|
||||
max_ammo = 8
|
||||
|
||||
/obj/item/ammo_box/magazine/m12g/update_icon()
|
||||
..()
|
||||
icon_state = "[initial(icon_state)]-[Ceiling(ammo_count(0)/8)*8]"
|
||||
|
||||
|
||||
/obj/item/ammo_box/magazine/m12g/buckshot
|
||||
name = "shotgun magazine (12g buckshot)"
|
||||
icon_state = "m12gb"
|
||||
ammo_type = /obj/item/ammo_casing/shotgun/buckshot
|
||||
|
||||
|
||||
/obj/item/ammo_box/magazine/m12g/dragon
|
||||
name = "shotgun magazine (12g dragon's breath)"
|
||||
icon_state = "m12gf"
|
||||
ammo_type = /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath
|
||||
@@ -16,6 +16,12 @@
|
||||
if(..() && chambered)
|
||||
alarmed = 0
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/proc/empty_alarm()
|
||||
if(!chambered && !get_ammo() && !alarmed)
|
||||
playsound(src.loc, 'sound/weapons/smg_empty_alarm.ogg', 40, 1)
|
||||
update_icon()
|
||||
alarmed = 1
|
||||
return
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/mini_uzi
|
||||
name = "Uzi"
|
||||
@@ -43,16 +49,11 @@
|
||||
update_icon()
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/c20r/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, flag)
|
||||
/obj/item/weapon/gun/projectile/automatic/c20r/afterattack()
|
||||
..()
|
||||
if(!chambered && !get_ammo() && !alarmed)
|
||||
playsound(user, 'sound/weapons/smg_empty_alarm.ogg', 40, 1)
|
||||
update_icon()
|
||||
alarmed = 1
|
||||
empty_alarm()
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/c20r/update_icon()
|
||||
..()
|
||||
icon_state = "c20r[magazine ? "-[Ceiling(get_ammo(0)/4)*4]" : ""][chambered ? "" : "-e"]"
|
||||
@@ -113,6 +114,38 @@
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/bulldog
|
||||
name = "\improper Bulldog shotgun"
|
||||
desc = "A compact, mag-fed semi-automatic shotgun for combat in narrow corridors. Compatible only with specialized magazines."
|
||||
icon_state = "bulldog"
|
||||
item_state = "bulldog"
|
||||
w_class = 3.0
|
||||
origin_tech = "combat=5;materials=4;syndicate=6"
|
||||
mag_type = /obj/item/ammo_box/magazine/m12g
|
||||
fire_sound = 'sound/weapons/Gunshot.ogg'
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/bulldog/New()
|
||||
..()
|
||||
update_icon()
|
||||
return
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/bulldog/proc/update_magazine()
|
||||
if(magazine)
|
||||
src.overlays = 0
|
||||
overlays += "[magazine.icon_state]"
|
||||
return
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/bulldog/update_icon()
|
||||
src.overlays = 0
|
||||
update_magazine()
|
||||
icon_state = "bulldog[chambered ? "" : "-e"]"
|
||||
return
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/bulldog/afterattack()
|
||||
..()
|
||||
empty_alarm()
|
||||
return
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/tommygun
|
||||
name = "tommy gun"
|
||||
desc = "A genuine Chicago Typewriter."
|
||||
|
||||
@@ -22,12 +22,9 @@
|
||||
mag_type = /obj/item/ammo_box/magazine/m50
|
||||
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/deagle/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, flag)
|
||||
/obj/item/weapon/gun/projectile/automatic/deagle/afterattack()
|
||||
..()
|
||||
if(!chambered && !get_ammo() && !alarmed)
|
||||
playsound(user, 'sound/weapons/smg_empty_alarm.ogg', 40, 1)
|
||||
update_icon()
|
||||
alarmed = 1
|
||||
empty_alarm()
|
||||
return
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/deagle/update_icon()
|
||||
@@ -59,12 +56,9 @@
|
||||
/obj/item/weapon/gun/projectile/automatic/gyropistol/process_chamber(var/eject_casing = 0, var/empty_chamber = 1)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/gyropistol/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, flag)
|
||||
/obj/item/weapon/gun/projectile/automatic/gyropistol/afterattack()
|
||||
..()
|
||||
if(!chambered && !get_ammo() && !alarmed)
|
||||
playsound(user, 'sound/weapons/smg_empty_alarm.ogg', 40, 1)
|
||||
update_icon()
|
||||
alarmed = 1
|
||||
empty_alarm()
|
||||
return
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/gyropistol/update_icon()
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
/obj/machinery/chem_dispenser
|
||||
name = "chem dispenser"
|
||||
desc = "Creates and dispenses chemicals."
|
||||
density = 1
|
||||
anchored = 1
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
@@ -242,6 +243,7 @@
|
||||
|
||||
/obj/machinery/chem_master
|
||||
name = "ChemMaster 3000"
|
||||
desc = "Used to bottle chemicals to create pills."
|
||||
density = 1
|
||||
anchored = 1
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
@@ -509,6 +511,7 @@
|
||||
|
||||
/obj/machinery/chem_master/condimaster
|
||||
name = "CondiMaster 3000"
|
||||
desc = "Used to create condiments and other cooking supplies."
|
||||
condi = 1
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
@@ -516,6 +519,7 @@
|
||||
|
||||
/obj/machinery/computer/pandemic
|
||||
name = "PanD.E.M.I.C 2200"
|
||||
desc = "Used to work with viruses."
|
||||
density = 1
|
||||
anchored = 1
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
@@ -805,6 +809,7 @@ obj/machinery/computer/pandemic/proc/replicator_cooldown(var/waittime)
|
||||
/obj/machinery/reagentgrinder
|
||||
|
||||
name = "All-In-One Grinder"
|
||||
desc = "Used to grind things up into raw materials."
|
||||
icon = 'icons/obj/kitchen.dmi'
|
||||
icon_state = "juicer1"
|
||||
layer = 2.9
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user