(Ignore the bad centering on the header, dgdebug doesn’t handle that properly.)
Info: Word count for "act1.dg": 1790
Info: Word count for "act2.dg": 6895
Info: Word count for "act3c.dg": 6577
Info: Word count for "act3w.dg": 6930
Info: Word count for "act3e.dg": 2321
Info: Word count for "spells.dg": 3181
Info: Word count for "footnotes.dg": 5269
Info: Word count for "actions.dg": 1215
Info: Word count for "interface.dg": 152
Info: Word count for "automap.dg": 23
Info: Word count for "nudge.dg": 32
Info: Word count for "stdlib.dg": 1643
Info: Word count for "zstyling.dg": 24
Info: Total word count: 36052
Debug: Registers used: 108 of 240* (45%)
Debug: Properties used: 0 of 63 (0%)
Debug: Dynamic flags used: 7 of 48 (14%)
Debug: Total flags used: 41 native
Debug: Objects used: 244 of 8190 (2%)
Debug: Dictionary words used: 1145 of 7679 (14%)
Debug: Extended ZSCII characters used: 70 of 97 (72%)
Debug: Addressable memory used: 19778 of 65536 bytes (30%)
Debug: Object table: 5352
Debug: Object vars: 976
Debug: Wordmaps: 6605
Debug: Unicode data: 149
Debug: Main heap: 4000
Debug: Auxiliary heap: 1000
Debug: Long-term heap: 1000
Debug: Total filesize used: 382920 of 524288 bytes (73%)
Debug: Routines: 23368
Debug: Strings: 12088
Turns out Dialog will in fact run into the Z8 file size limit before the byte-addressable memory limit! So we really don’t need to be worried about saving RAM, overall.
(list exits)
...
%% Plus a special BONUS EXIT if the player is disoriented
(if) (player is disoriented) (then)
(collect $Dir)
*(direction $Dir)
~(from $Room go $Dir to $) %% Directions that *don't* work
~($Dir is one of [#in #out #shortcut]) %% Only compass directions
(into $Inaccessible)
(randomly select $Herring from $Inaccessible)
(bullet) ($Herring)...?
(endif)
(exit $ from $Coords) %% Add random exits to the automap every turn
(player is disoriented)
(current room $Room)
($Room has coordinates $Coords)
(random from 1 to 2 into 1) %% 50% chance of any given direction appearing on the map
At what point will we have seen enough code to run your game and count it as released?
Fortunately, the IFComp rules specifically say that source code doesn’t count as a prior release!
Changelog: added footnotes for “sanctifier”, “threshing”, and “clowns”.
Added some well-founded answers for players who want to kick the dog. Now I just need to catch the fact that you can hit the dog with the flashlight.
As a tester, I don’t want to kick the dog to verify these fixes. But I’ll verify others!
thinks a minute, gets worried
Uh oh. I hope this wasn’t inspired by me kicking the dog in a transcript I sent you & I just somehow forgot that. The puzzles were nowhere close to that frustrating!
That wasn’t inspired by you.
On the other hand, if our games contribute to dogs only being kicked virtually instead of in reality, then we’ve really achieved something. ![]()
(Now I’m thinking about adding a flamethrower to the game. Luckily, I’m running out of time to come up with more nonsense.)
Whew! Yeah, the puzzles themselves certainly didn’t merit kicking a dog. Or even slamming a door. Though I did write a python script to figure why I missed 10 points one time and not another. That was actually rather fun.
Oh … my entry …
The cartoon has three captions, two blurred, one saying (redacted). But the images are clear: a skinny frowning man, the same man ravenously eating, and the same man, belly distended, sitting happily in a recliner. What does it mean? What should it mean? What can it mean?
There’s a dog in my entry, and in a buggy early build if you petted it, you soft locked the game. ![]()
Oh, and for the next time I get too cocky about my programming skills…see if you can figure out what’s wrong here.
(grammar [push/pull [object] [closed shut]] for [open $])
(If you don’t know Dialog, this defines the command PUSH ___ SHUT to mean OPEN ___ instead of CLOSE ___.)
Definitely one of the more embarrassing bug reports I’ve gotten!
I really wonder what this Python script does. ![]()
Yeah, I’m curious! I always love seeing when people turn to programming to solve IF games; I did it for The Den and Focal Shift last year.
Concur with Stefan and Daniel.
Best regards from Italy,
dott. Piergiorgio.
I had to write a program for designing a puzzle in my IF Comp game. Designing it by hand was too tedious but a naive search would have taken somewhere in the ballpark of a trillion loops, maybe more. But the design is such that once a configuration is found, it should be easy (or at worst, not-too-hard) for someone to solve it.
Churning through combinations was too slow with Python so I rewrote it in Rust to shave off a sizable constant on the runtime.
I liked the confluence of design and mathematics that should be invisible to a player. Hopefully it pays off.
It wasn’t too bad. Since I got all points in one runthrough and missed 10 in another, I figured I’d just compare the point scoring commands. I just copied over each line from a transcript that started with > or had “you gained X points”. The server here cannibalized the indents, but …
import sys
import re
f = sys.argv\[1\]
with open(f) as file:
for (line_count, line) in enumerate (file, 1):
if line.startswith(‘>’):
last_line = line.strip()
if ‘increases by’ in line:
print(last_line)
l = re.sub(" to.\*", “”, line.strip())
print(line.strip())
I then compared the two pared-down transcripts in WinMerge, erasing similar lines or lines out of order. A lot matched up and was in order of course.
After a bit of deleting on each side, I was left with the command I forgot to type in. It was a trivial one, but I was curious about the 10 points I missed and it was worth replaying to find it.
ETA: I could even have had a second script that read in the truncated transcript, defining a dictionary for each file with key=command line, value=points increased and comparing 2 files, eliminating all identical commands and lumping unpaired commands by points increased, before trying to locate (with Levenshtein distances or # of identical words or whatever) which commands were probably the same. But it seemed like a one-use thing, so I just used brute force.
A tangent here: I’ve been on both sides of this. I have to admit I used brute force pyautogui for a couple DiBianca games & then felt silly about what I missed. But I also had a very long loop to create certain things … the big one is probably for Ailihphilia where I tried to find two words that made a palindrome. Brute force on 200k*200k words was just a terrible idea. So I
- organized words by first letter and last letter, then said “compare only pairs where word #1’s first letter = word #2’s last letter.” This cut down search time a bit. I cut down a bit more by not considering 1-letter words at all & saying “word 1’s 1st 2 letters = word 2’s last 2 letters.”
- But then I went a step further by putting each word into lists in “ends” dictionaries and “starts” dictionaries. Then I would match “andrew” against ends_with[‘erdna’] and starts_with[‘werdn’] … and of course patch “popsicle” against start_with “elcis”, which was a lot easier than searching everything. It could probably be compressed further, but I cut things down from potentially many hours to under 10 minutes.
From there it was a lot easier to define custom palindrome searches. I could have find_palindromes(first_array, second_array) which allowed me to do gimmicky stuff like the names of monarchs King Nik wanted to learn from: King Iolo I, Ivy VI or Vin IV or even Vi XIV.
Okay!
I’ve just addressed the last of the feedback from beta testers and uploaded a version to the site! This will be the first game which I have published in over 20 years!!! And I’m super excited. (I think I’m a better writer and game designer than I was two decades ago, but… we’ll see.)
For a better teaser…
Below is the full cover art, and the command I posted previously is an actual easter egg in the game. The blurb:
"That could have been bad.
A whole day lost in the jungle! You’re bruised, dirty, and thirsty. But now you’re out. Finally! You’ve found your Jeep and you’re ready to leave this whole experience behind you. Except… Are those monkeys climbing through your car?
And where are your car keys?"
An old-school, parser-based puzzler, set deep in the jungle. Here, you explore the overgrown edges of a lost, ancient city while trying to recover your keys from a troop of mischievous primates. Includes intermediate level puzzles with a built-in hint system for beginners.
Humor, Puzzler, Exploration, Conversation – Z-Code


