What was an issue was my inexperience designing code properly, which is how it turned into a tangled mess.
My point is that everything that's complicated enough soon gets turned into a tangled mess.
enemies
wandering
chasing
attacking
The problem with that is that you have little reusability. For instance, this "If distance(enemy.x, enemy.y, player.x, player.y) < 100" could be compacted to a custom condition called "is within attacking range?" - you'll obviously need to repeat that all over your code.
You also have similar cases, such as "is within field of view" and "no obstacles between me and player" which could be abstracted away.
Similarly, if you have more than one condition that triggers "chasing code" or "pathfinding", you'll need to copy+paste the chasing/pathfinding code again at those positions, violating the "DON'T REPEAT YOURSELF" principle of software design - either that or you make a huge OR block with all the possible conditions that trigger pathfinding/chasing.
Violating the DRY principle is bad for obvious reasons.
I'm afraid I'm not familiar with the term (even after several minutes of googling)
I'm sorry about that part - they are known as variable visibility - there are public variables (what we have at the moment) and private/protected variables, which are related to inheritance (we can already do multiple inheritance via families, which is cool).
The point about hidden variables is that I don't want to clutter the editor with tweakable properties (public variables), which are things I need to adjust to balance/polish my game, with internal stuff (private variables) which are just small storage bins that allow the object to do its work.
You can edit/rename/delete/make public those hidden (private) variables, of course, it's just that they're hidden out of view in your normal workflow, similar to how you can lock a background object in the layout editor so that you can click your objects easily.
It's weird having a ton of internal variables mixed with normal variables, and having to resort to prepending "__" or similar to internal stuff.
Isn't that exactly what groups are? That's how it works the way I do it with my example above. Though I'm not arguing against custom ACEs, those would be awesome too.
I wasn't very clear there - although you can encapsulate the "kamikaze attack" in a group, you can't say "there you go, enemy! time to do your kamikaze attack!!!"
You can't do that without using weird workarounds like "is group active?" and "disable/enable group". It feels like a hack.
At least in construct classic, containers cannot include other containers
I know you didn't ask, but I'll give an example: I could have a sprite representing the turret body, another representing the beam (I'm thinking of a beam cannon), a particle object, a post-processing layer, and then have a big spaceship composed of other stuff, with multiple beam cannons across its surface. (the spaceship on the whole is a container composed of the hull, shields, hp bar, and then multiple copies of the "beam cannon" container).
I asked about design patterns. ^^
I'm thinking specifically of the Factory Pattern and the Strategy Pattern
I expect custom aces should make design patterns implementable.