[HN Gopher] Show HN: Kandria, an action RPG made in Common Lisp,...
       ___________________________________________________________________
        
       Show HN: Kandria, an action RPG made in Common Lisp, is now out
        
       Kandria, an open world action RPG platformer written in Common Lisp
       is now out and available!  A prior discussion of Kandria can be
       found here: https://news.ycombinator.com/item?id=32043026.  I'm the
       lead developer and sole programmer for the project. Would be happy
       to answer any questions about it!
        
       Author : Shinmera
       Score  : 310 points
       Date   : 2023-01-11 14:09 UTC (8 hours ago)
        
 (HTM) web link (store.steampowered.com)
 (TXT) w3m dump (store.steampowered.com)
        
       | chobytes wrote:
       | Congratulations! Ive been following development with your blog/yt
       | for a bit, so Im excited to finally check it out.
        
         | Shinmera wrote:
         | Thanks, hope you have a good time with it!
        
       | jes wrote:
       | This is really great to see. I'm looking forward to learning from
       | your work.
       | 
       | Thanks for making it public.
       | 
       | Long Live Lisp!
        
         | Shinmera wrote:
         | I hope the fact that game code is very hacked together won't
         | deter you :)
        
       | Emigre_ wrote:
       | Congratulations to the team! Looks great! I'll buy it later. : )
        
         | Shinmera wrote:
         | Thank you very much!
        
       | jshaqaw wrote:
       | Hi. I'd be interested on how you feel using lisp impacted the
       | development of the game and the final game structure. Would it be
       | the "same" game if implemented in a more conventional approach?
       | Thanks.
        
         | Shinmera wrote:
         | There's a lot of aspects that are extremely Lispy. The best
         | example is our dialogue scripting language, Speechless:
         | https://shirakumo.github.io/speechless
         | 
         | You can run arbitrary lisp snippets to form conditions,
         | branching, and effects in the game. This makes integration and
         | extension very easy, and I don't have to constantly extend some
         | special purpose scripting API to expose new bits.
         | 
         | The heavy use of CLOS is another good example, and of course
         | the interactive development. Shaders, assets, etc can be
         | reloaded while the game is running, not to mention all game
         | behaviour.
        
           | jshaqaw wrote:
           | Very cool. Is any of this exposed at the user level in any
           | way for modding/experimentation or is that just too
           | unworkable in production? Also, curious if there was a
           | toolchain reason for the lack of a Mac version or is it just
           | too tiny of a market to bother?
        
             | Shinmera wrote:
             | Official modding support is coming as the second major post
             | launch update.
             | 
             | Mac version isn't supported because I got tired of Apple
             | constantly breaking things and making them way more
             | difficult, while still having the worst documentation on
             | the planet. I don't have it in me anymore to chase that.
             | 
             | But, if anyone else wants to fix things up, the engine and
             | game are OSS.
        
               | patientplatypus wrote:
               | [dead]
        
           | Scarbutt wrote:
           | The million dollar question, if you had to do a similar game
           | again, would you still pick CL?
        
             | Shinmera wrote:
             | I already have a concept for another game. It'll be more
             | ambitious in some respects and less so in others. Of course
             | I'm continuing to use CL.
        
       | fiddlerwoaroof wrote:
       | Congratulations on the release!
        
         | Shinmera wrote:
         | Thank you :)
        
       | ldh0011 wrote:
       | I've been following development for a while, looks very cool.
       | Won't be able to play for a while but bought a copy :)
        
         | Shinmera wrote:
         | Thanks a lot! I hope you enjoy it, whenever you get the time.
        
       | davexunit wrote:
       | I've been following this project for a long time and it's so
       | exciting that it's finally been released! Anyone that likes Lisp
       | and/or game development will find plenty of interesting things to
       | study by looking through Shinmera's source code, videos, and
       | articles. Here's a couple of papers that I like a lot:
       | 
       | Object Oriented Shader Composition Using CLOS
       | https://raw.githubusercontent.com/Shinmera/talks/master/els2...
       | 
       | Shader Pipeline and Effect Encapsulation using CLOS
       | https://raw.githubusercontent.com/Shinmera/talks/master/els2...
        
         | Shinmera wrote:
         | There's also
         | https://github.com/Shinmera/talks/blob/master/gic2021-highly...
         | which gives a broad overview for non-lispers.
        
       | keldami wrote:
       | Hey, why does it matter if it's made in 'common lisp' ?
        
         | sigstoat wrote:
         | if i've learned anything from HN, it is that the language you
         | write something in is the most important thing you can say
         | about it.
        
         | kemayo wrote:
         | I'd say that to the end-user it doesn't matter (which is why
         | it's not mentioned on the linked store page), but to the HN
         | crowd it's _interesting_ because lisp is a nifty hacker topic
         | and seeing someone manage to write a game in it is pretty cool.
         | 
         | (It's probably more interesting than all the "X, a clone of Y
         | but in Rust" posts, at least.)
        
         | Shinmera wrote:
         | Common Lisp is pretty cool, and to my knowledge this is the
         | first major game title using it that is actually released.
        
           | lelanthran wrote:
           | Maybe not common lisp, but look up crash bandicoot by naughty
           | dog software for the playstation.
           | 
           | That was an exclusive playstation title, probably the third
           | biggest title in terms of sales on the playstation, and it
           | was written in Lisp.
        
             | bmitc wrote:
             | To my knowledge, Naughty Dog have never fully implemented a
             | game in a Lisp. They used it and custom languages written
             | in Racket as scripting and automation tools.
             | 
             | The game posted here appears to be written in Common Lisp
             | from the engine up.
        
               | bitwize wrote:
               | The first few Jak & Daxter games were written from the
               | ground up in GOAL.
        
             | bitwize wrote:
             | I have a private conspiracy theory that one of the reasons
             | for the recent remaster of _The Last of Us_ is to move all
             | of Naughty Dog 's go-forward IP off a Lisp-based workflow.
             | Through at least _The Last of Us_ (2013), ND had been still
             | sneaking in Lisp through the back door: while the engine
             | was in C++, a toolchain in Racket would generate all the
             | entity component types as well as data for various
             | animations, etc. I think there 's been a shift in developer
             | talent at ND in the past few years, and Druckmann wants to
             | get rid of all the Racket stuff (because it's hard to find
             | maintainers for it) and stick with a standard C++ workflow.
             | 
             | All of which makes Kandria even more refreshingly welcome.
        
             | Shinmera wrote:
             | Yeah I know about GOAL and OpenGOAL and all that.
        
       | carapace wrote:
       | Forgive me if this is a dumb question, if I install this through
       | Steam can I hack on it?
        
         | Shinmera wrote:
         | Not a dumb question at all.
         | 
         | You need a full copy of the game from Steam or somewhere else
         | to hack the game. You can get the source code here:
         | https://github.com/shirakumo/kandria and hack on it that way.
         | 
         | You can also just look at the asset files in the install folder
         | and mess around with those. Nothing's encrypted.
        
       | joamag wrote:
       | Wow looks beautiful, congratulations. Would love to learn about
       | the development experience, specially taking into consideration
       | that you've used Lisp.
        
         | Shinmera wrote:
         | Thanks! I wrote about exactly that a while ago:
         | https://reader.tymoon.eu/article/413
        
         | rjsw wrote:
         | The Author/Poster's blog is included in Planet Lisp [1].
         | 
         | [1] http://planet.lisp.org/
        
       | Shinmera wrote:
       | [dead]
        
       | mikedelago wrote:
       | Congrats on shipping it!
       | 
       | I've been following the progress since I've been learning Common
       | Lisp here and there over the past year or so.
        
         | Shinmera wrote:
         | Thank you! I hope you enjoy playing it!
        
       | 10987654321 wrote:
       | Congratulations on the release! I've been following the
       | development blog for a fair while and backed the kickstarter and
       | am very happy to see this game finally getting released (and OSS
       | no less).
       | 
       | I've been looking into making my own game using the Trial engine
       | but I was a bit scared off by the warnings about API stability
       | and lack of documentation. Now that Kandria is released, is the
       | API stabilized? And I guess the Kandria source code can work as
       | documentation on how to set things up..
        
         | Shinmera wrote:
         | I've started writing documentation for Trial on the parts that
         | are unlikely to change much. The API stability warning will
         | remain though, as I can't rule out that we might have to
         | rewrite subsystems in the future as new needs and better
         | architectures are devised.
        
       | tra3 wrote:
       | I've been tinkering with Emacs Lisp for a little bit. I notice
       | some package authors use cl-* macros.. is it worth going in that
       | direction?
       | 
       | ...I just looked up where the macros are defined, this is
       | fascinating:
       | 
       | > ;; This package was written by Dave Gillespie; it is a complete
       | 
       | > ;; rewrite of Cesar Quiroz's original cl.el package of December
       | 1986.
       | 
       | Congrats to the Sandra team, sorry about the off topic.
        
       | Heksell wrote:
       | I was originally a Kickstarter backer when the developer was
       | advertising the game as intended to be open-sourced, but then
       | open-source became a Kickstarter goal so I withdrew the backing.
        
         | mzs wrote:
         | https://github.com/Shirakumo/kandria
         | 
         | https://github.com/Shirakumo/trial
        
         | Shinmera wrote:
         | The source code for the engine, Trial, and the game, Kandria,
         | are both open and on our GitHub under Shirakumo.
        
           | svetlyak40wt wrote:
           | That is great, now other developers have a chance to use
           | Kandria as an example for their own projects!
        
           | Heksell wrote:
           | I'm glad to hear that it's open source now. I specifically
           | took issue with advertising that it would be open source
           | before the Kickstarter, but then open-sourcing it became a
           | Kickstarter "stretch goal" implying it would have remained
           | closed if that funding goal wasn't reached. I was on board
           | until that surprise.
           | 
           | Looking at the Kickstarter right now:
           | 
           | "Stretch Goal 3: Modding Support
           | 
           | This goal includes three things in specific:
           | 
           | The game source code will be publicly available _! ..._ The
           | code will be released under a license that prohibits using it
           | for any commercial activities, and requires you to share-
           | alike any modifications you make. The release will also not
           | include any assets, so you 'll still need a copy of the
           | official game to play it."
        
             | Shinmera wrote:
             | My intention was always to make it available as open
             | source. The stretch goal was there for the rest of the
             | things and to provide some extra incentive.
             | 
             | The license for the code is zlib now, but the assets remain
             | closed. I think that is a fair trade.
        
       | NeutralForest wrote:
       | Cool to see games made with Lisp, I bought it =)
        
         | Shinmera wrote:
         | Thanks! Hope you enjoy it!
        
       | pcerdam wrote:
       | Congratulations! Have followed the project for a while now,
       | really nice to see it successfully released :)
        
         | Shinmera wrote:
         | Thank you!
        
       | nortonham wrote:
       | I had not heard about this...thanks for sharing, looks fun
        
       | Scramblejams wrote:
       | Congrats! Amazing accomplishment. In 4 1 out of solidarity and in
       | appreciation of your use of Lisp and support for Linux.
        
         | Shinmera wrote:
         | Thank you very much!
        
       | aetherspawn wrote:
       | Hi, looks really great! Would really love to see it available for
       | Nintendo Switch. As a casual gamer, I don't like to lock myself
       | away and play games, so I only really play games on the living
       | room TV on the couch with my partner :)
       | 
       | I think many might be in the same boat.
        
         | Shinmera wrote:
         | Believe me I'd love to have it on Switch but it's a tall order
         | for reasons I can't discuss due to NDAs. It might happen if my
         | finances look well enough.
         | 
         | It does run on the Steam Deck, though, so if you can get a hold
         | on one of those...
        
           | aetherspawn wrote:
           | Thanks for the response and the suggestion, I'll look into
           | it.
           | 
           | If the issue with a port is CL, maybe you could look at doing
           | AOT compilation to C or something like that. The switch is
           | more than powerful enough even if the resulting code is slow.
           | 
           | Brief google brought up CLiCC.
        
             | Shinmera wrote:
             | That unfortunately won't be possible. And I'm afraid the
             | Switch is by far not as powerful as one would like.
        
       | heisig wrote:
       | Congratulations to the entire team from Shirakumo Games!
       | 
       | Developing and shipping a full-fledged video game requires a lot
       | of hard work and dedication. And writing a custom game engine and
       | tool chain at the same time is really a heroic feat. Hats off to
       | everyone, especially to Shinmera!
        
         | Shinmera wrote:
         | Thanks!
        
       | baggers wrote:
       | No questions today, but just wanted to pass huge congratulations
       | your way. Getting to release is no small feat even when leaning
       | on existing engines, and knowing how little was available in CL
       | makes this day all the sweeter.
       | 
       | Also thanks for the SteamDeck support!
        
         | Shinmera wrote:
         | Thanks! Hope you enjoy playing it on the Deck! :)
        
       | random3 wrote:
       | It's looks amazing, congratulations!
       | 
       | I'd love to see the source code. Assuming this is not OSS, I
       | wonder what's a good example of a code base, ideally one that is
       | hackable and could be used for educational purposes?
        
         | baggers wrote:
         | You can find the source over here:
         | https://github.com/Shirakumo/kandria
        
         | Shinmera wrote:
         | The source code for the engine, Trial, and the game, Kandria,
         | are both on our GitHub under Shirakumo. It's all zlib licensed.
         | 
         | The code base isn't great for learning though, I'd say. Game
         | development usually does not leave the time to architect things
         | neatly, rewrite large chunks, or document stuff deeply.
        
       | agentultra wrote:
       | This is dope as heck. I used to contribute to the common lisp
       | SDL2 bindings. Great to see a polished game on Steam written in
       | Common Lisp!
       | 
       | Recently saw one in Haskell too. And there have been several in
       | Javascript over the years.
       | 
       | Did you find you had to manually manage the GC? Did you take
       | advantage of CLOS?
        
         | Shinmera wrote:
         | I had to do a little bit to avoid insane amounts of consing,
         | but honestly not a lot. And the optimisations I just did after
         | the fact, gradually.
         | 
         | I use CLOS a lot for everything. The event system is literally
         | just an array of handlers and a generic function called HANDLE
         | that takes the event object and the handler object, for
         | instance.
         | 
         | The source code for the engine, Trial, and the game, Kandria,
         | are both on our GitHub under Shirakumo.
        
           | Annatar wrote:
           | [dead]
        
           | agentultra wrote:
           | Nice! Thanks for sharing!
           | 
           |  _Update_ Bought a copy, definitely my jam. Played on the
           | steam deck, noticed that the _first_ time I used an action
           | (move, jump, attack) there was a noticeable pause /stutter
           | but has been smooth as butter afterwards.
           | 
           | PS: are you able to talk about the steam integration? I
           | assume it's a C or C++ library of sorts and fairly straight-
           | forward to extend; curious if you plan on releasing to
           | another platform if it's possible to keep similar
           | "achievments."
           | 
           | Also, kudos on the accessibility settings; changing damage
           | and game speed, etc! Nice.
        
             | Shinmera wrote:
             | Hmmm. I might have to take another look at optimisation for
             | the deck, then.
             | 
             | Sure. I use the cl-steamworks library I wrote.
             | https://shinmera.github.io/cl-steamworks/ Their API frankly
             | sucks and getting the integration going was a big pain.
             | However, if all you want is the minimum, like achievos, you
             | can omit all of that and just do a couple C calls.
             | 
             | The engine has abstracted support for achievements and such
             | integrations, so it is possible to integrate with other
             | platforms, too, should we ever release on GOG or EGS.
        
         | trenchgun wrote:
         | What was the Haskell game if you dont mind me asking?
        
           | agentultra wrote:
           | https://www.reddit.com/r/haskell/comments/z98ubk/defect_proc.
           | ..
        
       | TacticalCoder wrote:
       | I was going to comment controls looked like the mega hit
       | "Celeste" and then I found this comment on HN, from 6 months ago,
       | by the dev of Kandria:
       | 
       |  _" I wanted to create something bigger, and had just finished
       | playing through Celeste"_
       | 
       | Ah that explains it! Congrats on shipping on Steam!
        
         | Shinmera wrote:
         | Yeah, it started out with just Celeste mechanics before
         | everything else happened.
         | 
         | Thanks!
        
       | johnchristopher wrote:
       | Reminds me of Knytt.
       | 
       | Is it more like Knytt than Celeste ? I didn't Celeste.
        
         | Shinmera wrote:
         | It definitely has Knytt influences in there and features a lot
         | of exploration, but there are a lot more platforming challenges
         | especially in the later sections.
         | 
         | There are accessibility options that let you toggle infinite
         | dashes on and off at any time, which lets you bypass most of
         | the challenges pretty easily should you get frustrated.
        
           | johnchristopher wrote:
           | Thanks !
           | 
           | (I meant to write "didn't enjoy Celeste")
        
       | shultays wrote:
       | [flagged]
        
         | [deleted]
        
       | axus wrote:
       | I've got a vague recollection that the Linux platformer "Abuse"
       | from 30 years ago used a dialect of Lisp.
        
         | miohtama wrote:
         | Abuse was cross platform, later open source.
         | 
         | The engine was nice engineering and probably one of the first
         | true games with scriptability. However the game itself failed
         | to deliver as a game was meh - not exciting.
         | 
         | The same studio later tried their fangs in RTS, but never
         | finished the project - I assume out of funding.
        
       | superdisk wrote:
       | Been enjoying your open source Lisp libraries, congrats on
       | releasing the game! I'll check it out.
        
         | Shinmera wrote:
         | Thanks! I hope you have a good time with it.
        
       | tumdum_ wrote:
       | Are there any plans to support consoles (ps5, switch)?
        
         | Shinmera wrote:
         | I want to investigate Switch support more deeply this year, and
         | we have a potential way to do it. However, consoles are
         | difficult due to their restrictive nature, especially regarding
         | JIT and other techniques like signals and interrupts, which are
         | important for many Lisp implementations.
        
       | peebz wrote:
       | This looks amazing! I'm guessing you may have answered these
       | questions before somewhere so please point me to the information
       | if so. I'd like to know what development environment you use
       | (Emacs, SBCL and Slime?), what packages you used to create the
       | graphics for the game, and what the game is compiled to. Thanks.
        
         | Shinmera wrote:
         | I use Emacs, Slime, SBCL, yes. Since it uses SBCL, game code is
         | compiled to native machine code for each supported platform and
         | architecture.
         | 
         | You can find more info on the dev process here:
         | https://reader.tymoon.eu/article/413 And the source code for
         | the engine, Trial, and the game, Kandria, are both on our
         | GitHub under Shirakumo.
        
           | amalgamated_inc wrote:
           | When you write a game for Steam or similar services, do you
           | have to make a specific binary format or follow certain
           | conventions? Or could you basically do anything, in any
           | language, even if it ships with a VM? Could I write a game in
           | Erlang, for example, as long as I have SDL bindings?
        
             | Shinmera wrote:
             | All that steam requires is a native executable to launch,
             | and that you load their steamworks library and initialise
             | it, which should be one or two FFI calls.
        
           | peebz wrote:
           | That's fascinating, thanks!
        
       | Annatar wrote:
       | Which compiler did you use?
       | 
       | Did you generate an executable machine code image with it?
       | 
       | How are you drawing graphics with Lisp (SDL, DirectX, OpenGL,
       | something else)?
        
         | Shinmera wrote:
         | SBCL. Yes. OpenGL, using GLFW for the context wrangling.
        
       | amalgamated_inc wrote:
       | Wow, looks awesome! I love these indie sidescrollers.
       | 
       | Will it be available for Linux, maybe on GOG?
        
         | Shinmera wrote:
         | It's already available for GOG. You can get it on Steam, Itch,
         | or on our website. All versions are DRM free.
        
           | amalgamated_inc wrote:
           | Hm, I can't find it on GOG. Did you mean for Linux? The Itch
           | site says Linux is available, so I'll get it there or on your
           | website.
           | 
           | Thanks!
        
             | Shinmera wrote:
             | Sorry, my brain is fried. It's already available for Linux
             | on itch and Steam is what I meant to say.
        
               | amalgamated_inc wrote:
               | Thanks :)
        
         | Archit3ch wrote:
         | It even works on Parallels! Goodbye productivity...
        
       | taeric wrote:
       | Looks great! Kudos on the launch!
        
         | Shinmera wrote:
         | Thanks!
        
       | vlunkr wrote:
       | Looks awesome! It's relatively rare to see fully completed games
       | open-sourced immediately. I'm curious what the thought process is
       | there, and if you're concerned about people selling low-effort
       | reskins or other exploitative things.
        
         | Shinmera wrote:
         | My mind about this has always been in a couple directions, but
         | none of them point towards not open sourcing things. So, for
         | one, I very heavily doubt that anyone would take this source
         | code in Lisp of all things and release a product that could
         | actually damage my sales. And even if they did so history shows
         | that there's very likely practically nothing I could do about
         | it. I'd just have to be upset about it happening, with no real
         | chance of repercussion.
         | 
         | It is far more important to me to show confidence in my vision
         | and to let other people learn from what I've done. In my view a
         | lot more games should be open source, because far too much of
         | the process is hidden behind mysticism, with far too many
         | people wasting a ton of time reinventing things from scratch.
         | 
         | And, well, finally, I'd ultimately like to make everything I do
         | available for free, anyhow. The only reason I'm selling Kandria
         | is because there is no UBI in this country and probably won't
         | be for many years to come, so I have to fund things somehow.
        
           | westmeal wrote:
           | You're a pretty rad dude
        
             | Shinmera wrote:
             | Aw, thank you.
        
           | vlunkr wrote:
           | Very cool. Coming from the web dev world, the gaming world
           | seems very protective of everything about development. This
           | makes sense coming from the AAA studios, but it sadly extends
           | to many indie devs as well. Hopefully there will be more
           | embracing of the open source model in the future.
        
             | Shinmera wrote:
             | Yeah. Even around announcements and reveals there's a lot
             | of scares going around. The industry has historically
             | relied very heavily on a big launch hit, so the marketing
             | around that had to be very carefully massaged, and release
             | of information controlled as a consequence.
             | 
             | I'm personally sceptical that it's healthy to be this caged
             | about things, but I don't have any numbers to back this up
             | -- though I suspect nobody else does either, given how
             | marketing is always just a crapshoot.
        
           | pwillia7 wrote:
           | hear hear
        
       ___________________________________________________________________
       (page generated 2023-01-11 23:00 UTC)