Verbs

Verbs are python classes that give the player options in sex scenes. Fuck is a Verb, Cast Illusion is a Verb. Writing a new verb will require some fluency in Python. You’ll need to know about classes and objects at least.

Dom Verbs vs. Sub Verbs

Mortals have their own Verbs. I’ve been putting my dom verbs into DomVerbs.py and sub verbs into SubVerbs.py, but you can put them anywhere. The thing that distinguishes the two is whether the verb is passed in as one of the verb_constructors in Dom equipment, or one of the extra_verb_constructors in an Archetype.

Sub Verbs need an extra get_weighting() function. The verb with the highest weighting is the verb that runs. Weightings below 0.3 never get chosen.

Even mortals that don’t have special abilities have Sub Verbs. Sub Verbs are the things that cause mortals to fondle the protagonist, masturbate, and ask questions.

Multi-verbs contain Verbs

It’d be monotonous if a frequent verb was the same every turn, so things like the basic arousal verb will switch between manual and oral stimulation for different places on the body. Much like with event decks, MultiVerb is a Verb which acts like a single verb but randomly selects from an internal list.

Verbs aren’t constants

Verbs are one of the oldest parts of Fleshcult, and have some of the stupidest historical baggage. Unlike most classes, there’s no split between the Constant definition of a verb and the mutable state (things like cooldown timers), so Verb has an unpickle policy. This might seem odd because the game only saves in between sex encounters - why would we be saving Verbs? Well, I needed to save with every page load back when FC was a web game. This is unnecessary now, so I’ve been working towards ensuring Verbs never reach the save file in practice, but as of the time of writing, I’m not there yet.

The practical impact is that if you make a Verb in your mod, then remove or rename the variables inside your Verb in a later version, that can break saves that look for the old variable names. (Unless you explicitly write a MigrationTable to port the old versions over, but I recommend not getting into this situation in the first place)

Also the class declaration should be at file scope so pickle can find it. (i.e. instead of indenting so it’s inside __init__() or another function, put it in the file as its own separate thing)

Examples

Making a Verb

This code sample will, when enabled as a mod:

  • Add suspicious nipples to the cyclopaedia tome in the Sanctum
  • The nipples give the player a Dance verb, which only terrifies the sub
  • There are no messages associated with dancing, but there’s a new event you can select in the Dialogue Editor called on_flabbergast, where you could enter those messages.
  • You can learn how to do other things than terrifying the sub by reading DomVerbs.py.
import faust.ShopItem
import faust.Dialogue

from faust.Constant import get_constant, del_constant
from faust.Verb import Verb
from faust.Dialogue import dialogue_event
from faust.ShopItem import MakeShopItem

class DanceVerb(Verb):
    def __init__(self, equipment):
        Verb.__init__(self,
            "Dance",
            "Dance like nobody's watching, horrifying partner",
            None)

    def before_encounter_start(self, response, encounter):
        Verb.before_encounter_start(self, response, encounter)

    def get_category(self):
        # Determines which cluster of verbs in the UI this one will go into
        return 'arouse'

    def run(self, response, giver, receiver, target_part):
        Verb.run(self, response, giver, receiver, target_part)
        receiver.terrify(5, 'visual')

        # Trigger a dialogue rule producing text.
        # You won't have any rules defined yet, so it won't do anything
        dialogue_event(response, 'on_flabbergast')


def init():
    sus_nipples = MakeShopItem('two', 'treacherous', 'suspicious nipples',
        prototype=faust.ShopItem.nipples, min_lust=1, cost=69,
        desc="{subj.He} has the most dubious nipples anyone has ever seen. ",
        verbs=[DanceVerb],           # List of verbs given by this TF
        # For each verb, a pair with UI title and description
        verb_descs=[('Dance', 'Jiggle distressingly for your partner')])

    shop = get_constant('shop.default')  # Cyclopaedia of Occult Knowledge
    shop.available_items.append(sus_nipples)

    # This new event type will appear in the dialogue editor after you've run this
    faust.Dialogue.all_dialogue_events.append(('on_flabbergast', 'Player flabbergasts sub'))

def deinit():
    del_constant('shopitem.suspicious_nipples')
    del_constant('equip.suspicious_nipples')