Conflicts III

This commit is contained in:
Xhuis
2016-05-22 15:05:00 -04:00
136 changed files with 916 additions and 481 deletions
+6 -3
View File
@@ -11,9 +11,6 @@ Hello and welcome to /tg/station's contributing page. You are here because you a
But first we want to make it clear how you can contribute, if contributing is a new experience for you, and what powers the team has over your pull request so you do not get any surprises when submitting pull requests, and it is closed for a reason you did not anticipate.
##Getting Started
####EOF settings of main repo are forbidden territory one must avoid wandering into
At /tg/station we do not have a list of goals and features to add, we instead allow freedom for contributors to suggest and create their ideas for the game. That does not mean we aren't determined to squash bugs, which unfortunately pop up a lot due to the deep complexity of the game. Here are some useful getting started guides, if you want to contribute or if you want to know what challenges you can tackle with zero knowledge about the game's code structure.
If you want to contribute the first thing you'll need to do is [set up Git](http://tgstation13.org/wiki/Setting_up_git) so you can download the source code.
@@ -273,3 +270,9 @@ There is no strict process when it comes to merging pull requests, pull requests
* If you are proposing multiple changes, which change many different aspects of the code, you are expected to section them off into different pull requests in order to make it easier to review them and to deny/accept the changes that are deemed acceptable.
* If your pull request is accepted, the code you add no longer belongs exclusively to you but to everyone; everyone is free to work on it, but you are also free to object to any changes being made, which will be noted by a Project Lead or Project Manager. It is a shame this has to be explicitly said, but there have been cases where this would've saved some trouble.
##A word on git
Yes we know that the files have a tonne of mixed windows and linux line endings, attempts to fix this have been met with less than stellar success and as such we have decided to give up caring until such a time as it matters.
Therefore EOF settings of main repo are forbidden territory one must avoid wandering into
@@ -1,6 +1,6 @@
"a" = (/turf/closed/mineral/volcanic/lava_land_surface,/area/lavaland/surface/outdoors)
"b" = (/turf/open/floor/plating/asteroid/basalt/lava_land_surface,/area/lavaland/surface/outdoors)
"c" = (/turf/closed/wall/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/unpowered)
"c" = (/turf/closed/wall/mineral/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/unpowered)
"d" = (/obj/effect/light_emitter,/mob/living/simple_animal/hostile/spawner/ash_walker,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/unpowered)
"e" = (/obj/effect/decal/cleanable/blood,/obj/effect/mob_spawn/human/ash_walker,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/unpowered)
"f" = (/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/unpowered)
@@ -33,7 +33,7 @@
"G" = (/obj/item/weapon/twohanded/spear,/obj/structure/rack,/obj/item/weapon/twohanded/spear,/obj/item/weapon/twohanded/spear,/obj/item/weapon/twohanded/spear,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/unpowered)
"H" = (/obj/item/weapon/twohanded/spear,/obj/structure/rack,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/unpowered)
"I" = (/obj/structure/mineral_door/iron,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth;blocks_air = 1},/area/ruin/unpowered)
"J" = (/turf/closed/wall/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/lavaland/surface/outdoors)
"J" = (/turf/closed/wall/mineral/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/lavaland/surface/outdoors)
"K" = (/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth;initial_gas_mix = "o2=13;n2=24;TEMP=300"},/area/lavaland/surface/outdoors)
"L" = (/obj/item/weapon/twohanded/spear,/obj/structure/table,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/unpowered)
"M" = (/obj/item/weapon/pickaxe,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth;initial_gas_mix = "o2=13;n2=24;TEMP=300"},/area/lavaland/surface/outdoors)
@@ -1,5 +1,5 @@
"a" = (/turf/template_noop,/area/template_noop)
"b" = (/turf/closed/wall/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/unpowered)
"b" = (/turf/closed/wall/mineral/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/unpowered)
"c" = (/obj/structure/divine/healingfountain/anyone,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/unpowered)
"d" = (/obj/structure/divine/conduit,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/unpowered)
"e" = (/obj/structure/divine/sacrificealtar,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/unpowered)
@@ -1,7 +1,7 @@
"a" = (/turf/open/floor/plating/asteroid/basalt/lava_land_surface,/area/lavaland/surface/outdoors)
"b" = (/turf/closed/mineral/volcanic/lava_land_surface,/area/lavaland/surface/outdoors)
"c" = (/turf/open/floor/plating/lava/smooth/lava_land_surface,/area/lavaland/surface/outdoors)
"d" = (/turf/closed/wall/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
"d" = (/turf/closed/wall/mineral/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
"e" = (/obj/structure/table/wood/poker,/obj/item/weapon/gun/projectile/revolver/russian/soul,/turf/open/floor/carpet{baseturf = /turf/open/floor/plating/lava/smooth; icon_state = "carpetsymbol"},/area/ruin/powered)
"f" = (/obj/structure/cursed_slot_machine,/turf/open/floor/carpet{baseturf = /turf/open/floor/plating/lava/smooth; icon_state = "carpetsymbol"},/area/ruin/powered)
"g" = (/obj/structure/table/wood/poker,/obj/item/weapon/coin/mythril,/turf/open/floor/carpet{baseturf = /turf/open/floor/plating/lava/smooth; icon_state = "carpetsymbol"},/area/ruin/powered)
+2 -2
View File
@@ -21,7 +21,7 @@
"au" = (/obj/structure/cult/talisman,/obj/effect/decal/remains/human,/obj/item/stack/sheet/runed_metal{amount = 25},/obj/item/weapon/veilrender/honkrender,/obj/item/clothing/mask/gas/clown_hat,/obj/item/organ/internal/heart/demon,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth; initial_gas_mix = "n2=23;o2=14"},/area/awaymission/BMPship{name = "\improper BMP Asteroid Level 4"})
"av" = (/obj/structure/divine/trap/stun{desc = "A rune inscribed in the floor, the air feeling electrified around it."; name = "shock rune"},/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth; initial_gas_mix = "n2=23;o2=14"},/area/awaymission/BMPship{name = "\improper BMP Asteroid Level 4"})
"aw" = (/obj/effect/decal/remains/human,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth; initial_gas_mix = "n2=23;o2=14"},/area/awaymission/BMPship{name = "\improper BMP Asteroid Level 4"})
"ax" = (/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth; initial_gas_mix = "n2=23;o2=14"},/turf/closed/wall/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/awaymission/BMPship{name = "\improper BMP Asteroid Level 4"})
"ax" = (/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth; initial_gas_mix = "n2=23;o2=14"},/turf/closed/wall/mineral/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/awaymission/BMPship{name = "\improper BMP Asteroid Level 4"})
"ay" = (/obj/structure/cult/tome,/obj/item/weapon/tome,/obj/item/stack/sheet/runed_metal{amount = 25},/obj/item/weapon/coin/antagtoken,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth; initial_gas_mix = "n2=23;o2=14"},/area/awaymission/BMPship{name = "\improper BMP Asteroid Level 4"})
"az" = (/obj/structure/constructshell,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth; initial_gas_mix = "n2=23;o2=14"},/area/awaymission/BMPship{name = "\improper BMP Asteroid Level 4"})
"aA" = (/obj/structure/cultgirder,/obj/item/stack/sheet/runed_metal,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth; initial_gas_mix = "n2=23;o2=14"},/area/awaymission/BMPship{name = "\improper BMP Asteroid Level 4"})
@@ -53,7 +53,7 @@
"ba" = (/obj/structure/cult/talisman,/obj/item/weapon/plasma_fist_scroll,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth; initial_gas_mix = "n2=23;o2=14"},/area/awaymission/BMPship{name = "\improper BMP Asteroid Level 4"})
"bb" = (/mob/living/simple_animal/hostile/poison/giant_spider/hunter,/turf/open/floor/plating/asteroid/basalt{initial_gas_mix = "n2=23;o2=14"},/area/awaymission/BMPship{name = "\improper BMP Asteroid Level 3"})
"bc" = (/obj/effect/spider/stickyweb,/turf/open/floor/plating/asteroid/basalt{initial_gas_mix = "n2=23;o2=14"},/area/awaymission/BMPship{name = "\improper BMP Asteroid Level 3"})
"bd" = (/turf/open/floor/plating/asteroid/basalt/lava{initial_gas_mix = "n2=23;o2=14"},/turf/closed/wall/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/awaymission/BMPship{name = "\improper BMP Asteroid Level 4"})
"bd" = (/turf/open/floor/plating/asteroid/basalt/lava{initial_gas_mix = "n2=23;o2=14"},/turf/closed/wall/mineral/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/awaymission/BMPship{name = "\improper BMP Asteroid Level 4"})
"be" = (/mob/living/simple_animal/hostile/spawner/mining/goliath,/turf/open/floor/plating/asteroid/basalt{initial_gas_mix = "n2=23;o2=14"},/area/awaymission/BMPship{name = "\improper BMP Asteroid Level 3"})
"bf" = (/obj/effect/decal/cleanable/blood,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth; initial_gas_mix = "n2=23;o2=14"},/area/awaymission/BMPship{name = "\improper BMP Asteroid Level 4"})
"bg" = (/mob/living/simple_animal/hostile/poison/giant_spider/nurse,/turf/open/floor/plating/asteroid/basalt{initial_gas_mix = "n2=23;o2=14"},/area/awaymission/BMPship{name = "\improper BMP Asteroid Level 3"})
@@ -488,9 +488,8 @@
/turf/closed/mineral/random,
/area/mine/explored)
"abg" = (
/obj/machinery/sleeper{
icon_state = "sleeper-open";
dir = 4
/obj/machinery/sleeper/syndie{
dir = 4
},
/turf/open/floor/plasteel/shuttle{
icon_state = "shuttlefloor4"
+1 -1
View File
@@ -56,7 +56,7 @@
"abd" = (/obj/machinery/door/window{dir = 4; name = "Infirmary"; req_access_txt = "150"},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
"abe" = (/obj/machinery/door/window/westright{name = "Tool Storage"; req_access_txt = "150"},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
"abf" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/syndicate,/obj/item/weapon/crowbar/red,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
"abg" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 4},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
"abg" = (/obj/machinery/sleeper/syndie{dir = 4},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
"abh" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Infirmary"; req_access_txt = "150"},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
"abi" = (/obj/machinery/door/window{dir = 8; name = "Tool Storage"; req_access_txt = "150"},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
"abj" = (/obj/structure/table,/obj/item/weapon/gun/syringe{pixel_x = 1; pixel_y = 2},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
@@ -2968,8 +2968,7 @@
},
/area/shuttle/syndicate)
"afH" = (
/obj/machinery/sleeper{
icon_state = "sleeper-open";
/obj/machinery/sleeper/syndie{
dir = 4
},
/turf/open/floor/plasteel/shuttle{
@@ -13379,6 +13378,7 @@
pixel_x = 0;
pixel_y = 0
},
/obj/machinery/portable_atmospherics/canister/bz,
/turf/open/floor/plasteel{
tag = "icon-escape (NORTH)";
icon_state = "escape";
@@ -70256,6 +70256,7 @@
dir = 4;
network = list("SS13","Sci")
},
/obj/machinery/portable_atmospherics/canister/bz,
/turf/open/floor/plasteel{
icon_state = "floorgrime"
},
@@ -70835,6 +70836,7 @@
icon_state = "tube1";
dir = 8
},
/obj/machinery/portable_atmospherics/canister/bz,
/turf/open/floor/plasteel{
icon_state = "floorgrime"
},
@@ -2176,8 +2176,7 @@
name = "AI Satellite Service"
})
"adT" = (
/obj/machinery/sleeper{
icon_state = "sleeper-open";
/obj/machinery/sleeper/syndie{
dir = 4
},
/turf/open/floor/plasteel/shuttle{
@@ -26520,6 +26519,7 @@
/obj/machinery/camera{
c_tag = "Atmospherics Monitoring"
},
/obj/machinery/portable_atmospherics/canister/bz,
/turf/open/floor/plasteel{
icon_state = "cautioncorner";
dir = 1
@@ -61729,6 +61729,12 @@
icon_state = "diagonalWall3"
},
/area/shuttle/syndicate)
"ckj" = (
/obj/machinery/portable_atmospherics/canister/bz,
/turf/open/floor/plasteel{
icon_state = "floorgrime"
},
/area/toxins/storage)
(1,1,1) = {"
aaa
@@ -89080,7 +89086,7 @@ aze
aAw
aBE
aCO
aFp
ckj
aFn
aGo
aCO
+36 -26
View File
@@ -398,8 +398,11 @@
/turf/open/floor/plating/airless,
/area/solar/auxstarboard)
"aaQ" = (
/turf/open/space,
/area/security/prison)
/obj/machinery/portable_atmospherics/canister/air,
/turf/open/floor/plasteel{
icon_state = "bot"
},
/area/atmos)
"aaR" = (
/obj/machinery/hydroponics/constructable,
/obj/item/weapon/cultivator,
@@ -5423,8 +5426,11 @@
},
/area/security/range)
"aiT" = (
/turf/open/floor/plating,
/area/maintenance/fore)
/obj/machinery/portable_atmospherics/canister/oxygen,
/turf/open/floor/plasteel{
icon_state = "bot"
},
/area/atmos)
"aiU" = (
/obj/structure/chair/stool{
pixel_y = 8
@@ -50565,9 +50571,11 @@
/turf/open/floor/wood,
/area/library)
"bDx" = (
/obj/machinery/vending/coffee,
/turf/open/floor/wood,
/area/library)
/obj/machinery/portable_atmospherics/canister/bz,
/turf/open/floor/plasteel{
icon_state = "bot"
},
/area/atmos)
"bDy" = (
/obj/machinery/vending/coffee,
/obj/machinery/newscaster{
@@ -57065,15 +57073,17 @@
name = "Telecoms Storage"
})
"bOj" = (
/obj/structure/closet/wardrobe/grey,
/turf/open/floor/plating,
/obj/structure/closet,
/turf/open/floor/plating{
icon_state = "panelscorched"
},
/area/maintenance/starboard)
"bOk" = (
/obj/machinery/portable_atmospherics/canister/oxygen,
/turf/open/floor/plating,
/area/maintenance/starboard)
"bOl" = (
/obj/item/weapon/storage/box/lights/mixed,
/obj/structure/closet/cardboard,
/turf/open/floor/plating,
/area/maintenance/starboard)
"bOm" = (
@@ -78138,6 +78148,7 @@
/obj/structure/sign/nosmoking_2{
pixel_y = 32
},
/obj/machinery/portable_atmospherics/canister/bz,
/turf/open/floor/plasteel{
dir = 5;
icon_state = "warning"
@@ -80573,6 +80584,7 @@
/obj/machinery/light_switch{
pixel_y = -23
},
/obj/machinery/portable_atmospherics/canister/bz,
/turf/open/floor/plasteel{
dir = 10;
icon_state = "warning"
@@ -96260,10 +96272,9 @@
/turf/closed/indestructible/opshuttle,
/area/shuttle/syndicate)
"cXn" = (
/obj/structure/closet/cardboard,
/turf/open/floor/plating{
icon_state = "platingdmg3"
},
/obj/machinery/atmospherics/components/unary/portables_connector/visible,
/obj/item/weapon/storage/box/lights/mixed,
/turf/open/floor/plating,
/area/maintenance/starboard)
"cXo" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
@@ -96570,8 +96581,7 @@
},
/area/shuttle/syndicate)
"cXV" = (
/obj/machinery/sleeper{
icon_state = "sleeper-open";
/obj/machinery/sleeper/syndie{
dir = 4
},
/turf/open/floor/plasteel/shuttle{
@@ -140626,9 +140636,9 @@ bFT
bHN
bJw
bKQ
bzf
aaQ
atw
bOj
atn
bRw
bTc
bUq
@@ -140883,9 +140893,9 @@ bEn
bHO
bJx
bKR
bzf
aiT
atw
bOk
apk
bRx
apk
aqy
@@ -141140,9 +141150,9 @@ bFU
bHP
bJy
bKS
bzf
cXn
apk
bDx
atw
bOl
bRy
apk
bUr
@@ -141397,9 +141407,9 @@ bEn
bHQ
bJz
bKT
bzf
bOl
bQa
bDx
atw
cXn
bRz
bTd
apk
+1 -2
View File
@@ -15166,8 +15166,7 @@
},
/area/tcommsat/computer)
"Gu" = (
/obj/machinery/sleeper{
icon_state = "sleeper-open";
/obj/machinery/sleeper/syndie{
dir = 4
},
/turf/open/floor/plasteel/shuttle{
+11 -6
View File
@@ -6378,9 +6378,12 @@
/turf/open/floor/plating,
/area/maintenance/fpmaint2)
"alX" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/maintenance/fpmaint2)
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/machinery/portable_atmospherics/canister/bz,
/turf/open/floor/plasteel,
/area/atmos)
"alY" = (
/obj/machinery/door/airlock/shuttle{
name = "Labor Shuttle Airlock";
@@ -40914,6 +40917,7 @@
/obj/machinery/light/small{
dir = 8
},
/obj/machinery/portable_atmospherics/canister/bz,
/turf/open/floor/plasteel{
icon_state = "floorgrime"
},
@@ -41656,6 +41660,7 @@
dir = 4;
network = list("SS13","RD")
},
/obj/machinery/portable_atmospherics/canister/bz,
/turf/open/floor/plasteel{
icon_state = "floorgrime"
},
@@ -45155,6 +45160,7 @@
name = "Station Intercom (General)";
pixel_x = -30
},
/obj/machinery/portable_atmospherics/canister/bz,
/turf/open/floor/plasteel,
/area/atmos)
"bNQ" = (
@@ -57170,8 +57176,7 @@
},
/area/engine/engineering)
"cmM" = (
/obj/machinery/sleeper{
icon_state = "sleeper-open";
/obj/machinery/sleeper/syndie{
dir = 4
},
/turf/open/floor/plasteel/shuttle{
@@ -95070,7 +95075,7 @@ bJs
bKy
bLM
bLM
bNQ
alX
bOV
bQk
bRt
+2 -2
View File
@@ -1,5 +1,5 @@
"a" = (/turf/open/space,/area/space)
"b" = (/turf/closed/wall/cult,/area/shuttle/escape)
"b" = (/turf/closed/wall/mineral/cult,/area/shuttle/escape)
"c" = (/obj/effect/forcefield/cult,/turf/open/floor/plating,/area/shuttle/escape)
"d" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/fire,/turf/open/floor/plasteel/cult,/area/shuttle/escape)
"e" = (/obj/structure/chair{dir = 1},/turf/open/floor/plasteel/cult,/area/shuttle/escape)
@@ -16,7 +16,7 @@
"p" = (/obj/machinery/computer/communications,/turf/open/floor/plasteel/cult,/area/shuttle/escape)
"q" = (/obj/item/stack/sheet/metal,/obj/effect/decal/remains/human,/turf/open/floor/plasteel/cult,/area/shuttle/escape)
"r" = (/obj/machinery/door/airlock/cult/unruned/glass/friendly,/turf/open/floor/plasteel/cult,/area/shuttle/escape)
"s" = (/obj/machinery/status_display,/turf/closed/wall/cult,/area/shuttle/escape)
"s" = (/obj/machinery/status_display,/turf/closed/wall/mineral/cult,/area/shuttle/escape)
"t" = (/obj/structure/closet/emcloset,/turf/open/floor/plasteel/cult,/area/shuttle/escape)
"u" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/obj/item/weapon/crowbar,/turf/open/floor/plasteel/cult,/area/shuttle/escape)
"v" = (/obj/effect/decal/cleanable/blood,/turf/open/floor/plasteel/cult,/area/shuttle/escape)
+1
View File
@@ -68,6 +68,7 @@
#define MUTCOLORS_PARTSONLY 15 //Used if we want the mutant colour to be only used by mutant bodyparts. Don't combine this with MUTCOLORS, or it will be useless.
#define NODISMEMBER 16
#define NOHUNGER 17
#define NOCRITDAMAGE 18
/*
These defines are used specifically with the atom/movable/languages bitmask.
+10
View File
@@ -285,6 +285,9 @@ var/list/bloody_footprints_cache = list()
#define TURF_WET_ICE 3
#define TURF_WET_PERMAFROST 4
//Maximum amount of time, (in approx. seconds.) a tile can be wet for.
#define MAXIMUM_WET_TIME 300
//Object/Item sharpness
#define IS_BLUNT 0
#define IS_SHARP 1
@@ -423,3 +426,10 @@ var/global/list/ghost_others_options = list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE
// Shuttle return values
#define SHUTTLE_ALREADY_DOCKED 7
#define CHECK_DNA_AND_SPECIES(C) if((!(C.dna)) || (!(C.dna.species))) return
// Evil narsie colour
#define NARSIE_WINDOW_COLOUR "#7D1919"
+9 -3
View File
@@ -53,10 +53,16 @@
//Checks for specific types in a list
/proc/is_type_in_list(atom/A, list/L)
if (!L.len)
return 0
if (!L[L[1]])
generate_type_list_cache(L)
return L[A.type]
/proc/generate_type_list_cache(L)
for(var/type in L)
if(istype(A, type))
return 1
return 0
for(var/T in typesof(type))
L[T] = 1
//Empties the list by setting the length to 0. Hopefully the elements get garbage collected
/proc/clearlist(list/list)
+6 -2
View File
@@ -96,8 +96,12 @@ var/const/tk_maxrange = 15
/obj/item/tk_grab/attack_self(mob/user)
if(focus)
focus.attack_self_tk(user)
if(!focus)
return
if(qdeleted(focus))
qdel(src)
return
focus.attack_self_tk(user)
/obj/item/tk_grab/afterattack(atom/target, mob/living/carbon/user, proximity, params)//TODO: go over this
if(!target || !user)
+1 -1
View File
@@ -203,7 +203,7 @@
animate(D, transform = matrix(180, MATRIX_ROTATE), time = 1, loop = 0)
sleep (15)
if (D)
animate(transform = null, time = 1, loop = 0)
animate(D, transform = null, time = 1, loop = 0)
for (var/i = 0, i < 3, i++)
if (A && D)
+1 -1
View File
@@ -71,7 +71,7 @@ var/global/max_secret_rooms = 6
if("cult")
theme = "cult"
walltypes = list(/turf/closed/wall/cult=3,/turf/closed/mineral/random/high_chance=1)
walltypes = list(/turf/closed/wall/mineral/cult=3,/turf/closed/mineral/random/high_chance=1)
floortypes = list(/turf/open/floor/plasteel/cult)
treasureitems = list(/obj/item/device/soulstone/anybody=1, /obj/item/clothing/suit/space/hardsuit/cult=1, /obj/item/weapon/bedsheet/cult=2,
/obj/item/clothing/suit/cultrobes=2, /mob/living/simple_animal/hostile/creature=3)
+2
View File
@@ -17,6 +17,8 @@
M.mind.antag_hud = src
/datum/atom_hud/antag/proc/leave_hud(mob/M)
if(!M)
return
if(!istype(M))
CRASH("leave_hud(): [M] ([M.type]) is not a mob!")
remove_from_hud(M)
+1 -1
View File
@@ -90,7 +90,7 @@
attack_sound = 'sound/weapons/genhit1.ogg'
flying = 1
del_on_death = 1
deathmessage = "The blob spore explodes into a cloud of gas!"
deathmessage = "explodes into a cloud of gas!"
var/death_cloud_size = 1 //size of cloud produced from a dying spore
var/list/human_overlays = list()
var/is_zombie = 0
+6 -1
View File
@@ -182,6 +182,8 @@ var/global/list/lawlorify = list (
H.set_species(/datum/species/human, 1)
H.regenerate_icons()
give_base_spells()
if(istype(owner.current.loc, /obj/effect/dummy/slaughter/))
owner.current.forceMove(get_turf(owner.current))//Fixes dying while jaunted leaving you permajaunted.
form = BASIC_DEVIL
/datum/devilinfo/proc/regress_blood_lizard()
@@ -262,6 +264,8 @@ var/global/list/lawlorify = list (
world << 'sound/hallucinations/veryfar_noise.ogg'
give_arch_spells()
D.convert_to_archdevil()
if(istype(D.loc, /obj/effect/dummy/slaughter/))
D.forceMove(get_turf(D))//Fixes dying while jaunted leaving you permajaunted.
var/area/A = get_area(owner.current)
if(A)
notify_ghosts("An arch devil has ascended in \the [A.name]. Reach out to the devil to be given a new shell for your soul.", source = owner.current, attack_not_jump = 1)
@@ -371,7 +375,8 @@ var/global/list/lawlorify = list (
reviveNumber++
if(body)
body.revive(1,0)
body.forceMove(get_turf(body))//Fixes dying while jaunted leaving you permajaunted.
if(istype(body.loc, /obj/effect/dummy/slaughter/))
body.forceMove(get_turf(body))//Fixes dying while jaunted leaving you permajaunted.
if(istype(body, /mob/living/carbon/true_devil))
var/mob/living/carbon/true_devil/D = body
if(D.oldform)
+4 -2
View File
@@ -137,6 +137,8 @@
//first bust whatever is in the turf
for(var/atom/A in T)
if(A != src)
if(istype(A, /mob/living))
A.visible_message("<span class='warning'>[src] slams into [A].</span>", "<span class='userdanger'>[src] slams into you!.</span>")
A.ex_act(hitpwr)
//then, ram the turf if it still exists
@@ -190,7 +192,7 @@
pass_flags = PASSTABLE | PASSGRILLE
hits = 1
hitpwr = 3
meteorsound = 'sound/weapons/throwtap.ogg'
meteorsound = 'sound/weapons/Gunshot_smg.ogg'
meteordrop = /obj/item/weapon/ore/glass
//Medium-sized
@@ -314,4 +316,4 @@
..()
meteordrop = pick(/obj/item/clothing/head/hardhat/pumpkinhead, /obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin)
meteorsound = pick('sound/hallucinations/im_here1.ogg','sound/hallucinations/im_here2.ogg')
//////////////////////////
//////////////////////////
@@ -98,7 +98,7 @@
projectilesound = 'sound/weapons/taser2.ogg'
loot = list(/obj/effect/decal/cleanable/robot_debris, /obj/item/weapon/ore/bluespace_crystal/artificial)
del_on_death = 1
deathmessage = "The swarmer explodes with a sharp pop!"
deathmessage = "explodes with a sharp pop!"
var/resources = 0 //Resource points, generated by consuming metal/glass
/mob/living/simple_animal/hostile/swarmer/Login()
@@ -43,11 +43,10 @@
/obj/effect/decal/cleanable/blood/innards, \
/obj/item/organ/heart/demon)
del_on_death = 1
deathmessage = "<span class='danger'>The generic slaughter demon screams in anger because this is the default death message!</span>"
deathmessage = "screams in anger as it collapses into a puddle of viscera!"
/mob/living/simple_animal/slaughter/New()
..()
deathmessage = "<span class='danger'>[src] screams in anger as it collapses into a puddle of viscera.</span>"
var/obj/effect/proc_holder/spell/bloodcrawl/bloodspell = new
AddSpell(bloodspell)
if(istype(loc, /obj/effect/dummy/slaughter))
@@ -77,7 +76,7 @@
name = "demon heart"
desc = "Still it beats furiously, emanating an aura of utter hate."
icon = 'icons/obj/surgery.dmi'
icon_state = "demon_heart"
icon_state = "demon_heart-on"
origin_tech = "combat=5;biotech=8"
/obj/item/organ/heart/demon/update_icon()
@@ -129,7 +128,7 @@
icon_state = "bowmon"
icon_living = "bowmon"
deathmessage = "fades out, as all of its friends are released from its prison of hugs."
loot = list(/mob/living/simple_animal/pet/cat/kitten{name = "Laughter"})
// Keep the people we hug!
@@ -142,8 +141,6 @@
/mob/living/simple_animal/slaughter/laughter/New()
..()
deathmessage = "<span class='warning'>[src] fades out, as all of its friends are released from its prison of hugs.</span>"
/mob/living/simple_animal/slaughter/laughter/death()
if(!consumed_mobs)
return ..()
+15 -3
View File
@@ -224,7 +224,11 @@
for(var/mob/living/player in player_list)
if(player.mind && player.mind != owner)
if(player.stat != DEAD)
if(istype(player, /mob/living/silicon)) //Borgs are technically dead anyways
if(issilicon(player)) //Borgs are technically dead anyways
continue
if(isanimal(player)) //animals don't count
continue
if(isbrain(player)) //also technically dead
continue
if(get_area(player) == A)
if(!player.mind.special_role && !istype(get_turf(player.mind.current), /turf/open/floor/plasteel/shuttle/red))
@@ -247,7 +251,11 @@
for(var/mob/living/player in player_list) //Make sure nobody else is onboard
if(player.mind && player.mind != owner)
if(player.stat != DEAD)
if(istype(player, /mob/living/silicon))
if(issilicon(player)) //Borgs are technically dead anyways
continue
if(isanimal(player)) //animals don't count
continue
if(isbrain(player)) //also technically dead
continue
if(get_area(player) == A)
if(player.real_name != owner.current.real_name && !istype(get_turf(player.mind.current), /turf/open/floor/plasteel/shuttle/red))
@@ -256,7 +264,11 @@
for(var/mob/living/player in player_list) //Make sure at least one of you is onboard
if(player.mind && player.mind != owner)
if(player.stat != DEAD)
if(istype(player, /mob/living/silicon))
if(issilicon(player)) //Borgs are technically dead anyways
continue
if(isanimal(player)) //animals don't count
continue
if(isbrain(player)) //also technically dead
continue
if(get_area(player) == A)
if(player.real_name == owner.current.real_name && !istype(get_turf(player.mind.current), /turf/open/floor/plasteel/shuttle/red))
+1 -1
View File
@@ -69,7 +69,7 @@
/obj/structure/constructshell
name = "empty shell"
icon = 'icons/obj/wizard.dmi'
icon_state = "construct"
icon_state = "construct-cult"
desc = "A wicked machine used by those skilled in magical arts. It is inactive."
/obj/structure/constructshell/examine(mob/user)
+4 -1
View File
@@ -370,7 +370,10 @@
/datum/spellbook_entry/item/cursed_heart
name = "Cursed Heart"
desc = "A heart that has been revived by dark magicks, the user must concentrate to ensure the heart beats, but every beat heals them. It must beat every 6 seconds."
desc = "A heart that has been revived by dark magicks, the user must \
concentrate to ensure the heart beats, but every beat heals them. It \
must beat every 6 seconds. The heart is fickle, and will not work for a \
lich."
item_path = /obj/item/organ/heart/cursed/wizard
log_name = "CH"
cost = 1
+2
View File
@@ -73,6 +73,8 @@
/obj/machinery/sleeper/close_machine(mob/user)
if((isnull(user) || istype(user)) && state_open && !panel_open)
..(user)
if(occupant && occupant.stat != DEAD)
occupant << "<span class='notice'><b>You feel cool air surround you. You go numb as your senses turn inward.</b></span>"
/obj/machinery/sleeper/attack_animal(mob/living/simple_animal/M)
if(M.environment_smash)
+2 -2
View File
@@ -254,7 +254,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
if (3)
dat += "<h4><img src=pda_atmos.png> Atmospheric Readings</h4>"
var/turf/T = get_turf(user.loc)
var/turf/T = user.loc
if (isnull(T))
dat += "Unable to obtain a reading.<br>"
else
@@ -269,7 +269,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
if (total_moles)
for(var/id in env_gases)
var/gas_level = env_gases[id][MOLES]/total_moles
if(id in hardcoded_gases || gas_level > 0.001)
if(gas_level > 0)
dat += "[env_gases[id][GAS_META][META_GAS_NAME]]: [round(gas_level*100, 0.01)]%<br>"
dat += "Temperature: [round(environment.temperature-T0C)]&deg;C<br>"
@@ -18,6 +18,12 @@
user << "<span class='warning'>This kit can only modify kinetic \
accelerators!</span>"
return ..()
// RIP the 'improved improved improved improved kinetic accelerator
if(C.holds_charge && C.unique_frequency)
user << "<span class='warning'>This kinetic accelerator already has \
these upgrades.</span>"
return ..()
user <<"<span class='notice'>You modify the [C], adjusting the trigger \
guard and internal capacitor.</span>"
C.name = "improved [C.name]"
@@ -300,6 +300,7 @@ MASS SPECTROMETER
else
user << "<span class='info'>Plasma: [round(plasma_concentration*100, 0.01)] %</span>"
for(var/id in env_gases)
if(id in hardcoded_gases)
continue
@@ -238,6 +238,12 @@ var/global/list/datum/stack_recipe/runed_metal_recipes = list ( \
return
return ..()
/obj/item/stack/sheet/runed_metal/attack(atom/target, mob/living/user)
if(!iscultist(user))
user << "<span class='warning'>Only one with forbidden knowledge could hope to work this metal...</span>"
return
..()
/obj/item/stack/sheet/runed_metal/fifty
amount = 50
@@ -143,13 +143,12 @@
item_state = "gold_horn"
/obj/item/weapon/bikehorn/golden/attack()
..()
flip_mobs()
return ..()
/obj/item/weapon/bikehorn/golden/attack_self(mob/user)
..()
flip_mobs()
..()
/obj/item/weapon/bikehorn/golden/proc/flip_mobs(mob/living/carbon/M, mob/user)
if (!spam_flag)
@@ -174,7 +174,7 @@
var/turf/T = get_turf(loc)
if(istype(T, /turf/open))
var/turf/open/theturf = T
theturf.MakeSlippery(TURF_WET_WATER)
theturf.MakeSlippery(min = 10, max = 5)
user.visible_message("[user] empties out \the [src] onto the floor using the release valve.", "<span class='info'>You quietly empty out \the [src] using its release valve.</span>")
return
@@ -77,8 +77,8 @@
new /obj/item/weapon/shield/riot/tele(src)
new /obj/item/weapon/storage/belt/security/full(src)
new /obj/item/weapon/gun/energy/gun/hos(src)
new /obj/item/weapon/door_remote/head_of_security(src)
new /obj/item/device/flashlight/seclite(src)
new /obj/item/weapon/pinpointer(src)
/obj/structure/closet/secure_closet/warden
name = "\proper warden's locker"
@@ -101,6 +101,7 @@
new /obj/item/weapon/storage/belt/security/full(src)
new /obj/item/device/flashlight/seclite(src)
new /obj/item/clothing/gloves/color/black/krav_maga/sec(src)
new /obj/item/weapon/door_remote/head_of_security(src)
/obj/structure/closet/secure_closet/security
name = "security officer's locker"
+6 -21
View File
@@ -239,38 +239,23 @@
//a rock is flora according to where the icon file is
//and now these defines
/obj/structure/flora/rock
name = "rock"
desc = "a rock"
icon_state = "rock"
icon_state = "basalt"
desc = "A volcanic rock"
icon = 'icons/obj/flora/rocks.dmi'
anchored = 1
burn_state = FIRE_PROOF
density = 1
/obj/structure/flora/rock/New()
..()
icon_state = "[icon_state][rand(1,5)]"
/obj/structure/flora/rock/pile
name = "rocks"
desc = "some rocks"
icon_state = "rockpile"
density = 0
/obj/structure/flora/rock/volcanic
icon_state = "basalt"
desc = "A volcanic rock"
/obj/structure/flora/rock/volcanic/New()
..()
icon_state = "[icon_state][rand(1,3)]"
/obj/structure/flora/rock/pile/volcanic
/obj/structure/flora/rock/pile
icon_state = "lavarocks"
desc = "A pile of rocks"
/obj/structure/flora/rock/pile/volcanic/New()
/obj/structure/flora/rock/pile/New()
..()
icon_state = "[icon_state][rand(1,3)]"
+1 -1
View File
@@ -376,7 +376,7 @@
user.visible_message("<span class='notice'>[user] plates [src] with runed metal.</span>", "<span class='notice'>You construct a runed wall.</span>")
R.use(1)
var/turf/T = get_turf(src)
T.ChangeTurf(/turf/closed/wall/cult)
T.ChangeTurf(/turf/closed/wall/mineral/cult)
qdel(src)
else
+35 -10
View File
@@ -134,7 +134,7 @@
return 0
if(!G.confirm())
return 0
G.affecting.loc = src.loc
G.affecting.forceMove(src.loc)
if(istype(src, /obj/structure/table/optable))
var/obj/structure/table/optable/OT = src
G.affecting.resting = 1
@@ -263,29 +263,54 @@
buildstack = /obj/item/stack/sheet/glass
canSmoothWith = null
health = 50
var/list/debris = list()
/obj/structure/table/glass/New()
. = ..()
debris += new frame
debris += new /obj/item/weapon/shard
/obj/structure/table/glass/Destroy()
for(var/i in debris)
qdel(i)
. = ..()
/obj/structure/table/glass/Crossed(atom/movable/AM)
. = ..()
if(flags & NODECONSTRUCT)
return
if(!isliving(AM))
return
// Don't break if they're just flying past
if(AM.throwing)
return
spawn(5)
// Check again in a bit though
if(AM.loc == get_turf(src))
check_break(AM)
else
check_break(AM)
if(istype(AM, /mob/living))
var/mob/living/M = AM
if(has_gravity(M) && M.mob_size > MOB_SIZE_SMALL)
table_shatter(M)
/obj/structure/table/glass/proc/check_break(mob/living/M)
if(has_gravity(M) && M.mob_size > MOB_SIZE_SMALL)
table_shatter(M)
/obj/structure/table/glass/proc/table_shatter(mob/M)
visible_message("<span class='warning'>[src] breaks!</span>")
visible_message("<span class='warning'>[src] breaks!</span>",
"<span class='danger'>You hear breaking glass.</span>")
playsound(src.loc, "shatter", 50, 1)
new frame(src.loc)
var/obj/item/weapon/shard/S = new(src.loc)
S.throw_impact(M)
for(var/i in debris)
var/atom/movable/AM = i
AM.loc = get_turf(src)
if(istype(AM, /obj/item/weapon/shard))
AM.throw_impact(M)
M.Weaken(5)
qdel(src)
/obj/structure/table/glass/narsie_act()
color = NARSIE_WINDOW_COLOUR
for(var/obj/item/weapon/shard/S in debris)
S.color = NARSIE_WINDOW_COLOUR
/*
* Wooden tables
*/
+1 -1
View File
@@ -182,7 +182,7 @@
else
if(istype(loc, /turf/open))
var/turf/open/tile = loc
tile.MakeSlippery()
tile.MakeSlippery(min = 5, max = 1)
/obj/machinery/shower/attackby(obj/item/I, mob/user, params)
+2 -3
View File
@@ -69,10 +69,9 @@
shatter()
/obj/structure/window/narsie_act()
var/evil_color = "#7D1919"
color = evil_color
color = NARSIE_WINDOW_COLOUR
for(var/obj/item/weapon/shard/shard in debris)
shard.color = evil_color
shard.color = NARSIE_WINDOW_COLOUR
/obj/structure/window/singularity_pull(S, current_size)
if(current_size >= STAGE_FIVE)
+51 -22
View File
@@ -2,6 +2,7 @@
var/slowdown = 0 //negative for faster, positive for slower
var/wet = 0
var/wet_time = 0 // Time in seconds that this floor will be wet for.
var/image/wet_overlay = null
/turf/open/Initalize_Atmos(times_fired)
@@ -43,6 +44,15 @@
excited = 1
SSair.active_turfs |= src
/turf/open/proc/GetHeatCapacity()
. = air.heat_capacity()
/turf/open/proc/GetTemperature()
. = air.temperature
/turf/open/proc/TakeTemperature(temp)
air.temperature += temp
air_update_turf()
/turf/open/handle_fall(mob/faller, forced)
faller.lying = pick(90, 270)
@@ -63,7 +73,6 @@
return 0
if(C.m_intent=="walk" && (lube&NO_SLIP_WHEN_WALKING))
return 0
C << "<span class='notice'>You slipped[ O ? " on the [O.name]" : ""]!</span>"
C.attack_log += "\[[time_stamp()]\] <font color='orange'>Slipped[O ? " on the [O.name]" : ""][(lube&SLIDE)? " (LUBE)" : ""]!</font>"
@@ -86,7 +95,10 @@
C.spin(1,1)
return 1
/turf/open/proc/MakeSlippery(wet_setting = TURF_WET_WATER) // 1 = Water, 2 = Lube, 3 = Ice
/turf/open/proc/MakeSlippery(wet_setting = TURF_WET_WATER, min = 0, max = 0) // 1 = Water, 2 = Lube, 3 = Ice
wet_time += max
if(wet_time < min)
wet_time = min
if(wet >= wet_setting)
return
wet = wet_setting
@@ -103,32 +115,49 @@
else
wet_overlay = image('icons/effects/water.dmi', src, "wet_static")
overlays += wet_overlay
if(wet < TURF_WET_ICE)
addtimer(src, "MakeDry", rand(790, 820))
HandleWet()
/turf/open/proc/MakeDry(wet_setting = TURF_WET_WATER)
if(!istype(src, /turf)) //Because turfs don't get deleted, they change, adapt, transform, evolve and deform. they are one and they are all.
return
if(wet > wet_setting || !wet)
return
if(wet == TURF_WET_PERMAFROST)
wet = TURF_WET_ICE
else
wet = TURF_DRY
if(wet_overlay)
overlays -= wet_overlay
spawn(rand(0,20))
if(wet == TURF_WET_PERMAFROST)
wet = TURF_WET_ICE
else
wet = TURF_DRY
if(wet_overlay)
overlays -= wet_overlay
/turf/open/proc/HandleWet()
if(!istype(src, /turf))
return
if(!wet || wet > TURF_WET_ICE)
return
if(air.temperature < T0C && wet != TURF_WET_ICE)
if(!wet_time && wet < TURF_WET_ICE)
MakeDry(TURF_WET_ICE)
MakeSlippery(TURF_WET_ICE)
else if (wet == TURF_WET_ICE)
if(wet_time > MAXIMUM_WET_TIME)
wet_time = MAXIMUM_WET_TIME
if(wet == TURF_WET_ICE && air.temperature > T0C)
MakeDry(TURF_WET_ICE)
MakeSlippery(TURF_WET_WATER)
else if (air.temperature > T0C + 40) // Warm rooms will dry up rather quickly.
addtimer(src, "MakeDry", 100, 1, TURF_WET_ICE)
switch(air.temperature)
if(-INFINITY to T0C)
if(wet != TURF_WET_ICE && wet)
MakeDry(TURF_WET_ICE)
MakeSlippery(TURF_WET_ICE)
if(T0C to T20C)
wet_time = max(0, wet_time-1)
if(T20C to T0C + 40)
wet_time = max(0, wet_time-2)
if(T0C + 40 to T0C + 60)
wet_time = max(0, wet_time-3)
if(T0C + 60 to T0C + 80)
wet_time = max(0, wet_time-5)
if(T0C + 80 to T0C + 100)
wet_time = max(0, wet_time-10)
if(T0C + 100 to INFINITY)
wet_time = 0
if(wet && wet < TURF_WET_ICE && !wet_time)
MakeDry(TURF_WET_ICE)
if(!wet && wet_time)
wet_time = 0
if(wet)
addtimer(src, "HandleWet", 15, 1)
+10 -3
View File
@@ -205,6 +205,13 @@
processing = 0
SSobj.processing.Remove(src)
/turf/open/floor/plating/lava/GetHeatCapacity()
. = 700000
/turf/open/floor/plating/lava/GetTemperature()
. = 5000
/turf/open/floor/plating/lava/TakeTemperature(temp)
/turf/open/floor/plating/lava/proc/burn_stuff()
. = 0
@@ -224,7 +231,7 @@
else if (istype(thing, /mob/living))
. = 1
var/mob/living/L = thing
if("mining" in L.faction)
if("lava" in L.weather_immunities)
continue
if(L.buckled)
if(isobj(L.buckled))
@@ -232,8 +239,8 @@
if(O.burn_state == LAVA_PROOF)
continue
if(isliving(L.buckled)) //Goliath riding
var/mob/living/liv = L.buckled
if("mining" in liv.faction)
var/mob/living/live = L.buckled
if("lava" in live.weather_immunities)
continue
L.adjustFireLoss(20)
+1 -1
View File
@@ -254,7 +254,7 @@
/turf/closed/wall/narsie_act()
if(prob(20))
ChangeTurf(/turf/closed/wall/cult)
ChangeTurf(/turf/closed/wall/mineral/cult)
/turf/closed/wall/storage_contents_dump_act(obj/item/weapon/storage/src_object, mob/user)
return 0
+8 -8
View File
@@ -1,4 +1,4 @@
/turf/closed/wall/cult
/turf/closed/wall/mineral/cult
name = "runed metal wall"
desc = "A cold metal wall engraved with indecipherable symbols. Studying them causes your head to pound."
icon = 'icons/turf/walls/cult_wall.dmi'
@@ -7,29 +7,29 @@
builtin_sheet = null
canSmoothWith = null
/turf/closed/wall/cult/New()
/turf/closed/wall/mineral/cult/New()
PoolOrNew(/obj/effect/overlay/temp/cult/turf, src)
..()
/turf/closed/wall/cult/break_wall()
/turf/closed/wall/mineral/cult/break_wall()
new/obj/item/stack/sheet/runed_metal(get_turf(src), 1)
return (new /obj/structure/girder/cult(src))
/turf/closed/wall/cult/devastate_wall()
/turf/closed/wall/mineral/cult/devastate_wall()
new/obj/item/stack/sheet/runed_metal(get_turf(src), 1)
/turf/closed/wall/cult/narsie_act()
/turf/closed/wall/mineral/cult/narsie_act()
return
/turf/closed/wall/cult/artificer
/turf/closed/wall/mineral/cult/artificer
name = "runed stone wall"
desc = "A cold stone wall engraved with indecipherable symbols. Studying them causes your head to pound."
/turf/closed/wall/cult/artificer/break_wall()
/turf/closed/wall/mineral/cult/artificer/break_wall()
PoolOrNew(/obj/effect/overlay/temp/cult/turf, get_turf(src))
return null //excuse me we want no runed metal here
/turf/closed/wall/cult/artificer/devastate_wall()
/turf/closed/wall/mineral/cult/artificer/devastate_wall()
PoolOrNew(/obj/effect/overlay/temp/cult/turf, get_turf(src))
/turf/closed/wall/vault
+2
View File
@@ -28,6 +28,8 @@
/turf/open/space/ChangeTurf(path)
. = ..()
/turf/open/space/TakeTemperature(temp)
/turf/open/space/AfterChange()
..()
atmos_overlay_types.Cut()
+2 -2
View File
@@ -104,8 +104,8 @@
if(!M.slip(0, 3, null, NO_SLIP_WHEN_WALKING))
M.inertia_dir = 0
if(TURF_WET_LUBE)
M.slip(0, 4, null, (SLIDE|GALOSHES_DONT_HELP))
M.confused += 8
if(M.slip(0, 4, null, (SLIDE|GALOSHES_DONT_HELP)))
M.confused = max(M.confused, 8)
if(TURF_WET_ICE)
M.slip(0, 6, null, (SLIDE|GALOSHES_DONT_HELP))
if(TURF_WET_ICE || TURF_WET_PERMAFROST)
+2 -3
View File
@@ -15,8 +15,7 @@
usr << "<span class='adminnotice'>@[target.x],[target.y]: [GM.temperature] Kelvin, [GM.return_pressure()] kPa [(burning)?("\red BURNING"):(null)]</span>"
for(var/id in GM_gases)
if(id in hardcoded_gases || GM_gases[id][MOLES])
usr << "[GM_gases[id][GAS_META][META_GAS_NAME]]: [GM_gases[id][MOLES]]"
usr << "[GM_gases[id][GAS_META][META_GAS_NAME]]: [GM_gases[id][MOLES]]"
feedback_add_details("admin_verb","DAST") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/fix_next_move()
@@ -100,4 +99,4 @@
load_admins()
feedback_add_details("admin_verb","RLDA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
message_admins("[key_name_admin(usr)] manually reloaded admins")
message_admins("[key_name_admin(usr)] manually reloaded admins")
@@ -117,8 +117,6 @@
perform_exposure()
if(location.wet) location.wet = 0
if(bypassing)
icon_state = "3"
location.burn_tile()
@@ -192,7 +192,6 @@
if(air.temperature > MINIMUM_TEMPERATURE_START_SUPERCONDUCTION)
if(consider_superconductivity(starting = 1))
remove = 0
HandleWet() // if the tile is wet, and cold, make ice. Or if it's wet, and warm, dry it off.
if(!our_excited_group && remove == 1)
SSair.remove_from_active(src)
@@ -68,6 +68,11 @@ var/list/hardcoded_gases = list("o2","n2","co2","plasma") //the main four gases,
specific_heat = 30
name = "Volatile Fuel"
/datum/gas/bz
id = "bz"
specific_heat = 20
name = "BZ"
/obj/effect/overlay/gas/
icon = 'icons/effects/tile_effects.dmi'
mouse_opacity = 0
@@ -2,7 +2,6 @@
//it can be changed, but any changes will ultimately be undone before they can have any effect
/datum/gas_mixture/space
var/static/datum/gas_mixture/dummy = new
/datum/gas_mixture/space/New()
..()
@@ -18,6 +17,12 @@
/datum/gas_mixture/space/merge()
return 0 //we're immutable.
/datum/gas_mixture/space/heat_capacity()
. = 700000
/datum/gas_mixture/space/heat_capacity_archived()
. = heat_capacity()
/datum/gas_mixture/space/remove()
return copy() //we're immutable, so we can just return a copy.
@@ -25,8 +30,9 @@
return copy() //we're immutable, so we can just return a copy.
/datum/gas_mixture/space/share(datum/gas_mixture/sharer, atmos_adjacent_turfs = 4)
. = dummy.share(sharer, atmos_adjacent_turfs) //keep all the sharing calculations, but don't actually change anything about ourselves
dummy.copy_from(src)
. = ..(sharer, 0)
temperature = TCMB
gases.Cut()
/datum/gas_mixture/space/after_share()
temperature = TCMB
@@ -50,6 +56,6 @@
/datum/gas_mixture/space/parse_gas_string()
return 0 //we're immutable.
/datum/gas_mixture/space/temperature_share()
..()
temperature = TCMB
/datum/gas_mixture/space/temperature_share(datum/gas_mixture/sharer, conduction_coefficient, sharer_temperature, sharer_heat_capacity)
. = ..(sharer, 1, sharer_temperature, sharer_heat_capacity)
temperature = TCMB
@@ -76,6 +76,7 @@
"co2" = new/datum/tlv(-1, -1, 5, 10), // Partial pressure, kpa
"plasma" = new/datum/tlv(-1, -1, 0.2, 0.5), // Partial pressure, kpa
"n2o" = new/datum/tlv(-1, -1, 0.2, 0.5), // Partial pressure, kpa
"bz" = new/datum/tlv(-1, -1, 0.2, 0.5)
)
/obj/machinery/airalarm/server // No checks here.
@@ -87,6 +88,7 @@
"co2" = new/datum/tlv(-1, -1, -1, -1),
"plasma" = new/datum/tlv(-1, -1, -1, -1),
"n2o" = new/datum/tlv(-1, -1, -1, -1),
"bz" = new/datum/tlv(-1, -1, -1, -1),
)
/obj/machinery/airalarm/kitchen_cold_room // Copypasta: to check temperatures.
@@ -98,6 +100,7 @@
"co2" = new/datum/tlv(-1, -1, 5, 10), // Partial pressure, kpa
"plasma" = new/datum/tlv(-1, -1, 0.2, 0.5), // Partial pressure, kpa
"n2o" = new/datum/tlv(-1, -1, 0.2, 0.5), // Partial pressure, kpa
"bz" = new/datum/tlv(-1, -1, 0.2, 0.5), // Partial pressure, kpa
)
//all air alarms in area are connected via magic
@@ -140,27 +140,32 @@ var/pipenetwarnings = 10
/datum/pipeline/proc/temperature_interact(turf/target, share_volume, thermal_conductivity)
var/total_heat_capacity = air.heat_capacity()
var/partial_heat_capacity = total_heat_capacity*(share_volume/air.volume)
var/target_temperature
var/target_heat_capacity
if(istype(target, /turf/open))
var/turf/open/modeled_location = target
target_temperature = modeled_location.GetTemperature()
target_heat_capacity = modeled_location.GetHeatCapacity()
if(modeled_location.blocks_air)
if((modeled_location.heat_capacity>0) && (partial_heat_capacity>0))
var/delta_temperature = air.temperature - modeled_location.temperature
var/delta_temperature = air.temperature - target_temperature
var/heat = thermal_conductivity*delta_temperature* \
(partial_heat_capacity*modeled_location.heat_capacity/(partial_heat_capacity+modeled_location.heat_capacity))
(partial_heat_capacity*target_heat_capacity/(partial_heat_capacity+target_heat_capacity))
air.temperature -= heat/total_heat_capacity
modeled_location.temperature += heat/modeled_location.heat_capacity
modeled_location.TakeTemperature(heat/target_heat_capacity)
else
var/delta_temperature = 0
var/sharer_heat_capacity = 0
delta_temperature = (air.temperature - modeled_location.air.temperature)
sharer_heat_capacity = modeled_location.air.heat_capacity()
delta_temperature = (air.temperature - target_temperature)
sharer_heat_capacity = target_heat_capacity
var/self_temperature_delta = 0
var/sharer_temperature_delta = 0
@@ -175,9 +180,7 @@ var/pipenetwarnings = 10
return 1
air.temperature += self_temperature_delta
modeled_location.air.temperature += sharer_temperature_delta
modeled_location.air_update_turf()
modeled_location.TakeTemperature(sharer_temperature_delta)
else
@@ -36,8 +36,8 @@
else if(T.blocks_air)
environment_temperature = T.temperature
else
var/datum/gas_mixture/environment = T.return_air()
environment_temperature = environment.temperature
var/turf/open/OT = T
environment_temperature = OT.GetTemperature()
else
environment_temperature = T.temperature
@@ -28,6 +28,7 @@
"co2" = /obj/machinery/portable_atmospherics/canister/carbon_dioxide,
"plasma" = /obj/machinery/portable_atmospherics/canister/toxins,
"n2o" = /obj/machinery/portable_atmospherics/canister/nitrous_oxide,
"bz" = /obj/machinery/portable_atmospherics/canister/bz,
"air" = /obj/machinery/portable_atmospherics/canister/air,
"caution" = /obj/machinery/portable_atmospherics/canister,
)
@@ -56,6 +57,11 @@
name = "agent b canister"
desc = "Oxygen Agent B. You're not quite sure what it does."
gas_type = "agent_b"
/obj/machinery/portable_atmospherics/canister/bz
name = "BZ canister"
desc = "BZ, a powerful hallucinogenic nerve agent."
icon_state = "purple"
gas_type = "bz"
/obj/machinery/portable_atmospherics/canister/nitrous_oxide
name = "n2o canister"
desc = "Nitrous oxide gas. Known to cause drowsiness."
@@ -7,7 +7,7 @@
var/volume_rate = 1000
volume = 1000
var/list/scrubbing = list("plasma", "co2", "n2o", "agent_b")
var/list/scrubbing = list("plasma", "co2", "n2o", "agent_b", "bz")
/obj/machinery/portable_atmospherics/scrubber/Destroy()
var/turf/T = get_turf(src)
@@ -32,4 +32,9 @@
state = 2
/obj/machinery/power/emitter/energycannon/RefreshParts()
return
return
/obj/machinery/power/emitter/energycannon/magical
name = "wabbajack statue"
desc = "Who am I? What is my purpose in life? What do I mean by who am I?"
projectile_type = /obj/item/projectile/magic/change
+4
View File
@@ -121,6 +121,10 @@ var/global/list/potentialRandomZlevels = generateMapList(filename = "config/away
if(!template)
world << "<span class='boldannounce'>No ruins found.</span>"
return
for(var/i in template.get_affected_turfs(get_turf(src), 1))
var/turf/T = i
for(var/mob/living/simple_animal/monster in T)
qdel(monster)
template.load(get_turf(src),centered = TRUE)
template.loaded++
world << "<span class='boldannounce'>Ruins loaded.</span>"
+7 -3
View File
@@ -70,8 +70,12 @@ Credit dupes that require a lot of manual work shouldn't be removed, unless they
// Adds item's cost and amount to the current export cycle.
// get_cost, get_amount and applies_to do not neccesary mean a successful sale.
/datum/export/proc/sell_object(obj/O, contr = 0, emag = 0)
total_cost += get_cost(O)
total_amount += get_amount(O)
var/cost = get_cost(O)
var/amount = get_amount(O)
total_cost += cost
total_amount += amount
feedback_add_details("export_sold_amount","[O.type]|[amount]")
feedback_add_details("export_sold_cost","[O.type]|[cost]")
// Total printout for the cargo console.
// Called before the end of current export cycle.
@@ -99,4 +103,4 @@ Credit dupes that require a lot of manual work shouldn't be removed, unless they
// The current export cycle is over now. Reset all the export temporary vars.
/datum/export/proc/export_end()
total_cost = 0
total_amount = 0
total_amount = 0
@@ -62,6 +62,7 @@
var/turf/open/t_loc = get_turf(src)
if(istype(t_loc) && t_loc.wet)
t_loc.MakeDry(TURF_WET_WATER)
t_loc.wet_time = 0
/obj/item/clothing/shoes/clown_shoes
desc = "The prankster's standard-issue clowning shoes. Damn, they're huge!"
+7 -6
View File
@@ -62,21 +62,22 @@
armor = list(melee = 30, bullet = 30, laser = 30, energy = 10, bomb = 25, bio = 10, rad = 10)
/obj/item/clothing/suit/hooded/cloak/drake
name = "ash drake hide cloak"
icon_state = "golclo"
desc = "A cloak fashioned from the hide of an ash drake, offers incredible defense while still remaining lightweight. "
name = "drake armour"
icon_state = "dragon"
desc = "A suit of armour fashioned from the remains of an ash drake. "
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals, /obj/item/weapon/resonator, /obj/item/device/mining_scanner, /obj/item/device/t_scanner/adv_mining_scanner, /obj/item/weapon/gun/energy/kinetic_accelerator, /obj/item/weapon/pickaxe, /obj/item/weapon/twohanded/spear)
armor = list(melee = 70, bullet = 30, laser = 50, energy = 40, bomb = 70, bio = 60, rad = 50)
hooded = 1
hoodtype = /obj/item/clothing/head/cloakhood/drake
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT
unacidable = 1
/obj/item/clothing/head/cloakhood/drake
name = "ash drake hide hood"
icon_state = "golhood"
desc = "A stiff hood made of ash drake hide."
name = "drake helm"
icon_state = "dragon"
desc = "The skull of a dragon."
armor = list(melee = 70, bullet = 30, laser = 50, energy = 40, bomb = 70, bio = 60, rad = 50)
heat_protection = HEAD
max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT
+1 -69
View File
@@ -1,5 +1,4 @@
// This file is for projectile weapon crafting. All parts and construction paths will be contained here.
// The weapons themselves are children of other weapons and should be contained in their respective files.
//Gun crafting parts til they can be moved elsewhere
// PARTS //
@@ -14,70 +13,3 @@
desc = "A classic rifle stock that doubles as a grip, roughly carved out of wood."
icon = 'icons/obj/improvised.dmi'
icon_state = "riflestock"
// CRAFTING //
/obj/item/weaponcrafting/reciever/attackby(obj/item/W, mob/user, params)
if(istype(W,/obj/item/pipe))
user << "<span class='notice'>You attach the shotgun barrel to the receiver. The pins seem loose.</span>"
var/obj/item/weaponcrafting/ishotgunconstruction/I = new /obj/item/weaponcrafting/ishotgunconstruction
user.unEquip(src)
user.put_in_hands(I)
qdel(W)
qdel(src)
return
// SHOTGUN //
/obj/item/weaponcrafting/ishotgunconstruction
name = "slightly conspicuous metal construction"
desc = "A long pipe attached to a firearm receiver. The pins seem loose."
icon = 'icons/obj/improvised.dmi'
icon_state = "ishotgunstep1"
/obj/item/weaponcrafting/ishotgunconstruction/attackby(obj/item/I, mob/user, params)
..()
if(istype(I, /obj/item/weapon/screwdriver))
var/obj/item/weaponcrafting/ishotgunconstruction2/C = new /obj/item/weaponcrafting/ishotgunconstruction2
user.unEquip(src)
user.put_in_hands(C)
user << "<span class='notice'>You screw the pins into place, securing the pipe to the receiver.</span>"
qdel(src)
/obj/item/weaponcrafting/ishotgunconstruction2
name = "very conspicuous metal construction"
desc = "A long pipe attached to a trigger assembly."
icon = 'icons/obj/improvised.dmi'
icon_state = "ishotgunstep1"
/obj/item/weaponcrafting/ishotgunconstruction2/attackby(obj/item/W, mob/user, params)
if(istype(W,/obj/item/weaponcrafting/stock))
user << "<span class='notice'>You attach the stock to the receiver-barrel assembly.</span>"
var/obj/item/weaponcrafting/ishotgunconstruction3/I = new /obj/item/weaponcrafting/ishotgunconstruction3
user.unEquip(src)
user.put_in_hands(I)
qdel(W)
qdel(src)
return
/obj/item/weaponcrafting/ishotgunconstruction3
name = "extremely conspicuous metal construction"
desc = "A receiver-barrel shotgun assembly with a loose wooden stock. There's no way you can fire it without the stock coming loose."
icon = 'icons/obj/improvised.dmi'
icon_state = "ishotgunstep2"
/obj/item/weaponcrafting/ishotgunconstruction3/attackby(obj/item/I, mob/user, params)
..()
if(istype(I, /obj/item/stack/packageWrap))
var/obj/item/stack/packageWrap/C = I
if (C.use(5))
var/obj/item/weapon/gun/projectile/revolver/doublebarrel/improvised/W = new /obj/item/weapon/gun/projectile/revolver/doublebarrel/improvised
user.unEquip(src)
user.put_in_hands(W)
user << "<span class='notice'>You tie the wrapping paper around the stock and the barrel to secure it.</span>"
qdel(src)
else
user << "<span class='warning'>You need at least five feet of wrapping paper to secure the stock!</span>"
return
+1 -1
View File
@@ -5,7 +5,7 @@
max_occurrences = 1000
earliest_start = 0
alertadmins = 0
/datum/round_event/meteor_wave/dust
startWhen = 1
endWhen = 2
@@ -203,7 +203,7 @@
/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater/hell
desc = "A flask of holy water...it's been sitting in the Necropolis a while though."
list_reagents = list("hellwater" = 100)
list_reagents = list("hell_water" = 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth
name = "Goldeneye Vermouth"
+8 -8
View File
@@ -31,7 +31,7 @@
/obj/item/weapon/reagent_containers/food/snacks/meat/slab/human
name = "-meat"
name = " meat"
cooked_type = /obj/item/weapon/reagent_containers/food/snacks/meat/steak/plain/human
slice_path = /obj/item/weapon/reagent_containers/food/snacks/meat/rawcutlet/plain/human
@@ -56,19 +56,19 @@
/obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/slime
icon_state = "slimemeat"
desc = "Because jello wasn't offensive enough to vegans"
desc = "Because jello wasn't offensive enough to vegans."
list_reagents = list("nutriment" = 3, "slimejelly" = 3)
filling_color = "#00FFFF"
/obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/golem
icon_state = "golemmeat"
desc = "Edible rocks, welcome to the future"
desc = "Edible rocks, welcome to the future."
list_reagents = list("nutriment" = 3, "iron" = 3)
filling_color = "#A9A9A9"
/obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/golem/adamantine
icon_state = "agolemmeat"
desc = "From the slime pen to the rune to the kitchen, science"
desc = "From the slime pen to the rune to the kitchen, science."
filling_color = "#66CDAA"
/obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/lizard
@@ -78,7 +78,7 @@
/obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/plant
icon_state = "plantmeat"
desc = "All the joys of healthy eating with all the fun of cannibalism"
desc = "All the joys of healthy eating with all the fun of cannibalism."
filling_color = "#E9967A"
/obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/shadow
@@ -88,18 +88,18 @@
/obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/fly
icon_state = "flymeat"
desc = "Nothing says tasty like maggot filled radioactive mutant flesh"
desc = "Nothing says tasty like maggot filled radioactive mutant flesh."
list_reagents = list("nutriment" = 3, "uranium" = 3)
/obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton
name = "-bone"
icon_state = "skeletonmeat"
desc = "There's a point where this needs to stop and clearly we have passed it"
desc = "There's a point where this needs to stop, and clearly we have passed it."
filling_color = "#F0F0F0"
slice_path = null //can't slice a bone into cutlets
/obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/zombie
name = "-meat (rotten)"
name = " meat (rotten)"
icon_state = "lizardmeat" //Close enough.
desc = "Halfway to becoming fertilizer for your garden."
filling_color = "#6B8E23"
@@ -124,6 +124,21 @@
desc = "Severed lizard tail on a stick."
bonus_reagents = list("nutriment" = 1, "vitamin" = 4)
/obj/item/weapon/reagent_containers/food/snacks/rawkhinkali
name = "raw khinkali"
desc = "One hundred khinkalis? Do I look like a pig?"
icon_state = "khinkali"
list_reagents = list("nutriment" = 1, "vitamin" = 1)
cooked_type = /obj/item/weapon/reagent_containers/food/snacks/khinkali
/obj/item/weapon/reagent_containers/food/snacks/khinkali
name = "khinkali"
desc = "One hundred khinkalis? Do I look like a pig?"
icon_state = "khinkali"
list_reagents = list("nutriment" = 4, "vitamin" = 2)
bitesize = 3
filling_color = "#F0F0F0"
/obj/item/weapon/reagent_containers/food/snacks/monkeycube
name = "monkey cube"
desc = "Just add water!"
@@ -219,6 +219,14 @@
list_reagents = list("nutriment" = 6, "vitamin" = 2)
filling_color = "#8B0000"
/obj/item/weapon/reagent_containers/food/snacks/khachapuri
name = "khachapuri"
desc = "Bread with egg and cheese?"
icon_state = "khachapuri"
list_reagents = list("nutriment" = 12, "vitamin" = 2)
filling_color = "#FFFF4D"
/obj/item/weapon/reagent_containers/food/snacks/sugarcookie
name = "sugar cookie"
desc = "Just like your little sister used to make."
@@ -204,7 +204,7 @@
for (var/i=1 to meat_produced)
var/obj/item/weapon/reagent_containers/food/snacks/meat/slab/newmeat = new typeofmeat
var/obj/item/stack/sheet/animalhide/newskin = new typeofskin
newmeat.name = sourcename + newmeat.name
newmeat.name = "[sourcename] [newmeat.name]"
newmeat.subjectname = sourcename
if(sourcejob)
newmeat.subjectjob = sourcejob
@@ -230,7 +230,7 @@
skin.throw_at_fast(pick(nearby_turfs),i,3)
for (var/turfs=1 to meat_produced*3)
var/turf/gibturf = pick(nearby_turfs)
if (!gibturf.density && src in viewers(gibturf))
if (!gibturf.density && src in view(gibturf))
new gibtype(gibturf,i)
pixel_x = initial(pixel_x) //return to its spot after shaking
@@ -152,3 +152,11 @@
result = /obj/item/weapon/reagent_containers/food/snacks/nugget
category = CAT_FOOD
/datum/crafting_recipe/food/rawkhinkali
name = "Raw Khinkali"
reqs = list(
/obj/item/weapon/reagent_containers/food/snacks/doughslice = 1,
/obj/item/weapon/reagent_containers/food/snacks/faggot = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/rawkhinkali
category = CAT_FOOD
@@ -170,6 +170,16 @@
result = /obj/item/weapon/reagent_containers/food/snacks/meatbun
category = CAT_FOOD
/datum/crafting_recipe/food/khachapuri
name = "Khachapuri"
reqs = list(
/datum/reagent/consumable/eggyolk = 5,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge = 1,
/obj/item/weapon/reagent_containers/food/snacks/store/bread/plain = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/khachapuri
category = CAT_FOOD
/datum/crafting_recipe/food/sugarcookie
time = 15
name = "Sugar cookie"
+3 -3
View File
@@ -18,10 +18,10 @@ Chief Medical Officer
access = list(access_medical, access_morgue, access_genetics, access_heads, access_mineral_storeroom,
access_chemistry, access_virology, access_cmo, access_surgery, access_RC_announce,
access_keycard_auth, access_sec_doors)
access_keycard_auth, access_sec_doors, access_maint_tunnels)
minimal_access = list(access_medical, access_morgue, access_genetics, access_heads, access_mineral_storeroom,
access_chemistry, access_virology, access_cmo, access_surgery, access_RC_announce,
access_keycard_auth, access_sec_doors)
access_keycard_auth, access_sec_doors, access_maint_tunnels)
/datum/outfit/job/cmo
name = "Chief Medical Officer"
@@ -180,4 +180,4 @@ Virologist
backpack = /obj/item/weapon/storage/backpack/virology
satchel = /obj/item/weapon/storage/backpack/satchel_vir
dufflebag = /obj/item/weapon/storage/backpack/dufflebag/med
dufflebag = /obj/item/weapon/storage/backpack/dufflebag/med
+2 -2
View File
@@ -20,12 +20,12 @@ Research Director
access_tox_storage, access_teleporter, access_sec_doors,
access_research, access_robotics, access_xenobiology, access_ai_upload,
access_RC_announce, access_keycard_auth, access_gateway, access_mineral_storeroom,
access_tech_storage, access_minisat)
access_tech_storage, access_minisat, access_maint_tunnels)
minimal_access = list(access_rd, access_heads, access_tox, access_genetics, access_morgue,
access_tox_storage, access_teleporter, access_sec_doors,
access_research, access_robotics, access_xenobiology, access_ai_upload,
access_RC_announce, access_keycard_auth, access_gateway, access_mineral_storeroom,
access_tech_storage, access_minisat)
access_tech_storage, access_minisat, access_maint_tunnels)
/datum/outfit/job/rd
name = "Research Director"
+2 -2
View File
@@ -25,11 +25,11 @@ Head of Security
access = list(access_security, access_sec_doors, access_brig, access_armory, access_court, access_weapons,
access_forensics_lockers, access_morgue, access_maint_tunnels, access_all_personal_lockers,
access_research, access_engine, access_mining, access_medical, access_construction, access_mailsorting,
access_heads, access_hos, access_RC_announce, access_keycard_auth, access_gateway)
access_heads, access_hos, access_RC_announce, access_keycard_auth, access_gateway, access_maint_tunnels)
minimal_access = list(access_security, access_sec_doors, access_brig, access_armory, access_court, access_weapons,
access_forensics_lockers, access_morgue, access_maint_tunnels, access_all_personal_lockers,
access_research, access_engine, access_mining, access_medical, access_construction, access_mailsorting,
access_heads, access_hos, access_RC_announce, access_keycard_auth, access_gateway)
access_heads, access_hos, access_RC_announce, access_keycard_auth, access_gateway, access_maint_tunnels)
/datum/outfit/job/hos
name = "Head of Security"
+3 -3
View File
@@ -25,6 +25,7 @@
var/overlay_layer = 10 //This is the default area layer, and above everything else. 2 is floors/below walls and mobs.
var/purely_aesthetic = FALSE //If we just want gentle rain that doesn't hurt people
var/list/impacted_areas = list()
var/immunity_type = "storm"
/datum/weather/proc/weather_start_up()
for(var/area/N in get_areas(area_type))
@@ -73,9 +74,8 @@
/datum/weather/proc/storm_act(mob/living/L)
if(prob(30)) //Dont want it spammed very tick
L << "You're buffeted by the storm!"
L.adjustBruteLoss(1)
if(immunity_type in L.weather_immunities)
return
/datum/weather/proc/update_areas()
for(var/area/N in impacted_areas)
@@ -18,8 +18,13 @@
duration_overlay = "lava"
overlay_layer = 2 //Covers floors only
immunity_type = "lava"
/datum/weather/floor_is_lava/storm_act(mob/living/L)
if(immunity_type in L.weather_immunities)
return
var/turf/F = get_turf(L)
for(var/obj/structure/O in F.contents)
if(O.level > F.level && !istype(O, /obj/structure/window)) // Something to stand on and it isn't under the floor!
@@ -77,6 +82,8 @@
duration_overlay = "ash_storm"
overlay_layer = 10
immunity_type = "ash"
/datum/weather/ash_storm/false_alarm //No storm, just light ember fall
purely_aesthetic = TRUE
@@ -85,8 +92,9 @@
wind_down_message = "The ash fall starts to trail off."
/datum/weather/ash_storm/storm_act(mob/living/L)
if("mining" in L.faction)
if(immunity_type in L.weather_immunities)
return
if(istype(L.loc, /obj/mecha))
return
if(ishuman(L))
@@ -204,6 +204,7 @@ Doesn't work on other aliens/AI.*/
A.yo = U.y - T.y
A.xo = U.x - T.x
A.fire()
user.newtonian_move(get_dir(U, T))
return 1
+52 -13
View File
@@ -33,9 +33,15 @@
set_species(dna.species.type)
//initialise organs
internal_organs += new /obj/item/organ/appendix
internal_organs += new /obj/item/organ/lungs
internal_organs += new /obj/item/organ/heart
if(!(NOHUNGER in dna.species.specflags))
internal_organs += new /obj/item/organ/appendix
if(!(NOBREATH in dna.species.specflags))
internal_organs += new /obj/item/organ/lungs
if(!(NOBLOOD in dna.species.specflags))
internal_organs += new /obj/item/organ/heart
internal_organs += new /obj/item/organ/brain
//Note: Additional organs are generated/replaced on the dna.species level
@@ -811,6 +817,8 @@
/mob/living/carbon/human/proc/do_cpr(mob/living/carbon/C)
CHECK_DNA_AND_SPECIES(C)
if(C.stat == DEAD)
src << "<span class='warning'>[C.name] is dead!</span>"
return
@@ -828,14 +836,27 @@
src << "<span class='warning'>You fail to perform CPR on [C]!</span>"
return 0
if(C.health <= config.health_threshold_crit)
C.cpr_time = world.time
var/they_breathe = (!(NOBREATH in C.dna.species.specflags))
var/they_lung = C.getorganslot("lungs")
if(C.health > config.health_threshold_crit)
return
src.visible_message("[src] performs CPR on [C.name]!", "<span class='notice'>You perform CPR on [C.name].</span>")
C.cpr_time = world.time
add_logs(src, C, "CPRed")
if(they_breathe && they_lung)
var/suff = min(C.getOxyLoss(), 7)
C.adjustOxyLoss(-suff)
C.updatehealth()
src.visible_message("[src] performs CPR on [C.name]!", "<span class='notice'>You perform CPR on [C.name].</span>")
C << "<span class='unconscious'>You feel a breath of fresh air enter your lungs... It feels good...</span>"
add_logs(src, C, "CPRed")
else if(they_breathe && !they_lung)
C << "<span class='unconscious'>You feel a breath of fresh air... \
but you don't feel any better...</span>"
else
C << "<span class='unconscious'>You feel a breath of fresh air... \
which is a sensation you don't recognise...</span>"
/mob/living/carbon/human/generateStaticOverlay()
var/image/staticOverlay = image(icon('icons/effects/effects.dmi', "static"), loc = src)
@@ -985,14 +1006,32 @@
hud_used.healthdoll.icon_state = "healthdoll_DEAD"
/mob/living/carbon/human/fully_heal(admin_revive = 0)
CHECK_DNA_AND_SPECIES(src)
if(admin_revive)
regenerate_limbs()
if(!getorganslot("lungs"))
var/obj/item/organ/lungs/L = new()
L.Insert(src)
if(!getorganslot("tongue"))
var/obj/item/organ/tongue/T = new()
T.Insert(src)
if(!(NOBREATH in dna.species.specflags) && !getorganslot("lungs"))
var/obj/item/organ/lungs/L = new()
L.Insert(src)
if(!(NOBLOOD in dna.species.specflags) && !getorganslot("heart"))
var/obj/item/organ/heart/H = new()
H.Insert(src)
if(!getorganslot("tongue"))
var/obj/item/organ/tongue/T
for(var/tongue_type in dna.species.mutant_organs)
if(ispath(tongue_type, /obj/item/organ/tongue))
T = new tongue_type()
T.Insert(src)
// if they have no mutant tongues, give them a regular one
if(!T)
T = new()
T.Insert(src)
restore_blood()
remove_all_embedded_objects()
drunkenness = 0
+19 -7
View File
@@ -305,13 +305,25 @@
clear_alert("embeddedobject")
/mob/living/carbon/human/proc/handle_heart()
if(!heart_attack)
return
else
if(losebreath < 3)
losebreath += 2
adjustOxyLoss(5)
adjustBruteLoss(1)
CHECK_DNA_AND_SPECIES(src)
var/needs_heart = (!(NOBLOOD in dna.species.specflags))
var/we_breath = (!(NOBREATH in dna.species.specflags))
if(heart_attack)
if(!needs_heart)
heart_attack = FALSE
else if(we_breath)
if(losebreath < 3)
losebreath += 2
adjustOxyLoss(5)
adjustBruteLoss(1)
else
// even though we don't require oxygen, our blood still needs
// circulation, and without it, our tissues die and start
// gaining toxins
adjustBruteLoss(3)
if(src.reagents)
src.reagents.add_reagent("toxin", 2)
/*
Alcohol Poisoning Chart
+4 -1
View File
@@ -48,7 +48,10 @@
return real_name
/mob/living/carbon/human/IsVocal()
if(!getorganslot("lungs"))
CHECK_DNA_AND_SPECIES(src)
// how do species that don't breathe talk? magic, that's what.
if(!(NOBREATH in dna.species.specflags) && !getorganslot("lungs"))
return 0
if(mind)
return !mind.miming
@@ -73,6 +73,7 @@
var/safe_toxins_max = 0.05
var/SA_para_min = 1 //Sleeping agent
var/SA_sleep_min = 5 //Sleeping agent
var/BZ_trip_balls_min = 1 //BZ gas.
//Breath damage
var/oxy_breath_dam_min = 1
@@ -128,6 +129,32 @@
C.regenerate_limbs() //if we don't handle dismemberment, we grow our missing limbs back
if(exotic_blood)
C.reagents.add_reagent(exotic_blood, 80)
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")
if((NOBLOOD in specflags) && heart)
heart.Remove(C)
qdel(heart)
else if((!(NOBLOOD in specflags)) && (!heart))
heart = new()
heart.Insert(C)
if((NOBREATH in specflags) && lungs)
lungs.Remove(C)
qdel(lungs)
else if((!(NOBREATH in specflags)) && (!lungs))
lungs = new()
lungs.Insert(C)
if((NOHUNGER in specflags) && appendix)
appendix.Remove(C)
qdel(appendix)
else if((!(NOHUNGER in specflags)) && (!appendix))
appendix = new()
appendix.Insert(C)
for(var/path in mutant_organs)
var/obj/item/organ/I = new path()
I.Insert(C)
@@ -471,7 +498,13 @@
H.apply_overlay(BODY_FRONT_LAYER)
/datum/species/proc/spec_life(mob/living/carbon/human/H)
return
if(NOBREATH in specflags)
H.setOxyLoss(0)
H.losebreath = 0
var/takes_crit_damage = (!(NOCRITDAMAGE in specflags))
if((H.health < config.health_threshold_crit) && takes_crit_damage)
H.adjustBruteLoss(1)
/datum/species/proc/spec_death(gibbed, mob/living/carbon/human/H)
return
@@ -884,6 +917,10 @@
//////////////////
/datum/species/proc/spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H)
CHECK_DNA_AND_SPECIES(M)
CHECK_DNA_AND_SPECIES(H)
if(!istype(M)) //sanity check for drones.
return
if((M != H) && M.a_intent != "help" && H.check_shields(0, M.name, attack_type = UNARMED_ATTACK))
@@ -901,7 +938,17 @@
add_logs(M, H, "shaked")
return 1
else
M.do_cpr(H)
var/we_breathe = (!(NOBREATH in M.dna.species.specflags))
var/we_lung = M.getorganslot("lungs")
if(we_breathe && we_lung)
M.do_cpr(H)
else if(we_breathe && !we_lung)
M << "<span class='warning'>You have no lungs to breathe \
with, so cannot peform CPR.</span>"
else
M << "<span class='notice'>You do not breathe, so \
cannot perform CPR.</span>"
if("grab")
if(attacker_style && attacker_style.grab_act(M,H))
@@ -1154,7 +1201,8 @@
/////////////
/datum/species/proc/breathe(mob/living/carbon/human/H)
return
if(NOBREATH in specflags)
return TRUE
/datum/species/proc/check_breath(datum/gas_mixture/breath, var/mob/living/carbon/human/H)
if((H.status_flags & GODMODE))
@@ -1166,16 +1214,13 @@
if(H.reagents.has_reagent("epinephrine") && lungs)
return
if(H.health >= config.health_threshold_crit)
if(NOBREATH in specflags)
return 1
H.adjustOxyLoss(HUMAN_MAX_OXYLOSS)
if(!lungs)
H.adjustOxyLoss(1)
H.failed_last_breath = 1
else
else if(!(NOCRITDAMAGE in specflags))
H.adjustOxyLoss(HUMAN_CRIT_MAX_OXYLOSS)
H.failed_last_breath = 1
H.failed_last_breath = 1
H.throw_alert("oxy", /obj/screen/alert/oxy)
return 0
@@ -1184,7 +1229,7 @@
var/list/breath_gases = breath.gases
breath.assert_gases("o2", "plasma", "co2", "n2o")
breath.assert_gases("o2", "plasma", "co2", "n2o", "bz")
//Partial pressures in our breath
var/O2_pp = breath.get_breath_partial_pressure(breath_gases["o2"][MOLES])
@@ -1291,6 +1336,9 @@
//-- TRACES --//
if(breath && !(NOBREATH in specflags)) // If there's some other shit in the air lets deal with it here.
// N2O
var/SA_pp = breath.get_breath_partial_pressure(breath_gases["n2o"][MOLES])
if(SA_pp > SA_para_min) // Enough to make us paralysed for a bit
H.Paralyse(3) // 3 gives them one second to wake up and run away a bit!
@@ -1299,6 +1347,16 @@
else if(SA_pp > 0.01) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning
if(prob(20))
H.emote(pick("giggle", "laugh"))
// BZ
var/bz_pp = breath.get_breath_partial_pressure(breath_gases["bz"][MOLES])
if(bz_pp > BZ_trip_balls_min)
H.hallucination += 20
if(prob(33))
H.adjustBrainLoss(3)
else if(bz_pp > 0.01)
H.hallucination += 5//Removed at 2 per tick so this will slowly build up
handle_breath_temperature(breath, H)
breath.garbage_collect()
@@ -79,6 +79,14 @@
/datum/species/lizard/spec_death(gibbed, mob/living/carbon/human/H)
if(H)
H.endTailWag()
/*
Lizard subspecies: ASHWALKERS
*/
/datum/species/lizard/ashwalker
name = "Ash Walker"
id = "lizard"
specflags = list(MUTCOLORS,EYECOLOR,LIPS,NOBREATH,NOGUNS)
/*
PODPEOPLE
*/
+10 -1
View File
@@ -123,7 +123,7 @@
var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME
var/list/breath_gases = breath.gases
breath.assert_gases("o2","plasma","co2","n2o")
breath.assert_gases("o2","plasma","co2","n2o", "bz")
var/O2_partialpressure = (breath_gases["o2"][MOLES]/breath.total_moles())*breath_pressure
var/Toxins_partialpressure = (breath_gases["plasma"][MOLES]/breath.total_moles())*breath_pressure
@@ -188,6 +188,15 @@
else if(SA_partialpressure > 0.01)
if(prob(20))
emote(pick("giggle","laugh"))
//BZ (Facepunch port of their Agent B)
if(breath_gases["bz"])
var/bz_partialpressure = (breath_gases["bz"][MOLES]/breath.total_moles())*breath_pressure
if(bz_partialpressure > 1)
hallucination += 20
else if(bz_partialpressure > 0.01)
hallucination += 5//Removed at 2 per tick so this will slowly build up
breath.garbage_collect()
//BREATH TEMPERATURE
@@ -536,7 +536,7 @@
if (total_moles)
for(var/id in env_gases)
var/gas_level = env_gases[id][MOLES]/total_moles
if(id in hardcoded_gases || gas_level > 0.01)
if(gas_level > 0.01)
dat += "[env_gases[id][GAS_META][META_GAS_NAME]]: [round(gas_level*100)]%<br>"
dat += "Temperature: [round(environment.temperature-T0C)]&deg;C<br>"
dat += "<a href='byond://?src=\ref[src];software=atmosensor;sub=0'>Refresh Reading</a> <br>"
@@ -104,8 +104,8 @@
victim.acid_act(5, 2, 100)
if(prob(10)) //Wets floors randomly
var/turf/open/T = loc
T.MakeSlippery()
var/turf/open/OT = get_turf(loc)
OT.MakeSlippery(min = 5, max = 1)
if(prob(5)) //Spawns foam!
visible_message("<span class='danger'>[src] whirs and bubbles violently, before releasing a plume of froth!</span>")
@@ -26,6 +26,7 @@
AIStatus = AI_OFF //normal constructs don't have AI
loot = list(/obj/item/weapon/ectoplasm)
del_on_death = 1
deathmessage = "collapses in a shattered heap."
var/list/construct_spells = list()
var/playstyle_string = "<b>You are a generic construct! Your job is to not exist, and you should probably adminhelp this.</b>"
@@ -35,10 +36,6 @@
for(var/spell in construct_spells)
AddSpell(new spell(null))
/mob/living/simple_animal/hostile/construct/death()
deathmessage = "<span class='danger'>[src] collapses in a shattered heap.</span>"
..()
/mob/living/simple_animal/hostile/construct/examine(mob/user)
var/msg = "<span cass='info'>*---------*\nThis is \icon[src] \a <b>[src]</b>!\n"
if (src.health < src.maxHealth)
@@ -114,13 +114,14 @@
/mob/living/simple_animal/pet/cat/Runtime/proc/Write_Memory(dead)
var/savefile/S = new /savefile("data/npc_saves/Runtime.sav")
family = list()
for(var/mob/living/simple_animal/pet/cat/C in mob_list)
if(istype(C,type) || C.stat || !C.z || !C.butcher_results) //That last one is a work around for hologram cats
continue
if(C.type in family)
family[C.type] += 1
else
family[C.type] = 1
if(!dead)
for(var/mob/living/simple_animal/pet/cat/C in mob_list)
if(istype(C,type) || C.stat || !C.z || !C.butcher_results) //That last one is a work around for hologram cats
continue
if(C.type in family)
family[C.type] += 1
else
family[C.type] = 1
S["family"] << family
memory_saved = 1
@@ -126,17 +126,27 @@
/mob/living/simple_animal/cow/attack_hand(mob/living/carbon/M)
if(!stat && M.a_intent == "disarm" && icon_state != icon_dead)
M.visible_message("<span class='warning'>[M] tips over [src].</span>","<span class='notice'>You tip over [src].</span>")
M.visible_message("<span class='warning'>[M] tips over [src].</span>",
"<span class='notice'>You tip over [src].</span>")
src << "<span class='userdanger'>You are tipped over by [M]!</span>"
Weaken(30)
icon_state = icon_dead
spawn(rand(20,50))
if(!stat && M)
icon_state = icon_living
var/list/responses = list( "[src] looks at you imploringly.",
"[src] looks at you pleadingly",
"[src] looks at you with a resigned expression.",
"[src] seems resigned to its fate.")
M << pick(responses)
var/external
var/internal
switch(pick(1,2,3,4))
if(1,2,3)
var/text = pick("imploringly.", "pleadingly.",
"with a resigned expression.")
external = "[src] looks at [M] [text]"
internal = "You look at [M] [text]"
if(4)
external = "[src] seems resigned to its fate."
internal = "You resign yourself to your fate."
visible_message("<span class='notice'>[external]</span>",
"<span class='revennotice'>[internal]</span>")
else
..()
@@ -304,4 +314,4 @@ var/global/chicken_count = 0
/obj/item/udder/Destroy()
qdel(reagents)
return ..()
return ..()
@@ -12,7 +12,7 @@
/mob/living/simple_animal/hostile/poison/bees
name = "bee"
desc = "buzzy buzzy bee, stingy sti- Ouch!"
desc = "Buzzy buzzy bee, stingy sti- Ouch!"
icon_state = ""
icon_living = ""
icon = 'icons/mob/bees.dmi'
@@ -208,7 +208,7 @@
/mob/living/simple_animal/hostile/poison/bees/queen
name = "queen bee"
desc = "she's the queen of bees, BZZ BZZ"
desc = "She's the queen of bees, BZZ BZZ!"
icon_base = "queen"
isqueen = TRUE
@@ -242,7 +242,7 @@
/obj/item/queen_bee
name = "queen bee"
desc = "she's the queen of bees, BZZ BZZ"
desc = "She's the queen of bees, BZZ BZZ!"
icon_state = "queen_item"
item_state = ""
icon = 'icons/mob/bees.dmi'
@@ -63,8 +63,10 @@
AIStatus = AI_IDLE // otherwise we go idle
return 1
/mob/living/simple_animal/hostile/bullet_act(obj/item/projectile/P)
if(!target && AIStatus != AI_OFF && !client)
Goto(P.starting, move_to_delay, 3)
..()
//////////////HOSTILE MOB TARGETTING AND AGGRESSION////////////
@@ -354,4 +356,4 @@
. = 0
/mob/living/simple_animal/hostile/proc/AIShouldSleep(var/list/possible_targets)
return !FindTarget(possible_targets, 1)
return !FindTarget(possible_targets, 1)
@@ -17,6 +17,7 @@
var/mob/living/parent_mob
var/multiply_chance = 0 //if we multiply on hit
del_on_death = 1
deathmessage = "vanishes into thin air! It was a fake!"
/mob/living/simple_animal/hostile/illusion/Life()
@@ -38,11 +39,6 @@
pixel_y = initial(pixel_y)
pixel_x = initial(pixel_x)
/mob/living/simple_animal/hostile/illusion/New()
..()
deathmessage = "[src] vanishes into thin air! It was a fake!"
/mob/living/simple_animal/hostile/illusion/examine(mob/user)
if(parent_mob)
parent_mob.examine(user)
@@ -11,6 +11,7 @@
friendly = "stares down"
icon = 'icons/mob/lavaland/dragon.dmi'
faction = list("mining")
weather_immunities = list("lava","ash")
speak_emote = list("roars")
luminosity = 3
armour_penetration = 40
@@ -30,7 +31,7 @@
var/obj/item/device/gps/internal
var/swooping = 0
var/swoop_cooldown = 0
deathmessage = "collapes into a pile of bones, it's flesh sloughing away."
deathmessage = "collapses into a pile of bones, its flesh sloughing away."
death_sound = 'sound/magic/demon_dies.ogg'
damage_coeff = list(BRUTE = 1, BURN = 0.5, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
@@ -38,6 +39,10 @@
..()
internal = new/obj/item/device/gps/internal/dragon(src)
/mob/living/simple_animal/hostile/megafauna/dragon/Destroy()
qdel(internal)
. = ..()
/mob/living/simple_animal/hostile/megafauna/dragon/AttackingTarget()
if(swooping)
return
@@ -46,10 +51,12 @@
if(isliving(target))
var/mob/living/L = target
if(L.stat == DEAD)
L.gib()
visible_message("<span class='danger'>[src] devours [L]!</span>")
src << "<span class='userdanger'>You feast on [L], restoring your health!</span>"
usr.visible_message(
"<span class='danger'>[src] devours [L]!</span>",
"<span class='userdanger'>You feast on [L], restoring \
your health!</span>")
adjustBruteLoss(-L.maxHealth)
L.gib()
/mob/living/simple_animal/hostile/megafauna/dragon/Process_Spacemove(movement_dir = 0)
return 1
@@ -228,6 +235,14 @@
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "rended")
var/summon_cooldown = 0
/obj/item/weapon/melee/ghost_sword/New()
..()
SSobj.processing += src
/obj/item/weapon/melee/ghost_sword/Destroy()
SSobj.processing -= src
. = ..()
/obj/item/weapon/melee/ghost_sword/attack_self(mob/user)
if(summon_cooldown > world.time)
user << "You just recently called out for aid. You don't want to annoy the spirits."
@@ -236,6 +251,9 @@
notify_ghosts("[user] is raising their [src], calling for your help!", source = user)
summon_cooldown = world.time + 600
/obj/item/weapon/melee/ghost_sword/process()
ghost_check()
/obj/item/weapon/melee/ghost_sword/proc/ghost_check(mob/user)
var/ghost_counter = 0
for(var/mob/dead/observer/G in dead_mob_list)
@@ -243,7 +261,8 @@
ghost_counter++
G.invisibility = 0
spawn(30)
G.invisibility = initial(G.invisibility)
if(G.orbiting != user)
G.invisibility = initial(G.invisibility)
return ghost_counter
/obj/item/weapon/melee/ghost_sword/attack(mob/living/target, mob/living/carbon/human/user)
@@ -6,6 +6,7 @@
a_intent = "harm"
sentience_type = SENTIENCE_BOSS
environment_smash = 4
weather_immunities = list("lava","ash")
robust_searching = 1
stat_attack = 1
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
@@ -2,6 +2,7 @@
vision_range = 2
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
faction = list("mining")
weather_immunities = list("lava","ash")
environment_smash = 2
minbodytemp = 0
maxbodytemp = INFINITY
@@ -126,6 +127,7 @@
a_intent = "help"
speak_emote = list("screeches")
throw_message = "sinks in slowly, before being pushed out of "
deathmessage = "spits up the contents of its stomach before dying!"
status_flags = CANPUSH
search_objects = 1
wanted_objects = list(/obj/item/weapon/ore/diamond, /obj/item/weapon/ore/gold, /obj/item/weapon/ore/silver,
@@ -136,7 +138,6 @@
/mob/living/simple_animal/hostile/asteroid/goldgrub/New()
..()
deathmessage = "[src] spits up the contents of its stomach before dying!"
var/i = rand(1,3)
while(i)
loot += pick(/obj/item/weapon/ore/silver, /obj/item/weapon/ore/gold, /obj/item/weapon/ore/uranium, /obj/item/weapon/ore/diamond)
@@ -248,10 +249,15 @@
..()
spawn(2400)
if(!owner && !preserved)
inert = 1
desc = "The remains of a hivelord that have become useless, having been left alone too long after being harvested."
go_inert()
else
preserved = 1
preserved = TRUE
feedback_add_details("hivelord_core", "[src.type]|implanted")
/obj/item/organ/hivelord_core/proc/go_inert()
inert = TRUE
desc = "The remains of a hivelord that have become useless, having been left alone too long after being harvested."
feedback_add_details("hivelord_core", "[src.type]|inert")
/obj/item/organ/hivelord_core/ui_action_click()
var/spawn_amount = 1
@@ -278,7 +284,11 @@
owner.adjustOxyLoss(-2)
if(ishuman(owner))
var/mob/living/carbon/human/H = owner
var/datum/reagent/blood/B = locate() in H.vessel.reagent_list //Grab some blood
CHECK_DNA_AND_SPECIES(H)
if(NOBLOOD in H.dna.species.specflags)
return
var/datum/reagent/blood/B = locate() in H.vessel.reagent_list
var/blood_volume = round(H.vessel.get_reagent_amount("blood"))
if(B && blood_volume < 560 && blood_volume)
B.volume += 2 // Fast blood regen
@@ -287,7 +297,7 @@
if(proximity_flag && ishuman(target))
var/mob/living/carbon/human/H = target
if(inert)
user << "<span class='notice'>[src] have become inert, its healing properties are no more.</span>"
user << "<span class='notice'>[src] has become inert, its healing properties are no more.</span>"
return
else
if(H.stat == DEAD)
@@ -295,8 +305,10 @@
return
if(H != user)
H.visible_message("[user] forces [H] to apply [src]... they quickly regenerate all injuries!")
feedback_add_details("hivelord_core","[src.type]|used|other")
else
user << "<span class='notice'>You start to smear [src] on yourself. It feels and smells disgusting, but you feel amazingly refreshed in mere moments.</span>"
feedback_add_details("hivelord_core","[src.type]|used|self")
H.revive(full_heal = 1)
qdel(src)
..()
@@ -829,10 +841,27 @@
..()
/obj/item/organ/hivelord_core/legion
name = "legion's heart"
desc = "A demonic, still beating heart... its healing properties will soon become inert if not used quickly."
name = "legion's soul"
desc = "A strange rock that still crackles with power... its \
healing properties will soon become inert if not used quickly."
icon = 'icons/obj/surgery.dmi'
icon_state = "demon_heart"
icon_state = "legion_soul"
/obj/item/organ/hivelord_core/legion/New()
..()
update_icon()
/obj/item/organ/hivelord_core/update_icon()
icon_state = inert ? "legion_soul_inert" : "legion_soul"
overlays.Cut()
if(!inert)
overlays += image(icon, "legion_soul_crackle")
/obj/item/organ/hivelord_core/legion/go_inert()
. = ..()
desc = "[src] has become inert, it crackles no more and is useless for \
healing injuries."
update_icon()
/obj/item/weapon/legion_skull
name = "legion's head"
@@ -853,6 +882,7 @@
speak_emote = list("warbles", "quavers")
emote_hear = list("trills.")
emote_see = list("sniffs.", "burps.")
weather_immunities = list("lava","ash")
faction = list("mining", "ashwalker")
density = 0
speak_chance = 1
@@ -875,6 +905,7 @@
search_objects = TRUE
del_on_death = TRUE
loot = list(/obj/effect/decal/cleanable/blood/gibs)
deathmessage = "is pulped into bugmash."
animal_species = /mob/living/simple_animal/hostile/asteroid/gutlunch
childtype = list(/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck = 45, /mob/living/simple_animal/hostile/asteroid/gutlunch/guthen = 55)
@@ -882,10 +913,8 @@
wanted_objects = list(/obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/blood/gibs/)
var/obj/item/udder/gutlunch/udder = null
/mob/living/simple_animal/hostile/asteroid/gutlunch/New()
udder = new()
deathmessage = "[src] is pulped into bugmash."
..()
/mob/living/simple_animal/hostile/asteroid/gutlunch/Destroy()
@@ -966,6 +995,7 @@
icon_living = "tendril"
icon_dead = "tendril"
faction = list("mining")
weather_immunities = list("lava","ash")
health = 250
maxHealth = 250
max_mobs = 3
@@ -984,6 +1014,9 @@
..()
gps = new /obj/item/device/gps/internal(src)
/mob/living/simple_animal/hostile/spawner/lavaland/Destroy()
qdel(gps)
. = ..()
/obj/effect/collapse
name = "collapsing necropolis tendril"
@@ -27,6 +27,7 @@
robust_searching = 1
unique_name = 1
speak_emote = list("squeaks")
deathmessage = "fainted."
var/powerlevel = 0 //Tracks our general strength level gained from eating other shrooms
var/bruised = 0 //If someone tries to cheat the system by attacking a shroom to lower its health, punish them so that it wont award levels to shrooms that eat it
var/recovery_cooldown = 0 //So you can't repeatedly revive it during a fight
@@ -58,7 +59,6 @@
cap_dead.color = cap_color
UpdateMushroomCap()
health = maxHealth
deathmessage = "[src] fainted."
..()
/mob/living/simple_animal/hostile/mushroom/adjustHealth(damage)//Possibility to flee from a fight just to make it more visually interesting
@@ -57,7 +57,7 @@
melee_damage_upper = 30
environment_smash = 2
attacktext = "slams"
deathmessage = "The Reenactor's body collapses in on itself from the strain!"
deathmessage = "body collapses in on itself from the strain!"
loot = list(/obj/effect/gibspawner/human)
/mob/living/simple_animal/hostile/wwii/melee/AttackingTarget()
@@ -84,7 +84,7 @@
melee_damage_lower = 5
melee_damage_upper = 7
attacktext = "heils"
deathmessage = "The Mini-Führer explodes!"
deathmessage = "explodes!"
loot = list(/obj/effect/gibspawner/robot)
/mob/living/simple_animal/hostile/wwii/bomber/AttackingTarget()
@@ -30,7 +30,7 @@
see_invisible = SEE_INVISIBLE_MINIMUM
see_in_dark = 8
layer = MOB_LAYER - 0.1
deathmessage = "The skeleton collaspes into a pile of bones!"
deathmessage = "collapses into a pile of bones!"
del_on_death = 1
loot = list(/obj/effect/decal/remains/human)
@@ -46,7 +46,7 @@
gold_core_spawnable = 0
melee_damage_lower = 17
melee_damage_upper = 20
deathmessage = "The skeleton collaspes into a pile of bones, its gear falling to the floor!"
deathmessage = "collapses into a pile of bones, its gear falling to the floor!"
loot = list(/obj/effect/decal/remains/human,
/obj/item/weapon/twohanded/spear,
/obj/item/clothing/shoes/winterboots,
@@ -69,7 +69,7 @@
force_threshold = 10 //trying to simulate actually having armor
melee_damage_lower = 25
melee_damage_upper = 30
deathmessage = "The templar knight collaspes into a pile of bones, its gear clanging as it hits the ground!"
deathmessage = "collapses into a pile of bones, its gear clanging as it hits the ground!"
loot = list(/obj/effect/decal/remains/human,
/obj/item/clothing/suit/armor/riot/knight/templar,
/obj/item/clothing/head/helmet/knight/templar,
@@ -165,7 +165,4 @@
bubble_icon = "syndibot"
gold_core_spawnable = 1
del_on_death = 1
/mob/living/simple_animal/hostile/viscerator/New()
..()
deathmessage = "[src] is smashed into pieces!"
deathmessage = "is smashed into pieces!"
@@ -33,6 +33,7 @@
maxbodytemp = 1200
faction = list("hostile")
deathmessage = "is hacked into pieces!"
loot = list(/obj/item/stack/sheet/mineral/wood)
gold_core_spawnable = 1
del_on_death = 1
@@ -58,10 +59,6 @@
C.visible_message("<span class='danger'>\The [src] knocks down \the [C]!</span>", \
"<span class='userdanger'>\The [src] knocks you down!</span>")
/mob/living/simple_animal/hostile/tree/New()
..()
deathmessage = "[src] is hacked into pieces!"
/mob/living/simple_animal/hostile/tree/festivus
name = "festivus pole"
desc = "serenity now... SERENITY NOW!"

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