Make attacks faster than some games load! The Castagne Editor is easy to use when starting out, and unlocks incredible speed once you learn it!
Why limit yourself? Castagne’s flexibility allows you to use it for many action genres! Fighter, Platformer, Beat-them-Up? Go ahead! Want to add a dash of fighting to your TRPG? Use Castagne as a module!
Don’t just make a prototype, make a full game! Castagne has Rollback compatibility at a core level, and support for many game modes and quality of life features!
Castagne is Free and Open Source Software (MPL 2.0 Licence), meaning you will never get locked out. Your game will be your own and in your complete control.
Castagne isn’t a regular game engine: it’s a specialization of any engine. Written in Rust, it’s easy to hook it to general purpose engines like Godot and use the best tool for the job!
Castagne welcomes all. Precision design allows ways to edit code graphically, while still saving it in text for VCS. In a team? Easily define interfaces for your designers to adjust attacks. Experts and beginners alike are delighted.
Castagne’s design allows maximum flexibility within some key, tasteful constraints that allow performance and great tools. Make combo unit tests, analyze your data, and make the best game you can.
![]()
Hey! Panthavma here, I'm Castagne's author! The Godot 3 version was a long prototype, and I'm finally making the complete vision of Castagne! I want to make something that is still useful in 10 years, and all those previous tests help do that. That's not to say the Godot 3 version is lacking: commercial games have already been released in it, you can try it out!
The Rust version of the engine is still a work in progress, which I'll release in beta when I'm proud of it and I'm confident it can handle current projects. You can follow development here or on any of my channels. Stay tuned!
Follow castagne's development!
Youtube - Mailing List - Forum - Discord - Twitter - Bluesky
2D Fighter / Airdasher
Website - Steam - Bluesky - Twitter - Forum
Complex machines fighting at high speed! Tame each mech’s unique weapons using simple inputs and become an ace pilot!
2D Tag Fighter
Magic and technology intertwine in dynamic teamfights! Level up and call upon your allies to decide the fate of the Ashen Island!
2.5D Tag Fighter / Airdasher
A fast-paced tag fighter with only one attack button! A Fabled curse has swept the world… ordinary teens have begun transforming into characters from their favorite classic stories. Put together explosive team combos at Parable Academy for Fabled Youths!
Platform Fighter
A fast-paced, free-flowing platform fighter with a Shibuya Punk and Y2K aesthetic!
Hey everybody! Slow news this time: between the heat wave we had a couple days ago and my schedule for the month, I’m not going to be able to do a lot of work on the project, let alone deep work… which is pretty much the main type of work at this stage.
Therefore, I’m going to be posting more chill updates on the project direction for the time being! This means it’s also a golden time to ask some questions: if you have some, do send them on the forum or on Discord! I’ve already done an early round of questions, which I’ll be answering over the month, as well as some subjects I’ve asked myself. I will be adding some open questions at the end of these updates you’re welcome to answer yourself!
Do note (although that’s gonna be explained more in a future progress), since I’m not always at home and I haven’t automated everything, for these update you’ll need to watch the RSS feed or the automated posts on the discord! I likely won’t be able to post these properly as usual, I’m writing a bunch of these in advance in a car lol. And with that, let’s start with the most common question:
That’s of course the burning question: when will this new version be accessible? “When it’s ready” is a cop out answer, but while I won’t be able to give a proper ETA beyond “before the end of the year most likely”, I will explain my thought process, rollout stages, and planned features. I don’t have everything planned out in detail, I know well enough what big systems are there and how they link together but the exact implementation is decided later in the process, so it’s not going to be exactly as written in advance. I think this is going to be the biggest update.
There are a few things to keep in mind for the project timeline to make full sense. There’s several objectives to balance, just as there as different Castagne users and reasons for using it.
Personally, I’ve separated the tasks in several internal gates. The first gate is mostly for me: it’s when the engine’s advanced enough to be used for my own projects. It’s mostly core parts such as “attack cancels work properly”. There’s several shortcuts I took, since I want to focus on the internals. There’s a lot of constraints everywhere, such as preparing for rollback in advance, and all the systems made here are going to be interacting with each other and the future ones. This won’t be released, as there’s too many caveats in use that it’s not worth it. ETA unknown, since the heatwave took me out when I had the opportunity to make big progress lol. Here’s the remaining systems to give you an idea, there’s not that many:
After that, there’s the second gate. It’s aim is to be for current power users, it’s a functional software that can be used with roughly the same precautions as the Godot 3 version, but not necessarily the same features. It’s to continue development. That’s where a lot of the key work is done, such as removing the shortcuts from the previous gate, implementing some of the less core but still important systems, and start gathering early feedback. Here’s a few of the main stars:
And then there’s the third gate, which aims for a potential wider release. This one focuses on what beginners will expect, but balances it with a faster release. The aim’s less technical here but emotional, the idea is to avoid the uninitiated feel like there’s a huge part missing. This does delay the stronger tools that make Castagne worth it, but beginner pandering enables potentially more people moving up the pipeline and helping out. Here’s a couple of the main systems planned out:
That’s of course not the end of development, or even the first proper version. Beyond the fact there’s always going to be improvements to be made, there’s still some core features missing: 3D fighters and platform fighters, the tools interface, the command line interface, other engine integrations… The aim here is to be a solid enough open beta to bring in more people, but not wait until everything is perfect (which couldn’t happen anyway without user feedback).
You might notice that there is a shift in development between those gates: it’s aimed at pros first, then starts focusing more on the uninitiated before going back to pros. For better and worse, Castagne’s userbase is mostly beginners, and even within the more experienced people, I can’t help but notice many lacking huge parts of the picture. This is probably because I tend to have high standards and a philosophy of knowing what’s going on in the other fields, and a lack of clear visions and learning paths for gamedev. While having to adapt to that is also a personal journey for me (which doesn’t stop just at just Castagne but also many other fields including research), the need to define what is the aim of the software and adapt to the reality of the field is present and answered by this order: we first ensure everything will work for its purpose and not limit the user, then we aim at onboarding users and making the main operations smoother, then we expand towards the actual target level of the software. I’ll discuss that more in a next estival update.
One feature I haven’t mentioned is online: while rollback is a strong constraint that stays in the code always, a friend is going to help me with the implementation of the online services part. Ideally, I’ld also be able to get help on menus because it’s not that hard design wise or implementation wise but it’s very long, might have to see if anyone from the community wants to help.
All in all, that gives you a better idea of the release steps. The first gate is a priority, and a closed beta will happen towards the second gate. The aim is to expand more and more until we get to the public release itself as an open beta, then after a while get to a fuller feature set. Time wise, I can’t really say, there’s many different ways it can go and since it’s still going to be a one man show for a bit (I want to make sure all systems structures are set up properly), it’s very dependant on whatever else is going on in my life at that moment, including parts that are still Castagne dev but not directly technical. Still, I hope to finish the first gate in July, and the second sometime before the end of the year. Non contractual, can’t say more since I haven’t expanded all the tasks yet. Castagne is a huge project that did take more time than I hoped for when I started this rewrite in december, so it’s starting to overlap with other projects and commitments I have, although they are ultimately linked. This month being a good example since I can’t really do deep work, and therefore can’t make significant technical progress (although I might be able to advance some other parts).
That’s it for today! More estival updates to come, the next one is on the new engine direction and what it means in practice, which is going to be another philosophical subject. I think a lot. After reading this update, what do you think of that timeline? Where would you ideally hop on the new version? Go to the forum or discord to discuss this, and ask more questions! This is the time where I’ll be actually putting a lot of the vision behind Castagne into words.
Quick update: hitstop is back in the engine. Here’s how you currently set it:
Set(Attack.Stop, 6)
In fact, at the moment that’s how you set all attack parameters. I’ll be adding functions over time for easier use, but this is the generic way. Some parameters that used to have different names depending on hit / block, namely hitstun / blockstun and hitstop / blockstop now are unified under their single banner of Stun and Stop respectively.
Fighting games have a lot of names for stuff that is player facing, and players also give it their own name, so I’m making up less ambiguous, less overlapping, technical terminology as I go. That’s why the default button names are LMHU, as it doesn’t overlap any common button name on controllers, that’s why “teching” out of a combo is “recovery” and “teching” out of a throw is “breaking” the throw. I try to link concepts that are conceptually similar. There’s no unified fighting game lexicon that all games use, so players tend to come with different names, and some names reappear like “high” attacks meaning different things for 2D and 3D fighters for example, or “stun” which could also refer to the “dizzy” mechanics of some games. I need to give names to concepts in the engine that speak both to the technical reality and face the user, so it’s a big matter of taste. I’m making the engine so we’re using my taste, which is also the correct one (obviously).
Anyway, Freeze phase and Halt phase work just as they worked previously, mostly. I have yet to implement collider coherence over several frames, so for now I took the shortcut of just removing frozen entities from the physics computation. I worry a bit about the more state I keep outside of the CASP memory stack as its additional rollback headaches. There’s a bit of play with the Before and After events: Frozen or Halted entities only execute their respective phase without the Before and After events, and they are executed at the same point as the Main phase, meaning you can use active entities’ After event to access data from the frozen / halted entities.
Cool bonus of the compiler being an actual compiler instead of a spaghetti parser is that phases / events are properly handled now, and hit animation now plays as expected without needing fancy tricks.

