I like the look and feel of this game a lot! I found the mechanics a little hard to get my head around, though. The tip about buying a travelpass upgrade first was helpful. I sold a thing or two but I was selling at a loss so I am but a poor space cowboy it seems.
David Thompson
Creator of
Recent community posts
I love games that take familiar rules and apply them in a new way. Balatro is to poker as Monster Chess is to chess??? I made it through all of the levels, maybe around half of them on par. I liked having the par number because then I could feel proud about not only solving the puzzle but solving it in few moves. The introduction of a second white piece was cool. Would have liked to see that developed more. Nice job!
Okay so there really needs a full game that involves fediverse moderation that leads to a grand conspiracy! I think I got the "true" ending. I wish I could press the space bar or something to advance the narrative rather than moving my mouse over "next" repeatedly. Nice job and very cool that you used Hoot for this!
At first I thought I just had to run away from the enemies but then I realized I could run into them to kill them and started having fun. I wish the movement inputs didn't rely on key repeat so they'd be more responsive and that the player moved a little faster. Thanks for making a game with Hoot! I love to see it.
Any game where you play as a dog is off to a good start. This was a simple and fun Vampire Survivors-like ;). The collisions between the dog and the bats felt a little unforgiving, leaving me wondering how I got hit. When I tried to restart the game it seemed to freeze and the music stopped playing so I had to refresh to try again. Would be cool to see an upgraded version of this in a future jam!
You can't cond-expand a module definition because you need the module definition in order to know what names are imported, including cond-expand. Rather than wrapping define-module in cond-expand, you need an inner cond-expand. Unfortunately, Guile's define-module doesn't support a cond-expand form. Fortunately, R7RS's define-library does! So, you'd want to do something like this:
(define-library (cond-expand (hoot (import (web dom))) (else)) (export message) ...)
You're close! The misunderstanding seems to be that your are expecting that instantiating the module will modifiy the top level REPL environment. This is not the case and it would be kinda scary if it did that. Wasm modules are their own separate, isolated things. If you want a reference to the make-text-node procedure then you should return it by referencing it in the final line of the program you're compiling with Hoot. From there, run hoot-load on the instantiated module and if you've done everything correctly, the result will be a reference to the make-text-node procedure. The tutorial in the manual goes through this process in more detail.
- We don't have (rnrs enums) built-in. We have very little R6RS support, in general. It might be possible to import it from Guile itself but it's more likely that it will have some unmet dependencies. Scheme doesn't have a "define constant" expression, in general, but if you were to do (define foo 42) then Guile's compiler will perform constant propagation to optimize all references to foo if it is never modified with set!
- Here's an example of a custom printer. The #:printer keyword comes before all the usual record type specification. https://codeberg.org/spritely/hoot/src/branch/main/test/test-records.scm#L116
- call-external is for invoking a reference to an external function (a JS function in practice). Let's say you have a foreign binding like (define-foreign foo "example" "foo" -> (ref extern)) and the (ref extern) is expected to a function reference. call-external provides an easy way to call that external function almost as if it were a Scheme procedure.
If you are interested in making a web game using Scheme then Hoot is a great option for you! Hoot is a Scheme to WebAssembly compiler that supports most of R7RS-small and some Guile extensions such as delimited continuations (useful for scripting games via coroutines). At Spritely, we just released version 0.6.1 and updated our game jam template repository on Codeberg that has everything you need to get started making 2D games.
The template repository includes:
- Bindings to the necessary web APIs to make an interactive game with HTML5 canvas
- A Makefile for compiling, running a development web server, and generating a .zip bundle for uploading to itch.io
- A very simple Breakout-like example game that demonstrates how to put all the pieces together
Some games made with Hoot for past jams:
- https://davexunit.itch.io/cirkoban
- https://davexunit.itch.io/strigoform
- https://fluxharmonic.itch.io/lambda-dungeon
- https://podatus.itch.io/shields-tyvm
I'll do my best to help anyone that uses Hoot for the jam, whether here in this forum, on the official Spritely forum, or on the #spritely channel on the Libera.Chat IRC network. Have fun! 🦉
Using watercolor art reminds me of David O'Toole's "Testament of the White Cypress", a game made in Common Lisp ~10 years ago. Check out the png files here to see what I mean: https://gitlab.com/dto/cypress
We're pretty loose about the requirements here, so that sounds fine. What wouldn't be in the spirit of the rules is if the resulting game code you submitted was mostly Rust with just a bit of Lisp on top. One of the reasons for having this jam is to encourage participants to advance what can be done in Lisp, as there are plenty of jams out there for Rust/Godot developers.
It's both okay and recommended to prepare things in advance! A lot of participants make improvements to their own personal libraries/engines before the jam begins. The rules state that you must publish the source for the things you've prepared before the jam starts. That way, participants can judge based on what you did during the jam. If you make a rough sketch of a game now, then make sure you publish that source code and link to it, making it clear that it is the starting point for the work you're doing during the jam. Iterating on an existing game is a perfectly valid form of participation for this jam.
If you are interested in making a web game using Scheme then Hoot is a great option for you! Hoot is a Scheme to WebAssembly compiler that supports most of R7RS-small and some Guile extensions such as delimited continuations (useful for scripting games via coroutines). At Spritely, we recently released version 0.5.0 and updated our game jam template Git repository that has everything you need to get started making 2D games.
The template repository includes:
- Bindings to the necessary web APIs to make an interactive game with HTML5 canvas
- A Makefile for compiling, running a development web server, and generating a .zip bundle for uploading to itch.io
- A very simple Breakout-like example game that demonstrates how to put all the pieces together
Some games made with Hoot for past jams:
- https://davexunit.itch.io/cirkoban
- https://davexunit.itch.io/strigoform
- https://fluxharmonic.itch.io/lambda-dungeon
- https://podatus.itch.io/shields-tyvm
I'll do my best to help anyone that uses Hoot for the jam, whether here in this forum, on the official Spritely forum, or on the #spritely channel on the Libera.Chat IRC network. Have fun! 🦉