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 articleCore 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.
Related
Asteroids Game in Racket (2021)
The article details implementing the Asteroids game in Racket, focusing on a game and physics engine within 1000 lines of code, enabling spaceship control, collision detection, and user interaction.
Show HN: Engine Core – open-source LLM chat management and tool call framework
Engine Core is a GitHub repository that enables Large Language Models to use dynamic prompts and tool functions. It supports various LLM integrations and encourages user contributions under the Apache 2.0 License.
The basics for a fullstack SPA in Gleam
Gleam is a functional programming language with a C-style syntax. It uses the Lustre framework for frontend development, emphasizing immutable data structures and message dispatching for state management and routing.
Clojure Desktop UI Framework
Humble UI is a Clojure-based desktop UI framework designed for cross-platform application development, featuring a user-friendly API, ongoing development, and resources like a Slack community and sample applications.
Building a WoW (World of Warcraft) Server in Elixir
The Thistle Tea project is a private World of Warcraft server developed in Elixir, featuring user authentication, character creation, and basic gameplay, with plans for further refinement and expanded interactions.
- 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.
- 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.
Can someone explain?
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
I’ll also be posting a blog post about the journey soon!
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.
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).
Also, how about clojurescript so you could run this in browsers?
My user test: https://www.youtube.com/watch?v=gcMBaQI7d-c
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.
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.
absolutely not recommended even for solo
i would not recommend it for any sort of web app either
clojure/atomic is ovverated
jesus wept. sweep. c'mon.
They (you?) should change the name given the obvious trademark and general confusion issue.
Related
Asteroids Game in Racket (2021)
The article details implementing the Asteroids game in Racket, focusing on a game and physics engine within 1000 lines of code, enabling spaceship control, collision detection, and user interaction.
Show HN: Engine Core – open-source LLM chat management and tool call framework
Engine Core is a GitHub repository that enables Large Language Models to use dynamic prompts and tool functions. It supports various LLM integrations and encourages user contributions under the Apache 2.0 License.
The basics for a fullstack SPA in Gleam
Gleam is a functional programming language with a C-style syntax. It uses the Lustre framework for frontend development, emphasizing immutable data structures and message dispatching for state management and routing.
Clojure Desktop UI Framework
Humble UI is a Clojure-based desktop UI framework designed for cross-platform application development, featuring a user-friendly API, ongoing development, and resources like a Slack community and sample applications.
Building a WoW (World of Warcraft) Server in Elixir
The Thistle Tea project is a private World of Warcraft server developed in Elixir, featuring user authentication, character creation, and basic gameplay, with plans for further refinement and expanded interactions.