NOTE: This originally appeared as a limited distribution message to a small number of readers. It is reproduced here for historical completeness.
Original Publication Date: 2024-05-10
Dear Reader[s] (including those of you who are fictitious or temporally challenged),
Still working out the means and ends of putting this “Blog” somewhere other than a collection of direct messages I perform on a semi-weekly basis. I’m not 100% comfortable with the format (due in part to it existing a total of 3 weeks), but it feels somewhat less sociopathic than my initial attempt, and I think it’s helping me deliver content. Feeling and obligation to write one of these about once a week seems both doable and useful.
State of the Project:
I did an amount of thinking this last week, mostly in regards to “what is a puzzle, and how do you make one?” I also did an amount of consuming video essays on and reading on the subject, and have a rough working definition:
A Puzzle is a hidden procedure which tells a story that is engaging to discover.
There’s a lot to unpack there, but think about something like Portal. A Portal Level has an intentional (sometimes more than one) solution path. This path involves some arbitrary number of actions the player has to perform, and these tell the story of the test chamber. Early on, these stories are simple:
1. Pick Up Block
2. Place Block on Button
3. Exit through Door.
Not ultimately super engaging, except if you’ve never played Portal before. At which point (assuming no spoilers) you now have the solution to that puzzle and the process engaged you enough to move you to the next puzzle and not shut the program off. Later you get more elements but that’s just adding steps to the hidden procedure (oft involving death defying interactions with lasers, acid, and physics).
Technical News
The Scripting System now supports Subroutines. They’re not functions because they don’t accept or return any arguments. I’m likely not going to support full functions because I don’t envision needing those for any Puzzle Stories I want to tell and with so many other blocks to play with I don’t think we need that particular one.
That being said, this scripting is getting much closer to a trial state of “Done.” I wrote subroutines as much to get my headspace ready for the actual thing I have planned next: Limited Variables and Conditionals. I plan to have blocks for IF,ELSE as well as INTEGER and BOOL. These necessitate a couple others (Arithmetic, Comparison, Assignment) but I don’t anticipate any issues. The plan of attack on those is similar to the subroutines using a Dictionary.
Tech & Design Debt Update
I hate these buttons I have along the bottom for spawning nodes. I thought I could live with them, but they suck big time. In an ideal world they’d just click and drag out into the scene but I can’t get it to work. I may go back to that concept, but I’m currently considering scrapping them for a context menu or something. Perhaps if they had real icons which responded to hover & other QoL things I’d hate them less.
Thanks for reading!
– Harris Sinclair