"list of (thing type) with (number) x" doesn't work, but I have a workaround

I have some code that uses objects to determine how far along you are. The basic gist is that the room has 3 tracks with 2 pieces each, and the progress is printed when you look.

The code below works. The commented-out “volume this doesn’t work” part does not, and I don’t understand why.

"Game Progress" by Andrew Schultz

volume basics

a progress-track is a kind of thing. a progress-track has a number called this-progress.

t1 is a progress-track.
t2 is a progress-track.
t3 is a progress-track.

r1 is a room. "You've made no progress with [list of undone progress-tracks]. You've made progress with [list of halfdone progress-tracks]. You've dealt with [list of alldone progress-tracks]."

volume this works

definition: a progress-track (called x) is undone:
	if this-progress of x is 0, yes;
	no;

definition: a progress-track (called x) is halfdone:
	if this-progress of x is 1, yes;
	no;

definition: a progress-track (called x) is alldone:
	if this-progress of x is 2, yes;
	no;

volume this doesn't work

[r1 is a room. "You've made no progress with [the-track of 0]. You've made progress with [the-track of 1]. You've dealt with [the-track of 2]."

to say the-track of (n - a number):
	say "[list of progress-tracks with this-progress of n]"]

volume testing stubs

to bump-up (pt - a progress-track):
	if this-progress of pt is 2:
		say "[pt] is at its max.";
	else:
		say "Bumping up [pt].";
		increment this-progress of pt;

every turn: bump-up a random progress-track;

I’m okay with this, but the 3 definitions are certainly awkward. The commented code feels like it should work, but it doesn’t compile.

Is there a way to generalize the code so I don’t have to use the 3 definitions?

actual source from my EctoComp Petite Mort game, a slightly different way
a rowr-mood is a kind of thing.

a rowr-mood can be unactivated, halfway or fullon. a rowr-mood is usually unactivated.

Rowr Room is east of Rare Rows. printed name is "[if rowr-progress-score < 3]Rowr Room[else]Bower (BOOM!)[end if]". win-score of rowr room is 3. "[if number of unactivated rowr-moods > 0]It's very noisy here. To dissipate the that, perhaps you could [list of unactivated rowr-moods]. [end if][if number of halfway rowr-moods > 0]You also have notions of [list of halfway rowr-moods], but just for fun. [end if][if number of fullon rowr-moods > 0]You have exhausted the ways to [list of fullon rowr-moods]. [end if]The only way out is back west.". block-descrip-text of Rowr Room is "it's too hot to the east"

tomb-womb is a rowr-mood. printed name of tomb-womb is "create a secret passage you'll never explore".
flume-plume is a rowr-mood. printed name of flume-plume is "create some fireworks".
doom-gloom is a rowr-mood. printed name of doom-gloom is "change the mood".

[this is a slightly awkard function, just as definitions are]

to bump-up (moo - a rowr-mood):
	if moo is unactivated:
		now moo is halfway;
	else if moo is halfway:
		now moo is fullon;
	else:
		say "BUG. I tried to increase a mood that was already maximized. Let me know how this happened!"

Note that this is with 6G, as I’m having problems compiling with later versions–I have 6G projects, so I use the 6G IDE, and I installed Inform 10.1.2 which got in the way of testing on my 6M IDE.

to say the-track of (n - a number):
	let L be a list of progress-tracks;
	repeat with t running through progress-tracks:
		if the this-progress of t is n:
			add t to L;
	say L.
2 Likes

Yes – just create a new kind of value. (You sort of did this in the EctoComp example you posted, you just didn’t name the value.)

a progress-track is a kind of thing.
progress-amount is a kind of value.
the progress-amounts are undone, halfdone, and alldone.

a progress-track has a progress-amount.

t1 is a progress-track.
t2 is a progress-track.
t3 is a progress-track.

r1 is a room. "You've made no progress with [list of undone progress-tracks]. You've made progress with [list of halfdone progress-tracks]. You've dealt with [list of alldone progress-tracks]."

to bump-up (pt - a progress-track):
	let pa be the progress-amount of pt;
	if pa is alldone:
		say "[pt] is at its max.";
	else:
		say "Bumping up [pt].";
		now the progress-amount of pt is the progress-amount after pa;

every turn: bump-up a random progress-track.

Doing it this way obviates the need for definitions and allows you to expand at will by adding new values. Note that KOVs are internally enumerated, which is why “now the progress-amount of pt is the progress-amount after pa” works. You just need to make sure you define all the values in the order you want them to increase. So if you want to add “quarterdone” and “threequarterdone” for example, you’d need to change the definition to:

the progress-amounts are undone, quarterdone, halfdone, threequarterdone, and alldone.
2 Likes