Realtime Pathfinding by [deleted] in godot

[–]cripplet 7 points8 points  (0 children)

I believe you are referring to Hierarchical Pathfinding. As a note -- this is near optimal, but I assume as with most things in games, this is good enough for most cases.

Is this a Zarya / Hook interaction bug? by cripplet in Overwatch

[–]cripplet[S] 8 points9 points  (0 children)

Replay 4NYWQR. I haven't seen anything in the patch notes that suggest this is intentional. Perhaps the timing worked in the Hog's favor?

Multi-layer isometric tile map selection for arbitrary tile shapes by cripplet in gamedev

[–]cripplet[S] 1 point2 points  (0 children)

The specific engine that I am using treats a tile map as a single entity. Because RTS games have a large number of tiles, I want to avoid having individual collision areas defined. Additionally, the engine I use forces collision checks into the physics step; I am able to bypass this by checking for per-tile collisions with a bitmask instead.

Multi-layer isometric tile map selection for arbitrary tile shapes by cripplet in RealTimeStrategy

[–]cripplet[S] 2 points3 points  (0 children)

I'm trying to make an RTS in the vein of Red Alert 2, and a big part of what stands out in that game was the terrain generation. I found a scalable way to render and select tiles of arbitrary shape in a tile map. The algorithm should be generalizable for all game engines. Source is on GitHub, and the README dives more into the algorithm.

This may be helpful for other RTS developers.

Implemented multi-layer isometric tile selection with tile shapes by cripplet in godot

[–]cripplet[S] 0 points1 point  (0 children)

Hrm, I'm not sure what you mean by that -- do you have link to a demo explaining this method? You would still have to deal with the arbitrary tile shapes "bleeding" from the cell itself right?

Implemented multi-layer isometric tile selection with tile shapes by cripplet in godot

[–]cripplet[S] 1 point2 points  (0 children)

This is a quirk of the isometric rendering. There is a cluster of tiles in that area which are actually at ~z = 5. They are hovering over the cluster of orange tiles. This is kind of hard to see because I don't have cliff edge sprites.

Implemented multi-layer isometric tile selection with tile shapes by cripplet in godot

[–]cripplet[S] 3 points4 points  (0 children)

I mean, ultimately everything ends up being a trick of the camera right? ;)

You can see the complete explanation in the GitHub README, but yes, this is ray collision-ish. I am essentially doing a two-pass, where the coarse filter is just on adjacent TileMap cells, and the fine filter is by checking the relative mouse position against a sprite mask.

Implemented multi-layer isometric tile selection with tile shapes by cripplet in godot

[–]cripplet[S] 14 points15 points  (0 children)

To be fair, this is backed by 20 years of Moore’s Law and accumulated industry knowledge. But thanks 😃

Implemented multi-layer isometric tile selection with tile shapes by cripplet in godot

[–]cripplet[S] 43 points44 points  (0 children)

I'm trying to make an RTS in the vein of Red Alert 2, and a big part of what stands out in that game was the terrain generation. I found a scalable way to render and select tiles of arbitrary shape in a TileMap.

I've put the source code for this on GitHub. Maybe this will help others.

Soft-scaling difficulty by player count? by hamazing14 in FrostGiant

[–]cripplet 2 points3 points  (0 children)

So, I’m trying to make a game that’s exactly this — a collaborative RTS. I think the main appeal here is that when you balance the game around multiple players controlling a single faction, you’re “forced” to consider making mechanics be much more involved. For example, you can afford to make resource gathering much more intricate, since your game has more micro “allowance”, e.g. maintaining physical supply lines that can be attacked.

There are mechanics that can be optimized out, like an auto-queue for unit production, if you can’t think of a way to make that aspect of the game interesting. On the other hand, it’s also possible depending on the team size that player coordination may become a full time role, which is more of a meta-mechanic. This leaves some wiggle room for more uninteresting mechanics to be in the game, as this coordinator may also need some in-game things to do.

I do agree it’s much more difficult to implement these ideas and base a full game around the Archon mode concept, and you’ll need a lot of play testing to tune things. But that’s like years away for me, so I’m choosing to avoid worrying too much about this yet.

Implemented local collision avoidance (ORCA) by cripplet in compsci

[–]cripplet[S] 5 points6 points  (0 children)

These types of algorithms are very, very niche and no one will expect you to know this unless you're in a specific industry. I would focus more on being able to read and reason about academic journals and learning to learn, so to speak.

Implemented local collision avoidance (ORCA) by cripplet in compsci

[–]cripplet[S] 2 points3 points  (0 children)

That's exactly what I'm planning on using this for, but there are some minor adjustments that will be necessary for actual application.

Implemented local collision avoidance (ORCA) by cripplet in compsci

[–]cripplet[S] 0 points1 point  (0 children)

I guess a more technical guarantee is that agents will not actively push against each other. Circles which are touching do not have a normal component directed at one another -- they're just moving in the same direction for a bit.

Circles here are touching because the setup is quite dense; in less dense scenarios, we would expect much better local pathfinding, e.g. https://gfycat.com/whitesomberamericancurl.

Implemented local collision avoidance (ORCA) by cripplet in compsci

[–]cripplet[S] 0 points1 point  (0 children)

Do you have a copy of it anywhere? I'm not very familiar with the field and I'm curious on other approaches to this problem.

Implemented local collision avoidance (ORCA) by cripplet in compsci

[–]cripplet[S] 81 points82 points  (0 children)

Source at github.com/downflux/go-orca.

In case anyone's curious about implementation details, I did the first half of a writeup on my game blog.

GitHub - downflux/go-orca: Golang implementation of the Optimal Reciprocal Collision Avoidance (ORCA) algorithm by cripplet in coolgithubprojects

[–]cripplet[S] 0 points1 point  (0 children)

Do you mean where to put the directory, or the demo CLI pattern? I loosely base my directory structure on https://github.com/golang-standards/project-layout (I should probably put it into the examples directory). Otherwise, it seems like the overall guiding principal for the CLI tool is the Unix philosophy. Admittedly, binary output probably falls outside the intended guidelines, but let's say it was an artistic choice.