/* Toys! * Contains: * * Balloons * * Fake telebeacon * * Fake singularity * * Toy gun * * Toy crossbow * * Toy swords * * Toy bosun's whistle * * Toy mechs * * Snap pops * * Water flower * * Therapy dolls * * Toddler doll * * Inflatable duck * * Action figures * * Plushies * * Toy cult sword * * Ring bell * * Chess Pieces * * Stress ball */ /obj/item/toy icon = 'icons/obj/toy.dmi' item_icons = list( slot_l_hand_str = 'icons/mob/items/lefthand_toy.dmi', slot_r_hand_str = 'icons/mob/items/righthand_toy.dmi', ) throwforce = 0 throw_speed = 4 throw_range = 20 force = 0 drop_sound = 'sound/items/drop/gloves.ogg' pickup_sound = 'sound/items/pickup/gloves.ogg' /* * Water Balloons */ /obj/item/toy/waterballoon name = "water balloon" desc = "A translucent balloon. There's nothing in it." icon_state = "waterballoon-e" item_state = "waterballoon-e" drop_sound = 'sound/items/drop/rubber.ogg' pickup_sound = 'sound/items/pickup/rubber.ogg' /obj/item/toy/waterballoon/New() var/datum/reagents/R = new/datum/reagents(10) reagents = R R.my_atom = src /obj/item/toy/waterballoon/attack(mob/living/target_mob, mob/living/user, target_zone) return /obj/item/toy/waterballoon/afterattack(atom/A as mob|obj, mob/user as mob, proximity) if(!proximity) return if (istype(A, /obj/structure/reagent_dispensers/watertank) && get_dist(src,A) <= 1) A.reagents.trans_to_obj(src, 10) to_chat(user, SPAN_NOTICE("You fill the balloon with the contents of [A].")) src.desc = "A translucent balloon with some form of liquid sloshing around in it." src.update_icon() return /obj/item/toy/waterballoon/attackby(obj/item/attacking_item, mob/user) if(istype(attacking_item, /obj/item/reagent_containers/glass)) if(attacking_item.reagents) if(attacking_item.reagents.total_volume < 1) to_chat(user, "The [attacking_item] is empty.") else if(attacking_item.reagents.total_volume >= 1) if(attacking_item.reagents.has_reagent(/singleton/reagent/acid/polyacid, 1)) to_chat(user, "The acid chews through the balloon!") attacking_item.reagents.splash(user, reagents.total_volume) qdel(src) else src.desc = "A translucent balloon with some form of liquid sloshing around in it." to_chat(user, SPAN_NOTICE("You fill the balloon with the contents of [attacking_item].")) attacking_item.reagents.trans_to_obj(src, 10) src.update_icon() return TRUE /obj/item/toy/waterballoon/throw_impact(atom/hit_atom) if(src.reagents.total_volume >= 1) src.visible_message(SPAN_WARNING("\The [src] bursts!"),"You hear a pop and a splash.") src.reagents.touch_turf(get_turf(hit_atom)) for(var/atom/A in get_turf(hit_atom)) src.reagents.touch(A) src.icon_state = "burst" QDEL_IN(src, 5) return /obj/item/toy/waterballoon/update_icon() if(src.reagents.total_volume >= 1) icon_state = "waterballoon" else icon_state = "waterballoon-e" item_state = icon_state /* * Balloons */ #define BALLOON_NORMAL 0 #define BALLOON_BLOW 1 #define BALLOON_BURST 2 /obj/item/toy/balloon name = "balloon" desc_extended = "Thanks to the joint effort of the Research and Atmospherics teams, station enviroments have been set to allow balloons to float without helium. Look, it was the end of the month and we went under budget." drop_sound = 'sound/items/drop/rubber.ogg' pickup_sound = 'sound/items/pickup/rubber.ogg' w_class = WEIGHT_CLASS_HUGE var/datum/gas_mixture/air_contents = null var/status = 0 // 0 = normal, 1 = blow, 2 = burst /obj/item/toy/balloon/mechanics_hints(mob/user, distance, is_adjacent) . += ..() . += "You can fill it up with different gases using a tank." /obj/item/toy/balloon/attack_self(mob/user as mob) user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) if(user.a_intent == I_HELP) user.visible_message(SPAN_NOTICE("\The [user] pokes [src]!"), SPAN_NOTICE("You poke [src]!")) else if (user.a_intent == I_HURT) user.visible_message(SPAN_WARNING("\The [user] punches [src]!"), SPAN_WARNING("You punch [src]!")) else if (user.a_intent == I_GRAB) if(prob(66)) user.visible_message(SPAN_WARNING("\The [user] attempts to pop [src]!"), SPAN_WARNING("You attempt to pop [src]!")) else user.visible_message(SPAN_WARNING("\The [user] pops [src]!"), SPAN_WARNING("You pop [src]!")) burst() else user.visible_message(SPAN_NOTICE("\The [user] lightly bats the [src]."), SPAN_NOTICE("You lightly bat the [src].")) /obj/item/toy/balloon/update_icon() switch(status) if(BALLOON_BURST) if(("[initial(icon_state)]_burst") in icon_states(icon)) icon_state = "[initial(icon_state)]_burst" item_state = icon_state else qdel(src) // Just qdel it if it doesn't have a burst state. if(BALLOON_BLOW) if(("[initial(icon_state)]_blow") in icon_states(icon)) //Only give blow icon_state if it has one. For those who can't be bothered to sprite. (Also a catch to prevent invisible sprites.) icon_state = "[initial(icon_state)]_blow" update_held_icon() /obj/item/toy/balloon/proc/blow(obj/item/tank/T) if(status == BALLOON_BURST) return else src.air_contents = T.remove_air_volume(3) status = BALLOON_BLOW update_icon() /obj/item/toy/balloon/proc/burst() playsound(src, 'sound/weapons/gunshot/gunshot1.ogg', 100, 1) status = BALLOON_BURST update_icon() if(air_contents) loc.assume_air(air_contents) /obj/item/toy/balloon/ex_act(severity) burst() switch(severity) if(1) qdel(src) if(2) if(prob(50)) qdel(src) /obj/item/toy/balloon/bullet_act(obj/projectile/hitting_projectile, def_zone, piercing_hit) . = ..() if(. != BULLET_ACT_HIT) return . burst() /obj/item/toy/balloon/fire_act(temperature, volume) . = ..() if(temperature > T0C+100) burst() return /obj/item/toy/balloon/attackby(obj/item/attacking_item, mob/user) if(attacking_item.can_puncture()) burst() return TRUE /obj/item/toy/balloon/latex desc = "Leaves a starchy taste in your mouth after blowing into it." icon_state = "latexballoon" item_state = "latexballoon" /obj/item/toy/balloon/latex/nitrile desc = "I hope you aren't going to re-use these for medical purposes." icon_state = "nitrileballoon" item_state = "nitrileballoon" /obj/item/toy/balloon/syndicate name = "'criminal' balloon" desc = "Across the balloon is printed: \"FUK CAPITALISM!11!\"" icon_state = "syndballoon" item_state = "syndballoon" /obj/item/toy/balloon/nanotrasen name = "'motivational' balloon" desc = "Across the balloon is printed: \"Man, I love corporate soooo much. I use only brand name products. You have NO idea.\"" icon_state = "ntballoon" item_state = "ntballoon" /obj/item/toy/balloon/fellowship name = "fellowship balloon" desc = "Across the balloon is printed: \"Fellowship R Friends!\"" icon_state = "fellowshipballoon" item_state = "fellowshipballoon" /obj/item/toy/balloon/fellowshiphead name = "fellowship head balloon" desc = "Across the balloon is printed: \"Follow Fellows Forwards With The Fellowship!\"" icon_state = "fellowshipheadballoon" item_state = "fellowshipheadballoon" /obj/item/toy/balloon/contender name = "contender balloon" desc = "Across the balloon is printed: \"Contenders R Cool!\"" icon_state = "contenderballoon" item_state = "contenderballoon" /obj/item/toy/balloon/contenderhead name = "contender head balloon" desc = "Across the balloon is printed: \"Converge With Comrades in the Contenders!\"" icon_state = "contenderheadballoon" item_state = "contenderheadballoon" /obj/item/toy/balloon/bat name = "giant bat balloon" desc = "A large, kitschy balloon in the shape of a spooky bat with orange eyes." desc_extended = "There's a tag that reads: \"Apparition Halloween LLC.\"" icon_state = "batballoon" /obj/item/toy/balloon/ghost name = "giant ghost balloon" desc = "Oh no, it's a ghost! Oh wait, it's just a kitschy balloon. Phew!" desc_extended = "There's a tag that reads: \"Apparition Halloween LLC.\"" icon_state = "ghostballoon" /obj/item/toy/balloon/heart/red name = "red heart balloon" desc = "A big red balloon in a traditional heart shape. Represents love, not medical work!" icon_state = "heartballoonred" /obj/item/toy/balloon/heart/pink name = "pink heart balloon" desc = "A big pink balloon in a traditional heart shape. Represents love, not medical work!" icon_state = "heartballoonpink" /obj/item/toy/balloon/color /// To color it, VV the 'color' var with a hex color code with the # included. desc = "It's a plain little balloon. Comes in many colors!" icon_state = "colorballoon" item_state = "colorballoon" build_from_parts = TRUE worn_overlay = "string" randpixel = 5 /obj/item/toy/balloon/color/Initialize() . = ..() if(build_from_parts) color = pick(COLOR_BLUE, COLOR_RED, COLOR_PURPLE, COLOR_BROWN, COLOR_GREEN, COLOR_CYAN, COLOR_YELLOW) update_icon() randpixel_xy() /obj/item/toy/balloon/color/update_icon() // Only color the balloon, not the string. ..() if(status == BALLOON_BURST) worn_overlay = null CutOverlays() if(worn_overlay) AddOverlays(overlay_image(icon, "[initial(icon_state)]_[worn_overlay]", flags=RESET_COLOR)) #undef BALLOON_NORMAL #undef BALLOON_BLOW #undef BALLOON_BURST /* * Fake telebeacon */ /obj/item/toy/blink name = "electronic blink toy game" desc = "Blink. Blink. Blink. Ages 8 and up." icon = 'icons/obj/radio.dmi' icon_state = "beacon" item_state = "signaler" contained_sprite = TRUE /* * Fake singularity */ /obj/item/toy/spinningtoy name = "gravitational singularity" desc = "\"Singulo\" brand spinning toy." icon = 'icons/obj/singularity.dmi' icon_state = "singularity_s1" /* * Comic books */ /obj/item/toy/comic name = "comic book" desc = "A magazine presenting a fictional story through a sequence of images. Perfect for those long, boring shifts." w_class = WEIGHT_CLASS_SMALL icon = 'icons/obj/library.dmi' contained_sprite = TRUE icon_state = "comic" item_state = "comic" drop_sound = 'sound/items/drop/paper.ogg' pickup_sound = 'sound/items/pickup/paper.ogg' /obj/item/toy/comic/inspector name = "inspector 404 manga" desc = "Inspector 404 follows the adventures of the titular I404, a shell inspector from Konyang. This issue, #67, follows the \ 404, also known as Kyung-Sun's quest to bring down the corrupt Superintendent Hayashi." icon_state = "comic_inspector" item_state = "comic_inspector" /obj/item/toy/comic/stormman name = "stormman manga" desc = "Stormman, often stylized as STORMMAN! is one of Konyang's most beloved anime series, following a masked superhero named Stormman \ who has the power to harness the weather to defend his homeworld while keeping his secret identity. Since its release, all kinds of merchandise \ have been made, including a conversion of the show to a paperback manga." icon_state = "comic_stormman" item_state = "comic_stormman" /obj/item/toy/comic/outlandish_tales name = "outlandish tales magazine" desc = "A magazine specialized in publishing Tajaran Otherworldly Literature stories. The periodical magazine features texts submitted by amateur and established writers alike. \ Since it is printed using cheap, recycled paper, outlandish tales is sold for a couple of credits on the streets of Little Adhomai. The magazine also has a section dedicated to \ exploring the urban legends and mysteries of Mendell City." desc_extended = "Influenced by recent events and the growing interest in urban legends, Little Adhomai became the birthplace of Tajaran Otherworldly Literature. This literary genre combines \ aspects of fantasy, horror, and speculative fiction alongside Adhomian paranormal elements, frequently reimagining mythological creatures and events. Tajaran Otherworldly texts are usually \ published in magazines or on extranet sites." icon_state = "comicoutlandish" item_state = "comic" /obj/item/toy/comic/azmarian name = "az'marian comic" desc = "A comic book series revolving around a superhero from Az'Mar, popular in the New Kingdom." icon_state = "comicazmarian" item_state = "comic" /obj/item/toy/comic/azmarian/issue_1 desc_extended = "Issue 1 - The Az'Marian Landing! - In this issue, the would-be hero departs from Az'Mar and lands in a war-torn \ town in the outskirts of the Kingdom, witnessing the townspeople terrorised by a Zhan'Khazan maniacal terrorist. After mutilating \ his body with alien technology and even cutting off his own arms to replace with robotic equivalents, the cybernetically enhanced \ Corporal Khara'zan will not let his reign of terror be stopped easily. Will the visitor from Az'mar manage to stand in his way and prevail?" /obj/item/toy/comic/azmarian/issue_2 desc_extended = "Issue 2 - The Road Towards A Dark Future - In this issue, the Az'Marian meets the local nobility whom he had saved from \ terror, learning that the Kingdom is threatened on all fronts. The superhero embarks on a journey through bandit-infested lands towards the \ headquarters of evil, meeting an unlikely ally and his band of friends. However, all is not what it seems, and the superhero will soon face \ a threat that once welcomed him with open arms. A treacherous plot, an ally destined by S'rendarr, and the darkness encroaching; the superhero \ faces the modern threat of depraved Tajara." /obj/item/toy/comic/azmarian/issue_3 desc_extended = "Issue 3 - The Swamp Debacle - In this issue, the Az'Marian and his loyal but dim-witted sidekick Murr'zhul reach a poisonous \ swamp polluted by waste-producing factories. A chemical-obsessed scientist looks to experiment and find the perfect poison for his evil deeds, \ killing the surrounding nature and turning residents sickly. A lumbering creature hiding in the swamp caves, a mad researcher about to find the \ perfect toxin, and the duo seeking to halt his plans. Will they find a way to shut him down?" /obj/item/toy/comic/azmarian/issue_4 desc_extended = "Issue 4 - The Den of Evil! - In this issue, the hero and his loyal but dim-witted sidekick Murr'zhul reach the stronghold of \ the retreating Corporal Khara'zan. The superhero uncovers a sinister plot orchestrated by the Corporal's superior to turn all of the local living \ beings into cyborgs. The leader, Director Shul'tyz, is not yet aware of the Az'Marian's presence, and the time is ripe. Met with a slumbering horde \ of cybernetic ha'rrons, schlorrgos and even Tajara, the superhero encounters a threat that will truly test his mettle." /obj/item/toy/comic/azmarian/issue_5 desc_extended = "Issue 5 - Path to Recovery - In this issue, the hero, who has faced a successful confrontation with Director Shul'tyz, managed to \ free the local populace of cybernetic mind control, but at a heavy price. The syringe that was shot into him started coursing through his veins, preventing \ him from using his powers in a rapidly degrading state. His loyal sidekick Murr'zhul helps bring the hero to the capital of the ancient Kingdom to seek aid. \ Met with internal politics, a mixed reception, sinister plots and a meeting with the King, will the hero find a way to recover from the illness that plagues him?" /obj/item/toy/comic/azmarian/issue_6 desc_extended = "Issue 6 - The Pilgrimage - Steppe Trouble! - In this issue, the hero and his loyal but dim-witted sidekick Murr'zhul embark on a journey \ to a sacred shrine in the mountains built by the early Ancient Tajara. Having received a blessing to prevent his state from degrading from the local priests, \ the hero has little time to waste before the blessing wanes. A meeting with wandering nomads, an audience with their ruler, and a perilous journey across \ the steppes leads the Az'Marian to face many decisions and challenges as the reality of the nomads comes to light. Deprived of his powers, will he and his \ trusted Hharar side-kick manage to reach the mountains?" /obj/item/toy/comic/azmarian/issue_7 desc_extended = "Issue 7 - The Pilgrimage Pt. 2 - Mountain Survival - In this issue, the hero and his loyal but dim-witted sidekick Murr'zhul reach \ the mountains that contain the ancient shrine of the Suns, where he would be able to recover from his illness caused by Director Shul'tyz. Trailed \ by Sham'tyrs, facing freezing winds and snow, the two will trek to reach the shrine in hope of recovery. Bandits encampments, a village in need of help, \ a chance encounter with the S'Mara, and a shape-shifting spy amongst the Sham'tyrs, will the heroes make their way in one piece?" /obj/item/toy/comic/azmarian/issue_8 desc_extended = "Issue 8 - The Shrine - In this issue, the hero and his loyal but dim-witted sidekick Murr'zhul meet the Parivara at the ancient shrine. \ Tended to by the Sun Sister with the blessing of Messa, the Az'Marian manages to recover from his affliction over the course of a week. He learns of an \ evil plan staged by a group of Cae'rrin living in caves nearby to desecrate the shrine and eat its attendants, and the two embark on a journey to put a \ stop to this plan. Already aware of the Az'Marian's presence from their spy, they begin to set up traps and occult rituals to prevent him from even reaching \ the caves. Forces of Raskara, shape-shifting creatures, dastardly traps and true evil lurking within, the Az'Marian and his sidekick will have to use their \ newly regained powers to their fullest." /obj/item/toy/comic/witchfinder name = "Witchfinder novel" desc = "A popular genre of Dominian mystery literature, glorifying the Tribunal Investigations Constabulary and the work they do in \ defending the souls of the people of the Empire." desc_extended = "Popular throughout the empire, witchfinder novels can range from schlock aimed at younger audiences to monstrous tomes dedicated to the \ purportedly real-life escapades of existing witchfinders. No matter their status as educational fiction or fact, every one has two things in common: the \ common rituals of the Constabulary, such as exorcisms and witchfindings, and a carefully-screened dose of indoctrination into the Moroz Holy Tribunal. Popular \ authors of witchfinder novels, such as Novi Jadran's Andrija Jurina, even travel abroad as honored servants of His Imperial Majesty Boleslaw Keeser, both to \ promote Dominian arts among their foreign partners and to proselytize their state religion to eager masses." icon_state = "witchfindernovel" item_state = "book" /* * Magazines */ /obj/item/toy/comic/magazine/horticulturetoday name = "horticulture today! magazine" desc = "A staple publication of all things horticulture." desc_extended = "One part magazine, one part scientific journal, Horticulture Today! has been the staple source for horticulture news for the last 150 years. Its found \ itself in every unconnected station, frontier colony, and doctors office across the spur. The magazine's fame largely comes from its writing, maintaining a perfect blend \ of entertaining commentary and nuanced summaries of recent discoveries." icon_state = "horticulture1" item_state = "horticulture" /obj/item/toy/comic/magazine/horticulturetoday/issue1 desc = "A staple publication of all things horticulture. This issue is about sunflowers." icon_state = "horticulture1" /obj/item/toy/comic/magazine/horticulturetoday/issue2 desc = "A staple publication of all things horticulture. This issue is about root systems." icon_state = "horticulture2" /obj/item/toy/comic/magazine/horticulturetoday/issue3 desc = "A staple publication of all things horticulture. This issue is about garden flowers." icon_state = "horticulture3" /obj/item/toy/comic/magazine/horticulturetoday/issue4 desc = "A staple publication of all things horticulture. This issue is about wild flowers." icon_state = "horticulture4" /obj/item/toy/comic/magazine/horticulturetoday/issue5 desc = "A staple publication of all things horticulture. This issue is about tomatoes of all kinds." icon_state = "horticulture5" /obj/item/toy/comic/magazine/horticulturetoday/issue6 desc = "A staple publication of all things horticulture. This issue is about the genus Allium. Everything from Onions to Leeks." icon_state = "horticulture6" // // Toy Crossbows // /obj/item/toy/crossbow name = "foam dart crossbow" desc = "A foam dart crossbow." icon = 'icons/obj/guns/crossbow.dmi' icon_state = "crossbow" item_state = "crossbow" slot_flags = SLOT_BELT | SLOT_HOLSTER drop_sound = 'sound/items/drop/gun.ogg' pickup_sound = 'sound/items/pickup/gun.ogg' contained_sprite = TRUE w_class = WEIGHT_CLASS_SMALL attack_verb = list("attacked", "struck", "hit") var/dart_count = 5 /obj/item/toy/crossbow/feedback_hints(mob/user, distance, is_adjacent) . += ..() if(distance <= 2 && dart_count) . += "\The [src] is loaded with [dart_count] foam dart\s." /obj/item/toy/crossbow/attackby(obj/item/attacking_item, mob/user) if(istype(attacking_item, /obj/item/toy/ammo/crossbow)) if(dart_count <= 4) user.drop_from_inventory(attacking_item, src) qdel(attacking_item) dart_count++ to_chat(user, SPAN_NOTICE("You load the foam dart into \the [src].")) else to_chat(usr, SPAN_WARNING("\The [src] is already fully loaded.")) /obj/item/toy/crossbow/afterattack(atom/target, mob/user, flag) if(!isturf(target.loc) || target == user) return if(flag) return if(locate(/obj/structure/table) in get_turf(src)) return else if(dart_count) var/turf/trg = get_turf(target) var/obj/effect/foam_dart_dummy/D = new/obj/effect/foam_dart_dummy(get_turf(src)) dart_count-- D.icon_state = "foamdart" D.name = "foam dart" playsound(src, 'sound/items/syringeproj.ogg', 50, TRUE) for(var/i = 0, i < 6, i++) if (D) if(D.loc == trg) break step_towards(D, trg) for(var/mob/living/M in D.loc) if(!istype(M, /mob/living)) continue if(M == user) continue for(var/mob/O in viewers(world.view, D)) O.show_message(SPAN_WARNING("\The [M] was hit by the foam dart!"), 1) new /obj/item/toy/ammo/crossbow(M.loc) qdel(D) return for(var/atom/A in D.loc) if(A == user) continue if(A.density) new /obj/item/toy/ammo/crossbow(A.loc) qdel(D) sleep(1) spawn(10) if(D) new /obj/item/toy/ammo/crossbow(D.loc) qdel(D) return /obj/item/toy/crossbow/attack(mob/living/target_mob, mob/living/user, target_zone) src.add_fingerprint(user) if (src.dart_count > 0 && target_mob.lying) // Check for(var/mob/O in viewers(target_mob, null)) if(O.client) O.show_message(SPAN_NOTICE("\The [user] casually lines up a shot with [target_mob]'s head and pulls the trigger."), 1) O.show_message(SPAN_WARNING("\The [target_mob] was hit in the head by the foam dart!"), 1) playsound(src, 'sound/items/syringeproj.ogg', 50, TRUE) new /obj/item/toy/ammo/crossbow(target_mob.loc) src.dart_count-- return /obj/item/toy/ammo/crossbow name = "foam dart" desc = "A foam dart." icon = 'icons/obj/toy.dmi' icon_state = "foamdart" w_class = WEIGHT_CLASS_TINY slot_flags = SLOT_EARS drop_sound = 'sound/items/drop/food.ogg' pickup_sound = 'sound/items/pickup/food.ogg' /obj/effect/foam_dart_dummy name = null desc = null icon = 'icons/obj/toy.dmi' icon_state = null anchored = TRUE density = FALSE /* * Toy swords */ /obj/item/toy/sword name = "toy sword" desc = "A cheap, plastic replica of a blue energy sword. Realistic sounds and colors! Ages 8 and up." icon = 'icons/obj/weapons.dmi' icon_state = "sword0" item_state = "sword0" item_icons = list( slot_l_hand_str = 'icons/mob/items/weapons/lefthand_energy.dmi', slot_r_hand_str = 'icons/mob/items/weapons/righthand_energy.dmi', ) drop_sound = 'sound/items/drop/gun.ogg' pickup_sound = 'sound/items/pickup/gun.ogg' var/active = 0.0 var/colorvar = "blue" var/last_active = 0 w_class = WEIGHT_CLASS_SMALL attack_verb = list("attacked", "struck", "hit") /obj/item/toy/sword/attack_self(mob/user as mob) if(last_active <= world.time - 20) last_active = world.time src.active = !( src.active ) if(src.active) to_chat(user, SPAN_NOTICE("You extend the plastic blade with a quick flick of your wrist.")) playsound(user, 'sound/weapons/saberon.ogg', 50, 1) src.icon_state = "sword[colorvar]" src.item_state = "sword[colorvar]" src.w_class = WEIGHT_CLASS_BULKY else to_chat(user, SPAN_NOTICE("You push the plastic blade back down into the handle.")) playsound(user, 'sound/weapons/saberoff.ogg', 50, 1) src.icon_state = "sword0" src.item_state = "sword0" src.w_class = WEIGHT_CLASS_SMALL if(istype(user,/mob/living/carbon/human)) var/mob/living/carbon/human/H = user H.update_inv_l_hand() H.update_inv_r_hand() src.add_fingerprint(user) return /obj/item/toy/sword/Initialize() . = ..() colorvar = pick("red","blue","green","purple") desc = "A cheap, plastic replica of a [colorvar] energy sword. Realistic sounds and colors! Ages 8 and up." /obj/item/toy/katana name = "replica katana" desc = "A cheap plastic katana that luckily isn't sharp enough to accidentally cut your floor length braid. Woefully underpowered in D20." contained_sprite = TRUE icon = 'icons/obj/sword.dmi' icon_state = "katana" item_state = "katana" drop_sound = 'sound/items/drop/gun.ogg' pickup_sound = SFX_PICKUP_SWORD equip_sound = SFX_EQUIP_SWORD obj_flags = OBJ_FLAG_CONDUCTABLE slot_flags = SLOT_BELT | SLOT_BACK force = 11 throwforce = 5 w_class = WEIGHT_CLASS_NORMAL attack_verb = list("attacked", "slashed", "stabbed", "sliced") /* * Snap pops */ /obj/item/toy/snappop name = "snap pop" desc = "Wow!" icon = 'icons/obj/toy.dmi' icon_state = "snappop" w_class = WEIGHT_CLASS_TINY drop_sound = 'sound/items/drop/food.ogg' pickup_sound = 'sound/items/pickup/food.ogg' /obj/item/toy/snappop/Initialize() . = ..() var/static/list/loc_connections = list( COMSIG_ATOM_ENTERED = PROC_REF(on_entered), ) AddElement(/datum/element/connect_loc, loc_connections) /obj/item/toy/snappop/attack_self(mob/user) user.drop_from_inventory(src) user.visible_message(SPAN_WARNING("\The [user] throws \the [src] at their feet!"), SPAN_NOTICE("You throw \the [src] at your feet.")) do_pop() /obj/item/toy/snappop/throw_impact(atom/hit_atom) ..() do_pop() /obj/item/toy/snappop/proc/on_entered(datum/source, atom/movable/arrived, atom/old_loc, list/atom/old_locs) if((ishuman(arrived))) //i guess carp and shit shouldn't set them off var/mob/living/carbon/human/M = arrived if(M.shoes?.item_flags & ITEM_FLAG_LIGHT_STEP) return if(M.m_intent == M_RUN) to_chat(M, SPAN_WARNING("You step on the snap pop!")) do_pop() /obj/item/toy/snappop/proc/do_pop() spark(src, 3, GLOB.alldirs) new /obj/effect/decal/cleanable/ash(get_turf(src)) visible_message(SPAN_WARNING("\The [src] explodes!"), SPAN_WARNING("You hear a snap!")) playsound(get_turf(src), 'sound/effects/snap.ogg', 50, TRUE) qdel(src) /obj/item/toy/snappop/syndi/antagonist_hints(mob/user, distance, is_adjacent) . += ..() . += "These snap pops have an extra compound added that will deploy a tiny smokescreen when snapped." /obj/item/toy/snappop/syndi/do_pop() var/datum/effect/effect/system/smoke_spread/smoke = new /datum/effect/effect/system/smoke_spread smoke.set_up(2, 0, get_turf(src)) smoke.attach(get_turf(src)) smoke.start() ..() /* * Water flower */ //moved to spray.dm /* * Bosun's whistle */ /obj/item/toy/bosunwhistle name = "bosun's whistle" desc = "A genuine Admiral Krush Bosun's Whistle, for the aspiring ship's captain! Suitable for ages 8 and up, do not swallow." icon_state = "bosunwhistle" drop_sound = 'sound/items/drop/card.ogg' pickup_sound = 'sound/items/pickup/card.ogg' var/cooldown = 0 w_class = WEIGHT_CLASS_TINY slot_flags = SLOT_EARS /obj/item/toy/bosunwhistle/attack_self(mob/user as mob) if(cooldown < world.time - 35) to_chat(user, SPAN_NOTICE("You blow on [src], creating an ear-splitting noise!")) playsound(user, 'sound/misc/boatswain.ogg', 20, 1) cooldown = world.time /* * Mech prizes */ /obj/item/toy/mech icon_state = "ripleytoy" var/cooldown = 0 w_class = WEIGHT_CLASS_SMALL drop_sound = 'sound/mecha/mechstep.ogg' /obj/item/toy/mech/attack_self(mob/user) var/turf/user_turf = get_turf(user) user.drop_from_inventory(src, user_turf) new /mob/living/simple_animal/hostile/mech(user_turf, src) /obj/item/toy/mech/ripley name = "toy ripley" desc = "Mini-Mecha action figure! Collect them all! 1/11." /obj/item/toy/mech/fireripley name = "toy firefighting ripley" desc = "Mini-Mecha action figure! Collect them all! 2/11." icon_state = "fireripleytoy" /obj/item/toy/mech/deathripley name = "toy deathsquad ripley" desc = "Mini-Mecha action figure! Collect them all! 3/11." icon_state = "deathripleytoy" /obj/item/toy/mech/gygax name = "toy gygax" desc = "Mini-Mecha action figure! Collect them all! 4/11." icon_state = "gygaxtoy" /obj/item/toy/mech/durand name = "toy durand" desc = "Mini-Mecha action figure! Collect them all! 5/11." icon_state = "durandprize" /obj/item/toy/mech/honk name = "toy H.O.N.K." desc = "Mini-Mecha action figure! Collect them all! 6/11." icon_state = "honkprize" /obj/item/toy/mech/marauder name = "toy marauder" desc = "Mini-Mecha action figure! Collect them all! 7/11." icon_state = "marauderprize" /obj/item/toy/mech/seraph name = "toy seraph" desc = "Mini-Mecha action figure! Collect them all! 8/11." icon_state = "seraphprize" /obj/item/toy/mech/mauler name = "toy mauler" desc = "Mini-Mecha action figure! Collect them all! 9/11." icon_state = "maulerprize" /obj/item/toy/mech/odysseus name = "toy odysseus" desc = "Mini-Mecha action figure! Collect them all! 10/11." icon_state = "odysseusprize" /obj/item/toy/mech/phazon name = "toy phazon" desc = "Mini-Mecha action figure! Collect them all! 11/11." icon_state = "phazonprize" /* * Action figures */ /obj/item/toy/figure name = "completely glitched action figure" desc = "A \"Space Life\" brand... wait, what the hell is this thing? It seems to be requesting the sweet release of death." icon_state = "glitched" w_class = WEIGHT_CLASS_TINY drop_sound = 'sound/items/drop/accessory.ogg' pickup_sound = 'sound/items/pickup/accessory.ogg' /obj/item/toy/figure/cmo name = "chief medical officer action figure" desc = "A \"Space Life\" brand chief medical officer action figure." icon_state = "cmo" /obj/item/toy/figure/assistant name = "assistant action figure" desc = "A \"Space Life\" brand assistant action figure." icon_state = "assistant" /obj/item/toy/figure/atmos name = "atmospheric technician action figure" desc = "A \"Space Life\" brand atmospheric technician action figure." icon_state = "atmos" /obj/item/toy/figure/bartender name = "bartender action figure" desc = "A \"Space Life\" brand bartender action figure." icon_state = "bartender" /obj/item/toy/figure/borg name = "cyborg action figure" desc = "A \"Space Life\" brand cyborg action figure." icon_state = "borg" /obj/item/toy/figure/gardener name = "gardener action figure" desc = "A \"Space Life\" brand gardener action figure." icon_state = "botanist" /obj/item/toy/figure/captain name = "captain action figure" desc = "A \"Space Life\" brand captain action figure." icon_state = "captain" /obj/item/toy/figure/cargotech name = "cargo technician action figure" desc = "A \"Space Life\" brand cargo technician action figure." icon_state = "cargotech" /obj/item/toy/figure/ce name = "chief engineer action figure" desc = "A \"Space Life\" brand chief engineer action figure." icon_state = "ce" /obj/item/toy/figure/chaplain name = "chaplain action figure" desc = "A \"Space Life\" brand chaplain action figure." icon_state = "chaplain" /obj/item/toy/figure/chef name = "chef action figure" desc = "A \"Space Life\" brand chef action figure." icon_state = "chef" /obj/item/toy/figure/chemist name = "Chemist action figure" desc = "A \"Space Life\" brand chemist action figure." icon_state = "chemist" /obj/item/toy/figure/clown name = "clown action figure" desc = "A \"Space Life\" brand clown action figure." icon_state = "clown" /obj/item/toy/figure/corgi name = "corgi action figure" desc = "A \"Space Life\" brand corgi action figure." icon_state = "ian" /obj/item/toy/figure/detective name = "detective action figure" desc = "A \"Space Life\" brand detective action figure." icon_state = "detective" /obj/item/toy/figure/dsquad name = "space commando action figure" desc = "A \"Space Life\" brand space commando action figure." icon_state = "dsquad" /obj/item/toy/figure/engineer name = "engineer action figure" desc = "A \"Space Life\" brand engineer action figure." icon_state = "engineer" /obj/item/toy/figure/geneticist name = "geneticist action figure" desc = "A \"Space Life\" brand geneticist action figure, which was recently dicontinued." icon_state = "geneticist" /obj/item/toy/figure/hop name = "head of personnel action figure" desc = "A \"Space Life\" brand head of personnel action figure." icon_state = "hop" /obj/item/toy/figure/hos name = "head of security action figure" desc = "A \"Space Life\" brand head of security action figure." icon_state = "hos" /obj/item/toy/figure/qm name = "quartermaster action figure" desc = "A \"Space Life\" brand quartermaster action figure." icon_state = "qm" /obj/item/toy/figure/janitor name = "janitor action figure" desc = "A \"Space Life\" brand janitor action figure." icon_state = "janitor" /obj/item/toy/figure/agent name = "internal affairs agent action figure" desc = "A \"Space Life\" brand internal affairs agent action figure." icon_state = "agent" /obj/item/toy/figure/librarian name = "librarian action figure" desc = "A \"Space Life\" brand librarian action figure." icon_state = "librarian" /obj/item/toy/figure/journalist name = "journalist action figure" desc = "A \"Space Life\" brand librarian action figure. The word 'librarian' on the tag is scratched out with marker, and 'journalist' is written in its place." icon_state = "librarian" /obj/item/toy/figure/md name = "physician action figure" desc = "A \"Space Life\" brand physician action figure." icon_state = "md" /obj/item/toy/figure/mime name = "mime action figure" desc = "A \"Space Life\" brand mime action figure." icon_state = "mime" /obj/item/toy/figure/miner name = "shaft miner action figure" desc = "A \"Space Life\" brand shaft miner action figure." icon_state = "miner" /obj/item/toy/figure/ninja name = "space ninja action figure" desc = "A \"Space Life\" brand space ninja action figure." icon_state = "ninja" /obj/item/toy/figure/wizard name = "wizard action figure" desc = "A \"Space Life\" brand wizard action figure." icon_state = "wizard" /obj/item/toy/figure/rd name = "research director action figure" desc = "A \"Space Life\" brand research director action figure." icon_state = "rd" /obj/item/toy/figure/roboticist name = "roboticist action figure" desc = "A \"Space Life\" brand roboticist action figure." icon_state = "roboticist" /obj/item/toy/figure/scientist name = "scientist action figure" desc = "A \"Space Life\" brand scientist action figure." icon_state = "scientist" /obj/item/toy/figure/syndie name = "doom operative action figure" desc = "A \"Space Life\" brand doom operative action figure." icon_state = "syndie" /obj/item/toy/figure/secofficer name = "security officer action figure" desc = "A \"Space Life\" brand security officer action figure." icon_state = "secofficer" /obj/item/toy/figure/warden name = "warden action figure" desc = "A \"Space Life\" brand warden action figure." icon_state = "warden" /obj/item/toy/figure/psychologist name = "psychologist action figure" desc = "A \"Space Life\" brand psychologist action figure." icon_state = "psychologist" /obj/item/toy/figure/paramedic name = "paramedic action figure" desc = "A \"Space Life\" brand paramedic action figure." icon_state = "paramedic" /obj/item/toy/figure/ert name = "emergency response team commander action figure" desc = "A \"Space Life\" brand emergency response team commander action figure." icon_state = "ert" /* * Therapy Dolls */ /obj/item/toy/plushie/therapy name = "therapy doll" desc = "A toy for therapeutic and recreational purposes. This one is in red." icon = 'icons/obj/toy.dmi' icon_state = "therapyred" item_state = "therapyred" var/active = 0.0 var/colorvar = "red" w_class = WEIGHT_CLASS_TINY /obj/item/toy/plushie/therapy/Initialize() . = ..() colorvar = pick("red","orange","yellow","green","blue","purple") icon_state = "therapy[colorvar]" item_state = "egg_[colorvar]" desc = "A toy for therapeutic and recreational purposes. This one is in [colorvar]." /* * Plushies */ /obj/item/toy/plushie name = "generic small plush" desc = "A very generic small plushie. It seems to not want to exist." icon_state = "nymphplushie" drop_sound = 'sound/items/drop/plushie.ogg' pickup_sound = 'sound/items/pickup/plushie.ogg' var/phrase = "Hewwo!" /// defines what sound is played when poking the plushie (using it inhand on disarm intent). var/poke_sound = 'sound/items/drop/plushie.ogg' ///A cooldown to stop the poke sound being spammed. var/poke_cooldown = 0 /obj/item/toy/plushie/attack_self(mob/user as mob) if(poke_cooldown > world.time) return poke_cooldown = world.time + 2 SECONDS if(user.a_intent == I_HELP) user.visible_message(SPAN_NOTICE("\The [user] hugs [src]!"), SPAN_NOTICE("You hug [src]!")) else if (user.a_intent == I_HURT) user.visible_message(SPAN_WARNING("\The [user] punches [src]!"), SPAN_WARNING("You punch [src]!")) else if (user.a_intent == I_GRAB) user.visible_message(SPAN_WARNING("\The [user] attempts to strangle [src]!"), SPAN_WARNING("You attempt to strangle [src]!")) else user.visible_message(SPAN_NOTICE("\The [user] pokes the [src]."), SPAN_NOTICE("You poke the [src].")) playsound(src, poke_sound, 25, 0) visible_message("[src] says, \"[phrase]\"") //Large plushies. /obj/item/toy/plushie/ian name = "plush corgi" desc = "A plushie of an adorable corgi! Don't you just want to hug it and squeeze it and call it \"Ian\"?" icon_state = "ianplushie" phrase = "Arf!" /obj/item/toy/plushie/drone name = "plush drone" desc = "A plushie of a happy drone! It appears to be smiling, and has a small tag which reads \"N.D.V. Icarus Gift Shop\"." icon_state = "droneplushie" phrase = "Beep boop!" /obj/item/toy/plushie/carp name = "plush carp" desc = "A plushie of an elated carp! Straight from the wilds of the Tau Ceti frontier, now right here in your hands." icon_state = "carpplushie" phrase = "Glorf!" /obj/item/toy/plushie/beepsky name = "plush Officer Sweepsky" desc = "A plushie of a popular industrious cleaning robot! If it could feel emotions, it would love you." icon_state = "beepskyplushie" phrase = "Ping!" /obj/item/toy/plushie/ivancarp name = "plush Ivan the carp" desc = "A plushie in the spitting image of a russian raised carp." icon_state = "carpplushie_russian" phrase = "Blyat!" //Small plushies. /obj/item/toy/plushie/nymph name = "diona nymph plush" desc = "A plushie of an adorable diona nymph! While its level of self-awareness is still being debated, its level of cuteness is not." icon_state = "nymphplushie" slot_flags = SLOT_HEAD /obj/item/toy/plushie/mouse name = "mouse plush" desc = "A plushie of a delightful mouse! What was once considered a vile rodent is now your very best friend." icon_state = "mouseplushie" /obj/item/toy/plushie/kitten name = "kitten plush" desc = "A plushie of a cute kitten! Watch as it purrs its way right into your heart." icon_state = "kittenplushie" slot_flags = SLOT_HEAD /obj/item/toy/plushie/pennyplush name = "Penny plush" desc = "It's a plush of the beloved company mascot cat, Penny! For the price NanoTrasen sells these things at, you probably could have bought an actual cat." icon_state = "pennyplushie" slot_flags = SLOT_HEAD /obj/item/toy/plushie/lizard name = "lizard plush" desc = "A plushie of a scaly lizard! Very controversial, after being accused as \"racist\" by some Unathi." icon_state = "lizardplushie" /obj/item/toy/plushie/spider name = "spider plush" desc = "A plushie of a fuzzy spider! It has eight legs - all the better to hug you with." icon_state = "spiderplushie" /obj/item/toy/plushie/farwa name = "farwa plush" desc = "A farwa plush doll. It's soft and comforting, with extra grip!" icon_state = "farwaplushie" slot_flags = SLOT_HEAD /obj/item/toy/plushie/bear name = "bear plush" desc = "A bear plushie. You should hug it, quickly!" icon_state = "bearplushie" /obj/item/toy/plushie/bearfire name = "firefighter bear plush" desc = "A bear plushie. Only you can stop phoron fires!" icon_state = "bearplushie_fire" /obj/item/toy/plushie/schlorrgo name = "schlorrgo plush" desc = "A schlorrgo plushie, ready to roll his way into your heart!" icon_state = "schlorrgoplushie" phrase = "Eough!" drop_sound = 'sound/effects/creatures/ough.ogg' pickup_sound = 'sound/effects/creatures/ough.ogg' poke_sound = 'sound/effects/creatures/ough.ogg' /obj/item/toy/plushie/coolschlorrgo name = "Cool Schlorrgo plush" desc = "A plushie of the popular cartoon character, Cool Schlorrgo. Hadii's grace!" icon_state = "coolerschlorrgoplushie" phrase = "Eough!" drop_sound = 'sound/effects/creatures/ough.ogg' pickup_sound = 'sound/effects/creatures/ough.ogg' poke_sound = 'sound/effects/creatures/ough.ogg' /obj/item/toy/plushie/slime name = "slime plush" desc = "A beanbag-filled slime plushie. Relaxing!" icon_state = "slimeplushie" phrase = "Rawr!" /obj/item/toy/plushie/bee name = "bee plush" desc = "A chunky plushie bee. Your new buzz-t friend!" icon_state = "beeplushie" phrase = "Buzz!" /obj/item/toy/plushie/shark name = "shark plush" desc = "A beloved jumbo sized shark that is sure to impress your friends." icon_state = "sharkplushie" phrase = "Gashunk!" /obj/item/toy/plushie/greimorian name = "greimorian plushie" desc = "A lovable plushie of a fierce greimorian! This one takes a few liberties." icon_state = "greimorianplushie" phrase = "Gort!" /obj/item/toy/plushie/axic name = "Axic plushie" desc = "Plushie designed after the main characters of the hit show, Swimstars! This one is Axic. " icon_state = "axicplushie" phrase = "Warble!" /obj/item/toy/plushie/qill name = "Qill plushie" desc = "Plushie designed after the main characters of the hit show, Swimstars! This one is Qill. " icon_state = "qillplushie" phrase = "Warble!" /obj/item/toy/plushie/xana name = "Xana plushie" desc = "Plushie designed after the main characters of the hit show, Swimstars! This one is Xana. " icon_state = "xanaplushie" phrase = "Warble!" /obj/item/toy/plushie/ipc name = "Aphy plushie" desc = "A plushie of an old Hephaestus mascot, Aphy." desc_extended = "Aphy, a play on the name Aphrodite, was Hephaestus Industries' first baseline prototype. The original Aphy was tragically lost alongside Hephaestus' Mars headquarters during the Violet Dawn disaster, but the unit lives on as a cutesy, marketable mascot." icon_state = "ipcplushie" phrase = "Bwoop!" /obj/item/toy/plushie/domadice name = "Domadice plushie" desc = "A marketable plushie of the Kessvalankan Domadice" desc_extended = "Resurrected by the Golden Deep, the Kessvalankan Domadice is a Purpose adjacent synthetic. They hail from a time long before any of the current spur's inhabitants were even thoughts on the evolutionary track. Currently Domadice works as a leader in the Golden Deep, on the same footing as Midas Control." icon_state = "domadiceplushie" phrase = "♫Plin Plin Plon♫" //Squid Plushies /obj/item/toy/plushie/squid name = "squid plushie" desc = "A small, cute and loveable squid friend. This one is pink coloured." icon = 'icons/obj/toy.dmi' icon_state = "pinksquid" item_state = "pinksquid" var/active = 0.0 var/colorvar = "pink" slot_flags = SLOT_HEAD /obj/item/toy/plushie/squid/Initialize() . = ..() colorvar = pick("pink","blue","mint","green","yellow","orange") icon_state = "[colorvar]squid" item_state = "[colorvar]squid" desc = "A small, cute and loveable squid friend. This one is in [colorvar]." //Fox Plushies /obj/item/toy/plushie/fox name = "fox plushie" desc = "A small, very soft and handsome fox, ready to receive your cuddles. This one is red." icon = 'icons/obj/toy.dmi' icon_state = "redfox" item_state = "redfox" phrase = "Kekekeke!" /obj/item/toy/plushie/fox/black desc = "A small, very soft and handsome fox, ready to receive your cuddles. This one is black." icon_state = "blackfox" item_state = "blackfox" /obj/item/toy/plushie/fox/marble desc = "A small, very soft and handsome fox, ready to receive your cuddles. This one is white." icon_state = "marblefox" item_state = "marblefox" /obj/item/toy/plushie/fox/blue desc = "A small, very soft and handsome fox, ready to receive your cuddles. This one is blue." icon_state = "bluefox" item_state = "bluefox" /obj/item/toy/plushie/fox/orange desc = "A small, very soft and handsome fox, ready to receive your cuddles. This one is the classic orange." icon_state = "orangefox" item_state = "orangefox" /obj/item/toy/plushie/fox/coffee desc = "A small, very soft and handsome fox, ready to receive your cuddles. This one is coffee-cream coloured." icon_state = "coffeefox" item_state = "coffeefox" /obj/item/toy/plushie/fox/pink desc = "A small, very soft and handsome fox, ready to receive your cuddles. This one is pink." icon_state = "pinkfox" item_state = "pinkfox" /obj/item/toy/plushie/fox/purple desc = "A small, very soft and handsome fox, ready to receive your cuddles. This one is purple." icon_state = "purplefox" item_state = "purplefox" /obj/item/toy/plushie/fox/crimson desc = "A small, very soft and handsome fox, ready to receive your cuddles. This one is crimson." icon_state = "crimsonfox" item_state = "crimsonfox" /obj/item/toy/plushie/fox/random icon_state = "redfox" item_state = "redfox" var/colorvar = "red" /obj/item/toy/plushie/fox/random/Initialize() . = ..() desc = "A small, very soft and handsome fox, ready to receive your cuddles. This one is in [colorvar]." icon_state = "[colorvar]fox" item_state = "[colorvar]fox" colorvar = pick("red", "black", "marble", "blue", "orange", "coffee", "pink", "purple", "crimson") // Squid Plushie Random /obj/item/toy/plushie/squidcolour name = "squid plushie" desc = "A small, cute, and loveable squid friend. This one comes in a wide variety of colours." icon_state = "squidplushie_colour" // slot_flags = SLOT_HEAD - head sprite may come someday, but not today. phrase = "Blub!" // Herring Gull Plushie /obj/item/toy/plushie/herring_gull name = "herring gull plushie" desc = "A herring gull plushie. Adorable!" desc_extended = "The European herring gull, also known as Larus argentatus, is a common seabird originating from Earth. It can be found on and around \ the coasts as well as cities on Earth and wherever it may have been transplanted to. Commonly seen as something that symbolizes the sea as well as freedom." icon_state = "herring_gull" item_state = "herring_gull" phrase = "Kek kek kek!" var/lying = FALSE /obj/item/toy/plushie/herring_gull/attack_self(mob/user) if(user.a_intent == I_HELP) user.visible_message( SPAN_NOTICE("\The [user] pets \the [src]."), SPAN_NOTICE("You pet \the [src].") ) else if(user.a_intent == I_DISARM) user.visible_message( SPAN_NOTICE("\The [user] squeezes \the [src]."), SPAN_NOTICE("You squeeze \the [src].") ) else if(user.a_intent == I_GRAB) user.visible_message( SPAN_NOTICE("\The [user] hugs \the [src]."), SPAN_NOTICE("You hug \the [src].") ) else if(user.a_intent == I_HURT) user.visible_message( SPAN_NOTICE("\The [user] pokes \the [src]."), SPAN_NOTICE("You poke \the [src].") ) playsound(src, 'sound/items/plushies/herring_gull/alarm_call.ogg', 75, FALSE) visible_message("\The [src] says, \"[phrase]\"") /obj/item/toy/plushie/herring_gull/AltClick(mob/user) if(lying) lying = !lying user.visible_message( SPAN_NOTICE("\The [user] extends \the [src]'s legs."), SPAN_NOTICE("You extend \the [src]'s legs.") ) icon_state = "herring_gull" item_state = "herring_gull" else lying = !lying user.visible_message( SPAN_NOTICE("\The [user] tucks in \the [src]'s legs."), SPAN_NOTICE("You tuck in \the [src]'s legs.") ) icon_state = "herring_gull_lying" item_state = "herring_gull_lying" //Jeweler cockatoo plushie /obj/item/toy/plushie/cockatoo name = "jeweler cockatoo plushie" desc = "A plushie of Konyang's national animal, much smaller than the real thing. This one won't get you arrested for touching it, either." icon_state = "cockatoo" phrase = "Chirp!" //Norinori plushie /obj/item/toy/plushie/norinori name = "\improper Norinori plushie" desc = "A plump and fluffy plushie depicting Up!Burger's mascot Norinori the Onigiri! It smells faintly of rice." icon_state = "norinori" phrase = "Buy. Up!Burger!" //Toy cult sword /obj/item/toy/cultsword name = "foam sword" desc = "An arcane weapon wielded by the followers of the hit Saturday morning cartoon \"King Nursee and the Acolytes of Heroism\"." icon = 'icons/obj/sword_64.dmi' icon_state = "cultblade" item_state = "cultblade" w_class = WEIGHT_CLASS_BULKY attack_verb = list("attacked", "slashed", "stabbed", "poked") contained_sprite = TRUE worn_x_dimension = 64 worn_y_dimension = 64 /obj/item/inflatable_duck name = "inflatable duck" desc = "No bother to sink or swim when you can just float!" icon_state = "inflatable" item_state = "inflatable" icon = 'icons/obj/clothing/belts.dmi' slot_flags = SLOT_BELT drop_sound = 'sound/items/drop/rubber.ogg' pickup_sound = 'sound/items/pickup/rubber.ogg' /obj/item/toy/aurora name = "aurora miniature" desc = "A miniature of a space station, built into an asteroid. A tiny suspension field keeps it afloat. A small plaque on the front reads: NSS Aurora, Tau Ceti, Romanovich Cloud, 2464. Onward to new horizons." desc_extended = "This miniature was given out on the 9th of April 2464 to all former crew members of the Aurora as a memento, before setting off to their new mission on the SCCV Horizon." icon_state = "aurora" /obj/item/toy/adhomian_map name = "ancient adhomian map" desc = "A replica of an Adhomian map found three years ago in Tau Ceti. What it leads to is unknown." icon_state = "map" /obj/item/toy/ringbell name = "ringside bell" desc = "A bell used to signal the beginning and end of various ring sports." icon_state = "ringbell" anchored = TRUE /obj/item/toy/ringbell/mechanics_hints(mob/user, distance, is_adjacent) . += ..() . += "Use Help intent on the bell to signal the start of a contest." . += "Use the Disarm intent to signal the end of a contest." . += "Use the Harm intent to signal a disqualification." /obj/item/toy/ringbell/attack_hand(mob/user) switch(user.a_intent) if (I_HELP) user.visible_message(FONT_LARGE(SPAN_NOTICE("[user] rings \the [src], signalling the beginning of the contest.")), SPAN_NOTICE("You ring \the [src] to signal the beginning of the contest!")) playsound(user.loc, 'sound/items/oneding.ogg', 60, 1) if (I_DISARM) user.visible_message(FONT_LARGE(SPAN_NOTICE("[user] rings \the [src] three times, signalling the end of the contest!")), SPAN_NOTICE("You ring \the [src] to signal the end of the contest!")) playsound(user.loc, 'sound/items/threedings.ogg', 60, 1) if (I_HURT) user.visible_message(FONT_LARGE(SPAN_WARNING("[user] rings \the [src] repeatedly, signalling a disqualification!")), SPAN_WARNING("You ring \the [src] to signal a disqualification!")) playsound(user.loc, 'sound/items/manydings.ogg', 60, 1) //baystation desk toys /obj/item/toy/desk var/on = FALSE var/activation_sound = SFX_SWITCH /obj/item/toy/desk/update_icon() if(on) icon_state = "[initial(icon_state)]-on" else icon_state = initial(icon_state) /obj/item/toy/desk/attack_self(mob/user) activate(user) /obj/item/toy/desk/AltClick(mob/user) if(!use_check_and_message(user)) activate(user) /obj/item/toy/desk/proc/activate(mob/user) on = !on playsound(src.loc, activation_sound, 75, 1) update_icon() return 1 /obj/item/toy/desk/newtoncradle name = "\improper Newton's cradle" desc = "A ancient 21th century super-weapon model demonstrating that Sir Isaac Newton is the deadliest sonuvabitch in space." desc_extended = "Aside from car radios, Eridanian Dregs are reportedly notorious for stealing these things. It is often theorized that the very same ball bearings are used in black-market cybernetics." icon_state = "newtoncradle" /obj/item/toy/desk/fan name = "office fan" desc = "Your greatest fan." desc_extended = "For weeks, the atmospherics department faced a conundrum on how to lower temperatures in a localized area through complicated pipe channels and ventilation systems. The problem was promptly solved by ordering several desk fans." icon_state = "fan" /obj/item/toy/desk/officetoy name = "office toy" desc = "A generic microfusion powered office desk toy. Only generates magnetism and ennui." desc_extended = "The mechanism inside is a Hephasteus trade secret. No peeking!" icon_state = "desktoy" /obj/item/toy/desk/dippingbird name = "dipping bird toy" desc = "Engineers marvel at this scale model of a primitive thermal engine. It's highly debated why the majority of owners were in low-level bureaucratic jobs." desc_extended = "One of the key essentials for every Eridanian suit - it's practically a rite of passage to own one of these things." icon_state = "dippybird" /obj/item/toy/partypopper name = "party popper" desc = "Instructions : Aim away from face. Wait for appropriate timing. Pull cord, enjoy confetti." icon_state = "partypopper" w_class = WEIGHT_CLASS_TINY drop_sound = 'sound/items/drop/cardboardbox.ogg' pickup_sound = 'sound/items/pickup/cardboardbox.ogg' /obj/item/toy/partypopper/attack_self(mob/user) if(icon_state == "partypopper") spark(src, 1, user.dir) user.visible_message(SPAN_NOTICE("[user] pulls on the string, releasing a burst of confetti!"), SPAN_NOTICE("You pull on the string, releasing a burst of confetti!")) playsound(src, 'sound/effects/snap.ogg', 50, TRUE) icon_state = "partypopper_e" var/turf/T = get_step(src, user.dir) if(!turf_clear(T)) T = get_turf(src) new /obj/effect/decal/cleanable/confetti(T) else to_chat(user, SPAN_NOTICE("The [src] is already spent!")) /obj/item/chess_piece name = "white pawn" desc = "A %NAME% chess piece, this one is worth %POINT% points." icon = 'icons/obj/item/chess.dmi' icon_state = "white_pawn" w_class = WEIGHT_CLASS_HUGE // hugh mungus var/piece_worth = 1 /obj/item/chess_piece/afterattack(atom/target, mob/user, proximity_flag, click_parameters) if(proximity_flag && isturf(target)) user.drop_from_inventory(src, target) pixel_y = initial(pixel_y) pixel_x = initial(pixel_x) /obj/item/chess_piece/Initialize() . = ..() desc = "A [name] chess piece, this one is worth [piece_worth] point\s." /obj/item/chess_piece/black name = "black pawn" icon_state = "black_pawn" /obj/item/chess_piece/rook name = "white rook" icon_state = "white_rook" piece_worth = 5 /obj/item/chess_piece/rook/black name = "black rook" icon_state = "black_rook" /obj/item/chess_piece/knight name = "white knight" icon_state = "white_knight" piece_worth = 3 /obj/item/chess_piece/knight/black name = "black knight" icon_state = "black_knight" /obj/item/chess_piece/bishop name = "white bishop" icon_state = "white_bishop" piece_worth = 3 /obj/item/chess_piece/bishop/black name = "black bishop" icon_state = "black_bishop" /obj/item/chess_piece/king name = "white king" icon_state = "white_king" piece_worth = 10 // not really, but i coded myself into a corner here /obj/item/chess_piece/king/black name = "black king" icon_state = "black_king" /obj/item/chess_piece/queen name = "white queen" icon_state = "white_queen" piece_worth = 9 /obj/item/chess_piece/queen/black name = "black queen" icon_state = "black_queen" // Stress ball /obj/item/toy/stressball name = "stress ball" desc = "A small, squishy stress ball. This one has a squeaker inside." w_class = WEIGHT_CLASS_SMALL icon_state = "stressball" drop_sound = 'sound/items/drop/plushie.ogg' pickup_sound = 'sound/items/pickup/plushie.ogg' var/squeeze_sound = 'sound/items/drop/plushie.ogg' var/cooldown = 0 /obj/item/toy/stressball/Initialize() . = ..() if(!color) color = RANDOM_RGB update_icon() /obj/item/toy/stressball/attack_self(mob/user as mob) if(cooldown > world.time) return cooldown = world.time + 2 SECONDS var/volume = 0 switch(user.a_intent) if(I_HELP) user.visible_message(SPAN_NOTICE("[SPAN_BOLD("\The [user]")] plays with \the [src]!"), SPAN_NOTICE("You play with \the [src]!")) if(I_DISARM) user.visible_message(SPAN_NOTICE("[SPAN_BOLD("\The [user]")] squeezes \the [src]!"), SPAN_NOTICE("You squeeze \the [src]!")) volume = 30 if(I_GRAB) user.visible_message(SPAN_NOTICE(SPAN_BOLD("\The [user] pinches \the [src]!")), SPAN_NOTICE(SPAN_BOLD("You pinch \the [src]!"))) volume = 40 if(I_HURT) user.visible_message(SPAN_WARNING(SPAN_BOLD("\The [user] crushes \the [src]!")), SPAN_WARNING(SPAN_BOLD("You crush \the [src]!"))) volume = 50 if(volume) playsound(src.loc, squeeze_sound, volume, TRUE) /obj/item/toy/football name = "football" desc = "A classic, white and black football for kicking. Also known as a soccerball on Biesel and some parts of Earth." desc_mechanics = "Click to kick the ball. Alt+Click or use a non-Help intent to deliver a powerful kick. Drag the ball onto your character sprite to pick it up." w_class = WEIGHT_CLASS_NORMAL icon_state = "football" item_state = "football" drop_sound = 'sound/items/drop/rubber.ogg' pickup_sound = 'sound/items/drop/rubber.ogg' /// The base distance in tiles the football is kicked. var/base_kick_distance = 1 /obj/item/toy/football/Initialize() . = ..() var/static/list/loc_connections = list( COMSIG_ATOM_ENTERED = PROC_REF(on_walk_into), ) AddElement(/datum/element/connect_loc, loc_connections) /obj/item/toy/football/proc/on_walk_into(datum/source, atom/movable/arrived, atom/old_loc, list/atom/old_locs) SIGNAL_HANDLER if(!isliving(arrived)) return var/mob/living/user = arrived if(!isturf(loc)) to_chat(user, SPAN_NOTICE("\The [src] has to be on the floor to kick it!")) return if(!(user?.a_intent == I_HELP)) user.visible_message(SPAN_WARNING("[user] forcefully kicks \the [src]!")) throw_at(get_edge_target_turf(user, get_dir(old_loc, src)), base_kick_distance+(rand(2,5)), 1) return user.visible_message(SPAN_NOTICE("[user] kicks \the [src].")) throw_at(get_edge_target_turf(user, get_dir(old_loc, src)), base_kick_distance+(rand(1,2)), 1) /obj/item/toy/football/AltClick(var/mob/user) if(use_check(user)) return if(!isturf(loc)) to_chat(user, SPAN_NOTICE("\The [src] has to be on the floor to kick it!")) return user.visible_message(SPAN_WARNING("[user] forcefully kicks \the [src]!")) throw_at(get_edge_target_turf(user, get_dir(user, src)), base_kick_distance+(rand(2,5)), 1) /obj/item/toy/football/mouse_drop_dragged(atom/over, mob/user, src_location, over_location, params) //ripped from box/fancy/tray if((over && (!use_check(over))) && (over.contents.Find(src) || in_range(src, over))) var/mob/dropped_onto_mob = over if(ishuman(dropped_onto_mob) && !dropped_onto_mob.get_active_hand()) var/mob/living/carbon/human/H = user var/obj/item/organ/external/temp = H.organs_by_name[H.hand?BP_L_HAND:BP_R_HAND] if(temp && !temp.is_usable()) to_chat(user, SPAN_NOTICE("You try to move your [temp.name], but cannot!")) return to_chat(user, SPAN_NOTICE("You pick up \the [src].")) pixel_x = 0 pixel_y = 0 forceMove(get_turf(user)) user.put_in_hands(src) return