Merge branch 'master' into seperate-job-files
@@ -1,4 +1,4 @@
|
||||
[*]
|
||||
insert_final_newline = false
|
||||
insert_final_newline = true
|
||||
indent_style = tab
|
||||
indent_size = 4
|
||||
|
||||
@@ -1,6 +1,14 @@
|
||||
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may not be viewable. -->
|
||||
<!-- You can view Contributing.MD for a detailed description of the pull request process. -->
|
||||
|
||||
## About The Pull Request
|
||||
|
||||
<!-- Describe The Pull Request. Please be sure every change is documented or this can delay review and even discourage maintainers from merging your PR! -->
|
||||
|
||||
## Why It's Good For The Game
|
||||
|
||||
<!-- Please add a short description of why you think these changes would benefit the game. If you can't justify it in words, it might not be worth adding. -->
|
||||
|
||||
## Changelog
|
||||
:cl:
|
||||
add: Added new things
|
||||
@@ -23,9 +31,3 @@ server: something server ops should know
|
||||
|
||||
<!-- Both :cl:'s are required for the changelog to work! You can put your name to the right of the first :cl: if you want to overwrite your GitHub username as author ingame. -->
|
||||
<!-- You can use multiple of the same prefix (they're only used for the icon ingame) and delete the unneeded ones. Despite some of the tags, changelogs should generally represent how a player might be affected by the changes rather than a summary of the PR's contents. -->
|
||||
## About The Pull Request
|
||||
|
||||
<!-- Describe The Pull Request. Please be sure every change is documented or this can delay review and even discourage maintainers from merging your PR! -->
|
||||
## Why It's Good For The Game
|
||||
|
||||
<!-- Please add a short description of why you think these changes would benefit the game. If you can't justify it in words, it might not be worth adding. -->
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"recommendations": [
|
||||
"gbasood.byond-dm-language-support",
|
||||
"platymuus.dm-langclient"
|
||||
"platymuus.dm-langclient",
|
||||
"EditorConfig.EditorConfig"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -4482,8 +4482,7 @@
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "0-2";
|
||||
pixel_y = 1
|
||||
icon_state = "0-2"
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "2-8"
|
||||
@@ -6169,8 +6168,7 @@
|
||||
"oE" = (
|
||||
/obj/structure/cable,
|
||||
/obj/structure/cable{
|
||||
icon_state = "0-2";
|
||||
pixel_y = 1
|
||||
icon_state = "0-2"
|
||||
},
|
||||
/obj/machinery/power/compressor{
|
||||
comp_id = "syndie_lavaland_incineratorturbine";
|
||||
|
||||
@@ -161,9 +161,6 @@
|
||||
/obj/effect/turf_decal/tile/bar{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plasteel{
|
||||
initial_gas_mix = "TEMP=2.7"
|
||||
},
|
||||
/turf/open/floor/plating/airless{
|
||||
icon_state = "platingdmg2"
|
||||
},
|
||||
|
||||
@@ -1051,8 +1051,7 @@
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "0-2";
|
||||
pixel_y = 1
|
||||
icon_state = "0-2"
|
||||
},
|
||||
/obj/structure/reagent_dispensers/fueltank,
|
||||
/obj/item/clothing/head/welding,
|
||||
|
||||
@@ -2714,7 +2714,6 @@
|
||||
"gg" = (
|
||||
/obj/machinery/atmospherics/components/unary/outlet_injector/on,
|
||||
/turf/open/floor/plating/asteroid/snow/ice,
|
||||
/turf/open/floor/plating/snowed/cavern,
|
||||
/area/awaymission/snowdin/post/cavern2)
|
||||
"gh" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
@@ -2900,11 +2899,6 @@
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/snowdin/post/gateway)
|
||||
"gx" = (
|
||||
/obj/structure/barricade/wooden/snowed,
|
||||
/turf/open/floor/plating/asteroid/snow/ice,
|
||||
/turf/open/floor/plating/snowed/cavern,
|
||||
/area/awaymission/snowdin/cave/cavern)
|
||||
"gy" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
|
||||
piping_layer = 3;
|
||||
@@ -8570,10 +8564,6 @@
|
||||
},
|
||||
/turf/open/floor/plasteel/dark/snowdin,
|
||||
/area/awaymission/snowdin/outside)
|
||||
"sT" = (
|
||||
/turf/open/floor/plating/snowed/smoothed,
|
||||
/turf/open/floor/plating/snowed,
|
||||
/area/awaymission/snowdin/outside)
|
||||
"sU" = (
|
||||
/obj/effect/turf_decal/weather/snow,
|
||||
/obj/effect/turf_decal/stripes/white/line{
|
||||
@@ -11446,10 +11436,6 @@
|
||||
},
|
||||
/turf/open/floor/plating/snowed,
|
||||
/area/awaymission/snowdin/outside)
|
||||
"AD" = (
|
||||
/turf/open/floor/plating,
|
||||
/turf/open/floor/plating/snowed,
|
||||
/area/awaymission/snowdin/outside)
|
||||
"AE" = (
|
||||
/obj/item/pen,
|
||||
/turf/open/floor/plating{
|
||||
@@ -12105,10 +12091,6 @@
|
||||
},
|
||||
/turf/open/floor/plating/asteroid/snow,
|
||||
/area/awaymission/snowdin/outside)
|
||||
"Cx" = (
|
||||
/turf/open/floor/plating/asteroid/snow/ice,
|
||||
/turf/open/floor/plating/snowed/cavern,
|
||||
/area/awaymission/snowdin/cave/cavern)
|
||||
"Cy" = (
|
||||
/obj/machinery/light/small{
|
||||
brightness = 3;
|
||||
@@ -24247,7 +24229,7 @@ am
|
||||
af
|
||||
sx
|
||||
sJ
|
||||
sT
|
||||
te
|
||||
te
|
||||
te
|
||||
te
|
||||
@@ -24333,7 +24315,7 @@ af
|
||||
af
|
||||
af
|
||||
dX
|
||||
sT
|
||||
te
|
||||
te
|
||||
te
|
||||
te
|
||||
@@ -24504,7 +24486,7 @@ af
|
||||
am
|
||||
sx
|
||||
sK
|
||||
sT
|
||||
te
|
||||
te
|
||||
te
|
||||
te
|
||||
@@ -24590,7 +24572,7 @@ af
|
||||
af
|
||||
af
|
||||
dX
|
||||
sT
|
||||
te
|
||||
te
|
||||
te
|
||||
te
|
||||
@@ -24761,7 +24743,7 @@ ak
|
||||
af
|
||||
sx
|
||||
sJ
|
||||
sT
|
||||
te
|
||||
te
|
||||
te
|
||||
te
|
||||
@@ -24796,7 +24778,7 @@ dX
|
||||
dX
|
||||
dX
|
||||
dX
|
||||
sT
|
||||
te
|
||||
te
|
||||
te
|
||||
te
|
||||
@@ -24847,7 +24829,7 @@ dX
|
||||
dX
|
||||
dX
|
||||
dX
|
||||
sT
|
||||
te
|
||||
te
|
||||
te
|
||||
te
|
||||
@@ -25018,7 +25000,7 @@ af
|
||||
fq
|
||||
sx
|
||||
sK
|
||||
sT
|
||||
te
|
||||
te
|
||||
te
|
||||
te
|
||||
@@ -25104,7 +25086,7 @@ af
|
||||
af
|
||||
af
|
||||
dX
|
||||
sT
|
||||
te
|
||||
te
|
||||
te
|
||||
te
|
||||
@@ -25275,7 +25257,7 @@ af
|
||||
sf
|
||||
sx
|
||||
sJ
|
||||
sT
|
||||
te
|
||||
te
|
||||
te
|
||||
te
|
||||
@@ -25361,7 +25343,7 @@ af
|
||||
af
|
||||
af
|
||||
dX
|
||||
sT
|
||||
te
|
||||
te
|
||||
te
|
||||
te
|
||||
@@ -26659,7 +26641,7 @@ zK
|
||||
oa
|
||||
te
|
||||
Au
|
||||
AD
|
||||
te
|
||||
yW
|
||||
af
|
||||
ag
|
||||
@@ -59996,8 +59978,8 @@ qi
|
||||
qi
|
||||
qi
|
||||
qi
|
||||
gx
|
||||
gx
|
||||
tP
|
||||
tP
|
||||
oZ
|
||||
oZ
|
||||
oZ
|
||||
@@ -61132,7 +61114,7 @@ qi
|
||||
oZ
|
||||
oZ
|
||||
oZ
|
||||
Cx
|
||||
oZ
|
||||
qi
|
||||
oZ
|
||||
oZ
|
||||
@@ -64215,7 +64197,7 @@ sY
|
||||
oZ
|
||||
oZ
|
||||
sY
|
||||
Cx
|
||||
oZ
|
||||
oZ
|
||||
oZ
|
||||
sY
|
||||
@@ -64472,7 +64454,7 @@ oZ
|
||||
oY
|
||||
oZ
|
||||
oZ
|
||||
Cx
|
||||
oZ
|
||||
oZ
|
||||
oZ
|
||||
oZ
|
||||
|
||||
@@ -249,7 +249,6 @@
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "damaged4"
|
||||
},
|
||||
/turf/closed/wall/mineral/plastitanium,
|
||||
/area/awaymission/research/interior/engineering)
|
||||
"aT" = (
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/sword,
|
||||
@@ -259,9 +258,6 @@
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "damaged1"
|
||||
},
|
||||
/turf/closed/wall/mineral/plastitanium{
|
||||
dir = 4
|
||||
},
|
||||
/area/awaymission/research/interior/engineering)
|
||||
"aV" = (
|
||||
/obj/item/stack/sheet/plasteel,
|
||||
@@ -344,7 +340,6 @@
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "damaged5"
|
||||
},
|
||||
/turf/closed/wall/mineral/plastitanium,
|
||||
/area/awaymission/research/interior/engineering)
|
||||
"bd" = (
|
||||
/turf/open/floor/plasteel{
|
||||
|
||||
@@ -7529,7 +7529,6 @@
|
||||
"qj" = (
|
||||
/obj/machinery/atmospherics/components/unary/outlet_injector/on,
|
||||
/turf/open/floor/plating/asteroid/snow/ice,
|
||||
/turf/open/floor/plating/snowed/cavern,
|
||||
/area/awaymission/snowdin/post/cavern2)
|
||||
"qk" = (
|
||||
/obj/structure/closet/cabinet,
|
||||
@@ -8673,10 +8672,6 @@
|
||||
},
|
||||
/turf/open/floor/plasteel/dark/snowdin,
|
||||
/area/awaymission/snowdin/outside)
|
||||
"sT" = (
|
||||
/turf/open/floor/plating/snowed/smoothed,
|
||||
/turf/open/floor/plating/snowed,
|
||||
/area/awaymission/snowdin/outside)
|
||||
"sU" = (
|
||||
/obj/effect/turf_decal/weather/snow,
|
||||
/obj/effect/turf_decal/stripes/white/line{
|
||||
@@ -8932,11 +8927,6 @@
|
||||
/mob/living/simple_animal/hostile/poison/giant_spider/nurse/ice,
|
||||
/turf/open/floor/plating/asteroid/snow/ice,
|
||||
/area/awaymission/snowdin/cave/cavern)
|
||||
"tM" = (
|
||||
/obj/structure/barricade/wooden/snowed,
|
||||
/turf/open/floor/plating/asteroid/snow/ice,
|
||||
/turf/open/floor/plating/snowed/cavern,
|
||||
/area/awaymission/snowdin/cave/cavern)
|
||||
"tN" = (
|
||||
/turf/open/floor/plating/ice/smooth,
|
||||
/area/awaymission/snowdin/outside)
|
||||
@@ -11560,7 +11550,6 @@
|
||||
/area/awaymission/snowdin/outside)
|
||||
"AD" = (
|
||||
/turf/open/floor/plating,
|
||||
/turf/open/floor/plating/snowed,
|
||||
/area/awaymission/snowdin/outside)
|
||||
"AE" = (
|
||||
/obj/item/pen,
|
||||
@@ -12226,10 +12215,6 @@
|
||||
},
|
||||
/turf/open/floor/plating/asteroid/snow,
|
||||
/area/awaymission/snowdin/outside)
|
||||
"Cx" = (
|
||||
/turf/open/floor/plating/asteroid/snow/ice,
|
||||
/turf/open/floor/plating/snowed/cavern,
|
||||
/area/awaymission/snowdin/cave/cavern)
|
||||
"Cy" = (
|
||||
/obj/machinery/light/small{
|
||||
brightness = 3;
|
||||
@@ -13694,13 +13679,11 @@
|
||||
name = "mining conveyor"
|
||||
},
|
||||
/turf/open/floor/plating/asteroid/snow/ice,
|
||||
/turf/open/floor/plating/snowed/cavern,
|
||||
/area/awaymission/snowdin/cave/cavern)
|
||||
"FO" = (
|
||||
/obj/effect/turf_decal/stripes/line,
|
||||
/obj/effect/turf_decal/loading_area,
|
||||
/turf/open/floor/plating/asteroid/snow/ice,
|
||||
/turf/open/floor/plating/snowed/cavern,
|
||||
/area/awaymission/snowdin/cave/cavern)
|
||||
"FQ" = (
|
||||
/obj/effect/light_emitter{
|
||||
@@ -13772,7 +13755,6 @@
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plating/asteroid/snow/ice,
|
||||
/turf/open/floor/plating/snowed/cavern,
|
||||
/area/awaymission/snowdin/post/mining_dock)
|
||||
"FZ" = (
|
||||
/turf/closed/wall/ice,
|
||||
@@ -15836,7 +15818,6 @@
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plating/asteroid/snow/ice,
|
||||
/turf/open/floor/plating/snowed/cavern,
|
||||
/area/awaymission/snowdin/cave/cavern)
|
||||
"Xu" = (
|
||||
/obj/effect/turf_decal/stripes/corner{
|
||||
@@ -15856,7 +15837,6 @@
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plating/asteroid/snow/ice,
|
||||
/turf/open/floor/plating/snowed/cavern,
|
||||
/area/awaymission/snowdin/cave/cavern)
|
||||
"Yn" = (
|
||||
/obj/machinery/door/airlock/external/glass,
|
||||
@@ -24399,7 +24379,7 @@ am
|
||||
af
|
||||
sx
|
||||
sJ
|
||||
sT
|
||||
dX
|
||||
te
|
||||
te
|
||||
te
|
||||
@@ -24485,7 +24465,7 @@ af
|
||||
af
|
||||
af
|
||||
dX
|
||||
sT
|
||||
dX
|
||||
te
|
||||
te
|
||||
te
|
||||
@@ -24656,7 +24636,7 @@ af
|
||||
am
|
||||
sx
|
||||
sK
|
||||
sT
|
||||
dX
|
||||
te
|
||||
te
|
||||
te
|
||||
@@ -24742,7 +24722,7 @@ af
|
||||
af
|
||||
af
|
||||
dX
|
||||
sT
|
||||
dX
|
||||
te
|
||||
te
|
||||
te
|
||||
@@ -24913,7 +24893,7 @@ ak
|
||||
af
|
||||
sx
|
||||
sJ
|
||||
sT
|
||||
dX
|
||||
te
|
||||
te
|
||||
te
|
||||
@@ -24948,7 +24928,7 @@ dX
|
||||
dX
|
||||
dX
|
||||
dX
|
||||
sT
|
||||
dX
|
||||
te
|
||||
te
|
||||
te
|
||||
@@ -24999,7 +24979,7 @@ dX
|
||||
dX
|
||||
dX
|
||||
dX
|
||||
sT
|
||||
dX
|
||||
te
|
||||
te
|
||||
te
|
||||
@@ -25170,7 +25150,7 @@ af
|
||||
fq
|
||||
sx
|
||||
sK
|
||||
sT
|
||||
dX
|
||||
te
|
||||
te
|
||||
te
|
||||
@@ -25256,7 +25236,7 @@ af
|
||||
af
|
||||
af
|
||||
dX
|
||||
sT
|
||||
dX
|
||||
te
|
||||
te
|
||||
te
|
||||
@@ -25427,7 +25407,7 @@ af
|
||||
sf
|
||||
sx
|
||||
sJ
|
||||
sT
|
||||
dX
|
||||
te
|
||||
te
|
||||
te
|
||||
@@ -25513,7 +25493,7 @@ af
|
||||
af
|
||||
af
|
||||
dX
|
||||
sT
|
||||
dX
|
||||
te
|
||||
te
|
||||
te
|
||||
@@ -60148,8 +60128,8 @@ qi
|
||||
qi
|
||||
qi
|
||||
qi
|
||||
tM
|
||||
tM
|
||||
tP
|
||||
tP
|
||||
oZ
|
||||
oZ
|
||||
oZ
|
||||
@@ -61284,7 +61264,7 @@ qi
|
||||
oZ
|
||||
oZ
|
||||
oZ
|
||||
Cx
|
||||
oZ
|
||||
qi
|
||||
oZ
|
||||
oZ
|
||||
@@ -64367,7 +64347,7 @@ sY
|
||||
oZ
|
||||
oZ
|
||||
sY
|
||||
Cx
|
||||
oZ
|
||||
oZ
|
||||
oZ
|
||||
sY
|
||||
@@ -64624,7 +64604,7 @@ oZ
|
||||
oY
|
||||
oZ
|
||||
oZ
|
||||
Cx
|
||||
oZ
|
||||
oZ
|
||||
oZ
|
||||
oZ
|
||||
|
||||
@@ -6904,8 +6904,7 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "0-2";
|
||||
pixel_y = 1
|
||||
icon_state = "0-2"
|
||||
},
|
||||
/turf/open/floor/circuit/green,
|
||||
/area/engine/atmospherics_engine)
|
||||
@@ -6914,19 +6913,7 @@
|
||||
dir = 10
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "0-2";
|
||||
pixel_y = 1
|
||||
},
|
||||
/obj/machinery/power/emitter/anchored{
|
||||
dir = 1;
|
||||
state = 2
|
||||
},
|
||||
/turf/open/floor/circuit/green,
|
||||
/area/engine/atmospherics_engine)
|
||||
"ars" = (
|
||||
/obj/structure/cable{
|
||||
icon_state = "0-2";
|
||||
pixel_y = 1
|
||||
icon_state = "0-2"
|
||||
},
|
||||
/obj/machinery/power/emitter/anchored{
|
||||
dir = 1;
|
||||
@@ -23200,7 +23187,6 @@
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/machinery/atmospherics/components/binary/pump{
|
||||
dir = 1;
|
||||
icon_state = "pump_map";
|
||||
name = "Port to Turbine"
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -23221,7 +23207,6 @@
|
||||
},
|
||||
/obj/machinery/atmospherics/components/binary/pump{
|
||||
dir = 1;
|
||||
icon_state = "pump_map";
|
||||
name = "Port to Filter"
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -155995,7 +155980,7 @@ amH
|
||||
gXw
|
||||
amH
|
||||
aqM
|
||||
ars
|
||||
ark
|
||||
asA
|
||||
atY
|
||||
avh
|
||||
|
||||
@@ -26534,8 +26534,7 @@
|
||||
pixel_y = 24
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "0-2";
|
||||
pixel_y = 1
|
||||
icon_state = "0-2"
|
||||
},
|
||||
/turf/open/floor/plasteel/freezer,
|
||||
/area/storage/emergency/port)
|
||||
@@ -59470,8 +59469,7 @@
|
||||
/area/science/xenobiology)
|
||||
"tfw" = (
|
||||
/obj/structure/cable{
|
||||
icon_state = "0-2";
|
||||
pixel_y = 1
|
||||
icon_state = "0-2"
|
||||
},
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/space/nearstation)
|
||||
@@ -60023,14 +60021,6 @@
|
||||
dir = 1
|
||||
},
|
||||
/area/hallway/secondary/exit/departure_lounge)
|
||||
"uMe" = (
|
||||
/obj/structure/cable{
|
||||
icon_state = "0-2";
|
||||
pixel_y = 1
|
||||
},
|
||||
/obj/structure/grille,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/department/engine)
|
||||
"uMo" = (
|
||||
/obj/effect/turf_decal/stripes/line,
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
@@ -88545,7 +88535,7 @@ bPB
|
||||
bPB
|
||||
bPB
|
||||
uwX
|
||||
uMe
|
||||
wMM
|
||||
lTC
|
||||
bXd
|
||||
cif
|
||||
@@ -88802,7 +88792,7 @@ bQZ
|
||||
bTm
|
||||
bPB
|
||||
bUG
|
||||
uMe
|
||||
wMM
|
||||
hzc
|
||||
bXe
|
||||
krU
|
||||
|
||||
@@ -1656,8 +1656,7 @@
|
||||
/area/quartermaster/storage)
|
||||
"eP" = (
|
||||
/obj/structure/cable{
|
||||
icon_state = "0-2";
|
||||
pixel_y = 1
|
||||
icon_state = "0-2"
|
||||
},
|
||||
/obj/machinery/power/apc{
|
||||
dir = 8;
|
||||
@@ -2277,8 +2276,7 @@
|
||||
/area/quartermaster/miningoffice)
|
||||
"gi" = (
|
||||
/obj/structure/cable{
|
||||
icon_state = "0-2";
|
||||
pixel_y = 1
|
||||
icon_state = "0-2"
|
||||
},
|
||||
/obj/machinery/power/apc{
|
||||
dir = 1;
|
||||
|
||||
@@ -1478,8 +1478,7 @@
|
||||
charge = 1e+006
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "0-2";
|
||||
pixel_y = 1
|
||||
icon_state = "0-2"
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
|
||||
@@ -178,8 +178,7 @@
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/structure/cable{
|
||||
icon_state = "0-2";
|
||||
pixel_y = 1
|
||||
icon_state = "0-2"
|
||||
},
|
||||
/obj/machinery/power/apc{
|
||||
dir = 8;
|
||||
@@ -1432,8 +1431,7 @@
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "0-2";
|
||||
pixel_y = 1
|
||||
icon_state = "0-2"
|
||||
},
|
||||
/obj/machinery/space_heater,
|
||||
/turf/open/floor/plating,
|
||||
|
||||
@@ -1413,8 +1413,7 @@
|
||||
pixel_x = -4
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "0-2";
|
||||
pixel_y = 1
|
||||
icon_state = "0-2"
|
||||
},
|
||||
/obj/machinery/power/apc{
|
||||
dir = 1;
|
||||
@@ -1941,8 +1940,7 @@
|
||||
req_access = null
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "0-2";
|
||||
pixel_y = 1
|
||||
icon_state = "0-2"
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/shuttle/abandoned/cargo)
|
||||
@@ -2376,8 +2374,7 @@
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/structure/cable{
|
||||
icon_state = "0-2";
|
||||
pixel_y = 1
|
||||
icon_state = "0-2"
|
||||
},
|
||||
/obj/machinery/power/terminal{
|
||||
dir = 1
|
||||
|
||||
@@ -17,10 +17,6 @@
|
||||
},
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/ruin/powered/shuttle/medium_3)
|
||||
"g" = (
|
||||
/turf/closed/wall/mineral/plastitanium,
|
||||
/turf/closed/wall/mineral/titanium,
|
||||
/area/ruin/powered/shuttle/medium_3)
|
||||
"h" = (
|
||||
/turf/closed/wall/mineral/titanium,
|
||||
/area/ruin/powered/shuttle/medium_3)
|
||||
@@ -271,20 +267,20 @@ a
|
||||
a
|
||||
a
|
||||
c
|
||||
g
|
||||
h
|
||||
h
|
||||
g
|
||||
c
|
||||
g
|
||||
h
|
||||
h
|
||||
c
|
||||
c
|
||||
c
|
||||
j
|
||||
j
|
||||
g
|
||||
c
|
||||
g
|
||||
c
|
||||
c
|
||||
h
|
||||
h
|
||||
g
|
||||
c
|
||||
c
|
||||
a
|
||||
a
|
||||
@@ -343,7 +339,7 @@ a
|
||||
c
|
||||
c
|
||||
c
|
||||
g
|
||||
c
|
||||
G
|
||||
l
|
||||
l
|
||||
@@ -356,7 +352,7 @@ l
|
||||
l
|
||||
l
|
||||
G
|
||||
g
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
@@ -391,7 +387,7 @@ a
|
||||
a
|
||||
c
|
||||
c
|
||||
g
|
||||
c
|
||||
G
|
||||
p
|
||||
G
|
||||
@@ -404,7 +400,7 @@ A
|
||||
G
|
||||
p
|
||||
G
|
||||
g
|
||||
c
|
||||
c
|
||||
c
|
||||
a
|
||||
@@ -463,7 +459,7 @@ a
|
||||
a
|
||||
c
|
||||
c
|
||||
g
|
||||
c
|
||||
G
|
||||
p
|
||||
G
|
||||
@@ -476,7 +472,7 @@ A
|
||||
G
|
||||
p
|
||||
G
|
||||
g
|
||||
c
|
||||
c
|
||||
c
|
||||
a
|
||||
@@ -511,7 +507,7 @@ a
|
||||
c
|
||||
c
|
||||
c
|
||||
g
|
||||
c
|
||||
G
|
||||
l
|
||||
l
|
||||
@@ -524,7 +520,7 @@ l
|
||||
l
|
||||
l
|
||||
G
|
||||
g
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
@@ -583,20 +579,20 @@ a
|
||||
a
|
||||
a
|
||||
c
|
||||
g
|
||||
h
|
||||
h
|
||||
g
|
||||
c
|
||||
g
|
||||
h
|
||||
h
|
||||
c
|
||||
c
|
||||
c
|
||||
j
|
||||
j
|
||||
g
|
||||
c
|
||||
g
|
||||
c
|
||||
c
|
||||
h
|
||||
h
|
||||
g
|
||||
c
|
||||
c
|
||||
a
|
||||
a
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
#define INSULATED /datum/mutation/human/insulated
|
||||
#define SHOCKTOUCH /datum/mutation/human/shock
|
||||
#define OLFACTION /datum/mutation/human/olfaction
|
||||
#define YELLING /datum/mutation/human/yelling
|
||||
|
||||
#define UI_CHANGED "ui changed"
|
||||
#define UE_CHANGED "ue changed"
|
||||
|
||||
@@ -14,6 +14,10 @@
|
||||
#define RUNELESS_MAX_BLOODCHARGE 1
|
||||
#define CULT_RISEN 0.2 //percent before rise
|
||||
#define CULT_ASCENDENT 0.4 //percent before ascend
|
||||
#define BLOOD_SPEAR_COST 150
|
||||
#define BLOOD_BARRAGE_COST 300
|
||||
#define BLOOD_BEAM_COST 500
|
||||
#define METAL_TO_CONSTRUCT_SHELL_CONVERSION 50
|
||||
//screen locations
|
||||
#define DEFAULT_BLOODSPELLS "6:-29,4:-2"
|
||||
#define DEFAULT_BLOODTIP "14:6,14:27"
|
||||
|
||||
@@ -27,3 +27,5 @@
|
||||
#define DEL_REAGENT 1 // reagent deleted (fully cleared)
|
||||
#define ADD_REAGENT 2 // reagent added
|
||||
#define REM_REAGENT 3 // reagent removed (may still exist)
|
||||
|
||||
#define MIMEDRINK_SILENCE_DURATION 30 //ends up being 60 seconds given 1 tick every 2 seconds
|
||||
|
||||
@@ -354,6 +354,10 @@
|
||||
/datum/config_entry/string/client_error_message
|
||||
config_entry_value = "Your version of byond is too old, may have issues, and is blocked from accessing this server."
|
||||
|
||||
/datum/config_entry/number/client_error_build
|
||||
config_entry_value = null
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/minute_topic_limit
|
||||
config_entry_value = null
|
||||
min_val = 0
|
||||
|
||||
@@ -178,7 +178,7 @@
|
||||
// If set, use the custom icon that we set instead
|
||||
// of the item appearence
|
||||
..()
|
||||
else if(target && current_button.appearance_cache != target.appearance) //replace with /ref comparison if this is not valid.
|
||||
else if((target && current_button.appearance_cache != target.appearance) || force) //replace with /ref comparison if this is not valid.
|
||||
var/obj/item/I = target
|
||||
var/old_layer = I.layer
|
||||
var/old_plane = I.plane
|
||||
@@ -244,6 +244,14 @@
|
||||
/datum/action/item_action/toggle_helmet_light
|
||||
name = "Toggle Helmet Light"
|
||||
|
||||
/datum/action/item_action/toggle_welding_screen
|
||||
name = "Toggle Welding Screen"
|
||||
|
||||
/datum/action/item_action/toggle_welding_screen/Trigger()
|
||||
var/obj/item/clothing/head/hardhat/weldhat/H = target
|
||||
if(istype(H))
|
||||
H.toggle_welding_screen(owner)
|
||||
|
||||
/datum/action/item_action/toggle_headphones
|
||||
name = "Toggle Headphones"
|
||||
desc = "UNTZ UNTZ UNTZ"
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
var/can_gain = TRUE
|
||||
var/random_gain = TRUE //can this be gained through random traumas?
|
||||
var/resilience = TRAUMA_RESILIENCE_BASIC //how hard is this to cure?
|
||||
var/clonable = TRUE // will this transfer if the brain is cloned?
|
||||
|
||||
/datum/brain_trauma/Destroy()
|
||||
if(brain && brain.traumas)
|
||||
@@ -24,6 +25,10 @@
|
||||
owner = null
|
||||
return ..()
|
||||
|
||||
/datum/brain_trauma/proc/on_clone()
|
||||
if(clonable)
|
||||
return new type
|
||||
|
||||
//Called on life ticks
|
||||
/datum/brain_trauma/proc/on_life()
|
||||
return
|
||||
|
||||
@@ -31,6 +31,11 @@
|
||||
trigger_species = SStraumas.phobia_species[phobia_type]
|
||||
..()
|
||||
|
||||
|
||||
/datum/brain_trauma/mild/phobia/on_clone()
|
||||
if(clonable)
|
||||
return new type(phobia_type)
|
||||
|
||||
/datum/brain_trauma/mild/phobia/on_life()
|
||||
..()
|
||||
if(owner.has_trait(TRAIT_FEARLESS))
|
||||
|
||||
@@ -69,7 +69,8 @@
|
||||
//for descriptions
|
||||
|
||||
/datum/brain_trauma/severe/paralysis/New(specific_type)
|
||||
paralysis_type = specific_type
|
||||
if(specific_type)
|
||||
paralysis_type = specific_type
|
||||
if(!paralysis_type)
|
||||
paralysis_type = pick("full","left","right","arms","legs","r_arm","l_arm","r_leg","l_leg")
|
||||
var/subject
|
||||
@@ -117,6 +118,11 @@
|
||||
owner.remove_trait(X, "trauma_paralysis")
|
||||
owner.update_disabled_bodyparts()
|
||||
|
||||
/datum/brain_trauma/severe/paralysis/paraplegic
|
||||
random_gain = FALSE
|
||||
paralysis_type = "legs"
|
||||
resilience = TRAUMA_RESILIENCE_ABSOLUTE
|
||||
|
||||
/datum/brain_trauma/severe/narcolepsy
|
||||
name = "Narcolepsy"
|
||||
desc = "Patient may involuntarily fall asleep during normal activities."
|
||||
|
||||
@@ -33,12 +33,12 @@
|
||||
UnregisterSignal(user, COMSIG_MOB_RECEIVE_MAGIC)
|
||||
|
||||
/datum/component/anti_magic/proc/protect(datum/source, mob/user, _magic, _holy, major, self, list/protection_sources)
|
||||
if(((_magic && magic) || (_holy && holy)) && (self && blocks_self))
|
||||
if(((_magic && magic) || (_holy && holy)) && (!self || blocks_self))
|
||||
protection_sources += parent
|
||||
reaction.Invoke(user, major)
|
||||
reaction?.Invoke(user, major)
|
||||
if(major)
|
||||
charges--
|
||||
if(charges <= 0)
|
||||
expire.Invoke(user)
|
||||
expire?.Invoke(user)
|
||||
return COMPONENT_BLOCK_MAGIC
|
||||
|
||||
|
||||
@@ -116,12 +116,57 @@
|
||||
|
||||
/datum/component/mood/proc/update_mood_icon()
|
||||
var/mob/living/owner = parent
|
||||
if(owner.client && owner.hud_used)
|
||||
if(!(owner.client || owner.hud_used))
|
||||
return
|
||||
screen_obj.cut_overlays()
|
||||
screen_obj.color = initial(screen_obj.color)
|
||||
//lets see if we have any special icons to show instead of the normal mood levels
|
||||
var/list/conflicting_moodies = list()
|
||||
var/highest_absolute_mood = 0
|
||||
for(var/i in mood_events) //adds overlays and sees which special icons need to vie for which one gets the icon_state
|
||||
var/datum/mood_event/event = mood_events[i]
|
||||
if(!event.special_screen_obj)
|
||||
continue
|
||||
if(!event.special_screen_replace)
|
||||
screen_obj.add_overlay(event.special_screen_obj)
|
||||
else
|
||||
conflicting_moodies += event
|
||||
var/absmood = abs(event.mood_change)
|
||||
if(absmood > highest_absolute_mood)
|
||||
highest_absolute_mood = absmood
|
||||
|
||||
if(!conflicting_moodies.len) //no special icons- go to the normal icon states
|
||||
if(sanity < 25)
|
||||
screen_obj.icon_state = "mood_insane"
|
||||
else
|
||||
screen_obj.icon_state = "mood[mood_level]"
|
||||
screen_obj_sanity.icon_state = "sanity[sanity_level]"
|
||||
return
|
||||
|
||||
for(var/i in conflicting_moodies)
|
||||
var/datum/mood_event/event = i
|
||||
if(abs(event.mood_change) == highest_absolute_mood)
|
||||
screen_obj.icon_state = "[event.special_screen_obj]"
|
||||
switch(mood_level)
|
||||
if(1)
|
||||
screen_obj.color = "#747690"
|
||||
if(2)
|
||||
screen_obj.color = "#f15d36"
|
||||
if(3)
|
||||
screen_obj.color = "#f38a43"
|
||||
if(4)
|
||||
screen_obj.color = "#dfa65b"
|
||||
if(5)
|
||||
screen_obj.color = "#4b96c4"
|
||||
if(6)
|
||||
screen_obj.color = "#a8d259"
|
||||
if(7)
|
||||
screen_obj.color = "#86d656"
|
||||
if(8)
|
||||
screen_obj.color = "#30dd26"
|
||||
if(9)
|
||||
screen_obj.color = "#2eeb9a"
|
||||
break
|
||||
|
||||
/datum/component/mood/process() //Called on SSmood process
|
||||
var/mob/living/owner = parent
|
||||
|
||||
@@ -7,6 +7,11 @@
|
||||
mood_change = 2
|
||||
timeout = 3600
|
||||
|
||||
/datum/mood_event/wrong_brand
|
||||
description = "<span class='warning'>I hate that brand of cigarettes.</span>\n"
|
||||
mood_change = -2
|
||||
timeout = 3600
|
||||
|
||||
/datum/mood_event/overdose
|
||||
mood_change = -8
|
||||
timeout = 3000
|
||||
@@ -46,8 +51,10 @@
|
||||
description = "<span class='nicegreen'>YES! YES!! YES!!!</span>\n"
|
||||
mood_change = 100
|
||||
timeout = 300
|
||||
special_screen_obj = "mood_happiness_good"
|
||||
|
||||
/datum/mood_event/happiness_drug_bad_od
|
||||
description = "<span class='boldwarning'>NO! NO!! NO!!!</span>\n"
|
||||
mood_change = -100
|
||||
timeout = 300
|
||||
special_screen_obj = "mood_happiness_bad"
|
||||
|
||||
@@ -59,12 +59,16 @@
|
||||
description = "I'm a fucking badass and everyone around me knows it. Just look at them; they're all fucking shaking at the mere thought of me around."
|
||||
mood_change = 15
|
||||
hidden = TRUE
|
||||
special_screen_obj = "badass_sun"
|
||||
special_screen_replace = FALSE
|
||||
|
||||
/datum/mood_event/creeping
|
||||
description = "<span class='greentext'>I'm so close to my obsession and I never want this to end.</span>\n" //creeps get it when they are around their obsession
|
||||
mood_change = 18
|
||||
timeout = 30
|
||||
hidden = TRUE
|
||||
special_screen_obj = "creep_inlove"
|
||||
special_screen_replace = FALSE
|
||||
|
||||
/datum/mood_event/creeping/add_effects(name)
|
||||
description = "<span class='greentext'>I'm so close to [name] and I NEVER want this to end.</span>\n"
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
var/timeout = 0
|
||||
var/hidden = FALSE//Not shown on examine
|
||||
var/category //string of what category this mood was added in as
|
||||
var/special_screen_obj //if it isn't null, it will replace or add onto the mood icon with this (same file). see happiness drug for example
|
||||
var/special_screen_replace = TRUE //if false, it will be an overlay instead
|
||||
var/mob/owner
|
||||
|
||||
/datum/mood_event/New(mob/M, param)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/datum/mutation/human/geladikinesis
|
||||
name = "Geladikinetic Creation"
|
||||
name = "Geladikinesis"
|
||||
desc = "Allows the user to concentrate moisture and sub-zero forces into snow."
|
||||
quality = POSITIVE
|
||||
text_gain_indication = "<span class='notice'>Your hand feels cold.</span>"
|
||||
|
||||
@@ -219,3 +219,16 @@
|
||||
..()
|
||||
owner.grant_language(/datum/language/common)
|
||||
owner.remove_language(/datum/language/beachbum)
|
||||
|
||||
/datum/mutation/human/yelling
|
||||
name = "Yelling"
|
||||
desc = "A mutation that forces the host to constantly yell their sentences out."
|
||||
quality = MINOR_NEGATIVE
|
||||
locked = TRUE
|
||||
text_gain_indication = "<span class='danger'>You feel really angry.</span>"
|
||||
text_lose_indication = "<span class='notice'>You feel calmer.</span>"
|
||||
|
||||
/datum/mutation/human/yelling/say_mod(message)
|
||||
if(message)
|
||||
message = "[uppertext(replacetext(message, ".", "!"))]!"
|
||||
return (message)
|
||||
|
||||
@@ -265,6 +265,41 @@
|
||||
to_chat(quirk_holder, "<span class='boldannounce'>Your antagonistic nature has caused you to renounce your pacifism.</span>")
|
||||
qdel(src)
|
||||
|
||||
/datum/quirk/paraplegic
|
||||
name = "Paraplegic"
|
||||
desc = "Your legs do not function. Nothing will ever fix this. But hey, free wheelchair!"
|
||||
value = -3
|
||||
human_only = TRUE
|
||||
gain_text = null // Handled by trauma.
|
||||
lose_text = null
|
||||
medical_record_text = "Patient has an untreatable impairment in motor function in the lower extremities."
|
||||
|
||||
/datum/quirk/paraplegic/add()
|
||||
var/datum/brain_trauma/severe/paralysis/paraplegic/T = new()
|
||||
var/mob/living/carbon/human/H = quirk_holder
|
||||
H.gain_trauma(T, TRAUMA_RESILIENCE_ABSOLUTE)
|
||||
|
||||
/datum/quirk/paraplegic/on_spawn()
|
||||
if(quirk_holder.buckled) // Handle late joins being buckled to arrival shuttle chairs.
|
||||
quirk_holder.buckled.unbuckle_mob(quirk_holder)
|
||||
|
||||
var/turf/T = get_turf(quirk_holder)
|
||||
var/obj/structure/chair/spawn_chair = locate() in T
|
||||
|
||||
var/obj/vehicle/ridden/wheelchair/wheels = new(T)
|
||||
if(spawn_chair) // Makes spawning on the arrivals shuttle more consistent looking
|
||||
wheels.setDir(spawn_chair.dir)
|
||||
|
||||
wheels.buckle_mob(quirk_holder)
|
||||
|
||||
// During the spawning process, they may have dropped what they were holding, due to the paralysis
|
||||
// So put the things back in their hands.
|
||||
|
||||
for(var/obj/item/I in T)
|
||||
if(I.fingerprintslast == quirk_holder.ckey)
|
||||
quirk_holder.put_in_hands(I)
|
||||
|
||||
|
||||
/datum/quirk/poor_aim
|
||||
name = "Poor Aim"
|
||||
desc = "You're terrible with guns and can't line up a straight shot to save your life. Dual-wielding is right out."
|
||||
@@ -370,3 +405,114 @@
|
||||
if(prob(1))
|
||||
new/obj/item/reagent_containers/food/snacks/spaghetti/pastatomato(get_turf(H)) //now that's what I call spaghetti code
|
||||
|
||||
//If you want to make some kind of junkie variant, just extend this quirk.
|
||||
/datum/quirk/junkie
|
||||
name = "Junkie"
|
||||
desc = "You can't get enough of hard drugs."
|
||||
value = -2
|
||||
gain_text = "<span class='danger'>You suddenly feel the craving for drugs.</span>"
|
||||
lose_text = "<span class='notice'>You feel like you should kick your drug habit.</span>"
|
||||
medical_record_text = "Patient has a history of hard drugs."
|
||||
var/drug_list = list("crank", "krokodil", "morphine", "happiness", "methamphetamine") //List of possible IDs
|
||||
var/reagent_id //ID picked from list
|
||||
var/datum/reagent/reagent_type //If this is defined, reagent_id will be unused and the defined reagent type will be instead.
|
||||
var/datum/reagent/reagent_instance
|
||||
var/where_drug
|
||||
var/obj/item/drug_container_type //If this is defined before pill generation, pill generation will be skipped. This is the type of the pill bottle.
|
||||
var/obj/item/drug_instance
|
||||
var/where_accessory
|
||||
var/obj/item/accessory_type //If this is null, it won't be spawned.
|
||||
var/obj/item/accessory_instance
|
||||
var/tick_counter = 0
|
||||
|
||||
/datum/quirk/junkie/on_spawn()
|
||||
var/mob/living/carbon/human/H = quirk_holder
|
||||
reagent_id = pick(drug_list)
|
||||
if (!reagent_type)
|
||||
var/datum/reagent/prot_holder = GLOB.chemical_reagents_list[reagent_id]
|
||||
reagent_type = prot_holder.type
|
||||
reagent_instance = new reagent_type()
|
||||
H.reagents.addiction_list.Add(reagent_instance)
|
||||
var/current_turf = get_turf(quirk_holder)
|
||||
if (!drug_container_type)
|
||||
drug_container_type = /obj/item/storage/pill_bottle
|
||||
drug_instance = new drug_container_type(current_turf)
|
||||
if (istype(drug_instance, /obj/item/storage/pill_bottle))
|
||||
var/pill_state = "pill[rand(1,20)]"
|
||||
for(var/i in 1 to 7)
|
||||
var/obj/item/reagent_containers/pill/P = new(drug_instance)
|
||||
P.icon_state = pill_state
|
||||
P.list_reagents = list("[reagent_id]" = 1)
|
||||
|
||||
if (accessory_type)
|
||||
accessory_instance = new accessory_type(current_turf)
|
||||
var/list/slots = list(
|
||||
"in your left pocket" = SLOT_L_STORE,
|
||||
"in your right pocket" = SLOT_R_STORE,
|
||||
"in your backpack" = SLOT_IN_BACKPACK
|
||||
)
|
||||
where_drug = H.equip_in_one_of_slots(drug_instance, slots, FALSE) || "at your feet"
|
||||
if (accessory_instance)
|
||||
where_accessory = H.equip_in_one_of_slots(accessory_instance, slots, FALSE) || "at your feet"
|
||||
announce_drugs()
|
||||
|
||||
/datum/quirk/junkie/post_add()
|
||||
if(where_drug == "in your backpack" || where_accessory == "in your backpack")
|
||||
var/mob/living/carbon/human/H = quirk_holder
|
||||
SEND_SIGNAL(H.back, COMSIG_TRY_STORAGE_SHOW, H)
|
||||
|
||||
/datum/quirk/junkie/proc/announce_drugs()
|
||||
to_chat(quirk_holder, "<span class='boldnotice'>There is a [drug_instance.name] of [reagent_instance.name] [where_drug]. Better hope you don't run out...</span>")
|
||||
|
||||
/datum/quirk/junkie/on_process()
|
||||
var/mob/living/carbon/human/H = quirk_holder
|
||||
if (tick_counter == 60) //Halfassed optimization, increase this if there's slowdown due to this quirk
|
||||
var/in_list = FALSE
|
||||
for (var/datum/reagent/entry in H.reagents.addiction_list)
|
||||
if(istype(entry, reagent_type))
|
||||
in_list = TRUE
|
||||
break
|
||||
if(!in_list)
|
||||
H.reagents.addiction_list += reagent_instance
|
||||
reagent_instance.addiction_stage = 0
|
||||
to_chat(quirk_holder, "<span class='danger'>You thought you kicked it, but you suddenly feel like you need [reagent_instance.name] again...")
|
||||
tick_counter = 0
|
||||
else
|
||||
++tick_counter
|
||||
|
||||
/datum/quirk/junkie/smoker
|
||||
name = "Smoker"
|
||||
desc = "Sometimes you just really want a smoke. Probably not great for your lungs."
|
||||
value = -1
|
||||
gain_text = "<span class='danger'>You could really go for a smoke right about now.</span>"
|
||||
lose_text = "<span class='notice'>You feel like you should quit smoking.</span>"
|
||||
medical_record_text = "Patient is a current smoker."
|
||||
reagent_type = /datum/reagent/drug/nicotine
|
||||
accessory_type = /obj/item/lighter/greyscale
|
||||
|
||||
/datum/quirk/junkie/smoker/on_spawn()
|
||||
drug_container_type = pick(/obj/item/storage/fancy/cigarettes,
|
||||
/obj/item/storage/fancy/cigarettes/cigpack_midori,
|
||||
/obj/item/storage/fancy/cigarettes/cigpack_uplift,
|
||||
/obj/item/storage/fancy/cigarettes/cigpack_robust,
|
||||
/obj/item/storage/fancy/cigarettes/cigpack_robustgold,
|
||||
/obj/item/storage/fancy/cigarettes/cigpack_carp,
|
||||
/obj/item/storage/fancy/cigarettes/cigars,
|
||||
/obj/item/storage/fancy/cigarettes/cigars/cohiba,
|
||||
/obj/item/storage/fancy/cigarettes/cigars/havana)
|
||||
. = ..()
|
||||
|
||||
/datum/quirk/junkie/smoker/announce_drugs()
|
||||
to_chat(quirk_holder, "<span class='boldnotice'>There is a [drug_instance.name] [where_drug], and a lighter [where_accessory]. Make sure you get your favorite brand when you run out.</span>")
|
||||
|
||||
|
||||
/datum/quirk/junkie/smoker/on_process()
|
||||
. = ..()
|
||||
var/mob/living/carbon/human/H = quirk_holder
|
||||
var/obj/item/I = H.get_item_by_slot(SLOT_WEAR_MASK)
|
||||
if (istype(I, /obj/item/clothing/mask/cigarette))
|
||||
var/obj/item/storage/fancy/cigarettes/C = drug_instance
|
||||
if(istype(I, C.spawn_type))
|
||||
SEND_SIGNAL(quirk_holder, COMSIG_CLEAR_MOOD_EVENT, "wrong_cigs")
|
||||
return
|
||||
SEND_SIGNAL(quirk_holder, COMSIG_ADD_MOOD_EVENT, "wrong_cigs", /datum/mood_event/wrong_brand)
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
return T.zPassOut(src, direction, destination) && destination.zPassIn(src, direction, T)
|
||||
|
||||
/atom/movable/vv_edit_var(var_name, var_value)
|
||||
var/static/list/banned_edits = list("step_x", "step_y", "step_size")
|
||||
var/static/list/banned_edits = list("step_x", "step_y", "step_size", "bounds")
|
||||
var/static/list/careful_edits = list("bound_x", "bound_y", "bound_width", "bound_height")
|
||||
if(var_name in banned_edits)
|
||||
return FALSE //PLEASE no.
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
if(C == owner)
|
||||
continue
|
||||
var/datum/status_effect/hive_track/mark = C.has_status_effect(STATUS_EFFECT_HIVE_TRACKER)
|
||||
if(mark?.tracked_by == owner)
|
||||
if(mark && mark.tracked_by == owner)
|
||||
trackable_targets_exist = TRUE
|
||||
var/their_loc = get_turf(C)
|
||||
var/distance = get_dist_euclidian(my_loc, their_loc)
|
||||
|
||||
@@ -137,7 +137,7 @@
|
||||
return examine(user)
|
||||
|
||||
//Start growing a human clone in the pod!
|
||||
/obj/machinery/clonepod/proc/growclone(clonename, ui, mutation_index, mindref, last_death, datum/species/mrace, list/features, factions, list/quirks, datum/bank_account/insurance)
|
||||
/obj/machinery/clonepod/proc/growclone(clonename, ui, mutation_index, mindref, last_death, datum/species/mrace, list/features, factions, list/quirks, datum/bank_account/insurance, list/traumas)
|
||||
if(panel_open)
|
||||
return NONE
|
||||
if(mess || attempting)
|
||||
@@ -218,6 +218,12 @@
|
||||
var/datum/quirk/Q = new V(H)
|
||||
Q.on_clone(quirks[V])
|
||||
|
||||
for(var/t in traumas)
|
||||
var/datum/brain_trauma/BT = t
|
||||
var/datum/brain_trauma/cloned_trauma = BT.on_clone()
|
||||
if(cloned_trauma)
|
||||
H.gain_trauma(cloned_trauma, BT.resilience)
|
||||
|
||||
H.set_cloned_appearance()
|
||||
|
||||
H.set_suicide(FALSE)
|
||||
@@ -388,7 +394,6 @@
|
||||
mob_occupant.remove_trait(TRAIT_NOCRITDAMAGE, CLONING_POD_TRAIT)
|
||||
mob_occupant.remove_trait(TRAIT_NOBREATH, CLONING_POD_TRAIT)
|
||||
|
||||
|
||||
if(grab_ghost_when == CLONER_MATURE_CLONE)
|
||||
mob_occupant.grab_ghost()
|
||||
to_chat(occupant, "<span class='notice'><b>There is a bright flash!</b><br><i>You feel like a new being.</i></span>")
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
. = pod
|
||||
|
||||
/proc/grow_clone_from_record(obj/machinery/clonepod/pod, datum/data/record/R)
|
||||
return pod.growclone(R.fields["name"], R.fields["UI"], R.fields["SE"], R.fields["mind"], R.fields["last_death"], R.fields["mrace"], R.fields["features"], R.fields["factions"], R.fields["quirks"], R.fields["bank_account"])
|
||||
return pod.growclone(R.fields["name"], R.fields["UI"], R.fields["SE"], R.fields["mind"], R.fields["last_death"], R.fields["mrace"], R.fields["features"], R.fields["factions"], R.fields["quirks"], R.fields["bank_account"], R.fields["traumas"])
|
||||
|
||||
/obj/machinery/computer/cloning/process()
|
||||
if(!(scanner && LAZYLEN(pods) && autoprocess))
|
||||
@@ -474,7 +474,7 @@
|
||||
else if(pod.occupant)
|
||||
temp = "<font class='bad'>Cloning cycle already in progress.</font>"
|
||||
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
|
||||
else
|
||||
else
|
||||
var/result = grow_clone_from_record(pod, C)
|
||||
if(result & CLONING_SUCCESS)
|
||||
temp = "[C.fields["name"]] => <font class='good'>Cloning cycle in progress...</font>"
|
||||
@@ -488,7 +488,7 @@
|
||||
active_record = null
|
||||
menu = 1
|
||||
records -= C
|
||||
|
||||
|
||||
if(!success)
|
||||
temp = "[C.fields["name"]] => <font class='bad'>Initialisation failure.</font>"
|
||||
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
|
||||
@@ -567,11 +567,17 @@
|
||||
R.fields["features"] = dna.features
|
||||
R.fields["factions"] = mob_occupant.faction
|
||||
R.fields["quirks"] = list()
|
||||
R.fields["bank_account"] = has_bank_account
|
||||
for(var/V in mob_occupant.roundstart_quirks)
|
||||
var/datum/quirk/T = V
|
||||
R.fields["quirks"][T.type] = T.clone_data()
|
||||
|
||||
R.fields["traumas"] = list()
|
||||
if(ishuman(mob_occupant))
|
||||
R.fields["traumas"] = C.get_traumas()
|
||||
if(isbrain(mob_occupant))
|
||||
R.fields["traumas"] = B.get_traumas()
|
||||
|
||||
R.fields["bank_account"] = has_bank_account
|
||||
R.fields["mind"] = "[REF(mob_occupant.mind)]"
|
||||
R.fields["last_death"] = mob_occupant.stat == DEAD ? mob_occupant.mind.last_death : -1
|
||||
|
||||
@@ -591,4 +597,4 @@
|
||||
else
|
||||
scantemp = "Subject successfully scanned."
|
||||
records += R
|
||||
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
|
||||
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50)
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
var/obj/item/clothing/head/helmet/space/helmet = null
|
||||
var/obj/item/clothing/mask/mask = null
|
||||
var/obj/item/storage = null
|
||||
// if you add more storage slots, update cook() to clear their radiation too.
|
||||
|
||||
var/suit_type = null
|
||||
var/helmet_type = null
|
||||
@@ -248,9 +249,25 @@
|
||||
else
|
||||
visible_message("<span class='warning'>[src]'s door slides open, barraging you with the nauseating smell of charred flesh.</span>")
|
||||
playsound(src, 'sound/machines/airlockclose.ogg', 25, 1)
|
||||
for(var/obj/item/I in src) //Scorches away blood and forensic evidence, although the SSU itself is unaffected
|
||||
SEND_SIGNAL(I, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRONG)
|
||||
var/datum/component/radioactive/contamination = I.GetComponent(/datum/component/radioactive)
|
||||
var/list/things_to_clear = list() //Done this way since using GetAllContents on the SSU itself would include circuitry and such.
|
||||
if(suit)
|
||||
things_to_clear += suit
|
||||
things_to_clear += suit.GetAllContents()
|
||||
if(helmet)
|
||||
things_to_clear += helmet
|
||||
things_to_clear += helmet.GetAllContents()
|
||||
if(mask)
|
||||
things_to_clear += mask
|
||||
things_to_clear += mask.GetAllContents()
|
||||
if(storage)
|
||||
things_to_clear += storage
|
||||
things_to_clear += storage.GetAllContents()
|
||||
if(occupant)
|
||||
things_to_clear += occupant
|
||||
things_to_clear += occupant.GetAllContents()
|
||||
for(var/atom/movable/AM in things_to_clear) //Scorches away blood and forensic evidence, although the SSU itself is unaffected
|
||||
SEND_SIGNAL(AM, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRONG)
|
||||
var/datum/component/radioactive/contamination = AM.GetComponent(/datum/component/radioactive)
|
||||
if(contamination)
|
||||
qdel(contamination)
|
||||
open_machine(FALSE)
|
||||
|
||||
@@ -541,7 +541,7 @@
|
||||
var/oldloc = loc
|
||||
if(internal_damage & MECHA_INT_CONTROL_LOST)
|
||||
move_result = mechsteprand()
|
||||
else if(dir != direction && !strafe)
|
||||
else if(dir != direction && (!strafe || occupant.client.keys_held["Alt"]))
|
||||
move_result = mechturn(direction)
|
||||
else
|
||||
move_result = mechstep(direction)
|
||||
|
||||
@@ -128,7 +128,7 @@
|
||||
|
||||
|
||||
/datum/action/innate/mecha/strafe
|
||||
name = "Toggle Strafing"
|
||||
name = "Toggle Strafing. Disabled when Alt is held."
|
||||
button_icon_state = "strafe"
|
||||
|
||||
/datum/action/innate/mecha/strafe/Activate()
|
||||
|
||||
@@ -342,6 +342,7 @@
|
||||
SSblackbox.record_feedback("tally", "handcuffs", 1, type)
|
||||
to_chat(C, "<span class='userdanger'>\The [src] ensnares you!</span>")
|
||||
C.Paralyze(knockdown)
|
||||
playsound(src, 'sound/effects/snap.ogg', 50, TRUE)
|
||||
|
||||
/obj/item/restraints/legcuffs/bola/tactical//traitor variant
|
||||
name = "reinforced bola"
|
||||
|
||||
@@ -84,5 +84,5 @@
|
||||
singular_name = "snow tile"
|
||||
desc = "A layer of snow."
|
||||
icon_state = "tile_snow"
|
||||
turf_type = /turf/open/floor/grass/snow
|
||||
turf_type = /turf/open/floor/grass/snow/safe
|
||||
mineralType = "snow"
|
||||
@@ -8,6 +8,7 @@
|
||||
new /obj/item/clothing/neck/cloak/ce(src)
|
||||
new /obj/item/clothing/under/rank/chief_engineer(src)
|
||||
new /obj/item/clothing/head/hardhat/white(src)
|
||||
new /obj/item/clothing/head/hardhat/weldhat/white(src)
|
||||
new /obj/item/clothing/head/welding(src)
|
||||
new /obj/item/clothing/gloves/color/yellow(src)
|
||||
new /obj/item/clothing/shoes/sneakers/brown(src)
|
||||
|
||||
@@ -104,6 +104,7 @@
|
||||
new /obj/item/radio/headset/headset_sec(src)
|
||||
new /obj/item/clothing/suit/armor/vest/warden(src)
|
||||
new /obj/item/clothing/head/warden(src)
|
||||
new /obj/item/clothing/head/warden/drill(src)
|
||||
new /obj/item/clothing/head/beret/sec/navywarden(src)
|
||||
new /obj/item/clothing/suit/armor/vest/warden/alt(src)
|
||||
new /obj/item/clothing/under/rank/warden/navyblue(src)
|
||||
|
||||
@@ -134,6 +134,10 @@
|
||||
icon_state = "basalt[rand(0, 12)]"
|
||||
set_basalt_light(src)
|
||||
|
||||
/turf/open/floor/grass/snow/safe
|
||||
slowdown = 1.5
|
||||
planetary_atmos = FALSE
|
||||
|
||||
|
||||
/turf/open/floor/grass/fakebasalt //Heart is not a real planeteer power
|
||||
name = "aesthetic volcanic flooring"
|
||||
|
||||
@@ -52,25 +52,22 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
var/procname = input("Proc path, eg: /proc/fake_blood","Path:", null) as text|null
|
||||
if(!procname)
|
||||
return
|
||||
|
||||
//hascall() doesn't support proc paths (eg: /proc/gib(), it only supports "gib")
|
||||
var/testname = procname
|
||||
if(targetselected)
|
||||
//Find one of the 3 possible ways they could have written /proc/PROCNAME
|
||||
if(findtext(procname, "/proc/"))
|
||||
testname = replacetext(procname, "/proc/", "")
|
||||
else if(findtext(procname, "/proc"))
|
||||
testname = replacetext(procname, "/proc", "")
|
||||
else if(findtext(procname, "proc/"))
|
||||
testname = replacetext(procname, "proc/", "")
|
||||
//Clear out any parenthesis if they're a dummy
|
||||
testname = replacetext(testname, "()", "")
|
||||
|
||||
if(targetselected && !hascall(target,testname))
|
||||
to_chat(usr, "<font color='red'>Error: callproc(): type [target.type] has no proc named [procname].</font>")
|
||||
|
||||
//strip away everything but the proc name
|
||||
var/list/proclist = splittext(procname, "/")
|
||||
if (!length(proclist))
|
||||
return
|
||||
procname = proclist[proclist.len]
|
||||
|
||||
var/proctype = "proc"
|
||||
if ("verb" in proclist)
|
||||
proctype = "verb"
|
||||
|
||||
if(targetselected && !hascall(target, procname))
|
||||
to_chat(usr, "<font color='red'>Error: callproc(): type [target.type] has no [proctype] named [procname].</font>")
|
||||
return
|
||||
else
|
||||
var/procpath = text2path(procname)
|
||||
var/procpath = text2path("[proctype]/[procname]")
|
||||
if (!procpath)
|
||||
to_chat(usr, "<font color='red'>Error: callproc(): proc [procname] does not exist. (Did you forget the /proc/ part?)</font>")
|
||||
return
|
||||
|
||||
@@ -176,7 +176,7 @@
|
||||
|
||||
/datum/action/innate/cult/blood_spell/construction
|
||||
name = "Twisted Construction"
|
||||
desc = "<u>A sinister spell used to convert:</u><br>Plasteel into runed metal<br>25 metal into a construct shell<br>Cyborgs directly into constructs<br>Cyborg shells into construct shells<br>Airlocks into runed airlocks (harm intent)"
|
||||
desc = "<u>A sinister spell used to convert:</u><br>Plasteel into runed metal<br>50 metal into a construct shell<br>Cyborgs directly into constructs<br>Cyborg shells into construct shells<br>Airlocks into runed airlocks (harm intent)"
|
||||
button_icon_state = "transmute"
|
||||
magic_path = "/obj/item/melee/blood_magic/construction"
|
||||
health_cost = 12
|
||||
@@ -549,7 +549,7 @@
|
||||
. = ..()
|
||||
|
||||
|
||||
//Construction: Creates a construct shell out of 50 metal sheets, or converts plasteel into runed metal
|
||||
//Construction: Converts 50 metal to a construct shell, plasteel to runed metal, airlock to brittle runed airlock, a borg to a construct, or borg shell to a construct shell
|
||||
/obj/item/melee/blood_magic/construction
|
||||
name = "Corrupting Aura"
|
||||
desc = "Corrupts metal and plasteel into more sinister forms."
|
||||
@@ -561,13 +561,14 @@
|
||||
var/turf/T = get_turf(target)
|
||||
if(istype(target, /obj/item/stack/sheet/metal))
|
||||
var/obj/item/stack/sheet/candidate = target
|
||||
if(candidate.use(50))
|
||||
if(candidate.use(METAL_TO_CONSTRUCT_SHELL_CONVERSION))
|
||||
uses--
|
||||
to_chat(user, "<span class='warning'>A dark cloud emanates from your hand and swirls around the metal, twisting it into a construct shell!</span>")
|
||||
new /obj/structure/constructshell(T)
|
||||
SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25))
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You need 50 metal to produce a construct shell!</span>")
|
||||
to_chat(user, "<span class='warning'>You need [METAL_TO_CONSTRUCT_SHELL_CONVERSION] metal to produce a construct shell!</span>")
|
||||
return
|
||||
else if(istype(target, /obj/item/stack/sheet/plasteel))
|
||||
var/obj/item/stack/sheet/plasteel/candidate = target
|
||||
var/quantity = candidate.amount
|
||||
@@ -600,6 +601,7 @@
|
||||
qdel(candidate)
|
||||
else
|
||||
candidate.color = prev_color
|
||||
return
|
||||
else
|
||||
uses--
|
||||
to_chat(user, "<span class='warning'>A dark cloud emanates from you hand and swirls around [candidate] - twisting it into a construct shell!</span>")
|
||||
@@ -613,6 +615,8 @@
|
||||
uses--
|
||||
user.visible_message("<span class='warning'>Black ribbons suddenly emanate from [user]'s hand and cling to the airlock - twisting and corrupting it!</span>")
|
||||
SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25))
|
||||
else
|
||||
return
|
||||
else
|
||||
to_chat(user, "<span class='warning'>The spell will not work on [target]!</span>")
|
||||
return
|
||||
@@ -762,10 +766,10 @@
|
||||
return
|
||||
switch(choice)
|
||||
if("Blood Spear (150)")
|
||||
if(uses < 150)
|
||||
to_chat(user, "<span class='cultitalic'>You need 150 charges to perform this rite.</span>")
|
||||
if(uses < BLOOD_SPEAR_COST)
|
||||
to_chat(user, "<span class='cultitalic'>You need [BLOOD_SPEAR_COST] charges to perform this rite.</span>")
|
||||
else
|
||||
uses -= 150
|
||||
uses -= BLOOD_SPEAR_COST
|
||||
var/turf/T = get_turf(user)
|
||||
qdel(src)
|
||||
var/datum/action/innate/cult/spear/S = new(user)
|
||||
@@ -778,11 +782,11 @@
|
||||
user.visible_message("<span class='warning'>A [rite.name] appears at [user]'s feet!</span>", \
|
||||
"<span class='cultitalic'>A [rite.name] materializes at your feet.</span>")
|
||||
if("Blood Bolt Barrage (300)")
|
||||
if(uses < 300)
|
||||
to_chat(user, "<span class='cultitalic'>You need 300 charges to perform this rite.</span>")
|
||||
if(uses < BLOOD_BARRAGE_COST)
|
||||
to_chat(user, "<span class='cultitalic'>You need [BLOOD_BARRAGE_COST] charges to perform this rite.</span>")
|
||||
else
|
||||
var/obj/rite = new /obj/item/gun/ballistic/shotgun/boltaction/enchanted/arcane_barrage/blood()
|
||||
uses -= 300
|
||||
uses -= BLOOD_BARRAGE_COST
|
||||
qdel(src)
|
||||
if(user.put_in_hands(rite))
|
||||
to_chat(user, "<span class='cult'><b>Your hands glow with power!</b></span>")
|
||||
@@ -790,11 +794,11 @@
|
||||
to_chat(user, "<span class='cultitalic'>You need a free hand for this rite!</span>")
|
||||
qdel(rite)
|
||||
if("Blood Beam (500)")
|
||||
if(uses < 500)
|
||||
to_chat(user, "<span class='cultitalic'>You need 500 charges to perform this rite.</span>")
|
||||
if(uses < BLOOD_BEAM_COST)
|
||||
to_chat(user, "<span class='cultitalic'>You need [BLOOD_BEAM_COST] charges to perform this rite.</span>")
|
||||
else
|
||||
var/obj/rite = new /obj/item/blood_beam()
|
||||
uses -= 500
|
||||
uses -= BLOOD_BEAM_COST
|
||||
qdel(src)
|
||||
if(user.put_in_hands(rite))
|
||||
to_chat(user, "<span class='cultlarge'><b>Your hands glow with POWER OVERWHELMING!!!</b></span>")
|
||||
|
||||
@@ -1942,7 +1942,6 @@
|
||||
/obj/item/clothing/shoes/sneakers/black,
|
||||
/obj/item/clothing/gloves/color/white,
|
||||
/obj/item/clothing/mask/gas/mime,
|
||||
/obj/item/clothing/head/beret,
|
||||
/obj/item/clothing/head/frenchberet,
|
||||
/obj/item/clothing/suit/suspenders,
|
||||
/obj/item/reagent_containers/food/drinks/bottle/bottleofnothing,
|
||||
|
||||
@@ -273,12 +273,13 @@ GLOBAL_LIST_EMPTY(external_rsc_urls)
|
||||
connection_timeofday = world.timeofday
|
||||
winset(src, null, "command=\".configure graphics-hwmode on\"")
|
||||
var/cev = CONFIG_GET(number/client_error_version)
|
||||
var/ceb = CONFIG_GET(number/client_error_build)
|
||||
var/cwv = CONFIG_GET(number/client_warn_version)
|
||||
if (byond_version < cev) //Out of date client.
|
||||
if (byond_version < cev || byond_build < ceb) //Out of date client.
|
||||
to_chat(src, "<span class='danger'><b>Your version of BYOND is too old:</b></span>")
|
||||
to_chat(src, CONFIG_GET(string/client_error_message))
|
||||
to_chat(src, "Your version: [byond_version]")
|
||||
to_chat(src, "Required version: [cev] or later")
|
||||
to_chat(src, "Your version: [byond_version].[byond_build]")
|
||||
to_chat(src, "Required version: [cev].[ceb] or later")
|
||||
to_chat(src, "Visit <a href=\"https://secure.byond.com/download\">BYOND's website</a> to get the latest version of BYOND.")
|
||||
if (connecting_admin)
|
||||
to_chat(src, "Because you are an admin, you are being allowed to walk past this limitation, But it is still STRONGLY suggested you upgrade")
|
||||
@@ -697,8 +698,14 @@ GLOBAL_LIST_EMPTY(external_rsc_urls)
|
||||
/client/Click(atom/object, atom/location, control, params)
|
||||
var/ab = FALSE
|
||||
var/list/L = params2list(params)
|
||||
|
||||
var/dragged = L["drag"]
|
||||
if(dragged && !L[dragged])
|
||||
return
|
||||
|
||||
if (object && object == middragatom && L["left"])
|
||||
ab = max(0, 5 SECONDS-(world.time-middragtime)*0.1)
|
||||
|
||||
var/mcl = CONFIG_GET(number/minute_click_limit)
|
||||
if (!holder && mcl)
|
||||
var/minute = round(world.time, 600)
|
||||
@@ -718,7 +725,6 @@ GLOBAL_LIST_EMPTY(external_rsc_urls)
|
||||
log_game("[key_name(src)] is using the middle click aimbot exploit")
|
||||
message_admins("[ADMIN_LOOKUPFLW(src)] [ADMIN_KICK(usr)] is using the middle click aimbot exploit</span>")
|
||||
add_system_note("aimbot", "Is using the middle click aimbot exploit")
|
||||
|
||||
log_game("[key_name(src)] Has hit the per-minute click limit of [mcl] clicks in a given game minute")
|
||||
message_admins("[ADMIN_LOOKUPFLW(src)] [ADMIN_KICK(usr)] Has hit the per-minute click limit of [mcl] clicks in a given game minute")
|
||||
to_chat(src, "<span class='danger'>[msg]</span>")
|
||||
|
||||
@@ -14,19 +14,27 @@
|
||||
|
||||
dog_fashion = /datum/dog_fashion/head
|
||||
|
||||
/obj/item/clothing/head/hardhat/attack_self(mob/user)
|
||||
on = !on
|
||||
icon_state = "hardhat[on]_[item_color]"
|
||||
item_state = "hardhat[on]_[item_color]"
|
||||
user.update_inv_head() //so our mob-overlays update
|
||||
/obj/item/clothing/head/hardhat/attack_self(mob/living/user)
|
||||
toggle_helmet_light(user)
|
||||
|
||||
/obj/item/clothing/head/hardhat/proc/toggle_helmet_light(mob/living/user)
|
||||
on = !on
|
||||
if(on)
|
||||
turn_on(user)
|
||||
else
|
||||
turn_off(user)
|
||||
update_icon()
|
||||
|
||||
/obj/item/clothing/head/hardhat/update_icon()
|
||||
icon_state = "hardhat[on]_[item_color]"
|
||||
item_state = "hardhat[on]_[item_color]"
|
||||
if(ishuman(loc))
|
||||
var/mob/living/carbon/human/H = loc
|
||||
H.update_inv_head()
|
||||
for(var/X in actions)
|
||||
var/datum/action/A = X
|
||||
A.UpdateButtonIcon()
|
||||
A.UpdateButtonIcon(force = TRUE)
|
||||
..()
|
||||
|
||||
/obj/item/clothing/head/hardhat/proc/turn_on(mob/user)
|
||||
set_light(brightness_on)
|
||||
@@ -81,4 +89,69 @@
|
||||
heat_protection = HEAD
|
||||
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
|
||||
cold_protection = HEAD
|
||||
min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
|
||||
min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
|
||||
|
||||
/obj/item/clothing/head/hardhat/weldhat
|
||||
name = "welding hard hat"
|
||||
desc = "A piece of headgear used in dangerous working conditions to protect the head. Comes with a built-in flashlight AND welding shield! The bulb seems a little smaller though."
|
||||
brightness_on = 3 //Needs a little bit of tradeoff
|
||||
dog_fashion = null
|
||||
actions_types = list(/datum/action/item_action/toggle_helmet_light, /datum/action/item_action/toggle_welding_screen)
|
||||
flash_protect = 2
|
||||
tint = 2
|
||||
flags_inv = HIDEEYES | HIDEFACE
|
||||
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
|
||||
visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT
|
||||
visor_flags_inv = HIDEEYES | HIDEFACE
|
||||
visor_flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
|
||||
|
||||
/obj/item/clothing/head/hardhat/weldhat/Initialize()
|
||||
. = ..()
|
||||
update_icon()
|
||||
|
||||
/obj/item/clothing/head/hardhat/weldhat/attack_self(mob/living/user)
|
||||
toggle_helmet_light(user)
|
||||
|
||||
/obj/item/clothing/head/hardhat/weldhat/AltClick(mob/user)
|
||||
if(user.canUseTopic(src, BE_CLOSE))
|
||||
toggle_welding_screen(user)
|
||||
|
||||
/obj/item/clothing/head/hardhat/weldhat/proc/toggle_welding_screen(mob/living/user)
|
||||
if(weldingvisortoggle(user))
|
||||
playsound(src, 'sound/mecha/mechmove03.ogg', 50, 1) //Visors don't just come from nothing
|
||||
update_icon()
|
||||
|
||||
/obj/item/clothing/head/hardhat/weldhat/worn_overlays(isinhands)
|
||||
. = ..()
|
||||
if(!isinhands)
|
||||
. += mutable_appearance('icons/mob/head.dmi', "weldhelmet")
|
||||
if(!up)
|
||||
. += mutable_appearance('icons/mob/head.dmi', "weldvisor")
|
||||
|
||||
/obj/item/clothing/head/hardhat/weldhat/update_icon()
|
||||
cut_overlays()
|
||||
if(!up)
|
||||
add_overlay("weldvisor")
|
||||
..()
|
||||
|
||||
/obj/item/clothing/head/hardhat/weldhat/orange
|
||||
icon_state = "hardhat0_orange"
|
||||
item_state = "hardhat0_orange"
|
||||
item_color = "orange"
|
||||
|
||||
/obj/item/clothing/head/hardhat/weldhat/white
|
||||
desc = "A piece of headgear used in dangerous working conditions to protect the head. Comes with a built-in flashlight AND welding shield!" //This bulb is not smaller
|
||||
icon_state = "hardhat0_white"
|
||||
item_state = "hardhat0_white"
|
||||
brightness_on = 4 //Boss always takes the best stuff
|
||||
item_color = "white"
|
||||
clothing_flags = STOPSPRESSUREDAMAGE
|
||||
heat_protection = HEAD
|
||||
max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT
|
||||
cold_protection = HEAD
|
||||
min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
|
||||
|
||||
/obj/item/clothing/head/hardhat/weldhat/dblue
|
||||
icon_state = "hardhat0_dblue"
|
||||
item_state = "hardhat0_dblue"
|
||||
item_color = "dblue"
|
||||
@@ -145,6 +145,21 @@
|
||||
strip_delay = 60
|
||||
dog_fashion = /datum/dog_fashion/head/warden
|
||||
|
||||
/obj/item/clothing/head/warden/drill
|
||||
name = "warden's drill hat"
|
||||
desc = "A special armored campaign hat with the security insignia emblazoned on it. Uses reinforced fabric to offer sufficient protection. Has the letters 'FMJ' enscribed on its side."
|
||||
icon_state = "wardendrill"
|
||||
item_state = "wardendrill"
|
||||
dog_fashion = null
|
||||
|
||||
/obj/item/clothing/head/warden/drill/equipped(mob/living/carbon/human/user, slot)
|
||||
..()
|
||||
if(slot == SLOT_HEAD)
|
||||
user.dna.add_mutation(YELLING)
|
||||
|
||||
/obj/item/clothing/head/warden/drill/dropped(mob/living/carbon/human/user)
|
||||
user.dna.remove_mutation(YELLING)
|
||||
|
||||
/obj/item/clothing/head/beret/sec
|
||||
name = "security beret"
|
||||
desc = "A robust beret with the security insignia emblazoned on it. Uses reinforced fabric to offer sufficient protection."
|
||||
|
||||
@@ -347,7 +347,7 @@
|
||||
/obj/item/clothing/head/frenchberet
|
||||
name = "french beret"
|
||||
desc = "A quality beret, infused with the aroma of chain-smoking, wine-swilling Parisians. You feel less inclined to engage military conflict, for some reason."
|
||||
icon_state = "beretblack"
|
||||
icon_state = "beret"
|
||||
dynamic_hair_suffix = ""
|
||||
|
||||
/obj/item/clothing/head/frenchberet/speechModification(M)
|
||||
|
||||
@@ -244,6 +244,7 @@
|
||||
if(paranoia)
|
||||
QDEL_NULL(paranoia)
|
||||
paranoia = new()
|
||||
paranoia.clonable = FALSE
|
||||
|
||||
user.gain_trauma(paranoia, TRAUMA_RESILIENCE_MAGIC)
|
||||
to_chat(user, "<span class='warning'>As you don the foiled hat, an entire world of conspiracy theories and seemingly insane ideas suddenly rush into your mind. What you once thought unbelievable suddenly seems.. undeniable. Everything is connected and nothing happens just by accident. You know too much and now they're out to get you. </span>")
|
||||
|
||||
@@ -288,4 +288,4 @@
|
||||
icon_state = "empoweredburger"
|
||||
list_reagents = list("nutriment" = 8, "liquidelectricity" = 5)
|
||||
tastes = list("bun" = 2, "pure electricity" = 4)
|
||||
foodtype = GRAIN | TOXIC
|
||||
foodtype = GRAIN | TOXIC
|
||||
|
||||
@@ -33,7 +33,6 @@
|
||||
suit = /obj/item/clothing/suit/suspenders
|
||||
backpack_contents = list(/obj/item/reagent_containers/food/drinks/bottle/bottleofnothing=1)
|
||||
|
||||
accessory = /obj/item/clothing/accessory/pocketprotector/cosmetology
|
||||
backpack = /obj/item/storage/backpack/mime
|
||||
satchel = /obj/item/storage/backpack/mime
|
||||
|
||||
|
||||
@@ -94,7 +94,7 @@
|
||||
if(get_dist(user, src) <= 1) //people with TK won't get smeared with blood
|
||||
user.add_mob_blood(src)
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/dirtyboy
|
||||
var/mob/living/carbon/human/dirtyboy = user
|
||||
dirtyboy.adjust_hygiene(-10)
|
||||
if(affecting.body_zone == BODY_ZONE_HEAD)
|
||||
if(wear_mask)
|
||||
|
||||
@@ -7,9 +7,7 @@
|
||||
return TRUE
|
||||
if(istype(mover, /obj/item/projectile))
|
||||
var/obj/item/projectile/P = mover
|
||||
if(P.can_hit_target(src, P.permutated, src == P.original, TRUE))
|
||||
P.Bump(src)
|
||||
return TRUE
|
||||
return !P.can_hit_target(src, P.permutated, src == P.original, TRUE)
|
||||
if(mover.throwing)
|
||||
return (!density || !(mobility_flags & MOBILITY_STAND))
|
||||
if(buckled == mover)
|
||||
|
||||
@@ -179,10 +179,7 @@
|
||||
/obj/effect/decal/cleanable/vomit,
|
||||
/obj/effect/decal/cleanable/robot_debris,
|
||||
/obj/effect/decal/cleanable/molten_object,
|
||||
/obj/effect/decal/cleanable/food/tomato_smudge,
|
||||
/obj/effect/decal/cleanable/food/egg_smudge,
|
||||
/obj/effect/decal/cleanable/food/pie_smudge,
|
||||
/obj/effect/decal/cleanable/food/flour,
|
||||
/obj/effect/decal/cleanable/food,
|
||||
/obj/effect/decal/cleanable/ash,
|
||||
/obj/effect/decal/cleanable/greenglow,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
|
||||
mob_size = MOB_SIZE_LARGE
|
||||
var/icon_aggro = null
|
||||
var/crusher_drop_mod = 5
|
||||
var/crusher_drop_mod = 25
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/Initialize(mapload)
|
||||
. = ..()
|
||||
@@ -58,7 +58,7 @@
|
||||
/mob/living/simple_animal/hostile/asteroid/death(gibbed)
|
||||
SSblackbox.record_feedback("tally", "mobs_killed_mining", 1, type)
|
||||
var/datum/status_effect/crusher_damage/C = has_status_effect(STATUS_EFFECT_CRUSHERDAMAGETRACKING)
|
||||
if(C && crusher_loot && prob((C.total_damage/maxHealth) * crusher_drop_mod)) //on average, you'll need to kill 20 creatures before getting the item
|
||||
if(C && crusher_loot && prob((C.total_damage/maxHealth) * crusher_drop_mod)) //on average, you'll need to kill 4 creatures before getting the item
|
||||
spawn_crusher_loot()
|
||||
..(gibbed)
|
||||
|
||||
|
||||
@@ -214,7 +214,7 @@
|
||||
|
||||
/obj/item/suppressor
|
||||
name = "suppressor"
|
||||
desc = "A nigh-universal syndicate small-arms suppressor for maximum espionage."
|
||||
desc = "A syndicate small-arms suppressor for maximum espionage."
|
||||
icon = 'icons/obj/guns/projectile.dmi'
|
||||
icon_state = "suppressor"
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
|
||||
@@ -565,7 +565,7 @@
|
||||
|
||||
/obj/item/projectile/beam/beam_rifle/hitscan/aiming_beam/prehit(atom/target)
|
||||
qdel(src)
|
||||
return BULLET_ACT_HIT
|
||||
return FALSE
|
||||
|
||||
/obj/item/projectile/beam/beam_rifle/hitscan/aiming_beam/on_hit()
|
||||
qdel(src)
|
||||
|
||||
@@ -230,13 +230,6 @@
|
||||
if(hitscan)
|
||||
store_hitscan_collision(pcache)
|
||||
return TRUE
|
||||
if(firer && !ignore_source_check)
|
||||
var/mob/checking = firer
|
||||
if((A == firer) || (((A in firer.buckled_mobs) || (istype(checking) && (A == checking.buckled))) && (A != original)) || (A == firer.loc && ismecha(A))) //cannot shoot yourself or your mech
|
||||
trajectory_ignore_forcemove = TRUE
|
||||
forceMove(T)
|
||||
trajectory_ignore_forcemove = FALSE
|
||||
return FALSE
|
||||
|
||||
var/distance = get_dist(T, starting) // Get the distance between the turf shot from and the mob we hit and use that for the calculations.
|
||||
def_zone = ran_zone(def_zone, max(100-(7*distance), 5)) //Lower accurancy/longer range tradeoff. 7 is a balanced number to use.
|
||||
@@ -529,6 +522,10 @@
|
||||
/obj/item/projectile/proc/can_hit_target(atom/target, list/passthrough, direct_target = FALSE, ignore_loc = FALSE)
|
||||
if(QDELETED(target))
|
||||
return FALSE
|
||||
if(!ignore_source_check && firer)
|
||||
var/mob/M = firer
|
||||
if((target == firer) || ((target == firer.loc) && ismecha(firer.loc)) || (target in firer.buckled_mobs) || (istype(M) && (M.buckled == target)))
|
||||
return FALSE
|
||||
if(!ignore_loc && (loc != target.loc))
|
||||
return FALSE
|
||||
if(target in passthrough)
|
||||
|
||||
@@ -128,7 +128,6 @@
|
||||
return
|
||||
replace_beaker(user, B)
|
||||
to_chat(user, "<span class='notice'>You add [B] to [src].</span>")
|
||||
updateUsrDialog()
|
||||
update_icon()
|
||||
return TRUE //no afterattack
|
||||
|
||||
|
||||
@@ -1169,6 +1169,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
|
||||
/datum/reagent/consumable/ethanol/silencer/on_mob_life(mob/living/carbon/M)
|
||||
if(ishuman(M) && M.job == "Mime")
|
||||
M.silent = max(M.silent, MIMEDRINK_SILENCE_DURATION)
|
||||
M.heal_bodypart_damage(1,1)
|
||||
. = 1
|
||||
return ..() || .
|
||||
@@ -1855,6 +1856,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
|
||||
/datum/reagent/consumable/ethanol/blank_paper/on_mob_life(mob/living/carbon/M)
|
||||
if(ishuman(M) && M.job == "Mime")
|
||||
M.silent = max(M.silent, MIMEDRINK_SILENCE_DURATION)
|
||||
M.heal_bodypart_damage(1,1)
|
||||
. = 1
|
||||
return ..()
|
||||
|
||||
@@ -154,6 +154,7 @@
|
||||
|
||||
/datum/reagent/consumable/nothing/on_mob_life(mob/living/carbon/M)
|
||||
if(ishuman(M) && M.job == "Mime")
|
||||
M.silent = max(M.silent, MIMEDRINK_SILENCE_DURATION)
|
||||
M.heal_bodypart_damage(1,1, 0)
|
||||
. = 1
|
||||
..()
|
||||
|
||||
@@ -52,12 +52,11 @@
|
||||
var/smoke_message = pick("You feel relaxed.", "You feel calmed.","You feel alert.","You feel rugged.")
|
||||
to_chat(M, "<span class='notice'>[smoke_message]</span>")
|
||||
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "smoked", /datum/mood_event/smoked, name)
|
||||
M.AdjustStun(-20, FALSE)
|
||||
M.AdjustKnockdown(-20, FALSE)
|
||||
M.AdjustUnconscious(-20, FALSE)
|
||||
M.AdjustParalyzed(-20, FALSE)
|
||||
M.AdjustImmobilized(-20, FALSE)
|
||||
M.adjustStaminaLoss(-0.5*REM, 0)
|
||||
M.AdjustStun(-5, FALSE)
|
||||
M.AdjustKnockdown(-5, FALSE)
|
||||
M.AdjustUnconscious(-5, FALSE)
|
||||
M.AdjustParalyzed(-5, FALSE)
|
||||
M.AdjustImmobilized(-5, FALSE)
|
||||
..()
|
||||
. = 1
|
||||
|
||||
|
||||
@@ -914,7 +914,6 @@
|
||||
toxpwr = 0
|
||||
taste_description = "bone hurting"
|
||||
overdose_threshold = 50
|
||||
metabolization_rate = 2
|
||||
|
||||
/datum/reagent/toxin/bonehurtingjuice/on_mob_add(mob/living/carbon/M)
|
||||
M.say("oof ouch my bones", forced = "bonehurtingjuice")
|
||||
|
||||
@@ -265,8 +265,8 @@
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/suppressor
|
||||
name = "Universal Suppressor"
|
||||
desc = "A reverse-engineered universal suppressor that fits on most small arms with threaded barrels."
|
||||
name = "Suppressor"
|
||||
desc = "A reverse-engineered suppressor that fits on most small arms with threaded barrels."
|
||||
id = "suppressor"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 2000, MAT_SILVER = 500)
|
||||
|
||||
@@ -131,7 +131,7 @@ Slimecrossing Armor
|
||||
desc = "A full suit of adamantine plate armor. Impressively resistant to damage, but weighs about as much as you do."
|
||||
icon_state = "adamsuit"
|
||||
item_state = "adamsuit"
|
||||
flags_inv = list()
|
||||
flags_inv = NONE
|
||||
obj_flags = IMMUTABLE_SLOW
|
||||
slowdown = 4
|
||||
var/hit_reflect_chance = 40
|
||||
|
||||
@@ -547,10 +547,15 @@
|
||||
if(can_interact(usr))
|
||||
return ..()
|
||||
|
||||
/obj/item/storage/pod/AltClick(mob/user)
|
||||
if(!can_interact(user))
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/storage/pod/can_interact(mob/user)
|
||||
if(!..())
|
||||
return FALSE
|
||||
if(GLOB.security_level == SEC_LEVEL_RED || GLOB.security_level == SEC_LEVEL_DELTA || unlocked)
|
||||
if(GLOB.security_level >= SEC_LEVEL_RED || unlocked)
|
||||
return TRUE
|
||||
to_chat(user, "The storage unit will only unlock during a Red or Delta security alert.")
|
||||
|
||||
|
||||
@@ -581,9 +581,8 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
|
||||
exclude_modes = list(/datum/game_mode/nuclear)
|
||||
|
||||
/datum/uplink_item/stealthy_weapons/suppressor
|
||||
name = "Universal Suppressor"
|
||||
desc = "Fitted for use on any small caliber weapon with a threaded barrel, this suppressor will silence the \
|
||||
shots of the weapon for increased stealth and superior ambushing capability."
|
||||
name = "Suppressor"
|
||||
desc = "This suppressor will silence the shots of the weapon it is attached to for increased stealth and superior ambushing capability. It is compatible with many small ballistic guns including the Stechkin and C-20r, but not revolvers or energy guns."
|
||||
item = /obj/item/suppressor
|
||||
cost = 3
|
||||
surplus = 10
|
||||
|
||||
@@ -43,7 +43,9 @@
|
||||
addtimer(VARSET_CALLBACK(src, canmove , TRUE), 20)
|
||||
return FALSE
|
||||
var/datum/component/riding/D = GetComponent(/datum/component/riding)
|
||||
D.vehicle_move_delay = 10/H.get_num_arms()
|
||||
//1.5 (movespeed as of this change) multiplied by 6.7 gets ABOUT 10 (rounded), the old constant for the wheelchair that gets divided by how many arms they have
|
||||
//if that made no sense this simply makes the wheelchair speed change along with movement speed delay
|
||||
D.vehicle_move_delay = round(CONFIG_GET(number/movedelay/run_delay) * 6.7) / min(H.get_num_arms(), 2)
|
||||
..()
|
||||
|
||||
/obj/vehicle/ridden/wheelchair/Moved()
|
||||
@@ -100,3 +102,10 @@
|
||||
if(isobserver(user) && CONFIG_GET(flag/ghost_interaction))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/vehicle/ridden/wheelchair/the_whip/driver_move(mob/living/user, direction)
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(istype(H))
|
||||
var/datum/component/riding/D = GetComponent(/datum/component/riding)
|
||||
D.vehicle_move_delay = round(CONFIG_GET(number/movedelay/run_delay) * 6.7) / H.get_num_arms()
|
||||
..()
|
||||
|
||||
@@ -77,7 +77,8 @@
|
||||
/obj/item/clothing/under/rank/engineer/hazard = 3,
|
||||
/obj/item/clothing/suit/hazardvest = 3,
|
||||
/obj/item/clothing/shoes/workboots = 3,
|
||||
/obj/item/clothing/head/hardhat = 3)
|
||||
/obj/item/clothing/head/hardhat = 3,
|
||||
/obj/item/clothing/head/hardhat/weldhat = 3)
|
||||
refill_canister = /obj/item/vending_refill/wardrobe/engi_wardrobe
|
||||
payment_department = ACCOUNT_ENG
|
||||
/obj/item/vending_refill/wardrobe/engi_wardrobe
|
||||
|
||||
@@ -386,6 +386,8 @@ AUTOADMIN_RANK Game Master
|
||||
#CLIENT_WARN_MESSAGE Byond released 511 as the stable release. You can set the framerate your client runs at, which makes the game feel very different and cool. Shortly after its release we will end up using 511 client features and you will be forced to update.
|
||||
CLIENT_ERROR_VERSION 511
|
||||
CLIENT_ERROR_MESSAGE Your version of byond is not supported. Please upgrade.
|
||||
## The minimum build needed for joining the server, if using 512, a good minimum build would be 1421 as that disables the Middle Mouse Button exploit.
|
||||
CLIENT_ERROR_BUILD 1421
|
||||
|
||||
## TOPIC RATE LIMITING
|
||||
## This allows you to limit how many topic calls (clicking on an interface window) the client can do in any given game second and/or game minute.
|
||||
|
||||
@@ -55,6 +55,88 @@
|
||||
|
||||
-->
|
||||
<div class="commit sansserif">
|
||||
<h2 class="date">31 January 2019</h2>
|
||||
<h3 class="author">4dplanner updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">antimagic works again</li>
|
||||
<li class="bugfix">fixes cloning</li>
|
||||
</ul>
|
||||
<h3 class="author">BuffEngineering updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="imageadd">Pneumatic cannons will now have a tank visible all of the time</li>
|
||||
</ul>
|
||||
<h3 class="author">BuffEngineering/MrDoomBringer updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Engineers may now weld with engineering pride using the new welding hardhats!</li>
|
||||
</ul>
|
||||
<h3 class="author">Gousaid67 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Alt-Clicking open the Escape Pods safes will no longer ignore the alert level.</li>
|
||||
</ul>
|
||||
<h3 class="author">Hathkar updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="balance">Nicotine gives a small bonus to stun resistance instead of being equal to adrenals or ephedrine.</li>
|
||||
</ul>
|
||||
<h3 class="author">Nervere & kevinz000 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">You can now hold hands with another player by targeting their left or right arm and pulling them.</li>
|
||||
</ul>
|
||||
<h3 class="author">Nichlas0010 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">the Middle Mouse Button aimbot exploit should no longer be usable</li>
|
||||
</ul>
|
||||
<h3 class="author">Pubby updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Drop "universal" from suppressors name</li>
|
||||
</ul>
|
||||
<h3 class="author">ShizCalev updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Fixed suit storage units not correctly clearing out the radiation of built-in hardsuit helmets and jetpacks.</li>
|
||||
</ul>
|
||||
<h3 class="author">coiax updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">When a person is cloned, any mental traumas are cloned as well.</li>
|
||||
<li class="rscadd">Adds the Paraplegic quirk for -3 points. You start with unhealable leg paralysis (persists through cloning), and have a wheelchair to move around the station.</li>
|
||||
</ul>
|
||||
<h3 class="author">py01 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Twisted Construction no longer damages the caster if canceled or failed to cast</li>
|
||||
<li class="bugfix">Twisted Construction's tool-tip now correctly specifies the amount of metal needed for a construct shell</li>
|
||||
<li class="refactor">Blood rite and Twisted Construction code now uses defines instead of magic numbers</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">30 January 2019</h2>
|
||||
<h3 class="author">4dplanner updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">adamantine armour no longer screws up clothing protection</li>
|
||||
</ul>
|
||||
<h3 class="author">Kierany9 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">The Psychic Link pinpointer now works. Oops!</li>
|
||||
</ul>
|
||||
<h3 class="author">ShizCalev updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Cleanbots now clean up spilled table-salt and plant smudges.</li>
|
||||
</ul>
|
||||
<h3 class="author">Time-Green updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">geladkinesis snow tiles no longer freeze the station</li>
|
||||
</ul>
|
||||
<h3 class="author">Zxaber updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Mechas now ignore strafe mode and turn if the user is holding Alt.</li>
|
||||
</ul>
|
||||
<h3 class="author">actioninja updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Added Smoker and Junkie quirks.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">28 January 2019</h2>
|
||||
<h3 class="author">Gousaid67 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Spraycans are now able to spray walls again!</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">26 January 2019</h2>
|
||||
<h3 class="author">4dplanner updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
@@ -1242,106 +1324,6 @@
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">wizards can teleport out of their den again</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">29 November 2018</h2>
|
||||
<h3 class="author">4dplanner updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">You can no longer walk through ash walker tendrils</li>
|
||||
</ul>
|
||||
<h3 class="author">Denton updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="balance">Double capacity emergency tanks are no longer available on stations, regular shuttles and free escape shuttles. They have been replaced with standard emergency oxygen tanks.</li>
|
||||
<li class="balance">The Curator's NASA set contains a full-sized oxygen tank instead of a compact double emergency oxygen tank.</li>
|
||||
<li class="balance">Death Squads now start with double capacity oxygen tanks instead of regular oxygen tanks.</li>
|
||||
<li class="tweak">AIs that get upgraded with a combat software upgrade now see a reminder that this doesn't change their laws or antagonist status.</li>
|
||||
<li class="admin">Added logging and an admin follow message to AI combat/surveillance software upgrades.</li>
|
||||
<li class="spellcheck">Added an examine message to clone pods which shows that you can link them via multitool.</li>
|
||||
</ul>
|
||||
<h3 class="author">Floyd / Qustinnus updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">New medals for being the best clown car driver</li>
|
||||
<li class="rscadd">You can now thank the clown car driver</li>
|
||||
<li class="code_imp">changes usr to user somewhere because seeing usr triggers my bones</li>
|
||||
</ul>
|
||||
<h3 class="author">Mickyan updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="spellcheck">the quirk menu went through some minor formatting changes</li>
|
||||
</ul>
|
||||
<h3 class="author">MrDroppodBringer updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="spellcheck">Fixed a typo in the origami manual's description</li>
|
||||
</ul>
|
||||
<h3 class="author">Qustinnus / Floyd / Ethereal sprites by Space, is that it? / Alerts and food sprites by MrDroppodBringer updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Adds Ethereal; a race which lives off of electricity and shines bright. If they are healthy they shine a bright green light, and the more damaged they are, the less they shine and the greyer they become. Their punches do burn damage and they are weak to blunt attacks! They dont need to eat normal food and dont have nutrition, Instead they gain charge by going into borg rechargers, eating ethereal food or doign specific interactions.</li>
|
||||
<li class="refactor">all nutrition changes now go through a proc so we can override behavior</li>
|
||||
</ul>
|
||||
<h3 class="author">Skoglol updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Reduced ventcrawl lag greatly.</li>
|
||||
<li class="tweak">The space pirates will no longer ask for pocket change.</li>
|
||||
<li class="spellcheck">Changed techfab text Mining Rewards Vender to Vendor.</li>
|
||||
</ul>
|
||||
<h3 class="author">Swindly updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Fixed being unable to interact with broken microwaves</li>
|
||||
</ul>
|
||||
<h3 class="author">TheDracheX updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Fixes grenades not changing their detonation timer when attacked by a screwdriver.</li>
|
||||
</ul>
|
||||
<h3 class="author">XDTM updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Spraying holy water on tiles will now prevent cult-based teleportation from using them as a destination point.</li>
|
||||
<li class="tweak">Quantum, wormhole and magic teleportation is no longer disrupted by bags of holding.</li>
|
||||
</ul>
|
||||
<h3 class="author">YPOQ updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Fixed an issue that could cause a tesla ball submitted for the tesla ball bounty to not be deleted</li>
|
||||
</ul>
|
||||
<h3 class="author">YoYoBatty updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="code_imp">turn_off proc for jetpack wasn't having user being sent in argument.</li>
|
||||
</ul>
|
||||
<h3 class="author">coiax updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Sometimes a low level cloning pod will make errors in replicating your brain, leaving you with a mild brain trauma.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">27 November 2018</h2>
|
||||
<h3 class="author">Denton updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Atmos gas tank computers can now be properly rebuilt with their own circuit boards.</li>
|
||||
</ul>
|
||||
<h3 class="author">MMMiracles updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Wizard shapeshift now converts damage taken while transformed</li>
|
||||
</ul>
|
||||
<h3 class="author">Mark9013100 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">French beret added to standard costume crate(clown and mime outfits).</li>
|
||||
</ul>
|
||||
<h3 class="author">Mickyan updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Certain incompatible quirks can no longer be taken together</li>
|
||||
</ul>
|
||||
<h3 class="author">Nichlas0010 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">You are now also blocked from teleporting IN to no-teleport areas, not just out of them.</li>
|
||||
</ul>
|
||||
<h3 class="author">Skoglol updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Smuggler satchels should now properly be removed from the pool upon spawn.</li>
|
||||
<li class="bugfix">Marker beacons are now disintegrated by nightmares light eater</li>
|
||||
</ul>
|
||||
<h3 class="author">imsxz updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="balance">AI can now only interact with things on its z level</li>
|
||||
</ul>
|
||||
<h3 class="author">xmikey555 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Added pirate language, equip a pirate hat to speak it.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<b>GoonStation 13 Development Team</b>
|
||||
|
||||
@@ -22681,3 +22681,55 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
|
||||
- rscadd: Advanced Gas reactions now produce research points.
|
||||
- rscadd: A gas canister with Pluoxium, Noblium, Stimulum, Miasma or BZ inside now
|
||||
produces points when sold via cargo.
|
||||
2019-01-28:
|
||||
Gousaid67:
|
||||
- bugfix: Spraycans are now able to spray walls again!
|
||||
2019-01-30:
|
||||
4dplanner:
|
||||
- bugfix: adamantine armour no longer screws up clothing protection
|
||||
Kierany9:
|
||||
- bugfix: The Psychic Link pinpointer now works. Oops!
|
||||
ShizCalev:
|
||||
- tweak: Cleanbots now clean up spilled table-salt and plant smudges.
|
||||
Time-Green:
|
||||
- bugfix: geladkinesis snow tiles no longer freeze the station
|
||||
Zxaber:
|
||||
- rscadd: Mechas now ignore strafe mode and turn if the user is holding Alt.
|
||||
actioninja:
|
||||
- rscadd: Added Smoker and Junkie quirks.
|
||||
2019-01-31:
|
||||
4dplanner:
|
||||
- bugfix: antimagic works again
|
||||
- bugfix: fixes cloning
|
||||
BuffEngineering:
|
||||
- imageadd: Pneumatic cannons will now have a tank visible all of the time
|
||||
BuffEngineering/MrDoomBringer:
|
||||
- rscadd: Engineers may now weld with engineering pride using the new welding hardhats!
|
||||
Gousaid67:
|
||||
- bugfix: Alt-Clicking open the Escape Pods safes will no longer ignore the alert
|
||||
level.
|
||||
Hathkar:
|
||||
- balance: Nicotine gives a small bonus to stun resistance instead of being equal
|
||||
to adrenals or ephedrine.
|
||||
Nervere & kevinz000:
|
||||
- rscadd: You can now hold hands with another player by targeting their left or
|
||||
right arm and pulling them.
|
||||
Nichlas0010:
|
||||
- bugfix: the Middle Mouse Button aimbot exploit should no longer be usable
|
||||
Pubby:
|
||||
- tweak: Drop "universal" from suppressors name
|
||||
ShizCalev:
|
||||
- bugfix: Fixed suit storage units not correctly clearing out the radiation of built-in
|
||||
hardsuit helmets and jetpacks.
|
||||
coiax:
|
||||
- rscadd: When a person is cloned, any mental traumas are cloned as well.
|
||||
- rscadd: Adds the Paraplegic quirk for -3 points. You start with unhealable leg
|
||||
paralysis (persists through cloning), and have a wheelchair to move around the
|
||||
station.
|
||||
py01:
|
||||
- bugfix: Twisted Construction no longer damages the caster if canceled or failed
|
||||
to cast
|
||||
- bugfix: Twisted Construction's tool-tip now correctly specifies the amount of
|
||||
metal needed for a construct shell
|
||||
- refactor: Blood rite and Twisted Construction code now uses defines instead of
|
||||
magic numbers
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
author: "Gousaid67"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "Spraycans are now able to spray walls again!"
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "actioninja"
|
||||
delete-after: True
|
||||
changes:
|
||||
- balance: "Bone Hurting Juice now metabolizes at a standard rate for toxins."
|
||||
|
Before Width: | Height: | Size: 168 KiB After Width: | Height: | Size: 168 KiB |
|
Before Width: | Height: | Size: 112 KiB After Width: | Height: | Size: 113 KiB |
|
Before Width: | Height: | Size: 81 KiB After Width: | Height: | Size: 81 KiB |
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 5.9 KiB |