September 8th, 2024

Core: New way to develop video games

Core is a Clojure-based framework for video game development, featuring efficient state management, live reloading, and error recovery, licensed under MIT, with proprietary game assets and available GUI screenshots.

Read original articleLink Icon
ConfusionSkepticismInterest
Core: New way to develop video games

Core is an experimental framework designed for video game development, utilizing a straightforward component system where components are represented as Clojure vectors of `[keyword value]`, and entities are structured as Clojure maps. The game state is managed through a single atom called `app/state`, with individual entities also being atoms within this structure. Application content is stored in a file named `resources/properties.edn`, which employs malli-schemas for validation and can be edited via a graphical user interface (GUI). For development, an NREPL server can be initiated, and the application supports live reloading, allowing for changes to be refreshed without restarting the entire application. In case of errors, developers can fix issues without restarting the JVM by using the `dev-loop/restart!` command, which can be conveniently bound to a key in their editor. The project is licensed under the MIT License, while the game assets are proprietary and not open source, sourced from various creators. The repository also features screenshots that display the GUI and game interface.

- Core is a framework for video game development using Clojure.

- Game state and entities are managed through atoms for efficient state handling.

- The application supports live reloading and error recovery without JVM restarts.

- The project is licensed under the MIT License, but game assets are proprietary.

- Screenshots of the GUI and game interface are available in the repository.

AI: What people are saying
The discussion around the Clojure-based game development framework "Core" reveals several key themes and opinions.
  • Concerns about the name "Core," as it is already associated with another game creation platform, leading to potential confusion.
  • Mixed feelings about using Clojure for game development, with some praising its functional approach while others deem it unsuitable.
  • Criticism of the project's complexity and lack of clear structure, with some commenters suggesting it feels overengineered.
  • Several developers share their experiences with other game engines, highlighting the challenges and preferences in game development.
  • Some commenters express skepticism about the project's viability and the tendency of developers to focus on engine creation rather than actual game development.
Link Icon 23 comments
By @Alex-Programs - 7 months
Oooh, this is cool. I always like to see different approaches to game dev (despite never having published a game!). So far I've tried

- Bevy (Rust ECS engine), which is nice at first but has a lot of problems with its implementation and can become rather messy. I think it's heavily dependent on the game. Part of it will be my own incompetence.

- Unity. IMO the system of gameobjects with composed modular components is the most utilitarian - it gets out of the way, and it's easy to avoid spaghetti without requiring a really strict engine-dictated structure.

- Godot. I hated it. All of the awful heirarchy of OOP, a really poor builtin language, and "signals", which are meant to decrease spaghetti but only increased it for me. Maybe I was using it wrong? I very rarely use inheritance to the point of being bad at using it.

- Pygame, back when I first learnt to code. It's quite nice for small projects - it's procedural at heart but you can make your own OOP or functional layers over it. There have been some surprisingly large projects made in it.

I don't know Clojure, but it's interesting to see someone make a functional implementation of something that stereotypically seems like a good fit for OOP.

By @kgeist - 7 months
It says game development can be made simple and then throws a whole of jargon at you: clojure vectors, datomics, atoms, transactions, malli schemas...

Can someone explain?

By @resatori - 7 months
To be honest I think this project actually failed. It is an overengineered mess and lacks any kind of clear structure.

The main problem is total lack of specification - because I didn't come up with a story for the game or I think games maybe don't need stories. So I just coded like a maniac because it's just fun to code in clojure

By @nightowl_games - 7 months
As a game dev, this GitHub is comical to me. Bordering on parody of the kind of academic navel gazing that game devs stick their nose up at. Cherry on top is the ugly screenshot.
By @frompdx - 7 months
This post has generated a surprising amount of conversation for how little documentation this repo has. Looking at the code this looks more like a project rather than a game engine. The property editor looks interesting. Seems like this post is being upvoted based on the title vs the content.
By @ertucetin - 7 months
Kudos to you! I’m happy to see another Clojure developer like me using the language for game development, even though we sometimes make things harder for ourselves :) Currently, I’m developing a 3D multiplayer TPS shooter using Clojure. For anyone interested, here’s a demo link: https://prototype-game.pages.dev

I’ll also be posting a blog post about the journey soon!

