custom_sprite_salon 
One artist's custom work for one recipient and drawing target.
Hair work covers one drawing. Tattoo work covers every region of the body, and only the regions the draft changes are proposed, checked and applied. States: drafting -> awaiting approval -> applying -> completed. Declining, interruption or a stale approval returns to drafting and keeps the draft. Approval binds to an immutable copy of the exact reviewed revision, and every step checks the participants again.
Vars | |
| artist_ckey | Account allowed to edit and resume this draft. |
|---|---|
| artist_ref | Weak reference to the artist's current body. |
| drawing_ambience | Steady tattoo-machine ambience, separate from the varied needle bursts. |
| drawing_sound | A single brush-triggered clip, stopped when the editor closes. |
| drawing_sound_cooldown | Earliest time another brush movement may start a work clip. |
| dress_timer | Pending rebuild after the recipient's clothing changed. |
| editor | Retained drawing editor owned by this session: the salon hair editor, or the whole-body tattoo canvas. |
| mirror | Current recipient approval window, if any. |
| original | Style key -> list("package", "hash", "bodypart", "taur", "signature") for each drawing as it was when work started. |
| proposal | list("token", "revision", "packages") for the reviewed revision. Packages map style key -> package. |
| rebuild_preview_body | A body-owned appearance changed; worn items alone can reuse the existing preview body. |
| recipient_ckey | Account allowed to approve the finished design. |
| recipient_emissives | Recipient's master emissive permission captured for the draft. |
| recipient_name | Recipient's display name captured when work starts. |
| recipient_ref | Weak reference to the original recipient body. |
| restoration | A restoration proposes these packages, by style key, instead of a draft. |
| save_on_completion | Recipient requested a permanent save after this exact proposal is successfully applied. |
| self_work | Working on your own body: no consent step, and views you can't see need a mirror. |
| state | Consent and application phase of this salon session. |
| target | Drawing kind: hair, facial_hair or markings. Markings cover the whole body. |
| tool_ref | Weak reference to the tool used to start the work. |
| tool_type | Required tool family when checking or resuming the work. |
| trimming_stage | How big the pile under the recipient has grown so far. |
| trimming_timer | Pending timer for the next lot of clippings to hit the floor. |
| uniform_ref | The recipient's jumpsuit, watched because adjusting it changes what it covers without taking it off. |
| watched_ref | Artist currently watched for mirror and movement changes. |
Procs | |
| accept | Recipient approval. Binds to the exact reviewed token and revision, then starts the timed action. |
| application_valid | Whether the timed application for token is still the current one. |
| apply_proposal | Runs the timed action and applies the approved package once. Duplicate or stale calls do nothing. |
| artist | The artist's body, or null once it's gone or another player controls it. |
| award | Gives a player an achievement, when they have a client. |
| changed_packages | The packages that differ from the look their drawing had when work started. |
| close_mirror | Closes the mirror without treating the close as a decision. |
| complete_application | Applies the approved packages after the timed action. Every check runs again first. |
| context_act | Window actions the salon owns, shared by the hair editor and the tattoo canvas. |
| context_ui_data | Window data the salon owns, shared by the hair editor and the tattoo canvas. |
| decline | The recipient (or the timeout) turns the proposal down; the draft is kept. |
| draft_changed | An edit withdraws a proposal the recipient is still reviewing. |
| drawing_activity | Brush activity is sent during a stroke; validate it without changing pixels or pushing UI data. |
| drawing_problem | Why one drawing can't be changed: its part's problem, or a look that changed on the body since work started. |
| export_draft | Sends the draft as a style file: the hair drawing, or the whole body as the tattoo canvas holds it. |
| export_proposal | Sends the reviewed proposal as a style file: the hair drawing, or the regions a tattoo changes. |
| finish_problem | Why the draft can't be proposed as drawn, such as a tattooed region over its own color limit, or null. |
| hair_problem | Scissors and tattoo machines change the haircut and its color, not the rest of the look. |
| held_tool | Returns the held tool of this session's type, preferring the one work started with. |
| label | What this work is called, such as "hairstyle". |
| locked_directions | Views this artist can't work on right now. Only self-styling restricts anything. |
| locked_view_problem | Refuses changes to views the artist can't see, in case the mirror is gone by the time they finish. |
| on_artist_changed | The artist moved: self-styling locks may have changed. |
| on_recipient_changed | The recipient's equipment changed: locks and the watched jumpsuit follow. |
| on_recipient_overlay_changed | A worn or body overlay changed: guides, previews and the mirror redraw shortly. |
| on_uniform_adjusted | Rolling a jumpsuit up or down changes what it covers and how it looks, without taking it off. |
| part_problem | Why a drawing's part can't take work right now, or null. |
| participant_problem | Returns why the work can't proceed, or null when it can. |
| propose | Sends the current revision to the recipient's mirror. |
| proposed_packages | Style key -> each package finishing would apply, before unchanged ones are dropped. |
| recipient | The recipient's body, or null once it's gone or another player controls it. |
| refresh_editor_body | Rebuilds the editor's resources after clothing or body changes settled. |
| region_problem | Why a tattoo region can't take paint right now, or null. Cheap enough for every region on every stroke. |
| return_to_drafting | Returns an awaiting or interrupted proposal to drafting. Restorations end instead. |
| schedule_preview_refresh | Groups a second of changes into one refresh, without postponing it while changes continue. |
| schedule_trimmings | Queues the next lot of clippings. |
| shed_trimmings | Drops or grows the pile under the recipient, then queues the next one. |
| stop_drawing_ambience | Stops the tattoo machine's ambience once drawing has gone quiet. |
| stop_drawing_sounds | Closing keeps the draft but silences both channels. |
| watch_artist | Self-styling locks depend on what the artist is holding and where they stand, so follow both. |
| watch_recipient | Observe the live body, never its preview, so redraws cannot schedule themselves. |
| watch_uniform | Follows whichever jumpsuit the recipient wears: rolling it down or up changes what it covers. |
| work_keys | Style keys of the drawings this work would change as it stands: a hair target's own, or each changed tattoo region. |
| work_phrase | How a retained draft is described to the artist it belongs to. |
Var Details
artist_ckey 
Account allowed to edit and resume this draft.
artist_ref 
Weak reference to the artist's current body.
drawing_ambience 
Steady tattoo-machine ambience, separate from the varied needle bursts.
drawing_sound 
A single brush-triggered clip, stopped when the editor closes.
drawing_sound_cooldown 
Earliest time another brush movement may start a work clip.
dress_timer 
Pending rebuild after the recipient's clothing changed.
editor 
Retained drawing editor owned by this session: the salon hair editor, or the whole-body tattoo canvas.
mirror 
Current recipient approval window, if any.
original 
Style key -> list("package", "hash", "bodypart", "taur", "signature") for each drawing as it was when work started.
proposal 
list("token", "revision", "packages") for the reviewed revision. Packages map style key -> package.
rebuild_preview_body 
A body-owned appearance changed; worn items alone can reuse the existing preview body.
recipient_ckey 
Account allowed to approve the finished design.
recipient_emissives 
Recipient's master emissive permission captured for the draft.
recipient_name 
Recipient's display name captured when work starts.
recipient_ref 
Weak reference to the original recipient body.
restoration 
A restoration proposes these packages, by style key, instead of a draft.
save_on_completion 
Recipient requested a permanent save after this exact proposal is successfully applied.
self_work 
Working on your own body: no consent step, and views you can't see need a mirror.
state 
Consent and application phase of this salon session.
target 
Drawing kind: hair, facial_hair or markings. Markings cover the whole body.
tool_ref 
Weak reference to the tool used to start the work.
tool_type 
Required tool family when checking or resuming the work.
trimming_stage 
How big the pile under the recipient has grown so far.
trimming_timer 
Pending timer for the next lot of clippings to hit the floor.
uniform_ref 
The recipient's jumpsuit, watched because adjusting it changes what it covers without taking it off.
watched_ref 
Artist currently watched for mirror and movement changes.
Proc Details
accept
Recipient approval. Binds to the exact reviewed token and revision, then starts the timed action.
application_valid
Whether the timed application for token is still the current one.
apply_proposal
Runs the timed action and applies the approved package once. Duplicate or stale calls do nothing.
artist
The artist's body, or null once it's gone or another player controls it.
award
Gives a player an achievement, when they have a client.
changed_packages
The packages that differ from the look their drawing had when work started.
close_mirror
Closes the mirror without treating the close as a decision.
complete_application
Applies the approved packages after the timed action. Every check runs again first.
Only the drawings the proposal changes are applied, and each keeps its previous look as round history. Achievements are awarded once per application.
Returns:
- TRUE: Applied. The session is deleted, so a replayed call finds nothing to apply.
- FALSE: Stale, duplicate, interrupted or invalid. Nothing changed.
context_act
Window actions the salon owns, shared by the hair editor and the tattoo canvas.
context_ui_data
Window data the salon owns, shared by the hair editor and the tattoo canvas.
decline
The recipient (or the timeout) turns the proposal down; the draft is kept.
draft_changed
An edit withdraws a proposal the recipient is still reviewing.
drawing_activity
Brush activity is sent during a stroke; validate it without changing pixels or pushing UI data.
drawing_problem
Why one drawing can't be changed: its part's problem, or a look that changed on the body since work started.
export_draft
Sends the draft as a style file: the hair drawing, or the whole body as the tattoo canvas holds it.
export_proposal
Sends the reviewed proposal as a style file: the hair drawing, or the regions a tattoo changes.
finish_problem
Why the draft can't be proposed as drawn, such as a tattooed region over its own color limit, or null.
hair_problem
Scissors and tattoo machines change the haircut and its color, not the rest of the look.
held_tool
Returns the held tool of this session's type, preferring the one work started with.
label
What this work is called, such as "hairstyle".
locked_directions
Views this artist can't work on right now. Only self-styling restricts anything.
locked_view_problem
Refuses changes to views the artist can't see, in case the mirror is gone by the time they finish.
on_artist_changed
The artist moved: self-styling locks may have changed.
on_recipient_changed
The recipient's equipment changed: locks and the watched jumpsuit follow.
on_recipient_overlay_changed
A worn or body overlay changed: guides, previews and the mirror redraw shortly.
on_uniform_adjusted
Rolling a jumpsuit up or down changes what it covers and how it looks, without taking it off.
part_problem
Why a drawing's part can't take work right now, or null.
The part must be the one work started on: the same bodypart, and the same taur organ for the taur region. It must also be reachable: not missing, covered, husked or hidden. This is cheap enough to run for every region on every stroke.
participant_problem
Returns why the work can't proceed, or null when it can.
This covers both participants and their controlling players, consciousness, the held tool and reachability, then each drawing it checks: the part it's on, whether that can be reached, and its look since work started.
Arguments:
- keys: Style keys of the drawings to check. By default the proposal's, or the drawings this work would change as it stands.
propose
Sends the current revision to the recipient's mirror.
Returns:
- null: The mirror opened.
- text: Why it didn't. The draft is unchanged.
proposed_packages
Style key -> each package finishing would apply, before unchanged ones are dropped.
recipient
The recipient's body, or null once it's gone or another player controls it.
refresh_editor_body
Rebuilds the editor's resources after clothing or body changes settled.
region_problem
Why a tattoo region can't take paint right now, or null. Cheap enough for every region on every stroke.
Answers exactly as drawing_problem() does, but only compares the full look once the region's fingerprint has changed.
return_to_drafting
Returns an awaiting or interrupted proposal to drafting. Restorations end instead.
schedule_preview_refresh
Groups a second of changes into one refresh, without postponing it while changes continue.
schedule_trimmings
Queues the next lot of clippings.
Only hair work sheds, and only a real cut rather than a restoration. Cutting your own hair still drops it. Mid-cut the pile stops growing at SALON_TRIMMING_WORKING_MAX; completion takes it the rest of the way.
shed_trimmings
Drops or grows the pile under the recipient, then queues the next one.
stop_drawing_ambience
Stops the tattoo machine's ambience once drawing has gone quiet.
stop_drawing_sounds
Closing keeps the draft but silences both channels.
watch_artist
Self-styling locks depend on what the artist is holding and where they stand, so follow both.
watch_recipient
Observe the live body, never its preview, so redraws cannot schedule themselves.
watch_uniform
Follows whichever jumpsuit the recipient wears: rolling it down or up changes what it covers.
work_keys
Style keys of the drawings this work would change as it stands: a hair target's own, or each changed tattoo region.
work_phrase
How a retained draft is described to the artist it belongs to.