top

Key & Compass presents:
Inform School
by William J. Shlaer

Inform School is a Z-machine work of interactive fiction written with Inform 6 and is © 1999 by William J. Shlaer.

In this educational game, you are a student learning the Inform 6 programming language, using a simplified version called Inf. Complete 27 programming tasks; each task has detailed help and a worked example in its classroom. When you're ready, take the final exam to win.

This solution is by David Welbourn, and is based on Release 1 of the work.

SPOILERS AHEAD. Reading a walkthrough prematurely can sometimes diminish one's enjoyment of a work of interactive fiction. Please make an honest effort to play the work before reading this walkthrough.


Maps

Map 1: Campus

(randomclassroom) LeafyQuad-rangle AdministrationBuildingLobby CampusYard InformLaboratory (no entry) (no entry) (to city)

Map 2: Classrooms / Inner Game rooms

SimpleClassroom WestClassroom EastClassroom SchoolCellar s dabra d u

Map 3: Final Region

InformLaboratory (some-where) Plaza WesternBank of theRaving River Middle ofthe RavingRiver East Side ofthe RavingRiver Top of theEasternCliffs Vault t 99. y u d

Walkthrough

You are warned that this game has the potential to crash your interpreter and lock up your computer.

> SPACE


Explore the campus and get your stuff.

Leafy Quadrangle

> x me. i. x letter.

> x gate. x building. x path.

> e.

Administration Building Lobby

> x portraits. x carpets. x table.

> take all from table. x map.

> x box. (has eight switches and a dial)

> x lantern.

> x book. (The Book of Inf)

>> A

> 100 (Introduction)

> 101 (Inf and Inform)

The web-addresses given in section 101 are out-of-date.

> 102 (The Inner Game)

> 103 (Verbs)

> 104 (The Editor)

> 105 (Creating Objects)

> 106 (Setting Properties)

> 107 (Setting Attributes)

There's more of the book to read, but I'm moving on for now. Feel free to read and re-read the book as often as necessary.

> w. se.

Campus Yard

> x Igor. x classrooms. x ruins. x fence.

> s.

Inform Laboratory

> x table. x shellerator. (screen and several buttons)

> x screen. (Shows the source code for a shell of a game.)

> x shelves.


Task 1: Create a starting location.

Inform Laboratory

> t 1. r 1. p 1.

Simple Classroom

> p 99.

Inform Laboratory

This walkthrough will duplicate the objects in the classrooms with minor differences to reduce disambiguation problems when using debugging commands.

> object

>> simple "Simple Room" `

> description

>> "Just a very simple room." `

> has

>> light `

> b

Simple Room

< b

Inform Laboratory

> m 1.


Task 2: Create an old tire and a chocolate tire.

Inform Laboratory

> t 2. r 2. p 2.

Simple Classroom

> x old tire. eat it. x chocolate. eat it. p 0.

Inform Laboratory

> object

>> tire "old tire" simple `

> name

>> "old" "tire" `

> initial

>> "Why is there an old truck tire here?" `

> object

>> candy "chocolate tire" simple `

> name

>> "chocolate" "tire" `

> description

>> "A small tire made of cheap milk chocolate." `

> has

>> edible `

> b

Simple Room

< x tire. x old. x chocolate. eat it.

< b.

Inform Laboratory

> m 2.


Task 3: Add three more rooms; one is dark. Link them.

Inform Laboratory

From this point on, I'm skipping visiting the classrooms. You may safely assume I visited them often when writing this up.

> t 3. r 3.

Create the West Room.

> object

>> west_room "West Room" `

> description

>> "There is another room to the east." `

> e_to

>> east_room `

> has

>> light `

Create the East Room.

> object

>> east_room "East Room" `

> description

>> "The passage must have a turn in it; return to the west room

>> through an opening to the south. Stairs lead down." `

> s_to

>> west_room `

> d_to

>> cellar `

> has

