/mob/living/basic/clown name = "Clown" desc = "A denizen of clown planet." icon = 'icons/mob/simple/clown_mobs.dmi' icon_state = "clown" icon_living = "clown" icon_dead = "clown_dead" icon_gib = "clown_gib" health_doll_icon = "clown" //if >32x32, it will use this generic. for all the huge clown mobs that subtype from this mob_biotypes = MOB_ORGANIC|MOB_HUMANOID response_disarm_continuous = "gently pushes aside" response_disarm_simple = "gently push aside" response_harm_continuous = "robusts" response_harm_simple = "robust" combat_mode = TRUE maxHealth = 75 health = 75 melee_damage_lower = 10 melee_damage_upper = 10 attack_sound = 'sound/items/bikehorn.ogg' attacked_sound = 'sound/items/bikehorn.ogg' environment_smash = ENVIRONMENT_SMASH_NONE basic_mob_flags = DEL_ON_DEATH initial_language_holder = /datum/language_holder/clown habitable_atmos = list("min_oxy" = 5, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) minimum_survivable_temperature = (T0C - 10) maximum_survivable_temperature = (T0C + 100) blood_volume = BLOOD_VOLUME_NORMAL faction = list(FACTION_CLOWN) ai_controller = /datum/ai_controller/basic_controller/clown ///list of stuff we drop on death var/list/loot = list(/obj/effect/mob_spawn/corpse/human/clown) ///blackboard emote list var/list/emotes = list( BB_EMOTE_SAY = list("HONK", "Honk!", "Welcome to clown planet!"), BB_EMOTE_HEAR = list("honks", "squeaks"), BB_EMOTE_SOUND = list('sound/items/bikehorn.ogg'), //WE LOVE TO PARTY BB_SPEAK_CHANCE = 5, ) ///do we waddle (honk) var/waddles = TRUE /mob/living/basic/clown/Initialize(mapload) . = ..() AddElement(/datum/element/footstep, footstep_type = FOOTSTEP_MOB_SHOE) AddComponent(/datum/component/ai_retaliate_advanced, CALLBACK(src, PROC_REF(retaliate_callback))) ai_controller.set_blackboard_key(BB_BASIC_MOB_SPEAK_LINES, emotes) //im not putting dynamic humans or whatever its called here because this is the base path of nonhuman clownstrosities if(waddles) AddElementTrait(TRAIT_WADDLING, INNATE_TRAIT, /datum/element/waddling) if(length(loot)) loot = string_list(loot) AddElement(/datum/element/death_drops, loot) /mob/living/basic/clown/proc/retaliate_callback(mob/living/attacker) if (!istype(attacker)) return for (var/mob/living/basic/clown/harbringer in oview(src, 7)) harbringer.ai_controller.insert_blackboard_key_lazylist(BB_BASIC_MOB_RETALIATE_LIST, attacker) /mob/living/basic/clown/melee_attack(atom/target, list/modifiers, ignore_cooldown = FALSE) if(!istype(target, /obj/item/food/grown/banana/bunch)) return ..() var/obj/item/food/grown/banana/bunch/unripe_bunch = target unripe_bunch.start_ripening() log_combat(src, target, "explosively ripened") /mob/living/basic/clown/get_bloodtype() if (check_holidays(APRIL_FOOLS)) return get_blood_type(BLOOD_TYPE_CLOWN) return ..() /mob/living/basic/clown/lube name = "Living Lube" desc = "A puddle of lube brought to life by the honkmother." icon_state = "lube" icon_living = "lube" maxHealth = 50 health = 50 response_help_continuous = "dips a finger into" response_help_simple = "dip a finger into" response_disarm_continuous = "gently scoops and pours aside" response_disarm_simple = "gently scoop and pour aside" mob_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_SLIME damage_coeff = list(BRUTE = 0.25, BURN = 1, TOX = 1, STAMINA = 1, OXY = 1) emotes = list( BB_EMOTE_SAY = list("HONK", "Honk!", "Welcome to clown planet!"), BB_EMOTE_HEAR = list("bubbles", "oozes"), ) waddles = FALSE loot = list( /obj/effect/spawner/foam_starter/small, /obj/item/clothing/mask/gas/clown_hat, ) /mob/living/basic/clown/lube/Initialize(mapload) . = ..() AddElement(/datum/element/lube_walking) /mob/living/basic/clown/honkling name = "Honkling" desc = "A divine being sent by the Honkmother to spread joy. It's not dangerous, but it's a bit of a nuisance." icon_state = "honkling" icon_living = "honkling" speed = -0.5 melee_damage_lower = 1 melee_damage_upper = 1 attack_verb_continuous = "cheers up" attack_verb_simple = "cheer up" mob_biotypes = MOB_ORGANIC|MOB_HUMANOID loot = list( /obj/item/clothing/mask/gas/clown_hat, /obj/effect/gibspawner/human, /obj/item/grown/bananapeel/bluespace, ) /mob/living/basic/clown/honkling/Initialize(mapload) . = ..() var/static/list/injection_range if(!injection_range) injection_range = string_numbers_list(list(1, 5)) AddElement(\ /datum/element/venomous,\ /datum/reagent/consumable/laughter,\ injection_range,\ injection_flags = INJECT_CHECK_PENETRATE_THICK | INJECT_CHECK_IGNORE_SPECIES,\ ) /mob/living/basic/clown/fleshclown name = "Fleshclown" desc = "A being forged out of the pure essence of pranking, cursed into existence by a cruel maker." icon_state = "fleshclown" icon_living = "fleshclown" response_help_continuous = "reluctantly pokes" response_help_simple = "reluctantly poke" response_disarm_continuous = "sinks his hands into the spongy flesh of" response_disarm_simple = "sink your hands into the spongy flesh of" response_harm_continuous = "cleanses the world of" response_harm_simple = "cleanse the world of" maxHealth = 140 health = 140 speed = -0.5 melee_damage_upper = 15 attack_verb_continuous = "limply slaps" attack_verb_simple = "limply slap" obj_damage = 5 loot = list( /obj/effect/gibspawner/human, /obj/item/clothing/mask/gas/clown_hat, /obj/item/food/meatclown, /obj/item/stack/sheet/animalhide/human, ) emotes = list( BB_EMOTE_SAY = list( "HONK", "Honk!", "I didn't ask for this", "I feel constant and horrible pain", "I was born out of mirthful pranking but I live in suffering", "This body is a merciless and unforgiving prison", "YA-HONK!!!", ), BB_EMOTE_HEAR = list("honks", "contemplates its existence"), BB_EMOTE_SEE = list("sweats", "jiggles"), BB_SPEAK_CHANCE = 5, ) /mob/living/basic/clown/fleshclown/Initialize(mapload) . = ..() ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) /mob/living/basic/clown/longface name = "Longface" desc = "Often found walking into the bar." icon_state = "long face" icon_living = "long face" move_resist = INFINITY response_help_continuous = "tries to awkwardly hug" response_help_simple = "try to awkwardly hug" response_disarm_continuous = "pushes the unwieldy frame of" response_disarm_simple = "push the unwieldy frame of" response_harm_continuous = "tries to shut up" response_harm_simple = "try to shut up" maxHealth = 150 health = 150 pixel_x = -16 base_pixel_x = -16 speed = 1.5 melee_damage_upper = 20 attack_verb_continuous = "YA-HONKs" attack_verb_simple = "YA-HONK" loot = list( /obj/effect/gibspawner/human, /obj/item/grown/bananapeel, /obj/item/clothing/mask/gas/clown_hat, ) emotes = list( BB_EMOTE_SAY = list("YA-HONK!!!"), BB_EMOTE_HEAR = list("honks", "squeaks"), BB_SPEAK_CHANCE = 60, ) /mob/living/basic/clown/longface/Initialize(mapload) . = ..() AddElement(/datum/element/swabable, CELL_LINE_TABLE_LONGFACE, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) /mob/living/basic/clown/clownhulk name = "Honk Hulk" desc = "A cruel and fearsome clown. Don't make him angry." icon_state = "honkhulk" icon_living = "honkhulk" move_resist = INFINITY gender = MALE response_help_continuous = "tries desperately to appease" response_help_simple = "try desperately to appease" response_disarm_continuous = "foolishly pushes" response_disarm_simple = "foolishly push" response_harm_continuous = "angers" response_harm_simple = "anger" maxHealth = 400 health = 400 pixel_x = -16 base_pixel_x = -16 speed = 1.5 melee_damage_lower = 15 melee_damage_upper = 20 attack_verb_continuous = "pummels" attack_verb_simple = "pummel" obj_damage = 30 environment_smash = ENVIRONMENT_SMASH_WALLS loot = list( /obj/effect/gibspawner/human, /obj/item/soap, /obj/item/clothing/mask/gas/clown_hat, ) emotes = list( BB_EMOTE_SAY = list("HONK", "Honk!", "HAUAUANK!!!", "GUUURRRRAAAHHH!!!"), BB_EMOTE_HEAR = list("honks", "grunts"), BB_EMOTE_SEE = list("sweats"), BB_SPEAK_CHANCE = 5, ) /mob/living/basic/clown/clownhulk/chlown name = "Chlown" desc = "A real lunkhead who somehow gets all the girls." icon_state = "chlown" icon_living = "chlown" gender = MALE response_help_continuous = "submits to" response_help_simple = "submit to" response_disarm_continuous = "tries to assert dominance over" response_disarm_simple = "try to assert dominance over" response_harm_continuous = "makes a weak beta attack at" response_harm_simple = "make a weak beta attack at" maxHealth = 500 health = 500 armour_penetration = 20 attack_verb_continuous = "steals the girlfriend of" attack_verb_simple = "steal the girlfriend of" attack_sound = 'sound/items/airhorn/airhorn2.ogg' loot = list( /obj/effect/gibspawner/human, /obj/effect/spawner/foam_starter/small, /obj/item/grown/bananapeel, /obj/item/clothing/mask/gas/clown_hat, ) emotes = list( BB_EMOTE_SAY = list("HONK", "Honk!", "Bruh", "cheeaaaahhh?"), BB_EMOTE_SEE = list("asserts his dominance", "emasculates everyone implicitly"), BB_SPEAK_CHANCE = 5, ) /mob/living/basic/clown/clownhulk/honkmunculus name = "Honkmunculus" desc = "A slender wiry figure of alchemical origin." icon_state = "honkmunculus" icon_living = "honkmunculus" response_help_continuous = "skeptically pokes" response_help_simple = "skeptically poke" response_disarm_continuous = "pushes the unwieldy frame of" response_disarm_simple = "push the unwieldy frame of" maxHealth = 200 health = 200 melee_damage_upper = 15 attack_verb_continuous = "ferociously mauls" attack_verb_simple = "ferociously maul" environment_smash = ENVIRONMENT_SMASH_NONE loot = list( /obj/effect/gibspawner/xeno/bodypartless, /obj/effect/spawner/foam_starter/small, /obj/item/grown/bananapeel/mimanapeel, /obj/item/clothing/mask/gas/clown_hat, ) emotes = list( BB_EMOTE_SAY = list("honk"), BB_EMOTE_SEE = list("squirms", "writhes"), ) /mob/living/basic/clown/clownhulk/honkmunculus/Initialize(mapload) . = ..() var/static/list/injection_range if(!injection_range) injection_range = string_numbers_list(list(1, 5)) AddElement(\ /datum/element/venomous,\ /datum/reagent/peaceborg/confuse,\ injection_range,\ injection_flags = INJECT_CHECK_PENETRATE_THICK | INJECT_CHECK_IGNORE_SPECIES,\ ) // I don't really know what a clown is using to inject people but let's assume it doesn't need to penetrate at all /mob/living/basic/clown/clownhulk/destroyer name = "The Destroyer" desc = "An ancient being born of arcane honking." icon_state = "destroyer" icon_living = "destroyer" response_disarm_continuous = "bounces off of" response_harm_continuous = "bounces off of" maxHealth = 400 health = 400 speed = 1.5 melee_damage_lower = 20 melee_damage_upper = 40 armour_penetration = 30 attack_verb_continuous = "acts out divine vengeance on" attack_verb_simple = "act out divine vengeance on" obj_damage = 50 environment_smash = ENVIRONMENT_SMASH_RWALLS ai_controller = /datum/ai_controller/basic_controller/clown/murder loot = list( /obj/effect/gibspawner/human, /obj/effect/spawner/foam_starter/small, /obj/item/grown/bananapeel, /obj/item/clothing/mask/gas/clown_hat, ) emotes = list( BB_EMOTE_SAY = list("HONK!!!", "The Honkmother is merciful, so I must act out her wrath.", "parce mihi ad beatus honkmother placet mihi ut peccata committere,", "DIE!!!"), BB_EMOTE_HEAR = list("honks", "grunts"), BB_EMOTE_SEE = list("sweats"), BB_SPEAK_CHANCE = 5, ) /mob/living/basic/clown/mutant name = "Unknown" desc = "Kill it for its own sake." icon_state = "mutant" icon_living = "mutant" move_resist = INFINITY response_help_continuous = "reluctantly sinks a finger into" response_help_simple = "reluctantly sink a finger into" response_disarm_continuous = "squishes into" response_disarm_simple = "squish into" response_harm_continuous = "squishes into" response_harm_simple = "squish into" maxHealth = 130 health = 130 pixel_x = -16 base_pixel_x = -16 speed = 1.5 melee_damage_lower = 10 melee_damage_upper = 20 attack_verb_continuous = "awkwardly flails at" attack_verb_simple = "awkwardly flail at" loot = list( /obj/effect/gibspawner/generic, /obj/effect/gibspawner/generic/animal, /obj/effect/gibspawner/human, /obj/effect/gibspawner/human/bodypartless, /obj/effect/gibspawner/xeno/bodypartless, /obj/item/grown/bananapeel/gros_michel, /obj/item/clothing/mask/gas/clown_hat, ) emotes = list( BB_EMOTE_SAY = list("aaaaaahhhhuuhhhuhhhaaaaa", "AAAaaauuuaaAAAaauuhhh", "huuuuuh... hhhhuuuooooonnnnkk", "HuaUAAAnKKKK"), BB_EMOTE_SEE = list("squirms", "writhes", "pulsates", "froths", "oozes"), BB_SPEAK_CHANCE = 10, ) /mob/living/basic/clown/mutant/glutton name = "banana glutton" desc = "Something that was once a clown" icon_state = "glutton" icon_living = "glutton" health = 200 mob_size = MOB_SIZE_LARGE speed = 1 melee_damage_lower = 10 melee_damage_upper = 15 obj_damage = 50 damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, STAMINA = 1, OXY = 1) attack_verb_continuous = "slams" attack_verb_simple = "slam" ///Tracks how many total foods we have eaten, used for calculating when we should gain max health. var/foods_eaten = 0 loot = list( /obj/effect/gibspawner/generic, /obj/effect/gibspawner/generic/animal, /obj/effect/gibspawner/human/bodypartless, /obj/effect/gibspawner/xeno/bodypartless, /obj/effect/spawner/random/chance_for_freedom, ) emotes = list( BB_EMOTE_SAY = list("hey, buddy", "HONK!!!", "H-h-h-H-HOOOOONK!!!!", "HONKHONKHONK!!!", "HEY, BUCKO, GET BACK HERE!!!", "HOOOOOOOONK!!!"), BB_EMOTE_SEE = list("jiggles", "wobbles"), ) death_sound = 'sound/misc/sadtrombone.ogg' waddles = FALSE ///This is the list of items we are ready to regurgitate, var/list/prank_pouch = list() /mob/living/basic/clown/mutant/glutton/Initialize(mapload) . = ..() GRANT_ACTION(/datum/action/cooldown/regurgitate) AddElement(/datum/element/swabable, CELL_LINE_TABLE_GLUTTON, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) var/static/list/food_types = list( /obj/item/food/cheesiehonkers, /obj/item/food/cornchips, ) AddComponent(/datum/component/tameable, food_types = food_types, tame_chance = 30, bonus_tame_chance = 0) AddElement(/datum/element/damage_threshold, 10) //lots of fat to cushion blows. /mob/living/basic/clown/mutant/glutton/item_interaction(mob/living/user, obj/item/tool, list/modifiers) if(!check_edible(tool)) return NONE eat_atom(tool) return ITEM_INTERACT_SUCCESS /mob/living/basic/clown/mutant/glutton/resolve_unarmed_attack(atom/attack_target, list/modifiers) if(!check_edible(attack_target)) return ..() eat_atom(attack_target) ///Returns whether or not the supplied movable atom is edible. /mob/living/basic/clown/mutant/glutton/proc/check_edible(atom/movable/potential_food) if(isliving(potential_food)) var/mob/living/living_morsel = potential_food if(living_morsel.mob_size > MOB_SIZE_SMALL) return FALSE else return TRUE if(IS_EDIBLE(potential_food)) if(prank_pouch.len >= 8) to_chat(src, span_warning("Your prank pouch is filled to the brim! You don't think you can swallow any more morsels right now.")) return FALSE return TRUE ///This proc eats the atom, certain funny items are stored directly in the prank pouch while bananas grant a heal based on their potency and the peels are retained in the pouch. /mob/living/basic/clown/mutant/glutton/proc/eat_atom(atom/movable/eaten_atom) var/static/funny_items = list( /obj/item/food/pie/cream, /obj/item/food/grown/tomato, /obj/item/food/meatclown, /obj/item/food/ink_sac, ) visible_message(span_warning("[src] eats [eaten_atom]!"), span_notice("You eat [eaten_atom].")) if(is_type_in_list(eaten_atom, funny_items)) eaten_atom.forceMove(src) prank_pouch += eaten_atom else //Encourage gluttony RP by giving a litle bonus for each obj eaten. foods_eaten++ if(!(foods_eaten % 5) && foods_eaten <= 100) balloon_alert(src, "weight gained!") maxHealth += 10 health += 10 if(istype(eaten_atom, /obj/item/food/grown/banana)) var/obj/item/food/grown/banana/banana_morsel = eaten_atom adjustBruteLoss(-(banana_morsel.seed.potency / 100 ) * maxHealth * 0.2) prank_pouch += banana_morsel.generate_trash(src) else adjustBruteLoss(-maxHealth * 0.1) qdel(eaten_atom) playsound(loc,'sound/items/eatfood.ogg', rand(30,50), TRUE) flick("glutton_mouth", src) /mob/living/basic/clown/mutant/glutton/tamed(mob/living/tamer, atom/food) buckle_lying = 0 AddElement(/datum/element/ridable, /datum/component/riding/creature/glutton) /mob/living/basic/clown/mutant/glutton/Exited(atom/movable/gone, direction) . = ..() prank_pouch -= gone ///This ability will let you fire one random item from your pouch, /datum/action/cooldown/regurgitate name = "Regurgitate" desc = "Regurgitates a single item from the depths of your pouch." background_icon_state = "bg_changeling" overlay_icon_state = "bg_changeling_border" button_icon = 'icons/mob/actions/actions_animal.dmi' button_icon_state = "regurgitate" check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_INCAPACITATED click_to_activate = TRUE /datum/action/cooldown/regurgitate/set_click_ability(mob/on_who) . = ..() if(!.) return to_chat(on_who, span_notice("Your throat muscles tense up. Left-click to regurgitate a funny morsel!")) on_who.icon_state = "glutton_tongue" on_who.update_appearance(UPDATE_ICON) /datum/action/cooldown/regurgitate/unset_click_ability(mob/on_who, refund_cooldown = TRUE) . = ..() if(!.) return if(refund_cooldown) to_chat(on_who, span_notice("Your throat muscles relax.")) on_who.icon_state = initial(on_who.icon_state) on_who.update_appearance(UPDATE_ICON) /datum/action/cooldown/regurgitate/IsAvailable(feedback = FALSE) . = ..() if(!.) return FALSE // Hardcoded to only work with gluttons. Come back next year return istype(owner, /mob/living/basic/clown/mutant/glutton) /datum/action/cooldown/regurgitate/Activate(atom/spit_at) StartCooldown(cooldown_time / 4) var/mob/living/basic/clown/mutant/glutton/pouch_owner = owner if(!length(pouch_owner.prank_pouch)) pouch_owner.icon_state = initial(pouch_owner.icon_state) to_chat(pouch_owner, span_notice("Your prank pouch is empty.")) return TRUE var/obj/item/projected_morsel = pick(pouch_owner.prank_pouch) projected_morsel.forceMove(pouch_owner.loc) projected_morsel.throw_at(spit_at, 8, 2, pouch_owner) flick("glutton_mouth", pouch_owner) playsound(pouch_owner, 'sound/misc/soggy.ogg', 75) StartCooldown() return TRUE /mob/living/basic/clown/banana name = "Clownana" desc = "A fusion of clown and banana DNA birthed from a botany experiment gone wrong." icon_state = "banana tree" icon_living = "banana tree" mob_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_PLANT response_disarm_continuous = "peels" response_disarm_simple = "peel" response_harm_continuous = "peels" response_harm_simple = "peel" maxHealth = 120 health = 120 speed = -1 habitable_atmos = list("min_oxy" = 1, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 1, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) loot = list( /obj/effect/gibspawner/human, /obj/item/clothing/mask/gas/clown_hat, /obj/effect/spawner/random/bananas_or_nothing, /obj/effect/spawner/random/peel_or_nana, ) emotes = list( BB_EMOTE_SAY = list("HONK", "Honk!", "YA-HONK!!!"), BB_EMOTE_SEE = list("bites into the banana", "plucks a banana off its head", "photosynthesizes"), BB_EMOTE_SOUND = list('sound/items/bikehorn.ogg'), ) /mob/living/basic/clown/banana/Initialize(mapload) . = ..() AddElement(/datum/element/swabable, CELL_LINE_TABLE_CLOWNANA, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) var/static/list/innate_actions = list( /datum/action/cooldown/exquisite_bunch, /datum/action/cooldown/rustle, ) grant_actions_by_list(innate_actions) ///drops peels around the mob when activated /datum/action/cooldown/rustle name = "Rustle" desc = "Shake loose a few banana peels." cooldown_time = 8 SECONDS button_icon_state = "rustle" button_icon = 'icons/mob/actions/actions_clown.dmi' background_icon_state = "bg_nature" overlay_icon_state = "bg_nature_border" ///which type of peel to spawn var/banana_type = /obj/item/grown/bananapeel ///How many peels to spawn var/peel_amount = 3 /datum/action/cooldown/rustle/Activate(atom/target) . = ..() var/list/reachable_turfs = list() for(var/turf/adjacent_turf in RANGE_TURFS(1, owner.loc)) if(adjacent_turf == owner.loc || !owner.CanReach(adjacent_turf) || !isopenturf(adjacent_turf)) continue reachable_turfs += adjacent_turf var/peels_to_spawn = min(peel_amount, reachable_turfs.len) for(var/i in 1 to peels_to_spawn) new banana_type(pick_n_take(reachable_turfs)) playsound(owner, 'sound/mobs/non-humanoids/clown/clownana_rustle.ogg', 60) animate(owner, time = 0.1 SECONDS, pixel_w = 6, easing = CUBIC_EASING | EASE_OUT, flags = ANIMATION_PARALLEL|ANIMATION_RELATIVE) animate(time = 0.2 SECONDS, pixel_w = -8, easing = CUBIC_EASING, flags = ANIMATION_RELATIVE) animate(time = 0.1 SECONDS, pixel_w = 2, easing = CUBIC_EASING | EASE_IN, flags = ANIMATION_RELATIVE) StartCooldown() ///spawns a plumb bunch of bananas imbued with mystical power. /datum/action/cooldown/exquisite_bunch name = "Exquisite Bunch" desc = "Pluck your finest bunch of bananas from your head. This bunch is especially nutrious to monkeykind. A gentle tap will trigger an explosive ripening process." button_icon = 'icons/obj/service/hydroponics/harvest.dmi' cooldown_time = 60 SECONDS button_icon_state = "banana_bunch" background_icon_state = "bg_nature" overlay_icon_state = "bg_nature_border" ///If we are currently activating our ability. var/activating = FALSE /datum/action/cooldown/exquisite_bunch/Trigger(mob/clicker, trigger_flags, atom/target) if(activating) return var/bunch_turf = get_step(owner.loc, owner.dir) if(!bunch_turf) return if(!owner.CanReach(bunch_turf) || !isopenturf(bunch_turf)) owner.balloon_alert(owner, "can't do that here!") return activating = TRUE if(!do_after(owner, 1 SECONDS)) activating = FALSE return playsound(owner, 'sound/mobs/non-humanoids/clown/hehe.ogg', 100) if(!do_after(owner, 1 SECONDS)) activating = FALSE return activating = FALSE return ..() /datum/action/cooldown/exquisite_bunch/Activate(atom/target) . = ..() new /obj/item/food/grown/banana/bunch(get_step(owner.loc, owner.dir)) playsound(owner, 'sound/items/bikehorn.ogg', 60) addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound), owner, 'sound/mobs/non-humanoids/clown/hohoho.ogg', 100, 1), 1 SECONDS) StartCooldown()