Wishlist for "What's next"

First of all, thank you all for the course, It has been incredibly interesting and pleasant to do, congratulations on explaining so many topics in such a concise way.

Now back to the topic of “What’s next”, here you have my whishlist:

  • Changing from Grid-based movement to Free movement while no enemies are being actively engaged.
    • Ex.: Jagged alliance, Wastelands, Divinity, etc. where you can move in turn-less / grid-less fashion while not in combat.
  • Add height to the grid, so that units can go up & down, maybe even slopes and stairs!
    • Ex.: In XCOM or Phoenix Point, you can be inside a building or on top of it.
  • Hit chance and cover.
    • Ex.: XCOM and Gears tactics, cover reduces hit chance, but only works if not flanked.
  • Overwatch, but the one that you can specify where.
    • Ex.: Phoenix point and Gears tactics, were you can specify the direction (And sometimes range) you want the overwatch to happen.

Those are the ones I most interested in, those will certainly elevate the result from “Prototype” to “MVP”.

1 Like

Also, on the code side of the things, I would love to see an step-up from “intermediate” to “advance”, replacing much of the things that where made “for simplicity” by more elaborated solutions and patterns, for example:

  • Take all the “EnemyAIAction” out of the actions themselves and replace it by a Behabiour/Decision tree or even by a State machine (As you covered here), that way we can create a variety on enemy types, such as “Brawler” or “Ranger”.
Brawler AI pseudo-code
If (canMeleEnemy()) { 
  doSwordAction() 
} else { 
  moveTowardsClosestEnemy() 
}
Ranger AI pseudo-code
if (isFlanked()) {
  moveToCover()
} else {
  if (canHitMultipleEnemiesWithGreadnade()) {
    doGreadnadeAction();
  } else if (canShootAtFlankedEnemy()) {
    doShootActionVersusFlankedEnemy();
  } else if (canShootAtEnemy()) {
    doShootAction();
  } else {
    moveToRandomCover();
  }
}
  • Create an Abstract BaseSingleton class and have all our singletons to extend it (Rather than writing again an again the same Awake() logic)
  • Create a
    public List<GridPosition> findGridPositionsInRange(GridPosition center, int radius, params Func<GridPosition,bool> extraRequirements);
    and replace all our
    for (int x = -maxDistance; x <= maxDistance; x++) { for (int z = -maxDistance; z <= maxDistance; z++) { ... } }
    by calls to this method.
  • Implement the Actions as “proper” state-machines were each state is separated and self contained and each transition is clearly defined (Maybe an over-kill for the kind of actions that we have, but a good thing to know none the less).

I’m sure that there are more, but those are the ones that I’ll find most interesting to see how you approach to them.

2 Likes

Some excellent suggestions! Thank you.

1 Like

Yup, lots of great ideas, thanks!
I’m glad you enjoyed the course!

1 Like

Privacy & Terms