Yeah, it's tools down when the jam ends. Thanks for taking a look and do check back later if you have the chance!
oofoe
Creator of
Recent community posts
Thanks for taking a look! If you haven't seen it already, I put more of @goosemunch's artwork on the development log: https://oofoe.itch.io/ghost-stars/devlog/394299/the-art-of-ghost-stars
Just wanted to follow up and thank everybody for their suggestions. As you may know I went for Urlang, since it fit into Racket, which I was already using, and didn't require that I install Node.js (not a fan...).
The reason why I was looking to run it in the web browser was because I wanted to lower the barrier for people to play and rate my games. It turned out even better than I hoped -- nearly everyone eligible was able to take a look. So I did get lots of ratings!
Next time, I'll work on getting better ones! ; - )
As the writer/designer, of course you must serve your theme to say what you want to say. However, there are a number of narrative techniques that you can use to "soften" a hard info dump. These may be worth looking into, especially for something near the beginning when reader engagement is crucial. Once you've got 'em sucked in and they're dying to find out if the spat in the lunchroom was resolved or if soandso confessed to their crush, then you can pretty much get away with murder. But a lot of people will bounce if you drop a block of text on their head at the outset. ; - ) Again, just some thoughts!
"Our Sponsor " prayer was amusing, however you could have probably cut the infodump a bit shorter... ; - ) Seems like you have a nice PEG available... I wonder if you could leverage it a bit so your script didn't have to be so parenthesis heavy? (Anathema for a Lisp game, I know, but it could have the beneficial side effect of making it easier to revise. Just a thought.)
Just to let you know, got this from latest Windows build from GitHub (jupiter-candle-win10.zip) running on Win 7 (not Win 10, so maybe that's the problem...). Sure sounds interesting from everybody else's reactions though!
--------------------------- jupiter-candle.exe - Entry Point Not Found --------------------------- The procedure entry point CancelWaitableTimer could not be located in the dynamic link library api-ms-win-core-synch-l1-2-0.dll.
--------------------------- OK ---------------------------
Took me a while to reverse the process of attacking obstacles and trying to jump enemies! That said, the crate is a sneaky one... Would be nice if you could take more than one hit, maybe take successive damage. That gives the player the opportunity to try to do better without restarting completely every time.
I like the idea of tying the game into a substantial body of historic outside lore. The presentation is appealing, but some kind of pithy in-game summary of the goal and how to move could be helpful. I was happy when my avatar turned into a peacock and crushed when I lost it all to go back to level 2...
Glad you liked it! I don't know if you checked out the Blender files but that cat probably had the best ROI out of anything in the project -- I just made the simplest model I could, rigged and posed it. It was really helpful to keep the look consistent.
Unfortunately, I didn't get any static screens I wanted (title, howto, win, credits) working before the end of the Jam.
Hi! Thanks for taking a look! I'm still getting over the thrill of actually having music/sfx (I wasn't able to do game sound in Racket until my previous game Zode Trip) -- I guess I need to learn some subtlety! I believe that weird controls were a criticism of the original Q*bert, so I guess in that sense, I'm carrying on a storied tradition... ; - )
Urlang is pretty nice! There's no format function but most other things work the way I expect them to, and the interface with JavaScript libraries is pretty easy to get along with. This is an implementation of a game loop from a JavaScript game tutorial page and it was pretty straightforward:
#lang at-exp racket ; Implementation of browser game loop from this tutorial: ; https://spicyyoghurt.com/tutorials/html5-javascript-game-development/create-a-pr... (require urlang urlang/for urlang/extra syntax/parse syntax/stx racket/syntax) (current-urlang-run? #f) ; run using Node? No: use browser (current-urlang-echo? #t) ; print generated JavaScript? Yes (current-urlang-console.log-module-level-expr? #t) ; print top-level expression? Yes (see console) (current-urlang-beautify? #t) ; invoke js-beautify (urlang (urmodule game-test (import alert console this Math isFinite Object window document Date) (define context #f) ; Needs to be "global". (define timestamp-old #f) (define (init) (let* ((canvas (document.getElementById "the-canvas"))) (:= context (canvas.getContext "2d"))) (window.requestAnimationFrame game-loop)) (define (game-loop timestamp) (let* ((seconds-passed (/ (- timestamp timestamp-old) 1000)) (fps (Math.round (/ 1.0 seconds-passed))) ) (:= timestamp-old timestamp) (:= context "fillStyle" "#fff") (context.fillRect 0 0 200 100) (:= context "font" "25px Arial") (:= context "fillStyle" "black") (context.fillText (+ "FPS: " fps) 10 50)) (draw) (window.requestAnimationFrame game-loop)) (define (draw) (:= context "fillStyle" (if (< 0.5 (Math.random)) "#ff8080" "#0099b0")) (context.fillRect 0 100 256 256)) (init) )) (define (generate-html) @~a{ <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Game Test</title> </head> <body> <h1>Game Test</h1> <p>Instructions could go here...</p> <p><canvas id="the-canvas" width="640" height="480" tabindex="1"/></p> <script>@file->string{game-test.js}</script> </body> </html>}) (require net/sendurl) (send-url/contents (generate-html))
The "Invaders" example has a Big-Bang style game loop, but I had already started trying to implement this with Javathcript and figured I'd carry it on here.
Wow! Thanks for the pointer! This is almost /exactly/ what I was hoping for!
Note in the space invaders example, maybe something in the latest versions of Dr Racket isn't playing well with the compiler, but it won't allow you to use things like "<=" or ">" in an n-ary way, that is, with multiple arguments, e.g. "(<= 40 x (+ base.x 99))". You have to break the expressions up into something like "(or (<= 40 x) (<= x (+ base.x 99)))". Once I fixed that sort of thing in the Space Invaders example it launched and ran perfectly in the browser.
Glad it worked for you! Out of curiosity, did the audio for Zode Trip work correctly also?
My main problem is I can't really provide support for platforms that I don't have access to and Windows is making it really hard for people to just run a program (for valid reasons, but still a bother for this kind of thing).