PyTFall > PyTFall: Game design

Characters+traits concept

(1/8) > >>

DarkTl:
Ok, let's outline how to describe characters during packs creation.

1. General info.
This is something that any character can have. Some of them are mandatory, others are optional. Mandatory ones are marked by [*].

*id: unique ingame identifier. Should not have spaces. Example: Estellise_Sidos_Heurassein.

full name: full name, useful only if it's different from name. Example: Estellise Sidos Heurassein

*name: first name only. Example: Estellise.

nickname: character's nickname, if exists. Example: Estelle.

description: short, arbitrary text. It could contain biography, small prehistory and/or short description. Example: A noblewoman who has spent all of her life growing up in her castle. Due to her restrictive upbringing, she has gained most of her worldly knowledge through books.

origin: the name of the source game/manga/anime/whatever. Example: Tales of Vesperia.

elemental: if character is familiar with magic of some kind according to the source, and this magic has some kind of element inherent to it, then it's possible to set it here. Possible elements: fire, wind, earth, water, light, dark, neutral. Neutral means no specific element, and the game sets it by default if you don't set otherwise. You can set only one element currently.
There could be a number after name from 1 to 3, ie "water 1". It describes how well the character masters it. Note that number doesn't mean anything for neutral. High level of mastery means less damage from enemy spells and elemental attacks, and more damage from character's elemental attacks and spells.

occupation: starting occupation. Currently there are Warrior, Prostitute, ServiceGirl and Stripper. The game will set starting occupation randomly if it's not specified.

location: starting location where you could find the girl in the game world.

status: status of the girl. Currently there are two types: free and slave.

2. Relative strength.
As long as you are familiar with the source, you know that some characters are stronger/smarter/prettier than others, especially within one title. This becomes even more tricky when we add levels. And it's quite unintuitive (and difficult for balancing) to set raw numbers for stats in girls data files. Besides, when you know girls stats because you created her, it's less interesting.

So to avoid all complications above we use descriptive system.

1) Levels as such reflect not strenght, but experience and general social rank.

In our game any character could become strong/smart/pretty, as long as there is enough time and desire to do it. To reach high social ranks, characters need high stats, and that means high level too because of stats limitations per level.
So, there are general social levels that tell the game how successful a character should be in terms of level, items, life conditions, etc. The game sets them randomly, depending on Slevel.

You can't see it ingame because it only sets intial conditions.
Its approximate meaning is from 1 (beggar) to 10 (high aristocracy). Depending on it game sets level and other stuff. If not specified, it will be random.

2) Initial stats. Stats are limited by level, so a value that could be very high for lvl1 character will be very low for lvl100 character.
Because of it we use descriptive system. Every stat could be from 0 to 100, and the higher the value, the higher stat will be compared to other stats.
Stats that are not specified will be random.

3. Races.

This part is a bit tricky.
Because it's impossible to code all existing races, there are two types of races, base race and actual race.

Base race is one of the races specified in game\content\db\races.json. Those races have small bonuses and penalties, and they serve as flags. Ie when you make a character with elf base race, the game and other characters know that this is an elf and not a human or a demon. Base races are as general as possible, and when you set a race, you should select a most suitable one.

In case if nothing is suitable even remotely, you can always select an unknown race. It won't have any events or effects though.
Note that base race will not be visible in the game. Base race will be unknown if not specified otherwise.

Actual race is an arbitrary string that will be visible in the game. It's the actual name of character's race, and it does nothing except being used in gui and dialogues.

DarkTl:
4. Traits.
Archetypes.
Tsundere: being on the surface sharp and sarcastic but underneath lovestruck and fawning; characteristic of a gap between acted out actions and feelings in mind
Yandere: a character who is either psychotic or violent or both, except for the main character since she's  obsessed with him.
Kuudere: collected, logical, cold and unassuming, blunt, cynical.
Dandere: a distant, silent, introverted, socially aloof character.
Ane: an "older sister" type. Mature, caring and parenial, takes care of others, practical and helpful.
Imouto: a "little sister" type. Looks up to others, childish, dependant, happy-go-lucky.
Kamidere: a character with superiority complex. Usually proud and/or arrogant and take no shame in stating what (they believe) they are best at. Bossy and commanding.
Bokukko: well, tomboy. Speaks and acts boyish. Confident, competitive.
Impersonal: Almost completely devoid of emotions, mainly relying on logic. It's usually android or something like that.
Deredere: a sweet, friendly character, without any issues with emotions or behavior, like those above. Ie a normal girl for a change.

Modificators. They are less important than archetypes, since they are not always influence behavior, or at least  influence it much less.
–°ourageous/Fearful: how well character deals with fears and threats.
Optimist/Serious/Pessimist: how joyful chatacter is.
Virtuous/Vicious: moral principles, except for sex.
Confident/Shy: willpower and self-confidence.
Curious/Indifferent: Outlook, go with fast/slow learner effects.
Energetic/Dawdler: activity level. It describes not speed (= agility and AP), but desire to act.

Body and mind.
Boobs: Small/Normal/Big/Abnormally Large.
Figure and body: Loli/Slim/Chubby/Athletic/Manly. It doesn't have anything to do with pure constitution anymore, instead it describes figure only, something that doesn't change over time in our case.
Not Human: for cases when you can clearly see that the character is not a human. There are races that look just like humans, so this flag is not for them.
Moves: Elegant/Clumsy.
Strange eyes: no matter the race, how different eyes from normal ones.
Scars: even though not too common, they do have a great impact on looks.
Long Legs: they all are not short, but in some cases they are clearly longer than usual.
Great arse: pretty much the same. They all are great, but in some cases greater.

