Skip to main content

Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
TagsGame Engines

David Thompson

235
Posts
10
Topics
59
Followers
35
Following
A member registered Dec 12, 2015 · View creator page →

Creator of

Recent community posts

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.

Thanks for making something with Hoot!

(1 edit)

I shot all the cubes with my cube. Wish there were more cubes to shoot. Nice job using Hoot for this!

I enjoy Sokoban-likes with a story element so this was fun for me! The art was really great. I liked the use of limited moves for the puzzles. All the puzzles felt very beginner level to me, and I wish there were more challenging ones to solve.

1Very spooky. Seems there is so no happy ending to be found, heh. I liked the page turning effect and the eye cursor. Wish there was more to do! Nice job using Hoot for this!

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!

This game taught me that if  I were out in the hexagonal wasteland I'd probably starve. Nice graphics and atmospheric background music. I felt really limited by only having 4 inventory slots and I never made it very far but it was cool!

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!

Had fun with this one once I "got it"!For some of the puzzles I wished I could move the camera in addition to panning and zooming. Great job!

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!

I really enjoyed the look and feel of this game! Loved the CRT TV screen filter. I couldn't figure out how to play it effectively, though.

I love the cabbage lambda! Wish I had been online to greet you. Thanks for trying it out!

Thanks for trying it out! Sorry I wasn't online to greet you in-world.

Oh and re: Safari: Apple still has not shipped the bug fix to their Wasm tail call implementation that makes Hoot binaries work. I hope browser compatibility is no longer an issue by the next jam (which is something I said last jam, so we'll see.)

Thank you!

Haha, a lovely tale of lag and cabbage related bugs. Thanks for trying! (and apologies for all the bugs)

What is the source code for this entry? The markdown file? I am confused.

Could you provide a link to your source code, per the jam rules? Thanks!

(1 edit)

I hesitate to call this a game but the jam has been a nice opportunity to work on a little multiplayer tech demo using Liberated Pixel Cup assets.


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)
  ...)

Ah yes, good idea! We should update the template repo with it for next jam.

(2 edits)

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.

(1 edit)
  1. 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!
  2. 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
  3. 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.
(1 edit)

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:

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!  🦉

Oops, that's my mistake! The voting period is 7 days. Fixed it. Thanks for pointing it out!

awesome! glad to hear it! I think Safari 18.2 stable will be out within a week which means it won't be long before all updated macos/ios machines can run hoot programs.

Yeah, that would do it. reflect.js is where the Scheme class is defined.

I get the same error, unfortunately.

I don't think it would be fair to all of the participants to change the submission date when we're near the end of the jam. The jam is 10 days long on purpose, to give everyone a better chance to find some time to participate vs. 2-3 day intensive jams.

No offense taken! Was just curious if we were missing something I wasn't aware of.

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

What does "proper R7RS" mean here? eval? R7RS-small was the initial target spec for Hoot, which it supports sans eval (which it will get soon).

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:

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!  🦉

Sounds like your Chrome and Firefox are too old. You need Chrome 119+ or Firefox 121+.

Since people only play these games for a few minutes we wanted to err on the side of a gentle difficulty curve. Thanks for playing!

I thought the music for Tower Institute of Linguistics was great! So did my wife, who walked into the room while I was playing and was immediately drawn in by it. Thanks for sharing your jam experience!

Unfortunately the Linux binary bundle didn't work for me on Guix. I think the ELF binary has some baked in assumptions that don't hold on Guix. I might try to build from source another time.