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