Sex traits.
Sadist/Masochist, Lesbian/Bisexual/Straight, Exhibitionnist, Nymphomaniac/Frigid, Sexy Air.

5. Flags.
Flags are various characteristics that don't affect characters personalities, but affect events and actions.

Magic Gift: an ability to use magic. Characters without this flag cannot use any spells.
Psychic: an ability to read minds, like telepathy for example. There are others, but all they go here.
Nerd: yeah, well, bookish characters and so on.
Combat Training/Adventurer/Assassin: special training flags.
An example: anyone can use weapon, even at 0 skill, but either after special training or with enough experience it becomes natural and effective, especially for self-defence.
Half-Sister: nuff said.
Heavy Drinker/Always Hungry: flags for autobuying system.
Virgin: a temporary flag.
Kleptomaniac: for thiefs.

In case if you wonder where artificial body or alien flags are, they are a part of race system. Like, all angels are aliens, and all androids are artificial.

Xela:

--- Code: ---"id": ""
--- End code ---
Expects a string. This is a name of a trait. This field is the only one that is absolutely required.


--- Code: ---"desc": ''
--- End code ---
*string
Description of a trait.


--- Code: ---"icon": "path/img.png"
--- End code ---
*string
Icon for traits that have images (elements/race/personality).


--- Code: ---"hidden": false
--- End code ---
*bool
Experimental field currently not in use. Determines if a trait should be hidden until PC is experienced enough to see it or there is a person of experience present.


--- Code: ---"mod": {}
--- End code ---
*dict
Modifies base stat values, 10% bonus of specified values each 5 levels.


--- Code: ---"max": {}
--- End code ---
*dict
Modifies max stat values.


--- Code: ---"min": {}
--- End code ---
*dict
Modifies min stat values.


--- Code: ---"blocks": {}
--- End code ---
*dict
Adds traits that are blocked for as long as the character has this trait.


--- Code: ---"effects": []
--- End code ---
*list
Adds effects.
           
"sex": "female" # Untill we set this up in traits: this should be "unisex" by default.
*string ("male", "female", "unisex")
Not used atm but will be since traits now can be applied to any class.

======

--- Code: ---            # Types:
            self.type = "" # Specific type if specified. (*string) | JSON: "type": ""
            self.basetrait = False # Flags traits as special traits from respective groups. (*bool) | JSON: "basetrait": false
            self.personality = False
            self.race = False
            self.breasts = False
            self.body = False
            self.elemental = False
--- End code ---
           
           

--- Code: ---"add_beskills": []
--- End code ---
*list
Adds battle engine skills. Currently not in use but prolly will be.
           
Elemental:

--- Code: ---"el_name": ""
--- End code ---
*string
Name of the actual element can be added here, presently not in use since all elements in the game are named as the lowercase Elemental Trait name. We'll prolly remove this and keep that as a rule.


--- Code: ---"el_damage": {}
--- End code ---
*dict
Adds to multiplier (base 1.0) if skill used by the attacker has an element specified here.


--- Code: ---"el_defence": {}
--- End code ---
*dict
Subtracted from multiplier if a skill used against the defender has an element specified here.

--- Code: ---"el_special": {}
--- End code ---
*dict
Not in use but I have ideas for it for when we have more content.

Weapon Focus:

--- Code: ---"we_damage": {}
"we_defence": {}
"we_special": {}
--- End code ---
*dicts
Not yet in use, but will be. This will likely work off weapon types, Like an archer trait will gain advantages when using a bow or a cross bow. I have a lot of ideas/hopes for this but nothing has been coded in yet.



Base mods on init (used for basetraits (aka Class Traits)):

--- Code: ---"init_mod": {} # {"attack": 100}
"init_lvlmax": {} # {"attack": 100}
"init_max": {} # {"attack": 150}
"init_skills": {} # {skill: [action, training]}
--- End code ---
All of these just add the numbers specified once when the character is initiated (or more precise, trait first applied). Nothing more and nothing less at this point. I am planning to add a small portion of this on level-ups as well but we need to wrap the game logic up and test to know what's reasonable.
           

--- Code: ---"leveling_stats": {x: [a,b]} # {stat: [lvl_max, max **as mod values]}
--- End code ---
This can actually modify the amounts by which stats increase of levelups. Be VERY careful with this, at the time that I write this, every level-up increases max by 2 and lvl_max by 5. If a character is assigned just one class, effects will be doubled so negative max SHOULD NEVER go over -1 and lvl_max SHOULD NEVER go over -2!

Notes:
Traits are still heavily in development... we've added font color just recently for example.

To create random girls properly, traits will have to carry more info with them so there is no shortage of characters of some specific kind in the game. Maybe we'll even allow adding them during gameplay (but never to remove). In either case, we'll have to add more fields, I just can't tell what those are yet.

Special traits like personality, race, body and breast are mutually exclusive and do not have to carry absolute blocks against their counterparts (anymore).

Elements can be added indefinitely, in case of multiple alignments with spell attributes, mean will be calculated and used. No element == Neutral Element. Noone can have Neutral together with any other element by design. If all other elements are removed, Neutral is restored, but elements, while can be gained, are expected to be permanent (through previous design, I think there is nothing in the game that will prevent removing them atm).

DarkTl:
Of course this is how I propose it to work.

Xela:
Right :)

Setting relative stats from 1 to 10 isn't a good idea. We should either base those of future ranks or percentages just as we do now but first level the character up to what the modder sets.

Navigation

[0] Message Index

[#] Next page

Go to full version