top expert

i am my own ghost

Let’s Make IF #12: filling in blanks.

last time, on Let’s Make IF…

With Act I underway, I started implementing/changing text to suit the newly well-lit game world. Some of those new descriptions required new nouns. Since they were minor (just visual aspects or components of something), I made some “instead of doing anything” action rules for them. This kind of work will continue to be the main focus, though we will need some “stage directions” for getting to Act II.

goals for act I.

I’d like to lay out some objectives to help keep me on track. These are all things I need to complete for the current act.

  1. Write both remote and local descriptions for every room (even the spotlight booth needs a remote description at this point).
  2. Implement required nouns, with local and remote descriptions if applicable.
  3. Implement any nouns mentioned in steps 1 and 2.
  4. New “fascination” text for D while he looks at the box onstage.
  5. Implement “cat behavior” for every noun (see below).
  6. End the scnene.

Items 1 and 2 should be business as usual. Since I have the framework in place, I just need to fill in table entries. If you’ve looked into parser craft at all, you have probably heard that one should take care to avoid implementing new nouns unless they are necessary. In principle, I agree, but I’d rather have some nouns for flavor text than have an empty world. I don’t mind implementing “hardwood” as a noun, for instance, because I want to use that word in a description. I think the important thing is to make it clear that the thing has no practical utility so that the player doesn’t waste time.

So yes, I will be implementing some pointless nouns. Most things in real life will not help you solve puzzles; it’s ok.

This will be a very short scene. I need to get Marbles and D to look at the box while they are both onstage. Marbles will then be free to explore a bit (she won’t be able to climb up in the booth by herself) while D continues investigating the box. Once Marbles calls D’s attention to something (another *MEOW* command), ACT I will end.

changing the printed name of D.

I’ve decided I don’t like “D is here” as a printed text. Seeing “(D)” as a disambiguation message is jarring, too. For this reason, I’ve given D some other printed names. Really, these should only come up during disambiguation, since I don’t want generic paragraphs printed about him.

the printed name of D is "[one of]My human boy, D[or]D, a small person[or]My young friend, D[or]D, my fellow adventurer[cycling]".

This is subject to change, of course. I just want to see how changing things up might feel. Ok, moving on.

implementing cat behavior.

