/obj/item/reagent_containers name = "Container" desc = "..." icon = 'icons/obj/chemical.dmi' icon_state = null w_class = WEIGHT_CLASS_TINY var/amount_per_transfer_from_this = 5 var/list/possible_transfer_amounts = list(5,10,15,20,25,30) var/volume = 30 var/list/list_reagents = null var/spawned_disease = null var/disease_amount = 20 var/spillable = FALSE /obj/item/reagent_containers/Initialize(mapload, vol) . = ..() if(isnum(vol) && vol > 0) volume = vol create_reagents(volume) if(spawned_disease) var/datum/disease/F = new spawned_disease() var/list/data = list("viruses"= list(F)) reagents.add_reagent("blood", disease_amount, data) add_initial_reagents() /obj/item/reagent_containers/proc/add_initial_reagents() if(list_reagents) reagents.add_reagent_list(list_reagents) /obj/item/reagent_containers/attack_self(mob/user) if(possible_transfer_amounts.len) var/i=0 for(var/A in possible_transfer_amounts) i++ if(A == amount_per_transfer_from_this) if(i[src]'s transfer amount is now [amount_per_transfer_from_this] units.") return /obj/item/reagent_containers/attack(mob/M, mob/user, def_zone) if(user.a_intent == INTENT_HARM) return ..() /obj/item/reagent_containers/proc/canconsume(mob/eater, mob/user) if(!iscarbon(eater)) return 0 var/mob/living/carbon/C = eater var/covered = "" if(C.is_mouth_covered(head_only = 1)) covered = "headgear" else if(C.is_mouth_covered(mask_only = 1)) covered = "mask" if(covered) var/who = (isnull(user) || eater == user) ? "your" : "[eater.p_their()]" to_chat(user, "You have to remove [who] [covered] first!") return 0 return 1 /obj/item/reagent_containers/ex_act() if(reagents) for(var/datum/reagent/R in reagents.reagent_list) R.on_ex_act() if(!QDELETED(src)) ..() /obj/item/reagent_containers/fire_act(exposed_temperature, exposed_volume) reagents.expose_temperature(exposed_temperature) ..() /obj/item/reagent_containers/throw_impact(atom/target) . = ..() SplashReagents(target, TRUE) /obj/item/reagent_containers/proc/bartender_check(atom/target) . = FALSE if(target.CanPass(src, get_turf(src)) && thrownby && thrownby.actions) for(var/datum/action/innate/drink_fling/D in thrownby.actions) if(D.active) return TRUE /obj/item/reagent_containers/proc/ForceResetRotation() transform = initial(transform) /obj/item/reagent_containers/proc/SplashReagents(atom/target, thrown = FALSE) if(!reagents || !reagents.total_volume || !spillable) return if(ismob(target) && target.reagents) if(thrown) reagents.total_volume *= rand(5,10) * 0.1 //Not all of it makes contact with the target var/mob/M = target var/R target.visible_message("[M] has been splashed with something!", \ "[M] has been splashed with something!") for(var/datum/reagent/A in reagents.reagent_list) R += A.id + " (" R += num2text(A.volume) + ")," if(thrownby) log_combat(thrownby, M, "splashed", R) reagents.reaction(target, TOUCH) else if(bartender_check(target) && thrown) visible_message("[src] lands onto the [target.name] without spilling a single drop.") transform = initial(transform) addtimer(CALLBACK(src, .proc/ForceResetRotation), 1) return else if(isturf(target) && reagents.reagent_list.len && thrownby) log_combat(thrownby, target, "splashed (thrown) [english_list(reagents.reagent_list)]", "in [AREACOORD(target)]") log_game("[key_name(thrownby)] splashed (thrown) [english_list(reagents.reagent_list)] on [target] in [AREACOORD(target)].") message_admins("[ADMIN_LOOKUPFLW(thrownby)] splashed (thrown) [english_list(reagents.reagent_list)] on [target] in [ADMIN_VERBOSEJMP(target)].") visible_message("[src] spills its contents all over [target].") reagents.reaction(target, TOUCH) if(QDELETED(src)) return reagents.clear_reagents() /obj/item/reagent_containers/microwave_act(obj/machinery/microwave/M) reagents.expose_temperature(1000) ..() /obj/item/reagent_containers/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) reagents.expose_temperature(exposed_temperature)