Skip to content

Character Applications

Many games read a character before it plays. The chargen package keeps each character’s application as a draft the player fills in, sends to staff, and talks over with them until staff approve it. The same application is in the game with +app and in the web portal at /apps/chargen.

You areYou want toRead
A playerapply for a characterApplying
Staffread, comment on and decide applicationsReviewing
Stafflimit how many characters play at onceA cap and a waitlist
Staffchange the questionsChanging the form
Stafflet a background run over several attributesFields in chapters
Staffinstall it and change its settingsRunning applications

In the game, +help app has the same commands in short form.

Draft goes to Submitted on submit and back on withdraw. Submitted goes to Needs changes when staff ask for changes, and back to Submitted, as a new round, when the player submits again. Submitted goes to Approved, or to the Waitlist when every place is taken. Retiring an approved character frees its place for the waitlist.

  • Draft: the player’s to change. Staff cannot see it until it is first submitted.
  • Submitted: staff have it. The player can still comment, and can withdraw it to change something.
  • Needs changes: staff sent it back with comments. The player changes what they asked and submits again.
  • Approved: the character gets the approved role and plays.
  • Waitlist: approved, but every place is taken. It gets the next place that opens. Only when the game sets a cap.
  • Retired: the character stopped playing and gave up its place.

Every submission is kept as a round, on the character. Staff see what changed since the round before, field by field.

+app shows your application. A new one lists the fields with a line about each:

> +app/set concept=A lighthouse keeper who hears the sea talk back.
[APP] Done: Concept saved.
> +app/set archetype=Mystic
[APP] Done: Archetype saved.

+app/set <field>=<text> fills in a field, and an empty text clears it. For a long field, +app/write <field> lets you type as many lines as you like; send .done on a line by itself to save it. A field that comes in chapters takes +app/set <field>/<chapter>=<text>.

Each answer is an attribute on your character, named for the field. Only +app changes it, so staff see every change in the next round:

