mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-26 22:50:26 +01:00
Conflicts III
This commit is contained in:
+6
-3
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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{
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 ..()
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)]°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"
|
||||
|
||||
@@ -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)]"
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -28,6 +28,8 @@
|
||||
/turf/open/space/ChangeTurf(path)
|
||||
. = ..()
|
||||
|
||||
/turf/open/space/TakeTemperature(temp)
|
||||
|
||||
/turf/open/space/AfterChange()
|
||||
..()
|
||||
atmos_overlay_types.Cut()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>"
|
||||
|
||||
@@ -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!"
|
||||
|
||||
@@ -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,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
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
@@ -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)]°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
Reference in New Issue
Block a user