Hey all, in the lead-up to this jam, I’ve organised and released my fennel & Love2D workflow as a framework.
Hopefully this can be useful to people, even if just copy-pasting the libraries.
Thank you for playing!
Yes, the camera was intentional - inspired by The Dark Spire. I probably /should/ have a toggle for it, but I have a need to be crazy with the cameras in my games.
It is intentionally very hard, I wanted the combat loop to be the core focus. This could probably be helped by having better (or any) tutorial messages.
Wow, this is real neat!
Played up until you find the villager’s runaway daughter, but wasn’t sure how to progress from there.
I wish there was a bit more depth/difficulty to the combat, but there’s only so much you can do with a limited jam.
I also think I found a bug with combat: I was using the spells with a passive equipped in the off hand, and punching with the off-hand would often cast the spell for free (but not every time).
Thank you for playing!
Only realized from this comment that I forgot to set the player to start in town instead of in the dungeon. I was aiming for a Wizardry style loop where you gain experience in the dungeon, then head back up to heal and level up.
A type effectiveness chart could definitely be added in an update, didn’t even cross my mind to do that, so good shout.
An explanation screen for how stats work would also be a good idea. STR/CON and INT/WIL are ATK/DEF for Physical attacks and Special attacks respectively. AGI is speed, which determines turn order.
Better up-front explanation on how Soul Crystals work would’ve addressed your confusion on leveling up: only your Familiar (the one you choose at the start) levels up repeatedly; all the rest are Soul Crystals which are intended to be temporary. While they level up faster, they can only level up 3 times, in order encourage you to sell them and replace them with stronger creatures. The shop selection scales with the level of your familiar.
In addition to this, Soul Crystals break when the creature is defeated, whereas your familiar can be revived indefinitely.
Even with the confusion you ran into, I’m glad to hear the game still remained fun!
Thank you for playing!
Yes, the camera perspective was very inspired by The Dark Spire - for no other reason than I like to be out there with cameras.
The boss is intended to be a low level, might not’ve been clear enough in the story that it’s early enough that they’re still very weak. Good to know that it is possible to see the end - did not have enough time to balance and playtest any of it!
Barring code, what’s the stance on re-using stat blocks/battle systems from a previous project?
I have a lot of abstract content from a previously worked on RPG game jam project that could be re-tooled to fit in a DRPG, so I’d be able to cut down on scope if I could re-use them. Most of this content was inaccessible due to running out of time to balance.
There is an occasional crash on 6F. Please play the updated version instead, the only differences are quality of life features that are easily ignored.
https://menacingmecha.itch.io/glorbo-the-wanderer/devlog/1460564/jam-20
This is neat! Big fan of the CRT shader.
I didn’t understand for much too long that I had to press BUG! to progress - it IS in the instructions, so it’s on me, but would be worth including in-game since everything else is very clear and intuitive.
Some brief respite between movements would also be nice, I was starting to get some hand cramps with how much you’re asked to quickly move and click the mouse precisely.
Sadly not able to get this running on NixOS - very possible I’m just not understanding what packages I need.
Error message I get:
[LWJGL] GLFW_API_UNAVAILABLE error
Description : EGL: Library not found
Stacktrace :
org.lwjgl.glfw.GLFW.nglfwCreateWindow(GLFW.java:2086)
org.lwjgl.glfw.GLFW.glfwCreateWindow(GLFW.java:2251)
java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
java.base/java.lang.reflect.Method.invoke(Method.java:580)
clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:196)
clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:159)
clojure.lang.Reflector.invokeStaticMethod(Reflector.java:361)
clunk.core$init_glfw.invokeStatic(core.clj:83)
clunk.core$init.invokeStatic(core.clj:215)
clunk.core$start_BANG_.invokeStatic(core.clj:366)
spider_game.core$_main.invokeStatic(core.clj:55)
spider_game.core$_main.doInvoke(core.clj:55)
clojure.lang.RestFn.invoke(RestFn.java:400)
clojure.lang.AFn.applyToHelper(AFn.java:152)
clojure.lang.RestFn.applyTo(RestFn.java:135)
spider_game.core.main(Unknown Source)
Exception in thread "main" java.lang.IllegalStateException: Unable to create the GLFW window
at clunk.core$init_glfw.invokeStatic(core.clj:84)
at clunk.core$init.invokeStatic(core.clj:215)
at clunk.core$start_BANG_.invokeStatic(core.clj:366)
at spider_game.core$_main.invokeStatic(core.clj:55)
at spider_game.core$_main.doInvoke(core.clj:55)
at clojure.lang.RestFn.invoke(RestFn.java:400)
at clojure.lang.AFn.applyToHelper(AFn.java:152)
at clojure.lang.RestFn.applyTo(RestFn.java:135)
at spider_game.core.main(Unknown Source)
This is neat!
Wasn’t sure how much impact I was having, especially since I kept losing the very first level where you only have the one guy, but I understood what I was being asked to do.
Some more info on unit stats/behaviour would do a lot for this, but it’s a solid start.
Found a bug with adding from inventory to shop:
Inventory is initially disabled(?), but grabbing the one in your inventory and dropping it will enable you to drag and drop from the shop.
Oops, that was a crash I never caught arising from what’s meant to happen when you run out of HP.
Uploads are locked during the rating period, but there’s a fixed version here:
https://drive.google.com/drive/folders/12O41JnxDYxZg0nLpqFl116UT_reT_QQT?usp=sharing
Only difference is the crash is fixed.
Absolutely allowed to post stuff anywhere - should probably have made this clearer.
Initially I was planning on keeping it secret, but on second thought, that’s probably a bad idea. Wouldn’t want a situation where someone clearly couldn’t win but kept grinding away without knowing. When I receive the first submission, I’ll make something publicly available for reference.
Attack range was next possible thing to be worked on, but ran out of time.
With enemies unable to move, giving the player Arbalesters can get tricky to balance, as without putting enemy Arbalesters everywhere it would allow the player to just sit back and safely pick off enemy units. They were taken off of the final map for this reason, but with enough time to properly craft maps (and add some extra mechanics to give units different properties), this could be alleviated.
Greetings fellow Linux beardie! There’s Makefile rules in the src for generating AppImages, but I’m on NixOS and had issues getting those to run on non-NixOS machines.
Until I get around to fixing my build workflow, easiest steps for Linux is to either run the .love with the love2d from your package manager, or run the Windows version in Wine.