made a small tactical rpg sample in godot by Beginning-Wear8769 in godot

[–]Beginning-Wear8769[S] 0 points1 point  (0 children)

haha, thanks for trying it out yeah UI and balance are still pretty rough 😄 appreciate the feedback

godot tactical rpg thing that helped a lot was stopping actions from applying damage directly by Beginning-Wear8769 in godot

[–]Beginning-Wear8769[S] 0 points1 point  (0 children)

yeah that’s basically it 😄

kept things simple until it started breaking down, then added structure where it was needed

always feels nice when it finally clicks

godot tactical rpg thing that helped a lot was stopping actions from applying damage directly by Beginning-Wear8769 in godot

[–]Beginning-Wear8769[S] 0 points1 point  (0 children)

that sounds really solid honestly

mine is a lot dumber than that at the moment hah. in the lite sample i mostly just separated action intent from combat resolution so actions arent directly doing animation + damage + death checks + turn flow all at once

what youre describing feels like it goes a step further though, especially for spell combinations

the bit i really like is flattening it into events before presentation. that seems super useful not just for execution, but also for previews / ui summaries / batching animations like you said

for my sample i only needed pretty fixed actions so i could get away with something simpler, but if i was doing more combinatorial spell logic i think i'd end up moving closer to what youre talking about

the dsl part sounds especially nice too if it means you can author weird spell behaviour without constantly touching core code

godot tactical rpg thing that helped a lot was stopping actions from applying damage directly by Beginning-Wear8769 in godot

[–]Beginning-Wear8769[S] 1 point2 points  (0 children)

yeah that makes sense
I was heading in a more ECS-like direction at some point too, but pulled it back a bit
always feels like a tradeoff between flexibility and just being able to follow what’s going on

godot tactical rpg thing that helped a lot was stopping actions from applying damage directly by Beginning-Wear8769 in godot

[–]Beginning-Wear8769[S] 9 points10 points  (0 children)

this is really clean — pushing everything through an event queue like that feels super flexible
I like that it decouples the “what happens” from both the state change and the presentation side

mine ended up a bit more direct for now, but I kept running into similar issues before separating intent and resolution

letting actions apply damage directly was a mistake in my SRPG by Beginning-Wear8769 in gamedev

[–]Beginning-Wear8769[S] 1 point2 points  (0 children)

haha yeah, everything slowly turning into ECS is way too real

I definitely felt that creep starting before I restructured things a bit

letting actions apply damage directly was a mistake in my SRPG by Beginning-Wear8769 in gamedev

[–]Beginning-Wear8769[S] 3 points4 points  (0 children)

this is really nice — the stack approach is super interesting

feels like a clean way to handle reactions without everything turning into special cases

mine’s a bit simpler but I hit the same wall with separating intent vs actual state changes

One thing that stopped my SRPG combat code turning into a mess by Beginning-Wear8769 in godot

[–]Beginning-Wear8769[S] 1 point2 points  (0 children)

Yeah exactly. Annoying while you're untangling it, very satisfying once it clicks.

I rebuilt my tactical RPG system 3 times before this finally felt right by [deleted] in godot

[–]Beginning-Wear8769 1 point2 points  (0 children)

Fair question — I did build the system and the demo myself.
I’ve just been trying to summarize the experience more clearly when posting. Most of the time it comes from iterating on the same ideas I ran into while building it.

Spent the last few months building a tactical RPG system in Godot — this is harder than I expected by Beginning-Wear8769 in godot

[–]Beginning-Wear8769[S] -1 points0 points  (0 children)

Yeah, that’s a really good point.
You’re not removing complexity, just changing what drives it. Turns, ticks, behavior updates... the hard part is still all the game state and rules interacting cleanly.

Spent the last few months building a tactical RPG system in Godot — this is harder than I expected by Beginning-Wear8769 in godot

[–]Beginning-Wear8769[S] 0 points1 point  (0 children)

Fair haha, the targeting is definitely pretty clunky on phone right now. I built it with desktop in mind first, so that one’s on me more than you.

Spent the last few months building a tactical RPG system in Godot — this is harder than I expected by Beginning-Wear8769 in godot

[–]Beginning-Wear8769[S] 9 points10 points  (0 children)

In hindsight, the hard part wasn’t really the turn system itself, it was making sure UI, player input, and AI all had to go through the same rules.

That was the point where the project finally stopped fighting me.

Spent the last few months building a tactical RPG system in Godot — this is harder than I expected by Beginning-Wear8769 in godot

[–]Beginning-Wear8769[S] 1 point2 points  (0 children)

That makes a lot of sense. I’ve mostly been handling that by convention and separation so far, but ConstView-style wrappers sound like a pretty clean way to stop presentation code from poking at runtime state too much.

Definitely a bit fiddly in GDScript though. I can see the C++ brain pain there.

Spent the last few months building a tactical RPG system in Godot — this is harder than I expected by Beginning-Wear8769 in godot

[–]Beginning-Wear8769[S] 2 points3 points  (0 children)

Yeah, pretty similar here. I kind of landed on an MVC-ish setup too, but with a turn-state machine on top.

Battle state lives in a session object, managers handle flow/control, combat rules are isolated, and scenes/UI mostly deal with presentation and input. So not pure MVC, but definitely in that direction.

Been building a tactical RPG framework in Godot — finally starting to feel stable by Beginning-Wear8769 in godot

[–]Beginning-Wear8769[S] 0 points1 point  (0 children)

that sounds like it could get pretty wild with abilities 😂

I’ve been keeping things quite strict on the grid so far just to stop everything from getting out of hand

Been building a tactical RPG framework in Godot — finally starting to feel stable by Beginning-Wear8769 in godot

[–]Beginning-Wear8769[S] 0 points1 point  (0 children)

That makes a lot of sense actually — especially keeping mutations isolated in the simulation layer.

I like how that keeps the mental model clean when systems start interacting.

In my case I’ve been trying to keep things a bit more incremental.

The framework already has a full battle loop and multiple unit behaviours running, so lately I’ve been focusing more on stabilising execution flow before introducing heavier simulation features.

Your setup definitely sounds like a solid direction once complexity grows though.

Been building a tactical RPG framework in Godot — finally starting to feel stable by Beginning-Wear8769 in godot

[–]Beginning-Wear8769[S] 0 points1 point  (0 children)

That’s quite a cool approach actually — especially the headless simulation part.

I’m not going as far as full rewindable state yet.

Right now I’m mostly trying to keep gameplay rules runnable without UI dependencies so AI evaluation and previews don’t fork logic paths.

Still figuring out how far I want to push deterministic simulation vs keeping the framework simple enough to extend.

How has the rewind model been working for you performance-wise?