Summer heat is starting here and it’s frying me so I’ll probably be less efficient. I should probably either figure out blocking or physics enveloppes next, hopefully I’m out of those big core features by the end of the week.
Alright, new system is still in development, but it already works at the level of the previous one so let me share some early info!
The old AttackCancel system was just syntaxic sugar over an InputTransition. Works well enough, but there’s many cases where you need to do some extra work, namely for when an attack has prerequisites. Not really an issue, but still something you had to keep in mind often.
The new AttackCancel system has two major differences. The main one is that an AttackCancel now holds much more information inside, such as its motion or potential conditions for the cancel, which allows much simpler use. The second is the interface through metadata (which in fact shaped a lot of that system).
The base function is now just AttackCancel(State), with the state holding all the relevant info inside. That means you don’t need to specify an additional motion or check for meter cost and the like, that’s all inside of that little call. As I’m expanding the system, I’ll add more options to override the default values, such as adding an alternative motion for cases like a followup you can also do from neutral. These are not really new capacities, just a new simpler interface for that.
The way you actually use the system is simple: just put some metadata at the top and most of it happens automatically. A lot of the attack system now goes through that. Let’s take a look at a simple attack using an F branch:
+AttackType Light
+AttackDuration 60
F12-15:
Hitbox(10000, 5000)
endif
Let’s break down some of the parts:
+AttackType is a metadata line, and is the equivalent of AttackRegister from the previous version. It mostly works the same, but the new compiler features allow some extra conveniences, such as easier specification of attack types and the compiler warnings guiding you in the proper direction to make new ones. It will call AttackState and AttackType-[TYPE] (hook) for you.+AttackDuration is another metadata line. This time, instead of waiting until runtime to see the duration of the attack, it now will get it from the metadata, which is going to be relevant for frame advantage computations. The upcoming T branches will set this automatically.+AttackMotion can be used to add as many motions as you want. It is not present here, so it defaults to the state name if it is a motion.Planned upcoming metadata elements are +AttackCost and +AttackRequires, which make the cancel unavailable if the conditions are not met.
Next up here is going to be blocking, and how the attack cancel system will interact with this hitconfirming system. The remaining tasks for this gate are mostly related to the attack system, improving physics, or improving the editor.
Also, forum is back online. If it goes down again I’ll cry. I’ve improved the server config to host additional services in the future (in fact, I’ve already added one two months ago but it’s not ready for public use yet).
All Progress Updates - RSS Feed
This list is not exhaustive, and can change often. It represents my global progress with this version, which will release in beta when it’s more complete.
Castagne Virtual Machine
Entity Lifecycle
Subentities
Inter-Entity Communication
Module Interface
Castagne Config
Profiling Framework
Memory Stack Rollback
Instanced Data
Castagne Compiler
Semantic Representation
Robust Compilation
Host-Engine Functions
Phases and Events
Basic Branches
State Calls
State Calls with Params
Advanced Branches
Structured Variables
EdSpec / Gizmo System
Skeleton and MechMod
Basic Structure
Game Streaming
Code Editor
Blocks Editor
EdSpec / Gizmo Display
Castagne Config
Tools Framework
Tutorial System
Docs System
Basic Math
Vector Math
Trigonometry
Randomness
State Transitions
Flags
Log / Error
Freeze / Halt Phases
Targetting Functions
Input Layout System
Combination Inputs
State-Derived Inputs
Input Events and Buffer
Motion Inputs
Input Transition / Flag
Fake Press
Input from Config
Replay
Environement Collisions
Expanded Env. Colliders
Colbox Collision
Attack Collision
Expanded Attack Colliders
3D Physics
Battle Init Data Interface
Simple Fighter BID Interface
Simple Level BID Interface
Simple World BID Interface
Rounds and Reset
Custom Exit
Training Mode (basic)
Menus Specification
Host Engine Integration
Options Menu
Input Rebinding
Attack Data Storage
Attack Param Base
Attack Data Optimization
Attack Overrides
Attack Events
Blocking System
CASP Hitstun Management
Basic Attack MechMods
Combo-Awareness MechMods
Attack Cancel Rules
Fighter Flow MechMods
Attack Mechanics MechMods
Movement MechMods
Combo MechMods
Godot Integration
Sprite Sytem & Integration
Shader Modifications
Model Management
VFX System
Camera System
Godot Integration
Audio Parameters
SFX Definition
SFX Parameters
Background Music Support
Dynamic Audio Support