Developers

Build on top of S&G products. Every product that emits events broadcasts on one channel โ€” listen once, then branch on the product prefix.

One channel for everything channel 8008135

Every Shits & Giggles product that emits events does so on the same channel. Each message starts with a product prefix so you can tell them apart โ€” SLAP/โ€ฆ from the Face Slapper, LOVENSE/โ€ฆ from the Lovense HUD, and so on. One listener handles them all.

FieldValueNotes
Channel8008135Products only talk here; they never listen on it.
Format<PRODUCT>/<โ€ฆ>Slash-delimited. First token is the product.
PrefixesSLAP ยท LOVENSEMore are added as products gain events.
Where the message goes. This isn't a region-wide shout. Each event is sent only to the wearer's own attachments and, if they're seated, the object they're sitting on. Your listener must live in another attachment worn by the same avatar, or in the furniture they're sitting on โ€” a loose prim nearby won't hear it.

One listener, branching on the prefix:

integer SG_CHANNEL = 8008135;

default
{
    state_entry()
    {
        llListen(SG_CHANNEL, "", NULL_KEY, "");
    }

    listen(integer chan, string name, key id, string msg)
    {
        list   p       = llParseString2List(msg, ["/"], []);
        string product = llList2String(p, 0);          // SLAP, LOVENSE, ...

        if (product == "SLAP")
        {
            string area = llList2String(p, 1);          // FACE_LEFT / FACE_RIGHT
            key    by   = (key)llList2String(p, 2);
            // react to a slap
        }
        else if (product == "LOVENSE")
        {
            string action = llList2String(p, 1);        // vibrate, stop, throb...
            string value  = llList2String(p, 2);
            key    by     = (key)llList2String(p, 3);
            // react to a toy command
        }
    }
}

Face Slapper โ€” events

Fires every time a slap lands.

PayloadPartsValues
SLAP/<area>/<by> area
by
FACE_LEFT ยท FACE_RIGHT
avatar UUID of who slapped

Example: SLAP/FACE_LEFT/3f9a7c20-1b6e-4a8d-9f02-7c1e2b4a6d8e

Lovense HUD โ€” events

Fires every time the HUD drives the toy โ€” drive moans, animations, arousal systems, etc.

PayloadPartValues
LOVENSE/<action>/<value>/<by> action vibrate ยท special ยท all ยท preset ยท custom ยท throb ยท edge ยท inverse ยท stop
valuelevel 0โ€“20, preset/slot name, or on/0
byavatar UUID of whoever pressed it (owner or partner)

Example: LOVENSE/vibrate/15/3f9a7c20-1b6e-4a8d-9f02-7c1e2b4a6d8e

Face Slapper โ€” trigger a slap

The slapper can be fired by chat as well as by touch, so any gesture or script can swing it. It listens on two channels for builders coming from ONI and Good Moaning setups. Say the exact string on the matching channel:

PlatformChannelSay thisResult
ONI69slapLeftLeft cheek
ONI69slapRightRight cheek
Good Moaning1482784366SLAP/FACE_LEFTRight cheek (mirrored)
Good Moaning1482784366SLAP/FACE_RIGHTLeft cheek (mirrored)

The ONI strings are case-insensitive โ€” slapLeft, slapleft and SLAPLEFT all work. From a gesture:

/69 slapLeft
/1482784366 SLAP/FACE_RIGHT
Good Moaning mirrors left/right. Those two strings match Good Moaning's own gestures, which name the side from the slapper's point of view, so the slapper swaps them. Sent directly, SLAP/FACE_LEFT lands on the wearer's right cheek. If you're triggering the slapper yourself, the ONI channel (69) maps sides literally and is the cleaner choice.
Triggers from anyone but the owner go through the same gates as a touch: the wearer's whitelist / blacklist, a 10 m range check, and the anti-spam cooldown. The owner's /69 slap reopens the menu, so it won't fire a slap.

Ideas โ€” what you could build

A few starting points. Anything that listens lives in another attachment on the same avatar (or the furniture they're sitting on); anything that triggers just says the string on the right channel.

React to an event โ€” listen on 8008135:

  • Reaction animator โ€” play a flinch, recoil, wince or blush the moment a SLAP/ lands; pick the expression from which cheek it hit.
  • Marks & blushes โ€” a skin, tattoo or blush layer that reddens or bruises the struck side and fades over time.
  • Counters & overlays โ€” a floating tally, scoreboard or stream overlay that counts hits and tracks who landed them (the by UUID).
  • Sound & voice packs โ€” your own yelps, giggles, gasps or themed audio on each hit, layered on top of the built-in sounds.
  • Effects โ€” particles (stars, sweat, sparks, hearts) keyed to the area and the avatar who set it off.
  • Reactive furniture โ€” a spanking bench, throne or couch that animates, counts or escalates when the seated avatar gets slapped.
  • Stats & relationships โ€” feed an arousal meter, an affection/relationship system, a pet-play mood, or an RLV rule off each hit.
  • Toy sync โ€” mirror a LOVENSE/<action> command to a second device so two toys pulse together.

Swing the slapper โ€” say the string on ch 69 or 1482784366:

  • Gesture packs โ€” animated gestures that land a real slap from a hotkey.
  • Games & dares โ€” truth-or-dare, a spin wheel, dice or a punishment game that delivers an actual slap on the outcome.
  • Interactive props โ€” a paddle, throne or bondage rig with a button wired to the worn slapper.
  • Automation โ€” a timer or "training" device that slaps on a schedule. Non-owner triggers still pass the wearer's whitelist, range and cooldown, so it stays consensual.

One listener handles new <PREFIX>/โ€ฆ events too, so whatever you build grows as more S&G products start emitting.

Owner menu commands

Each clicker reopens its own menu when the owner says its keyword on channel 69 โ€” handy to wire to a gesture or HUD button. These only open the menu; they don't fire an action, and they're owner-only.

ProductSay thisResult
Lips Kisser/69 kissOpens the kisser menu
Nose Booper/69 boopOpens the booper menu
Face Slapper/69 slapOpens the slapper menu

Products with an API

These products expose developer hooks. Open a product for its full page and integration notes.