fixes merge conflict

This commit is contained in:
Kyep
2017-04-21 00:40:38 -07:00
408 changed files with 3018 additions and 2352 deletions
+7
View File
@@ -7,8 +7,14 @@ git:
env:
global:
<<<<<<< HEAD
- BYOND_MAJOR="511"
- BYOND_MINOR="1379"
=======
- BYOND_MAJOR="510"
- BYOND_MINOR="1346"
- BYOND_MACRO_COUNT=2
>>>>>>> ParadiseSS13/master
matrix:
- DM_MAPFILE="cyberiad"
- DM_MAPFILE="metastation"
@@ -29,6 +35,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
@@ -871,7 +871,7 @@
"aqM" = (/obj/structure/table,/obj/item/weapon/storage/box/evidence,/obj/item/weapon/storage/box/evidence,/obj/item/weapon/storage/box/evidence,/obj/item/weapon/hand_labeler,/turf/simulated/floor/plasteel{tag = "icon-vault (SOUTHEAST)"; icon_state = "vault"; dir = 6},/area/security/warden)
"aqN" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/security/warden)
"aqO" = (/obj/structure/filingcabinet/security{pixel_x = 4},/obj/machinery/firealarm{dir = 4; pixel_x = 28},/turf/simulated/floor/plasteel{tag = "icon-vault (SOUTHWEST)"; icon_state = "vault"; dir = 10},/area/security/warden)
"aqP" = (/obj/structure/rack,/obj/item/weapon/storage/box/chemimp{pixel_x = 4; pixel_y = 3},/obj/item/weapon/storage/box/trackimp,/obj/item/weapon/storage/lockbox/loyalty,/obj/item/weapon/reagent_containers/glass/bottle/morphine,/obj/machinery/light/small,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/security/warden)
"aqP" = (/obj/structure/rack,/obj/item/weapon/storage/box/chemimp{pixel_x = 4; pixel_y = 3},/obj/item/weapon/storage/box/trackimp,/obj/item/weapon/storage/lockbox/mindshield,/obj/item/weapon/reagent_containers/glass/bottle/morphine,/obj/machinery/light/small,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/security/warden)
"aqQ" = (/obj/structure/rack,/obj/item/weapon/storage/box/handcuffs,/obj/item/weapon/storage/box/flashbangs{pixel_x = -2; pixel_y = -2},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/security/warden)
"aqR" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/security/warden)
"aqS" = (/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/pod_3)
+2 -2
View File
@@ -777,7 +777,7 @@
"aoW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/flasher/portable,/obj/effect/decal/warning_stripes/red/hollow,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury)
"aoX" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/security/armoury)
"aoY" = (/obj/structure/rack,/obj/item/weapon/storage/box/seccarts{pixel_x = 3; pixel_y = 2},/obj/item/weapon/storage/box/handcuffs,/obj/item/weapon/storage/box/flashbangs{pixel_x = -2; pixel_y = -2},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/storage/box/handcuffs,/obj/effect/decal/warning_stripes/red/hollow,/obj/item/weapon/storage/box/teargas{pixel_x = -3; pixel_y = -3},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury)
"aoZ" = (/obj/structure/rack,/obj/item/weapon/storage/box/chemimp{pixel_x = 4; pixel_y = 3},/obj/item/weapon/storage/box/trackimp,/obj/effect/decal/warning_stripes/red/hollow,/obj/item/weapon/storage/lockbox/loyalty,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury)
"aoZ" = (/obj/structure/rack,/obj/item/weapon/storage/box/chemimp{pixel_x = 4; pixel_y = 3},/obj/item/weapon/storage/box/trackimp,/obj/effect/decal/warning_stripes/red/hollow,/obj/item/weapon/storage/lockbox/mindshield,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury)
"apa" = (/obj/structure/table,/obj/effect/decal/warning_stripes/red/hollow,/obj/item/weapon/storage/toolbox/mechanical,/obj/item/device/lock_buster,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury)
"apb" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating,/area/security/armoury)
"apc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/light{dir = 8},/obj/structure/closet/secure_closet/security,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/seceqstorage)
@@ -6010,7 +6010,7 @@
"clD" = (/obj/machinery/optable,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration)
"clE" = (/obj/machinery/vending/medical,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration)
"clF" = (/obj/machinery/light,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration)
"clG" = (/obj/structure/table,/obj/item/weapon/storage/lockbox/loyalty,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration)
"clG" = (/obj/structure/table,/obj/item/weapon/storage/lockbox/mindshield,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration)
"clH" = (/obj/structure/table,/obj/item/weapon/storage/box/chemimp{pixel_x = 4; pixel_y = 3},/obj/item/weapon/storage/box/trackimp,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration)
"clI" = (/obj/item/weapon/ore/silver,/obj/item/weapon/ore/silver,/obj/structure/closet/crate,/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/quartermaster/miningdock)
"clJ" = (/obj/machinery/camera{c_tag = "Mining Dock External"; dir = 8},/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel{icon_state = "warning"},/area/quartermaster/miningdock)
+2 -2
View File
@@ -253,6 +253,7 @@
"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)
"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)
@@ -485,7 +486,6 @@
"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)
"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)
@@ -1621,7 +1621,7 @@ aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNbWbWbWbWbWbWbWbWbWbW
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDNDZDKDKDKDKDKEdDADTDKDUDKDVDWDXDYDADvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEfEgDKEaEbEcDKEiDADKDKDKDKDKDKDKEeDIaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNiQDAiRDKDKDKDKDKjfDAEjDKEkDKElDWDXDYEfaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDAjGEhDKDKDKEhjHDADKDKDKDKDKDKDKEmDADvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDAjGEhDKDKDKEheVDADKDKDKDKDKDKDKEmDADvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDuaNDADwDwDMEoDMDwDwDwDwDwDMEpDMDwDwDwEnaNDtDwEqErErEsDwDuaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDADwDwEtDKDKDKDKDKDKDKDKDKDKDKDKEuDAEnaNDvDwEvEwExEyEwEzDwjIaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEBDKECDKDKDKDKDKDKDKDKDKDKDKDKDKDKDAaNaNaNEDEEEFEwEwEwEGEDaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+46
View File
@@ -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
"}
+46
View File
@@ -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
"}
+1 -1
View File
@@ -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
+3
View File
@@ -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))
+7
View File
@@ -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")
+3 -11
View File
@@ -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.)(.*)$")
+3 -1
View File
@@ -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 -1
View File
@@ -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()
+1 -1
View File
@@ -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)
+2
View File
@@ -160,6 +160,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)
+8 -8
View File
@@ -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,7 +647,7 @@
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
@@ -659,7 +659,7 @@
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
+2 -2
View File
@@ -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
*/
+1 -1
View File
@@ -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()
+13 -1
View File
@@ -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
+35 -35
View File
@@ -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,15 +657,15 @@
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)
var/obj/item/weapon/implant/mindshield/L = new/obj/item/weapon/implant/mindshield(H)
L.imp_in = H
L.implanted = 1
H.sec_hud_set_implants()
@@ -673,15 +673,15 @@
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 +689,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 +698,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 +713,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 +728,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 +758,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 +766,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 +775,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 +790,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 +825,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 +834,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 +848,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 +875,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 +904,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 +948,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 +971,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 +983,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 +1006,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 +1023,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 +1031,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 +1061,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)]")
@@ -1197,7 +1197,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 +1276,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)
+4 -4
View File
@@ -218,7 +218,7 @@
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)
var/obj/item/weapon/implant/L = new /obj/item/weapon/implant/mindshield(H)
L.imp_in = H
L.implanted = 1
H.sec_hud_set_implants()
@@ -250,7 +250,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,7 +329,7 @@
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)
var/obj/item/weapon/implant/L = new /obj/item/weapon/implant/mindshield(H)
L.imp_in = H
L.implanted = 1
H.sec_hud_set_implants()
@@ -755,7 +755,7 @@
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)
var/obj/item/weapon/implant/L = new /obj/item/weapon/implant/mindshield(H)
L.imp_in = H
L.implanted = 1
H.sec_hud_set_implants()
+12 -10
View File
@@ -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,11 +76,12 @@
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
+1 -1
View File
@@ -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
+34 -12
View File
@@ -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"))
+20 -17
View File
@@ -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
+2 -2
View File
@@ -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")
+2 -2
View File
@@ -376,9 +376,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"
+15
View File
@@ -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)
+16
View File
@@ -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
+5 -5
View File
@@ -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
+2 -2
View File
@@ -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)
+16
View File
@@ -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.
+4 -4
View File
@@ -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
View File
@@ -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.
+19
View File
@@ -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)
+1 -1
View File
@@ -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)]")
@@ -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++
+1 -1
View File
@@ -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
+2 -2
View File
@@ -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>"
+2 -2
View File
@@ -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))
convertees.Add(M)
if(!convertees.len)
fail_invoke()
+76 -10
View File
@@ -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]\"")
+5 -5
View File
@@ -178,10 +178,10 @@ var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind'
/datum/game_mode/proc/greet_vox(var/datum/mind/raider)
to_chat(raider.current, "<span class='boldnotice'>You are a Vox Raider, fresh from the Shoal!</span>")
to_chat(raider.current, "\blue The Vox are a race of cunning, sharp-eyed nomadic raiders and traders endemic to the frontier and much of the unexplored galaxy. You and the crew have come to the [station_name()] for plunder, trade or both.")
to_chat(raider.current, "\blue Vox are cowardly and will flee from larger groups, but corner one or find them en masse and they are vicious.")
to_chat(raider.current, "\blue Use :V to voxtalk, :H to talk on your encrypted channel, and don't forget to turn on your nitrogen internals!")
to_chat(raider.current, "\blue Choose to accomplish your objectives by either raiding the crew and taking what you need, or by attempting to trade with them.")
to_chat(raider.current, "<span class='notice'>The Vox are a race of cunning, sharp-eyed nomadic raiders and traders endemic to the frontier and much of the unexplored galaxy. You and the crew have come to the [station_name()] for plunder, trade or both.</span>")
to_chat(raider.current, "<span class='notice'>Vox are cowardly and will flee from larger groups, but corner one or find them en masse and they are vicious.</span>")
to_chat(raider.current, "<span class='notice'>Use :V to voxtalk, :H to talk on your encrypted channel, and don't forget to turn on your nitrogen internals!</span>")
to_chat(raider.current, "<span class='notice'>Choose to accomplish your objectives by either raiding the crew and taking what you need, or by attempting to trade with them.</span>")
spawn(25)
show_objectives(raider)
@@ -235,7 +235,7 @@ var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind'
else
win_msg += "<B>The Vox Raiders were repelled!</B>"
to_chat(world, "\red <FONT size = 3><B>[win_type] [win_group] victory!</B></FONT>")
to_chat(world, "<span class='warning'><FONT size = 3><B>[win_type] [win_group] victory!</B></FONT></span>")
to_chat(world, "[win_msg]")
feedback_set_details("round_end_result","heist - [win_type] [win_group]")
+10 -2
View File
@@ -109,8 +109,16 @@
/datum/intercept_text/proc/get_suspect()
var/list/dudes = list()
for(var/mob/living/carbon/human/man in player_list) if(man.client && man.client.prefs.nanotrasen_relation == "Opposed")
dudes += man
for(var/mob/living/carbon/human/man in player_list)
if(man.client && man.client.prefs.nanotrasen_relation == "Opposed")
//don't include suspects who can't possibly be the antag based on their job (no suspecting the captain of being a damned dirty tator)
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))
return
//don't include suspects who can't possibly be the antag based on their species (no suspecting the machines of being sneaky changelings)
if(man.get_species() in ticker.mode.protected_species)
return
dudes += man
for(var/i = 0, i < max(player_list.len/10,2), i++)
dudes += pick(player_list)
return pick(dudes)
@@ -252,7 +252,7 @@
V.flags |= NODROP
agent.equip_to_slot_or_del(V, slot_wear_suit)
agent.equip_to_slot_or_del(new /obj/item/weapon/abductor_baton(agent), slot_in_backpack)
agent.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/decloner/alien(agent), slot_in_backpack)
agent.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/alien(agent), slot_in_backpack)
agent.equip_to_slot_or_del(new /obj/item/device/abductor/silencer(agent), slot_in_backpack)
agent.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/abductor(agent), slot_head)
agent.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/military/abductor/full(agent), slot_belt)
@@ -376,9 +376,23 @@
explanation_text = "Steal all"
/datum/objective/abductee/steal/New()
var/target = pick(list("pets","lights","monkeys","fruits","shoes","bars of soap"))
var/target = pick(list("pets","lights","monkeys","fruits","shoes","bars of soap", "weapons", "computers", "organs"))
explanation_text+=" [target]."
/datum/objective/abductee/paint
explanation_text = "The station is hideous. You must color it all"
/datum/objective/abductee/paint/New()
var/color = pick(list("red", "blue", "green", "yellow", "orange", "purple", "black", "in rainbows", "in blood"))
explanation_text+= " [color]!"
/datum/objective/abductee/speech
explanation_text = "Your brain is broken... you can only communicate in"
/datum/objective/abductee/speech/New()
var/style = pick(list("pantomime", "rhyme", "haiku", "extended metaphors", "riddles", "extremely literal terms", "sound effects", "military jargon"))
explanation_text+= " [style]."
/datum/objective/abductee/capture
explanation_text = "Capture"
@@ -418,16 +432,16 @@
explanation_text = "Start a collection of corpses. Don't kill people to get these corpses."
/datum/objective/abductee/floors
explanation_text = "Replace all the floor tiles with carpeting, wooden boards, or grass."
explanation_text = "Replace all the floor tiles with wood, carpeting, grass or bling."
/datum/objective/abductee/POWERUNLIMITED
explanation_text = "Flood the station's powernet with as much electricity as you can."
/datum/objective/abductee/pristine
explanation_text = "Ensure the station is in absolutely pristine condition."
explanation_text = "The CEO of Nanotrasen is coming! Ensure the station is in absolutely pristine condition."
/datum/objective/abductee/window
explanation_text = "Replace all normal windows with reinforced windows."
/datum/objective/abductee/nowalls
explanation_text = "The crew must get to know one another better. Break down the walls inside the station!"
/datum/objective/abductee/nations
explanation_text = "Ensure your department prospers over all else."
@@ -435,17 +449,11 @@
/datum/objective/abductee/abductception
explanation_text = "You have been changed forever. Find the ones that did this to you and give them a taste of their own medicine."
/datum/objective/abductee/ghosts
explanation_text = "Conduct a seance with the spirits of the afterlife."
/datum/objective/abductee/summon
explanation_text = "Conduct a ritual to summon an elder god."
explanation_text = "The elder gods hunger. Gather a cult and conduct a ritual to summon one."
/datum/objective/abductee/machine
explanation_text = "You are secretly an android. Interface with as many machines as you can to boost your own power."
/datum/objective/abductee/prevent
explanation_text = "You have been enlightened. This knowledge must not escape. Ensure nobody else can become enlightened."
explanation_text = "You are secretly an android. Interface with as many machines as you can to boost your own power so the AI may acknowledge you at last."
/datum/objective/abductee/calling
explanation_text = "Call forth a spirit from the other side."
@@ -453,7 +461,7 @@
/datum/objective/abductee/calling/New()
var/mob/dead/D = pick(dead_mob_list)
if(D)
explanation_text = "You know that [D] has perished. Call them from the spirit realm."
explanation_text = "You know that [D] has perished. Hold a seance to call them from the spirit realm."
/datum/objective/abductee/social_experiment
explanation_text = "This is a secret social experiment conducted by Nanotrasen. Convince the crew that this is the truth."
@@ -465,7 +473,7 @@
explanation_text = "Nanotrasen is abusing the animals! Save as many as you can!"
/datum/objective/abductee/defect
explanation_text = "Defect from your employer."
explanation_text = "Fuck the system! Defect from the station and start an independent colony in space, Mining Outpost or the derelict. Recruit crewmates if you can."
/datum/objective/abductee/promote
explanation_text = "Climb the corporate ladder all the way to the top!"
@@ -478,3 +486,33 @@
/datum/objective/abductee/pragnant
explanation_text = "You are pregnant and soon due. Find a safe place to deliver your baby."
/datum/objective/abductee/engine
explanation_text = "Go have a good conversation with the singularity/tesla/supermatter crystal. Bonus points if it responds."
/datum/objective/abductee/music
explanation_text = "You burn with passion for music. Share your vision. If anyone hates it, beat them on the head with your instrument!"
/datum/objective/abductee/clown
explanation_text = "The clown is not funny. You can do better! Steal his audience and make the crew laugh!"
/datum/objective/abductee/party
explanation_text = "You're throwing a huge rager. Make it as awesome as possible so the whole crew comes... OR ELSE!"
/datum/objective/abductee/pets
explanation_text = "All the pets around here suck. You need to make them cooler. Replace them with exotic beasts!"
/datum/objective/abductee/conspiracy
explanation_text = "The leaders of this station are hiding a grand, evil conspiracy. Only you can learn what it is, and expose it to the people!"
/datum/objective/abductee/stalker
explanation_text = "The Syndicate has hired you to compile dossiers on all important members of the crew. Be sure they don't know you're doing it."
/datum/objective/abductee/narrator
explanation_text = "You're the narrator of this tale. Follow around the protagonists to tell their story."
/datum/objective/abductee/lurve
explanation_text = "You are doomed to feel woefully incomplete forever... until you find your true love on this station. They're waiting for you!"
/datum/objective/abductee/sixthsense
explanation_text = "You died back there and went to heaven... or is it hell? No one here seems to know they're dead. Convince them, and maybe you can escape this limbo."
@@ -11,7 +11,7 @@
icon_state = "vest_stealth"
item_state = "armor"
blood_overlay_type = "armor"
origin_tech = "materials=5;biotech=4;powerstorage=5;abductor=3"
origin_tech = "magnets=7;biotech=4;powerstorage=4;abductor=4"
armor = list(melee = 15, bullet = 15, laser = 15, energy = 15, bomb = 15, bio = 15, rad = 15)
actions_types = list(/datum/action/item_action/hands_free/activate)
var/mode = VEST_STEALTH
@@ -34,7 +34,6 @@
mode = VEST_STEALTH
armor = stealth_armor
icon_state = "vest_stealth"
if(ishuman(loc))
var/mob/living/carbon/human/H = loc
H.update_inv_wear_suit()
@@ -64,7 +63,6 @@
M.overlays = disguise.overlays
M.update_inv_r_hand()
M.update_inv_l_hand()
return
/obj/item/clothing/suit/armor/abductor/vest/proc/DeactivateStealth()
if(!stealth_active)
@@ -77,7 +75,6 @@
M.name_override = null
M.overlays.Cut()
M.regenerate_icons()
return
/obj/item/clothing/suit/armor/abductor/vest/hit_reaction()
DeactivateStealth()
@@ -115,19 +112,11 @@
if(combat_cooldown==initial(combat_cooldown))
processing_objects.Remove(src)
/obj/item/device/abductor/proc/IsAbductor(user)
if(ishuman(user))
var/mob/living/carbon/human/H = user
if(H.get_species() != "Abductor")
return 0
return 1
return 0
/obj/item/device/abductor/proc/AbductorCheck(user)
if(IsAbductor(user))
return 1
if(isabductor(user))
return TRUE
to_chat(user, "<span class='warning'>You can't figure how this works!</span>")
return 0
return FALSE
/obj/item/device/abductor/proc/ScientistCheck(user)
var/mob/living/carbon/human/H = user
@@ -140,7 +129,7 @@
icon = 'icons/obj/abductor.dmi'
icon_state = "gizmo_scan"
item_state = "gizmo"
origin_tech = "materials=5;magnets=5;bluespace=6;abductor=4"
origin_tech = "engineering=7;magnets=4;bluespace=4;abductor=3"
var/mode = GIZMO_SCAN
var/mob/living/marked = null
var/obj/machinery/abductor/console/console
@@ -187,7 +176,7 @@
mark(target, user)
/obj/item/device/abductor/gizmo/proc/scan(atom/target, mob/living/user)
if(istype(target,/mob/living/carbon/human))
if(ishuman(target))
if(console!=null)
console.AddSnapshot(target)
to_chat(user, "<span class='notice'>You scan [target] and add them to the database.</span>")
@@ -196,8 +185,8 @@
if(marked == target)
to_chat(user, "<span class='warning'>This specimen is already marked!</span>")
return
if(istype(target,/mob/living/carbon/human))
if(IsAbductor(target))
if(ishuman(target))
if(isabductor(target))
marked = target
to_chat(user, "<span class='notice'>You mark [target] for future retrieval.</span>")
else
@@ -221,7 +210,7 @@
icon = 'icons/obj/abductor.dmi'
icon_state = "silencer"
item_state = "silencer"
origin_tech = "materials=5;magnets=5;abductor=3"
origin_tech = "materials=4;programming=7;abductor=3"
/obj/item/device/abductor/silencer/attack(mob/living/M, mob/user)
if(!AbductorCheck(user))
@@ -258,61 +247,15 @@
if(!istype(I,/obj/item/device/radio/headset))
r.broadcasting = 0 //goddamned headset hacks
/obj/item/weapon/implant/abductor
name = "recall implant"
desc = "Returns you to the mothership."
icon = 'icons/obj/abductor.dmi'
icon_state = "implant"
activated = 1
origin_tech = "materials=2;biotech=3;magnets=4;bluespace=5;abductor=5"
var/obj/machinery/abductor/pad/home
var/cooldown = 30
/obj/item/weapon/implant/abductor/activate()
if(cooldown == initial(cooldown))
home.Retrieve(imp_in,1)
cooldown = 0
processing_objects.Add(src)
else
to_chat(imp_in, "<span class='warning'>You must wait [30 - cooldown] seconds to use [src] again!</span>")
return
/obj/item/weapon/implant/abductor/process()
if(cooldown < initial(cooldown))
cooldown++
if(cooldown == initial(cooldown))
processing_objects.Remove(src)
/obj/item/weapon/implant/abductor/implant(var/mob/source, var/mob/user)
if(..())
var/obj/machinery/abductor/console/console
if(ishuman(source))
var/mob/living/carbon/human/H = source
if(H.get_species() == "Abductor")
console = get_team_console(H.mind.abductor.team)
home = console.pad
if(!home)
console = get_team_console(pick(1, 2, 3, 4))
home = console.pad
return 1
/obj/item/weapon/implant/abductor/proc/get_team_console(var/team)
var/obj/machinery/abductor/console/console
for(var/obj/machinery/abductor/console/c in abductor_equipment)
if(c.team == team)
console = c
break
return console
/obj/item/weapon/gun/energy/decloner/alien
/obj/item/weapon/gun/energy/alien
name = "alien pistol"
desc = "A complicated gun that fires bursts of high-intensity radiation."
ammo_type = list(/obj/item/ammo_casing/energy/declone)
restricted_species = list("Abductor")
icon_state = "alienpistol"
item_state = "alienpistol"
origin_tech = "combat=5;materials=4;powerstorage=3;abductor=3"
restricted_species = list("Abductor")
origin_tech = "combat=4;magnets=7;powerstorage=3;abductor=3"
trigger_guard = TRIGGER_GUARD_ALLOW_ALL
/obj/item/weapon/paper/abductor
name = "Dissection Guide"
@@ -321,25 +264,29 @@
<br>
1.Acquire fresh specimen.<br>
2.Put the specimen on operating table<br>
3.Apply scalpel to the chest, preparing for dissection<br>
4.Apply scalpel to specimen torso<br>
5.Clamp bleeders on the specimen's torso<br>
6.Retract skin from specimen's torso<br>
7.Saw through the specimen's torso<br>
8.Retract skin from specimen's torso again<br>
9.Search through the specimen's torso with your hands to remove their heart<br>
10.Insert replacement gland (Retrieve one from gland storage)<br>
11.Cauterize the patient's torso<br>
12.Consider dressing the specimen back to not disturb the habitat <br>
13.Put the specimen in the experiment machinery<br>
14.Choose one of the machine options and follow displayed instructions<br>
2.Put the specimen on operating table.<br>
3.Apply scalpel to the chest, preparing for experimental dissection.<br>
4.Apply scalpel to specimen's torso.<br>
5.Clamp bleeders on specimen's torso with a hemostat.<br>
6.Retract skin of specimen's torso with a retractor.<br>
7.Saw through the specimen's torso with a saw.<br>
8.Apply retractor again to specimen's torso.<br>
9.Search through the specimen's torso with your hands to remove any superfluous organs.<br>
10.Insert replacement gland (Retrieve one from gland storage).<br>
11.Cauterize the patient's torso with a cautery.<br>
12.Consider dressing the specimen back to not disturb the habitat. <br>
13.Put the specimen in the experiment machinery.<br>
14.Choose one of the machine options. The target will be analyzed and teleported to the selected drop-off point.<br>
15.You will receive one supply credit, and the subject will be counted towards your quota.<br>
<br>
Congratulations! You are now trained for xenobiology research!"}
Congratulations! You are now trained for invasive xenobiology research!"}
/obj/item/weapon/paper/abductor/update_icon()
return
/obj/item/weapon/paper/abductor/AltClick()
return
#define BATON_STUN 0
#define BATON_SLEEP 1
#define BATON_CUFF 2
@@ -354,9 +301,9 @@ Congratulations! You are now trained for xenobiology research!"}
icon_state = "wonderprodStun"
item_state = "wonderprod"
slot_flags = SLOT_BELT
origin_tech = "materials=6;combat=5;biotech=7;abductor=4"
origin_tech = "materials=4;combat=4;biotech=7;abductor=4"
force = 7
w_class = 3
w_class = WEIGHT_CLASS_NORMAL
actions_types = list(/datum/action/item_action/toggle_mode)
/obj/item/weapon/abductor_baton/proc/toggle(mob/living/user=usr)
@@ -393,16 +340,8 @@ Congratulations! You are now trained for xenobiology research!"}
icon_state = "wonderprodProbe"
item_state = "wonderprodProbe"
/obj/item/weapon/abductor_baton/proc/IsAbductor(mob/living/user)
if(!ishuman(user))
return 0
var/mob/living/carbon/human/H = user
if(H.get_species() != "Abductor")
return 0
return 1
/obj/item/weapon/abductor_baton/attack(mob/target, mob/living/user)
if(!IsAbductor(user))
if(!isabductor(user))
return
if(isrobot(target))
@@ -434,7 +373,7 @@ Congratulations! You are now trained for xenobiology research!"}
/obj/item/weapon/abductor_baton/attack_self(mob/living/user)
toggle(user)
if(istype(user,/mob/living/carbon/human))
if(ishuman(user))
var/mob/living/carbon/human/H = user
H.update_inv_l_hand()
H.update_inv_r_hand()
@@ -456,10 +395,9 @@ Congratulations! You are now trained for xenobiology research!"}
H.forcesay(hit_appends)
add_logs(user, L, "stunned")
return
/obj/item/weapon/abductor_baton/proc/SleepAttack(mob/living/L,mob/living/user)
if(L.stunned)
if(L.stunned || L.sleeping)
L.visible_message("<span class='danger'>[user] has induced sleep in [L] with [src]!</span>", \
"<span class='userdanger'>You suddenly feel very drowsy!</span>")
playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1)
@@ -470,7 +408,6 @@ Congratulations! You are now trained for xenobiology research!"}
to_chat(user, "<span class='warning'>Sleep inducement works fully only on stunned specimens! </span>")
L.visible_message("<span class='danger'>[user] tried to induce sleep in [L] with [src]!</span>", \
"<span class='userdanger'>You suddenly feel drowsy!</span>")
return
/obj/item/weapon/abductor_baton/proc/CuffAttack(mob/living/L,mob/living/user)
if(!iscarbon(L))
@@ -488,7 +425,6 @@ Congratulations! You are now trained for xenobiology research!"}
add_logs(user, C, "handcuffed")
else
to_chat(user, "<span class='warning'>You fail to handcuff [C].</span>")
return
/obj/item/weapon/abductor_baton/proc/ProbeAttack(mob/living/L,mob/living/user)
L.visible_message("<span class='danger'>[user] probes [L] with [src]!</span>", \
@@ -502,7 +438,7 @@ Congratulations! You are now trained for xenobiology research!"}
species = "<span clas=='notice'>[H.species.name]</span>"
if(L.mind && L.mind.changeling)
species = "<span class='warning'>Changeling lifeform</span>"
var/obj/item/organ/internal/gland/temp = locate() in H.internal_organs
var/obj/item/organ/internal/heart/gland/temp = locate() in H.internal_organs
if(temp)
helptext = "<span class='warning'>Experimental gland detected!</span>"
else
@@ -517,7 +453,7 @@ Congratulations! You are now trained for xenobiology research!"}
icon_state = "cuff_white" // Needs sprite
breakouttime = 450
trashtype = /obj/item/weapon/restraints/handcuffs/energy/used
origin_tech = "materials=2;magnets=5;abductor=2"
origin_tech = "materials=4;magnets=5;abductor=2"
/obj/item/weapon/restraints/handcuffs/energy/used
desc = "energy discharge"
@@ -545,36 +481,42 @@ Congratulations! You are now trained for xenobiology research!"}
/obj/item/weapon/scalpel/alien
name = "alien scalpel"
desc = "It's a gleaming sharp knife made out of silvery-green metal."
icon = 'icons/obj/abductor.dmi'
origin_tech = "materials=2;biotech=2;abductor=2"
toolspeed = 0.25
/obj/item/weapon/hemostat/alien
name = "alien hemostat"
desc = "You've never seen this before."
icon = 'icons/obj/abductor.dmi'
origin_tech = "materials=2;biotech=2;abductor=2"
toolspeed = 0.25
/obj/item/weapon/retractor/alien
name = "alien retractor"
desc = "You're not sure if you want the veil pulled back."
icon = 'icons/obj/abductor.dmi'
origin_tech = "materials=2;biotech=2;abductor=2"
toolspeed = 0.25
/obj/item/weapon/circular_saw/alien
name = "alien saw"
desc = "Do the aliens also lose this, and need to find an alien hatchet?"
icon = 'icons/obj/abductor.dmi'
origin_tech = "materials=2;biotech=2;abductor=2"
toolspeed = 0.25
/obj/item/weapon/surgicaldrill/alien
name = "alien drill"
desc = "Maybe alien surgeons have finally found a use for the drill."
icon = 'icons/obj/abductor.dmi'
origin_tech = "materials=2;biotech=2;abductor=2"
toolspeed = 0.25
/obj/item/weapon/cautery/alien
name = "alien cautery"
desc = "Why would bloodless aliens have a tool to stop bleeding? Unless..."
icon = 'icons/obj/abductor.dmi'
origin_tech = "materials=2;biotech=2;abductor=2"
toolspeed = 0.25
@@ -585,17 +527,12 @@ Congratulations! You are now trained for xenobiology research!"}
icon_state = "alienhelmet"
item_state = "alienhelmet"
blockTracking = 1
origin_tech = "materials=6;magnets=5;abductor=3"
origin_tech = "materials=7;magnets=4;abductor=3"
flags = BLOCKHAIR
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
// Operating Table / Beds / Lockers
/obj/machinery/optable/abductor
icon = 'icons/obj/abductor.dmi'
icon_state = "bed"
no_icon_updates = 1 //no icon updates for this; it's static.
/obj/structure/stool/bed/abductor
name = "resting contraption"
desc = "This looks similar to contraptions from earth. Could aliens be stealing our technology?"
@@ -628,6 +565,16 @@ Congratulations! You are now trained for xenobiology research!"}
new /obj/structure/table/abductor(src.loc)
qdel(src)
return
if(istype(I, /obj/item/stack/sheet/mineral/silver))
var/obj/item/stack/sheet/P = I
if(P.get_amount() < 1)
to_chat(user, "<span class='warning'>You need one sheet of silver to do this!</span>")
return
to_chat(user, "<span class='notice'>You start adding [P] to [src]...</span>")
if(do_after(user, 50, target = src))
P.use(1)
new /obj/machinery/optable/abductor(loc)
qdel(src)
/obj/structure/table/abductor
name = "alien table"
@@ -637,10 +584,15 @@ Congratulations! You are now trained for xenobiology research!"}
canSmoothWith = null
parts = /obj/item/stack/sheet/mineral/abductor
/obj/machinery/optable/abductor
icon = 'icons/obj/abductor.dmi'
icon_state = "bed"
no_icon_updates = 1 //no icon updates for this; it's static.
/obj/structure/closet/abductor
name = "alien locker"
desc = "Contains secrets of the universe."
icon_state = "abductor"
icon_closed = "abductor"
icon_opened = "abductoropen"
material_drop = /obj/item/stack/sheet/mineral/abductor
material_drop = /obj/item/stack/sheet/mineral/abductor
@@ -15,9 +15,9 @@
return 0
var/mob/living/carbon/human/H = user
// You must either: Be of the abductor species, or contain an abductor implant
if(!(H.get_species() == "Abductor" || (locate(/obj/item/weapon/implant/abductor) in H)))
return 0
return 1
if((H.get_species() == "Abductor" || (locate(/obj/item/weapon/implant/abductor) in H)))
return 1
return 0
/datum/surgery_step/internal/extract_organ
@@ -47,11 +47,11 @@
return 1
else
to_chat(user, "<span class='warning'>You don't find anything in [target]'s [target_zone]!</span>")
return 0
return 1
/datum/surgery_step/internal/gland_insert
name = "insert gland"
allowed_tools = list(/obj/item/organ/internal/gland = 100)
allowed_tools = list(/obj/item/organ/internal/heart/gland = 100)
time = 32
/datum/surgery_step/internal/gland_insert/begin_step(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
@@ -61,6 +61,6 @@
/datum/surgery_step/internal/gland_insert/end_step(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
user.visible_message("[user] inserts [tool] into [target].", "<span class ='notice'>You insert [tool] into [target].</span>")
user.drop_item()
var/obj/item/organ/internal/gland/gland = tool
var/obj/item/organ/internal/heart/gland/gland = tool
gland.insert(target, 2)
return 1
@@ -1,12 +1,11 @@
/obj/item/organ/internal/gland
/obj/item/organ/internal/heart/gland
name = "fleshy mass"
desc = "A nausea-inducing hunk of twisting flesh and metal."
icon = 'icons/obj/abductor.dmi'
parent_organ = "chest"
slot = "gland"
icon_state = "gland"
status = ORGAN_ROBOT
origin_tech = "materials=4;biotech=5;abductor=3"
origin_tech = "materials=4;biotech=7;abductor=3"
beating = TRUE
var/cooldown_low = 300
var/cooldown_high = 300
var/next_activation = 0
@@ -16,30 +15,33 @@
tough = 1 //not easily broken by combat damage
sterile = 1 //not very germy
/obj/item/organ/internal/gland/proc/ownerCheck()
/obj/item/organ/internal/heart/gland/proc/ownerCheck()
if(ishuman(owner))
return 1
if(!human_only && iscarbon(owner))
return 1
return 0
/obj/item/organ/internal/gland/proc/Start()
/obj/item/organ/internal/heart/gland/proc/Start()
active = 1
next_activation = world.time + rand(cooldown_low,cooldown_high)
/obj/item/organ/internal/gland/remove(var/mob/living/carbon/M, special = 0)
/obj/item/organ/internal/heart/gland/remove(var/mob/living/carbon/M, special = 0)
active = 0
if(initial(uses) == 1)
uses = initial(uses)
..()
. = ..()
/obj/item/organ/internal/gland/insert(var/mob/living/carbon/M, special = 0)
/obj/item/organ/internal/heart/gland/insert(var/mob/living/carbon/M, special = 0)
..()
if(special != 2 && uses) // Special 2 means abductor surgery
Start()
/obj/item/organ/internal/gland/on_life()
/obj/item/organ/internal/heart/gland/on_life()
if(!beating)
// alien glands are immune to stopping.
beating = TRUE
if(!active)
return
if(!ownerCheck())
@@ -52,30 +54,28 @@
if(!uses)
active = 0
/obj/item/organ/internal/gland/proc/activate()
/obj/item/organ/internal/heart/gland/proc/activate()
return
/obj/item/organ/internal/gland/heals
origin_tech = "materials=4;biotech=6;abductor=3"
/obj/item/organ/internal/heart/gland/heals
cooldown_low = 200
cooldown_high = 400
uses = -1
icon_state = "health"
/obj/item/organ/internal/gland/heals/activate()
/obj/item/organ/internal/heart/gland/heals/activate()
to_chat(owner, "<span class='notice'>You feel curiously revitalized.</span>")
owner.adjustBruteLoss(-20)
owner.adjustOxyLoss(-20)
owner.adjustFireLoss(-20)
/obj/item/organ/internal/gland/slime
origin_tech = "materials=4;biotech=6;abductor=3"
/obj/item/organ/internal/heart/gland/slime
cooldown_low = 600
cooldown_high = 1200
uses = -1
icon_state = "slime"
/obj/item/organ/internal/gland/slime/activate()
/obj/item/organ/internal/heart/gland/slime/activate()
to_chat(owner, "<span class='warning'>You feel nauseous!</span>")
owner.vomit(20)
@@ -83,14 +83,14 @@
Slime.Friends = list(owner)
Slime.Leader = owner
/obj/item/organ/internal/gland/mindshock
origin_tech = "materials=4;biotech=5;magnets=3;abductor=3"
/obj/item/organ/internal/heart/gland/mindshock
origin_tech = "materials=4;biotech=4;magnets=6;abductor=3"
cooldown_low = 300
cooldown_high = 300
uses = -1
icon_state = "mindshock"
/obj/item/organ/internal/gland/mindshock/activate()
/obj/item/organ/internal/heart/gland/mindshock/activate()
to_chat(owner, "<span class='notice'>You get a headache.</span>")
var/turf/T = get_turf(owner)
@@ -100,40 +100,37 @@
to_chat(H, "<span class='alien'>You hear a buzz in your head.</span>")
H.AdjustConfused(20)
/obj/item/organ/internal/gland/pop
origin_tech = "materials=4;biotech=6;abductor=3"
/obj/item/organ/internal/heart/gland/pop
cooldown_low = 900
cooldown_high = 1800
uses = 6
uses = -1
human_only = 1
icon_state = "species"
/obj/item/organ/internal/gland/pop/activate()
/obj/item/organ/internal/heart/gland/pop/activate()
to_chat(owner, "<span class='notice'>You feel unlike yourself.</span>")
var/species = pick("Unathi","Skrell","Diona","Tajaran","Vulpkanin","Kidan","Grey","Diona")
owner.set_species(species)
/obj/item/organ/internal/gland/ventcrawling
/obj/item/organ/internal/heart/gland/ventcrawling
origin_tech = "materials=4;biotech=5;bluespace=3;abductor=3"
cooldown_low = 1800
cooldown_high = 2400
uses = 1
icon_state = "vent"
/obj/item/organ/internal/gland/ventcrawling/activate()
/obj/item/organ/internal/heart/gland/ventcrawling/activate()
to_chat(owner, "<span class='notice'>You feel very stretchy.</span>")
owner.ventcrawler = 2
return
/obj/item/organ/internal/gland/viral
origin_tech = "materials=4;biotech=6;abductor=3"
/obj/item/organ/internal/heart/gland/viral
cooldown_low = 1800
cooldown_high = 2400
uses = 1
icon_state = "viral"
/obj/item/organ/internal/gland/viral/activate()
/obj/item/organ/internal/heart/gland/viral/activate()
to_chat(owner, "<span class='warning'>You feel sick.</span>")
var/virus_type = pick(/datum/disease/beesease, /datum/disease/brainrot, /datum/disease/magnitis)
var/datum/disease/D = new virus_type()
@@ -144,51 +141,49 @@
owner.med_hud_set_status()
/obj/item/organ/internal/gland/emp //TODO : Replace with something more interesting
origin_tech = "materials=4;biotech=5;magnets=3;abductor=3"
/obj/item/organ/internal/heart/gland/emp //TODO : Replace with something more interesting
origin_tech = "materials=4;biotech=4;magnets=6;abductor=3"
cooldown_low = 900
cooldown_high = 1600
uses = 10
icon_state = "emp"
/obj/item/organ/internal/gland/emp/activate()
/obj/item/organ/internal/heart/gland/emp/activate()
to_chat(owner, "<span class='warning'>You feel a spike of pain in your head.</span>")
empulse(get_turf(owner), 2, 5, 1)
/obj/item/organ/internal/gland/spiderman
origin_tech = "materials=4;biotech=6;abductor=3"
/obj/item/organ/internal/heart/gland/spiderman
cooldown_low = 450
cooldown_high = 900
uses = 10
icon_state = "spider"
/obj/item/organ/internal/gland/spiderman/activate()
/obj/item/organ/internal/heart/gland/spiderman/activate()
to_chat(owner, "<span class='warning'>You feel something crawling in your skin.</span>")
owner.faction |= "spiders"
new /obj/structure/spider/spiderling(owner.loc)
/obj/item/organ/internal/gland/egg
origin_tech = "materials=4;biotech=6;abductor=3"
/obj/item/organ/internal/heart/gland/egg
cooldown_low = 300
cooldown_high = 400
uses = -1
icon_state = "egg"
/obj/item/organ/internal/gland/egg/activate()
/obj/item/organ/internal/heart/gland/egg/activate()
to_chat(owner, "<span class='boldannounce'>You lay an egg!</span>")
var/obj/item/weapon/reagent_containers/food/snacks/egg/egg = new(owner.loc)
egg.reagents.add_reagent("sacid",20)
egg.desc += " It smells bad."
/obj/item/organ/internal/gland/bloody
origin_tech = "materials=4;biotech=6;abductor=3"
/obj/item/organ/internal/heart/gland/bloody
cooldown_low = 200
cooldown_high = 400
uses = -1
/obj/item/organ/internal/gland/bloody/activate()
owner.adjustBruteLoss(15)
/obj/item/organ/internal/heart/gland/bloody/activate()
if(ishuman(owner))
var/mob/living/carbon/human/H = owner
H.drip(200)
owner.visible_message("<span class='danger'>[owner]'s skin erupts with blood!</span>",\
"<span class='userdanger'>Blood pours from your skin!</span>")
@@ -202,22 +197,22 @@
H.w_uniform.add_blood(owner)
H.update_inv_w_uniform(0)
/obj/item/organ/internal/gland/bodysnatch
origin_tech = "materials=4;biotech=7;abductor=3"
/obj/item/organ/internal/heart/gland/bodysnatch
cooldown_low = 600
cooldown_high = 600
human_only = 1
uses = 1
/obj/item/organ/internal/gland/bodysnatch/activate()
/obj/item/organ/internal/heart/gland/bodysnatch/activate()
to_chat(owner, "<span class='warning'>You feel something moving around inside you...</span>")
//spawn cocoon with clone greytide snpc inside
if(ishuman(owner))
var/obj/effect/cocoon/abductor/C = new (get_turf(owner))
C.Copy(owner)
C.Start()
owner.gib()
return
owner.adjustBruteLoss(40)
var/turf/T = get_turf(owner)
T.add_blood_floor(src)
/obj/effect/cocoon/abductor
name = "slimy cocoon"
@@ -232,11 +227,18 @@
var/mob/living/carbon/human/interactive/greytide/clone = new(src)
var/datum/dna/owner_dna = H.dna
clone.rename_character(clone.name, owner_dna.real_name)
clone.body_accessory = H.body_accessory
clone.dna = owner_dna.Clone()
clone.set_species(H.species.name)
clone.body_accessory = H.body_accessory
domutcheck(clone)
for(var/obj/item/I in clone)
if(istype(I, /obj/item/weapon/implant))
continue
if(istype(I, /obj/item/organ))
continue
qdel(I)
//There's no define for this / get all items ?
var/list/slots = list(slot_back,slot_w_uniform,slot_wear_suit,\
slot_wear_mask,slot_head,slot_shoes,slot_gloves,slot_l_ear,slot_r_ear,\
@@ -245,7 +247,7 @@
for(var/slot in slots)
var/obj/item/I = H.get_item_by_slot(slot)
if(I)
clone.equip_to_slot_if_possible(I,slot)
clone.equip_to_slot_or_del(new I.type(clone), slot)
/obj/effect/cocoon/abductor/proc/Start()
hatch_time = world.time + 600
@@ -259,22 +261,25 @@
M.forceMove(get_turf(src))
qdel(src)
/obj/item/organ/internal/gland/plasma
cooldown_low = 2400
cooldown_high = 3000
origin_tech = "materials=4;biotech=5;plasmatech=3;abductor=3"
uses = 1
/obj/item/organ/internal/gland/plasma/activate()
to_chat(owner, "<span class='warning'>You feel bloated.</span>")
sleep(150)
if(!owner) return
to_chat(owner, "<span class='userdanger'>A massive stomachache overcomes you.</span>")
sleep(50)
if(!owner) return
owner.visible_message("<span class='danger'>[owner] explodes in a cloud of plasma!</span>")
var/turf/simulated/T = get_turf(owner)
if(istype(T))
T.atmos_spawn_air(SPAWN_TOXINS|SPAWN_20C,300)
owner.gib()
return
/obj/item/organ/internal/heart/gland/plasma
cooldown_low = 1200
cooldown_high = 1800
origin_tech = "materials=4;biotech=4;plasmatech=6;abductor=3"
uses = -1
/obj/item/organ/internal/heart/gland/plasma/activate()
spawn(0)
to_chat(owner, "<span class='warning'>You feel bloated.</span>")
sleep(150)
if(!owner)
return
to_chat(owner, "<span class='userdanger'>A massive stomachache overcomes you.</span>")
sleep(50)
if(!owner)
return
owner.visible_message("<span class='danger'>[owner] vomits a cloud of plasma!</span>")
var/turf/simulated/T = get_turf(owner)
if(istype(T))
T.atmos_spawn_air(SPAWN_TOXINS|SPAWN_20C,50)
owner.vomit()
@@ -49,15 +49,12 @@
set_droppoint_action.target = console
set_droppoint_action.Grant(user)
/obj/machinery/computer/camera_advanced/abductor/proc/IsAbductor(mob/living/carbon/human/H)
return H.get_species() == "Abductor"
/obj/machinery/computer/camera_advanced/abductor/proc/IsScientist(mob/living/carbon/human/H)
if(H.mind && H.mind.abductor)
return H.mind.abductor.scientist
/obj/machinery/computer/camera_advanced/abductor/attack_hand(mob/user)
if(!iscarbon(user) || !IsAbductor(user))
if(!isabductor(user))
return
return ..()
@@ -11,21 +11,6 @@
abductor_equipment.Remove(src)
return ..()
/obj/machinery/abductor/proc/IsAbductor(mob/living/carbon/human/H)
return H.get_species() == "Abductor"
/obj/machinery/abductor/proc/IsAgent(mob/living/carbon/human/H)
if(H.get_species() == "Abductor")
if(H.mind && H.mind.abductor)
return H.mind.abductor.agent
return 0
/obj/machinery/abductor/proc/IsScientist(mob/living/carbon/human/H)
if(H.get_species() == "Abductor")
if(H.mind && H.mind.abductor)
return H.mind.abductor.scientist
return 0
//Console
/obj/machinery/abductor/console
@@ -33,8 +18,8 @@
desc = "Ship command center."
icon = 'icons/obj/abductor.dmi'
icon_state = "console"
density = 1
anchored = 1
density = TRUE
anchored = TRUE
var/obj/item/device/abductor/gizmo/gizmo
var/obj/item/clothing/suit/armor/abductor/vest/vest
var/obj/machinery/abductor/experiment/experiment
@@ -49,7 +34,7 @@
/obj/machinery/abductor/console/attack_hand(mob/user)
if(..())
return
if(!IsAbductor(user))
if(!isabductor(user))
to_chat(user, "<span class='warning'>You start mashing alien buttons at random!</span>")
if(do_after(user, 100, target = src))
TeleporterSend()
@@ -60,10 +45,13 @@
if(experiment != null)
var/points = experiment.points
var/credits = experiment.credits
dat += "Collected Samples : [points] <br>"
dat += "Gear Credits: [credits] <br>"
dat += "<b>Transfer data in exchange for supplies:</b><br>"
dat += "<a href='?src=[UID()];dispense=baton'>Advanced Baton</A><br>"
dat += "<a href='?src=[UID()];dispense=helmet'>Agent Helmet</A><br>"
dat += "<a href='?src=[UID()];dispense=vest'>Agent Vest</A><br>"
dat += "<a href='?src=[UID()];dispense=silencer'>Radio Silencer</A><br>"
dat += "<a href='?src=[UID()];dispense=tool'>Science Tool</A><br>"
else
@@ -92,13 +80,13 @@
dat+="<br>"
dat += "<a href='?src=[UID()];select_disguise=1'>Select Agent Vest Disguise</a><br>"
dat += "<a href='?src=[UID()];toggle_vest=1'>[vest.flags & NODROP ? "Unlock" : "Lock"] Vest</a><br>"
else
dat += "<span class='bad'>NO AGENT VEST DETECTED</span>"
var/datum/browser/popup = new(user, "computer", "Abductor Console", 400, 500)
popup.set_content(dat)
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
popup.open()
return
/obj/machinery/abductor/console/Topic(href, href_list)
if(..())
@@ -111,6 +99,8 @@
TeleporterRetrieve()
else if(href_list["flip_vest"])
FlipVest()
else if(href_list["toggle_vest"])
toggle_vest()
else if(href_list["select_disguise"])
SelectDisguise()
else if(href_list["dispense"])
@@ -123,37 +113,28 @@
Dispense(/obj/item/device/abductor/silencer)
if("tool")
Dispense(/obj/item/device/abductor/gizmo)
src.updateUsrDialog()
if("vest")
Dispense(/obj/item/clothing/suit/armor/abductor/vest)
updateUsrDialog()
/obj/machinery/abductor/console/proc/TeleporterRetrieve()
if(gizmo!=null && pad!=null && gizmo.marked)
pad.Retrieve(gizmo.marked)
return
/obj/machinery/abductor/console/proc/TeleporterSend()
if(pad!=null)
pad.Send()
return
/obj/machinery/abductor/console/proc/FlipVest()
if(vest!=null)
vest.flip_mode()
return
/obj/machinery/abductor/console/proc/SelectDisguise(remote=0)
var/list/entries = list()
var/tempname
var/datum/icon_snapshot/temp
for(var/i = 1; i <= disguises.len; i++)
temp = disguises[i]
tempname = temp.name
entries["[tempname]"] = disguises[i]
var/entry_name = input( "Choose Disguise", "Disguise") in entries
var/datum/icon_snapshot/chosen = entries[entry_name]
/obj/machinery/abductor/console/proc/SelectDisguise(remote = 0)
var/entry_name = input( "Choose Disguise", "Disguise") as null|anything in disguises
var/datum/icon_snapshot/chosen = disguises[entry_name]
if(chosen && (remote || in_range(usr,src)))
vest.SetDisguise(chosen)
return
/obj/machinery/abductor/console/proc/SetDroppoint(turf/location,user)
if(!istype(location))
@@ -188,13 +169,11 @@
entry.icon = target.icon
entry.icon_state = target.icon_state
entry.overlays = target.get_overlays_copy(list(L_HAND_LAYER,R_HAND_LAYER))
for(var/i=1,i<=disguises.len,i++)
var/datum/icon_snapshot/temp = disguises[i]
if(temp.name == entry.name)
disguises[i] = entry
return
disguises.Add(entry)
return
//Update old disguise instead of adding new one
if(disguises[entry.name])
disguises[entry.name] = entry
return
disguises[entry.name] = entry
/obj/machinery/abductor/console/attackby(obj/O, mob/user, params)
if(istype(O, /obj/item/device/abductor/gizmo))
@@ -205,13 +184,16 @@
else if(istype(O, /obj/item/clothing/suit/armor/abductor/vest))
var/obj/item/clothing/suit/armor/abductor/vest/V = O
to_chat(user, "<span class='notice'>You link the vest to the console.</span>")
if(istype(vest))
if(vest.flags & NODROP)
toggle_vest()
vest = V
else
..()
/obj/machinery/abductor/console/proc/Dispense(item,cost=1)
if(experiment && experiment.points >= cost)
experiment.points-=cost
if(experiment && experiment.credits >= cost)
experiment.credits -=cost
atom_say("Incoming supply!")
if(pad)
flick("alien-pad", pad)
@@ -220,4 +202,9 @@
new item(src.loc)
else
atom_say("Insufficent data!")
return
/obj/machinery/abductor/console/proc/toggle_vest()
vest.flags ^= NODROP
var/mob/M = vest.loc
if(istype(M))
to_chat(M, "<span class='notice'>[src] is now [vest.flags & NODROP ? "locked" : "unlocked"].</span>")
@@ -14,7 +14,8 @@
return rgb(rand(0,255),rand(0,255),rand(0,255))
/obj/machinery/abductor/gland_dispenser/New()
gland_types = subtypesof(/obj/item/organ/internal/gland)
..()
gland_types = subtypesof(/obj/item/organ/internal/heart/gland)
gland_types = shuffle(gland_types)
gland_colors = new/list(gland_types.len)
amounts = new/list(gland_types.len)
@@ -25,7 +26,7 @@
/obj/machinery/abductor/gland_dispenser/attack_hand(mob/user)
if(..())
return
if(!IsAbductor(user))
if(!isabductor(user))
return
user.set_machine(src)
var/box_css = {"
@@ -59,13 +60,15 @@
return
/obj/machinery/abductor/gland_dispenser/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/organ/internal/gland))
if(istype(W, /obj/item/organ/internal/heart/gland))
if(!user.drop_item())
return
W.forceMove(src)
for(var/i=1,i<=gland_colors.len,i++)
if(gland_types[i] == W.type)
amounts[i]++
else
..()
/obj/machinery/abductor/gland_dispenser/Topic(href, href_list)
if(..())
@@ -74,7 +77,7 @@
if(href_list["dispense"])
Dispense(text2num(href_list["dispense"]))
src.updateUsrDialog()
updateUsrDialog()
/obj/machinery/abductor/gland_dispenser/proc/Dispense(count)
if(amounts[count]>0)
@@ -6,6 +6,7 @@
anchored = 1
density = 1
var/points = 0
var/credits = 0
var/list/history = list()
var/list/abductee_minds = list()
var/flash = " - || - "
@@ -19,10 +20,10 @@
/obj/machinery/abductor/experiment/MouseDrop_T(mob/living/carbon/human/target, mob/user)
if(user.stat || user.lying || !Adjacent(user) || !target.Adjacent(user) || !ishuman(target))
return
if(IsAbductor(target))
if(isabductor(target))
return
if(occupant)
to_chat(user, "<span class='notice'>\The [src] is already occupied.</span>")
to_chat(user, "<span class='notice'>[src] is already occupied.</span>")
return //occupied
if(target.buckled)
return
@@ -118,7 +119,7 @@
if(H.stat == DEAD)
atom_say("Specimen deceased - please provide fresh sample.")
return "<span class='bad'>Specimen deceased.</span>"
var/obj/item/organ/internal/gland/GlandTest = locate() in H.internal_organs
var/obj/item/organ/internal/heart/gland/GlandTest = locate() in H.internal_organs
if(!GlandTest)
atom_say("Experimental dissection not detected!")
return "<span class='bad'>No glands detected!</span>"
@@ -147,7 +148,7 @@
obj_count++
ticker.mode.update_abductor_icons_added(H.mind)
for(var/obj/item/organ/internal/gland/G in H.internal_organs)
for(var/obj/item/organ/internal/heart/gland/G in H.internal_organs)
G.Start()
point_reward++
if(point_reward > 0)
@@ -155,6 +156,7 @@
SendBack(H)
playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
points += point_reward
credits += point_reward
return "<span class='good'>Experiment successful! [point_reward] new data-points collected.</span>"
else
playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 1)
@@ -183,7 +185,7 @@
var/obj/item/weapon/grab/grabbed = G
if(!ishuman(grabbed.affecting))
return
if(IsAbductor(grabbed.affecting))
if(isabductor(grabbed.affecting))
return
if(occupant)
to_chat(user, "<span class='notice'>The [src] is already occupied!</span>")
@@ -17,6 +17,8 @@
target.forceMove(teleport_target)
spawn(0)
anim(target.loc,target,'icons/mob/mob.dmi',,"uncloak",,target.dir)
to_chat(target, "<span class='warning'>The instability of the warp leaves you disoriented!</span>")
target.Stun(3)
/obj/machinery/abductor/pad/proc/Retrieve(mob/living/target)
flick("alien-pad", src)
+12 -12
View File
@@ -6,7 +6,7 @@
if(client)
if(client.prefs.muted & MUTE_IC)
to_chat(src, "\red You cannot speak in IC (muted).")
to_chat(src, "<span class='warning'>You cannot speak in IC (muted).</span>")
return
if(client.handle_spam_prevention(message,MUTE_IC))
return
@@ -250,16 +250,16 @@
if(host.reagents.has_reagent("sugar"))
if(!docile)
if(controlling)
to_chat(host, "\blue You feel the soporific flow of sugar in your host's blood, lulling you into docility.")
to_chat(host, "<span class='notice'>You feel the soporific flow of sugar in your host's blood, lulling you into docility.</span>")
else
to_chat(src, "\blue You feel the soporific flow of sugar in your host's blood, lulling you into docility.")
to_chat(src, "<span class='notice'>You feel the soporific flow of sugar in your host's blood, lulling you into docility.</span>")
docile = TRUE
else
if(docile)
if(controlling)
to_chat(host, "\blue You shake off your lethargy as the sugar leaves your host's blood.")
to_chat(host, "<span class='notice'>You shake off your lethargy as the sugar leaves your host's blood.</span>")
else
to_chat(src, "\blue You shake off your lethargy as the sugar leaves your host's blood.")
to_chat(src, "<span class='notice'>You shake off your lethargy as the sugar leaves your host's blood.</span>")
docile = FALSE
if(chemicals < max_chems)
@@ -267,7 +267,7 @@
if(controlling)
if(docile)
to_chat(host, "\blue You are feeling far too docile to continue controlling your host...")
to_chat(host, "<span class='notice'>You are feeling far too docile to continue controlling your host...</span>")
host.release_control()
return
@@ -457,11 +457,11 @@
if(!hiding)
layer = TURF_LAYER+0.2
to_chat(src, "\green You are now hiding.")
to_chat(src, "<span class=notice'>You are now hiding.</span>")
hiding = TRUE
else
layer = MOB_LAYER
to_chat(src, "\green You stop hiding.")
to_chat(src, "<span class=notice'>You stop hiding.</span>")
hiding = FALSE
/mob/living/simple_animal/borer/verb/dominate_victim()
@@ -499,8 +499,8 @@
to_chat(src, "You cannot dominate someone who is already infested!")
return
to_chat(src, "\red You focus your psychic lance on [M] and freeze their limbs with a wave of terrible dread.")
to_chat(M, "\red You feel a creeping, horrible sense of dread come over you, freezing your limbs and setting your heart racing.")
to_chat(src, "<span class='warning'>You focus your psychic lance on [M] and freeze their limbs with a wave of terrible dread.</span>")
to_chat(M, "<span class='warning'>You feel a creeping, horrible sense of dread come over you, freezing your limbs and setting your heart racing.</span>")
M.Weaken(3)
used_dominate = world.time
@@ -519,7 +519,7 @@
return
if(docile)
to_chat(src, "\blue You are feeling far too docile to do that.")
to_chat(src, "<span class='notice'>You are feeling far too docile to do that.</span>")
return
if(!host || !src)
@@ -594,7 +594,7 @@
return
if(docile)
to_chat(src, "\blue You are feeling far too docile to do that.")
to_chat(src, "<span class='notice'>You are feeling far too docile to do that.</span>")
return
if(bonding)
+1 -1
View File
@@ -222,7 +222,7 @@ proc/issyndicate(mob/living/M as mob)
/datum/game_mode/proc/greet_syndicate(var/datum/mind/syndicate, var/you_are=1)
if(you_are)
to_chat(syndicate.current, "\blue You are a [syndicate_name()] agent!")
to_chat(syndicate.current, "<span class='notice'>You are a [syndicate_name()] agent!</span>")
var/obj_count = 1
for(var/datum/objective/objective in syndicate.objectives)
to_chat(syndicate.current, "<B>Objective #[obj_count]</B>: [objective.explanation_text]")
+10 -10
View File
@@ -92,7 +92,7 @@ var/bomb_set
var/obj/item/weapon/weldingtool/WT = O
if(!WT.isOn()) return
if(WT.get_fuel() < 5) // uses up 5 fuel.
to_chat(user, "\red You need more fuel to complete this task.")
to_chat(user, "<span class='warning'>You need more fuel to complete this task.</span>")
return
user.visible_message("[user] starts cutting loose the anchoring bolt covers on [src].", "You start cutting loose the anchoring bolt covers with [O]...")
@@ -119,7 +119,7 @@ var/bomb_set
var/obj/item/weapon/weldingtool/WT = O
if(!WT.isOn()) return
if(WT.get_fuel() < 5) // uses up 5 fuel.
to_chat(user, "\red You need more fuel to complete this task.")
to_chat(user, "<span class='warning'>You need more fuel to complete this task.</span>")
return
user.visible_message("[user] starts cutting apart the anchoring system sealant on [src].", "You start cutting apart the anchoring system's sealant with [O]...")
@@ -166,9 +166,9 @@ var/bomb_set
else if(deployable)
if(removal_stage < 5)
anchored = 1
visible_message("\red With a steely snap, bolts slide out of [src] and anchor it to the flooring!")
visible_message("<span class='warning'>With a steely snap, bolts slide out of [src] and anchor it to the flooring!</span>")
else
visible_message("\red \The [src] makes a highly unpleasant crunching noise. It looks like the anchoring bolts have been cut.")
visible_message("<span class='warning'>\The [src] makes a highly unpleasant crunching noise. It looks like the anchoring bolts have been cut.</span>")
if(!lighthack)
flick("nuclearbombc", src)
icon_state = "nuclearbomb1"
@@ -220,10 +220,10 @@ var/bomb_set
return
if(deployable)
to_chat(usr, "\red You close several panels to make [src] undeployable.")
to_chat(usr, "<span class='warning'>You close several panels to make [src] undeployable.</span>")
deployable = 0
else
to_chat(usr, "\red You adjust some panels to make [src] deployable.")
to_chat(usr, "<span class='warning'>You adjust some panels to make [src] deployable.</span>")
deployable = 1
return
@@ -282,7 +282,7 @@ var/bomb_set
nanomanager.update_uis(src)
return
if(safety)
to_chat(usr, "\red The safety is still on.")
to_chat(usr, "<span class='warning'>The safety is still on.</span>")
nanomanager.update_uis(src)
return
timing = !(timing)
@@ -312,16 +312,16 @@ var/bomb_set
if(href_list["anchor"])
if(removal_stage == 5)
anchored = 0
visible_message("\red \The [src] makes a highly unpleasant crunching noise. It looks like the anchoring bolts have been cut.")
visible_message("<span class='warning'>\The [src] makes a highly unpleasant crunching noise. It looks like the anchoring bolts have been cut.</span>")
nanomanager.update_uis(src)
return
if(!isinspace())
anchored = !(anchored)
if(anchored)
visible_message("\red With a steely snap, bolts slide out of [src] and anchor it to the flooring.")
visible_message("<span class='warning'>With a steely snap, bolts slide out of [src] and anchor it to the flooring.</span>")
else
visible_message("\red The anchoring bolts slide back into the depths of [src].")
visible_message("<span class='warning'>The anchoring bolts slide back into the depths of [src].</span>")
else
to_chat(usr, "<span class='warning'>There is nothing to anchor to!</span>")
+1 -1
View File
@@ -234,7 +234,7 @@
if(rev_mind.assigned_role in command_positions)
return 0
var/mob/living/carbon/human/H = rev_mind.current//Check to see if the potential rev is implanted
if(isloyal(H))
if(ismindshielded(H))
return 0
if((rev_mind in revolutionaries) || (rev_mind in head_revolutionaries))
return 0
@@ -307,14 +307,14 @@
to_chat(target, "<span class='danger'>A terrible red light floods your mind. You collapse as conscious thought is wiped away.</span>")
target.Weaken(12)
sleep(20)
if(isloyal(target))
if(ismindshielded(target))
to_chat(user, "<span class='notice'>They have a mindshield implant. You begin to deactivate it - this will take some time.</span>")
user.visible_message("<span class='warning'>[user] pauses, then dips their head in concentration!</span>")
to_chat(target, "<span class='boldannounce'>Your mindshield implant becomes hot as it comes under attack!</span>")
sleep(100) //10 seconds - not spawn() so the enthralling takes longer
to_chat(user, "<span class='notice'>The nanobots composing the mindshield implant have been rendered inert. Now to continue.</span>")
user.visible_message("<span class='warning'>[user] relaxes again.</span>")
for(var/obj/item/weapon/implant/loyalty/L in target)
for(var/obj/item/weapon/implant/mindshield/L in target)
if(L && L.implanted)
qdel(L)
to_chat(target, "<span class='boldannounce'>Your mental protection implant unexpectedly falters, dims, dies.</span>")
@@ -718,8 +718,9 @@
var/more_minutes = 9000
var/timer = shuttle_master.emergency.timeLeft()
timer += more_minutes
event_announcement.Announce("Major system failure aboard the emergency shuttle. This will extend its arrival time by approximately 15 minutes..", "System Failure", 'sound/misc/notice1.ogg')
event_announcement.Announce("Major system failure aboard the emergency shuttle. This will extend its arrival time by approximately 15 minutes and the shuttle is unable to be recalled.", "System Failure", 'sound/misc/notice1.ogg')
shuttle_master.emergency.setTimer(timer)
shuttle_master.emergency.canRecall = FALSE
user.mind.spell_list.Remove(src) //Can only be used once!
qdel(src)
+13 -2
View File
@@ -70,6 +70,9 @@
modePlayer += traitors
..()
/datum/game_mode/traitor/setup_chumps()
//since we actually have potential collaborators, we don't prepare any chumps to avoid extra people knowing our codewords.
return
/datum/game_mode/proc/forge_traitor_objectives(datum/mind/traitor)
if(istype(traitor.current, /mob/living/silicon))
@@ -345,6 +348,14 @@
if(M && M != traitor_mob)
to_chat(traitor_mob, "We have received credible reports that [M.real_name] might be willing to help our cause. If you need assistance, consider contacting them.")
traitor_mob.mind.store_memory("<b>Potential Collaborator</b>: [M.real_name]")
//let's also inform their contact that they might be called upon, but leave it vague.
inform_collab(M)
/datum/game_mode/traitor/inform_collab(mob/living/carbon/human/M)
if(M.mind in traitors) //if you are already a traitor, you already know the codewords and your role, so skip this message.
return
..(M)
/datum/game_mode/proc/remove_traitor(datum/mind/traitor_mind)
if(traitor_mind in traitors)
@@ -355,8 +366,8 @@
to_chat(traitor_mind.current, "<span class='userdanger'>You have been turned into a robot! You are no longer a traitor.</span>")
else
to_chat(traitor_mind.current, "<span class='userdanger'>You have been brainwashed! You are no longer a traitor.</span>")
ticker.mode.update_traitor_icons_removed(traitor_mind)
ticker.mode.update_traitor_icons_removed(traitor_mind)
/datum/game_mode/proc/update_traitor_icons_added(datum/mind/traitor_mind)
var/datum/atom_hud/antag/tatorhud = huds[ANTAG_HUD_TRAITOR]
tatorhud.join_hud(traitor_mind.current)
@@ -179,7 +179,7 @@
if(do_mob(user, target, 50))
if(!affects(target))
to_chat(user, "<span class='warning'>Your piercing gaze fails to knock out [target].</span>")
to_chat(target, "\blue [user]'s feeble gaze is ineffective.")
to_chat(target, "<span class='notice'>[user]'s feeble gaze is ineffective.</span>")
else
to_chat(user, "<span class='warning'>Your piercing gaze knocks out [target].</span>")
to_chat(target, "<span class='warning'>You find yourself unable to move and barely able to speak.</span>")
@@ -294,7 +294,7 @@
/obj/effect/proc_holder/spell/vampire/targetted/enthrall/proc/can_enthrall(mob/living/user, mob/living/carbon/C)
var/enthrall_safe = 0
for(var/obj/item/weapon/implant/loyalty/L in C)
for(var/obj/item/weapon/implant/mindshield/L in C)
if(L && L.implanted)
enthrall_safe = 1
break
@@ -488,7 +488,7 @@
if(!turfs.len)
revert_cast(user)
to_chat(user, "\red You cannot find darkness to step to.")
to_chat(user, "<span class='warning'>You cannot find darkness to step to.</span>")
return
perform(turfs, user = user)
+3 -3
View File
@@ -61,11 +61,11 @@
message_admins("[wizard.current] went into crit in the wizard lair, another wizard is likely camping")
end_squabble(get_area(wizard.current))
else
to_chat(wizard.current, "\red <font size='4'>The Space Wizard Federation is upset with your performance and have terminated your employment.</font>")
to_chat(wizard.current, "<span class='warning'><font size='4'>The Space Wizard Federation is upset with your performance and have terminated your employment.</font></span>")
wizard.current.gib() // *REAL* ACTION!! *REAL* DRAMA!! *REAL* BLOODSHED!!
continue
if(wizard.current.client && wizard.current.client.is_afk() > 10 * 60 * 10) // 10 minutes
to_chat(wizard.current, "\red <font size='4'>The Space Wizard Federation is upset with your performance and have terminated your employment.</font>")
to_chat(wizard.current, "<span class='warning'><font size='4'>The Space Wizard Federation is upset with your performance and have terminated your employment.</font></span>")
wizard.current.gib() // Let's keep the round moving
continue
if(!wizard.current.client)
@@ -181,5 +181,5 @@
/datum/game_mode/wizard/raginmages/declare_completion()
if(finished)
feedback_set_details("round_end_result","loss - wizard killed")
to_chat(world, "\red <FONT size = 3><B> The crew has managed to hold off the wizard attack! The Space Wizards Federation has been taught a lesson they will not soon forget!</B></FONT>")
to_chat(world, "<span class='warning'><FONT size = 3><B> The crew has managed to hold off the wizard attack! The Space Wizards Federation has been taught a lesson they will not soon forget!</B></FONT></span>")
..(1)
+1 -1
View File
@@ -319,7 +319,7 @@
user.sight |= (SEE_MOBS|SEE_OBJS|SEE_TURFS)
user.see_in_dark = 8
user.see_invisible = SEE_INVISIBLE_LEVEL_TWO
to_chat(user, "\blue The walls suddenly disappear.")
to_chat(user, "<span class='notice'>The walls suddenly disappear.</span>")
return 1
+1 -1
View File
@@ -197,7 +197,7 @@
/datum/game_mode/wizard/declare_completion(var/ragin = 0)
if(finished && !ragin)
feedback_set_details("round_end_result","loss - wizard killed")
to_chat(world, "\red <FONT size = 3><B> The wizard[(wizards.len>1)?"s":""] has been killed by the crew! The Space Wizards Federation has been taught a lesson they will not soon forget!</B></FONT>")
to_chat(world, "<span class='warning'><FONT size = 3><B> The wizard[(wizards.len>1)?"s":""] has been killed by the crew! The Space Wizards Federation has been taught a lesson they will not soon forget!</B></FONT></span>")
..()
return 1
+2 -2
View File
@@ -34,7 +34,7 @@
/obj/item/weapon/implanter/death_alarm = 1
)
implants = list(/obj/item/weapon/implant/loyalty)
implants = list(/obj/item/weapon/implant/mindshield)
backpack = /obj/item/weapon/storage/backpack/satchel
@@ -77,6 +77,6 @@
/obj/item/weapon/implanter/death_alarm = 1
)
implants = list(/obj/item/weapon/implant/loyalty)
implants = list(/obj/item/weapon/implant/mindshield)
backpack = /obj/item/weapon/storage/backpack/satchel
+6 -6
View File
@@ -40,7 +40,7 @@
/obj/item/weapon/melee/classic_baton/telescopic = 1
)
implants = list(/obj/item/weapon/implant/loyalty)
implants = list(/obj/item/weapon/implant/mindshield)
backpack = /obj/item/weapon/storage/backpack/security
satchel = /obj/item/weapon/storage/backpack/satchel_sec
@@ -83,7 +83,7 @@
/obj/item/weapon/restraints/handcuffs = 1
)
implants = list(/obj/item/weapon/implant/loyalty)
implants = list(/obj/item/weapon/implant/mindshield)
backpack = /obj/item/weapon/storage/backpack/security
satchel = /obj/item/weapon/storage/backpack/satchel_sec
@@ -130,7 +130,7 @@
/obj/item/weapon/melee/classic_baton/telescopic = 1
)
implants = list(/obj/item/weapon/implant/loyalty)
implants = list(/obj/item/weapon/implant/mindshield)
/datum/outfit/job/detective/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
. = ..()
@@ -183,7 +183,7 @@
/obj/item/weapon/restraints/handcuffs = 1
)
implants = list(/obj/item/weapon/implant/loyalty)
implants = list(/obj/item/weapon/implant/mindshield)
backpack = /obj/item/weapon/storage/backpack/security
satchel = /obj/item/weapon/storage/backpack/satchel_sec
@@ -218,7 +218,7 @@
l_hand = /obj/item/weapon/storage/firstaid/adv
pda = /obj/item/device/pda/medical
implants = list(/obj/item/weapon/implant/loyalty)
implants = list(/obj/item/weapon/implant/mindshield)
backpack = /obj/item/weapon/storage/backpack/medic
satchel = /obj/item/weapon/storage/backpack/satchel_med
@@ -257,7 +257,7 @@
/obj/item/weapon/restraints/handcuffs = 1
)
implants = list(/obj/item/weapon/implant/loyalty)
implants = list(/obj/item/weapon/implant/mindshield)
backpack = /obj/item/weapon/storage/backpack/security
satchel = /obj/item/weapon/storage/backpack/satchel_sec
+5 -5
View File
@@ -41,7 +41,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 0)
/obj/item/weapon/melee/classic_baton/telescopic = 1
)
implants = list(/obj/item/weapon/implant/loyalty)
implants = list(/obj/item/weapon/implant/mindshield)
backpack = /obj/item/weapon/storage/backpack/captain
satchel = /obj/item/weapon/storage/backpack/satchel_cap
@@ -145,7 +145,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 0)
/obj/item/weapon/melee/classic_baton/ntcane = 1
)
implants = list(/obj/item/weapon/implant/loyalty)
implants = list(/obj/item/weapon/implant/mindshield)
@@ -188,7 +188,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 0)
/obj/item/weapon/gun/energy/gun/blueshield = 1
)
implants = list(/obj/item/weapon/implant/loyalty)
implants = list(/obj/item/weapon/implant/mindshield)
backpack = /obj/item/weapon/storage/backpack/security
@@ -232,7 +232,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 0)
/obj/item/weapon/melee/classic_baton/telescopic = 1
)
implants = list(/obj/item/weapon/implant/loyalty)
implants = list(/obj/item/weapon/implant/mindshield)
@@ -269,4 +269,4 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 0)
l_hand = /obj/item/weapon/storage/briefcase
pda = /obj/item/device/pda/lawyer
implants = list(/obj/item/weapon/implant/loyalty)
implants = list(/obj/item/weapon/implant/mindshield)
+2
View File
@@ -34,6 +34,8 @@
var/obj/item/weapon/storage/bible/B = new /obj/item/weapon/storage/bible(H)
spawn()
H.equip_to_slot_or_del(B, slot_l_hand)
var/religion_name = "Christianity"
var/new_religion = sanitize(copytext(input(H, "You are the crew services officer. Would you like to change your religion? Default is Christianity, in SPACE.", "Name change", religion_name),1,MAX_NAME_LEN))
+3 -4
View File
@@ -1,4 +1,4 @@
var/global/datum/controller/occupations/job_master
#define GET_RANDOM_JOB 0
@@ -15,7 +15,6 @@ var/global/datum/controller/occupations/job_master
//Debug info
var/list/job_debug = list()
/datum/controller/occupations/proc/SetupOccupations(var/list/faction = list("Station"))
occupations = list()
@@ -405,7 +404,7 @@ var/global/datum/controller/occupations/job_master
/datum/controller/occupations/proc/EquipRank(var/mob/living/carbon/human/H, var/rank, var/joined_late = 0)
if(!H)
return null
return null
var/datum/job/job = GetJob(rank)
@@ -593,6 +592,6 @@ var/global/datum/controller/occupations/job_master
H.mind.store_memory(remembered_info)
H.mind.initial_account = M
spawn(0)
to_chat(H, "<span class='boldnotice'>Your account number is: [M.account_number], your account pin is: [M.remote_access_pin]</span>")
+2 -2
View File
@@ -24,7 +24,7 @@ var/list/whitelist = list()
if(check_rights(R_ADMIN, 0, M))
return 1
if(!dbcon.IsConnected())
to_chat(usr, "\red Unable to connect to whitelist database. Please try again later.<br>")
to_chat(usr, "<span class='warning'>Unable to connect to whitelist database. Please try again later.<br></span>")
return 0
else
var/DBQuery/query = dbcon.NewQuery("SELECT job FROM [format_table_name("whitelist")] WHERE ckey='[M.ckey]'")
@@ -69,7 +69,7 @@ var/list/whitelist = list()
if(!alien_whitelist)
return 0
if(!dbcon.IsConnected())
to_chat(usr, "\red Unable to connect to whitelist database. Please try again later.<br>")
to_chat(usr, "<span class='warning'>Unable to connect to whitelist database. Please try again later.<br></span>")
return 0
else
var/DBQuery/query = dbcon.NewQuery("SELECT species FROM [format_table_name("whitelist")] WHERE ckey='[M.ckey]'")
+2 -2
View File
@@ -55,8 +55,8 @@
/obj/machinery/optable/attack_hand(mob/user as mob)
if(HULK in usr.mutations)
to_chat(usr, text("\blue You destroy the table."))
visible_message("\red [usr] destroys the operating table!")
to_chat(usr, text("<span class='notice'>You destroy the table.</span>"))
visible_message("<span class='warning'>[usr] destroys the operating table!</span>")
src.density = 0
qdel(src)
return
+1 -1
View File
@@ -220,7 +220,7 @@
active_power_usage = 500
var/printing = null
var/printing_text = null
var/known_implants = list(/obj/item/weapon/implant/chem, /obj/item/weapon/implant/death_alarm, /obj/item/weapon/implant/loyalty, /obj/item/weapon/implant/tracking)
var/known_implants = list(/obj/item/weapon/implant/chem, /obj/item/weapon/implant/death_alarm, /obj/item/weapon/implant/mindshield, /obj/item/weapon/implant/tracking)
/obj/machinery/body_scanconsole/power_change()
if(stat & BROKEN)
+1 -1
View File
@@ -45,7 +45,7 @@
if(user.machine == src)
attack_hand(usr)
else
to_chat(user, "\red Access denied.")
to_chat(user, "<span class='warning'>Access denied.</span>")
return
return
+2 -2
View File
@@ -985,10 +985,10 @@
else
if(allowed(usr) && !wires.IsIndexCut(AALARM_WIRE_IDSCAN))
locked = !locked
to_chat(user, "\blue You [ locked ? "lock" : "unlock"] the Air Alarm interface.")
to_chat(user, "<span class='notice'>You [ locked ? "lock" : "unlock"] the Air Alarm interface.</span>")
updateUsrDialog()
else
to_chat(user, "\red Access denied.")
to_chat(user, "<span class='warning'>Access denied.</span>")
return
+2 -2
View File
@@ -76,9 +76,9 @@ obj/machinery/air_sensor
to_chat(usr, "The [src] is bolted to the floor! You can't detach it like this.")
return 1
playsound(loc, W.usesound, 50, 1)
to_chat(user, "\blue You begin to unfasten \the [src]...")
to_chat(user, "<span class='notice'>You begin to unfasten \the [src]...</span>")
if(do_after(user, 40 * W.toolspeed, target = src))
user.visible_message("[user] unfastens \the [src].", "\blue You have unfastened \the [src].", "You hear ratchet.")
user.visible_message("[user] unfastens \the [src].", "<span class='notice'>You have unfastened \the [src].</span>", "You hear ratchet.")
new /obj/item/pipe_gsensor(src.loc)
qdel(src)
return 1
+3 -3
View File
@@ -339,14 +339,14 @@ update_flag
/obj/machinery/portable_atmospherics/canister/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob, params)
if(iswelder(W) && src.destroyed)
if(weld(W, user))
to_chat(user, "\blue You salvage whats left of \the [src]")
to_chat(user, "<span class='notice'>You salvage whats left of \the [src]</span>")
var/obj/item/stack/sheet/metal/M = new /obj/item/stack/sheet/metal(src.loc)
M.amount = 3
qdel(src)
return
if(!istype(W, /obj/item/weapon/wrench) && !istype(W, /obj/item/weapon/tank) && !istype(W, /obj/item/device/analyzer) && !istype(W, /obj/item/device/pda))
visible_message("\red [user] hits the [src] with a [W]!")
visible_message("<span class='warning'>[user] hits the [src] with a [W]!</span>")
src.health -= W.force
src.add_fingerprint(user)
healthcheck()
@@ -479,7 +479,7 @@ update_flag
else
name = "canister"
else
to_chat(usr, "\red As you attempted to rename it the pressure rose!")
to_chat(usr, "<span class='warning'>As you attempted to rename it the pressure rose!</span>")
if(href_list["choice"] == "Primary color")
if(is_a_color(href_list["icon"],"prim"))
+2 -2
View File
@@ -124,11 +124,11 @@
if(!istype(W, /obj/item/weapon/wrench))
return ..()
playsound(loc, W.usesound, 50, 1)
to_chat(user, "\blue You begin to unfasten \the [src]...")
to_chat(user, "<span class='notice'>You begin to unfasten \the [src]...</span>")
if(do_after(user, 40 * W.toolspeed, target = src))
user.visible_message( \
"[user] unfastens \the [src].", \
"\blue You have unfastened \the [src].", \
"<span class='notice'>You have unfastened \the [src].</span>", \
"You hear ratchet.")
new /obj/item/pipe_meter(src.loc)
qdel(src)
@@ -93,21 +93,21 @@
else if(istype(W, /obj/item/weapon/wrench))
if(connected_port)
disconnect()
to_chat(user, "\blue You disconnect [name] from the port.")
to_chat(user, "<span class='notice'>You disconnect [name] from the port.</span>")
update_icon()
return
else
var/obj/machinery/atmospherics/unary/portables_connector/possible_port = locate(/obj/machinery/atmospherics/unary/portables_connector/) in loc
if(possible_port)
if(connect(possible_port))
to_chat(user, "\blue You connect [name] to the port.")
to_chat(user, "<span class='notice'>You connect [name] to the port.</span>")
update_icon()
return
else
to_chat(user, "\blue [name] failed to connect to the port.")
to_chat(user, "<span class='notice'>[name] failed to connect to the port.</span>")
return
else
to_chat(user, "\blue Nothing happens.")
to_chat(user, "<span class='notice'>Nothing happens.</span>")
return
else if((istype(W, /obj/item/device/analyzer)) && get_dist(user, src) <= 1)
+6 -6
View File
@@ -56,20 +56,20 @@
loc = sanitize(copytext(loc, 1, MAX_MESSAGE_LEN))
if(!loc)
to_chat(src, "\red Must supply a location name")
to_chat(src, "<span class='warning'>Must supply a location name</span>")
return
if(stored_locations.len >= max_locations)
to_chat(src, "\red Cannot store additional locations. Remove one first")
to_chat(src, "<span class='warning'>Cannot store additional locations. Remove one first</span>")
return
if(loc in stored_locations)
to_chat(src, "\red There is already a stored location by this name")
to_chat(src, "<span class='warning'>There is already a stored location by this name</span>")
return
var/L = get_turf(eyeobj)
if(InvalidTurf(get_turf(L)))
to_chat(src, "\red Unable to store this location")
to_chat(src, "<span class='warning'>Unable to store this location</span>")
return
stored_locations[loc] = L
@@ -84,7 +84,7 @@
set desc = "Returns to the selected camera location"
if(!(loc in stored_locations))
to_chat(src, "\red Location [loc] not found")
to_chat(src, "<span class='warning'>Location [loc] not found</span>")
return
var/L = stored_locations[loc]
@@ -96,7 +96,7 @@
set desc = "Deletes the selected camera location"
if(!(loc in stored_locations))
to_chat(src, "\red Location [loc] not found")
to_chat(src, "<span class='warning'>Location [loc] not found</span>")
return
stored_locations.Remove(loc)
+6 -6
View File
@@ -16,7 +16,7 @@
if(charging && !(stat & (BROKEN|NOPOWER)) )
var/newlevel = round(charging.percent() * 4.0 / 99)
var/newlevel = round(charging.percent() * 4 / 100)
// to_chat(world, "nl: [newlevel]")
if(chargelevel != newlevel)
@@ -39,14 +39,14 @@
if(istype(W, /obj/item/weapon/stock_parts/cell) && anchored)
if(charging)
to_chat(user, "\red There is already a cell in the charger.")
to_chat(user, "<span class='warning'>There is already a cell in the charger.</span>")
return
else
var/area/a = loc.loc // Gets our locations location, like a dream within a dream
if(!isarea(a))
return
if(a.power_equip == 0) // There's no APC in this area, don't try to cheat power!
to_chat(user, "\red The [name] blinks red as you try to insert the cell!")
to_chat(user, "<span class='warning'>The [name] blinks red as you try to insert the cell!</span>")
return
user.drop_item()
@@ -57,7 +57,7 @@
updateicon()
else if(istype(W, /obj/item/weapon/wrench))
if(charging)
to_chat(user, "\red Remove the cell first!")
to_chat(user, "<span class='warning'>Remove the cell first!</span>")
return
anchored = !anchored
@@ -91,7 +91,7 @@
if(!charging || (stat & (BROKEN|NOPOWER)) || !anchored)
return
use_power(2000) //this used to use CELLRATE, but CELLRATE is fucking awful. feel free to fix this properly!
charging.give(1750) //inefficiency.
use_power(200) //this used to use CELLRATE, but CELLRATE is fucking awful. feel free to fix this properly!
charging.give(175) //inefficiency.
updateicon()
+6 -5
View File
@@ -122,10 +122,11 @@
//data = "0C80C80C80C80C80C8000000000000161FBDDEF" - Farmer Jeff
buf.dna.real_name="God Emperor of Mankind"
buf.dna.unique_enzymes = md5(buf.dna.real_name)
buf.dna.UI=list(0x066,0x000,0x033,0x000,0x000,0x000,0xAF0,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x033,0x066,0x0FF,0x4DB,0x002,0x690,0x000,0x000)
buf.dna.UI=list(0x066,0x000,0x033,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0xAF0,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x033,0x066,0x0FF,0x4DB,0x002,0x690,0x000,0x000,0x000,0x328,0x045,0x5FC,0x053,0x035,0x035,0x035)
//buf.dna.UI=list(0x0C8,0x0C8,0x0C8,0x0C8,0x0C8,0x0C8,0x000,0x000,0x000,0x000,0x161,0xFBD,0xDEF) // Farmer Jeff
for(var/i in buf.dna.UI.len to DNA_UI_LENGTH)
buf.dna.UI += 0x000
if(buf.dna.UI.len != DNA_UI_LENGTH) //If there's a disparity b/w the dna UI string lengths, 0-fill the extra blocks in this UI.
for(var/i in buf.dna.UI.len to DNA_UI_LENGTH)
buf.dna.UI += 0x000
buf.dna.ResetSE()
buf.dna.UpdateUI()
@@ -367,14 +368,14 @@
//Removing cloning pod biomass
else if(istype(W, /obj/item/weapon/reagent_containers/food/snacks/meat))
to_chat(user, "\blue \The [src] processes \the [W].")
to_chat(user, "<span class='notice'>\The [src] processes \the [W].</span>")
biomass += BIOMASS_MEAT_AMOUNT
user.drop_item()
qdel(W)
return
else if(istype(W, /obj/item/weapon/wrench))
if(locked && (anchored || occupant))
to_chat(user, "\red Can not do that while [src] is in use.")
to_chat(user, "<span class='warning'>Can not do that while [src] is in use.</span>")
else
if(anchored)
anchored = 0
@@ -166,7 +166,7 @@
if(!emagged)
playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
emagged = 1
to_chat(user, "\blue You vastly increase projector power and override the safety and security protocols.")
to_chat(user, "<span class='notice'>You vastly increase projector power and override the safety and security protocols.</span>")
to_chat(user, "Warning. Automatic shutoff and derezing protocols have been corrupted. Please call Nanotrasen maintenance and do not use the simulator.")
log_game("[key_name(usr)] emagged the Holodeck Control Computer")
src.updateUsrDialog()
@@ -279,7 +279,7 @@
if(world.time < (last_change + 15))//To prevent super-spam clicking, reduced process size and annoyance -Sieve
return
for(var/mob/M in range(3,src))
M.show_message("\b ERROR. Recalibrating projetion apparatus.")
M.show_message("<b>ERROR. Recalibrating projection apparatus.</b>")
last_change = world.time
return
+21 -21
View File
@@ -21,7 +21,7 @@
if(istype(P, /obj/item/weapon/wrench))
playsound(loc, P.usesound, 50, 1)
if(do_after(user, 20 * P.toolspeed, target = src))
to_chat(user, "\blue You wrench the frame into place.")
to_chat(user, "<span class='notice'>You wrench the frame into place.</span>")
anchored = 1
state = 1
if(istype(P, /obj/item/weapon/weldingtool))
@@ -32,31 +32,31 @@
playsound(loc, WT.usesound, 50, 1)
if(do_after(user, 20 * WT.toolspeed, target = src))
if(!src || !WT.remove_fuel(0, user)) return
to_chat(user, "\blue You deconstruct the frame.")
to_chat(user, "<span class='notice'>You deconstruct the frame.</span>")
new /obj/item/stack/sheet/plasteel(loc, 4)
qdel(src)
if(1)
if(istype(P, /obj/item/weapon/wrench))
playsound(loc, P.usesound, 50, 1)
if(do_after(user, 20 * P.toolspeed, target = src))
to_chat(user, "\blue You unfasten the frame.")
to_chat(user, "<span class='notice'>You unfasten the frame.</span>")
anchored = 0
state = 0
if(istype(P, /obj/item/weapon/circuitboard/aicore) && !circuit)
playsound(loc, P.usesound, 50, 1)
to_chat(user, "\blue You place the circuit board inside the frame.")
to_chat(user, "<span class='notice'>You place the circuit board inside the frame.</span>")
icon_state = "1"
circuit = P
user.drop_item()
P.loc = src
if(istype(P, /obj/item/weapon/screwdriver) && circuit)
playsound(loc, P.usesound, 50, 1)
to_chat(user, "\blue You screw the circuit board into place.")
to_chat(user, "<span class='notice'>You screw the circuit board into place.</span>")
state = 2
icon_state = "2"
if(istype(P, /obj/item/weapon/crowbar) && circuit)
playsound(loc, P.usesound, 50, 1)
to_chat(user, "\blue You remove the circuit board.")
to_chat(user, "<span class='notice'>You remove the circuit board.</span>")
state = 1
icon_state = "0"
circuit.loc = loc
@@ -64,7 +64,7 @@
if(2)
if(istype(P, /obj/item/weapon/screwdriver) && circuit)
playsound(loc, P.usesound, 50, 1)
to_chat(user, "\blue You unfasten the circuit board.")
to_chat(user, "<span class='notice'>You unfasten the circuit board.</span>")
state = 1
icon_state = "1"
if(istype(P, /obj/item/stack/cable_coil))
@@ -73,7 +73,7 @@
if(do_after(user, 20 * P.toolspeed, target = src))
P:amount -= 5
if(!P:amount) qdel(P)
to_chat(user, "\blue You add cables to the frame.")
to_chat(user, "<span class='notice'>You add cables to the frame.</span>")
state = 3
icon_state = "3"
if(3)
@@ -82,7 +82,7 @@
to_chat(user, "Get that brain out of there first")
else
playsound(loc, P.usesound, 50, 1)
to_chat(user, "\blue You remove the cables.")
to_chat(user, "<span class='notice'>You remove the cables.</span>")
state = 2
icon_state = "2"
var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil( loc )
@@ -95,7 +95,7 @@
if(P)
P:amount -= 2
if(!P:amount) qdel(P)
to_chat(user, "\blue You put in the glass panel.")
to_chat(user, "<span class='notice'>You put in the glass panel.</span>")
state = 4
icon_state = "4"
@@ -119,14 +119,14 @@
if(istype(P, /obj/item/device/mmi) || istype(P, /obj/item/device/mmi/posibrain))
if(!P:brainmob)
to_chat(user, "\red Sticking an empty [P] into the frame would sort of defeat the purpose.")
to_chat(user, "<span class='warning'>Sticking an empty [P] into the frame would sort of defeat the purpose.</span>")
return
if(P:brainmob.stat == 2)
to_chat(user, "\red Sticking a dead [P] into the frame would sort of defeat the purpose.")
to_chat(user, "<span class='warning'>Sticking a dead [P] into the frame would sort of defeat the purpose.</span>")
return
if(jobban_isbanned(P:brainmob, "AI") || jobban_isbanned(P:brainmob,"nonhumandept"))
to_chat(user, "\red This [P] does not seem to fit.")
to_chat(user, "<span class='warning'>This [P] does not seem to fit.</span>")
return
if(istype(P, /obj/item/device/mmi/syndie))
@@ -145,7 +145,7 @@
if(istype(P, /obj/item/weapon/crowbar) && brain)
playsound(loc, P.usesound, 50, 1)
to_chat(user, "\blue You remove the brain.")
to_chat(user, "<span class='notice'>You remove the brain.</span>")
brain.loc = loc
brain = null
icon_state = "3"
@@ -153,7 +153,7 @@
if(4)
if(istype(P, /obj/item/weapon/crowbar))
playsound(loc, P.usesound, 50, 1)
to_chat(user, "\blue You remove the glass panel.")
to_chat(user, "<span class='notice'>You remove the glass panel.</span>")
state = 3
if(brain)
icon_state = "3b"
@@ -195,19 +195,19 @@
card.transfer_ai("INACTIVE","AICARD",src,user)
else if(istype(W, /obj/item/weapon/wrench))
if(anchored)
user.visible_message("\blue \The [user] starts to unbolt \the [src] from the plating...")
user.visible_message("<span class='notice'>\The [user] starts to unbolt \the [src] from the plating...</span>")
if(!do_after(user, 40 * W.toolspeed, target = src))
user.visible_message("\blue \The [user] decides not to unbolt \the [src].")
user.visible_message("<span class='notice'>\The [user] decides not to unbolt \the [src].</span>")
return
user.visible_message("\blue \The [user] finishes unfastening \the [src]!")
user.visible_message("<span class='notice'>\The [user] finishes unfastening \the [src]!</span>")
anchored = 0
return
else
user.visible_message("\blue \The [user] starts to bolt \the [src] to the plating...")
user.visible_message("<span class='notice'>\The [user] starts to bolt \the [src] to the plating...</span>")
if(!do_after(user, 40 * W.toolspeed, target = src))
user.visible_message("\blue \The [user] decides not to bolt \the [src].")
user.visible_message("<span class='notice'>\The [user] decides not to bolt \the [src].</span>")
return
user.visible_message("\blue \The [user] finishes fastening down \the [src]!")
user.visible_message("<span class='notice'>\The [user] finishes fastening down \the [src]!</span>")
anchored = 1
return
else
+1 -1
View File
@@ -326,7 +326,7 @@ var/time_last_changed_position = 0
jobdatum = J
break
if(!jobdatum)
to_chat(usr, "\red No log exists for this job: [t1]")
to_chat(usr, "<span class='warning'>No log exists for this job: [t1]</span>")
return
access = jobdatum.get_access()
+2 -2
View File
@@ -121,12 +121,12 @@
for(var/obj/C in src)
C.loc = src.loc
if(src.stat & BROKEN)
to_chat(user, "\blue The broken glass falls out.")
to_chat(user, "<span class='notice'>The broken glass falls out.</span>")
new /obj/item/weapon/shard(loc)
A.state = 3
A.icon_state = "3"
else
to_chat(user, "\blue You disconnect the monitor.")
to_chat(user, "<span class='notice'>You disconnect the monitor.</span>")
A.state = 4
A.icon_state = "4"
qdel(src)
+2 -2
View File
@@ -105,12 +105,12 @@
for(var/obj/C in src)
C.loc = src.loc
if(src.stat & BROKEN)
to_chat(user, "\blue The broken glass falls out.")
to_chat(user, "<span class='notice'>The broken glass falls out.</span>")
new /obj/item/weapon/shard( src.loc )
A.state = 3
A.icon_state = "3"
else
to_chat(user, "\blue You disconnect the monitor.")
to_chat(user, "<span class='notice'>You disconnect the monitor.</span>")
A.state = 4
A.icon_state = "4"
qdel(src)
+2 -2
View File
@@ -22,9 +22,9 @@
opened = !opened
if(opened)
to_chat(usr, "\blue The access panel is now open.")
to_chat(usr, "<span class='notice'>The access panel is now open.</span>")
else
to_chat(usr, "\blue The access panel is now closed.")
to_chat(usr, "<span class='notice'>The access panel is now closed.</span>")
return
+1 -1
View File
@@ -96,7 +96,7 @@
I.loc = src
inserted_id = I
else
to_chat(usr, "\red No valid ID.")
to_chat(usr, "<span class='warning'>No valid ID.</span>")
if("1")
inserted_id.loc = get_step(src,get_turf(usr))
inserted_id = null
+1 -1
View File
@@ -146,7 +146,7 @@
if(!target || !istype(target))
return
message_admins("\blue [key_name_admin(usr)] emagged [key_name_admin(target)] using robotic console!")
message_admins("<span class='notice'>[key_name_admin(usr)] emagged [key_name_admin(target)] using robotic console!</span>")
log_game("[key_name(usr)] emagged [key_name(target)] using robotic console!")
target.emagged = 1
to_chat(target, "<span class='notice'>Failsafe protocols overriden. New tools available.</span>")
+1 -1
View File
@@ -46,7 +46,7 @@
/obj/machinery/computer/salvage_ship/attack_hand(mob/user as mob)
if(!allowed(user))
to_chat(user, "\red Access Denied")
to_chat(user, "<span class='warning'>Access Denied</span>")
return
user.set_machine(src)
+13 -13
View File
@@ -89,7 +89,7 @@ var/specops_shuttle_timeleft = 0
for(var/turf/T in get_area_turfs(end_location) )
var/mob/M = locate(/mob) in T
to_chat(M, "\red You have arrived at Central Command. Operation has ended!")
to_chat(M, "<span class='warning'>You have arrived at Central Command. Operation has ended!</span>")
specops_shuttle_at_station = 0
@@ -137,7 +137,7 @@ var/specops_shuttle_timeleft = 0
if(specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom) return
if(!specops_can_move())
to_chat(usr, "\red The Special Operations shuttle is unable to leave.")
to_chat(usr, "<span class='warning'>The Special Operations shuttle is unable to leave.</span>")
return
//Begin Marauder launchpad.
@@ -231,7 +231,7 @@ var/specops_shuttle_timeleft = 0
for(var/turf/T in get_area_turfs(end_location) )
var/mob/M = locate(/mob) in T
to_chat(M, "\red You have arrived to [station_name]. Commence operation!")
to_chat(M, "<span class='warning'>You have arrived to [station_name]. Commence operation!</span>")
for(var/obj/machinery/computer/specops_shuttle/S in world)
S.specops_shuttle_timereset = world.time + SPECOPS_RETURN_DELAY
@@ -247,23 +247,23 @@ var/specops_shuttle_timeleft = 0
return 1
/obj/machinery/computer/specops_shuttle/attack_ai(var/mob/user as mob)
to_chat(user, "\red Access Denied.")
to_chat(user, "<span class='warning'>Access Denied.</span>")
return 1
/obj/machinery/computer/specops_shuttle/attackby(I as obj, user as mob, params)
if(istype(I,/obj/item/weapon/card/emag))
to_chat(user, "\blue The electronic systems in this console are far too advanced for your primitive hacking peripherals.")
to_chat(user, "<span class='notice'>The electronic systems in this console are far too advanced for your primitive hacking peripherals.</span>")
else
return attack_hand(user)
/obj/machinery/computer/specops_shuttle/attack_hand(var/mob/user as mob)
if(!allowed(user))
to_chat(user, "\red Access Denied.")
to_chat(user, "<span class='warning'>Access Denied.</span>")
return
//Commented out so admins can do shenanigans at their leisure. Also makes the force-spawned admin ERTs able to use the shuttle.
// if(sent_strike_team == 0 && send_emergency_team == 0)
// to_chat(usr, "\red The strike team has not yet deployed.")
// to_chat(usr, "<span class='warning'>The strike team has not yet deployed.</span>")
// return
if(..())
@@ -294,14 +294,14 @@ var/specops_shuttle_timeleft = 0
if(!specops_shuttle_at_station|| specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom) return
if(!specops_can_move())
to_chat(usr, "\blue Central Command will not allow the Special Operations shuttle to return yet.")
to_chat(usr, "<span class='notice'>Central Command will not allow the Special Operations shuttle to return yet.</span>")
if(world.timeofday <= specops_shuttle_timereset)
if(((world.timeofday - specops_shuttle_timereset)/10) > 60)
to_chat(usr, "\blue [-((world.timeofday - specops_shuttle_timereset)/10)/60] minutes remain!")
to_chat(usr, "\blue [-(world.timeofday - specops_shuttle_timereset)/10] seconds remain!")
to_chat(usr, "<span class='notice'>[-((world.timeofday - specops_shuttle_timereset)/10)/60] minutes remain!</span>")
to_chat(usr, "<span class='notice'>[-(world.timeofday - specops_shuttle_timereset)/10] seconds remain!</span>")
return
to_chat(usr, "\blue The Special Operations shuttle will arrive at Central Command in [(SPECOPS_MOVETIME/10)] seconds.")
to_chat(usr, "<span class='notice'>The Special Operations shuttle will arrive at Central Command in [(SPECOPS_MOVETIME/10)] seconds.</span>")
temp += "Shuttle departing.<BR><BR><A href='?src=[UID()];mainmenu=1'>OK</A>"
updateUsrDialog()
@@ -315,10 +315,10 @@ var/specops_shuttle_timeleft = 0
if(specops_shuttle_at_station || specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom) return
if(!specops_can_move())
to_chat(usr, "\red The Special Operations shuttle is unable to leave.")
to_chat(usr, "<span class='warning'>The Special Operations shuttle is unable to leave.</span>")
return
to_chat(usr, "\blue The Special Operations shuttle will arrive on [station_name] in [(SPECOPS_MOVETIME/10)] seconds.")
to_chat(usr, "<span class='notice'>The Special Operations shuttle will arrive on [station_name] in [(SPECOPS_MOVETIME/10)] seconds.</span>")
temp += "Shuttle departing.<BR><BR><A href='?src=[UID()];mainmenu=1'>OK</A>"
updateUsrDialog()
+2 -2
View File
@@ -140,8 +140,8 @@ td.cost.toomuch {
updateUsrDialog()
return
if(!centcomm_store.PlaceOrder(usr,itemID))
to_chat(usr, "\red Unable to charge your account.")
to_chat(usr, "<span class='warning'>Unable to charge your account.</span>")
else
to_chat(usr, "\blue You've successfully purchased the item. It should be in your hands or on the floor.")
to_chat(usr, "<span class='notice'>You've successfully purchased the item. It should be in your hands or on the floor.</span>")
src.updateUsrDialog()
return
@@ -60,7 +60,7 @@ var/syndicate_elite_shuttle_timeleft = 0
if(syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_mothership) return
if(!syndicate_elite_can_move())
to_chat(usr, "\red The Syndicate Elite shuttle is unable to leave.")
to_chat(usr, "<span class='warning'>The Syndicate Elite shuttle is unable to leave.</span>")
return
sleep(600)
@@ -172,7 +172,7 @@ var/syndicate_elite_shuttle_timeleft = 0
for(var/turf/T in get_area_turfs(end_location) )
var/mob/M = locate(/mob) in T
to_chat(M, "\red You have arrived to [station_name]. Commence operation!")
to_chat(M, "<span class='warning'>You have arrived to [station_name]. Commence operation!</span>")
/proc/syndicate_elite_can_move()
if(syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_mothership) return 0
@@ -182,22 +182,22 @@ var/syndicate_elite_shuttle_timeleft = 0
return attack_hand(user)
/obj/machinery/computer/syndicate_elite_shuttle/attack_ai(var/mob/user as mob)
to_chat(user, "\red Access Denied.")
to_chat(user, "<span class='warning'>Access Denied.</span>")
return 1
/obj/machinery/computer/syndicate_elite_shuttle/attackby(I as obj, user as mob, params)
if(istype(I,/obj/item/weapon/card/emag))
to_chat(user, "\blue The electronic systems in this console are far too advanced for your primitive hacking peripherals.")
to_chat(user, "<span class='notice'>The electronic systems in this console are far too advanced for your primitive hacking peripherals.</span>")
else
return attack_hand(user)
/obj/machinery/computer/syndicate_elite_shuttle/attack_hand(var/mob/user as mob)
if(!allowed(user))
to_chat(user, "\red Access Denied.")
to_chat(user, "<span class='warning'>Access Denied.</span>")
return
// if(sent_syndicate_strike_team == 0)
// to_chat(usr, "\red The strike team has not yet deployed.")
// to_chat(usr, "<span class='warning'>The strike team has not yet deployed.</span>")
// return
if(..())
@@ -227,17 +227,17 @@ var/syndicate_elite_shuttle_timeleft = 0
if(href_list["sendtodock"])
if(!syndicate_elite_shuttle_at_station|| syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_mothership) return
to_chat(usr, "\blue The Syndicate will not allow the Elite Squad shuttle to return.")
to_chat(usr, "<span class='notice'>The Syndicate will not allow the Elite Squad shuttle to return.</span>")
return
else if(href_list["sendtostation"])
if(syndicate_elite_shuttle_at_station || syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_mothership) return
if(!specops_can_move())
to_chat(usr, "\red The Syndicate Elite shuttle is unable to leave.")
to_chat(usr, "<span class='warning'>The Syndicate Elite shuttle is unable to leave.</span>")
return
to_chat(usr, "\blue The Syndicate Elite shuttle will arrive on [station_name] in [(SYNDICATE_ELITE_MOVETIME/10)] seconds.")
to_chat(usr, "<span class='notice'>The Syndicate Elite shuttle will arrive on [station_name] in [(SYNDICATE_ELITE_MOVETIME/10)] seconds.</span>")
temp = "Shuttle departing.<BR><BR><A href='?src=[UID()];mainmenu=1'>OK</A>"
updateUsrDialog()
@@ -0,0 +1,37 @@
/obj/machinery/computer/vr_control
name = "VR console"
desc = "A list and control panel for all virtual servers."
icon_screen = "comm_logs"
light_color = LIGHT_COLOR_DARKGREEN
/obj/machinery/computer/vr_control/New()
..()
/obj/machinery/computer/vr_control/Destroy()
return ..()
/obj/machinery/computer/vr_control/attack_ai(mob/user)
attack_hand(user)
ui_interact(user)
/obj/machinery/computer/vr_control/attack_hand(mob/user)
add_fingerprint(user)
if(stat & (BROKEN|NOPOWER))
return
ui_interact(user)
/obj/machinery/computer/vr_control/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
switch(alert("What would you like to do?", "VR Control", "Join Room", "Make Room", "Cancel"))
if("Join Room")
spawn_vr_avatar(user, input(user, "Choose a room to join.","Select Level") as null|anything in vr_rooms)
qdel(user)
if("Make Room")
make_vr_room(input(user, "Name your new Room","Name here.") as null|text, input(user, "Choose a Level to load into your new Room.","Select Level") as null|anything in vr_templates)
if("Cancel")
return
/obj/machinery/computer/vr_control/interact(mob/user)
+3 -3
View File
@@ -265,7 +265,7 @@
/obj/machinery/atmospherics/unary/cryo_cell/attackby(var/obj/item/weapon/G as obj, var/mob/user as mob, params)
if(istype(G, /obj/item/weapon/reagent_containers/glass))
if(beaker)
to_chat(user, "\red A beaker is already loaded into the machine.")
to_chat(user, "<span class='warning'>A beaker is already loaded into the machine.</span>")
return
if(!user.drop_item())
to_chat(user, "The [G] is stuck to you!")
@@ -415,10 +415,10 @@
to_chat(usr, "<span class='danger'>The cryo cell is already occupied!</span>")
return
if(M.abiotic())
to_chat(usr, "\red Subject may not have abiotic items on.")
to_chat(usr, "<span class='warning'>Subject may not have abiotic items on.</span>")
return
if(!node)
to_chat(usr, "\red The cell is not correctly connected to its pipe network!")
to_chat(usr, "<span class='warning'>The cell is not correctly connected to its pipe network!</span>")
return
M.stop_pulling()
M.forceMove(src)
+7 -7
View File
@@ -65,11 +65,11 @@ for reference:
/obj/structure/barricade/attackby(obj/item/W as obj, mob/user as mob, params)
if(istype(W, stacktype))
if(src.health < src.maxhealth)
visible_message("\red [user] begins to repair the [src]!")
visible_message("<span class='warning'>[user] begins to repair the [src]!</span>")
if(do_after(user, 20 * W.toolspeed, target = src))
src.health = src.maxhealth
W:use(1)
visible_message("\red [user] repairs the [src]!")
visible_message("<span class='warning'>[user] repairs the [src]!</span>")
return
else
return
@@ -189,7 +189,7 @@ for reference:
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
s.set_up(2, 1, src)
s.start()
visible_message("\red BZZzZZzZZzZT")
visible_message("<span class='warning'>BZZzZZzZZzZT</span>")
return
return
else if(istype(W, /obj/item/weapon/wrench))
@@ -197,12 +197,12 @@ for reference:
src.health = src.maxhealth
src.emagged = 0
src.req_access = list(access_security)
visible_message("\red [user] repairs the [src]!")
visible_message("<span class='warning'>[user] repairs the [src]!</span>")
return
else if(src.emagged > 0)
src.emagged = 0
src.req_access = list(access_security)
visible_message("\red [user] repairs the [src]!")
visible_message("<span class='warning'>[user] repairs the [src]!</span>")
return
return
else
@@ -224,14 +224,14 @@ for reference:
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
s.set_up(2, 1, src)
s.start()
visible_message("\red BZZzZZzZZzZT")
visible_message("<span class='warning'>BZZzZZzZZzZT</span>")
else if(src.emagged == 1)
src.emagged = 2
to_chat(user, "You short out the anchoring mechanism on the [src].")
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
s.set_up(2, 1, src)
s.start()
visible_message("\red BZZzZZzZZzZT")
visible_message("<span class='warning'>BZZzZZzZZzZT</span>")
ex_act(severity)
switch(severity)
+9 -9
View File
@@ -189,7 +189,6 @@
opacity = 0
assembly_type = /obj/structure/door_assembly/door_assembly_research
glass = 1
heat_proof = 1
/obj/machinery/door/airlock/glass_mining
name = "Maintenance Hatch"
@@ -335,7 +334,7 @@
About the new airlock wires panel:
* An airlock wire dialog can be accessed by the normal way or by using wirecutters or a multitool on the door while the wire-panel is open. This would show the following wires, which you can either wirecut/mend or send a multitool pulse through. There are 9 wires.
* one wire from the ID scanner. Sending a pulse through this flashes the red light on the door (if the door has power). If you cut this wire, the door will stop recognizing valid IDs. (If the door has 0000 access, it still opens and closes, though)
* two wires for power. Sending a pulse through either one causes a breaker to trip, disabling the door for 10 seconds if backup power is connected, or 1 minute if not (or until backup power comes back on, whichever is shorter). Cutting either one disables the main door power, but unless backup power is also cut, the backup power re-powers the door in 10 seconds. While unpowered, the door may be \red open, but bolts-raising will not work. Cutting these wires may electrocute the user.
* two wires for power. Sending a pulse through either one causes a breaker to trip, disabling the door for 10 seconds if backup power is connected, or 1 minute if not (or until backup power comes back on, whichever is shorter). Cutting either one disables the main door power, but unless backup power is also cut, the backup power re-powers the door in 10 seconds. While unpowered, the door may be open, but bolts-raising will not work. Cutting these wires may electrocute the user.
* one wire for door bolts. Sending a pulse through this drops door bolts (whether the door is powered or not) or raises them (if it is). Cutting this wire also drops the door bolts, and mending it does not raise them. If the wire is cut, trying to raise the door bolts will not work.
* two wires for backup power. Sending a pulse through either one causes a breaker to trip, but this does not disable it unless main power is down too (in which case it is disabled for 1 minute or however long it takes main power to come back, whichever is shorter). Cutting either one disables the backup door power (allowing it to be crowbarred open, but disabling bolts-raising), but may electocute the user.
* one wire for opening the door. Sending a pulse through this while the door has power makes it open the door if no access is required.
@@ -667,14 +666,14 @@ About the new airlock wires panel:
if(H.getBrainLoss() >= 60)
playsound(src.loc, 'sound/effects/bang.ogg', 25, 1)
if(!istype(H.head, /obj/item/clothing/head/helmet))
visible_message("\red [user] headbutts the airlock.")
visible_message("<span class='warning'>[user] headbutts the airlock.</span>")
var/obj/item/organ/external/affecting = H.get_organ("head")
H.Stun(5)
H.Weaken(5)
if(affecting.take_damage(10, 0))
H.UpdateDamageIcon()
else
visible_message("\red [user] headbutts the airlock. Good thing they're wearing a helmet.")
visible_message("<span class='warning'>[user] headbutts the airlock. Good thing they're wearing a helmet.</span>")
return
if(src.p_open)
@@ -844,9 +843,10 @@ About the new airlock wires panel:
playsound(loc, C.usesound, 100, 1)
user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to remove electronics from the airlock assembly.")
if(do_after(user, 40 * C.toolspeed, target = src))
to_chat(user, "\blue You removed the airlock electronics!")
to_chat(user, "<span class='notice'>You removed the airlock electronics!</span>")
var/obj/structure/door_assembly/da = new assembly_type(loc)
da.heat_proof_finished = heat_proof //tracks whether there's rglass in
da.anchored = 1
if(mineral)
da.glass = mineral
@@ -903,9 +903,9 @@ About the new airlock wires panel:
to_chat(user, "<span class='warning'>Despite your attempts, the [src] refuses to open.</span>")
return
if(arePowerSystemsOn())
to_chat(user, "\blue The airlock's motors resist your efforts to force it.")
to_chat(user, "<span class='notice'>The airlock's motors resist your efforts to force it.</span>")
else if(locked)
to_chat(user, "\blue The airlock's bolts prevent it from being forced.")
to_chat(user, "<span class='notice'>The airlock's bolts prevent it from being forced.</span>")
else if( !welded && !operating )
if(density)
if(beingcrowbarred == 0) //being fireaxe'd
@@ -913,7 +913,7 @@ About the new airlock wires panel:
if(F.wielded)
spawn(0) open(1)
else
to_chat(user, "\red You need to be wielding \the [C] to do that.")
to_chat(user, "<span class='warning'>You need to be wielding \the [C] to do that.</span>")
else
spawn(0) open(1)
else
@@ -922,7 +922,7 @@ About the new airlock wires panel:
if(F.wielded)
spawn(0) close(1)
else
to_chat(user, "\red You need to be wielding \the [C] to do that.")
to_chat(user, "<span class='warning'>You need to be wielding \the [C] to do that.</span>")
else
spawn(0) close(1)
else
+1 -1
View File
@@ -261,7 +261,7 @@ obj/machinery/access_button/attackby(obj/item/I as obj, mob/user as mob, params)
obj/machinery/access_button/attack_hand(mob/user)
add_fingerprint(usr)
if(!allowed(user))
to_chat(user, "\red Access Denied")
to_chat(user, "<span class='warning'>Access Denied</span>")
else if(radio_connection)
var/datum/signal/signal = new
+2 -2
View File
@@ -23,7 +23,7 @@
var/normalspeed = 1
var/auto_close_time = 150
var/auto_close_time_dangerous = 5
var/heat_proof = 0 // For glass airlocks/opacity firedoors
var/heat_proof = 0 // For rglass-windowed airlocks and firedoors
var/emergency = 0
var/air_properties_vary_with_direction = 0
var/block_air_zones = 1 //If set, air zones cannot merge across the door even when it is opened.
@@ -310,7 +310,7 @@
if(!glass && cameranet)
cameranet.updateVisibility(src, 0)
/obj/machinery/door/BlockSuperconductivity()
/obj/machinery/door/BlockSuperconductivity() // All non-glass airlocks block heat, this is intended.
if(opacity || heat_proof)
return 1
return 0
+2 -1
View File
@@ -3,8 +3,9 @@
desc = "That looks like it doesn't open easily."
icon = 'icons/obj/doors/rapid_pdoor.dmi'
icon_state = "pdoor1"
var/id_tag = 1.0
explosion_block = 3
heat_proof = 1
var/id_tag = 1.0
var/protected = 1
/obj/machinery/door/poddoor/preopen
+2 -2
View File
@@ -91,9 +91,9 @@ FIRE ALARM
if(istype(W, /obj/item/device/multitool))
detecting = !detecting
if(detecting)
user.visible_message("\red [user] has reconnected [src]'s detecting unit!", "You have reconnected [src]'s detecting unit.")
user.visible_message("<span class='warning'>[user] has reconnected [src]'s detecting unit!</span>", "You have reconnected [src]'s detecting unit.")
else
user.visible_message("\red [user] has disconnected [src]'s detecting unit!", "You have disconnected [src]'s detecting unit.")
user.visible_message("<span class='warning'>[user] has disconnected [src]'s detecting unit!</span>", "You have disconnected [src]'s detecting unit.")
else if(istype(W, /obj/item/weapon/wirecutters)) // cutting the wires out
to_chat(user, "<span class='warning'>You cut the wires!</span>")
+4 -4
View File
@@ -43,9 +43,9 @@
add_fingerprint(user)
disable = !disable
if(disable)
user.visible_message("\red [user] has disconnected the [src]'s flashbulb!", "\red You disconnect the [src]'s flashbulb!")
user.visible_message("<span class='warning'>[user] has disconnected the [src]'s flashbulb!</span>", "<span class='warning'>You disconnect the [src]'s flashbulb!</span>")
if(!disable)
user.visible_message("\red [user] has connected the [src]'s flashbulb!", "\red You connect the [src]'s flashbulb!")
user.visible_message("<span class='warning'>[user] has connected the [src]'s flashbulb!</span>", "<span class='warning'>You connect the [src]'s flashbulb!</span>")
//Let the AI trigger them directly.
/obj/machinery/flasher/attack_ai(mob/user)
@@ -101,11 +101,11 @@
anchored = !anchored
if(!anchored)
user.show_message(text("\red [src] can now be moved."))
user.show_message(text("<span class='warning'>[src] can now be moved.</span>"))
overlays.Cut()
else if(anchored)
user.show_message(text("\red [src] is now secured."))
user.show_message(text("<span class='warning'>[src] is now secured.</span>"))
overlays += "[base_state]-s"
// Flasher button
+2 -2
View File
@@ -57,7 +57,7 @@
if(on)
on = 0
to_chat(user, "\blue You turn off the light")
to_chat(user, "<span class='notice'>You turn off the light</span>")
set_light(0)
else
if(!cell)
@@ -65,7 +65,7 @@
if(cell.charge <= 0)
return
on = 1
to_chat(user, "\blue You turn on the light")
to_chat(user, "<span class='notice'>You turn on the light</span>")
set_light(brightness_on)
updateicon()

Some files were not shown because too many files have changed in this diff Show More