>> light `

Create the Cellar.

> object

>> cellar "Cellar" `

> description

>> "This room is full of old furniture, but it has no light

>> of its own. Stairs lead up." `

> u_to

>> east_room `

Add a south exit to Simple Room.

> select simple

> s_to

>> west_room `.

Check your work.

> b.

Simple Room

< n. s.

West Room

< n. e. d.

Darkness / Cellar

< turn on lantern. n. x stairs. x furniture.

Update the Cellar.

< select cellar

< name

>> "furniture" "stairs" `

< cant_go

>> "The only way out is back up the stairs." `

< n. x stairs. x furniture.

< u.

East Room

< b.

Inform Laboratory

> m 3.


Task 4: Add a workbench and a cabinet.

Inform Laboratory

> t 4. r 4.

> object

>> workbench "workbench" west_room `

> name

>> "table" "bench" "workbench" `

> has

>> supporter static `

> object

>> cabinet "cabinet" east_room `

> name

>> "cabinet" "chest" `

> has

>> container openable `

> b.

Simple Room

< s.

West Room

< put lantern on bench. take it. take bench. (can't)

< e.

East Room

< open cabinet. close it. take it. drop it.

< b.

Inform Laboratory

> m 4.


Task 5: Lock the cabinet. Add a key and a gold ring.

Inform Laboratory

> t 5. r 5.

> object

>> ring "gold ring" cabinet `

> name

>> "gold" "ring" `

> description

>> "A plain gold ring, it gives you the shivers." `

> object

>> brass_key "brass key" workbench`

> name

>> "brass" "key" `

> select cabinet

> with_key

>> brass_key `

> has

>> container openable lockable locked `

> b.

Simple Room

< s.

West Room

< take key. e.

East Room

< unlock cabinet with key. open it. x ring.

< b.

Inform Laboratory

> m 5.


Task 6: Add a wooden block with an attached disc.

Inform Laboratory

> t 6. r 6.

> object

>> block "wooden block" workbench `

> name

>> "block" "wood" "wooden" `

> description

>> "The wooden block has an engraved disk of silver on top." `

> has

>> transparent `

> object

>> disk block `

> name

>> "silver" "engraved" "engraving" "disc" "disk" `

> description

>> "A rocky outcrop looms over a gravestone." `

> b.

Simple Room

< s.

West Room

< x block. take it.

< x disk. take it. (can't)

< e.

East Room

< x disc. (It's still with you.)

< b.

Inform Laboratory

> m 6.


Task 7: Add a locked door east from the West Room.

Inform Laboratory

> t 7. r 7.

> object

>> timber_door "timber door" west_room `

> name

>> "timber" "door" `

> with_key

>> brass_key `

> has

>> door static openable lockable locked `

> door_to

>> east_room `

> door_dir

>> e_to `

> when_closed

>> "A timber door in the east wall is tightly closed." `

> when_open

>> "The timber door is open; a tunnel leads east." `

> select west_room

> e_to

>> timber_door ` (replacing the east_room reference)

> b.

Simple Room

< s.

West Room

< e. x door. open door. (locked)

< take key. unlock door with key.

< open door. look. e.

East Room

< b.

Inform Laboratory

> m 7.


Task 8: Add a switchable heater.

Inform Laboratory

> t 8. r 8.

> object

>> heater "heater" west_room `

> name

>> "heater" "space" "radiator" `

> has

>> switchable `

> when_on

>> "A space heater gives off pleasant warmth." `

> when_off

>> "There is a space heater here, but it is cold." `

> b.

Simple Room

< s.

West Room

< x heater. turn it on. look.

< b.

Inform Laboratory

> m 8.


Task 9: Use debugging verbs. Open the door and cabinet.

I won't use any debugging verbs for this task, but I'll start using them from now on when I feel like it. My favorite debugging verbs are GONEAR, PURLOIN, and TREE. It's definitely not cheating to use them in this game!

> t 9. r 9.

> select timber_door

> has

>> door static openable lockable open `

> select cabinet

> has

>> container openable lockable open `

> b.

Simple Room

< s.

West Room

< x door. e.

East Room

< x ring. b.

Inform Laboratory

> m 9.


Task 10: Add a clear plastic case.

Inform Laboratory

> t 10. r 10.

> object

>> plastic_case "clear plastic case" east_room `

> name

>> "new" "clear" "plastic" "case" `

> has

>> transparent openable container `

> b.

Simple Room

< take old. gonear new case.

East Room

< open case. put tire in it. close case. look.

< b.

Inform Laboratory

> m 10.


Task 11: Add a glowing ball.

Inform Laboratory

> t 11. r 11.

> object

>> glowball "glowing ball" plastic_case `

> name

>> "glowball" "glowing" "ball" `

> has

>> light `

> b.

Simple Room

< s. e.

East Room

< turn off lantern.

< take case and cabinet.

< d.

Cellar / Darkness

< i. open case. take ball.

< put ball in cabinet. close cabinet. open it.

< drop cabinet. close it.

< open it. (Can't open it now, since you can neither see it and you're not holding it.)

< purloin ball. look.

< b.

Inform Laboratory

> m 11.


Task 12: Add a new tire that you can only call "tire".

Inform Laboratory

> t 12. r 12.

> object

>> new_tire "new tire" simple `

> name

>> "tire" `

> description

> "Congratulations on your new tire." `

> b.

Simple Room

< x new tire. x tire.

< drop lantern. take old and chocolate.

< s.

West Room

< drop old and chocolate. gonear lantern.

Simple Room

< x tire. take lantern. b.

Inform Laboratory

> m 12.


Task 13: Make identical dark balls.

Inform Laboratory

> t 13. r 13.

Take care to make sure the name property matches exactly with these two new items.

> object

>> ball1 "dark ball" plastic_case `

> name

>> "dark" "ball" "balls//p" `

> plural

>> "dark balls" `

> object

>> ball2 "dark ball" plastic_case `

> name

>> "dark" "ball" "balls//p" `

> plural

>> "dark balls" `

> b.

Simple Room

< s. e.

East Room

< open case. x ball. x dark ball. take it.

< take dark ball from case. i.

< b.

Inform Laboratory

> m 13.


Task 14: Gain points for taking the ring or visiting the cellar.

Inform Laboratory

> t 14. r 14.

> select ring

> has

>> scored `

> select cellar

> has

>> scored '

> b.

Simple Room

< turn on lantern.

< s. e.

East Room

< take ring. (+4)

< d. (+5)

Cellar

< b. (−9)

Inform Laboratory

> m 14.


Task 15: Add a vanishing cube.

Inform Laboratory

> t 15. r 15.

> object

>> cube "shy cube" simple `

> name

>> "shy" "cube" `

> description

>> [;

>> remove cube;

>> "The cube fades under your intense stare, then vanishes.";

>> ] `

> b.

Simple Room

< x cube. look. b.

Inform Laboratory

> m 15.


Task 16: Add a car tire with take/drop messages.

Inform Laboratory

> t 16. r 16.

> object

>> car_tire "car tire" simple `

> name

>> "car" "tire" `

> description

>> "This is the biggest tire yet." `

> after

>> [;

>> take: "You take the tire, a truly awkward thing to carry.";

>> drop: "The tire hits the ground with a hollow thwonk.";

>> ] `

> b.

Simple Room

< x car tire. take it. drop it.

< b.

Inform Laboratory

> m 16.


Task 17: Block taking the cube. Make the cube hum.

Inform Laboratory

> t 17. r 17.

> select cube

> before

>> [;

>> take: "An unseen force field deflects your hands.";

>> listen: "It hums faintly.";

>> ] `

> b.

Simple Room

< take cube. look. listen to cube.

< b.

Inform Laboratory

> m 17.


Task 18: Make a smelly tasty cheese.

Inform Laboratory

> t 18. r 18.

> object

>> cheese "smelly cheese" workbench `

> name

>> "stinky" "smelly" "cheese" `

> has

>> edible '

> before

>> [;

>> smell: "The cheese is really strong, perhaps a Maroilles.";

>> taste: "Delicious in spite of the powerful aroma.";

>> ] `

> after

>> [;

>> take: "You grab it, getting stinky cheese all over your hands.";

>> eat: "It is so good you eat it all, to your later regret.";

>> drop:

>> remove self;

>> "A St. Bernard bounds in and runs off with the cheese.";

>> ] `

> b.

Simple Room

< s.

West Room

< take cheese. smell it. taste it. eat it.

< purloin smelly. drop it.

< b.

Inform Laboratory

> m 18.


Task 19: Define ABRAC to reset the cheese and cube.

Inform Laboratory

> t 19. r 19.

> push abracsub.

>> [abracsub;

>> move cheese to workbench;

>> move cube to simple;

>> "The cheese and cube are now back where they started.";

>> ] `

> b.

Simple Room

< x cube. s.

West Room

< take cheese. eat it. abrac. look.

< gonear shy cube.

Simple Room

< b.

Inform Laboratory

> m 19.


Task 20: Define DABRA to take you from West Room to Simple Room.

Inform Laboratory

> t 20. r 20.

> push dabrasub.

>> [dabrasub;

>> "You feel a bit odd for a moment, but nothing happens.";

>> ] `

> select west_room.

> before

>> [;

>> dabra:

>> print "With a lurch you find yourself in...^";

>> playerto(simple);

>> return 1;

>> ] `

> b.

Simple Room

< dabra. s. e.

East Room

< dabra. s.

West Room

< dabra. (You teleport to...)

Simple Room

< b.

Inform Laboratory

> m 20.


Task 21: Add a sweet poison pill.

Inform Laboratory

> t 21. r 21.

> object

>> pill "pink pill" simple `

> name

>> "pink" "pill" `

> has

>> edible `

> before

>> [;

>> taste: "Tastes sweet.";

>> ] `

> after

>> [;

>> eat:

>> deadflag = 1;

>> "Oh no, it was a poison pill!";

>> ] `

> b.

Simple Room

< take pill. taste pill.

< eat pill. undo

< b.

Inform Laboratory

> m 21.


Task 22: Start the player with key and in East Room.

Inform Laboratory

> t 22. r 22.

> push initialise.

>> [initialise;

>> location = east_room;

>> move brass_key to player;

>> "^^^^^^Welcome, player!";

>> ] `

> b.

East Room

< i. (You should have the key.)

< b.

Inform Laboratory

> m 22.


Task 23: Make a bathtub and a magic rug.

Inform Laboratory

> t 23. r 23.

> object

>> tub "white bathtub" cellar `

> name

>> "white" "tub" "bathtub" `

> has

>> open enterable static container `

> object

>> rug "prayer rug" east_room `

> name

>> "prayer" "rug" `

> has

>> enterable supporter `

> description

>> "It needs cleaning, but which text game has a dry cleaner?" `

> before

>> [;

>> go: "The rug uncertainly carries you in that direction.";

>> ] `

> b.

East Room

< x rug. get on it. s. e. d.

Cellar

< stand. get in tub.

< b.

Inform Laboratory

> m 23.


Task 24: Make a machine that does something every turn while on.

Inform Laboratory

> t 24. r 24.

> r 900. (ga is a global var you can use.)

> object

>> machine "machine" cellar `

> name

>> "machine" `

> has

>> switchable `

> description

>> "It's rather bizarre. It has a back fan, lots of plastic tubing,

>> and blocks to move and squash the tubes." `

> after

>> [;

>> switchon:

>> startdaemon(self);

>> "The machine gulps in some air.";

>> switchoff:

>> stopdaemon(self);

>> ga = 0;

>> "The machine coughs, then falls silent.";

>> ] `

> daemon

>> [;

>> ga = ga + 1;

>> if (ga > 4) ga = 1;

>> ] `

> each_turn

>> [;

>> if (self hasnt on) return 0;

>> if (ga == 1) "The machine shouts ~School!~";

>> if (ga == 2) "The machine shouts ~Boys!~";

>> if (ga == 3) "The machine shouts ~Get!~";

>> if (ga == 4) "The machine shouts ~Toys!~";

>> ] `

> b.

East Room

< d.

Cellar

< x machine. turn it on. z. z. z. z. turn it off.

< b.

Inform Laboratory

> m 24.


Task 25: Fine-tune the machine's and new tire's names.

Inform Laboratory

> t 25. r 25.

> select machine

> name

>> "machine" "noisy" "silent" `

> short_name

>> [;

>> if (self has on)

>> print "noisy ";

>> else

>> print "silent ";

>> ] `

> select new_tire

> article

>> "the elusive" `

> short_name

>> "tire with one name" `

> b.

East Room

< d.

Cellar

< turn on machine. look.

< turn off machine. look.

< u. s. dabra.

Simple Room

< take all tire. b.

Inform Laboratory

> m 25.


Task 26: Add a dog that stops you from eating the pill.

Inform Laboratory

> t 26. r 26.

> object

>> dog "shaggy dog" simple `

> name

>> "shaggy" "dog" `

> has

>> animate `

> initial

>> "A shaggy dog is watching you curiously." `

> life

>> [;

>> attack: "No, you don't want to do that.";

>> kiss: "You pet the dog, which it accepts as its due.";

>> default: "The dog is puzzled by your behavior.";

>> ] `

> react_before

>> [;

>> eat:

>> if (noun ~= pill) rfalse;

>> "The dog grabs your arm before you can eat the pill.";

>> ] `

> b.

East Room

< s. dabra.

Simple Room

< x dog. hit dog. kiss dog.

< take pill. taste pill. eat pill.

< ask dog about pill.

< b.

Inform Laboratory

> m 26.


Task 27: Put a blank diploma in the cabinet. Win with 100 points when you cast DABRA on the diploma.

Inform Laboratory

> t 27. r 27.

> object

>> diploma "blank diploma" cabinet `

> name

>> "blank" "diploma" `

> description

>> "The diploma is missing your name. To sign it,

>> cast dabra on it." `

> before

>> [;

>> dabra:

>> deadflag = 2;

>> score = 100;

>> "The dabra spell works its magic and the diploma is yours!

>> Your mother will be so happy.";

>> ] `

> b.

East Room

< x diploma. dabra diploma. (+100)

*** You have completed your coursework. ***

You are offered the chance to UNDO the win and take the final exam.

< undo

< b

Inform Laboratory

> m 27.


The Final Exam

> read book. E. 99. (Doesn't tell you much, does it?)

> t 99.

...proceed? y

(somewhere)

The first step is to create a new location, and go from here to there. In the process, you'll drop the lantern and it turns itself off, but you don't really need it any more. If you want it back, so you can read your book, PURLOIN LANTERN and turn it back on.

< select somewhere

< s_to

>> plaza `

< object

>> plaza "Plaza" `

< description

>> "This is a lovely plaza on the campus." `

< has

>> light `

< s.

Plaza

A wooden map case appears! But it has no name.

< select

< name

>> "wooden" "map" "case" `

< has

>> openable container `

< take case. open it. (A scrap of paper is inside!)

< select paper.

< name

>> "piece" "paper" "scrap" `

< take paper. x paper.

Well, that was unhelpful. But the TREE debugging command now shows a new room that didn't exist before: Western Bank of the Raving River, and the V command without any arguments tells you its object_name is "riverbank".

Did you forget about the V command? It was mentioned in section 103 of your book. It becomes very useful in the final where you don't know the object_names of anything new.

< tree. v.

< select plaza

< e_to

>> riverbank `

< e.

Western Bank of the Raving River

< e. (no, you would drown)

Let's remake the rug, but restyle it as a raft.

< object

>> raft "raft" riverbank `

< name

>> "raft" `

< has

>> enterable supporter `

< before

>> [;

>> go: "The raft glides along the water.";

>> ] `

< enter raft. e.

Middle of the Raving River

< v h. (You can't disembark here.)

< e.

East Side of the Raving River

< v h. (You can't disembark here either.)

< u. (Yes, ride the raft upwards. Why not?)

Top of the Eastern Cliffs

< v h. n. (blocked by vault door)

< object

>> rusty_key "rusty key" raft `

< name

>> "key" "rusty" `

< take key.

< select vaultdoor

< name

>> "door" "vault" `

< with_key

>> rusty_key `

< unlock door with key. open door. n.

Vault

< v. (The gold loon's object_name is goldbird.)

< select goldbird

< name

>> "loon" "gold" "bird" `

< take loon. (Need a burly troll.)

Make sure the troll is burly, or this won't work.

< object

>> troll "burly troll" vault `

< name

>> "troll" "burly" `

< has

>> animate `

< orders

>> [;

>> take:

>> move noun to troll;

>> "~Sure.~ The burly troll picks it up.";

>> default: "~Afraid I can't help you there.~";

>> ] `

< troll, take loon.

*** You have passed the final examination. ***


Extras

ASCII art

Examine your campus map to see this lovely artwork:

                    Inform School Campus
          N 
          | 
      W --+-- E                          Numbered Classrooms
          |                            (use 'place' to enter) 
          S                                        |
                                                   |
                                                   |
                                                   |
  Main _ _ _ _ Leafy _ _ _ _ Administration      Campus
  Gate       Quadrangle         Building          Yard
                       \                         / |
                         \ _ _ _ _ _ _ _ _ _ _ /   |
                                                   |
                                                   |
                                                 Inform
                                               Laboratory
                                                  and
                                               Stone Ruins

Characters

Mentioned:


Credits

The game's credits are displayed before the game's prologue:

Credits

Graham Nelson and Andrew Plotkin have made many contributions to our world. Without Inform and "Lists and Lists" this game would not be.

Larry Kwong tested "Informatory" and suggested it be made into an honest tutorial. This is the result.

Jennifer Vaughan, Neil Cerutti, and Barbara Wood tested the game. They earned their many thanks.

Notes

This game may not work at all on some versions of the Z-Machine since it relies on some obscure features that may not have been implemented or may have been improved away. See the appendix on Z-Machines in the Book of Inf. It does work on WinFrotz. If you get a crash when attempting to create or modify objects, try the split command as discussed near the end of Section 104 of the Book of Inf.

All comments will be gratefully received. They should be sent to email redacted.


Endings

It's also possible to crash the game, but I made no attempt to do that on purpose.

In theory, it's also possible for the game to mess up your computer with a wild write to memory outside the game's bounds, but this is rather unlikely with modern Z-machine interpreters.


Inventory

In this sort of game, every object in the game (including the rooms!) can potentially end up in your inventory, but for sanity's sake, I'm only documenting intended inventory items here.

Outer game items
Classroom items

Note that you are expected to re-create all of the classroom rooms, their connections, and their contents by completing your tasks. So by the time you're ready to take your final exam, every classroom object will have its twin on the shelf in the Inform Laboratory.

Final exam items

Score

The response to SCORE is the standard:

You have so far scored your-score out of a possible 100, in several turns.

Points are awarded as follows:

Also, your score is set to 100 when you cast DABRA on the diploma (classroom/task 27).

However, all points are removed when you leave the classroom or inner game regions. This game isn't about awarding you points, only in teaching you how to code earning points when writing Inform 6 games.


Thank You to my Patreon supporters

This walkthrough was funded via Patreon with


Support me on Ko-fi

Ko-Fi is a way to send me small one-time donations. Every little bit helps, and thank you!