diff --git a/code/datums/components/food/decomposition.dm b/code/datums/components/food/decomposition.dm index 07894835a03..2810566ee4c 100644 --- a/code/datums/components/food/decomposition.dm +++ b/code/datums/components/food/decomposition.dm @@ -21,9 +21,9 @@ /// Use for determining what kind of item the food decomposes into. var/decomp_result /// Does our food attract ants? - var/produce_ants = TRUE + var/produce_ants = FALSE -/datum/component/decomposition/Initialize(mapload, decomp_req_handle, decomp_flags = NONE, decomp_result, ant_attracting = TRUE, custom_time = 0) +/datum/component/decomposition/Initialize(mapload, decomp_req_handle, decomp_flags = NONE, decomp_result, ant_attracting = FALSE, custom_time = 0) if(!isobj(parent)) return COMPONENT_INCOMPATIBLE @@ -31,8 +31,7 @@ src.decomp_result = decomp_result if(mapload || decomp_req_handle) handled = FALSE - if(!ant_attracting) - produce_ants = FALSE + src.produce_ants = ant_attracting RegisterSignal(parent, COMSIG_MOVABLE_MOVED, .proc/handle_movement) RegisterSignal(parent, list( @@ -74,7 +73,7 @@ var/turf/open/open_turf = food.loc - if(!istype(open_turf) || istype(open_turf, /turf/open/lava)) //Are we actually in a valid open turf? + if(!istype(open_turf) || istype(open_turf, /turf/open/lava) || istype(open_turf, /turf/open/floor/plating/asteroid/basalt)) //Are we actually in a valid open turf? remove_timer() return @@ -111,8 +110,9 @@ var/obj/decomp = parent //Lets us spawn things at decomp if(produce_ants) new /obj/effect/decal/cleanable/ants(decomp.loc) - new decomp_result(decomp.loc) - decomp.visible_message("[decomp] gets overtaken by mold and ants! Gross!") + if(decomp_result) + new decomp_result(decomp.loc) + decomp.visible_message("[decomp] gets overtaken by mold[produce_ants ? " and ants":""]! Gross!") qdel(decomp) return diff --git a/code/game/objects/effects/decals/cleanable.dm b/code/game/objects/effects/decals/cleanable.dm index d3438718af4..e4dacb783d2 100644 --- a/code/game/objects/effects/decals/cleanable.dm +++ b/code/game/objects/effects/decals/cleanable.dm @@ -2,22 +2,32 @@ gender = PLURAL layer = ABOVE_NORMAL_TURF_LAYER var/list/random_icon_states = null - var/blood_state = "" //I'm sorry but cleanable/blood code is ass, and so is blood_DNA - var/bloodiness = 0 //0-100, amount of blood in this decal, used for making footprints and affecting the alpha of bloody footprints - var/mergeable_decal = TRUE //when two of these are on a same tile or do we need to merge them into just one? + ///I'm sorry but cleanable/blood code is ass, and so is blood_DNA + var/blood_state = "" + ///0-100, amount of blood in this decal, used for making footprints and affecting the alpha of bloody footprints + var/bloodiness = 0 + ///When two of these are on a same tile or do we need to merge them into just one? + var/mergeable_decal = TRUE var/beauty = 0 ///The type of cleaning required to clean the decal. See __DEFINES/cleaning.dm for the options var/clean_type = CLEAN_TYPE_LIGHT_DECAL + ///The reagent this decal holds. Leave blank for none. + var/datum/reagent/decal_reagent + ///The amount of reagent this decal holds, if decal_reagent is defined + var/reagent_amount = 0 /obj/effect/decal/cleanable/Initialize(mapload, list/datum/disease/diseases) . = ..() if (random_icon_states && (icon_state == initial(icon_state)) && length(random_icon_states) > 0) icon_state = pick(random_icon_states) create_reagents(300) + if(decal_reagent) + reagents.add_reagent(decal_reagent, reagent_amount) if(loc && isturf(loc)) for(var/obj/effect/decal/cleanable/C in loc) if(C != src && C.type == type && !QDELETED(C)) if (replace_decal(C)) + handle_merge_decal(C) return INITIALIZE_HINT_QDEL if(LAZYLEN(diseases)) @@ -99,3 +109,9 @@ return bloodiness else return 0 + +/obj/effect/decal/cleanable/proc/handle_merge_decal(obj/effect/decal/cleanable/merger) + if(!merger) + return + if(merger.reagents && reagents) + reagents.trans_to(merger, reagents.total_volume) diff --git a/code/game/objects/effects/decals/cleanable/humans.dm b/code/game/objects/effects/decals/cleanable/humans.dm index bccf9628277..2cbd1d0117a 100644 --- a/code/game/objects/effects/decals/cleanable/humans.dm +++ b/code/game/objects/effects/decals/cleanable/humans.dm @@ -106,12 +106,13 @@ dryname = "rotting gibs" drydesc = "They look bloody and gruesome while some terrible smell fills the air." + decal_reagent = /datum/reagent/liquidgibs + reagent_amount = 5 ///Information about the diseases our streaking spawns var/list/streak_diseases /obj/effect/decal/cleanable/blood/gibs/Initialize(mapload, list/datum/disease/diseases) . = ..() - reagents.add_reagent(/datum/reagent/liquidgibs, 5) RegisterSignal(src, COMSIG_MOVABLE_PIPE_EJECTING, .proc/on_pipe_eject) /obj/effect/decal/cleanable/blood/gibs/replace_decal(obj/effect/decal/cleanable/C) diff --git a/code/game/objects/effects/decals/cleanable/misc.dm b/code/game/objects/effects/decals/cleanable/misc.dm index 18522e575da..1f4b8539cb5 100644 --- a/code/game/objects/effects/decals/cleanable/misc.dm +++ b/code/game/objects/effects/decals/cleanable/misc.dm @@ -12,10 +12,11 @@ icon_state = "ash" mergeable_decal = FALSE beauty = -50 + decal_reagent = /datum/reagent/ash + reagent_amount = 30 /obj/effect/decal/cleanable/ash/Initialize(mapload) . = ..() - reagents.add_reagent(/datum/reagent/ash, 30) pixel_x = base_pixel_x + rand(-5, 5) pixel_y = base_pixel_y + rand(-5, 5) @@ -27,10 +28,8 @@ name = "large pile of ashes" icon_state = "big_ash" beauty = -100 - -/obj/effect/decal/cleanable/ash/large/Initialize(mapload) - . = ..() - reagents.add_reagent(/datum/reagent/ash, 30) //double the amount of ash. + decal_reagent = /datum/reagent/ash + reagent_amount = 60 /obj/effect/decal/cleanable/glass name = "tiny shards" @@ -91,9 +90,13 @@ /obj/effect/decal/cleanable/greenglow/ex_act() return FALSE +/obj/effect/decal/cleanable/greenglow/filled + decal_reagent = /datum/reagent/uranium + reagent_amount = 5 + /obj/effect/decal/cleanable/greenglow/filled/Initialize(mapload) + decal_reagent = pick(/datum/reagent/uranium, /datum/reagent/uranium/radium) . = ..() - reagents.add_reagent(pick(/datum/reagent/uranium, /datum/reagent/uranium/radium), 5) /obj/effect/decal/cleanable/greenglow/ecto name = "ectoplasmic puddle" @@ -268,22 +271,23 @@ beauty = -150 plane = GAME_PLANE layer = LOW_OBJ_LAYER - /// The damage the ants will do when you step on them - var/ant_bite_damage = 0.1 - /// The amount of ant reagent inside the ant cluster - var/ant_volume + decal_reagent = /datum/reagent/ants + reagent_amount = 5 /// Sound the ants make when biting var/bite_sound = 'sound/weapons/bite.ogg' /obj/effect/decal/cleanable/ants/Initialize(mapload) + reagent_amount = rand(3, 5) . = ..() - ant_volume = rand(3, 5) - reagents.add_reagent(/datum/reagent/ants, ant_volume) update_ant_damage() -/obj/effect/decal/cleanable/ants/proc/update_ant_damage(spilled_ants) - ant_volume += spilled_ants - ant_bite_damage = min(10, round((ant_volume * 0.1),0.1)) // 100u ants = 10 max_damage +/obj/effect/decal/cleanable/ants/handle_merge_decal(obj/effect/decal/cleanable/merger) + . = ..() + var/obj/effect/decal/cleanable/ants/ants = merger + ants.update_ant_damage() + +/obj/effect/decal/cleanable/ants/proc/update_ant_damage() + var/ant_bite_damage = min(10, round((reagents.get_reagent_amount(/datum/reagent/ants) * 0.1),0.1)) // 100u ants = 10 max_damage var/ant_flags = (CALTROP_NOCRAWL | CALTROP_NOSTUN) /// Small amounts of ants won't be able to bite through shoes. if(ant_bite_damage > 1) diff --git a/code/game/objects/effects/decals/cleanable/robots.dm b/code/game/objects/effects/decals/cleanable/robots.dm index 42d39ded0b9..b7fe891900b 100644 --- a/code/game/objects/effects/decals/cleanable/robots.dm +++ b/code/game/objects/effects/decals/cleanable/robots.dm @@ -79,10 +79,8 @@ bloodiness = BLOOD_AMOUNT_PER_DECAL beauty = -100 clean_type = CLEAN_TYPE_BLOOD - -/obj/effect/decal/cleanable/oil/Initialize(mapload) - . = ..() - reagents.add_reagent(/datum/reagent/fuel/oil, 30) + decal_reagent = /datum/reagent/fuel/oil + reagent_amount = 30 /obj/effect/decal/cleanable/oil/attackby(obj/item/I, mob/living/user) var/attacked_by_hot_thing = I.get_temperature() diff --git a/code/game/objects/items/food/_food.dm b/code/game/objects/items/food/_food.dm index bbe8a69223a..97288efa60f 100644 --- a/code/game/objects/items/food/_food.dm +++ b/code/game/objects/items/food/_food.dm @@ -41,7 +41,7 @@ ///Food that's immune to decomposition. var/preserved_food = FALSE ///Does our food normally attract ants? - var/ant_attracting = TRUE + var/ant_attracting = FALSE ///What our food decomposes into. var/decomp_type = /obj/item/food/badrecipe/moldy ///Food that needs to be picked up in order to decompose. diff --git a/code/game/objects/items/food/misc.dm b/code/game/objects/items/food/misc.dm index 4c2fe0cdd9e..68152d2b9ba 100644 --- a/code/game/objects/items/food/misc.dm +++ b/code/game/objects/items/food/misc.dm @@ -206,6 +206,10 @@ name = "moldy mess" desc = "A rancid, disgusting culture of mold and ants. Somewhere under there, at some point, there was food." food_reagents = list(/datum/reagent/consumable/mold = 30) + preserved_food = FALSE + ant_attracting = TRUE + decomp_type = null + decomposition_time = 30 SECONDS /obj/item/food/badrecipe/moldy/bacteria name = "bacteria rich moldy mess" @@ -269,7 +273,7 @@ icon_state = "spidereggs" food_reagents = list(/datum/reagent/consumable/nutriment/protein = 4) tastes = list("cobwebs" = 1) - foodtypes = MEAT + foodtypes = MEAT w_class = WEIGHT_CLASS_TINY /obj/item/food/spiderling diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 589c5ec4fc1..da0995f961e 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -2817,7 +2817,7 @@ pests = new(exposed_turf) var/spilled_ants = (round(reac_volume,1) - 5) // To account for ant decals giving 3-5 ants on initialize. pests.reagents.add_reagent(/datum/reagent/ants, spilled_ants) - pests.update_ant_damage(spilled_ants) + pests.update_ant_damage() //This is intended to a be a scarce reagent to gate certain drugs and toxins with. Do not put in a synthesizer. Renewable sources of this reagent should be inefficient. /datum/reagent/lead