Puzzle answers can be read here (spoilers!).
When the moon is full, a faint light burns in the highest window — and in the town below, people disappear. Face devilishly difficult puzzles as you climb the many floors of WOLF TOWER to defeat the terrible foe at its top!
How to Play
- Bump into things! Use the arrow keys to interact!
- Be careful! Don't touch chests or chalices until you're sure you know it's the right one!
- Be social! Talk to demons to gain clues to solve puzzles.
- The puzzles are hard! Use a pencil and paper to help you work through the clues! Puzzle answers can be read here (spoilers!).
Second, the puzzles in this game are inspired by the work of Raymond Smullyan. Most of these puzzles are adaptations of puzzles found in his book What is the Name of this Book, with some changes. Thank you and RIP; you were a logician's logician.
Thanks to Krystian Majewski ( @Krystman) of LazyDevs for some of the functions used in this game, from his PICO-8 Hero tutorial. In particular, I thank @Krystman for code in getframe(), _drawspr(), dofloats(), addfloat(), moveplayer(), the button loop in updategame(), the juicy sine wave button animation for dialogue windows (which i added to the dtb), and the fade functions.
The JSON parser functions were designed by tylerneylon, adapted by feneric, which tylerneylon has released into the public domain. feneric's adaptation of it is released under the GPL v3 license.
The rest of the game was designed by me and is released under the CC BY-NC-SA 4.0 license.
This game is mostly an experiment in trying to build a really simple adventure game engine. The NPCs and chests are drawn straight on the map, and not built programmatically. Bumping into a sprite on the map calls a function called bump(), which then looks in a table (created via JSON) to see what effects are associated with that sprite, at that location, on that floor. Sometimes bump() deletes the sprite from the map, or creates a new sprite in another location, plays a sound effect, cues dialog, etc. All of it is in the table, keeping the bump function as light as possible. Trying to make the game data driven I think ended up being largely successful, although the last couple floors weren't able to be fully captured in the bump system, unfortunately. One measure of its success is that I was able to get it down to 1913/8192 tokens without any effort at optimization.
Version 1.1 Made a few quick changes to the game thanks to some really helpful user feedback. 1. Some of the puzzles' wording has been clarified 2. The skeleton's role has been clarified, as a guide that can be trusted 3. Chests and cups are more clearly labeled 4. The first puzzle is cut, as it was too confusing
There is a place deep in the wilds where worlds collide. Above a buried dimensional rift, priests of chaos built a temple to harness its power for themselves, delving ever nearer to the rift. But a foolish high priest entered the rift itself and returned wielding a sword he could neither sheathe nor cast away. The sword demanded blood and he slew his entire priesthood to sate the blade, lest it destroy him too. With no one left to sacrifice, the sword slew him in turn. The sword has since passed from host to host, wreaking destruction and death. And through cruel fate, the cursed sword now rests in your hand. Can you cast it back from whence it came, or will its curse claim you too?
How to play
- Goal: Find the stairs to get closer to the rift on Floor B12!
- Killer Sword: Your sword demands blood! Kill enemies for more ⧗, or your sword will drain your ♥ with every step!
- Combat: Enemies move when you move! Bump them to attack!
- Treasure: Bump chests and vases to see what's inside!
- Menu: Press (X) button to open a menu, (X) button to make a selection, and (O) button to go back!
- Keyboard Controls: (X) button = X, (O) button = Z/C
- Gems: The priests crafted magic gems that can be slotted into your sword. Open the inventory menu with (X) to equip them!
- Luck: Increase your luck to dodge more attacks, get better treasure, and more!
Deepest thanks to Krystian Majewski of LazyDevs academy for the use of his game Porklike as an engine for this game. Much of the code of this game was designed by him, and I thank him especially for his ingenious level procedural generator, and the binary signature technique.
Thanks to Maddog22, who conceived many of the power gems and tested the game thoroughly. Thanks, MD!
The JSON parser program was designed by tylerneylon, adapted by feneric, which tylerneylon has released into the public domain. Feneric's adaptation of it is released under the GPL v3 license.
Some enemy artwork (tiles 192-203,208-213,224-31) licensed from Oryx Design Labs, www.oryxdesignlab.com. These designs are not released under this game's license, and Oryx Design Labs reserves all rights.
The rest, I suppose, was designed by me!
I wrote most of the code in this game while holding my newborn son, Leo. He is the co-producer of this game, as he made it impossible for me to move for long periods of time while I held him.
The code of this game is a Frankenstein mess, and it's because a lot of it is just hacking the engine developed by Krystman. I innovated a few things, but the problems with the code are mine, not his! In particular, if I could do it again, I would have followed Krystman's tutorial to the letter, and then gone back and start from scratch armed with what I learned. So, in short, my apologies for the code being substandard in places, that is my fault, not Krystman's. In particular, I regret the use of too many global variables to control logic flow, and too many big dumb if-then statements for state machines. My next game will be better!
One thing that is interestingly different from Porklike is the use of a JSON parser. I wanted this game to be data driven, and to have a really easy way of editing those data when a change was necessary. I think that worked out very well, and allowed for the gems to be procedurally generated in an object-oriented way.