Marbles, D, and the Sinister Spotlight will not have any takeable nouns. D. will pick up something, but Marbles will never take or carry objects around. Since things tend to create most of the work for IF authors, this will free up a lot of time for me to do other things. Since Marbles is a cat, it only makes sense that she can do cat things. This will require some more verbs. Let’s see…

  • *MEOW* (already on the list)
  • *SCRATCH*
  • *HISS*
  • *MARK* or *RUB* (rub is a synonym for clean, but I think we’ll make our own action.
  • *PURR*
  • *GROOM*

HM, is there anything else? I guess cats will bat at things, too, without their claws. We’ll see about that one. I think I’d like to commit to unique responses for most nouns where relevant (*PURR* would be reflexive, as would *GROOM*).

That might sound like a lot of work, but this is a small map with only a few interactable nouns. This is a good way to create a sense of richness even if the game world is small. I think! That’s the idea, anyway. I did something similar with the *DIAGNOSE* command in Repeat the Ending. You can diagnose everything, even though it doesn’t do anything most of the time. So that’s something to keep in mind. Once Act I is finished, I’ll back up and implement all of the cat behavior up to that point.

filling in the blanks.

This is all straightforward work. As I’ve mentioned before, my focus is on getting something built out and playable, so I expect the text to be revised considerably as the project continues. I won’t paste every entry here, but as a reminder, this is all that is needed to add descriptions for a new room:

act i	"[if the location is the auditorium]The auditorium was a large space filled with human-sized chairs. They were all in neat, little rows. A narrow walkway ran down the middle, reaching from the exit doors to the front of the stage.[first time]

According to D, humans would sit in the chairs while watching something called a 'show.'[only][otherwise]It was hard to imagine a human sitting in every chair. I've never seen so many humans in the same place at the same time.[end if]"

The chairs will warrant more attention, too. There is something hidden there! The problem is, I don’t want to do anything with it until after the player examines the box up-close. Which reminds me, I should tweak my “examined” rule.

after examining something in the location:
now the noun is examined.

There. I didn’t want looking at something from a distance to be enough for the “examined” property to switch on.

How are the seats implemented right now? They don’t have a table of descriptive texts, which… should be fine. They’re kind of a one-trick pony. This is all there is right now, and it’s limited to the prologue.

instead of doing anything when the current action involves the chairs during the prologue: 
say "There was nothing immediately eye-catching about the chairs[first time], and I thought I really ought to check on D. He got into all sorts of trouble without me[only]."

I’ll start with a similar rule, this time permitting more actions.

instead of doing anything when the current action involves the chairs during act i:
if the current action is examining, looking under, searching, entering, or cat behavior:
continue the action;
otherwise:
say "There wasn't a lot that a cat could do with the seats. In better circumstances, they might be good for a nap, but D and I had somewhere to be.".

This rule is like a to-do list, isn’t it? Everything it permits must be implemented. Examining is already covered. Entering is a silly one needing just a short text, so I’ll handle that first. This can all be handled with “instead” rules, since the player isn’t going to physically attempt anything to worry about in action processing.

a distraction

While trying to get “entering” implemented, I noticed some blank lines printing after action feedback. What could be causing that? Using the *RULES* debug command reveals that the culprit is “D’s remote status rule.” Reminder:

This is the D's remote status rule:
if the fascination of D is not nothing:
determine the present scene;
say the current fascination.

Ah, ok. Inform is printing an empty text because I haven’t written any output for this rule. I’ll get that out of the way first.

table of box fascinations
active scene description
prologue ""
act i "[if the box is unexamined][one of]Just south of there, I saw D kneel beside the box, looking at it all the while.[or]Nearby, on-stage, D scratched his head, as if the box confused him in some way.[or]Off to the south, I saw D approach the box as if to peek over its sides, then backing away nervously as if something had startled him.[or]Nearby, D gazed intently at the swirling blackness within the box near the center of the stage.[or]I could see D looking into the box. Did the box look back?[or]Nearby, on-stage, D continued to investigate the strange black box.[stopping]"

As with room descriptions, the framework for printing “fascination” text is built. I just need table entries. I’ll need to add more once the box is “examined,” but this will be enough for now. Back to entering the chairs!

entering the chairs.

A quick and easy rule to start:

instead of entering the chairs:
say "As important as sleep is for a cat, it would not have been appropriate to stretch out on one of the chairs. I needed to help D find a way out of the theater.".

Note that we haven’t made the chairs enterable. We don’t need to! How do I know this, you may wonder. I always keep the Standard Rules open for quick reference. If I look there, I can see that Inform 7 uses a “check” rule to determine if a thing is enterable. If I make an “instead” rule, I bypass that check altogether. Players aren’t likely to “enter” the chair, though, so I should make a redirect. “Climbing” is one possibility:

instead of climbing the chairs:
try entering the chairs.

I think people might try “lie on chairs.” Even with a cat protagonist, making a new action for lying on things doesn’t seem worth it. I’ll make a new command for an old action:

understand "lie down/-- on/-- [something]" as entering.

additionally, a new command for climbing on something:

understand "climb on [something]" as climbing.

Ok, that should be it. How am I going to let the player look under the chairs without… looking under them?

under the chairs.

instead of looking under the seats when the box is unexamined:
say "I was very curious about the seats, and wondered what they might hide. However, I was also worried that D might get himself into trouble if left alone with that box. I would have to investigate this area further after D and I had a closer look at center stage.".

I’ve let the player know that this is a worthwhile action, just not now. I’ll continue with descriptions (and implementing cat behavior). Tomorrow, I should be ready to start implementing the box, the first complex thing/noun in my game so far.

Here’s a link to the updated repository for source backups.

Here’s today’s updated source. For best results, view in an Inform 7 IDE.

next.

More descriptions, noun-specific implementations. The box, maybe?