This is a refiling of BUG-233175
I would like to propose a mechanism for users to modify and customize some of their agent's attributes including (but not necessarily limited to) the various movement speeds, jump height, and scale of the agent's physics shape.
My initial thought is for a set of three functions:
  • llSetAgentParams
  • llGetAgentParams
  • llResetAgentParams
The setting of these agent parameters could behave similar to llSetAnimationOverride: where once an attribute is set, the customization will persist until explicitly overridden, reset, or the user logs off. Also like the animation override, this would require a new runtime permission:
PERMISSION_CHANGE_AGENT_PARAMS
  • Action: configure the overriding of default agent parameters
  • Category: Agent
  • Granter: Anyone
  • Auto-granted when: Attached
llSetAgentParams(list params)
  • Sets the agent parameters specified in params.
  • Survives script reset/removal, attachment removal, changing regions and teleporting - but not relog.
  • Setting a zero/null/etc value is the same as resetting it to default.
  • Invalid inputs cause the function to shout an error on DEBUG_CHANNEL. The function will still accept and act upon valid inputs that preceded the invalid one(similar to llSetPrimitiveParams).
  • Requires new permission: PERMISSION_CHANGE_AGENT_PARAMS.
[AGENT_WALK_SPEED, float speed] : Agent's walking speed
[AGENT_RUN_SPEED, float speed] : Agent's running speed
[AGENT_CRAWL_SPEED, float speed] : Agent's crouch-walking speed
[AGENT_TURN_SPEED, float speed] : Agent's turning speed
[AGENT_FLY_SPEED, float speed] : Agent's horizontal flight speed
[AGENT_FLY_UP_SPEED, float speed] : Agent's hover-up speed
[AGENT_FLY_DOWN_SPEED, float speed] : Agent's hover-down speed
[AGENT_JUMP_SPEED, float speed] : Speed at which agent achieves apex of jump height
[AGENT_JUMP_HEIGHT, float height] : Agent's vertical jump height
[AGENT_STAND_PHYSICS_SIZE, vector size] : Scale applied agent's standing physics shape
[AGENT_SIT_PHYSICS_SIZE, vector size] : Scale applied to agent's sitting physics shape
[AGENT_GROUND_SIT_PHYSICS_SIZE, vector size] : Scale applied to agent's ground-sitting (ALT+Shift+S) physics shape
Min/Max values up for discussion. I imagine minimum size would mimic prims; no single dimension being smaller than 0.010 meters.
list llGetAgentParams([list params])
  • Essentially same as llGetPrimitiveParams.
  • Only accepts the AGENT_* flags as listed above.
  • Requires PERMISSION_CHANGE_AGENT_PARAMS.
llResetAgentParams([params])
  • Reverts specified parameters back to their system defaults.
  • Only accepts the AGENT_* flags as listed above.
  • Additional param: AGENT_ALL_PARAMS as a shortcut to reset all (or alternatively: supplying an empty list?).
  • Requires PERMISSION_CHANGE_AGENT_PARAMS.
Since llSetAgentParams and the persistence of its effects are modeled after the llSetAnimationOverride functions, it would have similar (if not higher) potentials for abuse, given the fact that these would go beyond cosmetic changes and could impact user navigation throughout SL. For that reason, I also suggest some additional viewer/server components to go alongside with this feature as defined below. If there is still concern, perhaps adding a throttle to how many times attributes can successfully be changed in a given time frame (in which case having the set function return a status integer would be warranted). Or perhaps removing the auto-granting of the permission on attach - though Experiences should still function as normal.
Additional viewer support functionality:
A UI toast/popup that appears whenever an agent parameter is changed, similar to the ones that show whenever the avatar complexity changes. At minimum, this popup should have a clickable link to a knowledge base article that explains this feature - and most importantly, how to reset it. This toast/popup can also be disabled by the user in Preferences > Notifications.
A new menu item "
Avatar > Reset agent
" to immediately reset all agent params and revoke PERMISSION_CHANGE_AGENT_PARAMS to any unattached objects in the same region (similar to "
Avatar > Stop animations
"). Also, a "
Develop > Render Metadata > Agent Physics Shapes
" would be useful for users to visualize the altered (and default) agent physics shapes.
Additional land support functionality:
A new land option which could disallow changing agent params and/or ignore custom params and only use agent defaults while within the parcel/region (similar to no-fly zones). This would be beneficial to established games which rely on using the agent's default attributes and would consider alterations cheating (similar to the prohibiting of user made movement enhancers). Also consider letting experiences still perform such overrides over allowed land.
Justification moved to comments due to 5k character limit...