CharacterCreationLib: What kind of questions?

OK ... I'm building a system because it's interesting to play with, but I don't actually have a game to go with it. So, I might as well make it a library. Even put the original HDD back in my laptop occasionally so I have a Windows machine to test it on.

So… if you might use a character creation library, or if you've built a character creation system for your own games before, can you help me figure out what kind of questions it needs to support?

My basic structure is a set of 'question' objects, which are placed inside the player object. They're called one by one until all are answered. If a question contains another question, the outer one will be asked first. So far, I have 3 types of question:

  • All question types have attributes you can set to determine:
    • Description
    • Which of the player's attributes the answer goes into
    • Script attribute to run before or after setting the value
      • Which can set a flag to make the question repeat if the player entered something dumb/invalid
    • Default answer
    • Randomiser script attribute in case the player doesn't want to do chargen
    • Allow the player to go back and change their mind after answering all questions (boolean)
    • Allow the player to change answers later in the game (boolean)
      • Undo script - the questions will store enough data to allow them to be changed later, but you can add your own undo script attribute if you want
  1. Text Question (eg "Enter your name?")
    • Allows regexp to validate player's answer
  2. Choose from list
    • Single or multiple choice; allow "none" or not
    • Script attribute allows you to determine which options to offer based on previous questions
      • If a previous answer is changed, the validation function will re-run to determine if this one needs to be changed too
  3. Enter number
    • For stats. Either free choice, dice division, or spending character points
    • You can declare any attribute to be a 'character points' attribute, which can then be divided between other attributes
    • Arithmetic, geometric, or exponential points cost
  4. Choose an object (eg class, race, starting equipment)
    • Question object contains a number of 'answer' objects
    • Allow pick-one/pick-up-to-X/pick-any-number/points-cost
    • Flags to select some or all of:
      • Copy the object's name or reference into an attribute of the player
      • Move the object itself into the inventory
      • Move the object's children into the inventory
      • Copy the object's attributes (or a list of attributes) onto the player object
        • Adding them together if the player already has such an attribute
  5. Derived stats
    • An attribute that is generated using either a text-processor string, or a script attribute
    • This "question" doesn't actually ask the player anything; it just calculates the attribute
    • Can dynamically set up changedscripts (copies script attributes from the question to the player object once the base stats are configured)
    • Can have semi-derived stats; allows spending character points to add on points.
  6. Message
    • Display a message and wait before asking the next question
  7. Choose Question
    • Optionally display a summary of stats so far
    • Can allow the choice of which question comes next. Either:
      • Choose the next question; other questions inside this one are discarded
      • Choose the next question; once that's answered, give the choice again
      • "Are you sure?" - allow the player to go back and change questions from earlier in character creation
      • Can allow a menu of both answered and unanswered questions.

So… is there anything I've missed there? What else would you expect this library to offer?

Questions might depend on previous answers. If the player chooses to play a race with a tail, ask about the tail, otherwise skip it. You might want to include the facility to explain what the options mean to the character and how it will affect attributes.

This is kind of looking at it from the other side, but I prefer to see all the questions at once so I can build a holistic character. Here are a couple of examples from games that never happened.

This is a CV; you can click the boxes to change the options:

And some text; you can again click on bits to scroll through options.

This completed game is for a more traditional RPG, and has a point-buy system for attributes. Spending points can get tedious if you gave to do it one step at a time.

Questions might depend on previous answers. If the player chooses to play a race with a tail, ask about the tail, otherwise skip it.

I figure my system already allows that. In most cases, because a race is a complex thing that will affect multiple stats, you'd have it as a "Choose an object" question; a set of child objects representing the base stats of different races. If you set it to move their child objects into the inventory, then you could put the "Tail length" question inside one of them, and it gets added to the queue as soon as it's in the player.

If it's enabled by multiple races, you could either have the tail question's "before" script invalidate the question if not needed; or have the race question's "after" script move it in or out of the player object as needed. The question objects will sit around as invisible objects as long as their canundo flag is set.

This is kind of looking at it from the other side, but I prefer to see all the questions at once so I can build a holistic character.

I was thinking about some kind of container for questions that displays several at once. For menus, that might be tough, but I think I can see a way to do it. (ShowMenu is non-blocking ☺. I was already playing with a similar system to take "Skip question", "Help", and "Back" options off the end of a ShowMenu call and displaying them as buttons rather than list items; while still keeping the scripts on them the same so that I don't need to edit ShowMenu or the parser code that deals with responses)

Having JS question widgets (especially for the numbers) would be good too… might leave that until I've got basic functionality, though.
Or… I could make everything look like a menu. Have a ShowMenu with options like "INT +1", "STR -1", "Done", etc … and generate a chunk of javascript (or even CSS) that changes how and where the options display on the client side.

I think for now I'll do the questions in order, except maybe for the numbers.

This topic is now closed. Topics are closed after 60 days of inactivity.