Format for choosing a book from a large library-- opinions sought

Hey All–

So I have a vast library and I want the player to tell the game what shelf letter (A-E), book number (1-500) and page number they want when they EXAMINE or TAKE a book.

I think I can figure out the coding, but I wonder what the most player-friendly way to do this is?

1.) Have the player type X or TAKE B 12 736?

2.) If the player types X or TAKE book, ask them:
What shelf number?
What book number?
What page number?

Allow both? Or mercilessly train the player to do it one way?

I can see problems with each. Typing in B 12 736 requires the spaces to be correct and is kind of long. But asking 3 questions every time you want to look at a book might be annoying.

Is there a more player-friendly way to set this up that I’m not thinking of? The player will read about 12 pages from 12 different books throughout the game, and I’ll only allow them to have one at a time.

1 Like

Is there a specific reason why you can’t have different rooms for each shelf, and then have books of different colors (red book, olive book, beige book—maybe about 6-12 per shelf) to peruse? That way the player doesn’t have to struggle too much with remembering what book to take.

I think you should use READ (would need to implement), with an implicit TAKE and DROP (return to shelf) in the prose. You could use Michael Callaghan’s Questions for this, or any of the various Menu extensions. If you have different rooms for the shelves and different items for the books, one question shouldn’t be too bad.

1 Like

Yes, there is a specific reason. This is how the setup will be. This is a puzzle game where figuring out the correct book is a major part of the gameplay, and if people can’t write down what they figure out, this is not the game for them.

I’m concerned with the least intrusive way for the player to enter that information.

Yes, I’ll implement READ and PICK and CHOOSE and all that.

I’d prefer the first. Asking three questions each time would really annoy me. But I’m a command-line person to begin with.

For this situation, X and TAKE and READ should all work.

It shouldn’t be too hard to accept both TAKE B 12 736 and TAKE B127:36 and perhaps a few other options. You might need the regex feature of Inform, which I normally shy away from, but if it’s a major part of the game like this it could be worth it.

1 Like

Another possible flow is

> TAKE B 127
You take book 127 from shelf B.
> READ 736

This fits better with parser conventions than breaking out into “What page number?” It requires some juggling; you’d need to give the player a dummy book object. (And then a lot of messages about putting it back on the shelf before you leave the room or take another book!) And I’d still want READ B 127 736 to work, if possible.

So this is a high-effort path, but it would feel nice.


Well, Amanda know the setup in my actual case, so, I think that without spoiler, I can write that I think that she understand that, starting from the (easy) separating of READ and EXAMINE in Inform 7/10 is best the X mechanism, (albeit shelves and books are named in my case; a reason is that for me, X a book in a shelf imply also reading the title on the spine…) the X approach makes sense in my narrative context.

but, much more important, I think that the puzzle is easy to hint (well, I’m a nutcase called “bookworm”), if you provide an appropriate indexing in a form of computer or file/filing (rule 16…) cabinet (depend on the setting of your story) and I think this allows you to nudge the player on either the approach for your puzzle.

Last but not least, being an historian, I feel compelled to point that an early experiment of IF-as-CAI (Computer Assisted Instruction) was for teaching how to navigate in a library indexing:

Orientation to Van Pelt library

HTH (being a bit sleepy…) and
Best regards from Italy,
dott. Piergiorgio.

1 Like

This approach is my favorite and (to my mind) also likely the easiest to code—with a single dummy book object, book number and page number can just be global variables.