Characters and Archetypes

What’s an Archetype?

Archetypes are the templates for making new characters. Housewife and househusband are both archetypes. The archetype sets up special character-specific abilities and body parts, and how well they perform in the lair at different tasks.

There is also a Character class in the codebase, but that’s so minions, the protagonist, and invading demons can all have shared pronoun handling. It’s not particularly interesting. If you’re looking for the specific instances of people produced by Archetypes - say if you wanted to see the bookkeeping for their seduction state or something - those are instances of the SubCharacter class.

Examples

Making a Simple Archetype

See class Archetype in Archetypes.py for a full list of parameters.

from faust.Archetypes import Archetype, sub_factory
from faust.Constant import del_constant

def init():
    arch = Archetype(archetype_name='Sailor', # As shown in UI
                     archetype_id='sailor',   # Internal
                     level=8,                 # Difficulty level
                     max_upgrades=10,         # Optional: Max number of concubine upgrades
                     milkmaid_bonus=0,        # Optional: Beast multiplier boost
                     apprentice_bonus=0,      # Optional
                     bgm_name='bgm_glam')     # Background music
    sub_factory.add_unisex_archetype(arch, level=8)

def deinit():
    del_constant('arch.sailor')
    del_constant('arch.sailorf')
    del_constant('arch.sailorm')

There are typically two difficulty levels per location. 0-2 is the suburbs, 3-4 downtown, 5-6 Old Town, and 7-8 is the Pit. This determines how high their lust needs to be in order for seduction to work. Our sailor will appear in the pit.

Writing an intro

Archetypes have a unique introduction at the start of a sex encounter, so you’re probably wondering why Sailors only have the generic one at this point. To give them an intro you’ll need to open up the dialogue editor. If you scroll down to the “on_encounter_start” rules, you’ll see all the intros for the characters. You’ll need to make two: one for sailorf and one for sailorm. See the instructions in the dialogue editor page for how to clone one of these and save it out.

Extra SubVerbs and special body parts

Here’s a more complicated example. The Sailor has two special abilities: the porn star’s ability to arouse the protag and raver’s SubVerb for reducing their own max lust every so often. Thirdly we’re giving them a body with tattoos. The definition for the tattoos comes from Narcissus mutations in MonsterParts.py.

import faust.SubVerbs

from faust.Archetypes import Archetype, sub_factory
from faust.ShopItem import body_with, default_male, default_female
from faust.Constant import get_constant, del_constant

def init():
    def raver_revive():
        return faust.SubVerbs.ChangeSubLustCapVerb('Revive', lust_cap_change=-10, cooldown=13, event_name='on_sub_item')

    arch = Archetype(archetype_name='Sailor',
                     archetype_id='sailor',
                     level=8,
                     max_upgrades=10,
                     bgm_name='bgm_glam',
                     extra_verb_constructors=[
                         faust.SubVerbs.multi_arouse_dom_verb,
                         raver_revive
                     ])

    male_sailor_body = body_with('male_sailor_body', default_male, [
        get_constant('equip.tattooed')
    ])
    female_sailor_body = body_with('female_sailor_body', default_female, [
        get_constant('equip.tattooed')
    ])

    sub_factory.add_unisex_archetype(arch, level=8,
        male_body=male_sailor_body,
        female_body=female_sailor_body)

def deinit():
    del_constant('arch.sailor')
    del_constant('arch.sailorf')
    del_constant('arch.sailorm')

Add a SubVerb to an already existing Archetype

You can also alter the game’s standard archetypes from your mod.

    sailorf = get_constant("arch.sailorf")
    sailorm = get_constant("arch.sailorm")
    sailorf.verb_constructors = default_verb_constructors + [my_verb_constructor]
    sailorm.verb_constructors = default_verb_constructors + [my_verb_constructor]