Merge pull request #1 from Citadel-Station-13/master

Testing merging from main branch into fork
This commit is contained in:
Neri
2017-10-03 23:05:25 -07:00
committed by GitHub
56 changed files with 716 additions and 324 deletions
@@ -198,6 +198,7 @@
/obj/structure/stone_tile{
dir = 4
},
/obj/item/dildo/custom,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/ruin/unpowered/ash_walkers)
"aC" = (
@@ -287,6 +288,7 @@
/obj/structure/stone_tile/cracked{
dir = 4
},
/obj/item/dildo/custom,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/ruin/unpowered/ash_walkers)
"aN" = (
@@ -305,6 +307,7 @@
/area/ruin/unpowered/ash_walkers)
"aP" = (
/obj/structure/stone_tile,
/obj/item/dildo/custom,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/ruin/unpowered/ash_walkers)
"aQ" = (
@@ -379,6 +382,7 @@
/obj/structure/stone_tile/cracked{
dir = 1
},
/obj/item/dildo/custom,
/turf/open/indestructible/boss,
/area/ruin/unpowered/ash_walkers)
"aZ" = (
@@ -401,6 +405,7 @@
/obj/structure/stone_tile{
dir = 4
},
/obj/item/dildo/custom,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/ruin/unpowered/ash_walkers)
"bb" = (
@@ -489,6 +494,7 @@
dir = 4
},
/obj/item/storage/bag/plants/portaseeder,
/obj/item/dildo/custom,
/turf/open/indestructible/boss,
/area/ruin/unpowered/ash_walkers)
"bk" = (
@@ -509,6 +515,7 @@
/obj/structure/stone_tile/cracked{
dir = 1
},
/obj/item/dildo/custom,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/ruin/unpowered/ash_walkers)
"bm" = (
@@ -568,6 +575,7 @@
/obj/structure/stone_tile{
dir = 8
},
/obj/item/dildo/custom,
/turf/open/indestructible/boss/air,
/area/ruin/unpowered/ash_walkers)
"br" = (
@@ -897,6 +905,7 @@
/obj/structure/stone_tile/surrounding_tile/cracked{
dir = 8
},
/obj/item/dildo/custom,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"ci" = (
@@ -1042,6 +1051,7 @@
icon_state = "cracked_slab1";
dir = 4
},
/obj/item/dildo/custom,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/ruin/unpowered/ash_walkers)
"cB" = (
@@ -1475,6 +1485,26 @@
/obj/structure/stone_tile,
/turf/closed/mineral/volcanic,
/area/lavaland/surface/outdoors)
"dG" = (
/obj/structure/stone_tile/slab,
/obj/item/dildo/custom,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"dH" = (
/obj/structure/stone_tile/block/cracked,
/obj/structure/stone_tile/block{
dir = 1
},
/obj/item/dildo/custom,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"dI" = (
/obj/structure/stone_tile{
dir = 4
},
/obj/item/dildo/custom,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
(1,1,1) = {"
aa
@@ -1597,7 +1627,7 @@ aO
bl
bx
bD
bS
dG
de
bV
dg
@@ -1625,7 +1655,7 @@ ci
bA
ct
bN
bL
dI
cI
ah
ah
@@ -1732,7 +1762,7 @@ ak
bP
bL
bX
dh
dH
do
du
dz
+180 -19
View File
@@ -24665,7 +24665,7 @@
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
/area/maintenance/aft)
/area/maintenance/department/medical/morgue)
"bgp" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/turf/open/floor/plasteel/white,
@@ -26862,7 +26862,7 @@
dir = 4
},
/turf/open/floor/plating,
/area/maintenance/aft)
/area/maintenance/department/medical/morgue)
"blh" = (
/obj/structure/table/reinforced,
/obj/machinery/door/window/eastright{
@@ -26940,7 +26940,7 @@
dir = 4
},
/turf/open/floor/plating,
/area/maintenance/aft)
/area/maintenance/department/medical/morgue)
"blp" = (
/obj/machinery/power/apc{
dir = 8;
@@ -26974,7 +26974,7 @@
dir = 4
},
/turf/open/floor/plating,
/area/maintenance/aft)
/area/maintenance/department/medical/morgue)
"blr" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 4
@@ -29030,7 +29030,7 @@
},
/obj/structure/disposalpipe/segment,
/turf/open/floor/plating,
/area/maintenance/aft)
/area/maintenance/department/medical/morgue)
"bpR" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/disposalpipe/segment{
@@ -60163,7 +60163,7 @@
icon_state = "2-4"
},
/turf/open/floor/plating,
/area/maintenance/aft)
/area/maintenance/department/medical/morgue)
"cHE" = (
/obj/machinery/door/airlock/maintenance{
name = "Mech Bay Maintenance";
@@ -63862,6 +63862,167 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
"cTJ" = (
/obj/machinery/door/airlock/maintenance{
req_access_txt = "12"
},
/obj/structure/disposalpipe/segment,
/obj/structure/cable{
d1 = 1;
d2 = 2;
icon_state = "1-2"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
/area/maintenance/department/medical/morgue)
"cTK" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable{
d1 = 1;
d2 = 2;
icon_state = "1-2"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
/area/maintenance/department/medical/morgue)
"cTL" = (
/obj/structure/cable{
d1 = 1;
d2 = 2;
icon_state = "1-2"
},
/obj/structure/cable{
d1 = 2;
d2 = 4;
icon_state = "2-4"
},
/turf/open/floor/plasteel/black,
/area/medical/morgue)
"cTM" = (
/obj/machinery/power/apc{
dir = 4;
name = "Morgue Maintenance APC";
areastring = "/area/maintenance/department/medical/morgue";
pixel_x = 26
},
/obj/structure/cable{
d2 = 8;
icon_state = "0-8"
},
/turf/open/floor/plasteel/black,
/area/medical/morgue)
"cTN" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable{
d1 = 1;
d2 = 2;
icon_state = "1-2"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
/area/maintenance/department/medical/morgue)
"cTO" = (
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/structure/cable{
d1 = 4;
d2 = 8;
icon_state = "4-8"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/turf/open/floor/plating,
/area/maintenance/department/medical/morgue)
"cTP" = (
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/structure/cable{
d1 = 4;
d2 = 8;
icon_state = "4-8"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/turf/open/floor/plating,
/area/maintenance/department/medical/morgue)
"cTQ" = (
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/structure/cable{
d1 = 4;
d2 = 8;
icon_state = "4-8"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/turf/open/floor/plating,
/area/maintenance/department/medical/morgue)
"cTR" = (
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/structure/cable{
d1 = 4;
d2 = 8;
icon_state = "4-8"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/turf/open/floor/plating,
/area/maintenance/department/medical/morgue)
"cTS" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable{
d1 = 1;
d2 = 2;
icon_state = "1-2"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/turf/open/floor/plating,
/area/maintenance/department/medical/morgue)
"cTT" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable{
d1 = 1;
d2 = 2;
icon_state = "1-2"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
/area/maintenance/department/medical/morgue)
"cTU" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable{
d1 = 1;
d2 = 2;
icon_state = "1-2"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
/area/maintenance/department/medical/morgue)
"cTV" = (
/obj/machinery/door/airlock/maintenance{
req_access_txt = "12"
},
/obj/structure/disposalpipe/segment,
/obj/structure/cable{
d1 = 1;
d2 = 2;
icon_state = "1-2"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
/area/maintenance/department/medical/morgue)
(1,1,1) = {"
aaa
@@ -103574,7 +103735,7 @@ bfL
bhp
biB
biB
biB
cTL
bkU
bmX
bpE
@@ -103831,7 +103992,7 @@ bfL
bhq
bhm
bkb
bhm
cTM
bla
bmZ
bpH
@@ -104346,7 +104507,7 @@ bfS
biC
bkd
bfS
bKH
cTO
bmZ
bpJ
brc
@@ -104860,7 +105021,7 @@ bfS
biE
bkf
bfS
bKH
cTP
bmZ
bpL
bre
@@ -105117,7 +105278,7 @@ bfS
biD
bke
bfS
bKH
cTQ
bmZ
bpK
brd
@@ -105374,7 +105535,7 @@ bfS
bfS
bfS
bfS
bKH
cTR
bmZ
bon
bon
@@ -105626,17 +105787,17 @@ aYV
baR
bcb
bdl
bdO
cTJ
cHD
bgo
bPv
bPv
cTK
cTN
blq
bna
bPv
cTS
cTT
bpQ
bPv
bdO
cTU
cTV
btm
buy
bvz
+84 -35
View File
@@ -91795,7 +91795,7 @@
"dwO" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/closed/wall,
/area/medical/morgue)
/area/maintenance/department/medical/morgue)
"dwP" = (
/obj/machinery/door/firedoor,
/obj/structure/cable/white{
@@ -91815,7 +91815,7 @@
dir = 1
},
/turf/open/floor/plasteel,
/area/medical/morgue)
/area/maintenance/department/medical/morgue)
"dwQ" = (
/obj/structure/table/glass,
/obj/item/clipboard,
@@ -92448,7 +92448,7 @@
/turf/open/floor/plasteel/vault{
dir = 5
},
/area/medical/morgue)
/area/maintenance/department/medical/morgue)
"dyb" = (
/obj/structure/bed/roller,
/obj/machinery/iv_drip,
@@ -92456,12 +92456,12 @@
/turf/open/floor/plasteel/vault{
dir = 5
},
/area/medical/morgue)
/area/maintenance/department/medical/morgue)
"dyc" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
/area/medical/morgue)
/area/maintenance/department/medical/morgue)
"dyd" = (
/obj/structure/cable/white{
d1 = 1;
@@ -92470,7 +92470,7 @@
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
/area/medical/morgue)
/area/maintenance/department/medical/morgue)
"dye" = (
/obj/structure/table/glass,
/obj/item/folder/white,
@@ -92923,12 +92923,12 @@
"dzf" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/neutral,
/area/medical/morgue)
/area/maintenance/department/medical/morgue)
"dzg" = (
/obj/effect/decal/cleanable/blood/old,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
/area/medical/morgue)
/area/maintenance/department/medical/morgue)
"dzh" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable/white{
@@ -92938,14 +92938,14 @@
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
/area/medical/morgue)
/area/maintenance/department/medical/morgue)
"dzi" = (
/obj/structure/table,
/obj/effect/decal/cleanable/dirt,
/obj/item/storage/backpack/duffelbag/med,
/obj/item/device/flashlight/pen,
/turf/open/floor/plating,
/area/medical/morgue)
/area/maintenance/department/medical/morgue)
"dzj" = (
/turf/closed/wall,
/area/crew_quarters/heads/cmo)
@@ -93674,7 +93674,7 @@
dir = 4
},
/turf/open/floor/plasteel,
/area/medical/morgue)
/area/maintenance/department/medical/morgue)
"dAw" = (
/obj/structure/cable/white{
d1 = 4;
@@ -93687,7 +93687,7 @@
/turf/open/floor/plasteel/vault{
dir = 5
},
/area/medical/morgue)
/area/maintenance/department/medical/morgue)
"dAx" = (
/obj/structure/cable/white{
d1 = 4;
@@ -93699,7 +93699,7 @@
dir = 1
},
/turf/open/floor/plating,
/area/medical/morgue)
/area/maintenance/department/medical/morgue)
"dAy" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable/white{
@@ -93712,7 +93712,7 @@
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
/area/medical/morgue)
/area/maintenance/department/medical/morgue)
"dAz" = (
/obj/structure/cable/white{
d1 = 1;
@@ -93733,14 +93733,14 @@
dir = 4
},
/turf/open/floor/plasteel/neutral,
/area/medical/morgue)
/area/maintenance/department/medical/morgue)
"dAA" = (
/obj/structure/table,
/obj/item/clothing/gloves/color/latex/nitrile,
/obj/item/clothing/suit/apron/surgical,
/obj/item/clothing/mask/breath/medical,
/turf/open/floor/plating,
/area/medical/morgue)
/area/maintenance/department/medical/morgue)
"dAB" = (
/obj/structure/closet/secure_closet/CMO,
/obj/item/clothing/under/rank/nursesuit,
@@ -94324,7 +94324,7 @@
/turf/open/floor/plasteel/vault{
dir = 5
},
/area/medical/morgue)
/area/maintenance/department/medical/morgue)
"dBP" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/components/unary/vent_pump/on{
@@ -94334,13 +94334,13 @@
dir = 4
},
/turf/open/floor/plasteel/neutral,
/area/medical/morgue)
/area/maintenance/department/medical/morgue)
"dBQ" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 4
},
/turf/open/floor/plating,
/area/medical/morgue)
/area/maintenance/department/medical/morgue)
"dBR" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable/white{
@@ -94350,7 +94350,7 @@
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel/neutral,
/area/medical/morgue)
/area/maintenance/department/medical/morgue)
"dBS" = (
/obj/structure/rack,
/obj/effect/decal/cleanable/dirt,
@@ -94359,7 +94359,7 @@
/turf/open/floor/plasteel/vault{
dir = 5
},
/area/medical/morgue)
/area/maintenance/department/medical/morgue)
"dBT" = (
/obj/machinery/light{
dir = 8
@@ -95032,15 +95032,15 @@
/obj/structure/closet/secure_closet/medical3,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/medical/morgue)
/area/maintenance/department/medical/morgue)
"dDe" = (
/obj/structure/closet/wardrobe/white/medical,
/turf/open/floor/plating,
/area/medical/morgue)
/area/maintenance/department/medical/morgue)
"dDf" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
/area/medical/morgue)
/area/maintenance/department/medical/morgue)
"dDg" = (
/obj/structure/cable/white{
d1 = 1;
@@ -95048,10 +95048,15 @@
icon_state = "1-2"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/cable/white{
d1 = 2;
d2 = 4;
icon_state = "2-4"
},
/turf/open/floor/plasteel/vault{
dir = 5
},
/area/medical/morgue)
/area/maintenance/department/medical/morgue)
"dDh" = (
/obj/machinery/suit_storage_unit/cmo,
/obj/effect/turf_decal/stripes/line{
@@ -95603,7 +95608,7 @@
dir = 1
},
/turf/open/floor/plasteel,
/area/medical/morgue)
/area/maintenance/department/medical/morgue)
"dEn" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/closed/wall,
@@ -113090,6 +113095,50 @@
/obj/structure/ore_box,
/turf/open/floor/plating,
/area/shuttle/auxillary_base)
"esz" = (
/turf/closed/wall/r_wall,
/area/maintenance/department/medical/morgue)
"esA" = (
/turf/closed/wall/r_wall,
/area/maintenance/department/medical/morgue)
"esB" = (
/turf/closed/wall,
/area/maintenance/department/medical/morgue)
"esC" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/vault{
dir = 5
},
/area/maintenance/department/medical/morgue)
"esD" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/maintenance/department/medical/morgue)
"esE" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/power/apc{
dir = 2;
name = "Morgue Maintenance APC";
areastring = "/area/maintenance/department/medical/morgue";
pixel_y = -26
},
/obj/structure/cable/white{
d2 = 8;
icon_state = "0-8"
},
/turf/open/floor/plasteel/vault{
dir = 5
},
/area/maintenance/department/medical/morgue)
"esF" = (
/turf/closed/wall,
/area/maintenance/department/medical/morgue)
"esG" = (
/turf/closed/wall,
/area/maintenance/department/medical/morgue)
"esH" = (
/turf/closed/wall,
/area/maintenance/department/medical/morgue)
(1,1,1) = {"
aaa
@@ -155932,13 +155981,13 @@ drr
dsR
dur
dvw
dwN
esz
dya
dyY
esD
dAw
dBO
dDd
dwK
esF
dFd
dGE
dHP
@@ -156189,13 +156238,13 @@ drs
dsS
drs
dvx
dwN
esA
dyb
dzf
dAx
dBP
dDe
dwK
esG
dFe
dGF
dHP
@@ -156960,13 +157009,13 @@ drv
dlO
dus
dvA
dwK
dxS
esB
esC
dzi
dAA
dBS
dxS
dwK
esE
esH
dEY
dGA
dHP
+2
View File
@@ -70,6 +70,8 @@
#define LIGHT_COLOR_TUNGSTEN "#FAE1AF" //Extremely diluted yellow, close to skin color (for some reason). rgb(250, 225, 175)
#define LIGHT_COLOR_HALOGEN "#F0FAFA" //Barely visible cyan-ish hue, as the doctor prescribed. rgb(240, 250, 250)
#define LIGHT_RANGE_FIRE 3 //How many tiles standard fires glow.
#define LIGHTING_PLANE_ALPHA_VISIBLE 255
#define LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE 192
#define LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE 128 //For lighting alpha, small amounts lead to big changes. even at 128 its hard to figure out what is dark and what is light, at 64 you almost can't even tell.
+1
View File
@@ -15,6 +15,7 @@ GLOBAL_LIST_INIT(carp_names, world.file2list("strings/names/carp.txt"))
GLOBAL_LIST_INIT(golem_names, world.file2list("strings/names/golem.txt"))
GLOBAL_LIST_INIT(plasmaman_names, world.file2list("strings/names/plasmaman.txt"))
GLOBAL_LIST_INIT(posibrain_names, world.file2list("strings/names/posibrain.txt"))
GLOBAL_LIST_INIT(nightmare_names, world.file2list("strings/names/nightmare.txt"))
GLOBAL_LIST_INIT(verbs, world.file2list("strings/names/verbs.txt"))
-1
View File
@@ -359,7 +359,6 @@
else
user.listed_turf = T
user.client.statpanel = T.name
user.Stat() //responsive ui pls
/mob/proc/TurfAdjacent(turf/T)
return T.Adjacent(src)
@@ -8,10 +8,8 @@ CONFIG_DEF(string/autoadmin_rank) // the rank for autoadmins
protection = CONFIG_ENTRY_LOCKED
CONFIG_DEF(string/servername) // server name (the name of the game window)
protection = CONFIG_ENTRY_LOCKED
CONFIG_DEF(string/serversqlname) // short form server name used for the DB
protection = CONFIG_ENTRY_LOCKED
CONFIG_DEF(string/stationname) // station name (the name of the station in-game)
@@ -24,52 +22,38 @@ CONFIG_DEF(number/round_end_countdown) // Post round murder death kill countdown
min_val = 0
CONFIG_DEF(flag/hub) // if the game appears on the hub or not
protection = CONFIG_ENTRY_LOCKED
CONFIG_DEF(flag/log_ooc) // log OOC channel
protection = CONFIG_ENTRY_LOCKED
CONFIG_DEF(flag/log_access) // log login/logout
protection = CONFIG_ENTRY_LOCKED
CONFIG_DEF(flag/log_say) // log client say
protection = CONFIG_ENTRY_LOCKED
CONFIG_DEF(flag/log_admin) // log admin actions
protection = CONFIG_ENTRY_LOCKED
CONFIG_DEF(flag/log_prayer) // log prayers
protection = CONFIG_ENTRY_LOCKED
CONFIG_DEF(flag/log_law) // log lawchanges
protection = CONFIG_ENTRY_LOCKED
CONFIG_DEF(flag/log_game) // log game events
protection = CONFIG_ENTRY_LOCKED
CONFIG_DEF(flag/log_vote) // log voting
protection = CONFIG_ENTRY_LOCKED
CONFIG_DEF(flag/log_whisper) // log client whisper
protection = CONFIG_ENTRY_LOCKED
CONFIG_DEF(flag/log_attack) // log attack messages
protection = CONFIG_ENTRY_LOCKED
CONFIG_DEF(flag/log_emote) // log emotes
protection = CONFIG_ENTRY_LOCKED
CONFIG_DEF(flag/log_adminchat) // log admin chat messages
protection = CONFIG_ENTRY_LOCKED
CONFIG_DEF(flag/log_pda) // log pda messages
protection = CONFIG_ENTRY_LOCKED
CONFIG_DEF(flag/log_twitter) // log certain expliotable parrots and other such fun things in a JSON file of twitter valid phrases.
protection = CONFIG_ENTRY_LOCKED
CONFIG_DEF(flag/log_world_topic) // log all world.Topic() calls
protection = CONFIG_ENTRY_LOCKED
CONFIG_DEF(flag/allow_admin_ooccolor) // Allows admins with relevant permissions to have their own ooc colour
protection = CONFIG_ENTRY_LOCKED
@@ -85,14 +69,12 @@ CONFIG_DEF(number/vote_delay) // minimum time between voting sessions (decisecon
CONFIG_DEF(number/vote_period) // length of voting period (deciseconds, default 1 minute)
value = 600
min_val = 0
CONFIG_DEF(flag/default_no_vote) // vote does not default to nochange/norestart
protection = CONFIG_ENTRY_LOCKED
CONFIG_DEF(flag/no_dead_vote) // dead people can't vote
CONFIG_DEF(flag/allow_metadata) // Metadata is supported.
protection = CONFIG_ENTRY_LOCKED
CONFIG_DEF(flag/popup_admin_pm) // adminPMs to non-admins show in a pop-up 'reply' window when set
@@ -140,14 +122,12 @@ CONFIG_DEF(flag/admin_legacy_system) //Defines whether the server uses the legac
protection = CONFIG_ENTRY_LOCKED
CONFIG_DEF(string/hostedby)
protection = CONFIG_ENTRY_LOCKED
CONFIG_DEF(flag/norespawn)
CONFIG_DEF(flag/guest_jobban)
CONFIG_DEF(flag/usewhitelist)
protection = CONFIG_ENTRY_LOCKED
CONFIG_DEF(flag/ban_legacy_system) //Defines whether the server uses the legacy banning system with the files in /data or the SQL system.
protection = CONFIG_ENTRY_LOCKED
@@ -171,29 +151,22 @@ CONFIG_DEF(flag/use_exp_restrictions_other)
CONFIG_DEF(flag/use_exp_restrictions_admin_bypass)
CONFIG_DEF(string/server)
protection = CONFIG_ENTRY_LOCKED
CONFIG_DEF(string/banappeals)
protection = CONFIG_ENTRY_LOCKED
CONFIG_DEF(string/wikiurl)
protection = CONFIG_ENTRY_LOCKED
value = "http://www.tgstation13.org/wiki"
CONFIG_DEF(string/forumurl)
protection = CONFIG_ENTRY_LOCKED
value = "http://tgstation13.org/phpBB/index.php"
CONFIG_DEF(string/rulesurl)
protection = CONFIG_ENTRY_LOCKED
value = "http://www.tgstation13.org/wiki/Rules"
CONFIG_DEF(string/githuburl)
protection = CONFIG_ENTRY_LOCKED
value = "https://www.github.com/tgstation/-tg-station"
CONFIG_DEF(number/githubrepoid)
protection = CONFIG_ENTRY_LOCKED
value = null
min_val = 0
@@ -233,7 +206,6 @@ CONFIG_DEF(flag/useircbot) //tgs2 support
CONFIG_DEF(flag/automute_on) //enables automuting/spam prevention
CONFIG_DEF(string/panic_server_name)
protection = CONFIG_ENTRY_LOCKED
/datum/config_entry/string/panic_server_name/ValidateAndSet(str_val)
return str_val != "\[Put the name here\]" && ..()
@@ -290,7 +262,6 @@ CONFIG_DEF(string/extreme_popcap_message)
value = "The server is currently serving a high number of users, find alternative servers."
CONFIG_DEF(flag/panic_bunker) // prevents people the server hasn't seen before from connecting
protection = CONFIG_ENTRY_LOCKED
CONFIG_DEF(number/notify_new_player_age) // how long do we notify admins of a new player
min_val = -1
@@ -303,7 +274,6 @@ CONFIG_DEF(flag/irc_first_connection_alert) // do we notify the irc channel when
CONFIG_DEF(flag/check_randomizer)
CONFIG_DEF(string/ipintel_email)
protection = CONFIG_ENTRY_LOCKED | CONFIG_ENTRY_HIDDEN
/datum/config_entry/string/ipintel_email/ValidateAndSet(str_val)
return str_val != "ch@nge.me" && ..()
@@ -315,17 +285,14 @@ CONFIG_DEF(number/ipintel_rating_bad)
max_val = 1
CONFIG_DEF(number/ipintel_save_good)
protection = CONFIG_ENTRY_LOCKED
value = 12
min_val = 0
CONFIG_DEF(number/ipintel_save_bad)
protection = CONFIG_ENTRY_LOCKED
value = 1
min_val = 0
CONFIG_DEF(string/ipintel_domain)
protection = CONFIG_ENTRY_LOCKED
value = "check.getipintel.net"
CONFIG_DEF(flag/aggressive_changelog)
+8 -2
View File
@@ -17,6 +17,7 @@
var/show_on_examine
var/list/allowed_typecache
var/last_inserted_type
var/last_inserted_id
var/last_amount_inserted
var/last_insert_success
var/datum/callback/precondition
@@ -116,7 +117,7 @@
if(!amt)
return 0
insert_materials(S,amt)
last_inserted_id = insert_materials(S,amt)
last_inserted_type = S.type
S.use(amt)
last_amount_inserted = amt
@@ -133,17 +134,22 @@
if(!material_amount || !has_space(material_amount))
return 0
insert_materials(I, multiplier)
last_inserted_id = insert_materials(I, multiplier)
last_inserted_type = I.type
last_amount_inserted = material_amount
return material_amount
/datum/component/material_container/proc/insert_materials(obj/item/I, multiplier = 1) //for internal usage only
var/datum/material/M
var/primary_mat
var/max_mat_value = 0
for(var/MAT in materials)
M = materials[MAT]
M.amount += I.materials[MAT] * multiplier
total_amount += I.materials[MAT] * multiplier
if(I.materials[MAT] > max_mat_value)
primary_mat = MAT
return primary_mat
//For consuming material
//mats is a list of types of material to use and the corresponding amounts, example: list(MAT_METAL=100, MAT_GLASS=200)
+1
View File
@@ -63,6 +63,7 @@
var/mob/living/enslaved_to //If this mind's master is another mob (i.e. adamantine golems)
var/datum/language_holder/language_holder
var/unconvertable = FALSE
/datum/mind/New(var/key)
src.key = key
+5 -1
View File
@@ -151,7 +151,11 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
/area/maintenance/department/medical
name = "Medbay Maintenance"
icon_state = "asmaint"
icon_state = "medbay_maint"
/area/maintenance/department/medical/morgue
name = "Morgue Maintenance"
icon_state = "morgue_maint"
/area/maintenance/department/science
name = "Science Maintenance"
+1
View File
@@ -189,6 +189,7 @@
/atom/proc/CollidedWith(atom/movable/AM)
set waitfor = FALSE
return
// Convenience proc to see if a container is open for chemistry handling
@@ -53,6 +53,8 @@ Credit where due:
return FALSE
if(M.mind.enslaved_to && !is_servant_of_ratvar(M.mind.enslaved_to))
return FALSE
if(M.mind.unconvertable)
return FALSE
else
return FALSE
if(iscultist(M) || isconstruct(M) || M.isloyal() || ispAI(M))
+2
View File
@@ -21,6 +21,8 @@
return FALSE
if(M.mind.enslaved_to && !iscultist(M.mind.enslaved_to))
return FALSE
if(M.mind.unconvertable)
return FALSE
else
return FALSE
if(M.isloyal() || issilicon(M) || isbot(M) || isdrone(M) || is_servant_of_ratvar(M))
+6 -4
View File
@@ -253,12 +253,14 @@
/datum/game_mode/proc/add_revolutionary(datum/mind/rev_mind)
if(rev_mind.assigned_role in GLOB.command_positions)
return 0
return FALSE
var/mob/living/carbon/human/H = rev_mind.current//Check to see if the potential rev is implanted
if(H.isloyal())
return 0
return FALSE
if((rev_mind in revolutionaries) || (rev_mind in head_revolutionaries))
return 0
return FALSE
if(rev_mind.unconvertable)
return FALSE
revolutionaries += rev_mind
if(iscarbon(rev_mind.current))
var/mob/living/carbon/carbon_mob = rev_mind.current
@@ -271,7 +273,7 @@
update_rev_icons_added(rev_mind)
if(jobban_isbanned(rev_mind.current, ROLE_REV))
INVOKE_ASYNC(src, .proc/replace_jobbaned_player, rev_mind.current, ROLE_REV, ROLE_REV)
return 1
return TRUE
//////////////////////////////////////////////////////////////////////////////
//Deals with players being converted from the revolution (Not a rev anymore)// // Modified to handle borged MMIs. Accepts another var if the target is being borged at the time -- Polymorph.
//////////////////////////////////////////////////////////////////////////////
+5 -6
View File
@@ -134,12 +134,11 @@
if(ispath(lit, /obj/item/ore/bluespace_crystal))
use_power(max(500,M.last_amount_inserted/10))
else
var/obj/item/stack/S = lit
var/list/initmats = initial(S.materials)
if (initmats[MAT_METAL])
flick("autolathe_o",src)//plays metal insertion animation
if (initmats[MAT_GLASS])
flick("autolathe_r",src)//plays glass insertion animation
switch(M.last_inserted_id)
if (MAT_METAL)
flick("autolathe_o",src)//plays metal insertion animation
if (MAT_GLASS)
flick("autolathe_r",src)//plays glass insertion animation
use_power(M.last_amount_inserted*100)
updateUsrDialog()
+1 -7
View File
@@ -420,13 +420,7 @@
var/datum/component/material_container/M = C
if(!M.last_insert_success)
return
var/lit = M.last_inserted_type
var/stack_name
if(ispath(lit, /obj/item/ore/bluespace_crystal))
stack_name = "bluespace"
else
var/obj/item/stack/S = lit
stack_name = material2name(initial(S.materials)[1])
var/stack_name = material2name(M.last_inserted_id)
add_overlay("fab-load-[stack_name]")
addtimer(CALLBACK(src, /atom/proc/cut_overlay, "fab-load-[stack_name]"), 10)
updateUsrDialog()
+3 -3
View File
@@ -39,10 +39,10 @@
/obj/effect/portal/attackby(obj/item/W, mob/user, params)
if(user && Adjacent(user))
teleport(user)
user.forceMove(get_turf(src))
/obj/effect/portal/Crossed(atom/movable/AM, oldloc)
if(get_turf(oldloc) == get_turf(linked))
if(linked && (get_turf(oldloc) == get_turf(linked)))
return ..()
if(!teleport(AM))
return ..()
@@ -52,7 +52,7 @@
/obj/effect/portal/attack_hand(mob/user)
if(Adjacent(user))
teleport(user)
user.forceMove(get_turf(src))
/obj/effect/portal/Initialize(mapload, _creator, _lifespan = 0, obj/effect/portal/_linked, automatic_link = FALSE, turf/hard_target_override, atmos_link_override)
. = ..()
@@ -213,7 +213,7 @@
/obj/effect/temp_visual/fire
icon = 'icons/effects/fire.dmi'
icon_state = "3"
light_range = 3
light_range = LIGHT_RANGE_FIRE
light_color = LIGHT_COLOR_FIRE
duration = 10
@@ -143,4 +143,82 @@ Code:
</TT>"}
user << browse(dat, "window=radio")
onclose(user, "radio")
return
return
/obj/item/device/electropack/shockcollar
name = "shock collar"
desc = "A reinforced metal collar. It seems to have some form of wiring near the front. Strange.."
icon = 'icons/obj/clothing/neck.dmi'
icon_state = "shockcollar"
item_state = "shockcollar"
body_parts_covered = NECK
slot_flags = SLOT_NECK
w_class = WEIGHT_CLASS_SMALL
strip_delay = 60
equip_delay_other = 60
materials = list(MAT_METAL=5000, MAT_GLASS=2000)
var/tagname = null
/obj/item/device/electropack/shockcollar/attack_hand(mob/user)
if(loc == user)
if(slot_flags == SLOT_NECK)
to_chat(user, "<span class='warning'>The collar is fastened tight! You'll need help taking this off!</span>")
return
..()
/obj/item/device/electropack/shockcollar/receive_signal(datum/signal/signal)
if(!signal || signal.encryption != code)
return
if(isliving(loc) && on)
if(shock_cooldown != 0)
return
shock_cooldown = 1
spawn(100)
shock_cooldown = 0
var/mob/living/L = loc
step(L, pick(GLOB.cardinals))
to_chat(L, "<span class='danger'>You feel a sharp shock from the collar!</span>")
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, L)
s.start()
L.Knockdown(100)
if(master)
master.receive_signal()
return
/obj/item/device/electropack/shockcollar/attack_self(mob/user) //Turns out can't fully source this from the parent item, spritepath gets confused if power toggled. Will come back to this when I know how to code better and readd powertoggle..
var/option = "Change Name"
option = input(user, "What do you want to do?", "[src]", option) as null|anything in list("Change Name", "Change Frequency")
switch(option)
if("Change Name")
var/t = input(user, "Would you like to change the name on the tag?", "Name your new pet", tagname ? tagname : "Spot") as null|text
if(t)
tagname = copytext(sanitize(t), 1, MAX_NAME_LEN)
name = "[initial(name)] - [tagname]"
if("Change Frequency")
if(!ishuman(user))
return
user.set_machine(src)
var/dat = {"<SK><BR>
<B>Frequency/Code</B> for shock collar:<BR>
Frequency:
<A href='byond://?src=\ref[src];freq=-10'>-</A>
<A href='byond://?src=\ref[src];freq=-2'>-</A> [format_frequency(frequency)]
<A href='byond://?src=\ref[src];freq=2'>+</A>
<A href='byond://?src=\ref[src];freq=10'>+</A><BR>
Code:
<A href='byond://?src=\ref[src];code=-5'>-</A>
<A href='byond://?src=\ref[src];code=-1'>-</A> [code]
<A href='byond://?src=\ref[src];code=1'>+</A>
<A href='byond://?src=\ref[src];code=5'>+</A><BR>
</SK>"}
user << browse(dat, "window=radio")
onclose(user, "radio")
return
@@ -19,12 +19,12 @@
/obj/item/implant/mindshield/implant(mob/living/target, mob/user, silent = 0)
if(..())
if((target.mind in (SSticker.mode.head_revolutionaries)))
if((target.mind in (SSticker.mode.head_revolutionaries)) || target.mind.unconvertable)
if(!silent)
target.visible_message("<span class='warning'>[target] seems to resist the implant!</span>", "<span class='warning'>You feel something interfering with your mental conditioning, but you resist it!</span>")
removed(target, 1)
qdel(src)
return 0
return FALSE
if(target.mind in SSticker.mode.revolutionaries)
SSticker.mode.remove_revolutionary(target.mind, FALSE, user)
if(!silent)
@@ -32,8 +32,8 @@
to_chat(target, "<span class='warning'>You feel something interfering with your mental conditioning, but you resist it!</span>")
else
to_chat(target, "<span class='notice'>You feel a sense of peace and security. You are now protected from brainwashing.</span>")
return 1
return 0
return TRUE
return FALSE
/obj/item/implant/mindshield/removed(mob/target, silent = 0, special = 0)
if(..())
+1 -1
View File
@@ -156,7 +156,7 @@
/turf/closed/bullet_act(obj/item/projectile/Proj)
. = ..()
if(!Proj.nodamage && (Proj.damage_type == BRUTE || Proj.damage_type == BURN))
if((. != -1) && !Proj.nodamage && (Proj.damage_type == BRUTE || Proj.damage_type == BURN))
var/mutable_appearance/bullet_hole = mutable_appearance('icons/effects/effects.dmi', "bullet_hole", BULLET_HOLE_LAYER)
var/random_x = rand(-13, 13)
+15 -21
View File
@@ -121,8 +121,6 @@
return FALSE
/turf/Enter(atom/movable/mover as mob|obj, atom/forget as mob|obj|turf|area)
if (!mover)
return TRUE
// First, make sure it can leave its square
if(isturf(mover.loc))
// Nothing but border objects stop you from leaving a tile, only one loop is needed
@@ -131,32 +129,28 @@
mover.Collide(obstacle)
return FALSE
var/list/large_dense = list()
//Next, check objects to block entry that are on the border
for(var/atom/movable/border_obstacle in src)
if(border_obstacle.flags_1 & ON_BORDER_1)
if(!border_obstacle.CanPass(mover, mover.loc, 1) && (forget != border_obstacle))
mover.Collide(border_obstacle)
return FALSE
else
large_dense += border_obstacle
//Then, check the turf itself
if (!src.CanPass(mover, src))
mover.Collide(src)
return FALSE
//Finally, check objects/mobs to block entry that are not on the border
var/atom/movable/tompost_bump
var/atom/movable/topmost_bump
var/top_layer = FALSE
for(var/atom/movable/obstacle in large_dense)
//Next, check objects to block entry that are on the border
for(var/atom/movable/obstacle in src)
if(!obstacle.CanPass(mover, mover.loc, 1) && (forget != obstacle))
if(obstacle.layer > top_layer)
tompost_bump = obstacle
top_layer = obstacle.layer
if(tompost_bump)
mover.Collide(tompost_bump)
if(obstacle.flags_1 & ON_BORDER_1)
mover.Collide(obstacle)
return FALSE
else
if(obstacle.layer > top_layer)
topmost_bump = obstacle
top_layer = obstacle.layer
if(topmost_bump)
mover.Collide(topmost_bump)
return FALSE
return TRUE //Nothing found to block so return success!
@@ -49,7 +49,7 @@
icon = 'icons/effects/fire.dmi'
icon_state = "1"
layer = ABOVE_OPEN_TURF_LAYER
light_range = 3
light_range = LIGHT_RANGE_FIRE
light_color = LIGHT_COLOR_FIRE
var/volume = 125
@@ -175,3 +175,15 @@
..()
if(isliving(L))
L.fire_act(temperature, volume)
/obj/effect/dummy/fire
name = "fire"
desc = "OWWWWWW. IT BURNS. Tell a coder if you're seeing this."
icon_state = "nothing"
light_color = LIGHT_COLOR_FIRE
light_range = LIGHT_RANGE_FIRE
/obj/effect/dummy/fire/Initialize()
. = ..()
if(!isliving(loc))
qdel(src)
+2 -7
View File
@@ -26,7 +26,7 @@
for(var/i = 1, i <= number_of_wormholes, i++)
var/turf/T = pick(pick_turfs)
wormholes += new /obj/effect/portal/wormhole(T, null, 300, null, FALSE)
wormholes += new /obj/effect/portal/wormhole(T, null, 0, null, FALSE)
/datum/round_event/wormholes/announce()
priority_announce("Space-time anomalies detected on the station. There is no additional data.", "Anomaly Alert", 'sound/ai/spanomalies.ogg')
@@ -40,6 +40,7 @@
/datum/round_event/wormholes/end()
QDEL_LIST(wormholes)
wormholes = null
/obj/effect/portal/wormhole
name = "wormhole"
@@ -48,12 +49,6 @@
icon_state = "anom"
mech_sized = TRUE
/obj/effect/portal/wormhole/attack_hand(mob/user)
teleport(user)
/obj/effect/portal/wormhole/attackby(obj/item/I, mob/user, params)
teleport(user)
/obj/effect/portal/wormhole/teleport(atom/movable/M)
if(istype(M, /obj/effect)) //sparks don't teleport
return
@@ -185,7 +185,9 @@
/obj/item/reagent_containers/food/snacks/monkeycube/proc/Expand()
visible_message("<span class='notice'>[src] expands!</span>")
new /mob/living/carbon/monkey(get_turf(src))
var/mob/spammer = get_mob_by_key(src.fingerprintslast)
var/mob/living/carbon/monkey/bananas = new(get_turf(src))
bananas.log_message("Spawned via [src] at [COORD(src)], Last attached mob: [key_name(spammer)].", INDIVIDUAL_ATTACK_LOG)
qdel(src)
/obj/item/reagent_containers/food/snacks/enchiladas
+4 -8
View File
@@ -18,12 +18,12 @@
vital = FALSE
decoy_override = TRUE
/obj/item/organ/brain/Insert(mob/living/carbon/C, special = 0)
/obj/item/organ/brain/Insert(mob/living/carbon/C, special = 0,no_id_transfer = FALSE)
..()
name = "brain"
if(C.mind && C.mind.changeling) //congrats, you're trapped in a body you don't control
if(C.mind && C.mind.changeling && !no_id_transfer) //congrats, you're trapped in a body you don't control
if(brainmob && !(C.stat == DEAD || (C.status_flags & FAKEDEATH)))
to_chat(brainmob, "<span class = danger>You can't feel your body! You're still just a brain!</span>")
loc = C
@@ -44,13 +44,9 @@
//Update the body's icon so it doesnt appear debrained anymore
C.update_hair()
/obj/item/organ/brain/Remove(mob/living/carbon/C, special = 0)
/obj/item/organ/brain/Remove(mob/living/carbon/C, special = 0,no_id_transfer = FALSE)
..()
if(!special)
if(C.has_brain_worms())
var/mob/living/simple_animal/borer/B = C.has_brain_worms()
B.leave_victim() //Should remove borer if the brain is removed - RR
if(!gc_destroyed || (owner && !owner.gc_destroyed))
if((!gc_destroyed || (owner && !owner.gc_destroyed)) && !no_id_transfer)
transfer_identity(C)
C.update_hair()
@@ -277,9 +277,11 @@
if(!appears_dead)
if(stat == UNCONSCIOUS)
msg += "[t_He] [t_is]n't responding to anything around [t_him] and seems to be asleep.\n"
else if(getBrainLoss() >= 60)
msg += "[t_He] [t_has] a stupid expression on [t_his] face.\n"
else
if(getBrainLoss() >= 60)
msg += "[t_He] [t_has] a stupid expression on [t_his] face.\n"
if(InCritical())
msg += "[t_He] is barely concious.\n"
if(getorgan(/obj/item/organ/brain))
if(istype(src, /mob/living/carbon/human/interactive))
var/mob/living/carbon/human/interactive/auto = src
+1 -30
View File
@@ -21,41 +21,12 @@
set_species(dna.species.type)
//initialise organs
create_internal_organs()
create_internal_organs() //most of it is done in set_species now, this is only for parent call
handcrafting = new()
. = ..()
/mob/living/carbon/human/create_internal_organs()
if(!(NOHUNGER in dna.species.species_traits))
internal_organs += new /obj/item/organ/appendix
if(!(NOBREATH in dna.species.species_traits))
if(dna.species.mutantlungs)
internal_organs += new dna.species.mutantlungs()
else
internal_organs += new /obj/item/organ/lungs()
if(!(NOBLOOD in dna.species.species_traits))
internal_organs += new /obj/item/organ/heart
if(!(NOLIVER in dna.species.species_traits))
if(dna.species.mutantliver)
internal_organs += new dna.species.mutantliver()
else
internal_organs += new /obj/item/organ/liver()
if(!(NOSTOMACH in dna.species.species_traits))
if(dna.species.mutantstomach)
internal_organs += new dna.species.mutantstomach()
else
internal_organs += new /obj/item/organ/stomach()
internal_organs += new dna.species.mutanteyes
internal_organs += new dna.species.mutantears
internal_organs += new dna.species.mutanttongue
internal_organs += new /obj/item/organ/brain
..()
/mob/living/carbon/human/OpenCraftingMenu()
handcrafting.ui_interact(src)
+110 -74
View File
@@ -68,7 +68,8 @@
//Flight and floating
var/override_float = 0
var/obj/item/organ/brain/mutant_brain = /obj/item/organ/brain
var/obj/item/organ/eyes/mutanteyes = /obj/item/organ/eyes
var/obj/item/organ/ears/mutantears = /obj/item/organ/ears
var/obj/item/mutanthands
@@ -123,6 +124,113 @@
return 0
return 1
//Will regenerate missing organs
/datum/species/proc/regenerate_organs(mob/living/carbon/C,datum/species/old_species,replace_current=TRUE)
var/obj/item/organ/brain/brain = C.getorganslot("brain")
var/obj/item/organ/heart/heart = C.getorganslot("heart")
var/obj/item/organ/lungs/lungs = C.getorganslot("lungs")
var/obj/item/organ/appendix/appendix = C.getorganslot("appendix")
var/obj/item/organ/eyes/eyes = C.getorganslot("eye_sight")
var/obj/item/organ/ears/ears = C.getorganslot("ears")
var/obj/item/organ/tongue/tongue = C.getorganslot("tongue")
var/obj/item/organ/liver/liver = C.getorganslot("liver")
var/obj/item/organ/stomach/stomach = C.getorganslot("stomach")
var/should_have_brain = TRUE
var/should_have_heart = !(NOBLOOD in species_traits)
var/should_have_lungs = !(NOBREATH in species_traits)
var/should_have_appendix = !(NOHUNGER in species_traits)
var/should_have_eyes = TRUE
var/should_have_ears = TRUE
var/should_have_tongue = TRUE
var/should_have_liver = !(NOLIVER in species_traits)
var/should_have_stomach = !(NOSTOMACH in species_traits)
if(brain && (replace_current || !should_have_brain))
if(!brain.decoy_override)//Just keep it if it's fake
brain.Remove(C,TRUE,TRUE)
QDEL_NULL(brain)
if(should_have_brain && !brain)
brain = new mutant_brain()
brain.Insert(C, TRUE, TRUE)
if(heart && (!should_have_heart || replace_current))
heart.Remove(C,1)
QDEL_NULL(heart)
if(should_have_heart && !heart)
heart = new()
heart.Insert(C)
if(lungs && (replace_current || !should_have_lungs))
lungs.Remove(C,1)
QDEL_NULL(lungs)
if(should_have_lungs && !lungs)
if(mutantlungs)
lungs = new mutantlungs()
else
lungs = new()
lungs.Insert(C)
if(liver && (!should_have_liver || replace_current))
liver.Remove(C,1)
QDEL_NULL(liver)
if(should_have_liver && !liver)
if(mutantliver)
liver = new mutantliver()
else
liver = new()
liver.Insert(C)
if(stomach && (!should_have_stomach || replace_current))
stomach.Remove(C,1)
QDEL_NULL(stomach)
if(should_have_stomach && !stomach)
if(mutantstomach)
stomach = new mutantstomach()
else
stomach = new()
stomach.Insert(C)
if(appendix && (!should_have_appendix || replace_current))
appendix.Remove(C,1)
QDEL_NULL(appendix)
if(should_have_appendix && !appendix)
appendix = new()
appendix.Insert(C)
if(C.get_bodypart("head"))
if(eyes && (replace_current || !should_have_eyes))
eyes.Remove(C,1)
QDEL_NULL(eyes)
if(should_have_eyes && !eyes)
eyes = new mutanteyes
eyes.Insert(C)
if(ears && (replace_current || !should_have_ears))
ears.Remove(C,1)
QDEL_NULL(ears)
if(should_have_ears && !ears)
ears = new mutantears
ears.Insert(C)
if(tongue && (replace_current || !should_have_tongue))
tongue.Remove(C,1)
QDEL_NULL(tongue)
if(should_have_tongue && !tongue)
tongue = new mutanttongue
tongue.Insert(C)
if(old_species)
for(var/mutantorgan in old_species.mutant_organs)
var/obj/item/organ/I = C.getorgan(mutantorgan)
if(I)
I.Remove(C)
QDEL_NULL(I)
for(var/path in mutant_organs)
var/obj/item/organ/I = new path()
I.Insert(C)
/datum/species/proc/on_species_gain(mob/living/carbon/C, datum/species/old_species)
// Drop the items the new species can't wear
for(var/slot_id in no_equip)
@@ -138,79 +246,7 @@
if(DIGITIGRADE in species_traits)
C.Digitigrade_Leg_Swap(FALSE)
var/obj/item/organ/heart/heart = C.getorganslot("heart")
var/obj/item/organ/lungs/lungs = C.getorganslot("lungs")
var/obj/item/organ/appendix/appendix = C.getorganslot("appendix")
var/obj/item/organ/eyes/eyes = C.getorganslot("eye_sight")
var/obj/item/organ/ears/ears = C.getorganslot("ears")
var/obj/item/organ/tongue/tongue = C.getorganslot("tongue")
var/obj/item/organ/liver/liver = C.getorganslot("liver")
var/obj/item/organ/stomach/stomach = C.getorganslot("stomach")
if((NOBLOOD in species_traits) && heart)
heart.Remove(C)
qdel(heart)
else if((!(NOBLOOD in species_traits)) && (!heart))
heart = new()
heart.Insert(C)
if(lungs)
qdel(lungs)
lungs = null
QDEL_NULL(liver)
QDEL_NULL(stomach)
if(C.get_bodypart("head"))
if(eyes)
qdel(eyes)
eyes = new mutanteyes
eyes.Insert(C)
if(ears)
qdel(ears)
ears = new mutantears
ears.Insert(C)
if(tongue)
qdel(tongue)
tongue = new mutanttongue
tongue.Insert(C)
if((!(NOBREATH in species_traits)) && !lungs)
if(mutantlungs)
lungs = new mutantlungs()
else
lungs = new()
lungs.Insert(C)
if((!(NOLIVER in species_traits)) && (!liver))
if(mutantliver)
liver = new mutantliver()
else
liver = new()
liver.Insert(C)
if((!(NOSTOMACH in species_traits)) && (!stomach))
if(mutantstomach)
stomach = new mutantstomach()
else
stomach = new()
stomach.Insert(C)
if((NOHUNGER in species_traits) && appendix)
qdel(appendix)
else if((!(NOHUNGER in species_traits)) && (!appendix))
appendix = new()
appendix.Insert(C)
for(var/path in mutant_organs)
var/obj/item/organ/I = new path()
I.Insert(C)
regenerate_organs(C,old_species)
if(exotic_bloodtype && C.dna.blood_type != exotic_bloodtype)
C.dna.blood_type = exotic_bloodtype
@@ -8,10 +8,13 @@
attack_sound = 'sound/weapons/slice.ogg'
miss_sound = 'sound/weapons/slashmiss.ogg'
burnmod = 1.25
heatmod = 1.5
heatmod = 1.55
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/plant
disliked_food = NONE
liked_food = NONE
toxic_food = NONE
roundstart = TRUE
/datum/species/pod/on_species_gain(mob/living/carbon/C, datum/species/old_species)
. = ..()
@@ -34,18 +37,21 @@
if(H.nutrition > NUTRITION_LEVEL_FULL)
H.nutrition = NUTRITION_LEVEL_FULL
if(light_amount > 0.2) //if there's enough light, heal
H.heal_overall_damage(1,1)
H.adjustToxLoss(-1)
H.adjustOxyLoss(-1)
H.heal_overall_damage(0.05,0)
H.adjustOxyLoss(-0.5)
if(H.nutrition < NUTRITION_LEVEL_STARVING + 55)
H.adjustOxyLoss(5) //can eat to negate this unfortunately
H.adjustToxLoss(3)
if(H.nutrition < NUTRITION_LEVEL_STARVING + 50)
H.take_overall_damage(2,0)
/datum/species/pod/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
if(chem.id == "plantbgone")
H.adjustToxLoss(3)
H.adjustToxLoss(5)
H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM)
return 1
H.confused = max(H.confused, 1)
return TRUE
/datum/species/pod/on_hit(obj/item/projectile/P, mob/living/carbon/human/H)
switch(P.type)
@@ -47,11 +47,11 @@
to_chat(C, "[info_text]")
C.real_name = "Nightmare"
C.name = "Nightmare"
C.real_name = "[pick(GLOB.nightmare_names)]"
C.name = C.real_name
if(C.mind)
C.mind.name = "Nightmare"
C.dna.real_name = "Nightmare"
C.mind.name = C.real_name
C.dna.real_name = C.real_name
/datum/species/shadow/nightmare/on_species_loss(mob/living/carbon/C)
. = ..()
@@ -1,13 +1,13 @@
/datum/species/skeleton
// 2spooky
name = "Spooky Scary Skeleton"
id = "skeleton"
say_mod = "rattles"
blacklisted = 1
sexes = 0
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton
species_traits = list(NOBREATH,RESISTHOT,RESISTCOLD,RESISTPRESSURE,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NOHUNGER,EASYDISMEMBER,EASYLIMBATTACHMENT)
mutant_organs = list(/obj/item/organ/tongue/bone)
damage_overlay_type = ""//let's not show bloody wounds or burns over bones.
disliked_food = NONE
liked_food = NONE
/datum/species/skeleton
// 2spooky
name = "Spooky Scary Skeleton"
id = "skeleton"
say_mod = "rattles"
blacklisted = 1
sexes = 0
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton
species_traits = list(NOBREATH,RESISTHOT,RESISTCOLD,RESISTPRESSURE,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NOHUNGER,EASYDISMEMBER,EASYLIMBATTACHMENT)
mutanttongue = /obj/item/organ/tongue/bone
damage_overlay_type = ""//let's not show bloody wounds or burns over bones.
disliked_food = NONE
liked_food = NONE
@@ -9,7 +9,7 @@
blacklisted = 1
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/zombie
species_traits = list(NOBREATH,RESISTCOLD,RESISTPRESSURE,NOBLOOD,RADIMMUNE,NOZOMBIE,EASYDISMEMBER,EASYLIMBATTACHMENT,NOTRANSSTING)
mutant_organs = list(/obj/item/organ/tongue/zombie)
mutanttongue = /obj/item/organ/tongue/zombie
var/static/list/spooks = list('sound/hallucinations/growl1.ogg','sound/hallucinations/growl2.ogg','sound/hallucinations/growl3.ogg','sound/hallucinations/veryfar_noise.ogg','sound/hallucinations/wail.ogg')
disliked_food = NONE
liked_food = NONE
@@ -64,6 +64,6 @@
limbs_id = "zombie" //They look like zombies
sexes = 0
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/zombie
mutant_organs = list(/obj/item/organ/tongue/zombie)
mutanttongue = /obj/item/organ/tongue/zombie
#undef REGENERATION_DELAY
+3 -2
View File
@@ -884,7 +884,7 @@
on_fire = 1
src.visible_message("<span class='warning'>[src] catches fire!</span>", \
"<span class='userdanger'>You're set on fire!</span>")
src.set_light(3)
new/obj/effect/dummy/fire(src)
throw_alert("fire", /obj/screen/alert/fire)
update_fire()
return TRUE
@@ -894,7 +894,8 @@
if(on_fire)
on_fire = 0
fire_stacks = 0
src.set_light(0)
for(var/obj/effect/dummy/fire/F in src)
qdel(F)
clear_alert("fire")
update_fire()
@@ -15,7 +15,7 @@
/mob/living/silicon/apply_effect(effect = 0,effecttype = STUN, blocked = FALSE)
return 0 //The only effect that can hit them atm is flashes and they still directly edit so this works for now
return FALSE //The only effect that can hit them atm is flashes and they still directly edit so this works for now
/mob/living/silicon/adjustToxLoss(amount, updating_health = TRUE, forced = FALSE) //immune to tox damage
return FALSE
@@ -30,8 +30,13 @@
return FALSE
/mob/living/silicon/adjustStaminaLoss(amount, updating_stamina = 1)//immune to stamina damage.
return
return FALSE
/mob/living/silicon/setStaminaLoss(amount, updating_stamina = 1)
return
return FALSE
/mob/living/silicon/adjustBrainLoss(amount)
return FALSE
/mob/living/silicon/setBrainLoss(amount)
return FALSE
@@ -180,10 +180,13 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
new /obj/effect/temp_visual/guardian/phase(loc)
/mob/living/simple_animal/hostile/guardian/canSuicide()
return 0
return FALSE
/mob/living/simple_animal/hostile/guardian/proc/is_deployed()
return loc != summoner
/mob/living/simple_animal/hostile/guardian/AttackingTarget()
if(loc == summoner)
if(!is_deployed())
to_chat(src, "<span class='danger'><B>You must be manifested to attack!</span></B>")
return FALSE
else
@@ -28,7 +28,7 @@
/mob/living/simple_animal/hostile/guardian/healer/AttackingTarget()
. = ..()
if(. && toggle && iscarbon(target))
if(is_deployed() && toggle && iscarbon(target))
var/mob/living/carbon/C = target
C.adjustBruteLoss(-5)
C.adjustFireLoss(-5)
@@ -105,22 +105,22 @@
/mob/living/simple_animal/hostile/poison/bees/CanAttack(atom/the_target)
. = ..()
if(!.)
return 0
return FALSE
if(isliving(the_target))
var/mob/living/H = the_target
return !H.bee_friendly()
/mob/living/simple_animal/hostile/poison/bees/Found(atom/A)
if(isliving(A))
var/mob/living/H = A
return !H.bee_friendly()
if(istype(A, /obj/machinery/hydroponics))
var/obj/machinery/hydroponics/Hydro = A
if(Hydro.myseed && !Hydro.dead && !Hydro.recent_bee_visit)
wanted_objects |= typecacheof(/obj/machinery/hydroponics) //so we only hunt them while they're alive/seeded/not visisted
return 1
if(isliving(A))
var/mob/living/H = A
return !H.bee_friendly()
return 0
return TRUE
return FALSE
/mob/living/simple_animal/hostile/poison/bees/AttackingTarget()
@@ -187,7 +187,7 @@
if(loc == beehome)
idle = min(100, ++idle)
if(idle >= BEE_IDLE_ROAMING && prob(BEE_PROB_GOROAM))
forceMove(get_turf(beehome))
forceMove(beehome.drop_location())
else
idle = max(0, --idle)
if(idle <= BEE_IDLE_GOHOME && prob(BEE_PROB_GOHOME))
@@ -200,6 +200,7 @@
continue
BB.bees |= src
beehome = BB
break // End loop after the first compatible find.
/mob/living/simple_animal/hostile/poison/bees/toxin/Initialize()
. = ..()
@@ -215,7 +216,7 @@
//the Queen doesn't leave the box on her own, and she CERTAINLY doesn't pollinate by herself
/mob/living/simple_animal/hostile/poison/bees/queen/Found(atom/A)
return 0
return FALSE
//leave pollination for the peasent bees
@@ -234,10 +235,10 @@
/mob/living/simple_animal/hostile/poison/bees/proc/reagent_incompatible(mob/living/simple_animal/hostile/poison/bees/B)
if(!B)
return 0
return FALSE
if(B.beegent && beegent && B.beegent.id != beegent.id || B.beegent && !beegent || !B.beegent && beegent)
return 1
return 0
return TRUE
return FALSE
/obj/item/queen_bee
@@ -255,7 +256,7 @@
if(S.reagents.has_reagent("royal_bee_jelly")) //checked twice, because I really don't want royal bee jelly to be duped
if(S.reagents.has_reagent("royal_bee_jelly",5))
S.reagents.remove_reagent("royal_bee_jelly", 5)
var/obj/item/queen_bee/qb = new(get_turf(user))
var/obj/item/queen_bee/qb = new(user.drop_location())
qb.queen = new(qb)
if(queen && queen.beegent)
qb.queen.assign_reagent(queen.beegent) //Bees use the global singleton instances of reagents, so we don't need to worry about one bee being deleted and her copies losing their reagents.
@@ -115,7 +115,11 @@
if(can_see(targets_from, HM, vision_range))
. += HM
else
. = oview(vision_range, targets_from)
. = list() // The following code is only very slightly slower than just returning oview(vision_range, targets_from), but it saves us much more work down the line, particularly when bees are involved
for (var/obj/A in oview(vision_range, targets_from))
. += A
for (var/mob/A in oview(vision_range, targets_from))
. += A
/mob/living/simple_animal/hostile/proc/FindTarget(var/list/possible_targets, var/HasTargetsList = 0)//Step 2, filter down possible targets to things we actually care about
. = list()
+14 -7
View File
@@ -32,16 +32,24 @@
. = ..()
addtimer(CALLBACK(src, .proc/controllerscan), 10)
/obj/machinery/am_shielding/proc/overheat()
visible_message("<span class='danger'>[src] melts!</span>")
new /obj/effect/hotspot(loc)
qdel(src)
/obj/machinery/am_shielding/proc/collapse()
visible_message("<span class='notice'>[src] collapses back into a container!</span>")
new /obj/item/device/am_shielding_container(drop_location())
qdel(src)
/obj/machinery/am_shielding/proc/controllerscan(priorscan = 0)
//Make sure we are the only one here
if(!istype(src.loc, /turf))
qdel(src)
return
if(!isturf(loc))
collapse()
for(var/obj/machinery/am_shielding/AMS in loc.contents)
if(AMS == src)
continue
qdel(src)
collapse()
return
//Search for shielding first
@@ -59,7 +67,7 @@
if(!priorscan)
addtimer(CALLBACK(src, .proc/controllerscan, 1), 20)
return
qdel(src)
collapse()
/obj/machinery/am_shielding/Destroy()
@@ -67,7 +75,6 @@
control_unit.remove_shielding(src)
if(processing)
shutdown_core()
visible_message("<span class='danger'>The [src.name] melts!</span>")
//Might want to have it leave a mess on the floor but no sprites for now
return ..()
@@ -209,7 +216,7 @@
if(injecting_fuel && control_unit)
control_unit.exploding = 1
if(src)
qdel(src)
overheat()
return
@@ -608,6 +608,14 @@
build_path = /obj/item/device/electropack
category = list("hacked", "Tools")
/datum/design/shock_collar
name = "Shock Collar"
id = "shock_collar"
build_type = AUTOLATHE
materials = list(MAT_METAL = 5000, MAT_GLASS = 2000)
build_path = /obj/item/device/electropack/shockcollar
category = list("hacked", "Security")
/datum/design/large_welding_tool
name = "Industrial Welding Tool"
id = "large_welding_tool"
@@ -10,6 +10,8 @@
var/slot
// DO NOT add slots with matching names to different zones - it will break internal_organs_slot list!
var/vital = 0
//Was this organ implanted/inserted/etc, if true will not be removed during species change.
var/external = FALSE
/obj/item/organ/proc/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
+1 -1
View File
@@ -55,7 +55,7 @@
/datum/uplink_item/ammo/pistolzzz
name = "10mm Soporific Magazine"
desc = "An additional 8-round 10mm magazine; compatible with the Stechkin Pistol. Loaded with soporific rounds that put the target to sleep. \
NOTE: Soporific is not instant acting due to the constraints of the round's scale. Will usually require two shots to take effect."
NOTE: Soporific is not instant acting due to the constraints of the round's scale. Will usually require three shots to take effect."
item = /obj/item/ammo_box/magazine/m10mm/soporific
cost = 2
@@ -0,0 +1,6 @@
author: "Daniel0Mclovin"
delete-after: True
changes:
- rscadd: "Podpeople to roundstart"
- tweak: "Modified podpeople heatmod from 1.25 to 1.5"
- tweak: "plant-b-gone now does roughly 7 damage per tick on podpeople"
@@ -0,0 +1,4 @@
author: "Toriate"
delete-after: True
changes:
- spellcheck: "uplink description for soporific magazines now correctly says at least three shots are needed, rather than two"
@@ -0,0 +1,5 @@
author: "CitadelStationBot"
delete-after: True
changes:
- rscadd: "Wormhole event wormholes now actually teleport you."
- bugfix: "portals now actually teleport on click."
@@ -0,0 +1,4 @@
author: "Thefastfoodguy"
delete-after: True
changes:
- bugfix: "Antimatter shielding that can't find a control unit won't delete itself anymore"
@@ -0,0 +1,4 @@
author: "Thefastfoodguy"
delete-after: True
changes:
- bugfix: "Silicons can no longer take brain damage"
@@ -0,0 +1,6 @@
author: "Shock Collars"
delete-after: True
changes:
- rscadd: "Added Shock Collars to hacked autolathes."
- imageadd: "On character sprites, credit to Toriate"
- imageadd: "Object sprite, credit to Toriate"
@@ -0,0 +1,4 @@
author: "Kor"
delete-after: True
changes:
- bugfix: "You can now tell when someone is in soft crit by examining them."
@@ -0,0 +1,4 @@
author: "Naksu"
delete-after: True
changes:
- bugfix: "Bees now come with reduced amounts of free lag"
Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

+3 -1
View File
@@ -65,7 +65,9 @@
message += GLOB.revdata.GetTestMergeInfo(FALSE)
if(tgalert(src, message, "Report Issue","Yes","No")=="No")
return
src << link("[githuburl]/issues/new")
var/static/issue_template = file2text(".github/ISSUE_TEMPLATE.md")
var/servername = CONFIG_GET(string/servername)
src << link("[githuburl]/issues/new[GLOB.round_id ? "?body=[url_encode("Issue reported from Round ID: [GLOB.round_id][servername ? " ([servername])" : ""]\n\n[issue_template]")]" : ""]")
else
to_chat(src, "<span class='danger'>The Github URL is not set in the server configuration.</span>")
return
+10
View File
@@ -0,0 +1,10 @@
U'ruan
Y`shej
Nex
Hel-uae
Noaey'gief
Mii`mahza
Amerziox
Gyrg-mylin
Kanet'pruunance
Vigistaezian