diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm index 4e91b31da8c..08973d295d9 100644 --- a/code/__DEFINES/traits/declarations.dm +++ b/code/__DEFINES/traits/declarations.dm @@ -587,6 +587,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_BRAINWASHING "brainwashing" /// Allows chef's to chefs kiss their food, to make them with love #define TRAIT_CHEF_KISS "chefs_kiss" +/// Allows clowns to bend balloons into animals +#define TRAIT_BALLOON_SUTRA "balloon_sutra" ///Movement type traits for movables. See elements/movetype_handler.dm #define TRAIT_MOVE_GROUND "move_ground" diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 2b00638e348..f8042ae9f64 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -135,6 +135,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_BADDNA" = TRAIT_BADDNA, "TRAIT_BADTOUCH" = TRAIT_BADTOUCH, "TRAIT_BALD" = TRAIT_BALD, + "TRAIT_BALLOON_SUTRA" = TRAIT_BALLOON_SUTRA, "TRAIT_BATON_RESISTANCE" = TRAIT_BATON_RESISTANCE, "TRAIT_BEING_BLADE_SHIELDED" = TRAIT_BEING_BLADE_SHIELDED, "TRAIT_BLOB_ALLY" = TRAIT_BLOB_ALLY, diff --git a/code/datums/components/crafting/melee_weapon.dm b/code/datums/components/crafting/melee_weapon.dm index 23873a5d7af..869d223a758 100644 --- a/code/datums/components/crafting/melee_weapon.dm +++ b/code/datums/components/crafting/melee_weapon.dm @@ -44,6 +44,21 @@ time = 4 SECONDS category = CAT_WEAPON_MELEE + +/datum/crafting_recipe/balloon_mallet + name = "Balloon Mallet" + result = /obj/item/balloon_mallet + reqs = list( + /obj/item/toy/balloon/long = 18, + ) + time = 10 SECONDS + category = CAT_WEAPON_MELEE + +/datum/crafting_recipe/balloon_mallet/check_requirements(mob/user, list/collected_requirements) + . = ..() + if(HAS_TRAIT(user, TRAIT_BALLOON_SUTRA)) + return TRUE + /datum/crafting_recipe/tailwhip name = "Liz O' Nine Tails" result = /obj/item/melee/chainofcommand/tailwhip diff --git a/code/datums/components/crafting/tailoring.dm b/code/datums/components/crafting/tailoring.dm index 14a7ebfc21b..3476016ead3 100644 --- a/code/datums/components/crafting/tailoring.dm +++ b/code/datums/components/crafting/tailoring.dm @@ -442,3 +442,42 @@ /obj/item/clothing/suit/armor/vest = 1, ) category = CAT_CLOTHING + +/datum/crafting_recipe/balloon_helmet + result = /obj/item/clothing/head/helmet/balloon + reqs = list( + /obj/item/toy/balloon/long = 6, + ) + time = 4 SECONDS + category = CAT_CLOTHING + +/datum/crafting_recipe/balloon_helmet/check_requirements(mob/user, list/collected_requirements) + . = ..() + if(HAS_TRAIT(user, TRAIT_BALLOON_SUTRA)) + return TRUE + +/datum/crafting_recipe/balloon_tophat + result = /obj/item/clothing/head/hats/tophat/balloon + reqs = list( + /obj/item/toy/balloon/long = 6, + ) + time = 4 SECONDS + category = CAT_CLOTHING + +/datum/crafting_recipe/balloon_tophat/check_requirements(mob/user, list/collected_requirements) + . = ..() + if(HAS_TRAIT(user, TRAIT_BALLOON_SUTRA)) + return TRUE + +/datum/crafting_recipe/balloon_vest + result = /obj/item/clothing/suit/armor/balloon_vest + reqs = list( + /obj/item/toy/balloon/long = 18, + ) + time = 8 SECONDS + category = CAT_CLOTHING + +/datum/crafting_recipe/balloon_vest/check_requirements(mob/user, list/collected_requirements) + . = ..() + if(HAS_TRAIT(user, TRAIT_BALLOON_SUTRA)) + return TRUE diff --git a/code/datums/mood_events/generic_negative_events.dm b/code/datums/mood_events/generic_negative_events.dm index 0cfb48f7a98..0e54c21e702 100644 --- a/code/datums/mood_events/generic_negative_events.dm +++ b/code/datums/mood_events/generic_negative_events.dm @@ -474,6 +474,11 @@ mood_change = -6 timeout = 5 MINUTES +/datum/mood_event/mallet_humiliation + description = "Getting hit by such a stupid weapon feels rather humiliating..." + mood_change = -3 + timeout = 10 SECONDS + ///Wizard cheesy grand finale - what everyone but the wizard gets /datum/mood_event/madness_despair description = "UNWORTHY, UNWORTHY, UNWORTHY!!!" diff --git a/code/game/objects/items/storage/boxes/service_boxes.dm b/code/game/objects/items/storage/boxes/service_boxes.dm index 8dcc1f4f6b6..6dc790cc495 100644 --- a/code/game/objects/items/storage/boxes/service_boxes.dm +++ b/code/game/objects/items/storage/boxes/service_boxes.dm @@ -204,6 +204,22 @@ for(var/i in 1 to 5) new /obj/item/reagent_containers/spray/chemsprayer/party(src) +/obj/item/storage/box/balloons + name = "box of long balloons" + desc = "A completely randomized and wacky box of long balloons, harvested straight from balloon farms on the clown planet." + illustration = "balloon" + +/obj/item/storage/box/balloons/Initialize(mapload) + . = ..() + atom_storage.max_slots = 24 + atom_storage.set_holdable(list(/obj/item/toy/balloon/long)) + atom_storage.max_total_storage = 24 + atom_storage.allow_quick_gather = FALSE + +/obj/item/storage/box/balloons/PopulateContents() + for(var/i in 1 to 24) + new /obj/item/toy/balloon/long(src) + /obj/item/storage/box/stickers name = "box of stickers" desc = "A box full of random stickers. Do give to the clown." diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 67192b829a7..8ac1ee98994 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -39,8 +39,8 @@ /obj/item/toy/waterballoon name = "water balloon" desc = "A translucent balloon. There's nothing in it." - icon = 'icons/obj/toys/toy.dmi' - icon_state = "waterballoon-e" + icon = 'icons/obj/toys/balloons.dmi' + icon_state = "balloon_red-e" inhand_icon_state = "balloon-empty" /obj/item/toy/waterballoon/Initialize(mapload) @@ -107,15 +107,15 @@ icon_state = "waterballoon" inhand_icon_state = "balloon" else - icon_state = "waterballoon-e" + icon_state = "balloon_red-e" inhand_icon_state = "balloon-empty" return ..() -#define BALLOON_COLORS list("red", "blue", "green", "yellow") +#define BALLOON_COLORS list("red", "blue", "green", "yellow", "orange", "purple") /obj/item/toy/balloon name = "balloon" - desc = "No birthday is complete without it." + desc = "No birthday is complete without it. Sealed with a mechanical bluespace wrap so it remains floating no matter what." icon = 'icons/obj/toys/balloons.dmi' icon_state = "balloon" inhand_icon_state = "balloon" @@ -127,6 +127,68 @@ throw_range = 7 force = 0 var/random_color = TRUE + /// the string of the dmi state the balloon has while on the floor. + var/world_state + /// the string of the dmi state the balloon has while in your inventory. + var/storage_state + /// the string describing the name of balloon's current colour. + var/current_color + +/obj/item/toy/balloon/long + name = "long balloon" + desc = "A perfect balloon to contort into goofy forms. Sealed with a mechanical bluespace wrap so it remains floating no matter what." + icon_state = "balloon_long" + inhand_icon_state = "balloon" + w_class = WEIGHT_CLASS_NORMAL + /// Combinations of balloon colours to make specific animals. + var/list/balloon_combos = list( + list("red", "blue") = /obj/item/toy/balloon_animal/guy, + list("red", "green") = /obj/item/toy/balloon_animal/nukie, + list("red", "yellow") = /obj/item/toy/balloon_animal/clown, + list("red", "orange") = /obj/item/toy/balloon_animal/cat, + list("red", "purple") = /obj/item/toy/balloon_animal/fly, + list("blue", "green") = /obj/item/toy/balloon_animal/podguy, + list("blue", "yellow") = /obj/item/toy/balloon_animal/ai, + list("blue", "orange") = /obj/item/toy/balloon_animal/dog, + list("blue", "purple") = /obj/item/toy/balloon_animal/xeno, + list("green", "yellow") = /obj/item/toy/balloon_animal/banana, + list("green", "orange") = /obj/item/toy/balloon_animal/lizard, + list("green", "purple") = /obj/item/toy/balloon_animal/slime, + list("yellow", "orange") = /obj/item/toy/balloon_animal/moth, + list("yellow", "purple") = /obj/item/toy/balloon_animal/ethereal, + list("orange", "purple") = /obj/item/toy/balloon_animal/plasmaman, + ) + +/obj/item/toy/balloon/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change) + . = ..() + if(isturf(loc)) + icon_state = "[world_state]" + else + icon_state = "[storage_state]" + update_appearance() + +/obj/item/toy/balloon/long/attackby(obj/item/attacking_item, mob/living/user, params) + if(!istype(attacking_item, /obj/item/toy/balloon/long) || !HAS_TRAIT(user, TRAIT_BALLOON_SUTRA)) + return ..() + + var/obj/item/toy/balloon/long/hit_by = attacking_item + if(hit_by.current_color == current_color) + to_chat(user, span_warning("You must use balloons of different colours to do that!")) + return ..() + visible_message( + span_notice("[user.name] starts contorting up a balloon animal!"), + blind_message = span_hear("You hear balloons being contorted."), + vision_distance = 3, + ignored_mobs = user, + ) + for(var/list/pair_of_colors in balloon_combos) + if((hit_by.current_color == pair_of_colors[1] && current_color == pair_of_colors[2]) || (current_color == pair_of_colors[1] && hit_by.current_color == pair_of_colors[2])) + var/path_to_spawn = balloon_combos[pair_of_colors] + user.put_in_hands(new path_to_spawn) + break + qdel(hit_by) + qdel(src) + return TRUE /obj/item/toy/balloon/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/ammo_casing/foam_dart) && ismonkey(user)) @@ -157,17 +219,27 @@ . = ..() if(random_color) var/chosen_balloon_color = pick(BALLOON_COLORS) + current_color = "[chosen_balloon_color]" name = "[chosen_balloon_color] [name]" icon_state = "[icon_state]_[chosen_balloon_color]" inhand_icon_state = icon_state + world_state = "[icon_state]" + storage_state = "[icon_state]_storage" /obj/item/toy/balloon/corgi name = "corgi balloon" - desc = "A balloon with a corgi face on it. For the all year good boys." + desc = "A balloon in the shape of a corgi's head. For the all year good boys." icon_state = "corgi" inhand_icon_state = "corgi" random_color = FALSE +/obj/item/toy/balloon/heart + name = "heart balloon" + desc = "A balloon in the shape of a heart. How lovely" + icon_state = "heart" + inhand_icon_state = "heart" + random_color = FALSE + /obj/item/toy/balloon/syndicate name = "syndicate balloon" desc = "There is a tag on the back that reads \"FUK NT!11!\"." @@ -200,6 +272,96 @@ #undef BALLOON_COLORS +/* +* Balloon animals +*/ + +/obj/item/toy/balloon_animal + name = "balloon animal" + desc = "You shouldn't have this." + icon = 'icons/obj/toys/balloons.dmi' + icon_state = "balloon_guy" + throwforce = 0 + throw_speed = 2 + throw_range = 5 + force = 0 + +/obj/item/toy/balloon_animal/guy + name = "balloon guy" + desc = "A balloon effigy of the everyday standard issue human guy. Wonder if he pays balloon taxes. He probably evades them." + icon_state = "balloon_guy" + +/obj/item/toy/balloon_animal/nukie + name = "balloon nukie" + desc = "A balloon effigy of syndicate's nuclear operative. Either made to appease them and pray for survival, or to poke fun at them." + icon_state = "balloon_nukie" + +/obj/item/toy/balloon_animal/clown + name = "balloon clown" + desc = "A balloon clown, smiling from ear to ear and beyond!" + icon_state = "balloon_clown" + +/obj/item/toy/balloon_animal/cat + name = "balloon cat" + desc = "Without the sharp claws, balloon cats are possibly cuter than their live counterparts, though not as relatable, warm and fuzzy." + icon_state = "balloon_cat" + +/obj/item/toy/balloon_animal/fly + name = "balloon fly" + desc = "A balloon effigy of a flyperson. Thankfully, it doesn't come with balloon vomit." + icon_state = "balloon_fly" + +/obj/item/toy/balloon_animal/podguy + name = "balloon podguy" + desc = "A balloon effigy of a podperson. Though, actual podpeople have heads and not stalks and leaves." + icon_state = "balloon_podguy" + +/obj/item/toy/balloon_animal/ai + name = "balloon ai core" + desc = "A somewhat unrealistic balloon effigy of the station's AI core. Actual AI propably wouldn't smile like this." + icon_state = "balloon_ai" + +/obj/item/toy/balloon_animal/dog + name = "balloon dog" + desc = "A balloon effigy of the best boy. It cannot truly compare, but it makes an effort." + icon_state = "balloon_dog" + +/obj/item/toy/balloon_animal/xeno + name = "balloon xeno" + desc = "A balloon effigy of a spooky xeno! Too squishy to scare anyone itself, though." + icon_state = "balloon_xeno" + +/obj/item/toy/balloon_animal/banana + name = "balloon banana" + desc = "A balloon banana. This one can't be slipped on. Good for psychological warfare, though." + icon_state = "balloon_banana" + +/obj/item/toy/balloon_animal/lizard + name = "balloon lizard" + desc = "A balloon effigy of a lizard. One of the first species to adapt to clown planet's culture. Perhaps because they are naturally laughable?" + icon_state = "balloon_lizard" + +/obj/item/toy/balloon_animal/slime + name = "balloon slime" + desc = "A balloon effigy of single specimen of the galaxy-wide slime scourge, of purple variety. Slimes tried to invade clown planet once. They got quickly washed out by water-spitting flowers, though." + icon_state = "balloon_slime" + +/obj/item/toy/balloon_animal/moth + name = "balloon moth" + desc = "A balloon effigy of a common member of moth flotillas. Very few of them ever decide to settle on the clown planet, but those who do have the best 'piece-of-cloth-dissapearing' acts." + icon_state = "balloon_moth" + +/obj/item/toy/balloon_animal/ethereal + name = "balloon ethereal" + desc = "A balloon effigy of an ethereal artisan. Clownery is one form of art, and as such, ethereals were both drawn to and readily accepted at clown planet. Don't mind the lighbulb head, it's art too." + icon_state = "balloon_ethereal" + +/obj/item/toy/balloon_animal/plasmaman + name = "balloon plasmaman" + desc = "A balloon effigy of a plasmaman. Among the rarest on the clown planet, only having appeared recently thanks to ready trade between clown planet and NT." + icon_state = "balloon_plasmaman" + + /* * Captain's Aid */ diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index 1f2078f0037..2aa649844e5 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -40,6 +40,48 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 if(user.combat_mode) return ..(M, user) + +/obj/item/balloon_mallet + name = "balloon mallet" + desc = "It's a mallet, a weapon known for being heavy, but made from notoriously light balloons. Air inside removes any force from the swings. It'd be quite embarrassing to get hit by this." + icon = 'icons/obj/weapons/hammer.dmi' + icon_state = "balloon_mallet" + inhand_icon_state = "balloon_mallet" + lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi' + siemens_coefficient = 0 + force = 1 + throw_speed = 1 + throwforce = 1 + throw_range = 1 + w_class = WEIGHT_CLASS_HUGE + attack_verb_continuous = list("mallets", "smoother") + attack_verb_simple = list("mallet", "smoother") + max_integrity = 20 + armor_type = /datum/armor/item_banhammer + resistance_flags = FIRE_PROOF + +/obj/item/balloon_mallet/examine(mob/user) + . = ..() + if(HAS_TRAIT(user,TRAIT_BALLOON_SUTRA)) + . = "A sacred weapon of the higher castes from the clown planet, used to strike fear into the hearts of their foes. Wield it with care." + +/obj/item/balloon_mallet/attack(mob/living/target, mob/living/user) + playsound(loc, 'sound/creatures/clown/hehe.ogg', 20) + if (!isliving(target)) + return + switch(target.mob_mood.sanity) + if (SANITY_INSANE to SANITY_CRAZY) + force = 8 + if (SANITY_UNSTABLE to SANITY_DISTURBED) + force = 4 + target.add_mood_event("humiliated", /datum/mood_event/mallet_humiliation) + if (SANITY_NEUTRAL to SANITY_GREAT) + target.add_mood_event("humiliated", /datum/mood_event/mallet_humiliation) + + if(user.combat_mode) + return ..(target, user) + /obj/item/sord name = "\improper SORD" desc = "This thing is so unspeakably shitty you are having a hard time even holding it." diff --git a/code/modules/cargo/packs/costumes_toys.dm b/code/modules/cargo/packs/costumes_toys.dm index e23e6112a4b..de84a263597 100644 --- a/code/modules/cargo/packs/costumes_toys.dm +++ b/code/modules/cargo/packs/costumes_toys.dm @@ -268,3 +268,15 @@ crate_name = "corgi pinata kit" crate_type = /obj/structure/closet/crate/wooden discountable = SUPPLY_PACK_STD_DISCOUNTABLE + +/datum/supply_pack/costumes_toys/balloons + name = "Long Balloons Kit" + desc = "This crate contains a box of long balloons, plus a skillchip for non-clowns to join the fun! Extra layer of safety so clowns at CentCom won't get to them." + cost = CARGO_CRATE_VALUE * 4 + contains = list( + /obj/item/storage/box/balloons, + /obj/item/skillchip/job/clown, + ) + crate_name = "long balloons kit" + crate_type = /obj/structure/closet/crate/wooden + discountable = SUPPLY_PACK_STD_DISCOUNTABLE diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index bf96acaccb6..236d94c39fa 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -195,6 +195,21 @@ acid = 80 wound = 15 +/obj/item/clothing/head/helmet/balloon + name = "balloon helmet" + desc = "A helmet made out of balloons. Its likes saw great usage in the Great Clown - Mime War. Surprisingly resistant to fire. Mimes were doing unspeakable things." + icon_state = "helmet_balloon" + inhand_icon_state = "helmet_balloon" + armor_type = /datum/armor/balloon + flags_inv = HIDEHAIR|HIDEEARS|HIDESNOUT + resistance_flags = FIRE_PROOF + dog_fashion = null + +/datum/armor/balloon + melee = 10 + fire = 60 + acid = 50 + /obj/item/clothing/head/helmet/toggleable/justice name = "helmet of justice" desc = "WEEEEOOO. WEEEEEOOO. WEEEEOOOO." diff --git a/code/modules/clothing/head/tophat.dm b/code/modules/clothing/head/tophat.dm index 26087ab6232..2affc4c63da 100644 --- a/code/modules/clothing/head/tophat.dm +++ b/code/modules/clothing/head/tophat.dm @@ -36,4 +36,13 @@ var/mob/living/basic/rabbit/bunbun = new(get_turf(magician)) bunbun.mob_try_pickup(magician, instant=TRUE) +/obj/item/clothing/head/hats/tophat/balloon + name = "balloon top-hat" + desc = "It's an colourful looking top-hat to match yout colourful personality." + icon_state = "balloon_tophat" + inhand_icon_state = "balloon_that" + throwforce = 0 + resistance_flags = FIRE_PROOF + dog_fashion = null + #undef RABBIT_CD_TIME diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 3232803052f..06aaaf2fff6 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -336,6 +336,40 @@ acid = 50 wound = 10 +/obj/item/clothing/suit/armor/balloon_vest + name = "balloon vest" + desc = "A vest made entirely from balloons, resistant to any evil forces a mime could throw at you, including electricity and fire. Just a strike with something sharp, though..." + icon_state = "balloon-vest" + inhand_icon_state = "balloon_armor" + blood_overlay_type = "armor" + armor_type = /datum/armor/balloon_vest + siemens_coefficient = 0 + strip_delay = 70 + equip_delay_other = 50 + +/datum/armor/balloon_vest + melee = 10 + laser = 10 + energy = 10 + fire = 60 + acid = 50 + +/obj/item/clothing/suit/armor/balloon_vest/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK, damage_type = BRUTE) + if(isitem(hitby)) + var/obj/item/item_hit = hitby + if(item_hit.sharpness) + pop() + + if(istype(hitby, /obj/projectile/bullet)) + pop() + + return ..() + +/obj/item/clothing/suit/armor/balloon_vest/proc/pop() + playsound(src, 'sound/effects/cartoon_pop.ogg', 50, vary = TRUE) + qdel(src) + + /obj/item/clothing/suit/armor/bulletproof name = "bulletproof armor" desc = "A Type III heavy bulletproof vest that excels in protecting the wearer against traditional projectile weaponry and explosives to a minor extent." diff --git a/code/modules/jobs/job_types/clown.dm b/code/modules/jobs/job_types/clown.dm index 607c7214d90..58e7ad829bc 100644 --- a/code/modules/jobs/job_types/clown.dm +++ b/code/modules/jobs/job_types/clown.dm @@ -56,6 +56,7 @@ /obj/item/reagent_containers/spray/waterflower = 1, /obj/item/food/grown/banana = 1, /obj/item/instrument/bikehorn = 1, + /obj/item/storage/box/balloons = 1, ) belt = /obj/item/modular_computer/pda/clown ears = /obj/item/radio/headset/headset_srv @@ -71,6 +72,7 @@ box = /obj/item/storage/box/survival/hug chameleon_extras = /obj/item/stamp/clown implants = list(/obj/item/implant/sad_trombone) + skillchips = list(/obj/item/skillchip/job/clown) /datum/outfit/job/clown/mod name = "Clown (MODsuit)" diff --git a/code/modules/library/skill_learning/job_skillchips/clown.dm b/code/modules/library/skill_learning/job_skillchips/clown.dm new file mode 100644 index 00000000000..3cd88ff7096 --- /dev/null +++ b/code/modules/library/skill_learning/job_skillchips/clown.dm @@ -0,0 +1,10 @@ +/obj/item/skillchip/job/clown + name = "B@L00NY skillchip" + desc = "This biochip contain several terabytes of uncannily religious, Honkmother praising guides on how to reshape balloons into silly animals." + auto_traits = list(TRAIT_BALLOON_SUTRA) + skill_name = "Balloon Sutra" + skill_description = "Learn the the ancient Honkmotherian arts of balloon-sutra." + skill_icon = "face-grin-tears" + activate_message = span_notice("Blessed wisdom of Honkmother enwraps you, and with it, governship upon form of balloonkind.") + deactivate_message = span_notice("'Remember, then, that true clownery requires freedom and willingness to bend, like ones of a floating balloon.'... Whatever that meant?") + diff --git a/code/modules/mod/mod_theme.dm b/code/modules/mod/mod_theme.dm index 88f697ccd48..a408be23b1f 100644 --- a/code/modules/mod/mod_theme.dm +++ b/code/modules/mod/mod_theme.dm @@ -891,6 +891,7 @@ /obj/item/grown/bananapeel, /obj/item/reagent_containers/spray/waterflower, /obj/item/instrument, + /obj/item/toy/balloon_animal, ) skins = list( "cosmohonk" = list( diff --git a/code/modules/mod/mod_types.dm b/code/modules/mod/mod_types.dm index 47f588eb80b..f0bca6b0980 100644 --- a/code/modules/mod/mod_types.dm +++ b/code/modules/mod/mod_types.dm @@ -212,6 +212,7 @@ /obj/item/mod/module/storage, /obj/item/mod/module/waddle, /obj/item/mod/module/bikehorn, + /obj/item/mod/module/balloon_advanced, ) /obj/item/mod/control/pre_equipped/traitor diff --git a/code/modules/mod/modules/modules_service.dm b/code/modules/mod/modules/modules_service.dm index b4870a84ec5..be71c621802 100644 --- a/code/modules/mod/modules/modules_service.dm +++ b/code/modules/mod/modules/modules_service.dm @@ -19,6 +19,31 @@ playsound(src, 'sound/items/bikehorn.ogg', 100, FALSE) drain_power(use_energy_cost) +///Advanced Balloon Blower - Blows a long balloon. +/obj/item/mod/module/balloon_advanced + name = "MOD advanced balloon blower module" + desc = "A relatively new piece of technology developed by finest clown engineers to make long balloons and balloon animals \ + at party-appropriate rate." + icon_state = "bloon" + module_type = MODULE_USABLE + complexity = 1 + use_energy_cost = DEFAULT_CHARGE_DRAIN * 0.5 + incompatible_modules = list(/obj/item/mod/module/balloon_advanced) + cooldown_time = 15 SECONDS + +/obj/item/mod/module/balloon_advanced/on_use() + . = ..() + if(!.) + return + if(!do_after(mod.wearer, 15 SECONDS, target = mod)) + return FALSE + mod.wearer.adjustOxyLoss(20) + playsound(src, 'sound/items/modsuit/inflate_bloon.ogg', 50, TRUE) + var/obj/item/toy/balloon/long/l_balloon = new(get_turf(src)) + mod.wearer.put_in_hands(l_balloon) + drain_power(use_energy_cost) + + ///Microwave Beam - Microwaves items instantly. /obj/item/mod/module/microwave_beam name = "MOD microwave beam module" diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm index e17b53da692..84dcb67233d 100644 --- a/code/modules/research/designs/misc_designs.dm +++ b/code/modules/research/designs/misc_designs.dm @@ -189,6 +189,17 @@ ) departmental_flags = DEPARTMENT_BITFLAG_SERVICE +/datum/design/water_balloon + name = "Water Balloon" + id = "water_balloon" + build_type = PROTOLATHE | AWAY_LATHE + materials = list(/datum/material/plastic =SMALL_MATERIAL_AMOUNT*5) + build_path = /obj/item/toy/waterballoon + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SERVICE + ) + departmental_flags = DEPARTMENT_BITFLAG_SERVICE + /datum/design/mesons name = "Optical Meson Scanners" desc = "Used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting condition." diff --git a/icons/mob/clothing/head/hats.dmi b/icons/mob/clothing/head/hats.dmi index 4183d5fa6cb..5e76ab78608 100644 Binary files a/icons/mob/clothing/head/hats.dmi and b/icons/mob/clothing/head/hats.dmi differ diff --git a/icons/mob/clothing/head/helmet.dmi b/icons/mob/clothing/head/helmet.dmi index de7ecf58fd1..317edb56796 100644 Binary files a/icons/mob/clothing/head/helmet.dmi and b/icons/mob/clothing/head/helmet.dmi differ diff --git a/icons/mob/clothing/suits/armor.dmi b/icons/mob/clothing/suits/armor.dmi index 4197c2453d4..90be12b694a 100644 Binary files a/icons/mob/clothing/suits/armor.dmi and b/icons/mob/clothing/suits/armor.dmi differ diff --git a/icons/mob/inhands/clothing/hats_lefthand.dmi b/icons/mob/inhands/clothing/hats_lefthand.dmi index 191c85cf482..1d6461fb39d 100644 Binary files a/icons/mob/inhands/clothing/hats_lefthand.dmi and b/icons/mob/inhands/clothing/hats_lefthand.dmi differ diff --git a/icons/mob/inhands/clothing/hats_righthand.dmi b/icons/mob/inhands/clothing/hats_righthand.dmi index 8038e7474ee..4d9710bf901 100644 Binary files a/icons/mob/inhands/clothing/hats_righthand.dmi and b/icons/mob/inhands/clothing/hats_righthand.dmi differ diff --git a/icons/mob/inhands/clothing/suits_lefthand.dmi b/icons/mob/inhands/clothing/suits_lefthand.dmi index a43756d743a..02b1e2cbff2 100644 Binary files a/icons/mob/inhands/clothing/suits_lefthand.dmi and b/icons/mob/inhands/clothing/suits_lefthand.dmi differ diff --git a/icons/mob/inhands/clothing/suits_righthand.dmi b/icons/mob/inhands/clothing/suits_righthand.dmi index da837fdd857..7dd047b7345 100644 Binary files a/icons/mob/inhands/clothing/suits_righthand.dmi and b/icons/mob/inhands/clothing/suits_righthand.dmi differ diff --git a/icons/mob/inhands/items/balloons_lefthand.dmi b/icons/mob/inhands/items/balloons_lefthand.dmi index cf51ac313e2..7fed45fc590 100644 Binary files a/icons/mob/inhands/items/balloons_lefthand.dmi and b/icons/mob/inhands/items/balloons_lefthand.dmi differ diff --git a/icons/mob/inhands/items/balloons_righthand.dmi b/icons/mob/inhands/items/balloons_righthand.dmi index 606f2007fd7..c1856b2260b 100644 Binary files a/icons/mob/inhands/items/balloons_righthand.dmi and b/icons/mob/inhands/items/balloons_righthand.dmi differ diff --git a/icons/mob/inhands/weapons/hammers_lefthand.dmi b/icons/mob/inhands/weapons/hammers_lefthand.dmi index 7f6985e1de5..5856bd8b0f8 100644 Binary files a/icons/mob/inhands/weapons/hammers_lefthand.dmi and b/icons/mob/inhands/weapons/hammers_lefthand.dmi differ diff --git a/icons/mob/inhands/weapons/hammers_righthand.dmi b/icons/mob/inhands/weapons/hammers_righthand.dmi index 2dd4f4b64c5..c6e8a0215ea 100644 Binary files a/icons/mob/inhands/weapons/hammers_righthand.dmi and b/icons/mob/inhands/weapons/hammers_righthand.dmi differ diff --git a/icons/obj/clothing/head/hats.dmi b/icons/obj/clothing/head/hats.dmi index b655dd17567..da4a30e9967 100644 Binary files a/icons/obj/clothing/head/hats.dmi and b/icons/obj/clothing/head/hats.dmi differ diff --git a/icons/obj/clothing/head/helmet.dmi b/icons/obj/clothing/head/helmet.dmi index 9587c72e64f..3bea00dcdc3 100644 Binary files a/icons/obj/clothing/head/helmet.dmi and b/icons/obj/clothing/head/helmet.dmi differ diff --git a/icons/obj/clothing/suits/armor.dmi b/icons/obj/clothing/suits/armor.dmi index d8826f6ff88..4fb7248dbd8 100644 Binary files a/icons/obj/clothing/suits/armor.dmi and b/icons/obj/clothing/suits/armor.dmi differ diff --git a/icons/obj/storage/box.dmi b/icons/obj/storage/box.dmi index 8b037860144..c0a327d7df6 100644 Binary files a/icons/obj/storage/box.dmi and b/icons/obj/storage/box.dmi differ diff --git a/icons/obj/toys/balloons.dmi b/icons/obj/toys/balloons.dmi index 0ed6f471bfb..96afdaea2c0 100644 Binary files a/icons/obj/toys/balloons.dmi and b/icons/obj/toys/balloons.dmi differ diff --git a/icons/obj/toys/toy.dmi b/icons/obj/toys/toy.dmi index 9ac61738fad..f53b0781f6e 100644 Binary files a/icons/obj/toys/toy.dmi and b/icons/obj/toys/toy.dmi differ diff --git a/icons/obj/weapons/hammer.dmi b/icons/obj/weapons/hammer.dmi index 965fd0b37ef..751e6267798 100644 Binary files a/icons/obj/weapons/hammer.dmi and b/icons/obj/weapons/hammer.dmi differ diff --git a/modular_nova/modules/aesthetics/storage/storage.dmi b/modular_nova/modules/aesthetics/storage/storage.dmi index a05ca493dd5..f236b59aeec 100644 Binary files a/modular_nova/modules/aesthetics/storage/storage.dmi and b/modular_nova/modules/aesthetics/storage/storage.dmi differ diff --git a/tgstation.dme b/tgstation.dme index fdfe3f18eea..85c8b3f50b1 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -4459,6 +4459,7 @@ #include "code\modules\library\skill_learning\skillchip.dm" #include "code\modules\library\skill_learning\job_skillchips\_job.dm" #include "code\modules\library\skill_learning\job_skillchips\chef.dm" +#include "code\modules\library\skill_learning\job_skillchips\clown.dm" #include "code\modules\library\skill_learning\job_skillchips\janitor.dm" #include "code\modules\library\skill_learning\job_skillchips\miner.dm" #include "code\modules\library\skill_learning\job_skillchips\psychologist.dm"