By @kleiba - 7 months
I love Clojure, but isn't a functional language with immutable data structures an odd choice for developing a video game?
By @astlouis44 - 7 months
There's already a commercial platform for game creation called Core, powered by Unreal Engine 4)

https://en.wikipedia.org/wiki/Core_(video_game)

By @philipov - 7 months
Sounds like a poorly-chosen name. It's already taken by these guys: https://www.coregames.com/create
By @ccvannorman - 7 months
It would be interesting to analyze data of "time/complexity spent on game engines" vs "complexity/interest" of produced games.

As a game developer, I expect to see a log curve of diminishing returns of novel games given any simple templating/engine system.

In other words, the better you make your cookie cutting machine, the less variance your cookies will have.

By @vlmutolo - 7 months
> The whole game state is stored in one atom: app/state and entities are again atoms inside the main atom (like in our universe).

I don’t know clojure. Is this normal terminology, ie to use “atom” this way? Seems like a bad name for the concept since the whole idea of “atoms” is that they’re indivisible (back when physics thought they were indivisible).

By @SteveSmith16384 - 7 months
I remember joking 10-15 years about how Sourceforge seemed to have far more game engines than actual games. Is this another one to add to the list?
By @breck - 7 months
Interesting! I worked on something similar once. I would recommend you go further and try to do this for 3D/4D. Orders of magnitude more interesting! In my efforts, I hit a wall where it wasn't very interesting anymore.

Also, how about clojurescript so you could run this in browsers?

My user test: https://www.youtube.com/watch?v=gcMBaQI7d-c

By @redsaz - 7 months
> The only thing missing is a game

I've seen this story of "I want to make a game" [proceeds to make a game engine instead] happen in my own life (my engines were never any good or complete though), and in countless other programmers lives.

It may be the trap of thinking that "If I get the hard part out of the way first (which is writing the engine code, right? Right? Anyone?), then the rest of the game making process will be easy" that gets me.

Or maybe it's finding out along the way that it was more fun to make the engine than the game itself: "check it out, I completely redid the particle effects and I can now do 100x more particles at 60fps, how cool is that?"

There's way more easier-to-see improvements in the making of the engine, than in the making of the game itself, and so we (ok, I) keep optimizing the engine because those are quick dopamine payoffs compared to the slower payoff of having a polished game that's actually fun for the target audience to play. Sure, I might tell myself that the game I want is only possible once I have the engine first, so I'd better concentrate on that before making the actual game, and there's some logic to it. But without a clear idea of what the game will actually be, it's easy to fall into the trap of endlessly adding and refining features, rather than actually try and use those features in anything beyond a slick demo.

To combat the tendency of only making an engine rather than a game in my latest hobby project, I picked an already existing engine (Phaser js) and tried to get something interactive on the screen ASAP "with the stupidest, least designed code possible", and it mostly worked to get me a playable (ish) game! Granted, it's a knockoff puzzle game but hey, I sometimes find myself "playtesting" it instead of what I should really be doing, which is refactoring the code for what I'd like to have it do next, so I'm marking it as a win.

By @slater - 7 months
No relation to the Core Games game kit.. thing..

https://coregames.com/

By @lincon127 - 7 months
Making games has always been simple. Making engaging games is what requires a little more work.
By @Dansvidania - 7 months
i am going to check it out, thanks for sharing!

I am learning Clojure and would love to use it for some hobby game-dev, but I have not found a way to compile to html so I am using Godot instead. Not really in awe of the OOP approach though.

By @zomglings - 7 months
Are there any games that are playable right now implemented in Core?
By @Apocryphon - 7 months
Superb username
By @jbverschoor - 7 months
Does nobody use cocos?
By @deisteve - 7 months
for the love of god do not use clojure for game dev

absolutely not recommended even for solo

i would not recommend it for any sort of web app either

clojure/atomic is ovverated

By @jheriko - 7 months
; set max speed so small entities are not skipped by projectiles ; could set faster than max-speed if I just do multiple smaller movement steps in one frame

jesus wept. sweep. c'mon.

By @Dalewyn - 7 months
I thought this was something to do with RPG Maker[1].

They (you?) should change the name given the obvious trademark and general confusion issue.

[1]: https://www.rpgmakerweb.com/