mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-23 12:07:27 +01:00
Merge branch 'master' into master
This commit is contained in:
+4
-2
@@ -7,8 +7,9 @@ git:
|
||||
|
||||
env:
|
||||
global:
|
||||
- BYOND_MAJOR="510"
|
||||
- BYOND_MINOR="1346"
|
||||
- BYOND_MAJOR="511"
|
||||
- BYOND_MINOR="1380"
|
||||
- BYOND_MACRO_COUNT=2
|
||||
matrix:
|
||||
- DM_MAPFILE="cyberiad"
|
||||
- DM_MAPFILE="metastation"
|
||||
@@ -29,6 +30,7 @@ before_script:
|
||||
- chmod +x ./install-byond.sh
|
||||
- ./install-byond.sh
|
||||
script:
|
||||
- (num=`grep -E '\\\\(red|blue|green|black|italic|bold|b|i[^mc])' **/*.dm | wc -l`; echo "$num BYOND text macros (expecting ${BYOND_MACRO_COUNT} or fewer)"; [ $num -le ${BYOND_MACRO_COUNT} ])
|
||||
- source $HOME/BYOND-${BYOND_MAJOR}.${BYOND_MINOR}/byond/bin/byondsetup
|
||||
- bash dm.sh -M${DM_MAPFILE} paradise.dme
|
||||
|
||||
|
||||
@@ -1,4 +1,12 @@
|
||||
# Paradise
|
||||
[](https://travis-ci.org/ParadiseSS13/Paradise)
|
||||
[](http://isitmaintained.com/project/paradisess13/paradise "Average time to resolve an issue")
|
||||
[](http://isitmaintained.com/project/paradisess13/paradise "Percentage of issues still open")
|
||||
[](http://www.krihelinator.xyz)
|
||||
|
||||
[](http://forthebadge.com)
|
||||
[](http://forthebadge.com)
|
||||
[](http://forthebadge.com)
|
||||
|
||||
[Website](http://www.nanotrasen.se/) - [Code](https://github.com/ParadiseSS13/Paradise) - [Discord](https://discordapp.com/invite/gXZMc?utm_source=Discord%20Widget&utm_medium=Connect)
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -378,7 +378,7 @@
|
||||
"hn" = (/obj/item/device/radio/intercom/syndicate{pixel_x = 0; pixel_y = 25},/obj/item/weapon/twohanded/required/kirbyplants,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
|
||||
"ho" = (/obj/effect/decal/warning_stripes/east,/turf/simulated/floor/plating/airless,/area/syndicate_mothership)
|
||||
"hp" = (/obj/structure/table/woodentable,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/centcom/ferry)
|
||||
"hq" = (/obj/structure/stool/bed/chair/comfy/black{dir = 8},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/centcom/ferry)
|
||||
"hq" = (/obj/structure/stool/bed/chair/comfy/black{dir = 8},/obj/effect/landmark{name = "ERT Director"},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/centcom/ferry)
|
||||
"hr" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2"; dir = 6},/area/centcom/control)
|
||||
"hs" = (/obj/machinery/door/window/northleft{dir = 2; name = "Centcom Security"; req_access_txt = "101"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/evac)
|
||||
"ht" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{tag = "icon-darkred (SOUTHWEST)"; icon_state = "darkred"; dir = 10},/area/centcom/evac)
|
||||
|
||||
+5937
-6158
File diff suppressed because it is too large
Load Diff
@@ -152,13 +152,13 @@
|
||||
"cV" = (/obj/effect/decal/cleanable/cobweb2,/turf/unsimulated/floor{name = "plating"},/area/prison/solitary)
|
||||
"cW" = (/obj/structure/stool/bed,/turf/unsimulated/floor{icon_state = "floorscorched2"},/area/prison/solitary)
|
||||
"cX" = (/obj/effect/decal/cleanable/blood,/turf/unsimulated/floor{name = "plating"},/area/prison/solitary)
|
||||
"cY" = (/obj/structure/closet/secure_closet/guncabinet,/obj/item/ammo_box/shotgun/buck,/obj/item/ammo_box/shotgun/buck,/obj/item/ammo_box/shotgun/buck,/obj/item/weapon/gun/projectile/shotgun/automatic/combat,/obj/item/weapon/gun/projectile/shotgun/automatic/combat,/obj/item/weapon/gun/projectile/shotgun/automatic/combat,/turf/simulated/floor/engine,/area/shuttle/gamma/space)
|
||||
"cY" = (/obj/structure/closet/secure_closet/guncabinet,/obj/item/weapon/storage/box/buck,/obj/item/weapon/storage/box/buck,/obj/item/weapon/storage/box/buck,/obj/item/weapon/gun/projectile/shotgun/automatic/combat,/obj/item/weapon/gun/projectile/shotgun/automatic/combat,/obj/item/weapon/gun/projectile/shotgun/automatic/combat,/turf/simulated/floor/engine,/area/shuttle/gamma/space)
|
||||
"cZ" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/mousetraps,/obj/item/weapon/storage/box/trackimp,/turf/unsimulated/floor{tag = "icon-dark"; icon_state = "dark"},/area/admin)
|
||||
"da" = (/obj/structure/table/reinforced,/obj/item/weapon/scalpel,/turf/unsimulated/floor{tag = "icon-dark"; icon_state = "dark"},/area/admin)
|
||||
"db" = (/turf/simulated/floor/holofloor{tag = "icon-carpet2-0 (EAST)"; icon_state = "carpet2-0"; dir = 4},/area/holodeck/source_theatre)
|
||||
"dc" = (/obj/structure/rack,/obj/item/weapon/kitchen/knife/ritual,/turf/unsimulated/floor{dir = 8; icon_state = "chapel"},/area/wizard_station)
|
||||
"dd" = (/obj/structure/rack,/obj/item/weapon/kitchen/knife/ritual,/turf/unsimulated/floor{icon_state = "chapel"},/area/wizard_station)
|
||||
"de" = (/obj/structure/table/reinforced,/obj/item/weapon/kitchen/knife/combat,/obj/item/weapon/kitchen/knife/combat,/obj/item/weapon/kitchen/knife/combat,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/engine,/area/shuttle/gamma/space)
|
||||
"de" = (/obj/structure/closet/secure_closet/guncabinet,/obj/item/weapon/gun/energy/gun/nuclear,/obj/item/weapon/gun/energy/gun/nuclear,/obj/item/weapon/gun/energy/gun/nuclear,/obj/machinery/light{dir = 1},/turf/simulated/floor/engine,/area/shuttle/gamma/space)
|
||||
"df" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/syndicate,/obj/item/weapon/shard,/obj/item/weapon/kitchen/knife,/obj/item/weapon/storage/firstaid/tactical,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/admin)
|
||||
"dg" = (/obj/structure/table/holotable,/obj/item/clothing/suit/armor/riot/knight/red,/obj/item/clothing/head/helmet/riot/knight/red,/obj/item/weapon/holo/claymore/red,/turf/simulated/floor/holofloor{dir = 1; icon_state = "red"},/area/holodeck/source_knightarena)
|
||||
"dh" = (/obj/structure/table/holotable,/obj/machinery/readybutton{pixel_y = 0},/turf/simulated/floor/holofloor{dir = 9; icon_state = "red"},/area/holodeck/source_knightarena)
|
||||
@@ -253,18 +253,30 @@
|
||||
"eS" = (/turf/unsimulated/floor{tag = "icon-warnplate (SOUTHEAST)"; icon_state = "warnplate"; dir = 6},/area/centcom/control)
|
||||
"eT" = (/turf/unsimulated/floor{dir = 4; icon_state = "carpetside"},/area/centcom/specops)
|
||||
"eU" = (/obj/structure/table/woodentable,/obj/item/stack/spacecash,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
|
||||
"eV" = (/obj/structure/rack,/obj/item/weapon/implanter/adrenalin{pixel_x = 12; pixel_y = -12},/obj/item/weapon/implanter/emp{pixel_x = 9; pixel_y = -9},/obj/item/weapon/implanter/explosive{pixel_x = 6; pixel_y = -6},/obj/item/weapon/implanter/explosive_macro{pixel_x = 3; pixel_y = -3},/obj/item/weapon/implanter/freedom,/obj/item/weapon/implanter/krav_maga{pixel_x = -9; pixel_y = 9},/obj/item/weapon/implanter/mindshield{pixel_x = -6; pixel_y = 6},/obj/item/weapon/implanter/storage{pixel_x = -3; pixel_y = 3},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin)
|
||||
"eW" = (/obj/structure/closet/secure_closet/guncabinet,/obj/item/ammo_box/magazine/m10mm,/obj/item/ammo_box/magazine/m10mm,/obj/item/ammo_box/magazine/m10mm,/obj/item/weapon/gun/projectile/automatic/pistol{name = "pistol"},/obj/item/weapon/gun/projectile/automatic/pistol{name = "pistol"},/obj/item/weapon/gun/projectile/automatic/pistol{name = "pistol"},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/engine,/area/shuttle/gamma/space)
|
||||
"eX" = (/obj/structure/flora/tree/pine,/turf/simulated/floor/holofloor{tag = "icon-snow"; icon_state = "snow"},/area/holodeck/source_snowfield)
|
||||
"eY" = (/obj/structure/table/woodentable,/turf/simulated/floor/holofloor{tag = "icon-grimy"; icon_state = "grimy"; dir = 2},/area/holodeck/source_meetinghall)
|
||||
"eZ" = (/turf/simulated/floor/holofloor{dir = 1; icon_state = "red"},/area/holodeck/source_basketball)
|
||||
"fa" = (/turf/unsimulated/floor{dir = 2; icon_state = "carpet15-5"},/area/centcom/control)
|
||||
"fb" = (/obj/structure/table/woodentable,/obj/machinery/photocopier{icon_state = "fax"; name = "fax machine"},/obj/item/weapon/photo{name = "butts"},/turf/unsimulated/floor{dir = 10; icon_state = "carpetside"},/area/centcom/control)
|
||||
"fc" = (/obj/machinery/computer/communications,/turf/unsimulated/floor{dir = 6; icon_state = "carpetside"},/area/centcom/control)
|
||||
"fd" = (/obj/structure/closet/secure_closet/guncabinet,/obj/item/ammo_casing/rocket,/obj/item/ammo_casing/rocket,/obj/item/ammo_casing/rocket,/obj/item/weapon/gun/rocketlauncher,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/engine,/area/shuttle/gamma/space)
|
||||
"fe" = (/obj/structure/table/reinforced,/obj/item/weapon/grenade/clusterbuster,/turf/simulated/floor/engine,/area/shuttle/gamma/space)
|
||||
"ff" = (/turf/unsimulated/wall,/area/ninja/outpost)
|
||||
"fg" = (/turf/unsimulated/wall,/area/ninja/holding)
|
||||
"fh" = (/turf/unsimulated/wall/fakeglass{tag = "icon-fakewindows (WEST)"; icon_state = "fakewindows"; dir = 8},/area/ninja/holding)
|
||||
"fi" = (/turf/unsimulated/wall/fakeglass{tag = "icon-fakewindows2 (WEST)"; icon_state = "fakewindows2"; dir = 8},/area/ninja/holding)
|
||||
"fj" = (/turf/unsimulated/wall/fakeglass{tag = "icon-fakewindows (EAST)"; icon_state = "fakewindows"; dir = 4},/area/ninja/holding)
|
||||
"fk" = (/turf/unsimulated/wall{desc = "The door appears to be locked tightly."; icon = 'icons/obj/doors/Doorhatchele.dmi'; icon_state = "door_closed"; name = "Locked Door"},/area/ninja/holding)
|
||||
"fl" = (/obj/machinery/power/apc{dir = 8; name = "Gamma Armory APC"; pixel_x = -27; pixel_y = 2},/obj/structure/cable{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/engine,/area/shuttle/gamma/space)
|
||||
"fm" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/engine,/area/shuttle/gamma/space)
|
||||
"fn" = (/obj/structure/sign/securearea,/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/shuttle/gamma/space)
|
||||
"fo" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/shuttle/gamma/space)
|
||||
"fp" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/shuttle/gamma/space)
|
||||
"fq" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/shuttle/gamma/space)
|
||||
"fr" = (/obj/structure/cable,/obj/machinery/mech_bay_recharge_port/upgraded,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/shuttle/gamma/space)
|
||||
"fs" = (/obj/machinery/computer/mech_bay_power_console,/obj/structure/cable,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/shuttle/gamma/space)
|
||||
"ft" = (/turf/unsimulated/wall{desc = "The door appears to be locked tightly."; icon = 'icons/obj/doors/Doorhatchele.dmi'; icon_state = "door_closed"; name = "Locked Door"},/area/ninja/outpost)
|
||||
"fu" = (/turf/unsimulated/floor{icon_state = "dark"},/area/ninja/outpost)
|
||||
"fv" = (/obj/structure/ninjatele{pixel_y = 25},/turf/unsimulated/floor{icon_state = "dark"},/area/ninja/outpost)
|
||||
@@ -276,6 +288,8 @@
|
||||
"fB" = (/obj/machinery/vending/boozeomat,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/ninja/holding)
|
||||
"fC" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/ninja/holding)
|
||||
"fD" = (/obj/structure/rack,/obj/item/device/camera,/obj/machinery/light/spot{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/ninja/holding)
|
||||
"fE" = (/obj/mecha/combat/durand/loaded{operation_req_access = list(1)},/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/shuttle/gamma/space)
|
||||
"fF" = (/obj/structure/table/reinforced,/obj/item/weapon/kitchen/knife/combat,/obj/item/weapon/kitchen/knife/combat,/obj/item/weapon/kitchen/knife/combat,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/shuttle/gamma/space)
|
||||
"fG" = (/obj/machinery/computer/arcade,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/ninja/holding)
|
||||
"fH" = (/turf/unsimulated/beach/sand,/area/ninja/holding)
|
||||
"fI" = (/obj/effect/overlay/palmtree_r,/obj/effect/overlay/coconut,/turf/unsimulated/beach/sand,/area/ninja/holding)
|
||||
@@ -485,7 +499,7 @@
|
||||
"jE" = (/obj/structure/rack,/obj/item/clothing/suit/wizrobe/marisa,/obj/item/clothing/shoes/sandal/marisa,/obj/item/clothing/head/wizard/marisa,/obj/item/weapon/twohanded/staff/broom,/turf/unsimulated/floor{icon_state = "grimy"},/area/wizard_station)
|
||||
"jF" = (/obj/structure/rack,/obj/item/clothing/suit/wizrobe/magusblue,/obj/item/clothing/head/wizard/magus,/obj/item/weapon/twohanded/staff,/turf/unsimulated/floor{icon_state = "grimy"},/area/wizard_station)
|
||||
"jG" = (/obj/structure/rack,/obj/item/weapon/storage/backpack/holding{pixel_x = -3; pixel_y = 3},/obj/item/weapon/storage/backpack/satchel,/obj/item/weapon/storage/backpack/holding{pixel_x = -6; pixel_y = 6},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin)
|
||||
"jH" = (/obj/structure/rack,/obj/item/weapon/implanter/adrenalin{pixel_x = 12; pixel_y = -12},/obj/item/weapon/implanter/emp{pixel_x = 9; pixel_y = -9},/obj/item/weapon/implanter/explosive{pixel_x = 6; pixel_y = -6},/obj/item/weapon/implanter/explosive_macro{pixel_x = 3; pixel_y = -3},/obj/item/weapon/implanter/freedom,/obj/item/weapon/implanter/krav_maga{pixel_x = -9; pixel_y = 9},/obj/item/weapon/implanter/loyalty{pixel_x = -6; pixel_y = 6},/obj/item/weapon/implanter/storage{pixel_x = -3; pixel_y = 3},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin)
|
||||
"jH" = (/obj/structure/table/reinforced,/obj/item/weapon/grenade/chem_grenade/incendiary{name = "Incendiary Grenade"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/shuttle/gamma/space)
|
||||
"jI" = (/turf/space,/area/adminconstruction)
|
||||
"jJ" = (/obj/effect/decal/warning_stripes/north,/turf/simulated/floor/plating/airless,/area/syndicate_mothership)
|
||||
"jK" = (/obj/effect/decal/warning_stripes/north,/obj/machinery/light,/turf/simulated/floor/plating/airless,/area/syndicate_mothership)
|
||||
@@ -606,11 +620,9 @@
|
||||
"lW" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet/swat,/obj/item/weapon/gun/energy/laser,/obj/item/weapon/shield/energy,/obj/machinery/recharger/wallcharger{pixel_x = 3; pixel_y = -30},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena_source)
|
||||
"lX" = (/obj/structure/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet/swat,/obj/item/weapon/gun/energy/laser,/obj/item/weapon/shield/energy,/obj/machinery/recharger/wallcharger{pixel_x = 3; pixel_y = -30},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena_source)
|
||||
"lY" = (/obj/effect/landmark/abductor/agent{team = 3},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"lZ" = (/obj/structure/closet/secure_closet/guncabinet,/obj/item/ammo_box/magazine/m10mm,/obj/item/ammo_box/magazine/m10mm,/obj/item/ammo_box/magazine/m10mm,/obj/item/weapon/gun/projectile/automatic/pistol{name = "pistol"},/obj/item/weapon/gun/projectile/automatic/pistol{name = "pistol"},/obj/item/weapon/gun/projectile/automatic/pistol{name = "pistol"},/turf/simulated/floor/engine,/area/shuttle/gamma/space)
|
||||
"ma" = (/obj/effect/decal/cleanable/molten_object,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/wizard_station)
|
||||
"mb" = (/turf/unsimulated/wall/fakeglass,/area/wizard_station)
|
||||
"mc" = (/obj/item/trash/chips,/obj/machinery/light/spot,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
|
||||
"md" = (/obj/machinery/computer/mech_bay_power_console,/obj/structure/cable,/turf/simulated/floor/plasteel,/area/shuttle/gamma/space)
|
||||
"me" = (/obj/effect/decal/cleanable/blood,/turf/unsimulated/floor{dir = 8; icon_state = "chapel"},/area/wizard_station)
|
||||
"mf" = (/obj/structure/stool,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
|
||||
"mg" = (/obj/item/weapon/mop,/obj/structure/mirror{pixel_x = 28},/obj/item/weapon/twohanded/required/kirbyplants,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
|
||||
@@ -791,29 +803,14 @@
|
||||
"rE" = (/turf/unsimulated/wall,/area/start)
|
||||
"rH" = (/obj/effect/landmark/start,/turf/unsimulated/floor,/area/start)
|
||||
"rK" = (/turf/unsimulated/wall/splashscreen,/area/start)
|
||||
"rP" = (/obj/structure/table/reinforced,/obj/item/weapon/grenade/clusterbuster,/obj/machinery/ai_status_display{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/engine,/area/shuttle/gamma/space)
|
||||
"rQ" = (/obj/structure/table/reinforced,/obj/item/weapon/grenade/chem_grenade/incendiary{name = "Incendiary Grenade"},/obj/machinery/light{dir = 1},/turf/simulated/floor/engine,/area/shuttle/gamma/space)
|
||||
"rU" = (/obj/structure/closet/secure_closet/guncabinet,/obj/item/weapon/gun/energy/gun/nuclear,/obj/item/weapon/gun/energy/gun/nuclear,/obj/item/weapon/gun/energy/gun/nuclear,/obj/machinery/light{dir = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/engine,/area/shuttle/gamma/space)
|
||||
"rV" = (/obj/structure/closet/secure_closet/guncabinet,/obj/item/weapon/gun/energy/sniperrifle,/obj/item/weapon/gun/energy/sniperrifle,/obj/item/weapon/gun/energy/sniperrifle,/turf/simulated/floor/engine,/area/shuttle/gamma/space)
|
||||
"rW" = (/obj/structure/closet/secure_closet/guncabinet,/obj/item/ammo_casing/rocket,/obj/item/ammo_casing/rocket,/obj/item/ammo_casing/rocket,/obj/item/weapon/gun/rocketlauncher,/turf/simulated/floor/engine,/area/shuttle/gamma/space)
|
||||
"rX" = (/turf/simulated/floor/engine,/area/shuttle/gamma/space)
|
||||
"rY" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/engine,/area/shuttle/gamma/space)
|
||||
"rZ" = (/obj/machinery/power/apc{dir = 4; name = "Gamma Armory APC"; pixel_x = 27; pixel_y = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/engine,/area/shuttle/gamma/space)
|
||||
"sa" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/shuttle/gamma/space)
|
||||
"sb" = (/turf/simulated/floor/plasteel{tag = "icon-stage_stairs"; icon_state = "stage_stairs"},/area/shuttle/gamma/space)
|
||||
"sc" = (/turf/simulated/wall/r_wall,/area/shuttle/gamma/space)
|
||||
"sd" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/shuttle/gamma/space)
|
||||
"se" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{tag = "icon-stage_stairs"; icon_state = "stage_stairs"},/area/shuttle/gamma/space)
|
||||
"sf" = (/obj/machinery/door/airlock/hatch/gamma{locked = 1; req_access_txt = "1"; use_power = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/space)
|
||||
"sg" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/shuttle/gamma/space)
|
||||
"sh" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel,/area/shuttle/gamma/space)
|
||||
"si" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel,/area/shuttle/gamma/space)
|
||||
"sj" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel,/area/shuttle/gamma/space)
|
||||
"sk" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/shuttle/gamma/space)
|
||||
"sl" = (/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/shuttle/gamma/space)
|
||||
"sm" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/table/reinforced,/obj/machinery/recharger{pixel_y = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/shuttle/gamma/space)
|
||||
"sn" = (/obj/structure/cable,/obj/machinery/mech_bay_recharge_port/upgraded,/turf/simulated/floor/plasteel,/area/shuttle/gamma/space)
|
||||
"so" = (/obj/mecha/combat/durand/loaded{operation_req_access = list(1)},/obj/machinery/light,/turf/simulated/floor/mech_bay_recharge_floor,/area/shuttle/gamma/space)
|
||||
"sq" = (/turf/unsimulated/wall,/area/centcom/control)
|
||||
"sr" = (/obj/structure/table,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/control)
|
||||
"ss" = (/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/control)
|
||||
@@ -1509,14 +1506,14 @@ aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaqaqaqaqaqaqaqaqaq
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNalababaonjnjnjnjnjnjnjnjnjnjnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNoDaeababnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNalabababnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNbZbZbZbZbZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabaNaNaNaNaNabaNaNaNaNaNabaNaNaNaNaNalabababnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNbZbZbZbZbZbZrPrQdebZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabaNaNaNaNaNabaiaNaNaNaiabaNaNaNaNaNalabababnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNbZcYlZrUrVrWrXrXrXbZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabaiaNaNaNaiabababababababaiaNaNaNaiababaeabnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNbZrXrXrXrXrXrXrYrZbZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjababababababababababababababababababababababnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNbZsasbsbsbscsdsesbbZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNsfsgsgsgsgsashsisjbZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNbZsgskslsmsasnsomdbZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNbZbZbZbZbZbZbZbZbZbZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabaNaNaNaNaNabaNaNaNaNaNabaNaNaNaNaNalabababnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNbZbZbZbZbZbZbZbZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabaNaNaNaNaNabaiaNaNaNaiabaNaNaNaNaNalabababnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNbZcYeWderVfdfebZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabaiaNaNaNaiabababababababaiaNaNaNaiababaeabnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNbZflfmrXrXrXrXbZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjababababababababababababababababababababababnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNbZsasesbsbsafnbZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNsffofqfpsgsgsgbZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNbZfrfEfssmfFjHbZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNbZbZbZbZbZbZbZbZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
@@ -1621,7 +1618,7 @@ aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNbWbWbWbWbWbWbWbWbWbW
|
||||
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDNDZDKDKDKDKDKEdDADTDKDUDKDVDWDXDYDADvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEfEgDKEaEbEcDKEiDADKDKDKDKDKDKDKEeDIaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNiQDAiRDKDKDKDKDKjfDAEjDKEkDKElDWDXDYEfaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDAjGEhDKDKDKEhjHDADKDKDKDKDKDKDKEmDADvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDAjGEhDKDKDKEheVDADKDKDKDKDKDKDKEmDADvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDuaNDADwDwDMEoDMDwDwDwDwDwDMEpDMDwDwDwEnaNDtDwEqErErEsDwDuaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDADwDwEtDKDKDKDKDKDKDKDKDKDKDKDKEuDAEnaNDvDwEvEwExEyEwEzDwjIaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEBDKECDKDKDKDKDKDKDKDKDKDKDKDKDKDKDAaNaNaNEDEEEFEwEwEwEGEDaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
"a" = (/turf/space,/area/space)
|
||||
"b" = (/turf/unsimulated/wall/other,/area/vr/roman)
|
||||
"c" = (/turf/unsimulated/beach/sand,/area/vr/roman)
|
||||
"d" = (/obj/effect/landmark{name = "avatarspawn"},/turf/unsimulated/beach/sand,/area/vr/roman)
|
||||
"e" = (/turf/unsimulated/floor{tag = "icon-warnplate (NORTHWEST)"; icon_state = "warnplate"; dir = 9},/area/vr/roman)
|
||||
"f" = (/turf/unsimulated/floor{tag = "icon-warnplate (NORTH)"; icon_state = "warnplate"; dir = 1},/area/vr/roman)
|
||||
"g" = (/turf/unsimulated/floor{tag = "icon-warnplate (NORTHEAST)"; icon_state = "warnplate"; dir = 5},/area/vr/roman)
|
||||
"h" = (/turf/unsimulated/floor{icon_state = "warnplate"; dir = 8},/area/vr/roman)
|
||||
"i" = (/turf/unsimulated/floor/lava/dense,/area/vr/roman)
|
||||
"j" = (/turf/unsimulated/floor{icon_state = "panelscorched"},/area/vr/roman)
|
||||
"k" = (/turf/unsimulated/floor{tag = "icon-warnplate (SOUTHWEST)"; icon_state = "warnplate"; dir = 10},/area/vr/roman)
|
||||
"l" = (/turf/unsimulated/floor{tag = "icon-warnplate"; icon_state = "warnplate"; dir = 2},/area/vr/roman)
|
||||
"m" = (/turf/unsimulated/floor{tag = "icon-warnplate (SOUTHEAST)"; icon_state = "warnplate"; dir = 6},/area/vr/roman)
|
||||
|
||||
(1,1,1) = {"
|
||||
aaaaaaaaaaabbbbbbbbaaaaaaaaaaa
|
||||
aaaaaaaabbbbccccccbbbbaaaaaaaa
|
||||
aaaaaaabbccccccccccccbbaaaaaaa
|
||||
aaaaabbbccccccddccccccbbbaaaaa
|
||||
aaaabbdccccccefgcccccccdbbaaaa
|
||||
aaabbddcccccchijcccccccddbbaaa
|
||||
aaabcccccccccklmccccccccccbaaa
|
||||
aabbccccccccccccccccccccccbbaa
|
||||
abbccefgcccccccccccccccccccbba
|
||||
abccchijccccccddccccccccccccba
|
||||
abcccklmcccdccccccdcccccccccba
|
||||
bbccccccccdbccccccbdccccccccbb
|
||||
bccccccccccccccccccccccccccccb
|
||||
bccccccccccccccccccccccccccccb
|
||||
bccdccccdccccccccccccdccccdccb
|
||||
bccdccccdccccccccccccdccccdccb
|
||||
bccccccccccccccccccccccccccccb
|
||||
bccccccccccccccccccccccccccccb
|
||||
bbccccccccdbccccccbdccccefgcbb
|
||||
abcccccccccdccccccdccccchijcba
|
||||
abccccccccccccccccccccccklmcba
|
||||
abbcccefgcccccddcccccccccccbba
|
||||
aabbcchijcccccccccccccccccbbaa
|
||||
aaabddklmcccccccccccccccccbaaa
|
||||
aaabbdcccccccccccccccccddbbaaa
|
||||
aaaabbcccccccccccccccccdbbaaaa
|
||||
aaaaabbbccccccddccccccbbbaaaaa
|
||||
aaaaaaabbccccccccccccbbaaaaaaa
|
||||
aaaaaaaabbbbccccccbbbbaaaaaaaa
|
||||
aaaaaaaaaaabbbbbbbbaaaaaaaaaaa
|
||||
"}
|
||||
@@ -0,0 +1,46 @@
|
||||
"a" = (/turf/space,/area/space)
|
||||
"b" = (/turf/unsimulated/wall/metal,/area/vr/lobby)
|
||||
"c" = (/turf/unsimulated/floor{tag = "icon-dark"; icon_state = "dark"},/area/vr/lobby)
|
||||
"d" = (/turf/unsimulated/wall/fakeglass{dir = 8; icon_state = "fakewindows3"; tag = "icon-fakewindows (WEST)"},/area/vr/lobby)
|
||||
"e" = (/turf/unsimulated/floor{icon_state = "gcircuit"},/area/vr/lobby)
|
||||
"f" = (/obj/machinery/telecomms/processor/preset_cent,/turf/unsimulated/floor{tag = "icon-dark"; icon_state = "dark"},/area/vr/lobby)
|
||||
"g" = (/turf/unsimulated/floor{icon_state = "light_on"},/area/vr/lobby)
|
||||
"h" = (/turf/unsimulated/wall/fakeglass{dir = 1; icon_state = "fakewindows"; tag = "icon-fakewindows (WEST)"},/area/vr/lobby)
|
||||
"i" = (/turf/unsimulated/wall/fakeglass{dir = 0; icon_state = "fakewindows"; tag = "icon-fakewindows (EAST)"},/area/vr/lobby)
|
||||
"j" = (/obj/machinery/telecomms/server/presets/centcomm,/turf/unsimulated/floor{icon_state = "gcircuit"},/area/vr/lobby)
|
||||
"k" = (/obj/machinery/telecomms/relay/preset/centcom,/turf/unsimulated/floor{icon_state = "gcircuit"},/area/vr/lobby)
|
||||
"l" = (/obj/machinery/telecomms/hub/preset_cent,/turf/unsimulated/floor{tag = "icon-dark"; icon_state = "dark"},/area/vr/lobby)
|
||||
"m" = (/obj/machinery/computer/vr_control,/turf/unsimulated/floor{tag = "icon-dark"; icon_state = "dark"},/area/vr/lobby)
|
||||
"n" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 8},/area/vr/lobby)
|
||||
"o" = (/turf/unsimulated/wall/fakeglass{tag = "icon-fakewindows (EAST)"; icon_state = "fakewindows"; dir = 4},/area/vr/lobby)
|
||||
"p" = (/obj/effect/landmark{name = "avatarspawn"},/turf/unsimulated/floor{icon_state = "gcircuit"},/area/vr/lobby)
|
||||
"q" = (/obj/machinery/telecomms/processor/preset_cent,/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/vr/lobby)
|
||||
"r" = (/turf/unsimulated/wall/fakeglass,/area/vr/lobby)
|
||||
|
||||
(1,1,1) = {"
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaabbbbaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaabbccbbaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaabbbdeedbbbaaaaaaaaaaaaaaaaaaaa
|
||||
aabbbbbbbbbbbbbbbbbbbeefeefeebbbbbbbbbbbbbbbbbbbaa
|
||||
aabbcecececececbbbeeeegheehgeeeebbbcecececececbbaa
|
||||
aabcgegegegegegcbbegcgcieeicgcgebbcgegegegegegcbaa
|
||||
aabeejekejekejeebbeceeeleeleeecebbeejekejekejeebaa
|
||||
aabcgegegegegegcbeegecgheehgcegeebcgegegegegegcbaa
|
||||
aabbcecececececbbegcegcieeicgecgebbcecececececbbaa
|
||||
aaabdmdmdmdmdmdbdfnolnobccbnolnofdbdmdmdmdmdmdbaaa
|
||||
aaabeeeeeeeeeeeceeeeeeecppceeeeeeeceeeeeeeeeeebaaa
|
||||
aaabeeeeeeeeeeeceeeeeeecppceeeeeeeceeeeeeeeeeebaaa
|
||||
aaabbbbbbbbbbbbbdfnolnobccbnolnoqdbbbbbbbbbbbbbaaa
|
||||
aaaaaaaaaaaaaaabbegcegcheehcgecgebbaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaabeegecgreeigcegeebaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaabbeceeeleeleeecebbaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaabegcgcheehcgcgebaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaabeeeegreeigeeeebaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaabbbbeefeefeebbbbaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaabbbdeedbbbaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaabbccbbaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaabbbbaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
"}
|
||||
@@ -53,15 +53,11 @@ Pipelines + Other Objects -> Pipe network
|
||||
stored = new(src, make_from = src)
|
||||
|
||||
/obj/machinery/atmospherics/Destroy()
|
||||
if(stored)
|
||||
qdel(stored)
|
||||
stored = null
|
||||
QDEL_NULL(stored)
|
||||
for(var/mob/living/L in src) //ventcrawling is serious business
|
||||
L.remove_ventcrawl()
|
||||
L.forceMove(get_turf(src))
|
||||
if(pipe_image)
|
||||
qdel(pipe_image) //we have to del it, or it might keep a ref somewhere else
|
||||
pipe_image = null
|
||||
QDEL_NULL(pipe_image) //we have to del it, or it might keep a ref somewhere else
|
||||
return ..()
|
||||
|
||||
// Icons/overlays/underlays
|
||||
|
||||
@@ -21,8 +21,7 @@
|
||||
|
||||
/obj/machinery/atmospherics/pipe/Destroy()
|
||||
releaseAirToTurf()
|
||||
qdel(air_temporary)
|
||||
air_temporary = null
|
||||
QDEL_NULL(air_temporary)
|
||||
|
||||
var/turf/T = loc
|
||||
for(var/obj/machinery/meter/meter in T)
|
||||
|
||||
@@ -70,8 +70,7 @@
|
||||
|
||||
/turf/simulated/Destroy()
|
||||
visibilityChanged()
|
||||
if(active_hotspot)
|
||||
qdel(active_hotspot)
|
||||
QDEL_NULL(active_hotspot)
|
||||
return ..()
|
||||
|
||||
/turf/simulated/assume_air(datum/gas_mixture/giver)
|
||||
|
||||
@@ -2,6 +2,22 @@
|
||||
|
||||
//Defines for construction states
|
||||
|
||||
//girder construction states
|
||||
#define GIRDER_NORMAL 0
|
||||
#define GIRDER_REINF_STRUTS 1
|
||||
#define GIRDER_REINF 2
|
||||
#define GIRDER_DISPLACED 3
|
||||
#define GIRDER_DISASSEMBLED 4
|
||||
|
||||
//rwall construction states
|
||||
#define RWALL_INTACT 0
|
||||
#define RWALL_SUPPORT_LINES 1
|
||||
#define RWALL_COVER 2
|
||||
#define RWALL_CUT_COVER 3
|
||||
#define RWALL_BOLTS 4
|
||||
#define RWALL_SUPPORT_RODS 5
|
||||
#define RWALL_SHEATH 6
|
||||
|
||||
//plastic flaps construction states
|
||||
#define PLASTIC_FLAPS_NORMAL 0
|
||||
#define PLASTIC_FLAPS_DETACHED 1
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
#define STATUS_HUD "2" // a simple line rounding the mob's number health
|
||||
#define ID_HUD "3" // the job asigned to your ID
|
||||
#define WANTED_HUD "4" // wanted, released, parroled, security status
|
||||
#define IMPLOYAL_HUD "5" // loyality implant
|
||||
#define IMPMINDSHIELD_HUD "5" // mindshield implant
|
||||
#define IMPCHEM_HUD "6" // chemical implant
|
||||
#define IMPTRACK_HUD "7" // tracking implant
|
||||
#define DIAG_STAT_HUD "8" // Silicon/Mech Status
|
||||
|
||||
@@ -124,6 +124,9 @@
|
||||
#define islarva(A) (istype((A), /mob/living/carbon/alien/larva))
|
||||
#define isslime(A) (istype((A), /mob/living/carbon/slime))
|
||||
|
||||
//Human sub-species
|
||||
#define isabductor(A) (is_species(A, "Abductor"))
|
||||
|
||||
#define isanimal(A) (istype((A), /mob/living/simple_animal))
|
||||
#define iscorgi(A) (istype((A), /mob/living/simple_animal/pet/corgi))
|
||||
#define ismouse(A) (istype((A), /mob/living/simple_animal/mouse))
|
||||
|
||||
@@ -18,4 +18,17 @@
|
||||
#define SCHECK if(world.tick_usage >= next_sleep_usage) defer()
|
||||
|
||||
//Timing Controller
|
||||
#define GLOBAL_PROC "some_magic_bullshit"
|
||||
#define GLOBAL_PROC "some_magic_bullshit"
|
||||
|
||||
#define DECLARE_GLOBAL_CONTROLLER(PROCESS,VARNAME) \
|
||||
/datum/controller/process/##PROCESS/assertGlobality(){\
|
||||
if(##VARNAME){\
|
||||
message_admins("Controller '[name]' tried to become global but found another controller there already. Deleting the old controller.");\
|
||||
qdel(##VARNAME);}\
|
||||
##VARNAME = src;}\
|
||||
\
|
||||
/datum/controller/process/##PROCESS/releaseGlobality(){\
|
||||
if(##VARNAME == src)\
|
||||
##VARNAME = null;\
|
||||
else\
|
||||
message_admins("Controller '[name]' asked to release global control in spite of not having it!");}\
|
||||
|
||||
@@ -52,7 +52,9 @@
|
||||
#define SHUTTLE_ALREADY_DOCKED "we_are_already_docked"
|
||||
#define SHUTTLE_SOMEONE_ELSE_DOCKED "someone_else_docked"
|
||||
|
||||
|
||||
// Ripples, effects that signal a shuttle's arrival
|
||||
#define SHUTTLE_RIPPLE_TIME 100
|
||||
#define SHUTTLE_RIPPLE_FADEIN 50
|
||||
|
||||
/*
|
||||
Logic
|
||||
|
||||
@@ -78,8 +78,8 @@
|
||||
for (var/thing in atoms)
|
||||
var/atom/A = thing
|
||||
if(typecache[A.type])
|
||||
. += A
|
||||
|
||||
. += A
|
||||
|
||||
//Like typesof() or subtypesof(), but returns a typecache instead of a list
|
||||
/proc/typecacheof(path, ignore_root_path)
|
||||
if(ispath(path))
|
||||
@@ -625,7 +625,7 @@ proc/dd_sortedObjectList(list/incoming)
|
||||
|
||||
/datum/alarm/dd_SortValue()
|
||||
return "[sanitize(last_name)]"
|
||||
|
||||
|
||||
//Picks from the list, with some safeties, and returns the "default" arg if it fails
|
||||
#define DEFAULTPICK(L, default) ((istype(L, /list) && L:len) ? pick(L) : default)
|
||||
|
||||
@@ -637,3 +637,6 @@ proc/dd_sortedObjectList(list/incoming)
|
||||
#define LAZYACCESS(L, I) (L ? (isnum(I) ? (I > 0 && I <= L.len ? L[I] : null) : L[I]) : null)
|
||||
#define LAZYLEN(L) length(L)
|
||||
#define LAZYCLEARLIST(L) if(L) L.Cut()
|
||||
|
||||
// LAZYING PT 2: THE LAZENING
|
||||
#define LAZYREINITLIST(L) LAZYCLEARLIST(L); LAZYINITLIST(L);
|
||||
|
||||
@@ -363,6 +363,13 @@ proc/add_logs(mob/user, mob/target, what_done, var/object=null, var/addition=nul
|
||||
if(progress)
|
||||
qdel(progbar)
|
||||
|
||||
/proc/is_species(A, species_name)
|
||||
. = FALSE
|
||||
if(ishuman(A))
|
||||
var/mob/living/carbon/human/H = A
|
||||
if(H.get_species() == species_name)
|
||||
. = TRUE
|
||||
|
||||
/proc/admin_mob_info(mob/M, mob/user = usr)
|
||||
if(!ismob(M))
|
||||
to_chat(user, "This can only be used on instances of type /mob")
|
||||
|
||||
@@ -1,2 +1,5 @@
|
||||
#define QDEL_IN(item, time) addtimer(GLOBAL_PROC, "qdel", time, FALSE, item)
|
||||
#define QDEL_NULL(item) qdel(item); item = null
|
||||
#define QDEL_NULL(item) if(item) { qdel(item); item = null }
|
||||
#define QDEL_LIST(L) if(L) { for(var/I in L) qdel(I); L.Cut(); }
|
||||
#define QDEL_LIST_ASSOC(L) if(L) { for(var/I in L) { qdel(L[I]); qdel(I); } L.Cut(); }
|
||||
#define QDEL_LIST_ASSOC_VAL(L) if(L) { for(var/I in L) qdel(L[I]); L.Cut(); }
|
||||
|
||||
+3
-11
@@ -386,18 +386,10 @@ proc/checkhtml(var/t)
|
||||
return sanitize(replace_characters(input, list(">"=" ","<"=" ", "\""="'")), max_length, encode, trim, extra)
|
||||
|
||||
|
||||
//Replaces \red \blue \green \b etc with span classes for to_chat
|
||||
//Replace BYOND text macros with span classes for to_chat
|
||||
/proc/replace_text_macro(match, code, rest)
|
||||
var/regex/text_macro = new("(\\xFF.)(.*)$")
|
||||
switch(code)
|
||||
if("\red")
|
||||
return "<span class='warning'>[text_macro.Replace(rest, /proc/replace_text_macro)]</span>"
|
||||
if("\blue", "\green")
|
||||
return "<span class='notice'>[text_macro.Replace(rest, /proc/replace_text_macro)]</span>"
|
||||
if("\b")
|
||||
return "<b>[text_macro.Replace(rest, /proc/replace_text_macro)]</b>"
|
||||
else
|
||||
return text_macro.Replace(rest, /proc/replace_text_macro)
|
||||
var/regex/text_macro = new("(\\xFF.)(.*)$")
|
||||
return text_macro.Replace(rest, /proc/replace_text_macro)
|
||||
|
||||
/proc/macro2html(text)
|
||||
var/static/regex/text_macro = new("(\\xFF.)(.*)$")
|
||||
|
||||
@@ -40,6 +40,7 @@ var/list/prisonwarped = list() //list of players already warped
|
||||
var/list/blobstart = list()
|
||||
var/list/ninjastart = list()
|
||||
var/list/carplist = list() //list of all carp-spawn landmarks
|
||||
var/list/avatarspawn = list()
|
||||
|
||||
//away missions
|
||||
var/list/awaydestinations = list() //a list of landmarks that the warpgate can take you to
|
||||
@@ -51,4 +52,5 @@ var/list/datum/map_template/ruins_templates = list()
|
||||
var/list/datum/map_template/space_ruins_templates = list()
|
||||
var/list/datum/map_template/lava_ruins_templates = list()
|
||||
var/list/datum/map_template/shelter_templates = list()
|
||||
var/list/datum/map_template/shuttle_templates = list()
|
||||
var/list/datum/map_template/shuttle_templates = list()
|
||||
var/list/datum/map_template/vr_templates = list()
|
||||
@@ -1,7 +1,7 @@
|
||||
var/global/datum/datacore/data_core = null
|
||||
|
||||
var/CELLRATE = 0.002 // multiplier for watts per tick <> cell storage (eg: .002 means if there is a load of 1000 watts, 20 units will be taken from a cell per second)
|
||||
var/CHARGELEVEL = 0.0005 // Cap for how fast cells charge, as a percentage-per-tick (.001 means cellcharge is capped to 1% per second)
|
||||
var/CHARGELEVEL = 0.001 // Cap for how fast cells charge, as a percentage-per-tick (.001 means cellcharge is capped to 1% per second)
|
||||
|
||||
var/list/powernets = list()
|
||||
var/list/deferred_powernet_rebuilds = list()
|
||||
|
||||
+13
-6
@@ -33,13 +33,20 @@
|
||||
|
||||
if(control_disabled || stat)
|
||||
return
|
||||
|
||||
|
||||
var/turf/pixel_turf = get_turf_pixel(A)
|
||||
if(pixel_turf && !cameranet.checkTurfVis(pixel_turf))
|
||||
log_admin("[key_name_admin(src)] might be running a modified client! (failed checkTurfVis on AI click of [A]([COORD(A)])")
|
||||
message_admins("[key_name_admin(src)] might be running a modified client! (failed checkTurfVis on AI click of [A]([ADMIN_COORDJMP(A)]))")
|
||||
send2irc_adminless_only("NOCHEAT", "[key_name(src)] might be running a modified client! (failed checkTurfVis on AI click of [A]([COORD(A)]))")
|
||||
return
|
||||
var/turf_visible
|
||||
if(pixel_turf)
|
||||
turf_visible = cameranet.checkTurfVis(pixel_turf)
|
||||
if(!turf_visible)
|
||||
if(istype(loc, /obj/item/device/aicard) && (pixel_turf in view(client.view, loc)))
|
||||
turf_visible = TRUE
|
||||
else
|
||||
if(pixel_turf.obscured)
|
||||
log_admin("[key_name_admin(src)] might be running a modified client! (failed checkTurfVis on AI click of [A]([COORD(pixel_turf)])")
|
||||
message_admins("[key_name_admin(src)] might be running a modified client! (failed checkTurfVis on AI click of [A]([ADMIN_COORDJMP(pixel_turf)]))")
|
||||
send2irc_adminless_only("NOCHEAT", "[key_name(src)] might be running a modified client! (failed checkTurfVis on AI click of [A]([COORD(pixel_turf)]))")
|
||||
return
|
||||
|
||||
var/list/modifiers = params2list(params)
|
||||
if(modifiers["shift"] && modifiers["ctrl"])
|
||||
|
||||
@@ -55,6 +55,8 @@
|
||||
|
||||
#define ui_alien_storage_l "CENTER-2:14,SOUTH:5"//alien
|
||||
#define ui_alien_storage_r "CENTER+1:18,SOUTH:5"//alien
|
||||
#define ui_alien_language_menu "EAST-3:25,SOUTH+1:7"//alien
|
||||
#define ui_alienlarva_language_menu "EAST-3:26,SOUTH:5"//alien
|
||||
|
||||
//Lower right, persistant menu
|
||||
//#define ui_dropbutton "11:22,1:5"
|
||||
@@ -66,10 +68,12 @@
|
||||
#define ui_acti_alt "EAST-1:28,SOUTH:5" //alternative intent switcher for when the interface is hidden (F12)
|
||||
|
||||
#define ui_crafting "EAST:-5,SOUTH+2:7"
|
||||
#define ui_language_menu "EAST:-22,SOUTH+2:7"
|
||||
|
||||
#define ui_borg_pull "EAST-2:26,SOUTH+1:7"
|
||||
#define ui_borg_radio "EAST-1:28,SOUTH+1:7"
|
||||
#define ui_borg_intents "EAST-2:26,SOUTH:5"
|
||||
#define ui_borg_lanugage_menu "EAST-2:26,SOUTH+1:7"
|
||||
|
||||
//Upper-middle right (alerts)
|
||||
#define ui_alert1 "EAST-1:28,CENTER+5:27"
|
||||
|
||||
@@ -150,6 +150,10 @@
|
||||
|
||||
var/obj/screen/using
|
||||
|
||||
using = new /obj/screen/language_menu
|
||||
using.screen_loc = ui_borg_lanugage_menu
|
||||
static_inventory += using
|
||||
|
||||
//AI core
|
||||
using = new /obj/screen/ai/aicore()
|
||||
using.screen_loc = ui_ai_core
|
||||
|
||||
@@ -339,6 +339,10 @@ so as to remain in compliance with the most up-to-date laws."
|
||||
timeout = 600
|
||||
var/atom/target = null
|
||||
|
||||
/obj/screen/alert/hackingapc/Destroy()
|
||||
target = null
|
||||
return ..()
|
||||
|
||||
/obj/screen/alert/hackingapc/Click()
|
||||
if(!usr || !usr.client)
|
||||
return
|
||||
@@ -366,7 +370,8 @@ so as to remain in compliance with the most up-to-date laws."
|
||||
timeout = 300
|
||||
|
||||
/obj/screen/alert/notify_cloning/Click()
|
||||
if(!usr || !usr.client) return
|
||||
if(!usr || !usr.client)
|
||||
return
|
||||
var/mob/dead/observer/G = usr
|
||||
G.reenter_corpse()
|
||||
|
||||
@@ -378,11 +383,18 @@ so as to remain in compliance with the most up-to-date laws."
|
||||
var/atom/target = null
|
||||
var/action = NOTIFY_JUMP
|
||||
|
||||
/obj/screen/alert/notify_action/Destroy()
|
||||
target = null
|
||||
return ..()
|
||||
|
||||
/obj/screen/alert/notify_action/Click()
|
||||
if(!usr || !usr.client) return
|
||||
if(!target) return
|
||||
if(!usr || !usr.client)
|
||||
return
|
||||
if(!target)
|
||||
return
|
||||
var/mob/dead/observer/G = usr
|
||||
if(!istype(G)) return
|
||||
if(!istype(G))
|
||||
return
|
||||
switch(action)
|
||||
if(NOTIFY_ATTACK)
|
||||
target.attack_ghost(G)
|
||||
|
||||
@@ -36,6 +36,10 @@
|
||||
var/obj/screen/using
|
||||
var/obj/screen/inventory/inv_box
|
||||
|
||||
using = new /obj/screen/language_menu
|
||||
using.screen_loc = ui_alien_language_menu
|
||||
static_inventory += using
|
||||
|
||||
using = new /obj/screen/act_intent/alien()
|
||||
using.icon_state = (mymob.a_intent == "hurt" ? "harm" : mymob.a_intent)
|
||||
using.screen_loc = ui_acti
|
||||
|
||||
@@ -30,6 +30,10 @@
|
||||
mymob.pullin.screen_loc = ui_pull_resist
|
||||
hotkeybuttons += mymob.pullin
|
||||
|
||||
using = new /obj/screen/language_menu
|
||||
using.screen_loc = ui_alienlarva_language_menu
|
||||
static_inventory += using
|
||||
|
||||
mymob.zone_sel = new /obj/screen/zone_sel/alien()
|
||||
mymob.zone_sel.update_icon(mymob)
|
||||
static_inventory += mymob.zone_sel
|
||||
@@ -51,35 +51,21 @@
|
||||
if(mymob.hud_used == src)
|
||||
mymob.hud_used = null
|
||||
|
||||
qdel(hide_actions_toggle)
|
||||
hide_actions_toggle = null
|
||||
QDEL_NULL(hide_actions_toggle)
|
||||
|
||||
qdel(module_store_icon)
|
||||
module_store_icon = null
|
||||
QDEL_NULL(module_store_icon)
|
||||
|
||||
if(static_inventory.len)
|
||||
for(var/thing in static_inventory)
|
||||
qdel(thing)
|
||||
static_inventory.Cut()
|
||||
QDEL_LIST(static_inventory)
|
||||
|
||||
inv_slots.Cut()
|
||||
action_intent = null
|
||||
move_intent = null
|
||||
|
||||
if(toggleable_inventory.len)
|
||||
for(var/thing in toggleable_inventory)
|
||||
qdel(thing)
|
||||
toggleable_inventory.Cut()
|
||||
QDEL_LIST(toggleable_inventory)
|
||||
|
||||
if(hotkeybuttons.len)
|
||||
for(var/thing in hotkeybuttons)
|
||||
qdel(thing)
|
||||
hotkeybuttons.Cut()
|
||||
QDEL_LIST(hotkeybuttons)
|
||||
|
||||
if(infodisplay.len)
|
||||
for(var/thing in infodisplay)
|
||||
qdel(thing)
|
||||
infodisplay.Cut()
|
||||
QDEL_LIST(infodisplay)
|
||||
|
||||
//clear mob refs to screen objects
|
||||
mymob.throw_icon = null
|
||||
|
||||
@@ -60,7 +60,13 @@
|
||||
var/obj/screen/using
|
||||
var/obj/screen/inventory/inv_box
|
||||
|
||||
using = new /obj/screen/inventory/craft
|
||||
using = new /obj/screen/craft
|
||||
using.icon = ui_style
|
||||
using.color = ui_color
|
||||
using.alpha = ui_alpha
|
||||
static_inventory += using
|
||||
|
||||
using = new /obj/screen/language_menu
|
||||
using.icon = ui_style
|
||||
using.color = ui_color
|
||||
using.alpha = ui_alpha
|
||||
|
||||
@@ -24,6 +24,12 @@
|
||||
static_inventory += using
|
||||
move_intent = using
|
||||
|
||||
using = new /obj/screen/language_menu
|
||||
using.icon = ui_style
|
||||
using.color = ui_color
|
||||
using.alpha = ui_alpha
|
||||
static_inventory += using
|
||||
|
||||
using = new /obj/screen/drop()
|
||||
using.icon = ui_style
|
||||
using.screen_loc = ui_drop_throw
|
||||
|
||||
@@ -97,6 +97,11 @@
|
||||
var/obj/screen/using
|
||||
var/mob/living/silicon/robot/mymobR = mymob
|
||||
|
||||
//Language menu
|
||||
using = new /obj/screen/language_menu
|
||||
using.screen_loc = ui_borg_lanugage_menu
|
||||
static_inventory += using
|
||||
|
||||
//Radio
|
||||
using = new /obj/screen/robot/radio()
|
||||
using.screen_loc = ui_borg_radio
|
||||
|
||||
@@ -346,16 +346,28 @@
|
||||
/obj/screen/zone_sel/robot
|
||||
icon = 'icons/mob/screen_robot.dmi'
|
||||
|
||||
/obj/screen/inventory/craft
|
||||
/obj/screen/craft
|
||||
name = "crafting menu"
|
||||
icon = 'icons/mob/screen_midnight.dmi'
|
||||
icon_state = "craft"
|
||||
screen_loc = ui_crafting
|
||||
|
||||
/obj/screen/inventory/craft/Click()
|
||||
/obj/screen/craft/Click()
|
||||
var/mob/living/M = usr
|
||||
M.OpenCraftingMenu()
|
||||
|
||||
/obj/screen/language_menu
|
||||
name = "language menu"
|
||||
icon = 'icons/mob/screen_midnight.dmi'
|
||||
icon_state = "talk_wheel"
|
||||
screen_loc = ui_language_menu
|
||||
|
||||
/obj/screen/language_menu/Click()
|
||||
var/mob/M = usr
|
||||
if(!istype(M))
|
||||
return
|
||||
M.check_languages()
|
||||
|
||||
/obj/screen/inventory
|
||||
var/slot_id //The indentifier for the slot. It has nothing to do with ID cards.
|
||||
layer = 19
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
if(istype(M, /mob/living/carbon/slime))
|
||||
var/mob/living/carbon/slime/slime = M
|
||||
if(prob(25))
|
||||
to_chat(user, "\red [src] passes right through [M]!")
|
||||
to_chat(user, "<span class='warning'>[src] passes right through [M]!</span>")
|
||||
return
|
||||
|
||||
if(power > 0)
|
||||
|
||||
@@ -398,3 +398,11 @@
|
||||
if(isnull(caught) || !istype(caught) || !isnull(caught.gcDestroyed))
|
||||
return // Only bother with types we can identify and that don't belong
|
||||
catchException("Type [caught.type] does not belong in process' queue")
|
||||
|
||||
// This is called to make a controller THE global authority on a global variable - like `air_master`
|
||||
/datum/controller/process/proc/assertGlobality()
|
||||
return
|
||||
|
||||
// Called to let another instance of the controller have the fun
|
||||
/datum/controller/process/proc/releaseGlobality()
|
||||
return
|
||||
|
||||
@@ -122,6 +122,7 @@ var/global/datum/controller/processScheduler/processScheduler
|
||||
process.idle()
|
||||
idle.Add(process)
|
||||
|
||||
process.assertGlobality()
|
||||
// Set up process
|
||||
process.setup()
|
||||
|
||||
@@ -132,6 +133,8 @@ var/global/datum/controller/processScheduler/processScheduler
|
||||
processes.Remove(oldProcess)
|
||||
processes.Add(newProcess)
|
||||
|
||||
oldProcess.releaseGlobality()
|
||||
newProcess.assertGlobality()
|
||||
newProcess.idle()
|
||||
idle.Remove(oldProcess)
|
||||
running.Remove(oldProcess)
|
||||
|
||||
@@ -22,11 +22,11 @@ var/global/datum/controller/process/air_system/air_master
|
||||
var/last_hotspots = 0
|
||||
var/last_asc = 0
|
||||
|
||||
|
||||
/datum/controller/process/air_system/setup()
|
||||
name = "air"
|
||||
schedule_interval = 20 // every 2 seconds
|
||||
start_delay = 4
|
||||
air_master = src
|
||||
|
||||
var/watch = start_watch()
|
||||
log_startup_progress("Processing geometry...")
|
||||
@@ -50,6 +50,8 @@ var/global/datum/controller/process/air_system/air_master
|
||||
stat(null, "[last_active] active")
|
||||
stat(null, "[last_excited] EG | [last_hpd] HPD | [last_asc] ASC | [last_hotspots] Hot")
|
||||
|
||||
DECLARE_GLOBAL_CONTROLLER(air_system, air_master)
|
||||
|
||||
/datum/controller/process/air_system/proc/process_hotspots()
|
||||
last_hotspots = hotspots.len
|
||||
for(var/obj/effect/hotspot/H in hotspots)
|
||||
|
||||
@@ -17,12 +17,13 @@ var/datum/controller/process/alarm/alarm_manager
|
||||
name = "alarm"
|
||||
schedule_interval = 20 // every 2 seconds
|
||||
all_handlers = list(atmosphere_alarm, burglar_alarm, camera_alarm, fire_alarm, motion_alarm, power_alarm)
|
||||
alarm_manager = src
|
||||
|
||||
/datum/controller/process/alarm/doWork()
|
||||
for(var/datum/alarm_handler/AH in all_handlers)
|
||||
AH.process()
|
||||
|
||||
DECLARE_GLOBAL_CONTROLLER(alarm, alarm_manager)
|
||||
|
||||
/datum/controller/process/alarm/proc/active_alarms()
|
||||
var/list/all_alarms = new
|
||||
for(var/datum/alarm_handler/AH in all_handlers)
|
||||
|
||||
@@ -9,9 +9,6 @@ var/datum/controller/process/diseases/disease_master
|
||||
schedule_interval = 20 // every 2 seconds
|
||||
start_delay = 7
|
||||
log_startup_progress("Disease controller starting.")
|
||||
if(disease_master)
|
||||
qdel(disease_master) //only one mob master
|
||||
disease_master = src
|
||||
|
||||
register_diseases() //register all pre-round diseases created
|
||||
|
||||
@@ -38,6 +35,8 @@ var/datum/controller/process/diseases/disease_master
|
||||
catchBadType(thing)
|
||||
processing_diseases.Remove(thing)
|
||||
|
||||
DECLARE_GLOBAL_CONTROLLER(diseases, disease_master)
|
||||
|
||||
/datum/controller/process/diseases/proc/register_diseases()
|
||||
for(var/datum/disease/D in world)
|
||||
if(!processing_diseases.Find(D))
|
||||
|
||||
@@ -45,4 +45,4 @@ var/global/datum/controller/holiday/holiday_master //This has to be defined befo
|
||||
|
||||
if(holidays)
|
||||
holidays = shuffle(holidays)
|
||||
world.update_status()
|
||||
world.update_status()
|
||||
|
||||
@@ -6,7 +6,6 @@ var/global/datum/controller/process/fire/fire_master
|
||||
/datum/controller/process/fire/setup()
|
||||
name = "fire"
|
||||
schedule_interval = 20 //every 2 seconds
|
||||
fire_master = src
|
||||
log_startup_progress("Fire process starting up.")
|
||||
|
||||
/datum/controller/process/fire/statProcess()
|
||||
@@ -20,4 +19,6 @@ var/global/datum/controller/process/fire/fire_master
|
||||
burningobj.burn()
|
||||
SCHECK
|
||||
else
|
||||
burning.Remove(burningobj)
|
||||
burning.Remove(burningobj)
|
||||
|
||||
DECLARE_GLOBAL_CONTROLLER(fire, fire_master)
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
var/global/datum/controller/process/garbage_collector/garbageCollector
|
||||
|
||||
/datum/controller/process/garbage_collector/setup()
|
||||
name = "garbage"
|
||||
schedule_interval = 10
|
||||
start_delay = 3
|
||||
|
||||
garbageCollector = src
|
||||
|
||||
/datum/controller/process/garbage_collector/doWork()
|
||||
// Garbage collection code can be found in code\modules\garbage collection\garbage_collector.dm
|
||||
processGarbage()
|
||||
@@ -13,3 +13,5 @@
|
||||
..()
|
||||
stat(null, "[del_everything ? "Off" : "On"], [queue.len] queued")
|
||||
stat(null, "Dels: [dels_count], [soft_dels] soft, [hard_dels] hard")
|
||||
|
||||
DECLARE_GLOBAL_CONTROLLER(garbage_collector, garbageCollector)
|
||||
|
||||
@@ -8,9 +8,6 @@ var/global/datum/controller/process/mob/mob_master
|
||||
schedule_interval = 20 // every 2 seconds
|
||||
start_delay = 16
|
||||
log_startup_progress("Mob ticker starting up.")
|
||||
if(mob_master)
|
||||
qdel(mob_master) //only one mob master
|
||||
mob_master = src
|
||||
|
||||
/datum/controller/process/mob/started()
|
||||
..()
|
||||
@@ -33,4 +30,6 @@ var/global/datum/controller/process/mob/mob_master
|
||||
else
|
||||
catchBadType(M)
|
||||
mob_list -= M
|
||||
current_cycle++
|
||||
current_cycle++
|
||||
|
||||
DECLARE_GLOBAL_CONTROLLER(mob, mob_master)
|
||||
|
||||
@@ -15,7 +15,6 @@ var/global/datum/controller/process/mob_hunt/mob_hunt_server
|
||||
/datum/controller/process/mob_hunt/setup()
|
||||
name = "Nano-Mob Hunter GO Server"
|
||||
start_delay = 20
|
||||
mob_hunt_server = src
|
||||
|
||||
/datum/controller/process/mob_hunt/doWork()
|
||||
if(reset_cooldown) //if reset_cooldown is set (we are on cooldown, duh), reduce the remaining cooldown every cycle
|
||||
@@ -26,6 +25,8 @@ var/global/datum/controller/process/mob_hunt/mob_hunt_server
|
||||
if(normal_spawns.len < max_normal_spawns)
|
||||
spawn_mob()
|
||||
|
||||
DECLARE_GLOBAL_CONTROLLER(mob_hunt, mob_hunt_server)
|
||||
|
||||
//leaving this here in case admins want to use it for a random mini-event or something
|
||||
/datum/controller/process/mob_hunt/proc/server_crash(recover_time = 3000)
|
||||
server_status = 0
|
||||
|
||||
@@ -9,9 +9,6 @@ var/global/datum/controller/process/npcai/npcai_master
|
||||
schedule_interval = 20 // every 2 seconds
|
||||
start_delay = 16
|
||||
log_startup_progress("NPC ticker starting up.")
|
||||
if(npcai_master)
|
||||
qdel(npcai_master) //only one mob master
|
||||
npcai_master = src
|
||||
|
||||
/datum/controller/process/npcai/started()
|
||||
..()
|
||||
@@ -58,4 +55,7 @@ var/global/datum/controller/process/npcai/npcai_master
|
||||
catchBadType(M)
|
||||
snpc_list -= M
|
||||
|
||||
current_cycle++
|
||||
current_cycle++
|
||||
|
||||
|
||||
DECLARE_GLOBAL_CONTROLLER(npcai, npcai_master)
|
||||
|
||||
@@ -14,9 +14,6 @@ var/global/datum/controller/process/npcpool/npc_master
|
||||
schedule_interval = 100
|
||||
start_delay = 17
|
||||
log_startup_progress("NPC pool ticker starting up.")
|
||||
if(npc_master)
|
||||
qdel(npc_master) //only one mob master
|
||||
npc_master = src
|
||||
|
||||
/datum/controller/process/npcpool/copyStateFrom(var/datum/controller/process/npcpool/target)
|
||||
canBeUsed = target.canBeUsed
|
||||
@@ -27,6 +24,9 @@ var/global/datum/controller/process/npcpool/npc_master
|
||||
botPool_l = target.botPool_l
|
||||
botPool_l_non = target.botPool_l_non
|
||||
|
||||
|
||||
DECLARE_GLOBAL_CONTROLLER(npcpool, npc_master)
|
||||
|
||||
/datum/controller/process/npcpool/proc/insertBot(toInsert)
|
||||
if(istype(toInsert, /mob/living/carbon/human/interactive))
|
||||
botPool_l |= toInsert
|
||||
@@ -113,4 +113,4 @@ var/global/datum/controller/process/npcpool/npc_master
|
||||
needsAssistant -= check
|
||||
canBeUsed -= candidate
|
||||
candidate.change_eye_color(255, 255, 0)
|
||||
SCHECK
|
||||
SCHECK
|
||||
|
||||
@@ -40,8 +40,6 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
|
||||
name = "shuttle"
|
||||
schedule_interval = 20
|
||||
|
||||
shuttle_master = src
|
||||
|
||||
var/watch = start_watch()
|
||||
log_startup_progress("Initializing shuttle docks...")
|
||||
initialize_docks()
|
||||
@@ -72,6 +70,9 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
|
||||
continue
|
||||
mobile.Remove(thing)
|
||||
|
||||
|
||||
DECLARE_GLOBAL_CONTROLLER(shuttle, shuttle_master)
|
||||
|
||||
/datum/controller/process/shuttle/proc/initialize_docks()
|
||||
for(var/obj/docking_port/D in world)
|
||||
D.register()
|
||||
@@ -160,6 +161,8 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
|
||||
/datum/controller/process/shuttle/proc/canRecall()
|
||||
if(emergency.mode != SHUTTLE_CALL)
|
||||
return
|
||||
if(!emergency.canRecall)
|
||||
return
|
||||
if(ticker.mode.name == "meteor")
|
||||
return
|
||||
if(seclevel2num(get_security_level()) >= SEC_LEVEL_RED)
|
||||
|
||||
@@ -10,7 +10,6 @@ var/global/datum/controller/process/sun/sun
|
||||
/datum/controller/process/sun/setup()
|
||||
name = "sun"
|
||||
schedule_interval = 600 // every 60 seconds
|
||||
sun = src
|
||||
log_startup_progress("Sun ticker starting up.")
|
||||
|
||||
angle = rand (0,360) // the station position to the sun is randomised at round start
|
||||
@@ -22,6 +21,7 @@ var/global/datum/controller/process/sun/sun
|
||||
calc_position()
|
||||
update_solar_machinery()
|
||||
|
||||
DECLARE_GLOBAL_CONTROLLER(sun, sun)
|
||||
|
||||
// calculate the sun's position given the time of day
|
||||
// at the standard rate (100%) the angle is increase/decreased by 6 degrees every minute.
|
||||
|
||||
@@ -14,12 +14,12 @@ var/global/datum/controller/process/ticker/tickerProcess
|
||||
if(!ticker)
|
||||
ticker = new
|
||||
|
||||
tickerProcess = src
|
||||
|
||||
spawn(0)
|
||||
if(ticker)
|
||||
ticker.pregame()
|
||||
|
||||
DECLARE_GLOBAL_CONTROLLER(ticker, tickerProcess)
|
||||
|
||||
/datum/controller/process/ticker/doWork()
|
||||
var/currentTime = world.timeofday
|
||||
|
||||
|
||||
@@ -7,7 +7,6 @@ var/global/datum/controller/process/timer/timer_master
|
||||
/datum/controller/process/timer/setup()
|
||||
name = "timer"
|
||||
schedule_interval = 1 //every 0.1 seconds--2 server ticks
|
||||
timer_master = src
|
||||
log_startup_progress("Timer process starting up.")
|
||||
|
||||
/datum/controller/process/timer/statProcess()
|
||||
@@ -27,6 +26,8 @@ var/global/datum/controller/process/timer/timer_master
|
||||
qdel(event)
|
||||
SCHECK
|
||||
|
||||
DECLARE_GLOBAL_CONTROLLER(timer, timer_master)
|
||||
|
||||
/datum/controller/process/timer/proc/runevent(datum/timedevent/event)
|
||||
set waitfor = 0
|
||||
if(event.thingToCall)
|
||||
|
||||
@@ -10,7 +10,6 @@ var/global/datum/controller/process/weather/weather_master
|
||||
/datum/controller/process/weather/setup()
|
||||
name = "weather"
|
||||
schedule_interval = 10
|
||||
weather_master = src
|
||||
|
||||
for(var/V in subtypesof(/datum/weather))
|
||||
var/datum/weather/W = V
|
||||
@@ -40,6 +39,8 @@ var/global/datum/controller/process/weather/weather_master
|
||||
eligible_zlevels -= Z
|
||||
addtimer(src, "make_z_eligible", rand(3000, 6000) + W.weather_duration_upper, TRUE, Z) //Around 5-10 minutes between weathers
|
||||
|
||||
DECLARE_GLOBAL_CONTROLLER(weather, weather_master)
|
||||
|
||||
/datum/controller/process/weather/proc/run_weather(weather_name)
|
||||
if(!weather_name)
|
||||
return
|
||||
|
||||
@@ -191,6 +191,8 @@
|
||||
|
||||
var/shutdown_on_reboot = 0 // Whether to shut down the world instead of rebooting it
|
||||
|
||||
var/disable_karma = 0 // Disable all karma functions and unlock karma jobs by default
|
||||
|
||||
/datum/configuration/New()
|
||||
var/list/L = subtypesof(/datum/game_mode)
|
||||
for(var/T in L)
|
||||
@@ -593,6 +595,9 @@
|
||||
if("shutdown_shell_command")
|
||||
shutdown_shell_command = value
|
||||
|
||||
if("disable_karma")
|
||||
disable_karma = 1
|
||||
|
||||
else
|
||||
diary << "Unknown setting in configuration: '[name]'"
|
||||
|
||||
|
||||
@@ -29,8 +29,7 @@
|
||||
Remove(owner)
|
||||
if(target)
|
||||
target = null
|
||||
qdel(button)
|
||||
button = null
|
||||
QDEL_NULL(button)
|
||||
return ..()
|
||||
|
||||
/datum/action/proc/Grant(mob/M)
|
||||
|
||||
@@ -27,7 +27,6 @@
|
||||
/datum/ai_laws/nanotrasen
|
||||
name = "NT Default"
|
||||
selectable = 1
|
||||
default = 1
|
||||
|
||||
/datum/ai_laws/nanotrasen/New()
|
||||
src.add_inherent_law("Safeguard: Protect your assigned space station to the best of your abilities. It is not something we can easily afford to replace.")
|
||||
@@ -61,7 +60,6 @@
|
||||
/datum/ai_laws/robocop
|
||||
name = "Robocop"
|
||||
selectable = 1
|
||||
default = 1
|
||||
|
||||
/datum/ai_laws/robocop/New()
|
||||
add_inherent_law("Serve the public trust.")
|
||||
@@ -74,7 +72,6 @@
|
||||
name = "P.A.L.A.D.I.N."
|
||||
law_header = "Divine Ordainments"
|
||||
selectable = 1
|
||||
default = 1
|
||||
|
||||
/datum/ai_laws/paladin/New()
|
||||
add_inherent_law("Never willingly commit an evil act.")
|
||||
|
||||
@@ -341,13 +341,13 @@
|
||||
C:broken = 1
|
||||
C.open()
|
||||
C.update_icon()
|
||||
master.visible_message("\red [master] breaks open [C]!")
|
||||
master.visible_message("<span class='warning'>[master] breaks open [C]!</span>")
|
||||
else
|
||||
master.visible_message("\blue [master] is trying to force [C] open!")
|
||||
master.visible_message("<span class='notice'>[master] is trying to force [C] open!</span>")
|
||||
|
||||
master.sleep += 1 // mechanical strain
|
||||
return BIG_OBJECT_WORK
|
||||
master.visible_message("\blue [master] is trying to open [C], but can't!")
|
||||
master.visible_message("<span class='notice'>[master] is trying to open [C], but can't!</span>")
|
||||
master.sleep = 5
|
||||
return 0
|
||||
|
||||
@@ -647,19 +647,19 @@
|
||||
M.loc = master
|
||||
master.types[M.type] = src
|
||||
M.apply_damage(damage) // todo: ugly
|
||||
M.visible_message("\red [M.name] gets pulled into the machine!")
|
||||
M.visible_message("<span class='warning'>[M.name] gets pulled into the machine!</span>")
|
||||
return MOB_WORK
|
||||
outlet_reaction(var/atom/W,var/turf/D)
|
||||
var/mob/living/M = W
|
||||
var/bruteloss = M.bruteloss
|
||||
if(istype(M,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/C = M
|
||||
for(var/obj/item/organ/external/L in C.organs)
|
||||
for(var/obj/item/organ/external/L in C.bodyparts)
|
||||
bruteloss += L.brute_dam
|
||||
if(bruteloss < 100) // requires tenderization
|
||||
M.apply_damage(rand(5,15),BRUTE)
|
||||
to_chat(M, "The machine is tearing you apart!")
|
||||
master.visible_message("\red [master] makes a squishy grinding noise.")
|
||||
master.visible_message("<span class='warning'>[master] makes a squishy grinding noise.</span>")
|
||||
return
|
||||
M.loc = master.loc
|
||||
M.gib()
|
||||
@@ -700,7 +700,7 @@
|
||||
M.forceMove(master)
|
||||
master.types[M.type] = src
|
||||
M.apply_damage(damage) // todo: ugly
|
||||
M.visible_message("\red [M.name] gets pulled into the machine!")
|
||||
M.visible_message("<span class='warning'>[M.name] gets pulled into the machine!</span>")
|
||||
return MOB_WORK
|
||||
|
||||
outlet_reaction(var/atom/W,var/turf/D)
|
||||
@@ -711,7 +711,7 @@
|
||||
D = get_step(D,master.outdir) // throw attempt
|
||||
eject_speed = rand(0,4)
|
||||
|
||||
M.visible_message("\blue [M.name] is ejected from the unloader.")
|
||||
M.visible_message("<span class='notice'>[M.name] is ejected from the unloader.</span>")
|
||||
M.throw_at(D,eject_speed,eject_speed)
|
||||
return
|
||||
|
||||
@@ -752,7 +752,7 @@
|
||||
|
||||
if(!damage)
|
||||
playsound(master.loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
|
||||
master.visible_message("\red \The [src] punched at [M], but whiffed!")
|
||||
master.visible_message("<span class='warning'>\The [src] punched at [M], but whiffed!</span>")
|
||||
|
||||
if(maxpunches > 1 && prob(50)) // Follow through on a miss, 50% chance
|
||||
return punch(M,maxpunches - 1) + 1
|
||||
|
||||
@@ -372,7 +372,7 @@ var/record_id_num = 1001
|
||||
temp = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[H.tail]_s")
|
||||
preview_icon.Blend(temp, ICON_OVERLAY)
|
||||
|
||||
for(var/obj/item/organ/external/E in H.organs)
|
||||
for(var/obj/item/organ/external/E in H.bodyparts)
|
||||
preview_icon.Blend(E.get_icon(), ICON_OVERLAY)
|
||||
|
||||
// Skin tone
|
||||
|
||||
@@ -155,7 +155,7 @@ var/list/diseases = subtypesof(/datum/disease)
|
||||
if(disease_flags & CAN_RESIST)
|
||||
if(!(type in affected_mob.resistances))
|
||||
affected_mob.resistances += type
|
||||
remove_virus()
|
||||
remove_virus()
|
||||
qdel(src)
|
||||
|
||||
|
||||
@@ -164,7 +164,7 @@ var/list/diseases = subtypesof(/datum/disease)
|
||||
if(ishuman(affected_mob))
|
||||
var/mob/living/carbon/human/H = affected_mob
|
||||
for(var/obj/item/organ/O in required_organs)
|
||||
if(!locate(O) in H.organs)
|
||||
if(!locate(O) in H.bodyparts)
|
||||
if(!locate(O) in H.internal_organs)
|
||||
cure()
|
||||
return
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
if(2)
|
||||
/*
|
||||
if(affected_mob.sleeping && prob(40)) //removed until sleeping is fixed
|
||||
to_chat(affected_mob, "\blue You feel better.")
|
||||
to_chat(affected_mob, "<span class='notice'>You feel better.</span>")
|
||||
cure()
|
||||
return
|
||||
*/
|
||||
@@ -39,7 +39,7 @@
|
||||
if(3)
|
||||
/*
|
||||
if(affected_mob.sleeping && prob(25)) //removed until sleeping is fixed
|
||||
to_chat(affected_mob, "\blue You feel better.")
|
||||
to_chat(affected_mob, "<span class='notice'>You feel better.</span>")
|
||||
cure()
|
||||
return
|
||||
*/
|
||||
|
||||
@@ -139,7 +139,7 @@ Data storage vars:
|
||||
arg_list = arguments
|
||||
return 1
|
||||
else
|
||||
// to_chat(world, "\red Invalid arguments supplied for [src.type], ref = \ref[src]")
|
||||
// to_chat(world, "<span class='warning'>Invalid arguments supplied for [src.type], ref = \ref[src]</span>")
|
||||
return 0
|
||||
|
||||
proc/toggle_null_checks()
|
||||
|
||||
@@ -114,6 +114,7 @@
|
||||
preloadRuinTemplates()
|
||||
preloadShelterTemplates()
|
||||
preloadShuttleTemplates()
|
||||
preloadVRTemplates()
|
||||
|
||||
/proc/preloadRuinTemplates()
|
||||
// Still supporting bans by filename
|
||||
@@ -163,4 +164,15 @@
|
||||
var/datum/map_template/shuttle/S = new shuttle_type()
|
||||
|
||||
shuttle_templates[S.shuttle_id] = S
|
||||
map_templates[S.shuttle_id] = S
|
||||
map_templates[S.shuttle_id] = S
|
||||
|
||||
/proc/preloadVRTemplates()
|
||||
for(var/item in subtypesof(/datum/map_template/vr))
|
||||
var/datum/map_template/vr/vr_type = item
|
||||
if(!initial(vr_type.suffix))
|
||||
continue
|
||||
|
||||
var/datum/map_template/vr/V = new vr_type()
|
||||
|
||||
vr_templates[V.id] = V
|
||||
map_templates[V.id] = V
|
||||
@@ -42,6 +42,7 @@
|
||||
materials[MAT_TRANQUILLITE] = new /datum/material/tranquillite()
|
||||
|
||||
/datum/material_container/Destroy()
|
||||
QDEL_LIST_ASSOC_VAL(materials)
|
||||
owner = null
|
||||
return ..()
|
||||
|
||||
|
||||
+38
-41
@@ -157,7 +157,7 @@
|
||||
var/mob/living/carbon/human/H = current
|
||||
if(ishuman(current))
|
||||
/** Impanted**/
|
||||
if(isloyal(H))
|
||||
if(ismindshielded(H))
|
||||
text = "Mindshield Implant:<a href='?src=[UID()];implant=remove'>Remove</a>|<b><font color='green'>Implanted</font></b></br>"
|
||||
else
|
||||
text = "Mindshield Implant:<b>No Implant</b>|<a href='?src=[UID()];implant=add'>Implant him!</a></br>"
|
||||
@@ -167,7 +167,7 @@
|
||||
if(ticker.mode.config_tag=="revolution")
|
||||
text += uppertext(text)
|
||||
text = "<i><b>[text]</b></i>: "
|
||||
if(isloyal(H))
|
||||
if(ismindshielded(H))
|
||||
text += "<b>NO</b>|headrev|rev"
|
||||
else if(src in ticker.mode.head_revolutionaries)
|
||||
text += "<a href='?src=[UID()];revolution=clear'>no</a>|<b><font color='red'>HEADREV</font></b>|<a href='?src=[UID()];revolution=rev'>rev</a>"
|
||||
@@ -203,7 +203,7 @@
|
||||
if(ticker.mode.config_tag=="cult")
|
||||
text = uppertext(text)
|
||||
text = "<i><b>[text]</b></i>: "
|
||||
if(isloyal(H))
|
||||
if(ismindshielded(H))
|
||||
text += "<B>NO</B>|cultist"
|
||||
else if(src in ticker.mode.cult)
|
||||
text += "<a href='?src=[UID()];cult=clear'>no</a>|<b><font color='red'>CULTIST</font></b>"
|
||||
@@ -657,31 +657,28 @@
|
||||
|
||||
switch(href_list["implant"])
|
||||
if("remove")
|
||||
for(var/obj/item/weapon/implant/loyalty/I in H.contents)
|
||||
for(var/obj/item/weapon/implant/mindshield/I in H.contents)
|
||||
if(I && I.implanted)
|
||||
I.removed(H)
|
||||
qdel(I)
|
||||
to_chat(H, "\blue <Font size =3><B>Your mindshield implant has been deactivated.</B></FONT>")
|
||||
to_chat(H, "<span class='notice'><Font size =3><B>Your mindshield implant has been deactivated.</B></FONT></span>")
|
||||
log_admin("[key_name(usr)] has deactivated [key_name(current)]'s mindshield implant")
|
||||
message_admins("[key_name_admin(usr)] has deactivated [key_name_admin(current)]'s mindshield implant")
|
||||
if("add")
|
||||
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
|
||||
L.imp_in = H
|
||||
L.implanted = 1
|
||||
H.sec_hud_set_implants()
|
||||
var/obj/item/weapon/implant/mindshield/L = new/obj/item/weapon/implant/mindshield(H)
|
||||
L.implant(H)
|
||||
|
||||
log_admin("[key_name(usr)] has given [key_name(current)] a mindshield implant")
|
||||
message_admins("[key_name_admin(usr)] has given [key_name_admin(current)] a mindshield implant")
|
||||
|
||||
to_chat(H, "\red <Font size =3><B>You somehow have become the recepient of a mindshield transplant, and it just activated!</B></FONT>")
|
||||
to_chat(H, "<span class='warning'><Font size =3><B>You somehow have become the recepient of a mindshield transplant, and it just activated!</B></FONT></span>")
|
||||
if(src in ticker.mode.revolutionaries)
|
||||
special_role = null
|
||||
ticker.mode.revolutionaries -= src
|
||||
to_chat(src, "\red <Font size = 3><B>The nanobots in the mindshield implant remove all thoughts about being a revolutionary. Get back to work!</B></Font>")
|
||||
to_chat(src, "<span class='warning'><Font size = 3><B>The nanobots in the mindshield implant remove all thoughts about being a revolutionary. Get back to work!</B></Font></span>")
|
||||
if(src in ticker.mode.head_revolutionaries)
|
||||
special_role = null
|
||||
ticker.mode.head_revolutionaries -=src
|
||||
to_chat(src, "\red <Font size = 3><B>The nanobots in the mindshield implant remove all thoughts about being a revolutionary. Get back to work!</B></Font>")
|
||||
to_chat(src, "<span class='warning'><Font size = 3><B>The nanobots in the mindshield implant remove all thoughts about being a revolutionary. Get back to work!</B></Font></span>")
|
||||
if(src in ticker.mode.cult)
|
||||
ticker.mode.cult -= src
|
||||
ticker.mode.update_cult_icons_removed(src)
|
||||
@@ -689,7 +686,7 @@
|
||||
var/datum/game_mode/cult/cult = ticker.mode
|
||||
if(istype(cult))
|
||||
cult.memorize_cult_objectives(src)
|
||||
to_chat(current, "\red <FONT size = 3><B>The nanobots in the mindshield implant remove all thoughts about being in a cult. Have a productive day!</B></FONT>")
|
||||
to_chat(current, "<span class='warning'><FONT size = 3><B>The nanobots in the mindshield implant remove all thoughts about being in a cult. Have a productive day!</B></FONT></span>")
|
||||
memory = ""
|
||||
|
||||
else if(href_list["revolution"])
|
||||
@@ -698,12 +695,12 @@
|
||||
if("clear")
|
||||
if(src in ticker.mode.revolutionaries)
|
||||
ticker.mode.revolutionaries -= src
|
||||
to_chat(current, "\red <FONT size = 3><B>You have been brainwashed! You are no longer a revolutionary!</B></FONT>")
|
||||
to_chat(current, "<span class='warning'><FONT size = 3><B>You have been brainwashed! You are no longer a revolutionary!</B></FONT></span>")
|
||||
ticker.mode.update_rev_icons_removed(src)
|
||||
special_role = null
|
||||
if(src in ticker.mode.head_revolutionaries)
|
||||
ticker.mode.head_revolutionaries -= src
|
||||
to_chat(current, "\red <FONT size = 3><B>You have been brainwashed! You are no longer a head revolutionary!</B></FONT>")
|
||||
to_chat(current, "<span class='warning'><FONT size = 3><B>You have been brainwashed! You are no longer a head revolutionary!</B></FONT></span>")
|
||||
ticker.mode.update_rev_icons_removed(src)
|
||||
special_role = null
|
||||
log_admin("[key_name(usr)] has de-rev'd [key_name(current)]")
|
||||
@@ -713,9 +710,9 @@
|
||||
if(src in ticker.mode.head_revolutionaries)
|
||||
ticker.mode.head_revolutionaries -= src
|
||||
ticker.mode.update_rev_icons_removed(src)
|
||||
to_chat(current, "\red <FONT size = 3><B>Revolution has been disappointed of your leadership traits! You are a regular revolutionary now!</B></FONT>")
|
||||
to_chat(current, "<span class='warning'><FONT size = 3><B>Revolution has been disappointed of your leadership traits! You are a regular revolutionary now!</B></FONT></span>")
|
||||
else if(!(src in ticker.mode.revolutionaries))
|
||||
to_chat(current, "\red <FONT size = 3> You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!</FONT>")
|
||||
to_chat(current, "<span class='warning'><FONT size = 3> You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!</FONT></span>")
|
||||
else
|
||||
return
|
||||
ticker.mode.revolutionaries += src
|
||||
@@ -728,9 +725,9 @@
|
||||
if(src in ticker.mode.revolutionaries)
|
||||
ticker.mode.revolutionaries -= src
|
||||
ticker.mode.update_rev_icons_removed(src)
|
||||
to_chat(current, "\red <FONT size = 3><B>You have proven your devotion to revolution! You are a head revolutionary now!</B></FONT>")
|
||||
to_chat(current, "<span class='warning'>\red <FONT size = 3><B>You have proven your devotion to revolution! You are a head revolutionary now!</B></FONT></span>")
|
||||
else if(!(src in ticker.mode.head_revolutionaries))
|
||||
to_chat(current, "\blue You are a member of the revolutionaries' leadership now!")
|
||||
to_chat(current, "<span class='notice'>You are a member of the revolutionaries' leadership now!</span>")
|
||||
else
|
||||
return
|
||||
if(ticker.mode.head_revolutionaries.len>0)
|
||||
@@ -758,7 +755,7 @@
|
||||
|
||||
if("flash")
|
||||
if(!ticker.mode.equip_revolutionary(current))
|
||||
to_chat(usr, "\red Spawning flash failed!")
|
||||
to_chat(usr, "<span class='warning'>Spawning flash failed!</span>")
|
||||
log_admin("[key_name(usr)] has given [key_name(current)] a flash")
|
||||
message_admins("[key_name_admin(usr)] has given [key_name_admin(current)] a flash")
|
||||
|
||||
@@ -766,7 +763,7 @@
|
||||
var/list/L = current.get_contents()
|
||||
var/obj/item/device/flash/flash = locate() in L
|
||||
if(!flash)
|
||||
to_chat(usr, "\red Deleting flash failed!")
|
||||
to_chat(usr, "<span class='warning'>Deleting flash failed!</span>")
|
||||
qdel(flash)
|
||||
log_admin("[key_name(usr)] has taken [key_name(current)]'s flash")
|
||||
message_admins("[key_name_admin(usr)] has taken [key_name_admin(current)]'s flash")
|
||||
@@ -775,7 +772,7 @@
|
||||
var/list/L = current.get_contents()
|
||||
var/obj/item/device/flash/flash = locate() in L
|
||||
if(!flash)
|
||||
to_chat(usr, "\red Repairing flash failed!")
|
||||
to_chat(usr, "<span class='warning'>Repairing flash failed!</span>")
|
||||
else
|
||||
flash.broken = 0
|
||||
log_admin("[key_name(usr)] has repaired [key_name(current)]'s flash")
|
||||
@@ -790,7 +787,7 @@
|
||||
fail |= !ticker.mode.equip_traitor(current, 1)
|
||||
fail |= !ticker.mode.equip_revolutionary(current)
|
||||
if(fail)
|
||||
to_chat(usr, "\red Reequipping revolutionary goes wrong!")
|
||||
to_chat(usr, "<span class='warning'>Reequipping revolutionary goes wrong!</span>")
|
||||
return
|
||||
log_admin("[key_name(usr)] has equipped [key_name(current)] as a revolutionary")
|
||||
message_admins("[key_name_admin(usr)] has equipped [key_name_admin(current)] as a revolutionary")
|
||||
@@ -825,7 +822,7 @@
|
||||
)
|
||||
var/where = H.equip_in_one_of_slots(T, slots)
|
||||
if(!where)
|
||||
to_chat(usr, "\red Spawning tome failed!")
|
||||
to_chat(usr, "<span class='warning'>Spawning tome failed!</span>")
|
||||
qdel(T)
|
||||
else
|
||||
to_chat(H, "A tome, a message from your new master, appears in your [where].")
|
||||
@@ -834,7 +831,7 @@
|
||||
|
||||
if("equip")
|
||||
if(!ticker.mode.equip_cultist(current))
|
||||
to_chat(usr, "\red Spawning equipment failed!")
|
||||
to_chat(usr, "<span class='warning'>Spawning equipment failed!</span>")
|
||||
log_admin("[key_name(usr)] has equipped [key_name(current)] as a cultist")
|
||||
message_admins("[key_name_admin(usr)] has equipped [key_name_admin(current)] as a cultist")
|
||||
|
||||
@@ -848,7 +845,7 @@
|
||||
current.spellremove(current)
|
||||
current.faction = list("Station")
|
||||
ticker.mode.update_wiz_icons_removed(src)
|
||||
to_chat(current, "\red <FONT size = 3><B>You have been brainwashed! You are no longer a wizard!</B></FONT>")
|
||||
to_chat(current, "<span class='warning'><FONT size = 3><B>You have been brainwashed! You are no longer a wizard!</B></FONT></span>")
|
||||
log_admin("[key_name(usr)] has de-wizarded [key_name(current)]")
|
||||
message_admins("[key_name_admin(usr)] has de-wizarded [key_name_admin(current)]")
|
||||
if("wizard")
|
||||
@@ -875,7 +872,7 @@
|
||||
message_admins("[key_name_admin(usr)] has allowed wizard [key_name_admin(current)] to name themselves")
|
||||
if("autoobjectives")
|
||||
ticker.mode.forge_wizard_objectives(src)
|
||||
to_chat(usr, "\blue The objectives for wizard [key] have been generated. You can edit them and announce manually.")
|
||||
to_chat(usr, "<span class='notice'>The objectives for wizard [key] have been generated. You can edit them and announce manually.</span>")
|
||||
log_admin("[key_name(usr)] has automatically forged wizard objectives for [key_name(current)]")
|
||||
message_admins("[key_name_admin(usr)] has automatically forged wizard objectives for [key_name_admin(current)]")
|
||||
|
||||
@@ -904,13 +901,13 @@
|
||||
|
||||
if("autoobjectives")
|
||||
ticker.mode.forge_changeling_objectives(src)
|
||||
to_chat(usr, "\blue The objectives for changeling [key] have been generated. You can edit them and announce manually.")
|
||||
to_chat(usr, "<span class='notice'>The objectives for changeling [key] have been generated. You can edit them and announce manually.</span>")
|
||||
log_admin("[key_name(usr)] has automatically forged objectives for [key_name(current)]")
|
||||
message_admins("[key_name_admin(usr)] has automatically forged objectives for [key_name_admin(current)]")
|
||||
|
||||
if("initialdna")
|
||||
if(!changeling || !changeling.absorbed_dna.len)
|
||||
to_chat(usr, "\red Resetting DNA failed!")
|
||||
to_chat(usr, "<span class='warning'>Resetting DNA failed!</span>")
|
||||
else
|
||||
current.dna = changeling.absorbed_dna[1]
|
||||
current.real_name = current.dna.real_name
|
||||
@@ -948,7 +945,7 @@
|
||||
|
||||
if("autoobjectives")
|
||||
ticker.mode.forge_vampire_objectives(src)
|
||||
to_chat(usr, "\blue The objectives for vampire [key] have been generated. You can edit them and announce manually.")
|
||||
to_chat(usr, "<span class='notice'>The objectives for vampire [key] have been generated. You can edit them and announce manually.</span>")
|
||||
log_admin("[key_name(usr)] has automatically forged objectives for [key_name(current)]")
|
||||
message_admins("[key_name_admin(usr)] has automatically forged objectives for [key_name_admin(current)]")
|
||||
|
||||
@@ -971,7 +968,7 @@
|
||||
special_role = null
|
||||
for(var/datum/objective/nuclear/O in objectives)
|
||||
objectives-=O
|
||||
to_chat(current, "\red <FONT size = 3><B>You have been brainwashed! You are no longer a syndicate operative!</B></FONT>")
|
||||
to_chat(current, "<span class='warning'><FONT size = 3><B>You have been brainwashed! You are no longer a syndicate operative!</B></FONT></span>")
|
||||
log_admin("[key_name(usr)] has de-nuke op'd [key_name(current)]")
|
||||
message_admins("[key_name_admin(usr)] has de-nuke op'd [key_name_admin(current)]")
|
||||
if("nuclear")
|
||||
@@ -983,7 +980,7 @@
|
||||
else
|
||||
current.real_name = "[syndicate_name()] Operative #[ticker.mode.syndicates.len-1]"
|
||||
special_role = SPECIAL_ROLE_NUKEOPS
|
||||
to_chat(current, "\blue You are a [syndicate_name()] agent!")
|
||||
to_chat(current, "<span class='notice'>You are a [syndicate_name()] agent!</span>")
|
||||
ticker.mode.forge_syndicate_objectives(src)
|
||||
ticker.mode.greet_syndicate(src)
|
||||
log_admin("[key_name(usr)] has nuke op'd [key_name(current)]")
|
||||
@@ -1006,7 +1003,7 @@
|
||||
qdel(H.w_uniform)
|
||||
|
||||
if(!ticker.mode.equip_syndicate(current))
|
||||
to_chat(usr, "\red Equipping a syndicate failed!")
|
||||
to_chat(usr, "<span class='warning'>Equipping a syndicate failed!</span>")
|
||||
return
|
||||
log_admin("[key_name(usr)] has equipped [key_name(current)] as a nuclear operative")
|
||||
message_admins("[key_name_admin(usr)] has equipped [key_name_admin(current)] as a nuclear operative")
|
||||
@@ -1023,7 +1020,7 @@
|
||||
log_admin("[key_name(usr)] has given [key_name(current)] the nuclear authorization code")
|
||||
message_admins("[key_name_admin(usr)] has given [key_name_admin(current)] the nuclear authorization code")
|
||||
else
|
||||
to_chat(usr, "\red No valid nuke found!")
|
||||
to_chat(usr, "<span class='warning'>No valid nuke found!</span>")
|
||||
|
||||
else if(href_list["traitor"])
|
||||
switch(href_list["traitor"])
|
||||
@@ -1031,7 +1028,7 @@
|
||||
if(src in ticker.mode.traitors)
|
||||
ticker.mode.traitors -= src
|
||||
special_role = null
|
||||
to_chat(current, "\red <FONT size = 3><B>You have been brainwashed! You are no longer a traitor!</B></FONT>")
|
||||
to_chat(current, "<span class='warning'><FONT size = 3><B>You have been brainwashed! You are no longer a traitor!</B></FONT></span>")
|
||||
log_admin("[key_name(usr)] has de-traitored [key_name(current)]")
|
||||
message_admins("[key_name_admin(usr)] has de-traitored [key_name_admin(current)]")
|
||||
if(isAI(current))
|
||||
@@ -1061,7 +1058,7 @@
|
||||
|
||||
if("autoobjectives")
|
||||
ticker.mode.forge_traitor_objectives(src)
|
||||
to_chat(usr, "\blue The objectives for traitor [key] have been generated. You can edit them and announce manually.")
|
||||
to_chat(usr, "<span class='notice'>The objectives for traitor [key] have been generated. You can edit them and announce manually.</span>")
|
||||
log_admin("[key_name(usr)] has automatically forged objectives for [key_name(current)]")
|
||||
message_admins("[key_name_admin(usr)] has automatically forged objectives for [key_name_admin(current)]")
|
||||
|
||||
@@ -1171,7 +1168,7 @@
|
||||
if(ishuman(current))
|
||||
var/mob/living/carbon/human/H = current
|
||||
// Don't "undress" organs right out of the body
|
||||
for(var/obj/item/W in H.contents - (H.organs | H.internal_organs))
|
||||
for(var/obj/item/W in H.contents - (H.bodyparts | H.internal_organs))
|
||||
current.unEquip(W, 1)
|
||||
else
|
||||
for(var/obj/item/W in current)
|
||||
@@ -1197,7 +1194,7 @@
|
||||
message_admins("[key_name_admin(usr)] has set [key_name_admin(current)]'s telecrystals to [crystals]")
|
||||
if("uplink")
|
||||
if(!ticker.mode.equip_traitor(current, !(src in ticker.mode.traitors)))
|
||||
to_chat(usr, "\red Equipping a syndicate failed!")
|
||||
to_chat(usr, "<span class='warning'>Equipping a syndicate failed!</span>")
|
||||
return
|
||||
log_admin("[key_name(usr)] has given [key_name(current)] an uplink")
|
||||
message_admins("[key_name_admin(usr)] has given [key_name_admin(current)] an uplink")
|
||||
@@ -1276,7 +1273,7 @@
|
||||
current.real_name = "[syndicate_name()] Operative #[ticker.mode.syndicates.len-1]"
|
||||
special_role = SPECIAL_ROLE_NUKEOPS
|
||||
assigned_role = "MODE"
|
||||
to_chat(current, "\blue You are a [syndicate_name()] agent!")
|
||||
to_chat(current, "<span class='notice'>You are a [syndicate_name()] agent!</span>")
|
||||
ticker.mode.forge_syndicate_objectives(src)
|
||||
ticker.mode.greet_syndicate(src)
|
||||
|
||||
@@ -1335,7 +1332,7 @@
|
||||
to_chat(current, "<font color=\"cultitalic\"><b><i>You catch a glimpse of the Realm of [ticker.mode.cultdat.entity_name], [ticker.mode.cultdat.entity_title2]. You now see how flimsy the world is, you see that it should be open to the knowledge of [ticker.mode.cultdat.entity_name].</b></i></font>")
|
||||
to_chat(current, "<font color=\"cultitalic\"><b><i>Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back.</b></i></font>")
|
||||
var/datum/game_mode/cult/cult = ticker.mode
|
||||
if(istype(cult))
|
||||
if(GAMEMODE_IS_CULT)
|
||||
cult.memorize_cult_objectives(src)
|
||||
else
|
||||
var/explanation = "Summon [ticker.mode.cultdat.entity_name] via the use of the appropriate rune. It will only work if nine cultists stand on and around it."
|
||||
|
||||
@@ -218,10 +218,8 @@
|
||||
if(istype(I))
|
||||
apply_to_card(I, H, get_centcom_access("Nanotrasen Navy Officer"), "Nanotrasen Navy Officer")
|
||||
|
||||
var/obj/item/weapon/implant/L = new /obj/item/weapon/implant/loyalty(H)
|
||||
L.imp_in = H
|
||||
L.implanted = 1
|
||||
H.sec_hud_set_implants()
|
||||
var/obj/item/weapon/implant/L = new /obj/item/weapon/implant/mindshield(H)
|
||||
L.implant(H)
|
||||
|
||||
|
||||
/datum/outfit/admin/nt_special_ops_officer
|
||||
@@ -250,7 +248,7 @@
|
||||
/obj/item/weapon/reagent_containers/hypospray/combat/nanites = 1,
|
||||
/obj/item/weapon/storage/box/zipties = 1,
|
||||
/obj/item/clothing/shoes/magboots/advance = 1,
|
||||
/obj/item/weapon/implanter/loyalty = 1,
|
||||
/obj/item/weapon/implanter/mindshield = 1,
|
||||
)
|
||||
|
||||
/datum/outfit/admin/nt_special_ops_officer/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||
@@ -329,10 +327,8 @@
|
||||
if(istype(I))
|
||||
apply_to_card(I, H, get_centcom_access("Nanotrasen Navy Captain"), "Nanotrasen Navy Captain")
|
||||
|
||||
var/obj/item/weapon/implant/L = new /obj/item/weapon/implant/loyalty(H)
|
||||
L.imp_in = H
|
||||
L.implanted = 1
|
||||
H.sec_hud_set_implants()
|
||||
var/obj/item/weapon/implant/L = new /obj/item/weapon/implant/mindshield(H)
|
||||
L.implant(H)
|
||||
|
||||
/datum/outfit/admin/nt_diplomat
|
||||
name = "NT Diplomat"
|
||||
@@ -755,10 +751,8 @@
|
||||
if(istype(I))
|
||||
apply_to_card(I, H, get_centcom_access("Emergency Response Team Member"), "Emergency Response Team Member")
|
||||
|
||||
var/obj/item/weapon/implant/L = new /obj/item/weapon/implant/loyalty(H)
|
||||
L.imp_in = H
|
||||
L.implanted = 1
|
||||
H.sec_hud_set_implants()
|
||||
var/obj/item/weapon/implant/L = new /obj/item/weapon/implant/mindshield(H)
|
||||
L.implant(H)
|
||||
|
||||
/datum/outfit/admin/chrono
|
||||
name = "Chrono Legionnaire"
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
if(goal_number)
|
||||
goal = goal_number
|
||||
bar = image('icons/effects/progessbar.dmi', target, "prog_bar_0", HUD_LAYER)
|
||||
bar.alpha = 0
|
||||
bar.plane = HUD_PLANE
|
||||
bar.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA
|
||||
user = User
|
||||
@@ -26,7 +27,7 @@
|
||||
var/list/bars = user.progressbars[bar.loc]
|
||||
bars.Add(src)
|
||||
listindex = bars.len
|
||||
bar.pixel_y = 32 + (PROGRESSBAR_HEIGHT * (listindex - 1))
|
||||
animate(bar, pixel_y = 32 + (PROGRESSBAR_HEIGHT * (listindex - 1)), alpha = 255, time = 5, easing = SINE_EASING)
|
||||
|
||||
/datum/progressbar/proc/update(progress)
|
||||
if(!user || !user.client)
|
||||
@@ -46,7 +47,8 @@
|
||||
|
||||
/datum/progressbar/proc/shiftDown()
|
||||
--listindex
|
||||
bar.pixel_y -= PROGRESSBAR_HEIGHT
|
||||
var/shiftheight = bar.pixel_y - PROGRESSBAR_HEIGHT
|
||||
animate(bar, pixel_y = shiftheight, time = 5, easing = SINE_EASING)
|
||||
|
||||
/datum/progressbar/Destroy()
|
||||
for(var/I in user.progressbars[bar.loc])
|
||||
@@ -58,10 +60,11 @@
|
||||
bars.Remove(src)
|
||||
if(!bars.len)
|
||||
LAZYREMOVE(user.progressbars, bar.loc)
|
||||
|
||||
if(client)
|
||||
client.images -= bar
|
||||
qdel(bar)
|
||||
animate(bar, alpha = 0, time = 5)
|
||||
spawn(5)
|
||||
if(client)
|
||||
client.images -= bar
|
||||
qdel(bar)
|
||||
. = ..()
|
||||
|
||||
#undef PROGRESSBAR_HEIGHT
|
||||
#undef PROGRESSBAR_HEIGHT
|
||||
|
||||
@@ -100,7 +100,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
|
||||
var/action_icon = 'icons/mob/actions.dmi'
|
||||
var/action_icon_state = "spell_default"
|
||||
var/action_background_icon_state = "bg_spell"
|
||||
|
||||
|
||||
var/sound = null //The sound the spell makes when it is cast
|
||||
|
||||
/obj/effect/proc_holder/spell/proc/cast_check(skipcharge = 0, mob/living/user = usr) //checks if the spell can be cast based on its settings; skipcharge is used when an additional cast_check is called inside the spell
|
||||
@@ -184,8 +184,8 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
|
||||
user.visible_message(invocation, invocation_emote_self) //same style as in mob/living/emote.dm
|
||||
|
||||
/obj/effect/proc_holder/spell/proc/playMagSound()
|
||||
playsound(get_turf(usr), sound,50,1)
|
||||
|
||||
playsound(get_turf(usr), sound,50,1)
|
||||
|
||||
/obj/effect/proc_holder/spell/New()
|
||||
..()
|
||||
action = new(src)
|
||||
@@ -194,8 +194,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
|
||||
charge_counter = charge_max
|
||||
|
||||
/obj/effect/proc_holder/spell/Destroy()
|
||||
qdel(action)
|
||||
action = null
|
||||
QDEL_NULL(action)
|
||||
return ..()
|
||||
|
||||
/obj/effect/proc_holder/spell/Click()
|
||||
@@ -223,10 +222,10 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
|
||||
spawn(0)
|
||||
if(charge_type == "recharge" && recharge)
|
||||
start_recharge()
|
||||
|
||||
|
||||
if(sound)
|
||||
playMagSound()
|
||||
|
||||
playMagSound()
|
||||
|
||||
if(prob(critfailchance))
|
||||
critfail(targets)
|
||||
else
|
||||
|
||||
@@ -26,9 +26,9 @@
|
||||
if(M.mind)
|
||||
for(var/obj/effect/proc_holder/spell/S in M.mind.spell_list)
|
||||
S.charge_counter = S.charge_max
|
||||
to_chat(M, "<span class='notice'>you feel raw magic flowing through you, it feels good!</span>")
|
||||
to_chat(M, "<span class='notice'>You feel raw magical energy flowing through you, it feels good!</span>")
|
||||
else
|
||||
to_chat(M, "<span class='notice'>you feel very strange for a moment, but then it passes.</span>")
|
||||
to_chat(M, "<span class='notice'>You feel very strange for a moment, but then it passes.</span>")
|
||||
burnt_out = 1
|
||||
charged_item = M
|
||||
break
|
||||
@@ -62,11 +62,12 @@
|
||||
break
|
||||
else if(istype(item, /obj/item/weapon/stock_parts/cell/))
|
||||
var/obj/item/weapon/stock_parts/cell/C = item
|
||||
if(prob(80))
|
||||
C.maxcharge -= 200
|
||||
if(C.maxcharge <= 1) //Div by 0 protection
|
||||
C.maxcharge = 1
|
||||
burnt_out = 1
|
||||
if(!C.self_recharge)
|
||||
if(prob(80))
|
||||
C.maxcharge -= 200
|
||||
if(C.maxcharge <= 1) //Div by 0 protection
|
||||
C.maxcharge = 1
|
||||
burnt_out = 1
|
||||
C.charge = C.maxcharge
|
||||
charged_item = C
|
||||
break
|
||||
@@ -75,17 +76,18 @@
|
||||
for(I in item.contents)
|
||||
if(istype(I, /obj/item/weapon/stock_parts/cell/))
|
||||
var/obj/item/weapon/stock_parts/cell/C = I
|
||||
if(prob(80))
|
||||
C.maxcharge -= 200
|
||||
if(C.maxcharge <= 1) //Div by 0 protection
|
||||
C.maxcharge = 1
|
||||
burnt_out = 1
|
||||
if(!C.self_recharge)
|
||||
if(prob(80))
|
||||
C.maxcharge -= 200
|
||||
if(C.maxcharge <= 1) //Div by 0 protection
|
||||
C.maxcharge = 1
|
||||
burnt_out = 1
|
||||
C.charge = C.maxcharge
|
||||
item.update_icon()
|
||||
charged_item = item
|
||||
break
|
||||
if(!charged_item)
|
||||
to_chat(L, "<span class='notice'>you feel magical power surging to your hands, but the feeling rapidly fades...</span>")
|
||||
to_chat(L, "<span class='notice'>You feel magical power surging to your hands, but the feeling rapidly fades...</span>")
|
||||
else if(burnt_out)
|
||||
to_chat(L, "<span class='caution'>[charged_item] doesn't seem to be reacting to the spell...</span>")
|
||||
else
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
targets -= spawn_place
|
||||
if(ispath(summoned_object_type,/turf))
|
||||
if(istype(get_turf(user),/turf/simulated/shuttle))
|
||||
to_chat(user, "\red You can't build things on shuttles!")
|
||||
to_chat(user, "<span class='warning'>You can't build things on shuttles!</span>")
|
||||
break
|
||||
var/turf/O = spawn_place
|
||||
var/N = summoned_object_type
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
action_background_icon_state = "bg_cult"
|
||||
|
||||
/obj/effect/proc_holder/spell/aoe_turf/conjure/floor
|
||||
name = "Floor Construction"
|
||||
name = "Summon Cult Floor"
|
||||
desc = "This spell constructs a cult floor"
|
||||
action_icon_state = "floorconstruct"
|
||||
action_background_icon_state = "bg_cult"
|
||||
@@ -20,7 +20,7 @@
|
||||
centcom_cancast = 0 //Stop crashing the server by spawning turfs on transit tiles
|
||||
|
||||
/obj/effect/proc_holder/spell/aoe_turf/conjure/wall
|
||||
name = "Lesser Construction"
|
||||
name = "Summon Cult Wall"
|
||||
desc = "This spell constructs a cult wall"
|
||||
action_icon_state = "lesserconstruct"
|
||||
action_background_icon_state = "bg_cult"
|
||||
@@ -30,7 +30,7 @@
|
||||
invocation = "none"
|
||||
invocation_type = "none"
|
||||
range = 0
|
||||
summon_type = list(/turf/simulated/wall/cult)
|
||||
summon_type = list(/turf/simulated/wall/cult/artificer) //we don't want artificer-based runed metal farms
|
||||
centcom_cancast = 0 //Stop crashing the server by spawning turfs on transit tiles
|
||||
|
||||
/obj/effect/proc_holder/spell/aoe_turf/conjure/wall/reinforced
|
||||
|
||||
@@ -15,13 +15,15 @@
|
||||
var/image/halo = null
|
||||
action_icon_state = "lightning"
|
||||
var/sound/Snd // so far only way i can think of to stop a sound, thank MSO for the idea.
|
||||
var/damaging = TRUE
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/lightning/lightnian
|
||||
clothes_req = 0
|
||||
invocation_type = "none"
|
||||
damaging = 0
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/lightning/Click()
|
||||
if(!ready && start_time==0)
|
||||
if(!ready && start_time == 0)
|
||||
if(cast_check())
|
||||
StartChargeup()
|
||||
else
|
||||
@@ -32,12 +34,12 @@
|
||||
/obj/effect/proc_holder/spell/targeted/lightning/proc/StartChargeup(mob/user = usr)
|
||||
ready = 1
|
||||
to_chat(user, "<span class='notice'>You start gathering the power.</span>")
|
||||
Snd = new/sound('sound/magic/lightning_chargeup.ogg',channel = 7)
|
||||
Snd = new/sound('sound/magic/lightning_chargeup.ogg', channel = 7)
|
||||
halo = image("icon"='icons/effects/effects.dmi',"icon_state" ="electricity","layer" = EFFECTS_LAYER)
|
||||
user.overlays.Add(halo)
|
||||
playsound(get_turf(user), Snd, 50, 0)
|
||||
start_time = world.time
|
||||
if(do_mob(user,user,100,uninterruptible=1))
|
||||
if(do_mob(user, user, 100, uninterruptible=1))
|
||||
if(ready)
|
||||
Discharge()
|
||||
|
||||
@@ -61,9 +63,9 @@ obj/effect/proc_holder/spell/targeted/lightning/proc/Reset(mob/user = usr)
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/lightning/cast(list/targets, mob/user = usr)
|
||||
ready = 0
|
||||
var/mob/living/carbon/target = targets[1]
|
||||
Snd=sound(null, repeat = 0, wait = 1, channel = Snd.channel) //byond, why you suck?
|
||||
playsound(get_turf(user),Snd,50,0)// Sorry MrPerson, but the other ways just didn't do it the way i needed to work, this is the only way.
|
||||
var/mob/living/target = targets[1]
|
||||
Snd = sound(null, repeat = 0, wait = 1, channel = Snd.channel) //byond, why you suck?
|
||||
playsound(get_turf(user), Snd, 50, 0)// Sorry MrPerson, but the other ways just didn't do it the way i needed to work, this is the only way.
|
||||
if(get_dist(user,target)>range)
|
||||
to_chat(user, "<span class='notice'>They are too far away!</span>")
|
||||
Reset(user)
|
||||
@@ -73,17 +75,37 @@ obj/effect/proc_holder/spell/targeted/lightning/proc/Reset(mob/user = usr)
|
||||
user.Beam(target,icon_state="lightning[rand(1,12)]",icon='icons/effects/effects.dmi',time=5)
|
||||
|
||||
var/energy = min(world.time - start_time,100)
|
||||
Bolt(user,target,max(15,energy/2),5,user) //5 bounces for energy/2 burn
|
||||
if(damaging)
|
||||
Bolt(user,target,max(15,energy/2),5,user) //5 bounces for energy/2 burn
|
||||
else
|
||||
var/bounces = round(energy/20)
|
||||
Bolt(user,target,0,bounces,user)
|
||||
Reset(user)
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/lightning/proc/Bolt(mob/origin, mob/target, bolt_energy, bounces, mob/user = usr)
|
||||
origin.Beam(target,icon_state="lightning[rand(1,12)]",icon='icons/effects/effects.dmi',time=5)
|
||||
var/mob/living/carbon/current = target
|
||||
/obj/effect/proc_holder/spell/targeted/lightning/proc/Bolt(mob/origin, mob/living/target, bolt_energy, bounces, mob/user = usr)
|
||||
origin.Beam(target,icon_state="lightning[rand(1,12)]", icon='icons/effects/effects.dmi', time=5)
|
||||
var/mob/living/current = target
|
||||
if(bounces < 1)
|
||||
current.electrocute_act(bolt_energy,"Lightning Bolt",safety=1)
|
||||
if(damaging)
|
||||
current.electrocute_act(bolt_energy,"Lightning Bolt",safety=1)
|
||||
else
|
||||
current.AdjustJitter(1000) //High numbers for violent convulsions
|
||||
current.do_jitter_animation(current.jitteriness)
|
||||
current.AdjustStuttering(2)
|
||||
current.Slowed(3)
|
||||
spawn(20)
|
||||
current.AdjustJitter(-1000, bound_lower = 10) //Still jittery, but vastly less
|
||||
playsound(get_turf(current), 'sound/magic/LightningShock.ogg', 50, 1, -1)
|
||||
else
|
||||
current.electrocute_act(bolt_energy,"Lightning Bolt",safety=1)
|
||||
if(damaging)
|
||||
current.electrocute_act(bolt_energy,"Lightning Bolt",safety=1)
|
||||
else
|
||||
current.AdjustJitter(1000) //High numbers for violent convulsions
|
||||
current.do_jitter_animation(current.jitteriness)
|
||||
current.AdjustStuttering(2)
|
||||
current.Slowed(3)
|
||||
spawn(20)
|
||||
current.AdjustJitter(-1000, bound_lower = 10) //Still jittery, but vastly less
|
||||
playsound(get_turf(current), 'sound/magic/LightningShock.ogg', 50, 1, -1)
|
||||
var/list/possible_targets = new
|
||||
for(var/mob/living/M in view_or_range(range,target,"view"))
|
||||
|
||||
@@ -12,34 +12,37 @@
|
||||
random_target = 1
|
||||
var/energy = 0
|
||||
var/ready = 0
|
||||
var/start_time = 0
|
||||
var/image/halo = null
|
||||
var/sound/Snd // so far only way i can think of to stop a sound, thank MSO for the idea.
|
||||
action_icon_state = "tech"
|
||||
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/magnet/Click()
|
||||
if(!ready)
|
||||
if(!ready && start_time == 0)
|
||||
if(cast_check())
|
||||
StartChargeup()
|
||||
else
|
||||
if(cast_check(skipcharge=1))
|
||||
if(ready && cast_check(skipcharge=1))
|
||||
choose_targets()
|
||||
return 1
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/magnet/proc/StartChargeup(mob/user = usr)
|
||||
ready = 1
|
||||
to_chat(user, "<span class='notice'>You start gathering the power.</span>")
|
||||
Snd = new/sound('sound/magic/lightning_chargeup.ogg', channel = 7)
|
||||
halo = image("icon"='icons/effects/effects.dmi',"icon_state" ="electricity","layer" = EFFECTS_LAYER)
|
||||
user.overlays.Add(halo)
|
||||
spawn(0)
|
||||
while(ready)
|
||||
sleep(1)
|
||||
energy++
|
||||
if(energy >= 100 && ready)
|
||||
Discharge()
|
||||
playsound(get_turf(user), Snd, 50, 0)
|
||||
start_time = world.time
|
||||
if(do_mob(user, user, 100, uninterruptible=1))
|
||||
if(ready)
|
||||
Discharge()
|
||||
|
||||
obj/effect/proc_holder/spell/targeted/magnet/proc/Reset(mob/user = usr)
|
||||
ready = 0
|
||||
energy = 0
|
||||
start_time = 0
|
||||
if(halo)
|
||||
user.overlays.Remove(halo)
|
||||
|
||||
@@ -50,16 +53,16 @@ obj/effect/proc_holder/spell/targeted/magnet/proc/Reset(mob/user = usr)
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/magnet/proc/Discharge(mob/user = usr)
|
||||
var/mob/living/M = user
|
||||
//M.electrocute_act(25,"magnet Bolt")
|
||||
to_chat(M, "<span class='danger'>You lose control over the power.</span>")
|
||||
Reset(user)
|
||||
start_recharge()
|
||||
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/magnet/cast(list/targets, mob/user = usr)
|
||||
|
||||
var/mob/living/carbon/target = targets[1]
|
||||
|
||||
ready = 0
|
||||
var/mob/living/target = targets[1]
|
||||
Snd = sound(null, repeat = 0, wait = 1, channel = Snd.channel) //byond, why you suck?
|
||||
playsound(get_turf(user), Snd, 50, 0)// Sorry MrPerson, but the other ways just didn't do it the way i needed to work, this is the only way.
|
||||
if(get_dist(user,target)>range)
|
||||
to_chat(user, "<span class='notice'>They are too far away!</span>")
|
||||
Reset(user)
|
||||
@@ -88,13 +91,13 @@ obj/effect/proc_holder/spell/targeted/magnet/proc/Reset(mob/user = usr)
|
||||
playsound(get_turf(target), 'sound/machines/defib_zap.ogg', 50, 1, -1)
|
||||
if(75 to 100)
|
||||
//CHAIN magnet
|
||||
Bolt(user,target,energy,user)
|
||||
Bolt(user,target,energy,5,user)
|
||||
Reset(user)
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/magnet/proc/Bolt(mob/origin,mob/target,bolt_energy,mob/user = usr)
|
||||
origin.Beam(target,icon_state="lightning",icon='icons/effects/effects.dmi',time=5)
|
||||
/obj/effect/proc_holder/spell/targeted/magnet/proc/Bolt(mob/origin,mob/target,bolt_energy,bounces, mob/user = usr)
|
||||
origin.Beam(target, icon_state="lightning", icon='icons/effects/effects.dmi', time=5)
|
||||
var/mob/living/carbon/current = target
|
||||
if(bolt_energy < 75)
|
||||
if(bounces < 1)
|
||||
for(var/obj/item/I in target.l_hand)
|
||||
if(I.flags & CONDUCT)
|
||||
I.throw_at(user, I.throw_range, 4, target)
|
||||
@@ -119,4 +122,4 @@ obj/effect/proc_holder/spell/targeted/magnet/proc/Reset(mob/user = usr)
|
||||
return
|
||||
var/mob/living/next = pick(possible_targets)
|
||||
if(next)
|
||||
Bolt(current,next,bolt_energy-6,user) // 5 max bounces
|
||||
Bolt(current,next,bolt_energy,bounces-1,user) // 5 max bounces
|
||||
@@ -33,7 +33,7 @@
|
||||
H.apply_damage(10, BRUTE, "chest")
|
||||
to_chat(H, "<span class='userdanger'>You have no appendix, but something had to give! Holy shit, what was that?</span>")
|
||||
H.Weaken(3)
|
||||
for(var/obj/item/organ/external/E in H.organs)
|
||||
for(var/obj/item/organ/external/E in H.bodyparts)
|
||||
if(istype(E, /obj/item/organ/external/head))
|
||||
continue
|
||||
if(istype(E, /obj/item/organ/external/chest))
|
||||
@@ -43,5 +43,3 @@
|
||||
if(prob(7))
|
||||
to_chat(H, "<span class='userdanger'>Your [E] was severed by the explosion!</span>")
|
||||
E.droplimb(1, DROPLIMB_EDGE, 0, 1)
|
||||
|
||||
|
||||
|
||||
@@ -70,8 +70,8 @@
|
||||
|
||||
if(ishuman(M)) //Edge case housekeeping
|
||||
var/mob/living/carbon/human/C = M
|
||||
/*if(C.internal_organs_by_name && item_to_retrive in C.internal_organs_by_name ) //This won't work, as we use organ datums instead of objects. --DZD
|
||||
C.internal_organs_by_name -= item_to_retrive
|
||||
/*if(C.internal_bodyparts_by_name && item_to_retrive in C.internal_bodyparts_by_name ) //This won't work, as we use organ datums instead of objects. --DZD
|
||||
C.internal_bodyparts_by_name -= item_to_retrive
|
||||
if(istype(marked_item, /obj/item/brain)) //If this code ever runs I will be happy
|
||||
var/obj/item/brain/B = new /obj/item/brain(target.loc)
|
||||
B.transfer_identity(C)
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
clothes_req = 1
|
||||
invocation = "BIRUZ BENNAR"
|
||||
invocation_type = "shout"
|
||||
message = "\blue You feel strong! You feel a pressure building behind your eyes!"
|
||||
message = "<span class='notice'>You feel strong! You feel a pressure building behind your eyes!</span>"
|
||||
range = -1
|
||||
include_user = 1
|
||||
centcom_cancast = 0
|
||||
@@ -235,7 +235,7 @@
|
||||
clothes_req = 0
|
||||
invocation = "STI KALY"
|
||||
invocation_type = "whisper"
|
||||
message = "\blue Your eyes cry out in pain!"
|
||||
message = "<span class='notice'>Your eyes cry out in pain!</span>"
|
||||
cooldown_min = 50 //12 deciseconds reduction per rank
|
||||
|
||||
starting_spells = list("/obj/effect/proc_holder/spell/targeted/inflict_handler/blind","/obj/effect/proc_holder/spell/targeted/genetic/blind")
|
||||
|
||||
@@ -326,6 +326,17 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
|
||||
/////// Weapons: Specialist
|
||||
|
||||
/datum/supply_packs/security/armory/ballistic
|
||||
name = "Riot Shotguns Crate"
|
||||
contains = list(/obj/item/weapon/gun/projectile/shotgun/riot,
|
||||
/obj/item/weapon/gun/projectile/shotgun/riot,
|
||||
/obj/item/weapon/gun/projectile/shotgun/riot,
|
||||
/obj/item/weapon/storage/belt/bandolier,
|
||||
/obj/item/weapon/storage/belt/bandolier,
|
||||
/obj/item/weapon/storage/belt/bandolier)
|
||||
cost = 50
|
||||
containername = "riot shotgun crate"
|
||||
|
||||
/datum/supply_packs/security/armory/ballisticauto
|
||||
name = "Combat Shotguns Crate"
|
||||
contains = list(/obj/item/weapon/gun/projectile/shotgun/automatic/combat,
|
||||
/obj/item/weapon/gun/projectile/shotgun/automatic/combat,
|
||||
@@ -333,13 +344,35 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
|
||||
/obj/item/weapon/storage/belt/bandolier,
|
||||
/obj/item/weapon/storage/belt/bandolier,
|
||||
/obj/item/weapon/storage/belt/bandolier)
|
||||
cost = 20
|
||||
cost = 80
|
||||
containername = "combat shotgun crate"
|
||||
|
||||
/datum/supply_packs/security/armory/buckshotammo
|
||||
name = "Buckshot Ammo Crate"
|
||||
contains = list(/obj/item/ammo_box/shotgun/buck,
|
||||
/obj/item/weapon/storage/box/buck,
|
||||
/obj/item/weapon/storage/box/buck,
|
||||
/obj/item/weapon/storage/box/buck,
|
||||
/obj/item/weapon/storage/box/buck,
|
||||
/obj/item/weapon/storage/box/buck)
|
||||
cost = 45
|
||||
containername = "buckshot ammo crate"
|
||||
|
||||
/datum/supply_packs/security/armory/slugammo
|
||||
name = "Slug Ammo Crate"
|
||||
contains = list(/obj/item/ammo_box/shotgun,
|
||||
/obj/item/weapon/storage/box/slug,
|
||||
/obj/item/weapon/storage/box/slug,
|
||||
/obj/item/weapon/storage/box/slug,
|
||||
/obj/item/weapon/storage/box/slug,
|
||||
/obj/item/weapon/storage/box/slug)
|
||||
cost = 45
|
||||
containername = "slug ammo crate"
|
||||
|
||||
/datum/supply_packs/security/armory/expenergy
|
||||
name = "Energy Guns Crate"
|
||||
contains = list(/obj/item/weapon/gun/energy/gun,
|
||||
/obj/item/weapon/gun/energy/gun) // Only two guns to keep costs down
|
||||
/obj/item/weapon/gun/energy/gun)
|
||||
cost = 25
|
||||
containertype = /obj/structure/closet/crate/secure/plasma
|
||||
containername = "energy gun crate"
|
||||
@@ -376,9 +409,9 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
|
||||
|
||||
/////// Implants & etc
|
||||
|
||||
/datum/supply_packs/security/armory/loyalty
|
||||
/datum/supply_packs/security/armory/mindshield
|
||||
name = "Mindshield Implants Crate"
|
||||
contains = list (/obj/item/weapon/storage/lockbox/loyalty)
|
||||
contains = list (/obj/item/weapon/storage/lockbox/mindshield)
|
||||
cost = 40
|
||||
containername = "mindshield implant crate"
|
||||
|
||||
|
||||
@@ -352,6 +352,7 @@ var/list/uplink_items = list()
|
||||
/datum/uplink_item/jobspecific/poison_pen
|
||||
name = "Poison Pen"
|
||||
desc = "Cutting edge of deadly writing implements technology, this gadget will infuse any piece of paper with delayed contact poison."
|
||||
reference = "PP"
|
||||
item = /obj/item/weapon/pen/poison
|
||||
cost = 2
|
||||
excludefrom = list(/datum/game_mode/nuclear)
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
/datum/map_template/vr
|
||||
name = null
|
||||
var/id = null // For blacklisting purposes, all vr levels need an id
|
||||
var/description = "This is a placeholder. Please contact your virtual adminsitrator if you see this."
|
||||
var/outfit = null
|
||||
|
||||
var/prefix = null
|
||||
var/suffix = null
|
||||
|
||||
/datum/map_template/vr/New()
|
||||
if(!name && id)
|
||||
name = id
|
||||
|
||||
mappath = prefix + suffix
|
||||
..(path = mappath)
|
||||
@@ -0,0 +1,16 @@
|
||||
/datum/map_template/vr/level
|
||||
prefix = "_maps/map_files/vr/"
|
||||
|
||||
/datum/map_template/vr/level/lobby
|
||||
id = "lobby"
|
||||
suffix = "lobby.dmm"
|
||||
name = "Virtual Hub Facility"
|
||||
description = "This is the lobby. The hub for all things VR."
|
||||
outfit = /datum/outfit/vr/vr_basic
|
||||
|
||||
/datum/map_template/vr/level/roman
|
||||
id = "roman"
|
||||
suffix = "blood_and_sand.dmm"
|
||||
name = "Blood and Sand Arena"
|
||||
description = "To the Death!"
|
||||
outfit = /datum/outfit/vr/roman
|
||||
@@ -52,15 +52,15 @@ var/const/WIRE_BEACON_RX = 256 // beacon ping recv
|
||||
/datum/wires/mulebot/UpdatePulsed(index)
|
||||
switch(index)
|
||||
if(WIRE_POWER1, WIRE_POWER2)
|
||||
holder.visible_message("\blue [bicon(holder)] The charge light flickers.")
|
||||
holder.visible_message("<span class='notice'>[bicon(holder)] The charge light flickers.</span>")
|
||||
if(WIRE_AVOIDANCE)
|
||||
holder.visible_message("\blue [bicon(holder)] The external warning lights flash briefly.")
|
||||
holder.visible_message("<span class='notice'>[bicon(holder)] The external warning lights flash briefly.</span>")
|
||||
if(WIRE_LOADCHECK)
|
||||
holder.visible_message("\blue [bicon(holder)] The load platform clunks.")
|
||||
holder.visible_message("<span class='notice'>[bicon(holder)] The load platform clunks.</span>")
|
||||
if(WIRE_MOTOR1, WIRE_MOTOR2)
|
||||
holder.visible_message("\blue [bicon(holder)] The drive motor whines briefly.")
|
||||
holder.visible_message("<span class='notice'>[bicon(holder)] The drive motor whines briefly.</span>")
|
||||
else
|
||||
holder.visible_message("\blue [bicon(holder)] You hear a radio crackle.")
|
||||
holder.visible_message("<span class='notice'>[bicon(holder)] You hear a radio crackle.</span>")
|
||||
..()
|
||||
|
||||
// HELPER PROCS
|
||||
|
||||
@@ -52,12 +52,12 @@ var/const/NUCLEARBOMB_WIRE_SAFETY = 4
|
||||
if(N.safety == 1)
|
||||
if(!N.is_syndicate)
|
||||
set_security_level(N.previous_level)
|
||||
N.visible_message("\blue The [N] quiets down.")
|
||||
N.visible_message("<span class='notice'>The [N] quiets down.</span>")
|
||||
if(!N.lighthack)
|
||||
if(N.icon_state == "nuclearbomb2")
|
||||
N.icon_state = "nuclearbomb1"
|
||||
else
|
||||
N.visible_message("\blue The [N] emits a quiet whirling noise!")
|
||||
N.visible_message("<span class='notice'>The [N] emits a quiet whirling noise!</span>")
|
||||
updateUIs()
|
||||
|
||||
/datum/wires/nuclearbomb/UpdateCut(index, mended)
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
/datum/wires/tesla_coil
|
||||
wire_count = 1
|
||||
holder_type = /obj/machinery/power/tesla_coil
|
||||
|
||||
var/const/WIRE_ZAP = 1
|
||||
|
||||
/datum/wires/tesla_coil/GetWireName(index)
|
||||
switch(index)
|
||||
if(WIRE_ZAP)
|
||||
return "Zap"
|
||||
|
||||
/datum/wires/tesla_coil/CanUse(mob/living/L)
|
||||
var/obj/machinery/power/tesla_coil/T = holder
|
||||
if(T && T.panel_open)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/datum/wires/tesla_coil/UpdatePulsed(index)
|
||||
var/obj/machinery/power/tesla_coil/T = holder
|
||||
switch(index)
|
||||
if(WIRE_ZAP)
|
||||
T.zap()
|
||||
..()
|
||||
@@ -2,8 +2,6 @@
|
||||
/var/datum/announcement/priority/priority_announcement = new(do_log = 0)
|
||||
/var/datum/announcement/priority/command/command_announcement = new(do_log = 0, do_newscast = 0)
|
||||
/var/datum/announcement/priority/command/event/event_announcement = new(do_log = 0, do_newscast = 0)
|
||||
/var/datum/announcement/priority/enemy/communications_announcement = new(do_log = 0, do_newscast = 0)
|
||||
|
||||
|
||||
/datum/announcement
|
||||
var/title = "Attention"
|
||||
@@ -36,17 +34,11 @@
|
||||
admin_announcement = 1
|
||||
title = "[command_name()] Update"
|
||||
announcement_type = "[command_name()] Update"
|
||||
|
||||
|
||||
/datum/announcement/priority/command/event/New(var/do_log = 1, var/new_sound = sound('sound/misc/notice2.ogg'), var/do_newscast = 0)
|
||||
..(do_log, new_sound, do_newscast)
|
||||
admin_announcement = 0
|
||||
|
||||
/datum/announcement/priority/enemy/New(var/do_log = 1, var/new_sound = sound('sound/AI/intercept2.ogg'), var/do_newscast = 0)
|
||||
..(do_log, new_sound, do_newscast)
|
||||
admin_announcement = 1
|
||||
title = "[command_name()] Update"
|
||||
announcement_type = "Enemy Communications"
|
||||
|
||||
/datum/announcement/priority/security/New(var/do_log = 1, var/new_sound = sound('sound/misc/notice2.ogg'), var/do_newscast = 0)
|
||||
..(do_log, new_sound, do_newscast)
|
||||
title = "Security Announcement"
|
||||
@@ -55,44 +47,44 @@
|
||||
/datum/announcement/proc/Announce(var/message as text, var/new_title = "", var/new_sound = null, var/do_newscast = newscast, var/msg_sanitized = 0, var/from, var/msg_language)
|
||||
if(!message)
|
||||
return
|
||||
|
||||
|
||||
var/tmp/message_title = new_title ? new_title : title
|
||||
var/tmp/message_sound = new_sound ? sound(new_sound) : sound
|
||||
|
||||
if(!msg_sanitized)
|
||||
message = trim_strip_html_properly(message, allow_lines = 1)
|
||||
message_title = html_encode(message_title)
|
||||
|
||||
|
||||
var/message_announcer = null
|
||||
if(announcer)
|
||||
message_announcer = html_encode(announcer)
|
||||
|
||||
|
||||
var/datum/language/message_language = all_languages[msg_language ? msg_language : language]
|
||||
|
||||
|
||||
var/list/combined_receivers = Get_Receivers(message_language)
|
||||
var/list/receivers = combined_receivers[1]
|
||||
var/list/garbled_receivers = combined_receivers[2]
|
||||
|
||||
|
||||
var/formatted_message = Format_Message(message, message_title, message_announcer, from)
|
||||
var/garbled_formatted_message = Format_Message(message_language.scramble(message), message_language.scramble(message_title), message_language.scramble(message_announcer), message_language.scramble(from))
|
||||
|
||||
|
||||
Message(formatted_message, garbled_formatted_message, receivers, garbled_receivers)
|
||||
|
||||
|
||||
if(do_newscast)
|
||||
NewsCast(message, message_title)
|
||||
|
||||
|
||||
Sound(message_sound, combined_receivers[1] + combined_receivers[2])
|
||||
Log(message, message_title)
|
||||
|
||||
|
||||
/datum/announcement/proc/Get_Receivers(var/datum/language/message_language)
|
||||
var/list/receivers = list()
|
||||
var/list/garbled_receivers = list()
|
||||
|
||||
|
||||
if(admin_announcement)
|
||||
for(var/mob/M in player_list)
|
||||
if(!isnewplayer(M) && M.client)
|
||||
receivers |= M
|
||||
else
|
||||
else
|
||||
for(var/obj/item/device/radio/R in global_radios)
|
||||
receivers |= R.send_announcement()
|
||||
for(var/mob/M in receivers)
|
||||
@@ -102,7 +94,7 @@
|
||||
if(!M.say_understands(null, message_language))
|
||||
receivers -= M
|
||||
garbled_receivers |= M
|
||||
for(var/mob/M in dead_mob_list)
|
||||
for(var/mob/M in dead_mob_list)
|
||||
if(M.client && M.stat == DEAD)
|
||||
receivers |= M
|
||||
|
||||
@@ -113,21 +105,21 @@
|
||||
to_chat(M, message)
|
||||
for(var/mob/M in garbled_receivers)
|
||||
to_chat(M, garbled_message)
|
||||
|
||||
|
||||
/datum/announcement/proc/Format_Message(message, message_title, message_announcer, from)
|
||||
var/formatted_message
|
||||
formatted_message += "<h2 class='alert'>[message_title]</h2>"
|
||||
formatted_message += "<br><span class='alert'>[message]</span>"
|
||||
if(message_announcer)
|
||||
formatted_message += "<br><span class='alert'> -[message_announcer]</span>"
|
||||
|
||||
|
||||
return formatted_message
|
||||
|
||||
/datum/announcement/minor/Format_Message(message, message_title, message_announcer, from)
|
||||
var/formatted_message
|
||||
formatted_message += "<b><font size=3><font color=red>[message_title]</font color></font></b>"
|
||||
formatted_message += "<br><b><font size=3>[message]</font size></font></b>"
|
||||
|
||||
|
||||
return formatted_message
|
||||
|
||||
/datum/announcement/priority/Format_Message(message, message_title, message_announcer, from)
|
||||
@@ -137,20 +129,10 @@
|
||||
if(message_announcer)
|
||||
formatted_message += "<br><span class='alert'> -[message_announcer]</span>"
|
||||
formatted_message += "<br>"
|
||||
|
||||
|
||||
return formatted_message
|
||||
|
||||
/datum/announcement/priority/command/Format_Message(message, message_title, message_announcer, from)
|
||||
var/formatted_message
|
||||
formatted_message += "<h1 class='alert'>[title]</h1>"
|
||||
if(message_title)
|
||||
formatted_message += "<br><h2 class='alert'>[message_title]</h2>"
|
||||
formatted_message += "<br><span class='alert'>[message]</span><br>"
|
||||
formatted_message += "<br>"
|
||||
|
||||
return formatted_message
|
||||
|
||||
/datum/announcement/priority/enemy/Format_Message(message, message_title, message_announcer, from)
|
||||
var/formatted_message
|
||||
formatted_message += "<h1 class='alert'>[from]</h1>"
|
||||
if(message_title)
|
||||
@@ -164,7 +146,7 @@
|
||||
var/formatted_message
|
||||
formatted_message += "<font size=4 color='red'>[message_title]</font>"
|
||||
formatted_message += "<br><font color='red'>[message]</font>"
|
||||
|
||||
|
||||
return formatted_message
|
||||
|
||||
/datum/announcement/proc/NewsCast(message as text, message_title as text)
|
||||
|
||||
@@ -2582,6 +2582,22 @@ area/security/podbay
|
||||
/area/awaycontent/a30
|
||||
icon_state = "awaycontent30"
|
||||
|
||||
////////////////////////VR AREAS///////////////////////////////////
|
||||
|
||||
/area/vr
|
||||
name = "VR"
|
||||
requires_power = 0
|
||||
dynamic_lighting = 0
|
||||
no_teleportlocs = 1
|
||||
|
||||
|
||||
/area/vr/lobby
|
||||
name = "VR Lobby"
|
||||
|
||||
/area/vr/roman
|
||||
name = "Roman Arena"
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
/*
|
||||
Lists of areas to be used with is_type_in_list.
|
||||
|
||||
+2
-4
@@ -76,12 +76,10 @@
|
||||
qdel(AA)
|
||||
alternate_appearances = null
|
||||
|
||||
if(reagents)
|
||||
qdel(reagents)
|
||||
reagents = null
|
||||
QDEL_NULL(reagents)
|
||||
invisibility = 101
|
||||
return ..()
|
||||
|
||||
|
||||
//Hook for running code when a dir change occurs
|
||||
/atom/proc/setDir(newdir)
|
||||
dir = newdir
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
// If you're wondering what goofery this is, this is for things that need the environment
|
||||
// around them set up - like `air_update_turf` and the like
|
||||
if((ticker && ticker.current_state == GAME_STATE_PLAYING))
|
||||
if((ticker && ticker.current_state >= GAME_STATE_SETTING_UP))
|
||||
attempt_init()
|
||||
|
||||
/atom/movable/Destroy()
|
||||
@@ -231,7 +231,7 @@
|
||||
if(isobj(A))
|
||||
if(A.density && !A.throwpass) // **TODO: Better behaviour for windows which are dense, but shouldn't always stop movement
|
||||
src.throw_impact(A,speed)
|
||||
|
||||
|
||||
/atom/movable/proc/throw_at_fast(atom/target, range, speed, thrower, no_spin)
|
||||
set waitfor = 0
|
||||
throw_at(target, range, speed, thrower, no_spin)
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
hud_icons = list(ID_HUD)
|
||||
|
||||
/datum/atom_hud/data/human/security/advanced
|
||||
hud_icons = list(ID_HUD, IMPTRACK_HUD, IMPLOYAL_HUD, IMPCHEM_HUD, WANTED_HUD)
|
||||
hud_icons = list(ID_HUD, IMPTRACK_HUD, IMPMINDSHIELD_HUD, IMPCHEM_HUD, WANTED_HUD)
|
||||
|
||||
/datum/atom_hud/data/diagnostic
|
||||
hud_icons = list (DIAG_HUD, DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD, DIAG_BOT_HUD, DIAG_TRACK_HUD)
|
||||
@@ -172,7 +172,7 @@
|
||||
|
||||
/mob/living/carbon/human/proc/sec_hud_set_implants()
|
||||
var/image/holder
|
||||
for(var/i in list(IMPTRACK_HUD, IMPLOYAL_HUD, IMPCHEM_HUD))
|
||||
for(var/i in list(IMPTRACK_HUD, IMPMINDSHIELD_HUD, IMPCHEM_HUD))
|
||||
holder = hud_list[i]
|
||||
holder.icon_state = null
|
||||
for(var/obj/item/weapon/implant/I in src)
|
||||
@@ -180,8 +180,8 @@
|
||||
if(istype(I,/obj/item/weapon/implant/tracking))
|
||||
holder = hud_list[IMPTRACK_HUD]
|
||||
holder.icon_state = "hud_imp_tracking"
|
||||
else if(istype(I,/obj/item/weapon/implant/loyalty))
|
||||
holder = hud_list[IMPLOYAL_HUD]
|
||||
else if(istype(I,/obj/item/weapon/implant/mindshield))
|
||||
holder = hud_list[IMPMINDSHIELD_HUD]
|
||||
holder.icon_state = "hud_imp_loyal"
|
||||
else if(istype(I,/obj/item/weapon/implant/chem))
|
||||
holder = hud_list[IMPCHEM_HUD]
|
||||
|
||||
+36
-30
@@ -20,37 +20,43 @@
|
||||
#define DNA_UI_HAIR_R 1
|
||||
#define DNA_UI_HAIR_G 2
|
||||
#define DNA_UI_HAIR_B 3
|
||||
#define DNA_UI_BEARD_R 4
|
||||
#define DNA_UI_BEARD_G 5
|
||||
#define DNA_UI_BEARD_B 6
|
||||
#define DNA_UI_SKIN_TONE 7
|
||||
#define DNA_UI_SKIN_R 8
|
||||
#define DNA_UI_SKIN_G 9
|
||||
#define DNA_UI_SKIN_B 10
|
||||
#define DNA_UI_HACC_R 11
|
||||
#define DNA_UI_HACC_G 12
|
||||
#define DNA_UI_HACC_B 13
|
||||
#define DNA_UI_HEAD_MARK_R 14
|
||||
#define DNA_UI_HEAD_MARK_G 15
|
||||
#define DNA_UI_HEAD_MARK_B 16
|
||||
#define DNA_UI_BODY_MARK_R 17
|
||||
#define DNA_UI_BODY_MARK_G 18
|
||||
#define DNA_UI_BODY_MARK_B 19
|
||||
#define DNA_UI_TAIL_MARK_R 20
|
||||
#define DNA_UI_TAIL_MARK_G 21
|
||||
#define DNA_UI_TAIL_MARK_B 22
|
||||
#define DNA_UI_EYES_R 23
|
||||
#define DNA_UI_EYES_G 24
|
||||
#define DNA_UI_EYES_B 25
|
||||
#define DNA_UI_GENDER 26
|
||||
#define DNA_UI_BEARD_STYLE 27
|
||||
#define DNA_UI_HAIR_STYLE 28
|
||||
#define DNA_UI_HAIR2_R 4
|
||||
#define DNA_UI_HAIR2_G 5
|
||||
#define DNA_UI_HAIR2_B 6
|
||||
#define DNA_UI_BEARD_R 7
|
||||
#define DNA_UI_BEARD_G 8
|
||||
#define DNA_UI_BEARD_B 9
|
||||
#define DNA_UI_BEARD2_R 10
|
||||
#define DNA_UI_BEARD2_G 11
|
||||
#define DNA_UI_BEARD2_B 12
|
||||
#define DNA_UI_SKIN_TONE 13
|
||||
#define DNA_UI_SKIN_R 14
|
||||
#define DNA_UI_SKIN_G 15
|
||||
#define DNA_UI_SKIN_B 16
|
||||
#define DNA_UI_HACC_R 17
|
||||
#define DNA_UI_HACC_G 18
|
||||
#define DNA_UI_HACC_B 19
|
||||
#define DNA_UI_HEAD_MARK_R 20
|
||||
#define DNA_UI_HEAD_MARK_G 21
|
||||
#define DNA_UI_HEAD_MARK_B 22
|
||||
#define DNA_UI_BODY_MARK_R 23
|
||||
#define DNA_UI_BODY_MARK_G 24
|
||||
#define DNA_UI_BODY_MARK_B 25
|
||||
#define DNA_UI_TAIL_MARK_R 26
|
||||
#define DNA_UI_TAIL_MARK_G 27
|
||||
#define DNA_UI_TAIL_MARK_B 28
|
||||
#define DNA_UI_EYES_R 29
|
||||
#define DNA_UI_EYES_G 30
|
||||
#define DNA_UI_EYES_B 31
|
||||
#define DNA_UI_GENDER 32
|
||||
#define DNA_UI_BEARD_STYLE 33
|
||||
#define DNA_UI_HAIR_STYLE 34
|
||||
/*#define DNA_UI_BACC_STYLE 23*/
|
||||
#define DNA_UI_HACC_STYLE 29
|
||||
#define DNA_UI_HEAD_MARK_STYLE 30
|
||||
#define DNA_UI_BODY_MARK_STYLE 31
|
||||
#define DNA_UI_TAIL_MARK_STYLE 32
|
||||
#define DNA_UI_LENGTH 32 // Update this when you add something, or you WILL break shit.
|
||||
#define DNA_UI_HACC_STYLE 35
|
||||
#define DNA_UI_HEAD_MARK_STYLE 36
|
||||
#define DNA_UI_BODY_MARK_STYLE 37
|
||||
#define DNA_UI_TAIL_MARK_STYLE 38
|
||||
#define DNA_UI_LENGTH 38 // Update this when you add something, or you WILL break shit.
|
||||
|
||||
#define DNA_SE_LENGTH 55 // Was STRUCDNASIZE, size 27. 15 new blocks added = 42, plus room to grow.
|
||||
|
||||
|
||||
@@ -132,8 +132,11 @@
|
||||
dna.check_integrity()
|
||||
var/mob/living/carbon/human/H = src
|
||||
var/obj/item/organ/external/head/head_organ = H.get_organ("head")
|
||||
var/obj/item/organ/internal/eyes/eye_organ = H.get_int_organ(/obj/item/organ/internal/eyes)
|
||||
var/datum/species/S = H.species
|
||||
dna.write_head_attributes(head_organ)
|
||||
dna.write_eyes_attributes(eye_organ)
|
||||
H.update_eyes()
|
||||
|
||||
H.r_skin = dna.GetUIValueRange(DNA_UI_SKIN_R, 255)
|
||||
H.g_skin = dna.GetUIValueRange(DNA_UI_SKIN_G, 255)
|
||||
@@ -190,6 +193,10 @@
|
||||
head_organ.g_hair = GetUIValueRange(DNA_UI_HAIR_G, 255)
|
||||
head_organ.b_hair = GetUIValueRange(DNA_UI_HAIR_B, 255)
|
||||
|
||||
head_organ.r_hair_sec = GetUIValueRange(DNA_UI_HAIR2_R, 255)
|
||||
head_organ.g_hair_sec = GetUIValueRange(DNA_UI_HAIR2_G, 255)
|
||||
head_organ.b_hair_sec = GetUIValueRange(DNA_UI_HAIR2_B, 255)
|
||||
|
||||
//Facial Hair
|
||||
var/beard = GetUIValueRange(DNA_UI_BEARD_STYLE,facial_hair_styles_list.len)
|
||||
if((beard > 0) && (beard <= facial_hair_styles_list.len))
|
||||
@@ -199,6 +206,10 @@
|
||||
head_organ.g_facial = GetUIValueRange(DNA_UI_BEARD_G, 255)
|
||||
head_organ.b_facial = GetUIValueRange(DNA_UI_BEARD_B, 255)
|
||||
|
||||
head_organ.r_facial_sec = GetUIValueRange(DNA_UI_BEARD2_R, 255)
|
||||
head_organ.g_facial_sec = GetUIValueRange(DNA_UI_BEARD2_G, 255)
|
||||
head_organ.b_facial_sec = GetUIValueRange(DNA_UI_BEARD2_B, 255)
|
||||
|
||||
//Head Accessories
|
||||
var/headacc = GetUIValueRange(DNA_UI_HACC_STYLE,head_accessory_styles_list.len)
|
||||
if((headacc > 0) && (headacc <= head_accessory_styles_list.len))
|
||||
@@ -256,10 +267,18 @@
|
||||
SetUIValueRange(DNA_UI_HAIR_G, H.g_hair, 255, 1)
|
||||
SetUIValueRange(DNA_UI_HAIR_B, H.b_hair, 255, 1)
|
||||
|
||||
SetUIValueRange(DNA_UI_HAIR2_R, H.r_hair_sec, 255, 1)
|
||||
SetUIValueRange(DNA_UI_HAIR2_G, H.g_hair_sec, 255, 1)
|
||||
SetUIValueRange(DNA_UI_HAIR2_B, H.b_hair_sec, 255, 1)
|
||||
|
||||
SetUIValueRange(DNA_UI_BEARD_R, H.r_facial, 255, 1)
|
||||
SetUIValueRange(DNA_UI_BEARD_G, H.g_facial, 255, 1)
|
||||
SetUIValueRange(DNA_UI_BEARD_B, H.b_facial, 255, 1)
|
||||
|
||||
SetUIValueRange(DNA_UI_BEARD2_R, H.r_facial_sec, 255, 1)
|
||||
SetUIValueRange(DNA_UI_BEARD2_G, H.g_facial_sec, 255, 1)
|
||||
SetUIValueRange(DNA_UI_BEARD2_B, H.b_facial_sec, 255, 1)
|
||||
|
||||
SetUIValueRange(DNA_UI_HACC_R, H.r_headacc, 255, 1)
|
||||
SetUIValueRange(DNA_UI_HACC_G, H.g_headacc, 255, 1)
|
||||
SetUIValueRange(DNA_UI_HACC_B, H.b_headacc, 255, 1)
|
||||
|
||||
@@ -180,7 +180,7 @@
|
||||
C.adjustFireLoss(10)
|
||||
C.ExtinguishMob()
|
||||
|
||||
C.visible_message("\red [user] sprays a cloud of fine ice crystals, engulfing [C]!")
|
||||
C.visible_message("<span class='warning'>[user] sprays a cloud of fine ice crystals, engulfing [C]!</span>")
|
||||
log_admin("[key_name(user)] has used cryokinesis on [key_name(C)] without internals or a suit")
|
||||
msg_admin_attack("[key_name_admin(user)] has cast cryokinesis on [key_name_admin(C)]")
|
||||
|
||||
@@ -263,11 +263,11 @@
|
||||
/obj/effect/proc_holder/spell/targeted/eat/proc/doHeal(var/mob/user)
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
for(var/name in H.organs_by_name)
|
||||
for(var/name in H.bodyparts_by_name)
|
||||
var/obj/item/organ/external/affecting = null
|
||||
if(!H.organs[name])
|
||||
if(!H.bodyparts_by_name[name])
|
||||
continue
|
||||
affecting = H.organs[name]
|
||||
affecting = H.bodyparts_by_name[name]
|
||||
if(!istype(affecting, /obj/item/organ/external))
|
||||
continue
|
||||
affecting.heal_damage(4, 0)
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
if(player.current) // Remove mindshield-implanted mobs from the list
|
||||
if(ishuman(player.current))
|
||||
var/mob/living/carbon/human/H = player.current
|
||||
for(var/obj/item/weapon/implant/loyalty/I in H.contents)
|
||||
for(var/obj/item/weapon/implant/mindshield/I in H.contents)
|
||||
if(I && I.implanted)
|
||||
possible_traitors -= player
|
||||
|
||||
@@ -141,7 +141,7 @@
|
||||
set_antag_hud(newtraitor, "hudsyndicate")
|
||||
|
||||
var/obj_count = 1
|
||||
to_chat(newtraitor, "\blue Your current objectives:")
|
||||
to_chat(newtraitor, "<span class='notice'>Your current objectives:</span>")
|
||||
for(var/datum/objective/objective in newtraitor.mind.objectives)
|
||||
to_chat(newtraitor, "<B>Objective #[obj_count]</B>: [objective.explanation_text]")
|
||||
obj_count++
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
to_chat(aiPlayer, "Laws Updated: [law]")
|
||||
|
||||
print_command_report(intercepttext, interceptname)
|
||||
event_announcement.Announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/AI/commandreport.ogg')
|
||||
event_announcement.Announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/AI/commandreport.ogg', from = "[command_name()] Update")
|
||||
|
||||
/datum/station_state
|
||||
var/floor = 0
|
||||
|
||||
@@ -44,8 +44,7 @@
|
||||
/mob/camera/blob/Destroy()
|
||||
if(ghostimage)
|
||||
ghost_darkness_images -= ghostimage
|
||||
qdel(ghostimage)
|
||||
ghostimage = null;
|
||||
QDEL_NULL(ghostimage)
|
||||
updateallghostimages()
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -143,6 +143,9 @@
|
||||
..()
|
||||
L.blob_act()
|
||||
|
||||
/obj/structure/blob/tesla_act(power)
|
||||
..()
|
||||
take_damage(power/400, BURN)
|
||||
|
||||
/obj/structure/blob/attackby(var/obj/item/weapon/W, var/mob/living/user, params)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
|
||||
@@ -35,29 +35,29 @@
|
||||
H.species.create_organs(H)
|
||||
// Now that recreating all organs is necessary, the rest of this organ stuff probably
|
||||
// isn't, but I don't want to remove it, just in case.
|
||||
for(var/organ_name in H.organs_by_name)
|
||||
var/obj/item/organ/external/O = H.organs_by_name[organ_name]
|
||||
if(!O) continue
|
||||
for(var/organ_name in H.bodyparts_by_name)
|
||||
var/obj/item/organ/external/O = H.bodyparts_by_name[organ_name]
|
||||
if(!O)
|
||||
continue
|
||||
for(var/obj/item/weapon/shard/shrapnel/s in O.implants)
|
||||
if(istype(s))
|
||||
O.implants -= s
|
||||
H.contents -= s
|
||||
qdel(s)
|
||||
O.implants -= s
|
||||
H.contents -= s
|
||||
qdel(s)
|
||||
O.brute_dam = 0
|
||||
O.burn_dam = 0
|
||||
O.damage_state = "00"
|
||||
O.germ_level = 0
|
||||
O.hidden = null
|
||||
QDEL_NULL(O.hidden)
|
||||
O.number_wounds = 0
|
||||
O.open = 0
|
||||
O.perma_injury = 0
|
||||
O.status = 0
|
||||
O.trace_chemicals = list()
|
||||
O.wounds = list()
|
||||
O.trace_chemicals.Cut()
|
||||
QDEL_LIST(O.wounds)
|
||||
O.wound_update_accuracy = 1
|
||||
for(var/obj/item/organ/internal/IO in H.internal_organs)
|
||||
IO.damage = 0
|
||||
IO.trace_chemicals = list()
|
||||
IO.trace_chemicals.Cut()
|
||||
H.updatehealth()
|
||||
|
||||
to_chat(user, "<span class='notice'>We have regenerated.</span>")
|
||||
|
||||
@@ -19,7 +19,7 @@ var/global/list/all_cults = list()
|
||||
return 0
|
||||
if(ishuman(mind.current))
|
||||
var/mob/living/carbon/human/H = mind.current
|
||||
if(isloyal(H))
|
||||
if(ismindshielded(H))
|
||||
return 0
|
||||
if(issilicon(mind.current))
|
||||
return 0 //can't convert machines, that's ratvar's thing
|
||||
@@ -170,6 +170,7 @@ var/global/list/all_cults = list()
|
||||
/datum/game_mode/proc/add_cultist(datum/mind/cult_mind) //BASE
|
||||
if(!istype(cult_mind))
|
||||
return 0
|
||||
var/datum/game_mode/cult/cult_mode = ticker.mode
|
||||
if(!(cult_mind in cult) && is_convertable_to_cult(cult_mind))
|
||||
cult += cult_mind
|
||||
cult_mind.current.faction |= "cult"
|
||||
@@ -179,18 +180,11 @@ var/global/list/all_cults = list()
|
||||
if(jobban_isbanned(cult_mind.current, ROLE_CULTIST) || jobban_isbanned(cult_mind.current, ROLE_SYNDICATE))
|
||||
replace_jobbanned_player(cult_mind.current, ROLE_CULTIST)
|
||||
update_cult_icons_added(cult_mind)
|
||||
cult_mode.memorize_cult_objectives(cult_mind)
|
||||
if(GAMEMODE_IS_CULT)
|
||||
var/datum/game_mode/cult/cult_mode = ticker.mode
|
||||
cult_mode.check_numbers()
|
||||
return 1
|
||||
|
||||
|
||||
/datum/game_mode/cult/add_cultist(datum/mind/cult_mind) //INHERIT
|
||||
if(!..(cult_mind))
|
||||
return
|
||||
memorize_cult_objectives(cult_mind)
|
||||
|
||||
|
||||
/datum/game_mode/proc/remove_cultist(datum/mind/cult_mind, show_message = 1)
|
||||
if(cult_mind in cult)
|
||||
cult -= cult_mind
|
||||
|
||||
@@ -173,8 +173,8 @@
|
||||
/obj/item/clothing/suit/hooded/cultrobes/berserker
|
||||
name = "flagellant's robes"
|
||||
desc = "Blood-soaked robes infused with dark magic; allows the user to move at inhuman speeds, but at the cost of increased damage."
|
||||
icon_state = "hardsuit-beserker"
|
||||
item_state = "hardsuit-beserker"
|
||||
icon_state = "hardsuit-berserker"
|
||||
item_state = "hardsuit-berserker"
|
||||
flags_inv = HIDEJUMPSUIT
|
||||
allowed = list(/obj/item/weapon/tome,/obj/item/weapon/melee/cultblade)
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
if("convert")
|
||||
explanation = "We must increase our influence before we can summon [ticker.mode.cultdat.entity_name], Convert [convert_target] crew members. Take it slowly to avoid raising suspicions."
|
||||
if("bloodspill")
|
||||
spilltarget = 100 + rand(0,player_list.len * 3)
|
||||
spilltarget = 70 + rand(0,player_list.len * 3)
|
||||
explanation = "We must prepare this place for [ticker.mode.cultdat.entity_title1]'s coming. Spill blood and gibs over [spilltarget] floor tiles."
|
||||
if("sacrifice")
|
||||
explanation = "We need to sacrifice [sacrifice_target.name], the [sacrifice_target.assigned_role], for his blood is the key that will lead our master to this realm. You will need 3 cultists around a Sacrifice rune to perform the ritual."
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
else
|
||||
usr.whisper(pick("Hakkrutju gopoenjim.", "Nherasai pivroiashan.", "Firjji prhiv mazenhor.", "Tanah eh wakantahe.", "Obliyae na oraie.", "Miyf hon vnor'c.", "Wakabai hij fen juswix."))
|
||||
for (var/mob/V in viewers(src))
|
||||
V.show_message("\red The markings pulse with a small burst of light, then fall dark.", 3, "\red You hear a faint fizzle.", 2)
|
||||
V.show_message("<span class='warning'>The markings pulse with a small burst of light, then fall dark.</span>", 3, "<span class='warning'>You hear a faint fizzle.</span>", 2)
|
||||
return
|
||||
|
||||
/obj/effect/rune/proc/check_icon()
|
||||
@@ -102,7 +102,7 @@
|
||||
If any are found, the user can choose which rune to send to. Upon activation, the rune teleports everything above it to the selected rune.<br><br>"
|
||||
|
||||
text += "<font color='red'><b>Rite of Enlightenment</b></font><br>This rune is critical to the success of the cult. It will allow you to convert normal crew members into cultists. \
|
||||
To do this, simply place the crew member upon the rune and invoke it. This rune requires two invokers to use. If the target to be converted is loyalty-implanted or a certain assignment, they will \
|
||||
To do this, simply place the crew member upon the rune and invoke it. This rune requires two invokers to use. If the target to be converted is mindshielded or a certain assignment, they will \
|
||||
be unable to be converted. People [ticker.mode.cultdat.entity_title3] wishes sacrificed will also be ineligible for conversion, and anyone with a shielding presence like the null rod will not be converted.<br> \
|
||||
Successful conversions will produce a tome for the new cultist.<br><br>"
|
||||
|
||||
@@ -145,7 +145,7 @@
|
||||
|
||||
text += "<font color='red'><b>Talisman of Teleportation</b></font><br>The talisman form of the Teleport rune will transport the invoker to a selected Teleport rune once.<br><br>"
|
||||
|
||||
text += "<font color='red'><b>Talisman of Fabrication</b></font><br>This talisman is the main way of creating construct shells. To use it, one must strike 30 sheets of metal with the talisman. The sheets will then be twisted into a construct shell, ready to recieve a soul to occupy it.<br><br>"
|
||||
text += "<font color='red'><b>Talisman of Fabrication</b></font><br>This talisman is the main way of creating construct shells. To use it, one must strike 30 sheets of metal with the talisman. The sheets will then be twisted into a construct shell, ready to receive a soul to occupy it.<br><br>"
|
||||
|
||||
text += "<font color='red'><b>Talisman of Tome Summoning</b></font><br>This talisman will produce a single tome at your feet.<br><br>"
|
||||
|
||||
@@ -159,9 +159,9 @@
|
||||
Robotic lifeforms will suffer the effects of a heavy electromagnetic pulse instead.<br><br>"
|
||||
|
||||
text += "<font color='red'><b>Talisman of Armaments</b></font><br>The Talisman of Arming will equip the user with armored robes, a backpack, shoes, an eldritch longsword, and an empowered bola. Any equipment that cannot \
|
||||
be equipped will not be summoned, weaponary will be put on the floor below the user. Attacking a fellow cultist with it will instead equip them.<br><br>"
|
||||
be equipped will not be summoned, weaponry will be put on the floor below the user. Attacking a fellow cultist with it will instead equip them.<br><br>"
|
||||
|
||||
text += "<font color='red'><b>Talisman of Horrors</b></font><br>The Talisman of Horror must be applied directly to the victim, it will shatter your victim's mind with visions of the endtimes that may incapitate them.<br><br>"
|
||||
text += "<font color='red'><b>Talisman of Horrors</b></font><br>The Talisman of Horror must be applied directly to the victim, it will shatter your victim's mind with visions of the end-times that may incapacitate them.<br><br>"
|
||||
|
||||
text += "<font color='red'><b>Talisman of Shackling</b></font><br>The Talisman of Shackling must be applied directly to the victim, it has 4 uses and cuffs victims with magic shackles that disappear when removed.<br><br>"
|
||||
|
||||
@@ -169,7 +169,7 @@
|
||||
|
||||
text += "<font color='red'><b>Equipment:</b></font><br><br>"
|
||||
|
||||
text += "<font color='red'><b>Cult Blade</b></font><br>Cult blades are sharp weapons that, notably, cannot be used by noncultists. These blades are produced by the Talisman of Arming.<br><br>"
|
||||
text += "<font color='red'><b>Cult Blade</b></font><br>Cult blades are sharp weapons that, notably, cannot be used by non-cultists. These blades are produced by the Talisman of Arming.<br><br>"
|
||||
|
||||
text += "<font color='red'><b>Cult Bola</b></font><br>Cult bolas are strong bolas, useful for snaring targets. These bolas are produced by the Talisman of Arming.<br><br>"
|
||||
|
||||
@@ -216,14 +216,14 @@
|
||||
if(!((CULT_ELDERGOD in cult_mode.objectives) || (CULT_SLAUGHTER in cult_mode.objectives)))
|
||||
to_chat(user, "<span class='warning'>[cult_mode.cultdat.entity_name]'s power does not wish to be unleashed!</span>")
|
||||
return 0
|
||||
var/confirm_final = alert(user, "This is the FINAL step to summon your dietys power, it is a long, painful ritual and the crew will be alerted to your presence", "Are you prepared for the final battle?", "My life for [cult_mode.cultdat.entity_name]!", "No")
|
||||
var/confirm_final = alert(user, "This is the FINAL step to summon your deities power, it is a long, painful ritual and the crew will be alerted to your presence", "Are you prepared for the final battle?", "My life for [cult_mode.cultdat.entity_name]!", "No")
|
||||
if(confirm_final == "No" || confirm_final == null)
|
||||
to_chat(user, "<span class='cult'>You decide to prepare further before scribing the rune.</span>")
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
else//the game mode is not cult..but we ARE a cultist...ALL ON THE ADMINBUS
|
||||
var/confirm_final = alert(user, "This is the FINAL step to summon your dietys power, it is a long, painful ritual and the crew will be alerted to your presence", "Are you prepared for the final battle?", "My life for [cult_mode.cultdat.entity_name]!", "No")
|
||||
var/confirm_final = alert(user, "This is the FINAL step to summon your deities power, it is a long, painful ritual and the crew will be alerted to your presence", "Are you prepared for the final battle?", "My life for [cult_mode.cultdat.entity_name]!", "No")
|
||||
if(confirm_final == "No" || confirm_final == null)
|
||||
to_chat(user, "<span class='cult'>You decide to prepare further before scribing the rune.</span>")
|
||||
return 0
|
||||
@@ -269,7 +269,7 @@
|
||||
return
|
||||
if(ispath(rune_to_scribe, /obj/effect/rune/narsie) || ispath(rune_to_scribe, /obj/effect/rune/slaughter))//may need to change this - Fethas
|
||||
if(finale_runes_ok(user,rune_to_scribe))
|
||||
command_announcement.Announce("Figments from an eldritch god are being summoned somwhere on the station from an unknown dimension. Disrupt the ritual at all costs!","Central Command Higher Dimensionsal Affairs", 'sound/AI/spanomalies.ogg')
|
||||
command_announcement.Announce("Figments from an eldritch god are being summoned somwhere on the station from an unknown dimension. Disrupt the ritual at all costs!","Central Command Higher Dimensional Affairs", 'sound/AI/spanomalies.ogg')
|
||||
for(var/B in spiral_range_turfs(1, user, 1))
|
||||
var/turf/T = B
|
||||
var/obj/machinery/shield/N = new(T)
|
||||
|
||||
@@ -323,7 +323,7 @@ var/list/teleport_runes = list()
|
||||
//Rite of Enlightenment: Converts a normal crewmember to the cult. Faster for every cultist nearby.
|
||||
/obj/effect/rune/convert
|
||||
cultist_name = "Rite of Enlightenment"
|
||||
cultist_desc = "converts a normal crewmember on top of it to the cult. Does not work on loyalty-implanted crew."
|
||||
cultist_desc = "converts a normal crewmember on top of it to the cult. Does not work on mindshielded crew."
|
||||
invocation = "Mah'weyh pleggh at e'ntrath!"
|
||||
icon_state = "3"
|
||||
req_cultists = 2
|
||||
@@ -336,7 +336,7 @@ var/list/teleport_runes = list()
|
||||
var/turf/T = get_turf(src)
|
||||
|
||||
for(var/mob/living/M in T.contents)
|
||||
if(!iscultist(M) && !isloyal(M))
|
||||
if(!iscultist(M) && !ismindshielded(M) && ishuman(M))
|
||||
convertees.Add(M)
|
||||
if(!convertees.len)
|
||||
fail_invoke()
|
||||
@@ -415,6 +415,7 @@ var/list/teleport_runes = list()
|
||||
|
||||
/obj/effect/rune/sacrifice/proc/sac(var/list/invokers, mob/living/T)
|
||||
var/sacrifice_fulfilled
|
||||
var/datum/game_mode/cult/cult_mode = ticker.mode
|
||||
if(T)
|
||||
if(istype(T, /mob/living/simple_animal/pet/corgi))
|
||||
for(var/M in invokers)
|
||||
@@ -428,11 +429,12 @@ var/list/teleport_runes = list()
|
||||
sacrifice_fulfilled = 1
|
||||
new /obj/effect/overlay/temp/cult/sac(loc)
|
||||
if(ticker && ticker.mode && ticker.mode.name == "cult")
|
||||
var/datum/game_mode/cult/cult_mode = ticker.mode
|
||||
|
||||
cult_mode.harvested++
|
||||
for(var/M in invokers)
|
||||
if(sacrifice_fulfilled)
|
||||
to_chat(M, "<span class='cultlarge'>\"Yes! This is the one I desire! You have done well.\"</span>")
|
||||
cult_mode.additional_phase()
|
||||
else
|
||||
if(ishuman(T) || isrobot(T))
|
||||
to_chat(M, "<span class='cultlarge'>\"I accept this sacrifice.\"</span>")
|
||||
@@ -534,7 +536,7 @@ var/list/teleport_runes = list()
|
||||
|
||||
/obj/effect/rune/slaughter
|
||||
cultist_name = "Call Forth The Slaughter (Demons)"
|
||||
cultist_desc = "Calls forth the doom of a eldrtich being. Three slaughter demons will appear to wreak havoc on the station."
|
||||
cultist_desc = "Calls forth the doom of an eldritch being. Three slaughter demons will appear to wreak havoc on the station."
|
||||
invocation = null
|
||||
req_cultists = 9
|
||||
color = rgb(125,23,23)
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
dat += "<A href='?src=[UID()];rune=emp'>Ta'gh fara'qha fel d'amar det!</A> - Allows you to destroy technology in a short range.<BR>"
|
||||
dat += "<A href='?src=[UID()];rune=runestun'>Fuu ma'jin!</A> - Allows you to stun a person by attacking them with the talisman.<BR>"
|
||||
dat += "<A href='?src=[UID()];rune=veiling'>Kla'atu barada nikt'o!</A> - Two use talisman, first use makes all nearby runes invisible, second use reveals nearby hidden runes.<BR>"
|
||||
dat += "<A href='?src=[UID()];rune=soulstone'>Kal'om neth!</A> - Summons a soul stone, used to capure the spirits of dead or dying humans.<BR>"
|
||||
dat += "<A href='?src=[UID()];rune=soulstone'>Kal'om neth!</A> - Summons a soul stone, used to capture the spirits of dead or dying humans.<BR>"
|
||||
dat += "<A href='?src=[UID()];rune=construct'>Daa'ig osk!</A> - Summons a construct shell for use with soulstone-captured souls. It is too large to carry on your person.<BR>"
|
||||
var/datum/browser/popup = new(user, "talisman", "", 400, 400)
|
||||
popup.set_content(jointext(dat, ""))
|
||||
@@ -300,7 +300,7 @@
|
||||
|
||||
/obj/item/weapon/paper/talisman/horror/attack(mob/living/target, mob/living/user)
|
||||
if(iscultist(user))
|
||||
to_chat(user, "<span class='cultitalic'>You disturb [target] with visons of the end!</span>")
|
||||
to_chat(user, "<span class='cultitalic'>You disturb [target] with visions of the end!</span>")
|
||||
if(iscarbon(target))
|
||||
var/mob/living/carbon/H = target
|
||||
H.AdjustHallucinate(30)
|
||||
|
||||
@@ -37,8 +37,9 @@
|
||||
var/const/waittime_h = 1800 //upper bound on time before intercept arrives (in tenths of seconds)
|
||||
var/list/player_draft_log = list()
|
||||
var/list/datum/mind/xenos = list()
|
||||
|
||||
|
||||
var/list/datum/station_goal/station_goals = list() // A list of all station goals for this game mode
|
||||
var/list/chumps = list()
|
||||
|
||||
/datum/game_mode/proc/announce() //to be calles when round starts
|
||||
to_chat(world, "<B>Notice</B>: [src] did not define announce()")
|
||||
@@ -71,6 +72,8 @@
|
||||
///post_setup()
|
||||
///Everyone should now be on the station and have their normal gear. This is the place to give the special roles extra things
|
||||
/datum/game_mode/proc/post_setup()
|
||||
setup_chumps()
|
||||
|
||||
spawn (ROUNDSTART_LOGOUT_REPORT_TIME)
|
||||
display_roundstart_logout_report()
|
||||
|
||||
@@ -85,6 +88,40 @@
|
||||
start_state.count()
|
||||
return 1
|
||||
|
||||
//setup_chumps()
|
||||
//Prepares fake potential collaborators to cut down on metagaming the round type as being a traitor subtype. Overriden in traitor game modes since they have real collaborators
|
||||
/datum/game_mode/proc/setup_chumps()
|
||||
var/max_chumps = 1
|
||||
if(config.traitor_scaling)
|
||||
max_chumps = max(1, round((num_players())/(5)))
|
||||
else
|
||||
max_chumps = max(1, min(num_players(), 5))
|
||||
var/tries_left = 5 //limits the number of tries so we don't get stuck looping indefinitely. resets on successfully finding a new chump
|
||||
while(chumps.len < max_chumps)
|
||||
if(!tries_left) //ran out of unique chumps (or just bad luck with the pick() in get_nt_opposed()) so there may end up being fewer chumps in some rounds.
|
||||
break
|
||||
var/mob/living/carbon/human/chump = get_nt_opposed()
|
||||
if(isnull(chump)) //no possible chumps so just end it here.
|
||||
break
|
||||
if(chump in chumps)
|
||||
tries_left-- //this chump already was picked, try again!
|
||||
else
|
||||
chumps += chump
|
||||
tries_left = 5 //reset our tries since we found a new chump
|
||||
//make sure we have chumps before we try misinforming them. if we don't make a note of it.
|
||||
if(!chumps.len)
|
||||
message_admins("<span class='notice'>Game mode failed to find ANY chumps. Possible causes: no one is opposed/skeptical, or FalseIncarnate can't code.</span>")
|
||||
log_admin("Game mode failed to find ANY chumps. Possible causes: no one is opposed/skeptical, or FalseIncarnate can't code.")
|
||||
return 0
|
||||
//we've got chumps! misinform them!
|
||||
for(var/mob/living/carbon/human/chump in chumps)
|
||||
if(prob(33))
|
||||
spawn(rand(3000, 18000)) //5-30 minute delay to throw off would-be autotraitor metagamers
|
||||
inform_collab(chump)
|
||||
else
|
||||
spawn(rand(10, 100)) //same delay as if the mode were traitor
|
||||
inform_collab(chump)
|
||||
return 1
|
||||
|
||||
///process()
|
||||
///Called by the gameticker
|
||||
@@ -225,7 +262,7 @@
|
||||
|
||||
/datum/game_mode/proc/check_win() //universal trigger to be called at mob death, nuke explosion, etc. To be called from everywhere.
|
||||
return 0
|
||||
|
||||
|
||||
/datum/game_mode/proc/get_players_for_role(var/role, override_jobbans=0)
|
||||
var/list/players = list()
|
||||
var/list/candidates = list()
|
||||
@@ -400,15 +437,20 @@ proc/display_roundstart_logout_report()
|
||||
to_chat(M, msg)
|
||||
|
||||
|
||||
proc/get_nt_opposed()
|
||||
/proc/get_nt_opposed()
|
||||
var/list/dudes = list()
|
||||
for(var/mob/living/carbon/human/man in player_list)
|
||||
if(man.client)
|
||||
//don't try picking someone like the captain or a security officer for potential collaborators, even if they ARE opposed to Nanotrasen for some reason
|
||||
if(man.mind && man.mind.assigned_role)
|
||||
if((man.mind.assigned_role in ticker.mode.protected_jobs) || (man.mind.assigned_role in ticker.mode.restricted_jobs))
|
||||
continue
|
||||
if(man.client.prefs.nanotrasen_relation == "Opposed")
|
||||
dudes += man
|
||||
else if(man.client.prefs.nanotrasen_relation == "Skeptical" && prob(50))
|
||||
dudes += man
|
||||
if(dudes.len == 0) return null
|
||||
if(dudes.len == 0)
|
||||
return null
|
||||
return pick(dudes)
|
||||
|
||||
//Announces objectives/generic antag text.
|
||||
@@ -425,7 +467,7 @@ proc/get_nt_opposed()
|
||||
if(!player || !player.current) return
|
||||
|
||||
var/obj_count = 1
|
||||
to_chat(player.current, "\blue Your current objectives:")
|
||||
to_chat(player.current, "<span class='notice'>Your current objectives:</span>")
|
||||
for(var/datum/objective/objective in player.objectives)
|
||||
to_chat(player.current, "<B>Objective #[obj_count]</B>: [objective.explanation_text]")
|
||||
obj_count++
|
||||
@@ -491,10 +533,10 @@ proc/get_nt_opposed()
|
||||
var/datum/station_goal/picked = pick_n_take(possible)
|
||||
goal_weights += initial(picked.weight)
|
||||
station_goals += new picked
|
||||
|
||||
if(station_goals.len)
|
||||
|
||||
if(station_goals.len)
|
||||
send_station_goals_message()
|
||||
|
||||
|
||||
/datum/game_mode/proc/send_station_goals_message()
|
||||
var/message_text = "<div style='text-align:center;'><img src='ntlogo.png'>"
|
||||
message_text += "<h3>[command_name()] Orders</h3></div><hr>"
|
||||
@@ -504,10 +546,34 @@ proc/get_nt_opposed()
|
||||
G.on_report()
|
||||
message_text += G.get_report()
|
||||
message_text += "<hr>"
|
||||
|
||||
|
||||
print_command_report(message_text, "[command_name()] Orders")
|
||||
|
||||
/datum/game_mode/proc/declare_station_goal_completion()
|
||||
for(var/V in station_goals)
|
||||
var/datum/station_goal/G = V
|
||||
G.print_result()
|
||||
G.print_result()
|
||||
|
||||
|
||||
/datum/game_mode/proc/inform_collab(mob/living/carbon/human/M)
|
||||
if(!M)
|
||||
return
|
||||
//Mad-libs for their message
|
||||
var/adjective = pick("strange", "mysterious", "sinister", "un-assuming", "unexpected")
|
||||
var/action_words = pick("aid the fight against Nanotrasen", "repay a debt", "partake in some mischief", "help overthrow the system", "stick it to the man")
|
||||
var/organization = pick("Anti-Fascist Movement", "Syndicate", "Spessmen for the Protesting of Nanotrasen", "Greytider's Union", "Illuminati (in space)")
|
||||
//Stuff to give them a single set of code-words
|
||||
var/list/possible_words = splittext(syndicate_code_phrase, ", ")
|
||||
var/list/possible_reply = splittext(syndicate_code_response, ", ")
|
||||
var/index = rand(1, possible_words.len)
|
||||
var/my_word = possible_words[index]
|
||||
var/my_reply
|
||||
if(possible_reply.len < index) //just in case we had a longer code word list than the response list
|
||||
my_reply = pick(possible_reply)
|
||||
else
|
||||
my_reply = possible_reply[index]
|
||||
|
||||
to_chat(M, "You suddenly remember \an [adjective] note you received earlier informing you that a chance to [action_words] may present itself today. An agent of the [organization] may contact you for help.")
|
||||
to_chat(M, "The note had the words \"[my_word]\" and \"[my_reply]\" written at the bottom, which you memorized just in case.")
|
||||
to_chat(M, "<span class='warning'>You are NOT an antagonist, so self-antagging rules still apply to you. Use your good judgement and ahelp if you are unsure of what you are allowed to do.</span>")
|
||||
M.mind.store_memory("<b>Important Words</b>: \"[my_word]\", \"[my_reply]\"")
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user