What are you working on currently? (2017)

Spookified a map for Strife! :jack_o_lantern:

Happy Halloween! \o/

Before:


After:

2 Likes

For those who are too lazy to click on that link lol. Any tips about using garageband?

https://soundcloud.com/belal-mohammed-nur/updown-fury

5 Likes

Halloween game by Platinum Productions. Check it out!

Feedback is much appreciated!

4 Likes

New track! Loving the world of music so far!

https://soundcloud.com/belal-mohammed-nur/hollow-isolation

3 Likes

This sounds like something off Stranger Things, I like it!

2 Likes

What kind of logic are you using for your AI? FSM or HFSM?

…As for what I’m working on? Currently trying to write my own FSM with the ability to push/pop states, which is done, but now I need to lean about how to make pushing/popping states automatic, rather then writing a sheeeeping load of if statements in each state >.<

…which is where I guess I need to learn about Hierarchical Finite State Machines?

1 Like

I’ll be honest. i have no idea what those are.

all the AI does, is go in a loop of Detect, Pursue, Engage.(for the melee ones) and Detect, Engage, Pursue (for the ranged ones) This loops breaks of course when they die.

I could switch it to a Goals/States model, but i’m trying to keep the processing cost down, allowing me to have as many AI as possible.

1 Like

I made this I guess

15 Likes

Wait, is that a real pumpkin?

1 Like

Indeed it is!

5 Likes

You can create a pre-made series of checks as functions, then add them into a state as a series of conditions which are checked before the State plays. This saves it from being hardcoded into the actual state.

1 Like

That’s essentially a finite state machine (FSM) is… though what I’m (trying) to make is a far more dynamic version of that where the AI will be able to:

  • Find and equip weapons if the AI doesn’t have one.
  • Find ammunition stockpiles and restock if the AI is low or ammo.
  • Switch between ranged and melee depending on the proximity of the threat.
  • Various methods of target acquisition. (Primarily sight, however hearing is something I’m wanting to implement as well, as well as being assigned a target even if the AI has not seen or heard the target)
  • Avoid obstructions while navigating a path
    …and much much more.

@edenojack oh I have that in a previous version of my AI before I followed this article about the theory and implementation of FSMs… Though as you can see in the article (code wise) that there is no behavioral tree which means for a more complex AI, I can’t actually write a general purpose/plan for my AI to follow and modify as it needs to… For example, a simple behavior tree would look like:

{ObtainPrimaryTarget, FindPathToPrimaryTarget, FollowPathToPrimaryTarget, AttackPrimaryTarget}

However if the AI happens to find another target that is closer and within its line of sight while in FollowPathToPrimaryTarget the AI will need to change its state from FollowPathToTarget to FollowSecondaryTarget and then to AttackSecondaryTarget before returning back to the behavior tree to restart the proccess all over… and this is where I’m having hard time with us creating a behavioral tree that can be modified during runtime.

1 Like

GOAP - https://blog.roblox.com/2016/01/behind-the-scenes-of-roblox-hack-week-2015/
I was watching something about this a while back, it mentioned F.E.A.R being one of the big pushers for its use.
I think this is exactly what you’re after.
Edit: Ah, the link to your article and one included in this blog post are the same I believe you’ve already seen this then

2 Likes

OOF, forgot about that blog post! Will be reading that for sure later. Thanks <3

1 Like

Ah GOAP. Yeah, that was an interesting project. I think an FSM would be more appropriate for most applications. The complexity of a GOAP system is probably overkill for basic enemies. But it is a fun exercise and I certainly encourage you to read into it further if you are interested.

3 Likes

It’d be cool if we had FSM logic built into the engine, just create a series of states and conditions and plug them in.

Gotta start getting servers with Intel Nervana chips

I mean I can look into it, but I doubt I’ll be allowed near the servers :stuck_out_tongue:
(More on the clients side)

I think you’re over complicating things by building the goal choices into the FSM. State machines are good for resolving goals, but what the goal is should be chosen by some meta system. For example you don’t need ObtainPrimaryTarget, FindPathToPrimaryTarget, FollowPathToPrimaryTarget, AttackPrimaryTarget, FollowSecondaryTarget or AttackSecondaryTarget, you just need Idle, FindPathToTarget, FollowPathToTarget, FollowTarget and AttackTarget. Exactly what that target is should be assigned by some meta process that’s constantly assessing the world and evaluating threats. If it finds a threat that’s more pressing then the current target it can assign the new target and adjust the state accordingly (or let the states adjust themselves to the new target). Once that threat is resolved and the FSM is back in Idle it can put the original target back.

TL;DR: Don’t expect too much of your FSM, let it be good at resolving goals, not identifying them.

And certainly have a look at GOAP, but as UristMcSparks said it’s probably overkill if you’re only dealing with around 5 to 10 possible states. Or if your decision tree is so rigid there’s no point to building a dynamic resolver for it.

1 Like

Your bullet-pointed description of what you want your AI to handle is beyond the level of complexity I’d try to express with a HFSM, and would be an absolute spider web with a non-hierarchical FSM. A behavior tree is definitely appropriate, but I’m confused by your example case:

What do you mean by “Secondary Target”? If you mean lower-priority target than primary, why would you switch targets in the first place? If you mean “additional target to engage simultaneously”, again… you’re not aborting the path/attack on the primary. If you instead mean secondary only in terms of quest objectives, but “new, top priority target due to proximity” (as I suspect is the actual case), then I would argue that it’s not a “secondary” target for the purposes of tree prioritization, it’s a new primary target, in which case the answer is clearly that the FindPathToPrimaryTarget action should fail, and the tree should re-evaluate and end up pathing to the new target.

1 Like