The IruMoto NPC Master is a scripted tool for use in OpenSimulator virtual worlds.
A support tool for the IruMoto NPC Engine, this powerful script enables direct interaction between user-controlled avatars and engine-generated NPCs.
You can see my NPC Masters and Engines in action by teleporting in-world. If I've built an NPC Master for you and you're looking to update to newer scripts, you'll find all the details and version notes below.
Teleport to IruMoto Script Factory
If you have a viewer installed, click the landmark below to teleport to IruMoto Script Factory. If you don't have a viewer and would like to check out virtual worlds, download the free Firestorm Viewer, and then join a grid. I recommend DigiWorldz where my avatar has lived happily since 2016. If you take this link to DigiWorldz, I do get a commission if you later decide to rent land. I appreciate your support. 😊

Specifications
Functionality
Function
The IruMoto NPC Master exists in-world as a single prim which you right-click on to sit, or alternatively configure as touch to sit in your Edit window. I prefer the former option, which helps avoid potentially-embarrassing accidental sits by noobs unfamiliar with the tool.
Sitting on the NPC Master produces a dropdown menu in the top right corner of your screen. From this point on, NPC Master has control of your avatar and also that of its associated NPC(s). You do however maintain control of the NPC Master via its dropdown menu.
Depending on the programming and purpose of each individual NPC Master, your avatar's role in the unfolding scenes might be that of a bystander or voyeur or participant. Its most popular uses are for clothes models in shops, roleplay, sex, and for recording visual stories.
If you want to end NPC Master's control of your avatar at any time, simply click the ★ END button on the menu or the system-generated Stand button on the bottom of your viewer screen.
Features
Features
Your NPC Master:
- Saves 29 events. Each event can change animation, outfit, position, rotation, and facial expression.
- Communicates with your NPC via your region's sensor channel.
- Communicates with your NPC via its unique NPC Engine channel so you can use both menus.
- For TRIGGER mode NPCs, NPC Master automatically spawns an NPC then takes it offline afterward.
- Usage can be restricted to Owner, Group, or Anyone.
- Communicates with your NPC's body enhancements such as PUMP Strip and Pump Cock + HUD.
- Communicates with your avatar's body enhancements such as Pump Cock + HUD.
Alternative NPC Modes
Alternative NPC Modes
The system works best for NPC Engines set to TRIGGER mode, as they exist only on command from an NPC Master. Apart from their direct menu, no other input affects these NPC's actions. You can use NPCs set to different modes if you wish, but keep the following points in mind:
- ALWAYS: ALWAYS mode NPCs can work if your duration is short, however these NPCs reboot every 30 minutes which can interrupt your game.
- TIMEGEN: TIMEGEN NPCs can work too, but they typically listen for commands from an IruMoto Time Generator, which can cause the NPC to suddenly leave the scene.
- SENSOR: SENSOR NPCs are the most common alternative as they typically come online in response to an avatar entering the region. Except in offline grids, it's unusual for SENSOR NPCs to listen to Time Generators, which makes them ideal for use with an NPC Master.
Components
Components
Components of the IruMoto NPC Master are:
Internal components:
- .[npcMaster] series script
- 3 support notecards
- all animations that your avatar will need, as listed in your .npcMasterButts notecard
External support scripts:
- IruMoto NPC Engine (to provide the NPCs)
- .[npcActivateSensor] to enforce automatic death/refresh of related NPC if avatar abandons the game
Variables
Variables
Variables such as default location, default animation, and sensor channel are managed in the supporting .npcMasterConfig notecard.
Event sequences are stored in the .npcMasterButts notecard, while your NPC Master's explanatory story is set in the .npcStory notecard.
File Syntax
File Syntax
I use some basic syntax rules for the sake of order in my Contents windows. As per the sample below, scripts are always at the top, then notecards, then animations. It keeps things neat and simple.
- All IruMoto scripts start with a period then a brace;
- All notecards start with a period but no brace;
- All animations start with a period then capital X.
Scripts
.[npcMaster]
.[npcMaster]
2025
- v801 251211 - tidied global declarations, removed version notes with pointer to website. Nothing major that affects function.
- v800 251016 - 800 series scripts mark Yengine compatibility. Added owner/group/anyone functionality from vehicles. Requires that you update config card to .npcMasterConfig800.
- v500.3 251016 - trimmed prefixes from action buttons as labels don't fit. Blue menu comms only so doesn't impact other npcEngines.
- v500.2b 250614 - fixed YEngine incompatibility. llSameGroup
- v500.2a 250529 - trimmed menu instructions to allow for more descriptive npcStory.
- v500.1z 250113 - added sC+" ★ END" to endSession. Props weren't closing properly and prob some other support scripts as well.
2023
- v500.1y 231109 - added msg =="cockHide" to endSession to negate displaying "Soft" cock afterwards when avatar isn't nude.
- v500.1x 230225 - added llSetRot(ZERO_ROTATION) line 119 so prim returns to zero rotation upon reset. Saves adding a new parkedR variable to config notecard.
2022
- v500.1w 220906 - the last few versions have proven that the script is maxed out on data storage which is causing events to silently fail. To fix this, I've reduced the number of actions from 38 to 29. ALSO reverted the sequence order in run_permissions as the scene is visually smoother if llSetRot fires before llStartAnimation. ALSO replaced the unsit run_permissions bit with existing endSession() function so that the NPC stops animating as well, and Pump cock returns to soft.
- v500.1v 220906 - ** REQUIRES NEW NOTECARD ** added .npcStory notecard to provide details about each particular engine on blue menu, e.g. avatar body size etc. Caused animations to fail again.
- v500.1u 220905 - 500.1t stopped animating but only in some units, first noticed in the heavy Kaleb unit. As a test, temporarily added a 1.5 llSleep which fixed it but can lead to probs. Instead, removed llSleep and reordered event sequences in run_permission so that llStartAnimation fires before heavy llSetRot sequence. Seems to have fixed it.
- v500.1t 220905 - found errors in messages for buttons 30 thru 38 which had not been tested until now. Also errors in action24() and action 34(). Think that's all of them captured.
- v500.1s 220904 - touched up warning text for !=llSameGroup.
- v500.1r 220903 - in changed(), swapped !=llGetOwner for !=llSameGroup to allow for tenant use.
- v500.1q 220114 - added line to endSession() to make penis return to soft state.
2021
- v500.1p 211230 - in changed(), made script owner-only. If at some later point I want to make this a variable, just copy section from changed() in [amphib7.7]. Renamed this script npcMaster from this point on, as well as supporting notecards.
- v500.1o 211120 - increased to 38 actions - Not 36 because menu pages 1 and 4 only need a single nav button. REQUIRES NEW BUTTS CARD 500.1o
- v500.1n 210827 - removed llSleep() calls from all actions in line with npcAction500.1v in npc scripts so there is no delay interacting with bots.
- v500.1m 210803 - added extra line of hovertext and extra line to config.
- v500.1k 210801 - added 2 new text functions via extra lines in config notecard for menu: story and engType. REQUIRES NEW CONFIG.
- v500.1j 210712 - added "extras" triggerWord by default to allow NPCs to serve multiple love engines if they share the same sensorChan.
- v500.1h 210622 - added second page menu capability by default. This means that all objects using this script will have two menu pages by default. - REQUIRES EXTRA LINES IN BOTH NOTECARDS.
- v500.1g 210620 - added newC Pump Cock functionality - REQUIRES EXTRA LINES IN BOTH NOTECARDS.
2019
- v500.1f - added llRegionSay(sensorChan, tW) ti run permissions to bring Trigger bots online so they don't have to be inworld all the time.
- v500.1e - move mainDefault specs to pull from config notecard.
- v500.1d - a few minor menu tweaks.
- v500.1c - moved variables to notecards and created some new functions.
- v500.1b - pulled source code from npcVoyeur380.3 to make the poseball and controller in one unit. Wow!
- v500 190402 - poseball to allow humans to share synced animations with bots.

If you have any questions, feel free to contact me via the contact form.
Have a brilliant day,
Andrew (Thommo) Thompson, a.k.a. Xay Tomsen


