Use already-defined kinds of action to define new kinds of action?

So I can define a kind of action in the way that WI 7.15 says:

Include conversation framework by Eric Eve.
Answering someone that something is speech. Asking someone about is speech. Asking someone for is speech. Consulting someone about is speech. Implicit-asking is speech. Implicit-imploring is speech. Implicit-informing is speech. Implicit-quizzing is speech. Implicit-requesting is speech. Implicit-telling is speech. Imploring someone for is speech. Informing someone about is speech. Quizzing someone about is speech. Requesting someone for is speech. Saying goodbye to is speech. Saying hello to is speech. Saying no is speech. Saying sorry is speech. Saying yes is speech. Telling someone about is speech.

Easy enough. What Iā€™d like to do is to re-use the speech definition when defining another kind of action later on:

Factory Floor is a room. Factory Entrance is north of Factory Floor. Human Resources is east of Factory Floor. 

The player is in Factory Entrance. The player wears an employee ID badge. Frosty the Supervisor is in Human Resources.

Working is a scene. Working begins when the player is in Factory Floor. Working ends when Getting Fired begins.

Getting Fired is a scene. Getting Fired begins when the player has been in Factory Floor and the player is not in Factory Floor. Getting Fired ends when Frosty the Supervisor holds the employee ID badge.

Workday is a scene. Workday begins when Working begins. Workday ends when Getting Fired ends. 

Examining something is Being On-Task. Waiting is Being On-Task. Listening is Being On-Task. Wearing something is Being On-Task during Working. Taking off something is Being On-Task during Working. Going is Being On-Task. 

Before doing anything other than Being On-Task during Workday, say "You glance guiltily around, checking to see if you're being watched. Technically, you could get your pay docked for being off-task.".

That all works, but if I try to say Speech is Being On-Task during Getting Fired, I get the olā€™

The sentence ā€˜Speech is Being On-Task during Getting Firedā€™ appears to say two things are the same - I am reading ā€˜Speechā€™ and ā€˜Being On-Task during Getting Firedā€™ as two different things, and therefore it makes no sense to say that one is the other [ā€¦]

error.

The scenario that this is a reduced form of has a larger scene with many small scenes occurring as part of it, some of which can occur in a variable order, and speech is a type of action that should be warned in some situations and prohibited in others, and is sometimes perfectly OK. Iā€™m leery of needing to redefine Answering someone that something is Being On-Task during Machine Test, Answering someone that something is Being On-Task during Lunchtime, Answering someone that something is Being On-Task during Board Meeting, etc., and having to do that for all twenty ā€œspeechā€ actions for possibly more than a dozen different scenes.

I do realize that a ā€œkind of actionā€ isnā€™t a ā€œrealā€ kind, in the sense that object and, say, real number are kinds, and that Iā€™m not subclassing something in the way that standard OOP models would subclass classes, but it seems like there should be a way to re-use speech inside of other tests. Am I wrong about this?

1 Like

I donā€™t think that itā€™s legal to define a kind of action in terms of another kind of action that way, especially in a manner that is conditional to a scene. (The relationship between kind of action and action is asserted, not calculated.)

However, it is possible to construct an adjective that is sensitive to both the current scene and the kind of action.

"On-Task"

Place is a room.

Bob is a man in Place.

An ID badge is in Place.

Interdiction is a scene. Interdiction begins when the player holds the ID badge. Interdiction ends when the player does not hold the ID badge.

Answering someone that something is speech. Asking someone about is speech. Telling someone about something is speech.

Jumping is being on-task. Looking is being on-task. Taking something is being on-task.

Instead of doing something when the current action is disallowed:
    say "NOT ALLOWED!"

Instead of doing something when the current action is disallowed during Interdiction:
    say "DEFINITELY NOT ALLOWED!"
 
Definition: An action is allowed rather than disallowed:
    if it is being on-task:
	    decide yes; [means allowed]
    if it is speech and Interdiction is happening:
	    decide yes;
    decide no. [means disallowed]

Test me with "look / jump / x me / ask bob about work / take badge / ask bob about work".

Iā€™m not completely sure that I understand what youā€™re trying to do, so let me know if the above isnā€™t suitable.

3 Likes

That looks like it will work and I can adapt it to the larger structure from which I was excerpting. Thank you. What I really needed was to get out of trying to wrap all of the logic for allowed and disallowed actions into kind of action rules.

Briefly, the broader context involves going through a major chunk of the PCā€™s day at work, all represented by the overarching single Workday scene; there are other scenes happening at the same time, sometimes more than one at once, each imposing action restrictions of its own (you donā€™t talk to your coworkers or wander off to another room when your supervisor is standing right behind you). So trying to express that using kind of action definitions was shortsighted.

Thanks again!

No problem! Note that I meant ā€œkind of action and actionā€, not ā€œkind of action and kindā€ above ā€“ now edited. Also, FYI for future use of kinds of action: The relationship between kind of action and action is various-to-various, so it is possible for an action to be more than one kind of action.

EDIT: Revisiting this (and reading it more closely), I see two things that I missed before. First, you already knew that the relationship between kind of action and action was many-to-many, so sorry for the redundant advice. Second, it seems that there is possible minor issue with 6M62.

The code attempts to define a behavior conditionally to a scene (called Working) with

Wearing something is Being On-Task during Working.

but looking at the compiler output and the ā€œBehavioursā€ tab in the Index, it seems that this is interpreted as a new behavior called Being On-Task during Working that is separate from Being On-Task. However, trying to craft a rule that would reference that behavior, such as

After Being On-Task during Working:
	...

results in I6 that checks whether the action counts as Being On-Task after first checking for whether the scene Working is happening.

1 Like