Adds the Clicker (#5106)

## About The Pull Request

I was surprised to see that no one had ever added a clicker item, so I
decided to take the challenge and tried to add one myself. This little
item can be found in the lustwish vendors. It makes a 'click' sound when
interacted.
The sprite is inspired by the flash, but remade with the lustwish
'theme'.

Dominant characters who use this are also able to 'reward' submissive
characters. The submissive characters will do an emote (which shares the
cooldown with the *snap interaction, that being 10 seconds). They will
also get a tiny mood buff that will last for two minutes, and doesn't
stack.

It works on cyborgs with the submissive module (without the mood buff,
clearly), and cyborgs with the dominant module have access to the toy.
It can be bought from the lustwish vendor.

<img width="400" height="400" alt="clickerpreview"
src="https://github.com/user-attachments/assets/9fbbecb7-74a7-46ed-a049-a33892237857"
/>


## Why It's Good For The Game

We've got an overwhelming amount of untrained bottoms.

## Proof Of Testing


https://github.com/user-attachments/assets/72b15bf2-d468-4e72-ae64-7216a65cc12c

Here's the borg module version.

![image](https://github.com/user-attachments/assets/0499fd31-253f-40ec-969e-d7a709d37197)

</details>

## Changelog

🆑
add: Lustwish presents the Clicker! With this you will now finally be
able to train and condition your pets. Visit any Lustwish vendor to buy
your own.
/🆑

---------

Co-authored-by: Alexis <catmc8565@gmail.com>
This commit is contained in:
Mathilde
2026-01-21 19:56:45 +01:00
committed by GitHub
co-authored by Alexis
parent b66a20a756
commit a33977cc80
9 changed files with 94 additions and 0 deletions
@@ -331,4 +331,5 @@
/obj/item/spanking_pad,
/obj/item/tickle_feather,
/obj/item/clothing/erp_leash,
/obj/item/clicker
)
@@ -38,6 +38,7 @@
/obj/item/restraints/handcuffs/lewd,
/obj/item/reagent_containers/cup/lewd_filter,
/obj/item/assembly/signaler, //because it's used for several toys
/obj/item/clicker,
//clothing
/obj/item/clothing/mask/ballgag,
@@ -232,3 +232,8 @@
. = ..()
if(CONFIG_GET(flag/disable_lewd_items))
return INITIALIZE_HINT_QDEL
/obj/item/clicker/Initialize(mapload)
. = ..()
if(CONFIG_GET(flag/disable_lewd_items))
return INITIALIZE_HINT_QDEL
@@ -1,5 +1,6 @@
GLOBAL_LIST_INIT(erp_items, list(
/obj/item/bdsm_candle,
/obj/item/clicker,
/obj/item/clothing/ears/kinky_headphones,
/obj/item/clothing/erp_leash,
/obj/item/clothing/glasses/blindfold/kinky,
@@ -0,0 +1,75 @@
/obj/item/clicker
name = "clicker"
desc = "A small clicking toy that fits in the palm of your hand, typically used to condition pets into obedience. It makes a satisfying 'click' sound when pressed."
icon = 'modular_zubbers/icons/obj/lewd.dmi'
icon_state = "clicker_pink"
throwforce = 0
w_class = WEIGHT_CLASS_TINY
/obj/item/clicker/Initialize(mapload)
. = ..()
AddComponent(/datum/component/reskinable_item, /datum/atom_skin/clicker)
/datum/atom_skin/clicker
abstract_type = /datum/atom_skin/clicker
/datum/atom_skin/clicker/pink
preview_name = "Pink"
new_icon_state = "clicker_pink"
/datum/atom_skin/clicker/teal
preview_name = "Teal"
new_icon_state = "clicker_teal"
/obj/item/clicker/proc/click(atom/source, mob/user)
SIGNAL_HANDLER
source.balloon_alert(user, "click!")
playsound(source, "modular_zubbers/sound/lewd/clicker.ogg", 40, FALSE)
/obj/item/clicker/attack_self(mob/user)
. = ..()
click(src, user)
// If the user has the dominant aura quirk, nearby bottoms will react to the click.
if(istype(user, /mob/living))
var/mob/living/living_user = user
if(living_user.has_quirk(/datum/quirk/dominant_aura) && TIMER_COOLDOWN_FINISHED(living_user, DOMINANT_COOLDOWN_SNAP))
for(var/mob/living/carbon/human/sub in hearers(world.view / 2, living_user))
if(!sub.has_quirk(/datum/quirk/well_trained) || sub == living_user || sub.stat == DEAD)
continue
if(get_dist(sub, living_user) > world.view / 2)
continue
sub.dir = get_dir(sub, living_user)
sub.emote("me", 1, "suddenly perks up in attention!", TRUE)
to_chat(sub, span_purple("You perk up in attention hearing <b>[living_user]</b>'s click!"))
// Short mood boost for flavour
sub.add_mood_event("good_pet", /datum/mood_event/good_pet)
// Shivering animation
animate(sub, pixel_w = 1, time = 0.1 SECONDS, flags = ANIMATION_RELATIVE|ANIMATION_PARALLEL)
for(var/i in 1 to 1 SECONDS / (0.2 SECONDS))
animate(pixel_w = -2, time = 0.1 SECONDS, flags = ANIMATION_RELATIVE|ANIMATION_CONTINUE)
animate(pixel_w = 2, time = 0.1 SECONDS, flags = ANIMATION_RELATIVE|ANIMATION_CONTINUE)
animate(pixel_w = -1, time = 0.1 SECONDS, flags = ANIMATION_RELATIVE)
//For the borgs
for(var/mob/living/silicon/robot/borg_sub in hearers(world.view / 2, living_user))
if(!borg_sub.has_quirk(/datum/quirk/well_trained) || borg_sub == living_user || borg_sub.stat == DEAD)
continue
borg_sub.dir = get_dir(borg_sub, living_user)
borg_sub.emote("me", 1, "suddenly perks up in attention!", TRUE)
to_chat(borg_sub, span_purple("You perk up in attention hearing <b>[living_user]</b>'s click!"))
// Shivering animation
animate(borg_sub, pixel_w = 1, time = 0.1 SECONDS, flags = ANIMATION_RELATIVE|ANIMATION_PARALLEL)
for(var/i in 1 to 1 SECONDS / (0.2 SECONDS))
animate(pixel_w = -2, time = 0.1 SECONDS, flags = ANIMATION_RELATIVE|ANIMATION_CONTINUE)
animate(pixel_w = 2, time = 0.1 SECONDS, flags = ANIMATION_RELATIVE|ANIMATION_CONTINUE)
animate(borg_sub, pixel_w = -1, time = 0.1 SECONDS, flags = ANIMATION_RELATIVE)
// Shares cooldown with the dominant aura snap
TIMER_COOLDOWN_START(living_user, DOMINANT_COOLDOWN_SNAP, 10 SECONDS)
/datum/mood_event/good_pet
description = span_nicegreen("Being obedient feels rewarding!")
mood_change = 2
timeout = 2 MINUTES
@@ -22,9 +22,19 @@
/obj/item/clothing/under/costume/loincloth/cloth/sensor = 6,
/obj/item/clothing/shoes/jackboots/toeless = 6,
)
),
list(
"name" = "Toys",
"icon" = FA_ICON_MAGIC_WAND_SPARKLES,
"products" = list(
/obj/item/clicker = 6,
)
)
)
zubbers_premium = list(
/obj/item/clothing/neck/kink_collar/locked/gps = 3,
/obj/item/holosign_creator/sex = 6,
Binary file not shown.

After

Width:  |  Height:  |  Size: 920 B

Binary file not shown.
+1
View File
@@ -9463,6 +9463,7 @@
#include "modular_zubbers\code\modules\languages\siikmaas.dm"
#include "modular_zubbers\code\modules\languages\uncommon.dm"
#include "modular_zubbers\code\modules\languages\vampiric.dm"
#include "modular_zubbers\code\modules\lewd_machinery\clicker.dm"
#include "modular_zubbers\code\modules\lewd_machinery\lustwish.dm"
#include "modular_zubbers\code\modules\lewd_machinery\sex_barrier.dm"
#include "modular_zubbers\code\modules\limbgrowncorpses\limbgrowerblanks.dm"