Merge branch 'master' into upstream-merge-31601
This commit is contained in:
@@ -34,11 +34,11 @@
|
||||
|
||||
to_chat(user, "<span class='notice'>You disassemble [src].</span>")
|
||||
|
||||
bombassembly.loc = user.loc
|
||||
bombassembly.forceMove(user.drop_location())
|
||||
bombassembly.master = null
|
||||
bombassembly = null
|
||||
|
||||
bombtank.loc = user.loc
|
||||
bombtank.forceMove(user.drop_location())
|
||||
bombtank.master = null
|
||||
bombtank = null
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
..()
|
||||
|
||||
/obj/item/device/onetankbomb/attack_self(mob/user) //pressing the bomb accesses its assembly
|
||||
bombassembly.attack_self(user, 1)
|
||||
bombassembly.attack_self(user, TRUE)
|
||||
add_fingerprint(user)
|
||||
return
|
||||
|
||||
|
||||
@@ -48,6 +48,10 @@ Pipelines + Other Objects -> Pipe network
|
||||
SSair.atmos_machinery += src
|
||||
SetInitDirections()
|
||||
|
||||
/obj/machinery/atmospherics/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/rad_insulation, RAD_NO_INSULATION) //This would be a bad idea
|
||||
|
||||
/obj/machinery/atmospherics/Destroy()
|
||||
for(DEVICE_TYPE_LOOP)
|
||||
nullifyNode(I)
|
||||
|
||||
@@ -1,4 +1,34 @@
|
||||
|
||||
//Academy Areas
|
||||
|
||||
/area/awaymission/academy
|
||||
name = "Academy Asteroids"
|
||||
icon_state = "away"
|
||||
|
||||
/area/awaymission/academy/headmaster
|
||||
name = "Academy Fore Block"
|
||||
icon_state = "away1"
|
||||
|
||||
/area/awaymission/academy/classrooms
|
||||
name = "Academy Classroom Block"
|
||||
icon_state = "away2"
|
||||
|
||||
/area/awaymission/academy/academyaft
|
||||
name = "Academy Ship Aft Block"
|
||||
icon_state = "away3"
|
||||
|
||||
/area/awaymission/academy/academygate
|
||||
name = "Academy Gateway"
|
||||
icon_state = "away4"
|
||||
|
||||
/area/awaymission/academy/academycellar
|
||||
name = "Academy Cellar"
|
||||
icon_state = "away4"
|
||||
|
||||
/area/awaymission/academy/academyengine
|
||||
name = "Academy Engine"
|
||||
icon_state = "away4"
|
||||
|
||||
//Academy Items
|
||||
|
||||
/obj/item/paper/fluff/awaymissions/academy/console_maint
|
||||
|
||||
@@ -1,4 +1,21 @@
|
||||
|
||||
/*Cabin areas*/
|
||||
/area/awaymission/snowforest
|
||||
name = "Snow Forest"
|
||||
icon_state = "away"
|
||||
requires_power = FALSE
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_ENABLED
|
||||
|
||||
/area/awaymission/cabin
|
||||
name = "Cabin"
|
||||
icon_state = "away2"
|
||||
requires_power = TRUE
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_ENABLED
|
||||
|
||||
/area/awaymission/snowforest/lumbermill
|
||||
name = "Lumbermill"
|
||||
icon_state = "away3"
|
||||
|
||||
/obj/structure/firepit
|
||||
name = "firepit"
|
||||
desc = "warm and toasty"
|
||||
|
||||
@@ -1,3 +1,33 @@
|
||||
//Areas
|
||||
|
||||
/area/awaymission/caves/BMP_asteroid
|
||||
name = "\improper BMP Asteroid Level 1"
|
||||
icon_state = "awaycontent1"
|
||||
|
||||
/area/awaymission/caves/BMP_asteroid/level_two
|
||||
name = "\improper BMP Asteroid Level 2"
|
||||
icon_state = "awaycontent2"
|
||||
|
||||
/area/awaymission/caves/BMP_asteroid/level_three
|
||||
name = "\improper BMP Asteroid Level 3"
|
||||
icon_state = "awaycontent3"
|
||||
|
||||
/area/awaymission/caves/BMP_asteroid/level_four
|
||||
name = "\improper BMP Asteroid Level 4"
|
||||
icon_state = "awaycontent4"
|
||||
|
||||
/area/awaymission/caves/research
|
||||
name = "Research Outpost"
|
||||
icon_state = "awaycontent5"
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_ENABLED
|
||||
|
||||
/area/awaymission/caves/northblock //engineering, bridge (not really north but it doesnt really need its own APC)
|
||||
|
||||
/area/awaymission/caves/listeningpost
|
||||
name = "Listening Post"
|
||||
icon_state = "awaycontent6"
|
||||
requires_power = FALSE
|
||||
|
||||
//caves papers
|
||||
|
||||
/obj/item/paper/crumpled/awaymissions/caves/unsafe_area
|
||||
|
||||
@@ -1,29 +1,63 @@
|
||||
|
||||
|
||||
//centcomAway items
|
||||
|
||||
//centcomAway areas
|
||||
|
||||
/area/awaymission/centcomAway
|
||||
name = "XCC-P5831"
|
||||
icon_state = "away"
|
||||
requires_power = FALSE
|
||||
|
||||
/area/awaymission/centcomAway/general
|
||||
name = "XCC-P5831"
|
||||
music = 'sound/ambience/ambigen3.ogg'
|
||||
|
||||
/area/awaymission/centcomAway/maint
|
||||
name = "XCC-P5831 Maintenance"
|
||||
icon_state = "away1"
|
||||
music = 'sound/ambience/ambisin1.ogg'
|
||||
|
||||
/area/awaymission/centcomAway/thunderdome
|
||||
name = "XCC-P5831 Thunderdome"
|
||||
icon_state = "away2"
|
||||
music = 'sound/ambience/ambisin2.ogg'
|
||||
|
||||
/area/awaymission/centcomAway/cafe
|
||||
name = "XCC-P5831 Kitchen Arena"
|
||||
icon_state = "away3"
|
||||
music = 'sound/ambience/ambisin3.ogg'
|
||||
|
||||
/area/awaymission/centcomAway/courtroom
|
||||
name = "XCC-P5831 Courtroom"
|
||||
icon_state = "away4"
|
||||
music = 'sound/ambience/ambisin4.ogg'
|
||||
|
||||
/area/awaymission/centcomAway/hangar
|
||||
name = "XCC-P5831 Hangars"
|
||||
icon_state = "away4"
|
||||
music = 'sound/ambience/ambigen5.ogg'
|
||||
|
||||
//centcomAway items
|
||||
|
||||
/obj/item/paper/pamphlet/centcom/visitor_info
|
||||
name = "Visitor Info Pamphlet"
|
||||
info = "<b> XCC-P5831 Visitor Information </b><br>\
|
||||
Greetings, visitor, to XCC-P5831! As you may know, this outpost was once \
|
||||
used as Nanotrasen's CENTRAL COMMAND STATION, organizing and coordinating company \
|
||||
projects across the vastness of space. <br>\
|
||||
Since the completion of the much more efficient CC-A5831 on March 8, 2553, XCC-P5831 no longer \
|
||||
acts as NT's base of operations but still plays a very important role its corporate affairs; \
|
||||
serving as a supply and repair depot, as well as being host to its most important legal proceedings\
|
||||
and the thrilling pay-per-view broadcasts of <i>PLASTEEL CHEF</i> and <i>THUNDERDOME LIVE</i>.<br> \
|
||||
We hope you enjoy your stay!"
|
||||
|
||||
name = "Visitor Info Pamphlet"
|
||||
info = "<b> XCC-P5831 Visitor Information </b><br>\
|
||||
Greetings, visitor, to XCC-P5831! As you may know, this outpost was once \
|
||||
used as Nanotrasen's CENTRAL COMMAND STATION, organizing and coordinating company \
|
||||
projects across the vastness of space. <br>\
|
||||
Since the completion of the much more efficient CC-A5831 on March 8, 2553, XCC-P5831 no longer \
|
||||
acts as NT's base of operations but still plays a very important role its corporate affairs; \
|
||||
serving as a supply and repair depot, as well as being host to its most important legal proceedings\
|
||||
and the thrilling pay-per-view broadcasts of <i>PLASTEEL CHEF</i> and <i>THUNDERDOME LIVE</i>.<br> \
|
||||
We hope you enjoy your stay!"
|
||||
|
||||
/obj/item/paper/fluff/awaymissions/centcom/gateway_memo
|
||||
name = "Memo to XCC-P5831 QM"
|
||||
info = "<b>From: XCC-P5831 Management Office</b><br>\
|
||||
<b>To: Rolf Ingram, XCC-P5831 Quartermaster</b><br>\
|
||||
Hey, Rolf, once you pack that gateway into the ferry hangar, <i>make absolutely sure</i> \
|
||||
to deactivate it! As you may know, SS13 has recently got its network up and running, \
|
||||
which means that until we get this gate shipped off to the next colonization staging \
|
||||
area, they'll be able to hop straight in here if its hooked up on our end.<br>\
|
||||
Obviously, that's something I'd very much rather avoid. Our forensics and medical \
|
||||
teams never did figure out what happened that last time... and I can't wrap my head \
|
||||
around it myself. Why would a shuttle full of evacuees all snap and beat each other \
|
||||
to death the moment they reached safety?<br>\
|
||||
- D. Cereza"
|
||||
name = "Memo to XCC-P5831 QM"
|
||||
info = "<b>From: XCC-P5831 Management Office</b><br>\
|
||||
<b>To: Rolf Ingram, XCC-P5831 Quartermaster</b><br>\
|
||||
Hey, Rolf, once you pack that gateway into the ferry hangar, <i>make absolutely sure</i> \
|
||||
to deactivate it! As you may know, SS13 has recently got its network up and running, \
|
||||
which means that until we get this gate shipped off to the next colonization staging \
|
||||
area, they'll be able to hop straight in here if its hooked up on our end.<br>\
|
||||
Obviously, that's something I'd very much rather avoid. Our forensics and medical \
|
||||
teams never did figure out what happened that last time... and I can't wrap my head \
|
||||
around it myself. Why would a shuttle full of evacuees all snap and beat each other \
|
||||
to death the moment they reached safety?<br>\
|
||||
- D. Cereza"
|
||||
|
||||
@@ -1,3 +1,19 @@
|
||||
//Challenge Areas
|
||||
|
||||
/area/awaymission/challenge/start
|
||||
name = "Where Am I?"
|
||||
icon_state = "away"
|
||||
|
||||
/area/awaymission/challenge/main
|
||||
name = "Danger Room"
|
||||
icon_state = "away1"
|
||||
requires_power = FALSE
|
||||
|
||||
/area/awaymission/challenge/end
|
||||
name = "Administration"
|
||||
icon_state = "away2"
|
||||
requires_power = FALSE
|
||||
|
||||
|
||||
/obj/machinery/power/emitter/energycannon
|
||||
name = "Energy Cannon"
|
||||
|
||||
@@ -1,4 +1,43 @@
|
||||
/////////// moonoutpost19 papers
|
||||
// moonoutpost19
|
||||
|
||||
//Areas
|
||||
/area/awaymission/moonoutpost19
|
||||
name = "space"
|
||||
icon_state = "awaycontent1"
|
||||
|
||||
/area/awaymission/moonoutpost19/arrivals
|
||||
name = "MO19 Arrivals"
|
||||
icon_state = "awaycontent2"
|
||||
|
||||
/area/awaymission/moonoutpost19/research
|
||||
name = "MO19 Research"
|
||||
icon_state = "awaycontent3"
|
||||
|
||||
/area/awaymission/moonoutpost19/syndicate
|
||||
name = "Syndicate Outpost"
|
||||
icon_state = "awaycontent4"
|
||||
|
||||
/area/awaymission/moonoutpost19/main
|
||||
name = "Khonsu 19"
|
||||
always_unpowered = TRUE
|
||||
power_environ = FALSE
|
||||
power_equip = FALSE
|
||||
power_light = FALSE
|
||||
poweralm = FALSE
|
||||
ambientsounds = list('sound/ambience/ambimine.ogg')
|
||||
icon_state = "awaycontent5"
|
||||
|
||||
/area/awaymission/moonoutpost19/hive
|
||||
name = "The Hive"
|
||||
always_unpowered = FALSE
|
||||
has_gravity = FALSE
|
||||
power_environ = FALSE
|
||||
power_equip = FALSE
|
||||
power_light = FALSE
|
||||
poweralm = FALSE
|
||||
icon_state = "awaycontent6"
|
||||
|
||||
//Papers
|
||||
|
||||
/obj/item/paper/crumpled/awaymissions/moonoutpost19/hastey_note
|
||||
name = "Hastily Written Note"
|
||||
|
||||
@@ -1,3 +1,67 @@
|
||||
//Research Base Areas//--
|
||||
|
||||
/area/awaymission/research
|
||||
name = "Research Outpost"
|
||||
icon_state = "away"
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_ENABLED
|
||||
|
||||
/area/awaymission/research/interior
|
||||
name = "Research Inside"
|
||||
requires_power = TRUE
|
||||
icon_state = "away2"
|
||||
|
||||
/area/awaymission/research/interior/cryo
|
||||
name = "Research Cryostasis Room"
|
||||
icon_state = "medbay"
|
||||
|
||||
/area/awaymission/research/interior/clonestorage
|
||||
name = "Research Clone Storage"
|
||||
icon_state = "cloning"
|
||||
|
||||
/area/awaymission/research/interior/genetics
|
||||
name = "Research Genetics Research"
|
||||
icon_state = "genetics"
|
||||
|
||||
/area/awaymission/research/interior/engineering
|
||||
name = "Research Engineering"
|
||||
icon_state = "engine"
|
||||
|
||||
/area/awaymission/research/interior/security
|
||||
name = "Research Security"
|
||||
icon_state = "security"
|
||||
|
||||
/area/awaymission/research/interior/secure
|
||||
name = "Research Secure Vault"
|
||||
|
||||
/area/awaymission/research/interior/maint
|
||||
name = "Research Maintenance"
|
||||
icon_state = "maintcentral"
|
||||
|
||||
/area/awaymission/research/interior/dorm
|
||||
name = "Research Dorms"
|
||||
icon_state = "Sleep"
|
||||
|
||||
/area/awaymission/research/interior/escapepods
|
||||
name = "Research Escape Wing"
|
||||
icon_state = "exit"
|
||||
|
||||
/area/awaymission/research/interior/gateway
|
||||
name = "Research Gateway"
|
||||
icon_state = "start"
|
||||
|
||||
/area/awaymission/research/interior/bathroom
|
||||
name = "Research Bathrooms"
|
||||
icon_state = "restrooms"
|
||||
|
||||
/area/awaymission/research/interior/medbay
|
||||
name = "Research Medbay"
|
||||
icon_state = "medbay"
|
||||
|
||||
/area/awaymission/research/exterior
|
||||
name = "Research Exterior"
|
||||
icon_state = "unknown"
|
||||
|
||||
|
||||
//research papers
|
||||
|
||||
/obj/item/paper/crumpled/awaymissions/research/sensitive_info
|
||||
|
||||
@@ -1,3 +1,40 @@
|
||||
//Snow Valley Areas//--
|
||||
|
||||
/area/awaymission/snowdin
|
||||
name = "Snowdin Tundra Plains"
|
||||
icon_state = "awaycontent1"
|
||||
requires_power = FALSE
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_ENABLED
|
||||
|
||||
/area/awaymission/snowdin/post
|
||||
name = "Snowdin Outpost"
|
||||
requires_power = TRUE
|
||||
icon_state = "awaycontent2"
|
||||
|
||||
/area/awaymission/snowdin/igloo
|
||||
name = "Snowdin Igloos"
|
||||
icon_state = "awaycontent3"
|
||||
|
||||
/area/awaymission/snowdin/cave
|
||||
name = "Snowdin Caves"
|
||||
icon_state = "awaycontent4"
|
||||
|
||||
/area/awaymission/snowdin/base
|
||||
name = "Snowdin Main Base"
|
||||
icon_state = "awaycontent5"
|
||||
requires_power = TRUE
|
||||
|
||||
/area/awaymission/snowdin/dungeon1
|
||||
name = "Snowdin Depths"
|
||||
icon_state = "awaycontent6"
|
||||
|
||||
/area/awaymission/snowdin/sekret
|
||||
name = "Snowdin Operations"
|
||||
icon_state = "awaycontent7"
|
||||
requires_power = TRUE
|
||||
|
||||
|
||||
|
||||
/////////// papers
|
||||
|
||||
/obj/item/paper/crumpled/ruins/snowdin/snowdingatewaynotice
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
//Spacebattle Areas
|
||||
|
||||
/area/awaymission/spacebattle
|
||||
name = "Space Battle"
|
||||
icon_state = "awaycontent1"
|
||||
requires_power = FALSE
|
||||
|
||||
/area/awaymission/spacebattle/cruiser
|
||||
name = "Nanotrasen Cruiser"
|
||||
icon_state = "awaycontent2"
|
||||
|
||||
/area/awaymission/spacebattle/syndicate1
|
||||
name = "Syndicate Assault Ship 1"
|
||||
icon_state = "awaycontent3"
|
||||
|
||||
/area/awaymission/spacebattle/syndicate2
|
||||
name = "Syndicate Assault Ship 2"
|
||||
icon_state = "awaycontent4"
|
||||
|
||||
/area/awaymission/spacebattle/syndicate3
|
||||
name = "Syndicate Assault Ship 3"
|
||||
icon_state = "awaycontent5"
|
||||
|
||||
/area/awaymission/spacebattle/syndicate4
|
||||
name = "Syndicate War Sphere 1"
|
||||
icon_state = "awaycontent6"
|
||||
|
||||
/area/awaymission/spacebattle/syndicate5
|
||||
name = "Syndicate War Sphere 2"
|
||||
icon_state = "awaycontent7"
|
||||
|
||||
/area/awaymission/spacebattle/syndicate6
|
||||
name = "Syndicate War Sphere 3"
|
||||
icon_state = "awaycontent8"
|
||||
|
||||
/area/awaymission/spacebattle/syndicate7
|
||||
name = "Syndicate Fighter"
|
||||
icon_state = "awaycontent9"
|
||||
|
||||
/area/awaymission/spacebattle/secret
|
||||
name = "Hidden Chamber"
|
||||
icon_state = "awaycontent10"
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
// undergroundoutpost45
|
||||
|
||||
//Areas
|
||||
/area/awaymission/undergroundoutpost45
|
||||
name = "space"
|
||||
icon_state = "awaycontent1"
|
||||
|
||||
/area/awaymission/undergroundoutpost45/central
|
||||
name = "UO45 Central Hall"
|
||||
icon_state = "awaycontent2"
|
||||
|
||||
/area/awaymission/undergroundoutpost45/crew_quarters
|
||||
name = "UO45 Crew Quarters"
|
||||
icon_state = "awaycontent3"
|
||||
|
||||
/area/awaymission/undergroundoutpost45/engineering
|
||||
name = "UO45 Engineering"
|
||||
icon_state = "awaycontent4"
|
||||
|
||||
/area/awaymission/undergroundoutpost45/mining
|
||||
name = "UO45 Mining"
|
||||
icon_state = "awaycontent5"
|
||||
|
||||
/area/awaymission/undergroundoutpost45/research
|
||||
name = "UO45 Research"
|
||||
icon_state = "awaycontent6"
|
||||
|
||||
/area/awaymission/undergroundoutpost45/gateway
|
||||
name = "UO45 Gateway"
|
||||
icon_state = "awaycontent7"
|
||||
|
||||
/area/awaymission/undergroundoutpost45/caves
|
||||
name = "UO45 Caves"
|
||||
icon_state = "awaycontent8"
|
||||
always_unpowered = TRUE
|
||||
power_environ = FALSE
|
||||
power_equip = FALSE
|
||||
power_light = FALSE
|
||||
poweralm = FALSE
|
||||
@@ -4,6 +4,33 @@
|
||||
* Meat Grinder
|
||||
*/
|
||||
|
||||
//Areas
|
||||
|
||||
/area/awaymission/wildwest/mines
|
||||
name = "Wild West Mines"
|
||||
icon_state = "away1"
|
||||
requires_power = FALSE
|
||||
|
||||
/area/awaymission/wildwest/gov
|
||||
name = "Wild West Mansion"
|
||||
icon_state = "away2"
|
||||
requires_power = FALSE
|
||||
|
||||
/area/awaymission/wildwest/refine
|
||||
name = "Wild West Refinery"
|
||||
icon_state = "away3"
|
||||
requires_power = FALSE
|
||||
|
||||
/area/awaymission/wildwest/vault
|
||||
name = "Wild West Vault"
|
||||
icon_state = "away3"
|
||||
|
||||
/area/awaymission/wildwest/vaultdoors
|
||||
name = "Wild West Vault Doors" // this is to keep the vault area being entirely lit because of requires_power
|
||||
icon_state = "away2"
|
||||
requires_power = FALSE
|
||||
|
||||
|
||||
////////// wildwest papers
|
||||
|
||||
/obj/item/paper/fluff/awaymissions/wildwest/grinder
|
||||
|
||||
@@ -51,7 +51,8 @@
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/rad_act(severity)
|
||||
..()
|
||||
display_visor_message("Radiation pulse detected! Magnitude: <span class='green'>[severity]</span> RADs.")
|
||||
if(severity > RAD_AMOUNT_EXTREME)
|
||||
display_visor_message("Radiation pulse detected! Magnitude: <span class='green'>[severity]</span> RADs.")
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/emp_act(severity)
|
||||
..()
|
||||
|
||||
@@ -116,6 +116,10 @@
|
||||
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
|
||||
resistance_flags = 0
|
||||
|
||||
/obj/item/clothing/head/radiation/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/rad_insulation, RAD_NO_INSULATION, TRUE, FALSE)
|
||||
|
||||
/obj/item/clothing/suit/radiation
|
||||
name = "radiation suit"
|
||||
desc = "A suit that protects against radiation. The label reads, 'Made with lead. Please do not consume insulation.'"
|
||||
@@ -133,3 +137,9 @@
|
||||
equip_delay_other = 60
|
||||
flags_inv = HIDEJUMPSUIT
|
||||
resistance_flags = 0
|
||||
|
||||
/obj/item/clothing/suit/radiation/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/rad_insulation, RAD_NO_INSULATION, TRUE, FALSE)
|
||||
// Just don't want things to be irradiated inside this
|
||||
// Except things on the mob aren't even inside the suit so ehhhhhh
|
||||
@@ -23,6 +23,8 @@
|
||||
if (l_color != NONSENSICAL_VALUE)
|
||||
light_color = l_color
|
||||
|
||||
SendSignal(COMSIG_ATOM_SET_LIGHT, l_range, l_power, l_color)
|
||||
|
||||
update_light()
|
||||
|
||||
#undef NONSENSICAL_VALUE
|
||||
|
||||
+106
-108
@@ -1,108 +1,106 @@
|
||||
|
||||
|
||||
/proc/seedRuins(list/z_levels = null, budget = 0, whitelist = /area/space, list/potentialRuins)
|
||||
if(!z_levels || !z_levels.len)
|
||||
WARNING("No Z levels provided - Not generating ruins")
|
||||
return
|
||||
|
||||
for(var/zl in z_levels)
|
||||
var/turf/T = locate(1, 1, zl)
|
||||
if(!T)
|
||||
WARNING("Z level [zl] does not exist - Not generating ruins")
|
||||
return
|
||||
|
||||
var/overall_sanity = 100
|
||||
var/list/ruins = potentialRuins.Copy()
|
||||
|
||||
var/is_picking = FALSE
|
||||
var/last_checked_ruin_index = 0
|
||||
while(budget > 0 && overall_sanity > 0)
|
||||
// Pick a ruin
|
||||
var/datum/map_template/ruin/ruin = null
|
||||
if(ruins && ruins.len)
|
||||
last_checked_ruin_index++ //ruins with no cost come first in the ruin list, so they'll get picked really often
|
||||
if(is_picking)
|
||||
ruin = ruins[pick(ruins)]
|
||||
else
|
||||
var/ruin_key = ruins[last_checked_ruin_index] //get the ruin's key via index
|
||||
ruin = ruins[ruin_key] //use that key to get the ruin datum itself
|
||||
if(ruin.cost >= 0) //if it has a non-negative cost, cancel out and pick another, to ensure true randomness
|
||||
is_picking = TRUE
|
||||
ruin = ruins[pick(ruins)]
|
||||
else
|
||||
log_world("Ruin loader had no ruins to pick from with [budget] left to spend.")
|
||||
break
|
||||
// Can we afford it
|
||||
if(ruin.cost > budget)
|
||||
overall_sanity--
|
||||
continue
|
||||
// If so, try to place it
|
||||
var/sanity = 100
|
||||
// And if we can't fit it anywhere, give up, try again
|
||||
|
||||
while(sanity > 0)
|
||||
sanity--
|
||||
var/width_border = TRANSITIONEDGE + SPACERUIN_MAP_EDGE_PAD + round(ruin.width / 2)
|
||||
var/height_border = TRANSITIONEDGE + SPACERUIN_MAP_EDGE_PAD + round(ruin.height / 2)
|
||||
var/z_level = pick(z_levels)
|
||||
var/turf/T = locate(rand(width_border, world.maxx - width_border), rand(height_border, world.maxy - height_border), z_level)
|
||||
var/valid = TRUE
|
||||
|
||||
for(var/turf/check in ruin.get_affected_turfs(T,1))
|
||||
var/area/new_area = get_area(check)
|
||||
if(!(istype(new_area, whitelist)))
|
||||
valid = FALSE
|
||||
break
|
||||
|
||||
if(!valid)
|
||||
continue
|
||||
|
||||
log_world("Ruin \"[ruin.name]\" placed at ([T.x], [T.y], [T.z])")
|
||||
|
||||
var/obj/effect/ruin_loader/R = new /obj/effect/ruin_loader(T)
|
||||
R.Load(ruins,ruin)
|
||||
if(ruin.cost >= 0)
|
||||
budget -= ruin.cost
|
||||
if(!ruin.allow_duplicates)
|
||||
for(var/m in ruins)
|
||||
var/datum/map_template/ruin/ruin_to_remove = ruins[m]
|
||||
if(ruin_to_remove.id == ruin.id) //remove all ruins with the same ID, to make sure that ruins with multiple variants work properly
|
||||
ruins -= ruin_to_remove.name
|
||||
last_checked_ruin_index--
|
||||
break
|
||||
|
||||
if(!overall_sanity)
|
||||
log_world("Ruin loader gave up with [budget] left to spend.")
|
||||
|
||||
|
||||
/obj/effect/ruin_loader
|
||||
name = "random ruin"
|
||||
icon = 'icons/obj/items_and_weapons.dmi'
|
||||
icon_state = "syndballoon"
|
||||
invisibility = 0
|
||||
|
||||
/obj/effect/ruin_loader/proc/Load(list/potentialRuins, datum/map_template/template)
|
||||
var/list/possible_ruins = list()
|
||||
for(var/A in potentialRuins)
|
||||
var/datum/map_template/T = potentialRuins[A]
|
||||
if(!T.loaded)
|
||||
possible_ruins += T
|
||||
if(!template && possible_ruins.len)
|
||||
template = safepick(possible_ruins)
|
||||
if(!template)
|
||||
return FALSE
|
||||
var/turf/central_turf = get_turf(src)
|
||||
for(var/i in template.get_affected_turfs(central_turf, 1))
|
||||
var/turf/T = i
|
||||
for(var/mob/living/simple_animal/monster in T)
|
||||
qdel(monster)
|
||||
for(var/obj/structure/flora/ash/plant in T)
|
||||
qdel(plant)
|
||||
template.load(central_turf,centered = TRUE)
|
||||
template.loaded++
|
||||
var/datum/map_template/ruin = template
|
||||
if(istype(ruin))
|
||||
new /obj/effect/landmark/ruin(central_turf, ruin)
|
||||
|
||||
qdel(src)
|
||||
return TRUE
|
||||
/proc/seedRuins(list/z_levels = null, budget = 0, whitelist = /area/space, list/potentialRuins)
|
||||
if(!z_levels || !z_levels.len)
|
||||
WARNING("No Z levels provided - Not generating ruins")
|
||||
return
|
||||
|
||||
for(var/zl in z_levels)
|
||||
var/turf/T = locate(1, 1, zl)
|
||||
if(!T)
|
||||
WARNING("Z level [zl] does not exist - Not generating ruins")
|
||||
return
|
||||
|
||||
var/overall_sanity = 100
|
||||
var/list/ruins = potentialRuins.Copy()
|
||||
|
||||
var/is_picking = FALSE
|
||||
var/last_checked_ruin_index = 0
|
||||
while(budget > 0 && overall_sanity > 0)
|
||||
// Pick a ruin
|
||||
var/datum/map_template/ruin/ruin = null
|
||||
if(ruins && ruins.len)
|
||||
last_checked_ruin_index++ //ruins with no cost come first in the ruin list, so they'll get picked really often
|
||||
if(is_picking)
|
||||
ruin = ruins[pick(ruins)]
|
||||
else
|
||||
var/ruin_key = ruins[last_checked_ruin_index] //get the ruin's key via index
|
||||
ruin = ruins[ruin_key] //use that key to get the ruin datum itself
|
||||
if(ruin.cost >= 0) //if it has a non-negative cost, cancel out and pick another, to ensure true randomness
|
||||
is_picking = TRUE
|
||||
ruin = ruins[pick(ruins)]
|
||||
else
|
||||
log_world("Ruin loader had no ruins to pick from with [budget] left to spend.")
|
||||
break
|
||||
// Can we afford it
|
||||
if(ruin.cost > budget)
|
||||
overall_sanity--
|
||||
continue
|
||||
// If so, try to place it
|
||||
var/sanity = 100
|
||||
// And if we can't fit it anywhere, give up, try again
|
||||
|
||||
while(sanity > 0)
|
||||
sanity--
|
||||
var/width_border = TRANSITIONEDGE + SPACERUIN_MAP_EDGE_PAD + round(ruin.width / 2)
|
||||
var/height_border = TRANSITIONEDGE + SPACERUIN_MAP_EDGE_PAD + round(ruin.height / 2)
|
||||
var/z_level = pick(z_levels)
|
||||
var/turf/T = locate(rand(width_border, world.maxx - width_border), rand(height_border, world.maxy - height_border), z_level)
|
||||
var/valid = TRUE
|
||||
|
||||
for(var/turf/check in ruin.get_affected_turfs(T,1))
|
||||
var/area/new_area = get_area(check)
|
||||
if(!(istype(new_area, whitelist)) || check.flags_1 & NO_RUINS_1)
|
||||
valid = FALSE
|
||||
break
|
||||
|
||||
if(!valid)
|
||||
continue
|
||||
|
||||
log_world("Ruin \"[ruin.name]\" placed at ([T.x], [T.y], [T.z])")
|
||||
|
||||
var/obj/effect/ruin_loader/R = new /obj/effect/ruin_loader(T)
|
||||
R.Load(ruins,ruin)
|
||||
if(ruin.cost >= 0)
|
||||
budget -= ruin.cost
|
||||
if(!ruin.allow_duplicates)
|
||||
for(var/m in ruins)
|
||||
var/datum/map_template/ruin/ruin_to_remove = ruins[m]
|
||||
if(ruin_to_remove.id == ruin.id) //remove all ruins with the same ID, to make sure that ruins with multiple variants work properly
|
||||
ruins -= ruin_to_remove.name
|
||||
last_checked_ruin_index--
|
||||
break
|
||||
|
||||
if(!overall_sanity)
|
||||
log_world("Ruin loader gave up with [budget] left to spend.")
|
||||
|
||||
|
||||
/obj/effect/ruin_loader
|
||||
name = "random ruin"
|
||||
icon = 'icons/obj/items_and_weapons.dmi'
|
||||
icon_state = "syndballoon"
|
||||
invisibility = 0
|
||||
|
||||
/obj/effect/ruin_loader/proc/Load(list/potentialRuins, datum/map_template/template)
|
||||
var/list/possible_ruins = list()
|
||||
for(var/A in potentialRuins)
|
||||
var/datum/map_template/T = potentialRuins[A]
|
||||
if(!T.loaded)
|
||||
possible_ruins += T
|
||||
if(!template && possible_ruins.len)
|
||||
template = safepick(possible_ruins)
|
||||
if(!template)
|
||||
return FALSE
|
||||
var/turf/central_turf = get_turf(src)
|
||||
for(var/i in template.get_affected_turfs(central_turf, 1))
|
||||
var/turf/T = i
|
||||
for(var/mob/living/simple_animal/monster in T)
|
||||
qdel(monster)
|
||||
for(var/obj/structure/flora/ash/plant in T)
|
||||
qdel(plant)
|
||||
template.load(central_turf,centered = TRUE)
|
||||
template.loaded++
|
||||
var/datum/map_template/ruin = template
|
||||
if(istype(ruin))
|
||||
new /obj/effect/landmark/ruin(central_turf, ruin)
|
||||
|
||||
qdel(src)
|
||||
return TRUE
|
||||
|
||||
@@ -24,6 +24,9 @@
|
||||
loc = pick(GLOB.newplayer_start)
|
||||
else
|
||||
loc = locate(1,1,1)
|
||||
|
||||
ComponentInitialize()
|
||||
|
||||
. = ..()
|
||||
|
||||
/mob/dead/new_player/prepare_huds()
|
||||
|
||||
@@ -710,7 +710,7 @@
|
||||
var/static/mutable_appearance/electrocution_skeleton_anim
|
||||
if(!electrocution_skeleton_anim)
|
||||
electrocution_skeleton_anim = mutable_appearance(icon, "electrocuted_base")
|
||||
electrocution_skeleton_anim.appearance_flags |= RESET_COLOR
|
||||
electrocution_skeleton_anim.appearance_flags |= RESET_COLOR|KEEP_APART
|
||||
add_overlay(electrocution_skeleton_anim)
|
||||
addtimer(CALLBACK(src, .proc/end_electrocution_animation, electrocution_skeleton_anim), anim_duration)
|
||||
|
||||
|
||||
@@ -265,7 +265,6 @@
|
||||
//delete all equipment without dropping anything
|
||||
/mob/living/carbon/human/proc/delete_equipment()
|
||||
for(var/slot in get_all_slots())//order matters, dependant slots go first
|
||||
var/obj/item/I = get_item_by_slot(slot)
|
||||
qdel(I)
|
||||
qdel(slot)
|
||||
for(var/obj/item/I in held_items)
|
||||
qdel(I)
|
||||
qdel(I)
|
||||
|
||||
@@ -1135,36 +1135,31 @@
|
||||
return 0
|
||||
|
||||
/datum/species/proc/handle_mutations_and_radiation(mob/living/carbon/human/H)
|
||||
. = FALSE
|
||||
var/radiation = H.radiation
|
||||
|
||||
if(!(RADIMMUNE in species_traits))
|
||||
if(H.radiation)
|
||||
if (H.radiation > 100)
|
||||
if(!H.IsKnockdown())
|
||||
H.emote("collapse")
|
||||
H.Knockdown(200)
|
||||
to_chat(H, "<span class='danger'>You feel weak.</span>")
|
||||
switch(H.radiation)
|
||||
if(50 to 75)
|
||||
if(prob(5))
|
||||
if(!H.IsKnockdown())
|
||||
H.emote("collapse")
|
||||
H.Knockdown(60)
|
||||
to_chat(H, "<span class='danger'>You feel weak.</span>")
|
||||
if(RADIMMUNE in species_traits)
|
||||
radiation = 0
|
||||
return TRUE
|
||||
|
||||
if(prob(15))
|
||||
if(!( H.hair_style == "Shaved") || !(H.hair_style == "Bald") || (HAIR in species_traits))
|
||||
to_chat(H, "<span class='danger'>Your hair starts to fall out in clumps...</span>")
|
||||
addtimer(CALLBACK(src, .proc/go_bald, H), 50)
|
||||
if(radiation > RAD_MOB_KNOCKDOWN)
|
||||
if(!H.IsKnockdown())
|
||||
H.emote("collapse")
|
||||
H.Knockdown(RAD_KNOCKDOWN_TIME)
|
||||
to_chat(H, "<span class='danger'>You feel weak.</span>")
|
||||
|
||||
if(radiation > RAD_MOB_MUTATE)
|
||||
if(prob(1))
|
||||
to_chat(H, "<span class='danger'>You mutate!</span>")
|
||||
H.randmutb()
|
||||
H.emote("gasp")
|
||||
H.domutcheck()
|
||||
|
||||
if(75 to 100)
|
||||
if(prob(1))
|
||||
to_chat(H, "<span class='danger'>You mutate!</span>")
|
||||
H.randmutb()
|
||||
H.emote("gasp")
|
||||
H.domutcheck()
|
||||
return 0
|
||||
H.radiation = 0
|
||||
return 1
|
||||
if(radiation > RAD_MOB_HAIRLOSS)
|
||||
if(prob(15))
|
||||
if(!( H.hair_style == "Shaved") || !(H.hair_style == "Bald") || (HAIR in species_traits))
|
||||
to_chat(H, "<span class='danger'>Your hair starts to fall out in clumps...</span>")
|
||||
addtimer(CALLBACK(src, .proc/go_bald, H), 50)
|
||||
|
||||
/datum/species/proc/go_bald(mob/living/carbon/human/H)
|
||||
if(QDELETED(H)) //may be called from a timer
|
||||
|
||||
@@ -295,7 +295,7 @@
|
||||
if(!active)
|
||||
if(world.time > last_event+30)
|
||||
active = 1
|
||||
radiation_pulse(get_turf(H), 3, 3, 5, 0)
|
||||
radiation_pulse(get_turf(H), 50)
|
||||
last_event = world.time
|
||||
active = null
|
||||
..()
|
||||
|
||||
@@ -280,24 +280,9 @@
|
||||
HM.force_lose(src)
|
||||
dna.temporary_mutations.Remove(mut)
|
||||
|
||||
if(radiation)
|
||||
radiation = Clamp(radiation, 0, 100)
|
||||
switch(radiation)
|
||||
if(0 to 50)
|
||||
radiation = max(radiation-1,0)
|
||||
if(prob(25))
|
||||
adjustToxLoss(1)
|
||||
|
||||
if(50 to 75)
|
||||
radiation = max(radiation-2,0)
|
||||
adjustToxLoss(1)
|
||||
if(prob(5))
|
||||
radiation = max(radiation-5,0)
|
||||
|
||||
if(75 to 100)
|
||||
radiation = max(radiation-3,0)
|
||||
adjustToxLoss(3)
|
||||
|
||||
radiation -= min(radiation, RAD_LOSS_PER_TICK)
|
||||
if(radiation > RAD_MOB_SAFE)
|
||||
adjustToxLoss(log(radiation-RAD_MOB_SAFE)*RAD_TOX_COEFFICIENT)
|
||||
|
||||
/mob/living/carbon/handle_stomach()
|
||||
set waitfor = 0
|
||||
|
||||
@@ -23,32 +23,23 @@
|
||||
walk_to(src,0)
|
||||
|
||||
/mob/living/carbon/monkey/handle_mutations_and_radiation()
|
||||
|
||||
if (radiation)
|
||||
if (radiation > 100)
|
||||
if(radiation)
|
||||
if(radiation > RAD_MOB_KNOCKDOWN)
|
||||
if(!IsKnockdown())
|
||||
emote("collapse")
|
||||
Knockdown(200)
|
||||
to_chat(src, "<span class='danger'>You feel weak.</span>")
|
||||
if(radiation > 30 && prob((radiation - 30) * (radiation - 30) * 0.0002))
|
||||
gorillize()
|
||||
return
|
||||
switch(radiation)
|
||||
if(radiation > RAD_MOB_MUTATE)
|
||||
if(prob(1))
|
||||
to_chat(src, "<span class='danger'>You mutate!</span>")
|
||||
randmutb()
|
||||
emote("gasp")
|
||||
domutcheck()
|
||||
|
||||
if(50 to 75)
|
||||
if(prob(5))
|
||||
if(!IsKnockdown())
|
||||
emote("collapse")
|
||||
Knockdown(60)
|
||||
to_chat(src, "<span class='danger'>You feel weak.</span>")
|
||||
|
||||
if(75 to 100)
|
||||
if(prob(1))
|
||||
to_chat(src, "<span class='danger'>You mutate!</span>")
|
||||
randmutb()
|
||||
emote("gasp")
|
||||
domutcheck()
|
||||
..()
|
||||
if(radiation > RAD_MOB_MUTATE * 2 && prob(50))
|
||||
gorillize()
|
||||
return
|
||||
return ..()
|
||||
|
||||
/mob/living/carbon/monkey/handle_breath_temperature(datum/gas_mixture/breath)
|
||||
if(abs(310.15 - breath.temperature) > 50)
|
||||
|
||||
@@ -885,6 +885,16 @@
|
||||
G.Recall()
|
||||
to_chat(G, "<span class='holoparasite'>Your summoner has changed form!</span>")
|
||||
|
||||
/mob/living/rad_act(amount)
|
||||
amount = max(amount-RAD_BACKGROUND_RADIATION, 0)
|
||||
|
||||
if(amount)
|
||||
var/blocked = getarmor(null, "rad")
|
||||
|
||||
apply_effect(amount * RAD_MOB_COEFFICIENT, IRRADIATE, blocked)
|
||||
if(amount > RAD_AMOUNT_EXTREME)
|
||||
apply_damage((amount-RAD_AMOUNT_EXTREME)/RAD_AMOUNT_EXTREME, BURN, null, blocked)
|
||||
|
||||
/mob/living/proc/fakefireextinguish()
|
||||
return
|
||||
|
||||
|
||||
@@ -363,7 +363,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne
|
||||
|
||||
|
||||
/obj/machinery/gravity_generator/main/proc/pulse_radiation()
|
||||
radiation_pulse(get_turf(src), 3, 7, 20)
|
||||
radiation_pulse(get_turf(src), 200)
|
||||
|
||||
// Shake everyone on the z level to let them know that gravity was enagaged/disenagaged.
|
||||
/obj/machinery/gravity_generator/main/proc/shake_everyone()
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
..()
|
||||
add_avail(power_gen)
|
||||
if(panel_open && irradiate)
|
||||
radiation_pulse(get_turf(src), 2, 3, 6) // Weak but noticeable.
|
||||
radiation_pulse(get_turf(src), 60)
|
||||
|
||||
/obj/machinery/power/rtg/RefreshParts()
|
||||
var/part_level = 0
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
|
||||
GLOBAL_LIST_EMPTY(rad_collectors)
|
||||
// last_power += (pulse_strength-RAD_COLLECTOR_EFFICIENCY)*RAD_COLLECTOR_COEFFICIENT
|
||||
#define RAD_COLLECTOR_EFFICIENCY 80 // radiation needs to be over this amount to get power
|
||||
#define RAD_COLLECTOR_COEFFICIENT 100
|
||||
#define RAD_COLLECTOR_STORED_OUT 0.04 // (this*100)% of stored power outputted per tick. Doesn't actualy change output total, lower numbers just means collectors output for longer in absence of a source
|
||||
|
||||
/obj/machinery/power/rad_collector
|
||||
name = "Radiation Collector Array"
|
||||
@@ -21,12 +23,11 @@ GLOBAL_LIST_EMPTY(rad_collectors)
|
||||
/obj/machinery/power/rad_collector/anchored
|
||||
anchored = TRUE
|
||||
|
||||
/obj/machinery/power/rad_collector/Initialize()
|
||||
/obj/machinery/power/rad_collector/ComponentInitialize()
|
||||
. = ..()
|
||||
GLOB.rad_collectors += src
|
||||
AddComponent(/datum/component/rad_insulation, RAD_EXTREME_INSULATION, FALSE, FALSE)
|
||||
|
||||
/obj/machinery/power/rad_collector/Destroy()
|
||||
GLOB.rad_collectors -= src
|
||||
return ..()
|
||||
|
||||
/obj/machinery/power/rad_collector/process()
|
||||
@@ -37,8 +38,10 @@ GLOBAL_LIST_EMPTY(rad_collectors)
|
||||
else
|
||||
loaded_tank.air_contents.gases[/datum/gas/plasma][MOLES] -= 0.001*drainratio
|
||||
loaded_tank.air_contents.garbage_collect()
|
||||
return
|
||||
|
||||
var/power_produced = min(last_power, (last_power*RAD_COLLECTOR_STORED_OUT)+1000) //Produces at least 1000 watts if it has more than that stored
|
||||
add_avail(power_produced)
|
||||
last_power-=power_produced
|
||||
|
||||
/obj/machinery/power/rad_collector/attack_hand(mob/user)
|
||||
if(..())
|
||||
@@ -137,15 +140,9 @@ GLOBAL_LIST_EMPTY(rad_collectors)
|
||||
else
|
||||
update_icons()
|
||||
|
||||
/obj/machinery/power/rad_collector/proc/receive_pulse(pulse_strength)
|
||||
if(loaded_tank && active)
|
||||
var/power_produced = loaded_tank.air_contents.gases[/datum/gas/plasma] ? loaded_tank.air_contents.gases[/datum/gas/plasma][MOLES] : 0
|
||||
power_produced *= pulse_strength*10
|
||||
add_avail(power_produced)
|
||||
last_power = power_produced
|
||||
return
|
||||
return
|
||||
|
||||
/obj/machinery/power/rad_collector/rad_act(pulse_strength)
|
||||
if(loaded_tank && active && pulse_strength > RAD_COLLECTOR_EFFICIENCY)
|
||||
last_power += (pulse_strength-RAD_COLLECTOR_EFFICIENCY)*RAD_COLLECTOR_COEFFICIENT
|
||||
|
||||
/obj/machinery/power/rad_collector/proc/update_icons()
|
||||
cut_overlays()
|
||||
@@ -167,3 +164,7 @@ GLOBAL_LIST_EMPTY(rad_collectors)
|
||||
flick("ca_deactive", src)
|
||||
update_icons()
|
||||
return
|
||||
|
||||
#undef RAD_COLLECTOR_EFFICIENCY
|
||||
#undef RAD_COLLECTOR_COEFFICIENT
|
||||
#undef RAD_COLLECTOR_STORED_OUT
|
||||
@@ -114,7 +114,7 @@
|
||||
/obj/singularity/process()
|
||||
if(current_size >= STAGE_TWO)
|
||||
move()
|
||||
pulse()
|
||||
radiation_pulse(get_turf(src), energy, 0.5)
|
||||
if(prob(event_chance))//Chance for it to run a special event TODO:Come up with one or two more that fit
|
||||
event()
|
||||
eat()
|
||||
@@ -385,14 +385,10 @@
|
||||
|
||||
|
||||
/obj/singularity/proc/toxmob()
|
||||
var/toxrange = 10
|
||||
var/radiation = 15
|
||||
var/radiationmin = 3
|
||||
if (energy>200)
|
||||
radiation += round((energy-150)/10,1)
|
||||
radiationmin = round((radiation/5),1)
|
||||
for(var/mob/living/M in view(toxrange, src.loc))
|
||||
M.rad_act(rand(radiationmin,radiation))
|
||||
radiation_pulse(get_turf(src), radiation)
|
||||
|
||||
|
||||
/obj/singularity/proc/combust_mobs()
|
||||
@@ -428,12 +424,6 @@
|
||||
empulse(src, 8, 10)
|
||||
return
|
||||
|
||||
|
||||
/obj/singularity/proc/pulse()
|
||||
for(var/obj/machinery/power/rad_collector/R in GLOB.rad_collectors)
|
||||
if(R.z == z && get_dist(R, src) <= 15) // Better than using orange() every process
|
||||
R.receive_pulse(energy)
|
||||
|
||||
/obj/singularity/singularity_act()
|
||||
var/gain = (energy/2)
|
||||
var/dist = max((current_size - 2),1)
|
||||
|
||||
@@ -331,8 +331,8 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_shard)
|
||||
|
||||
power = max( (removed.temperature * temp_factor / T0C) * gasmix_power_ratio + power, 0) //Total laser power plus an overload
|
||||
|
||||
//We've generated power, now let's transfer it to the collectors for storing/usage
|
||||
transfer_energy()
|
||||
if(prob(50))
|
||||
radiation_pulse(get_turf(src), power * (1 + power_transmission_bonus/10 * freon_transmit_modifier))
|
||||
|
||||
var/device_energy = power * REACTION_POWER_MODIFIER
|
||||
|
||||
@@ -527,11 +527,6 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_shard)
|
||||
playsound(get_turf(src), 'sound/effects/supermatter.ogg', 50, 1)
|
||||
Consume(nom)
|
||||
|
||||
/obj/machinery/power/supermatter_shard/proc/transfer_energy()
|
||||
for(var/obj/machinery/power/rad_collector/R in GLOB.rad_collectors)
|
||||
if(R.z == z && get_dist(R, src) <= 15) //Better than using orange() every process
|
||||
R.receive_pulse(power * (1 + power_transmission_bonus)/10 * freon_transmit_modifier)
|
||||
|
||||
/obj/machinery/power/supermatter_shard/attackby(obj/item/W, mob/living/user, params)
|
||||
if(!istype(W) || (W.flags_1 & ABSTRACT_1) || !istype(user))
|
||||
return
|
||||
@@ -550,7 +545,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_shard)
|
||||
Consume(W)
|
||||
playsound(get_turf(src), 'sound/effects/supermatter.ogg', 50, 1)
|
||||
|
||||
radiation_pulse(get_turf(src), 1, 1, 150, 1)
|
||||
radiation_pulse(get_turf(src), 150, 4)
|
||||
|
||||
|
||||
/obj/machinery/power/supermatter_shard/CollidedWith(atom/movable/AM)
|
||||
@@ -584,7 +579,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_shard)
|
||||
matter_power += 200
|
||||
|
||||
//Some poor sod got eaten, go ahead and irradiate people nearby.
|
||||
radiation_pulse(get_turf(src), 4, 10, 500, 1)
|
||||
radiation_pulse(get_turf(src), 3000, 2, TRUE)
|
||||
for(var/mob/living/L in range(10))
|
||||
investigate_log("has irradiated [L] after consuming [AM].", INVESTIGATE_SUPERMATTER)
|
||||
if(L in view())
|
||||
|
||||
@@ -454,7 +454,7 @@
|
||||
|
||||
/datum/reagent/medicine/potass_iodide/on_mob_life(mob/living/M)
|
||||
if(M.radiation > 0)
|
||||
M.radiation--
|
||||
M.radiation-=2
|
||||
..()
|
||||
|
||||
/datum/reagent/medicine/pen_acid
|
||||
@@ -466,11 +466,8 @@
|
||||
metabolization_rate = 0.5 * REAGENTS_METABOLISM
|
||||
|
||||
/datum/reagent/medicine/pen_acid/on_mob_life(mob/living/M)
|
||||
if(M.radiation > 0)
|
||||
M.radiation -= 4
|
||||
M.radiation -= min(M.radiation, 8)
|
||||
M.adjustToxLoss(-2*REM, 0)
|
||||
if(M.radiation < 0)
|
||||
M.radiation = 0
|
||||
for(var/datum/reagent/R in M.reagents.reagent_list)
|
||||
if(R != src)
|
||||
M.reagents.remove_reagent(R.id,2)
|
||||
|
||||
@@ -15,6 +15,10 @@
|
||||
var/tomail = 0 //changes if contains wrapped package
|
||||
var/hasmob = 0 //If it contains a mob
|
||||
|
||||
/obj/structure/disposalholder/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/rad_insulation, RAD_NO_INSULATION)
|
||||
|
||||
/obj/structure/disposalholder/Destroy()
|
||||
qdel(gas)
|
||||
active = 0
|
||||
@@ -176,6 +180,9 @@
|
||||
if("pipe-j2s")
|
||||
stored.ptype = DISP_SORTJUNCTION_FLIP
|
||||
|
||||
/obj/structure/disposalpipe/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/rad_insulation, RAD_NO_INSULATION)
|
||||
|
||||
// pipe is deleted
|
||||
// ensure if holder is present, it is expelled
|
||||
@@ -639,6 +646,7 @@
|
||||
|
||||
/obj/structure/disposaloutlet/Initialize(mapload, obj/structure/disposalconstruct/make_from)
|
||||
. = ..()
|
||||
|
||||
if(make_from)
|
||||
setDir(make_from.dir)
|
||||
make_from.loc = src
|
||||
@@ -652,6 +660,10 @@
|
||||
if(trunk)
|
||||
trunk.linked = src // link the pipe trunk to self
|
||||
|
||||
/obj/structure/disposaloutlet/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/rad_insulation, RAD_NO_INSULATION)
|
||||
|
||||
/obj/structure/disposaloutlet/Destroy()
|
||||
if(trunk)
|
||||
trunk.linked = null
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
|
||||
/obj/machinery/disposal/Initialize(mapload, obj/structure/disposalconstruct/make_from)
|
||||
. = ..()
|
||||
|
||||
if(make_from)
|
||||
setDir(make_from.dir)
|
||||
make_from.loc = 0
|
||||
@@ -40,6 +41,12 @@
|
||||
//gas.volume = 1.05 * CELLSTANDARD
|
||||
update_icon()
|
||||
|
||||
return INITIALIZE_HINT_LATELOAD //we need turfs to have air
|
||||
|
||||
/obj/machinery/disposal/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/rad_insulation, RAD_NO_INSULATION)
|
||||
|
||||
/obj/machinery/disposal/proc/trunk_check()
|
||||
trunk = locate() in loc
|
||||
if(!trunk)
|
||||
@@ -62,10 +69,6 @@
|
||||
if(current_size >= STAGE_FIVE)
|
||||
deconstruct()
|
||||
|
||||
/obj/machinery/disposal/Initialize(mapload)
|
||||
..()
|
||||
return INITIALIZE_HINT_LATELOAD //we need turfs to have air
|
||||
|
||||
/obj/machinery/disposal/LateInitialize()
|
||||
//this will get a copy of the air turf and take a SEND PRESSURE amount of air from it
|
||||
var/atom/L = loc
|
||||
|
||||
@@ -255,7 +255,7 @@
|
||||
ejectItem()
|
||||
else if(prob(EFFECT_PROB_VERYLOW-badThingCoeff))
|
||||
visible_message("<span class='danger'>[src] malfunctions, melting [exp_on] and leaking radiation!</span>")
|
||||
radiation_pulse(get_turf(src), 1, 1, 25, 1)
|
||||
radiation_pulse(get_turf(src), 50)
|
||||
ejectItem(TRUE)
|
||||
else if(prob(EFFECT_PROB_LOW-badThingCoeff))
|
||||
visible_message("<span class='warning'>[src] malfunctions, spewing toxic waste!</span>")
|
||||
|
||||
@@ -1,4 +1,29 @@
|
||||
/////////// crashedship items
|
||||
// crashedship / packer ship
|
||||
|
||||
//Areas
|
||||
|
||||
/area/awaymission/BMPship
|
||||
name = "BMP Asteroids"
|
||||
icon_state = "away"
|
||||
|
||||
|
||||
/area/awaymission/BMPship/Aft
|
||||
name = "Aft Block"
|
||||
icon_state = "away1"
|
||||
requires_power = TRUE
|
||||
|
||||
/area/awaymission/BMPship/Midship
|
||||
name = "Midship Block"
|
||||
icon_state = "away2"
|
||||
requires_power = TRUE
|
||||
|
||||
/area/awaymission/BMPship/Fore
|
||||
name = "Fore Block"
|
||||
icon_state = "away3"
|
||||
requires_power = TRUE
|
||||
|
||||
|
||||
// crashedship items
|
||||
|
||||
/obj/item/paper/fluff/ruins/crashedship/scribbled
|
||||
name = "scribbled note"
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
/////////// listening station
|
||||
|
||||
/area/ruin/space/has_grav/powered/listeningstation
|
||||
name = "Listening Post"
|
||||
icon_state = "away"
|
||||
|
||||
/obj/item/paper/fluff/ruins/listeningstation/reports
|
||||
info = "Nothing of interest to report."
|
||||
|
||||
|
||||
@@ -192,7 +192,7 @@
|
||||
|
||||
var/last_dock_time
|
||||
|
||||
/obj/docking_port/stationary/Initialize()
|
||||
/obj/docking_port/stationary/Initialize(mapload)
|
||||
. = ..()
|
||||
SSshuttle.stationary += src
|
||||
if(!id)
|
||||
@@ -201,6 +201,10 @@
|
||||
name = "dock[SSshuttle.stationary.len]"
|
||||
baseturf_cache = typecacheof(baseturf_type)
|
||||
|
||||
if(mapload)
|
||||
for(var/turf/T in return_turfs())
|
||||
T.flags_1 |= NO_RUINS_1
|
||||
|
||||
#ifdef DOCKING_PORT_HIGHLIGHT
|
||||
highlight("#f00")
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user