Some days ago, I uploaded the Workbench 2020 video of RESHOOT PROXIMA 3 to youtube. Upon doing this, via Facebook, I got very productive feedback from a guy called Robert Allen Murphey. He is someone whom I´ve never met before and who still took the time to analyze the video and post a number of suggestions, which might help to make RESHOOT PROXIMA 3 a better game.
In fact, the dialogue with Robert Allen Murphey convinced me to modify the code which controls the launch of bullets from enemy objects. I always thought this code is not really accurate and versatile enough, and therefore cannot support some of the ideas which Kevin Saunders and I have for improving game flow and implementing peaks of tension that make the difference.
I searched the English Amiga Board for some ideas on how to improve my code, and the amazing Frank Wille (nickname: phx) once again pointed me in the right direction within this thread. I do not want to bore you with too many details, just this: Frank suggested fetching the dx- and dy-components of a vector from a lookup table, instead of calculating them upon launching a bullet towards the player ship. Took me three days to code this and get it working, and the result is amazing. Not only compares the modified code quite well to the old iteration in terms of cpu load – but it also allows a much higher granulation of accuracy and velocity of bullets. That´s how I like it.
By the way, Robert Allen Murphey allowed me to publish his suggestions regarding the bullet behaviour in RESHOOT PROXIMA 3 – or shmups in general – on my Patreon homepage. You may like to read them. It´s your turn, Robert!
In effect, the bullets are the enemy AI - and there's a great example out there of how to design that ... Halo.
One of the things that made Halo so great is that the enemies have personalities you can figure out - there's a great youtube video of halo AI and how it works using behavior trees that has all the details.
The thought here is that each TYPE of enemy has a signature shooting style.
Basic grunts shoot too early, aim too far ahead, run out of ammo quick, etc.
Then a veteran/line troop shoots more accurately, paces the ammo better, etc.
And then a crack unit or sniper is very frugal with the shots, but makes them count - deadly accurate and fired just at the right time to be near unavoidable.
Tie the personality to the sprite types...
Xevious is a fantastic example of this as well... each enemy has a name and description in the backstory which is reflected in the on-screen play.
From a design standpoint, a simple spreadsheet array is a way to start:
List your enemy types down the Y axis/rows, and each column is a variable in the shooting engine:
Accuracy, Lead Time, Rate of Fire, Targeting Offset X, Targeting Offset Y, etc..
Sketch in the spreadsheet, giving yourself a reason WHY, in pure story, for picking the values you do.
For example, enemy one has two claws that fire, but only one eye - so it constantly shifts fire from one side to the other and is off in accuracy one way or the other - the sheet should just use different target offsets - but you know why you chose those values and that why will help when it comes to balance and tuning.
One last thing - you can tie their movement patterns to their shooting style as well.
Aggressive enemies fly at the player and try to ram them.
If these are ants - these would be thhe warrior ants defending the hive.
More timid enemies fly away from the player and potshot as more of a suppressive/defensive move.
These would be more like worker ants in the hive just trying to do some other mission and reacting to a sudden attack in their midst by fleeing.
The two basic ideas here are to use the unit role and unit quality/experience factors to drive both movement pattern and shooting pattern to make things feel more distinctive between enemy types.
And to answer the question you asked:
Use all of them for distinction and varierty.
The more you can vary the patterns, the more replayable the game can get.
Look up The Theory of Fun discussing how humans are pattern solving creatures - the more you can vary the patterns, the longer it can take for the humans to solve them, get bored, and move to the next puzzle.
So all of those behaviors you list should belong to some units, as well as as many combinations as you can manage.
The factors you list are good ones to start with to model the unit quality:
Green troops/not-troops just fire random.
Trained troops fire at current position with no lead
Veteran troops fire at current + random
Crack troops fire at expected player position.
You can vary the shot speed as a form of technology tree that changes over time too.
The first level is oldest/slowest
Next level is newer and faster.
Palette changes on enemies can be enough to denote improving tech.