> examine me/CONCEPT
CONCEPT [w #1]: A lighthouse keeper who hears the sea talk back.
> &CONCEPT me=A sailor
#-1 NO PERMISSION TO SET ATTRIBUTE

When every required field is filled in, +app/submit sends it to staff and tells you where you are in the queue:

> +app/submit
[APP] Done: Submitted. Number 1 of 1 in the queue. Applications usually get an answer in about 2d.

The typical wait is the middle of the latest decisions, so it follows how fast your staff actually answer. +apps/queue shows the same to anyone, without names, and the places left when the game has a cap:

> +apps/queue
╔══════════════════════════════╡ Applications ╞══════════════════════════════╗
║ Waiting: 1 application ║
║ Typical wait: about 1d ║
║ Places: 3 of 3 taken, 0 waiting ║
╚════════════════════════════════════════════════════════════════════════════╝

To change something after submitting, +app/withdraw takes it back to a draft.

You hear when staff comment or send it back, by @mail if you are not connected. +app then shows their message at the top and each comment under the section it is about:

+app for an application staff sent back: the message asking for changes at the top, and a comment under the History section

Change what they asked, answer a comment with +app/comment <section>=<text>, and submit again. +app/comment =<text> is about the whole application.

> +app/comment history=Added the bargain. Happy for anyone to ask her about it.
[APP] Done: Comment added.
> +app/submit
[APP] Done: Submitted. Number 1 of 1 in the queue. Applications usually get an answer in about 2d.

In +app, a * marks a field you changed since you last submitted. +app/diff lists them with what each said and says now.

/apps/chargen is the same application as a form. Staff comments sit under the sections they are about, each with a box to reply. Save draft keeps your changes without sending them; Submit sends them.

The portal form for an application in Needs changes: two messages from staff at the top, the fields of each section, and a staff comment with a reply box under History

Reviewers hold the application-reviewer role:

> @role/assign *Tess=application-reviewer
Tess now holds application-reviewer.

+apps is the queue, the longest waiting first. Changed says how many fields changed since the round before:

+apps listing Mara in round 2, waiting 5 seconds, with 1 field changed

+app <name> reads one application as last submitted. +app/diff <name> shows each field that changed since the round before; +app/diff <name>=<round> compares with an earlier round.

+app/diff Mara: the Background field, what it said in round 1 and what it says in round 2

+apps/waitlist, +apps/all (every application not yet decided) and +apps/decided are the other lists.

Comments belong to a section, so the applicant reads them next to the answers they are about:

> +app/comment Mara/history=Lovely. Who taught her the means? A line on that would let others ask about it.
[APP] Done: Comment added.
> +app/note Mara/concept=Check with the sea-spirits plot before approving.
[APP] Done: Staff note added. Mara does not see it.

+app/note is the same as +app/comment, but only reviewers read it.

> +app/return Mara=Nearly there. Say a little more about the winter the lamp failed.
[APP] Done: Returned to Mara for changes.
  • +app/return <name>=<what to change> sends it back. The message is required.
  • +app/approve <name>[=<message>] approves it and gives the character the approved role.
  • +app/retire <name> takes an approved character out of play: it loses the role.

Nobody decides their own application, even a wizard.

For a reviewer, the application’s sidebar lists Waiting (the queue), Waitlist, Open and Decided. Waiting and Waitlist show how many are in them:

The Character Application page with its sidebar: My application, then under Review the Waiting, Waitlist, Open and Decided lists

The queue:

The portal queue: one row for Mara, round 2, waiting 1 minute, 1 field changed

Opening an application shows each section with a table of what changed since the round before, the comments, a box for a new one with a Staff only switch, and at the end Ask for changes and Approve:

The History section of a reviewer's page: the Background answer, a table with its round 1 and round 2 text side by side, and the comments under it

A game can limit how many characters play at once. The cap counts holders of the approved role, and is off until you set it:

> +config chargen/cap=40
[CONFIG] Done: chargen/cap is now 40, was 0.

With every place taken, approving puts the application on the waitlist. Retiring a character gives its place to the first one waiting, at once:

+app/approve Ilse puts her first on the waitlist; +app/retire Cora gives Ilse the place

Raising the cap admits the waitlist into the new places straight away. +config chargen/cap=0 turns the cap off.

The questions are the game’s. The form is sections, and fields in them. +apps/fields lists them, with the attribute each answer is kept in:

+apps/fields: the Concept, History and Personality sections, each a table of its fields with their type, attribute, most characters and notes

Changing it takes the config.admin permission:

> +apps/section skills=Skills
[APP] Done: Added the section Skills. +apps/field <key>=skills/<label> puts a field in it.
> +apps/field trade=skills/Trade
[APP] Done: Added the field Trade to Skills. +apps/field/type trade=long makes it take many lines.
> +apps/field/type trade=choice
[APP] Done: Trade type: choice
> +apps/field/choices trade=Sailor|Smith|Healer
[APP] Done: Trade choices: Sailor|Smith|Healer
> +apps/field/required trade=yes
[APP] Done: Trade required: yes
> +apps/field/help trade=What they do for coin.
[APP] Done: Trade help: What they do for coin.

Each field has these options, set with +apps/field/<option> <key>=<value>. An empty value puts one back to its default.

OptionValue
labelWhat the form calls it.
sectionThe section it is in.
typetext (a line), long (paragraphs) or choice.
choicesFor a choice field, the choices, split by `
requiredyes when it must be filled in before submitting.
maxThe most characters: 500 for text and 8000 for long by default. For a field in chapters, the most in each chapter.
orderWhere it comes in its section.
helpA line shown under an empty field.
attributeThe attribute on the character that holds the answer: the key by default. One with a * makes the field come in chapters.
chaptersFor a field in chapters, how many it may have: 20 by default, up to 100.

+apps/section/order <key>=<number> moves a section; lower comes first. +apps/field/remove <key> and +apps/section/remove <key> take things out. Answers already given stay on the characters, and a new attribute does not move them.

+apps/field <key> shows one field in full: every option, with (default) after the ones the form leaves unset, the attributes each character keeps it in, and for staff who change the form the attributes on the Chargen Store that define it:

+apps/field background: its options, BG* as the answer's attribute with each round's, and a table of its attributes on the Chargen Store

A long background often outgrows one attribute, and older games keep it as BG1, BG2 and so on. A field whose attribute has a * in it comes in chapters, and the * stands for the chapter. The form’s Background field starts that way, as BG*. To do the same for another field, or to change how many chapters Background allows:

> +apps/field/attribute personality=PERS*
[APP] Done: Personality attribute: PERS*
> +apps/field/chapters background=5
[APP] Done: Background chapters: 5

+apps/field/attribute background=BACKGROUND puts Background back in one attribute.

Each chapter is then an attribute of its own, and max is the most characters in one chapter. A character who already has BG1 and BG2, from an imported database, finds them as chapters 1 and 2.

The player writes a chapter with +app/set <field>/<chapter>=<text> or +app/write <field>/<chapter>. A chapter is a word of up to 20 letters, digits, - and _, usually a number, and the field named alone is chapter 1:

> +app/set background=Born on the river barges, Cora learned the moods of the Sallow before she could read.
[APP] Done: Background chapter 1 saved.
> +app/set background/2=Then the war came, and the barges carried soldiers instead of grain.
[APP] Done: Background chapter 2 saved.

+app shows every chapter in order, each under its name:

+app for Cora: the Background answer in three chapters, each under a Chapter heading

A submission keeps every chapter, and +app/diff shows only the chapters that changed:

+app/diff Cora: Background chapter 2, what it said in round 1 and what it says in round 2

In the portal, each chapter has its own box, with an empty one for the next while there is room:

The History section of the portal form: a box for each of Background chapters 1 to 3, and an empty box for chapter 4

Applications ship with the server but are not installed on a new game. An administrator installs them from the portal:

  1. Open Packages in the admin area and choose Browse.
  2. Install chargen, which gives +app and +apps. It needs plus-help, plus-config and http-handler; a new game already has them.
  3. Install chargen-app for the portal page. It asks for the lowest portal role that may open the page, player by default.

The first-run setup also offers both.

+config chargen lists the settings; +config chargen/<setting>=<value> changes one.

SettingDefaultWhat it does
cap0The most characters with the approved role. 0 is no cap.
approved-roleapprovedThe role approval gives, and what the cap counts.
show-queueyesApplicants see their place and the typical wait, and anyone can use +apps/queue.
wait-sample20How many of the latest decisions the typical wait is the middle of.
mail-offlineyesApplicants who are not connected hear about decisions and comments by @mail.

Approval gives the role and nothing else. To do more, set one of these attributes on the Chargen object (@find Chargen):

AttributeRuns when
ON`SUBMITan application is submitted
ON`RETURNstaff ask for changes
ON`APPROVEa character is approved, including from the waitlist
ON`WAITLISTan approval goes on the waitlist
ON`RETIREa character is retired

Each runs as the Chargen object with %<character> the applicant’s objid. The decisions also get %<actor>, the reviewer, and %<message>. This one sends every approved character to the docks and makes it their home:

> &ON`APPROVE Chargen=@tel %<character>=#26; @link %<character>=#26
Chargen/ON`APPROVE - Set.

After the next approval, the character is there:

> think [loc(*Wren)] [home(*Wren)]
#26:1792049674351 #26:1792049674351