diff --git a/code/datums/mapgen/Cavegens/LavalandGenerator.dm b/code/datums/mapgen/Cavegens/LavalandGenerator.dm index b895ad4414..3ce3821708 100644 --- a/code/datums/mapgen/Cavegens/LavalandGenerator.dm +++ b/code/datums/mapgen/Cavegens/LavalandGenerator.dm @@ -7,7 +7,7 @@ /mob/living/simple_animal/hostile/asteroid/basilisk/watcher/random = 40, /obj/structure/spawner/lavaland = 2, \ /mob/living/simple_animal/hostile/asteroid/hivelord/legion/random = 30, /obj/structure/spawner/lavaland/legion = 3, \ SPAWN_MEGAFAUNA = 4, /mob/living/simple_animal/hostile/asteroid/goldgrub = 10) - flora_spawn_list = list(/obj/structure/flora/ash/leaf_shroom = 2 , /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) + flora_spawn_list = list(/obj/structure/flora/ash/leaf_shroom = 2 , /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/ashtree = 1) feature_spawn_list = list(/obj/structure/geyser/random = 1) initial_closed_chance = 45 diff --git a/code/game/objects/effects/decals/cleanable/gibs.dm b/code/game/objects/effects/decals/cleanable/gibs.dm index 09fbdb6528..2762416949 100644 --- a/code/game/objects/effects/decals/cleanable/gibs.dm +++ b/code/game/objects/effects/decals/cleanable/gibs.dm @@ -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() diff --git a/code/game/objects/effects/spawners/gibspawner.dm b/code/game/objects/effects/spawners/gibspawner.dm index 231c1465cd..00ddf0e9ef 100644 --- a/code/game/objects/effects/spawners/gibspawner.dm +++ b/code/game/objects/effects/spawners/gibspawner.dm @@ -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 diff --git a/code/modules/arousal/genitals.dm b/code/modules/arousal/genitals.dm index b7e90e5b84..60a858386c 100644 --- a/code/modules/arousal/genitals.dm +++ b/code/modules/arousal/genitals.dm @@ -168,9 +168,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() diff --git a/code/modules/atmospherics/auxgm/gas_types.dm b/code/modules/atmospherics/auxgm/gas_types.dm index 8c9b1495c6..aaf3945aac 100644 --- a/code/modules/atmospherics/auxgm/gas_types.dm +++ b/code/modules/atmospherics/auxgm/gas_types.dm @@ -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 diff --git a/code/modules/events/atmos_speed.dm b/code/modules/events/atmos_speed.dm new file mode 100644 index 0000000000..9b248e2775 --- /dev/null +++ b/code/modules/events/atmos_speed.dm @@ -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 diff --git a/code/modules/hydroponics/grown/replicapod.dm b/code/modules/hydroponics/grown/replicapod.dm index 328b4c391c..053daaf3af 100644 --- a/code/modules/hydroponics/grown/replicapod.dm +++ b/code/modules/hydroponics/grown/replicapod.dm @@ -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("The [src] is injected with a fresh blood sample.") - else - visible_message("The [src] rejects the sample!") - - 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("The [src] is injected with a fresh blood sample.") + else + visible_message("The [src] rejects the sample!") /obj/item/seeds/replicapod/get_analyzer_text() var/text = ..() diff --git a/code/modules/mining/lavaland/ash_tree.dm b/code/modules/mining/lavaland/ash_tree.dm new file mode 100644 index 0000000000..5dca7a8e2f --- /dev/null +++ b/code/modules/mining/lavaland/ash_tree.dm @@ -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("[user] pokes [src] and places a container under the [W].","You set up [src] with [W].") + 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, "There is no sap to collect.") + + 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("[user] begins to cut down [src] with [W].","You begin to cut down [src] with [W].", "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("[user] fells [src] with the [W].","You fell [src] with the [W].", "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 ..() + diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index 7615792028..2a05639ad9 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -156,7 +156,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 @@ -177,54 +177,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() diff --git a/html/changelog.html b/html/changelog.html index 9098c074a2..a04e263cd2 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -309,46 +309,6 @@ - -

20 November 2021

-

SandPoot updated:

- - -

19 November 2021

-

shellspeed1 updated:

- - -

18 November 2021

-

DeltaFire15 updated:

- -

Putnam3145 updated:

- -

SandPoot updated:

- -

keronshb updated:

- GoonStation 13 Development Team diff --git a/html/changelogs/AutoChangeLog-pr-15324.yml b/html/changelogs/AutoChangeLog-pr-15324.yml new file mode 100644 index 0000000000..001a69ac55 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15324.yml @@ -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!" diff --git a/html/changelogs/AutoChangeLog-pr-15419.yml b/html/changelogs/AutoChangeLog-pr-15419.yml new file mode 100644 index 0000000000..a3e88c9aa4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15419.yml @@ -0,0 +1,4 @@ +author: "Putnam3145" +delete-after: True +changes: + - rscadd: "Atmospheric Flux event" diff --git a/html/changelogs/AutoChangeLog-pr-15449.yml b/html/changelogs/AutoChangeLog-pr-15449.yml new file mode 100644 index 0000000000..d8c18dea1a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15449.yml @@ -0,0 +1,4 @@ +author: "Putnam3145" +delete-after: True +changes: + - balance: "A lot more fluids can be used for replica pods" diff --git a/icons/obj/lavaland/ash_tree.dmi b/icons/obj/lavaland/ash_tree.dmi new file mode 100644 index 0000000000..7a8addafe5 Binary files /dev/null and b/icons/obj/lavaland/ash_tree.dmi differ diff --git a/tgstation.dme b/tgstation.dme index c32573670b..1bfe4f7561 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -2522,6 +2522,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" diff --git a/tools/requirements.txt b/tools/requirements.txt index c4f554212c..a9abe5e826 100644 --- a/tools/requirements.txt +++ b/tools/requirements.txt @@ -1,6 +1,6 @@ pygit2==1.0.1 bidict==0.13.1 -Pillow==9.0.0 +Pillow==8.3.2 # changelogs PyYaml==5.4