mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2025-12-09 16:07:40 +00:00
Merge remote-tracking branch 'upstream/master'
This commit is contained in:
@@ -14,7 +14,8 @@
|
||||
/obj/structure/flora/ash/cap_shroom = 2 , \
|
||||
/obj/structure/flora/ash/stem_shroom = 2 , \
|
||||
/obj/structure/flora/ash/cacti = 1, \
|
||||
/obj/structure/flora/ash/tall_shroom = 2,\
|
||||
/obj/structure/flora/ash/tall_shroom = 2, \
|
||||
/obj/structure/flora/ashtree = 1, \
|
||||
/obj/structure/flora/tree/shadow = 3, \
|
||||
/obj/structure/flora/tree/mushroom = 3, \
|
||||
/obj/structure/flora/grass/red = 3 \
|
||||
|
||||
@@ -11,12 +11,12 @@
|
||||
var/gibs_reagent_id = /datum/reagent/liquidgibs
|
||||
var/gibs_bloodtype = "A+"
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/Initialize(mapload, list/datum/disease/diseases)
|
||||
/obj/effect/decal/cleanable/blood/gibs/Initialize(mapload, list/datum/disease/diseases, list/blood_data)
|
||||
. = ..()
|
||||
if(random_icon_states && (icon_state == initial(icon_state)) && length(random_icon_states) > 0)
|
||||
icon_state = pick(random_icon_states)
|
||||
if(gibs_reagent_id)
|
||||
reagents.add_reagent(gibs_reagent_id, 5)
|
||||
reagents.add_reagent(gibs_reagent_id, 5, blood_data)
|
||||
if(gibs_bloodtype)
|
||||
add_blood_DNA(list("Non-human DNA" = gibs_bloodtype), diseases)
|
||||
update_icon()
|
||||
|
||||
@@ -31,7 +31,10 @@
|
||||
|
||||
var/list/dna_to_add //find the dna to pass to the spawned gibs. do note this can be null if the mob doesn't have blood. add_blood_DNA() has built in null handling.
|
||||
var/body_coloring = ""
|
||||
|
||||
var/list/blood_data_to_add
|
||||
if(source_mob)
|
||||
blood_data_to_add = source_mob.get_blood_data()
|
||||
if(!issilicon(source_mob))
|
||||
dna_to_add = blood_dna || source_mob.get_blood_dna_list() //ez pz
|
||||
if(ishuman(source_mob))
|
||||
@@ -65,7 +68,7 @@
|
||||
if(gibamounts[i])
|
||||
for(var/j = 1, j<= gibamounts[i], j++)
|
||||
var/gibType = gibtypes[i]
|
||||
gib = new gibType(loc, diseases)
|
||||
gib = new gibType(loc, diseases, blood_data_to_add)
|
||||
if(iscarbon(loc))
|
||||
var/mob/living/carbon/digester = loc
|
||||
digester.stomach_contents += gib
|
||||
|
||||
@@ -186,9 +186,9 @@
|
||||
R.clear_reagents()
|
||||
R.maximum_volume = fluid_max_volume
|
||||
if(fluid_id)
|
||||
R.add_reagent(fluid_id,amount)
|
||||
R.add_reagent(fluid_id,amount, owner.get_blood_data())
|
||||
else if(linked_organ?.fluid_id)
|
||||
R.add_reagent(linked_organ.fluid_id,amount)
|
||||
R.add_reagent(linked_organ.fluid_id,amount, owner.get_blood_data())
|
||||
return TRUE
|
||||
|
||||
/obj/item/organ/genital/proc/update_link()
|
||||
|
||||
@@ -113,7 +113,7 @@
|
||||
powermix = 1
|
||||
heat_penalty = 3
|
||||
transmit_modifier = 10
|
||||
fire_products = list(GAS_H2O = 2)
|
||||
fire_products = list(GAS_H2O = 1)
|
||||
fire_burn_rate = 2
|
||||
fire_temperature = FIRE_MINIMUM_TEMPERATURE_TO_EXIST - 50
|
||||
|
||||
@@ -128,7 +128,8 @@
|
||||
powermix = 1
|
||||
heat_penalty = 10
|
||||
transmit_modifier = 30
|
||||
fire_products = list(GAS_H2O = 2)
|
||||
fire_products = list(GAS_H2O = 1)
|
||||
enthalpy = 40000
|
||||
fire_burn_rate = 2
|
||||
fire_radiation_released = 50 // arbitrary number, basically 60 moles of trit burning will just barely start to harm you
|
||||
fire_temperature = FIRE_MINIMUM_TEMPERATURE_TO_EXIST - 50
|
||||
|
||||
23
code/modules/events/atmos_speed.dm
Normal file
23
code/modules/events/atmos_speed.dm
Normal file
@@ -0,0 +1,23 @@
|
||||
/datum/round_event_control/atmos_flux
|
||||
name = "Atmospheric Flux"
|
||||
typepath = /datum/round_event/atmos_flux
|
||||
max_occurrences = 1
|
||||
weight = 5
|
||||
endWhen = 600
|
||||
var/original_speed
|
||||
|
||||
/datum/round_event/atmos_flux
|
||||
announceWhen = 1
|
||||
|
||||
/datum/round_event/atmos_flux/announce(fake)
|
||||
priority_announce("Atmospheric flux in your sector detected. Sensors show that air may move [(SSair.share_max_steps_target > original_speed) ? "faster" : "slower"] than usual for some time.", "Atmos Alert")
|
||||
|
||||
/datum/round_event/atmos_flux/start()
|
||||
original_speed = SSair.share_max_steps_target
|
||||
if(prob(20))
|
||||
SSair.share_max_steps_target = max(1, original_speed - rand(1,original_speed-1))
|
||||
else
|
||||
SSair.share_max_steps_target += rand(2,10)
|
||||
|
||||
/datum/round_event/atmos_flux/end()
|
||||
SSair.share_max_steps_target = original_speed
|
||||
@@ -53,31 +53,21 @@
|
||||
|
||||
/obj/item/seeds/replicapod/on_reagent_change(changetype)
|
||||
if(changetype == ADD_REAGENT)
|
||||
var/datum/reagent/blood/B = reagents.has_reagent(/datum/reagent/blood)
|
||||
if(B)
|
||||
if(B.data["mind"] && B.data["cloneable"])
|
||||
mind = B.data["mind"]
|
||||
ckey = B.data["ckey"]
|
||||
realName = B.data["real_name"]
|
||||
blood_gender = B.data["gender"]
|
||||
blood_type = B.data["blood_type"]
|
||||
features = B.data["features"]
|
||||
factions = B.data["factions"]
|
||||
quirks = B.data["quirks"]
|
||||
contains_sample = TRUE
|
||||
visible_message("<span class='notice'>The [src] is injected with a fresh blood sample.</span>")
|
||||
else
|
||||
visible_message("<span class='warning'>The [src] rejects the sample!</span>")
|
||||
|
||||
if(!reagents.has_reagent(/datum/reagent/blood))
|
||||
mind = null
|
||||
ckey = null
|
||||
realName = null
|
||||
blood_gender = null
|
||||
blood_type = null
|
||||
features = null
|
||||
factions = null
|
||||
contains_sample = FALSE
|
||||
for(var/datum/reagent/R as anything in reagents.reagent_list)
|
||||
if(R.data["mind"])
|
||||
if(R.data["cloneable"])
|
||||
mind = R.data["mind"]
|
||||
ckey = R.data["ckey"]
|
||||
realName = R.data["real_name"]
|
||||
blood_gender = R.data["gender"]
|
||||
blood_type = R.data["blood_type"]
|
||||
features = R.data["features"]
|
||||
factions = R.data["factions"]
|
||||
quirks = R.data["quirks"]
|
||||
contains_sample = TRUE
|
||||
visible_message("<span class='notice'>The [src] is injected with a fresh blood sample.</span>")
|
||||
else
|
||||
visible_message("<span class='warning'>The [src] rejects the sample!</span>")
|
||||
|
||||
/obj/item/seeds/replicapod/get_analyzer_text()
|
||||
var/text = ..()
|
||||
|
||||
96
code/modules/mining/lavaland/ash_tree.dm
Normal file
96
code/modules/mining/lavaland/ash_tree.dm
Normal file
@@ -0,0 +1,96 @@
|
||||
//Houses the ash tree, a lava land tree that has been burning for quite some time making a maple like sweetener.
|
||||
|
||||
/obj/structure/flora/ashtree
|
||||
name = "ashed tree"
|
||||
desc = "A once large tree now burnt like the lands around it."
|
||||
layer = FLY_LAYER
|
||||
gender = PLURAL //same as other tree
|
||||
density = TRUE
|
||||
pixel_x = -16
|
||||
icon = 'icons/obj/lavaland/ash_tree.dmi'
|
||||
icon_state = "ashtree"
|
||||
//Are icon when we are full of honey or other sap
|
||||
var/sap_icon_state = "ashtree_maple"
|
||||
//What we look like when tapping
|
||||
var/tabbed_icon_state = "ashtree_maple"
|
||||
//amout of coal in are tree, simular to logs
|
||||
var/coal_amount = 5
|
||||
//Do we have sap?
|
||||
var/sap = FALSE
|
||||
//What reagent we have
|
||||
var/sap_type = /datum/reagent/consumable/honey
|
||||
//This is in seconds, and now long we wait till are tree is tapped
|
||||
var/harvest_sap_time = 60
|
||||
var/container_used
|
||||
var/sap_amount
|
||||
|
||||
/obj/structure/flora/ashtree/Initialize(mapload)
|
||||
..()
|
||||
if(prob(50))
|
||||
sap = TRUE
|
||||
icon_state = sap_icon_state
|
||||
desc = "A once large tree now burnt like the lands around it. This one seems to have a sap still inside."
|
||||
//If we have sap, we can generate a bit of it
|
||||
sap_amount = rand(5,15)
|
||||
//Random coal or wood amount, so its not bog standered.
|
||||
coal_amount = rand(5,15)
|
||||
//If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
SSblackbox.record_feedback("tally", "Honey Tree", 1, "Trees Spawned")
|
||||
|
||||
//So we dont lose are bowls, stolen form closet code
|
||||
/obj/structure/flora/ashtree/Destroy()
|
||||
dump_contents(override = FALSE)
|
||||
return ..()
|
||||
|
||||
//Override is for not revealing the locker electronics when you open the locker, for example
|
||||
/obj/structure/flora/ashtree/proc/dump_contents(override = TRUE)
|
||||
var/atom/L = drop_location()
|
||||
for(var/atom/movable/AM in src)
|
||||
AM.forceMove(L)
|
||||
|
||||
/obj/structure/flora/ashtree/proc/harvest_sap()
|
||||
desc = "A once large tree now burnt like the lands around it."
|
||||
icon_state = "ashtree"
|
||||
var/obj/item/reagent_containers/RG = container_used
|
||||
//Incase someone was a dumb and used a lidded container
|
||||
if(RG.is_refillable())
|
||||
//Make sure that its not filling something thats full
|
||||
if(!RG.reagents.holder_full())
|
||||
RG.reagents.add_reagent(sap_type, min(RG.volume - RG.reagents.total_volume, sap_amount))
|
||||
//We drop are used beaker and try to fill it with sap
|
||||
RG.forceMove(drop_location())
|
||||
SSblackbox.record_feedback("tally", "Honey Tree", 1, "Harvested Honey") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
//Proc stolen from Trees
|
||||
//If you hit it with a sharp force aboe 0 item it chops it down, unlike trees tho it dosnt give wood as its already charcoal
|
||||
//Also dosnt have a stump
|
||||
/obj/structure/flora/ashtree/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/reagent_containers))
|
||||
if(sap)
|
||||
user.visible_message("<span class='notice'>[user] pokes [src] and places a container under the [W].</span>","<span class='notice'>You set up [src] with [W].</span>")
|
||||
icon_state = tabbed_icon_state
|
||||
sap = FALSE
|
||||
container_used = W
|
||||
//So we dont lose are bowl when cutting it down + needed for the harvest sap proc
|
||||
user.transferItemToLoc(W, src)
|
||||
addtimer(CALLBACK(src, .proc/harvest_sap), harvest_sap_time SECONDS)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>There is no sap to collect.</span>")
|
||||
|
||||
if(coal_amount && (!(flags_1 & NODECONSTRUCT_1)))
|
||||
if(!W.sharpness || !W.force)
|
||||
return
|
||||
if(W.hitsound)
|
||||
playsound(get_turf(src), W.hitsound, 100, 0, 0)
|
||||
user.visible_message("<span class='notice'>[user] begins to cut down [src] with [W].</span>","<span class='notice'>You begin to cut down [src] with [W].</span>", "You hear the sound of brittle sawing.")
|
||||
//2.5 seconds with 20 force, 4 seconds with a hatchet, 10 seconds with a shard.
|
||||
if(do_after(user, 500/W.force, target = src))
|
||||
user.visible_message("<span class='notice'>[user] fells [src] with the [W].</span>","<span class='notice'>You fell [src] with the [W].</span>", "You hear the sound of a crumbling tree.")
|
||||
playsound(get_turf(src), 'sound/effects/meteorimpact.ogg', 100 , 0, 0)
|
||||
for(var/i=1 to coal_amount)
|
||||
new /obj/item/stack/sheet/mineral/coal(get_turf(src))
|
||||
qdel(src)//If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
SSblackbox.record_feedback("tally", "Honey Tree", 1, "Cutted Tree")
|
||||
|
||||
return ..()
|
||||
|
||||
@@ -171,7 +171,7 @@
|
||||
|
||||
blood_volume -= amount
|
||||
|
||||
var/list/blood_data = get_blood_data(blood_id)
|
||||
var/list/blood_data = get_blood_data()
|
||||
|
||||
if(iscarbon(AM))
|
||||
var/mob/living/carbon/C = AM
|
||||
@@ -192,54 +192,53 @@
|
||||
return TRUE
|
||||
|
||||
|
||||
/mob/living/proc/get_blood_data(blood_id)
|
||||
/mob/living/proc/get_blood_data()
|
||||
return
|
||||
|
||||
/mob/living/carbon/get_blood_data(blood_id)
|
||||
if(blood_id == /datum/reagent/blood || /datum/reagent/blood/jellyblood) //actual blood reagent
|
||||
var/blood_data = list()
|
||||
//set the blood data
|
||||
blood_data["donor"] = src
|
||||
blood_data["viruses"] = list()
|
||||
/mob/living/carbon/get_blood_data()
|
||||
var/blood_data = list()
|
||||
//set the blood data
|
||||
blood_data["donor"] = src
|
||||
blood_data["viruses"] = list()
|
||||
|
||||
for(var/thing in diseases)
|
||||
var/datum/disease/D = thing
|
||||
blood_data["viruses"] += D.Copy()
|
||||
for(var/thing in diseases)
|
||||
var/datum/disease/D = thing
|
||||
blood_data["viruses"] += D.Copy()
|
||||
|
||||
blood_data["blood_DNA"] = dna.unique_enzymes
|
||||
blood_data["bloodcolor"] = dna.species.exotic_blood_color
|
||||
if(disease_resistances && disease_resistances.len)
|
||||
blood_data["resistances"] = disease_resistances.Copy()
|
||||
var/list/temp_chem = list()
|
||||
for(var/datum/reagent/R in reagents.reagent_list)
|
||||
temp_chem[R.type] = R.volume
|
||||
blood_data["trace_chem"] = list2params(temp_chem)
|
||||
if(mind)
|
||||
blood_data["mind"] = mind
|
||||
else if(last_mind)
|
||||
blood_data["mind"] = last_mind
|
||||
if(ckey)
|
||||
blood_data["ckey"] = ckey
|
||||
else if(last_mind)
|
||||
blood_data["ckey"] = ckey(last_mind.key)
|
||||
blood_data["blood_DNA"] = dna.unique_enzymes
|
||||
blood_data["bloodcolor"] = dna.species.exotic_blood_color
|
||||
if(disease_resistances && disease_resistances.len)
|
||||
blood_data["resistances"] = disease_resistances.Copy()
|
||||
var/list/temp_chem = list()
|
||||
for(var/datum/reagent/R in reagents.reagent_list)
|
||||
temp_chem[R.type] = R.volume
|
||||
blood_data["trace_chem"] = list2params(temp_chem)
|
||||
if(mind)
|
||||
blood_data["mind"] = mind
|
||||
else if(last_mind)
|
||||
blood_data["mind"] = last_mind
|
||||
if(ckey)
|
||||
blood_data["ckey"] = ckey
|
||||
else if(last_mind)
|
||||
blood_data["ckey"] = ckey(last_mind.key)
|
||||
|
||||
if(!suiciding)
|
||||
blood_data["cloneable"] = 1
|
||||
blood_data["blood_type"] = dna.blood_type
|
||||
blood_data["gender"] = gender
|
||||
blood_data["real_name"] = real_name
|
||||
blood_data["features"] = dna.features
|
||||
blood_data["factions"] = faction
|
||||
blood_data["quirks"] = list()
|
||||
for(var/V in roundstart_quirks)
|
||||
var/datum/quirk/T = V
|
||||
blood_data["quirks"] += T.type
|
||||
blood_data["changeling_loudness"] = 0
|
||||
if(mind)
|
||||
var/datum/antagonist/changeling/ling = mind.has_antag_datum(/datum/antagonist/changeling)
|
||||
if(istype(ling))
|
||||
blood_data["changeling_loudness"] = ling.loudfactor
|
||||
return blood_data
|
||||
if(!suiciding)
|
||||
blood_data["cloneable"] = 1
|
||||
blood_data["blood_type"] = dna.blood_type
|
||||
blood_data["gender"] = gender
|
||||
blood_data["real_name"] = real_name
|
||||
blood_data["features"] = dna.features
|
||||
blood_data["factions"] = faction
|
||||
blood_data["quirks"] = list()
|
||||
for(var/V in roundstart_quirks)
|
||||
var/datum/quirk/T = V
|
||||
blood_data["quirks"] += T.type
|
||||
blood_data["changeling_loudness"] = 0
|
||||
if(mind)
|
||||
var/datum/antagonist/changeling/ling = mind.has_antag_datum(/datum/antagonist/changeling)
|
||||
if(istype(ling))
|
||||
blood_data["changeling_loudness"] = ling.loudfactor
|
||||
return blood_data
|
||||
|
||||
//get the id of the substance this mob use as blood.
|
||||
/mob/proc/get_blood_id()
|
||||
|
||||
4
html/changelogs/AutoChangeLog-pr-15324.yml
Normal file
4
html/changelogs/AutoChangeLog-pr-15324.yml
Normal file
@@ -0,0 +1,4 @@
|
||||
author: "Trilbyspaceclone"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "New type of flora to lava land, an Ash Tree, can be harvested for coal or if lucky used to gather honey. Just use a container!"
|
||||
4
html/changelogs/AutoChangeLog-pr-15419.yml
Normal file
4
html/changelogs/AutoChangeLog-pr-15419.yml
Normal file
@@ -0,0 +1,4 @@
|
||||
author: "Putnam3145"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Atmospheric Flux event"
|
||||
4
html/changelogs/AutoChangeLog-pr-15449.yml
Normal file
4
html/changelogs/AutoChangeLog-pr-15449.yml
Normal file
@@ -0,0 +1,4 @@
|
||||
author: "Putnam3145"
|
||||
delete-after: True
|
||||
changes:
|
||||
- balance: "A lot more fluids can be used for replica pods"
|
||||
BIN
icons/obj/lavaland/ash_tree.dmi
Normal file
BIN
icons/obj/lavaland/ash_tree.dmi
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.6 KiB |
@@ -2535,6 +2535,7 @@
|
||||
#include "code\modules\mining\laborcamp\laborshuttle.dm"
|
||||
#include "code\modules\mining\laborcamp\laborstacker.dm"
|
||||
#include "code\modules\mining\lavaland\ash_flora.dm"
|
||||
#include "code\modules\mining\lavaland\ash_tree.dm"
|
||||
#include "code\modules\mining\lavaland\necropolis_chests.dm"
|
||||
#include "code\modules\mining\lavaland\ruins\gym.dm"
|
||||
#include "code\modules\mob\clickdelay.dm"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
pygit2==1.0.1
|
||||
bidict==0.13.1
|
||||
Pillow==8.4.0
|
||||
Pillow==8.3.2
|
||||
|
||||
# changelogs
|
||||
PyYaml==5.4
|
||||
|
||||
Reference in New Issue
Block a user