mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-24 21:48:39 +01:00
Decomposition now has mold first, then ants, instead of both. (#65409)
Someone made a suggestion to me that fixed a problem I've been trying to work around, and now that I've made it so people can set custom decompose times, that made this WAY EASIER. When most foods decay, they will turn into the generic moldy food sprite you've become accustomed to, without the ants. After 30 seconds, that moldy food will get consumed by ants, leaving only the anthill. Ants also no longer spawn on lavaland's basalt, by Fikou request.
This commit is contained in:
@@ -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("<span class='notice'>[decomp] gets overtaken by mold and ants! Gross!</span>")
|
||||
if(decomp_result)
|
||||
new decomp_result(decomp.loc)
|
||||
decomp.visible_message("<span class='notice'>[decomp] gets overtaken by mold[produce_ants ? " and ants":""]! Gross!</span>")
|
||||
qdel(decomp)
|
||||
return
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -206,6 +206,10 @@
|
||||
name = "moldy mess"
|
||||
desc = "A rancid, disgusting culture of mold and ants. Somewhere under there, at <i>some point,</i> 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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user