Hi, sorry for late response, i was busy.M.Knight wrote:-Animation : I understand not animating every single ship if it costs you money. Just the player ship is more than enough if you have financial constraints as it is the ship who benefits the most by being animated. I am not too well-versed in pixel animation but I don't think you'll need tons of keyframes. Two per direction should be enough.
-Enemies coming from behind : Yes, a warning is a good way to alleviate the frustration, plus it can look cool and stylish! I can't really tell how your indicator looks in-game, but from a glance at the sprite, I would say it should be a bit bigger. Maybe you can simply apply some scaling animations to it in-game to avoid redrawing it and to help catch the player's attention?
-Enemy armor : Ah, I see! I would suggest tweaking the damage multipliers to less extreme values, because the difference between using an ineffective weapon and a super effective one is fourfold, which is a lot.
How does the armor system work, by the way?
Missile is super effective against armor but half-effective against shield, Energy Weapon is super effective against shield but half-effective against armor, while everything does regular damage against normal enemies? If it's that, it sounds easy to understand, as long as the visual aspect of enemies makes it easy to know whether they are armored, shielded or not. I wonder if it wouldn't make more sense to invert the weaknesses though, as I can see an energy shield being weak to missiles precisely because it was mostly made to absorb energy-based shots and an armored ship take more damage from energy shots because they bypass the physical armor while the missiles can't as they also are physical.
-Euroshmup feeling : It's good that you don't want to make a euroshmup and are aware of their flaws! Besides, you are pretty early in the level design process so you won't have to re-tweak an entire game's worth of waves. In your case, boosting the general pacing and tweaking the weapons can help a lot and it's easier than having to retweak an entire euroshmuppy game system with shops, lifebars, inertia and stuff.
Besides, euroshmup and bullet hell are not mutually exclusive shmup types that would be on a linear scale. You can theoretically have a euroshmup bullet hell with inertia and lifebars. That also means you don't necessarily have to increase the bullet count to avoid making a euroshmup. Tighten up the pacing, don't draw out small enemy encounters, don't repeat your enemy waves to the point where it feels like artificial padding (some repetition is good though if well-balanced and spread out), build a good variation of small, mid-sized and big enemies that work together and don't behave the exact same way, and you should have a decent level.
-Enemy wave creation : I agree that it can be a bit tricky to make it easy to do with Unity's default tools. That said, it is not impossible. Kinda tooting my own horn, but I spent some time and several revisions before coming up with a system and architecture that allows me to create waves quickly and i would say the investment was worth it.
What I have in my game is a system where every enemy type has its own script and behavior, and a wave is not much more than an array which cells contain the following information :
-Enemy type (enum)
-Frame spawn (int)
-Spawn position (Vector2)
For each wave, the game controller simply checks each frame if enemies should be spawned, and if they do, they will be spawned at the given location. Then the enemies just do their own thing until they die or leave the screen.
As a result, I can use the default Unity array interface to create a wave in seconds, as all I have to do is select the enemy type from the enum dropdown and fill a few boxes with the other data. This works in my case because every enemy type will have the same behavior and movement. I don't have to input the enemy's full path and animations and bullet patterns because they are not unique to an enemy instance, but common to all instances of an enemy. If I really want to have variations in behavior, I can create variations of a same enemy object and give its script slight tweaks, but they will be treated as two different enemy types by the enemy spawning system.
At first, I had a system where I had to provide the path on which an enemy would move but I thought it was odd to have the same enemy potentially move in widly different ways depending on the wave it is in, not to mention it took me ages to create waves.
See if decoupling the enemy spawning from the enemy behavior can work out for your game. In any case, you'll want to create some sort of editor to create waves and to arrange them in the order you want in a level. That may sound kinda tedious at first and you'll have to think of an architecture that fits your game (mine does not take into account fixed ground enemies for example as I don't have any and the game is purely wave-based) but I can guarantee that once you have one that is efficient, you'll make some quick progress.
As for enemies from behind, great idea for scaling, i'll try it out, it definitely draws more attention than just blinking.
Armor: Here's the breakdown of weapon/armor interactions.
WPN/ARM Normal Armored Shielded
Bullet Normal Damage Half Damage No Damage (1+0.5+0=1.5)
Missile Double Damage Normal Damage Double Damage (2+1+2=5)
Energy Normal Damage Double Damage Half Damage (1+2+0.5=3.5)
Now, when you look at it, you are probably wondering why isn't it set more logically. For me, this is kinda logical. Bullets real regular damage to regular enemies, half damage to armored (small caliber versus thick armors) and no damage against shields. Missiles deal double damage to unarmored enemies, normal to armored since it's not that effective and double damage to shielded. Energy weapons deal normal damage to normal armors, but they cut through armor like butter, and only half damage to shields since they are tuned to energy weapons and small caliber fire which basically disintegrates. Hence the decision to make the missiles deal double damage to shields since there's nothing they can do against heavy body of the missile.
As for the total damage outout, when you look at missiles, you will probably think "WOW, DOUBLE AGAINST ALMOST EVERYTHING, I'LL USE ONLY MISSILES!1". Sure, but missiles are slow, with slow rate of fire, and thus overkill for popcorns and such, so you need to have something else. However, there is a thing that's probably not likeable, and that's bullets dealing no damage whatsoever to shields, which is unfair. But, that, besides other weapon types, encourages the player to always look for two weapon combinations that work well considering his skill set. Besides, video game bro science confirms that shields are very unstable and they won't be turned on during the whole duration of the enemy presence on the screen, thus lowering the impact of disability of dealing damage to shields. Also, shielded enemies appear much later, player will probably have some other weapon beside bullet one, and you start a game with basic missile weapon too, so i hope that aleviates it. Of course, if you make a decision of accidentally equipping two of the same weapon typer during the game, well, sorry
![Very Happy :D](./images/smilies/icon_biggrin.gif)
Euroshmup feeling: Well said, nothing more to add. If it's well paced, not repetitive, challenging and enjoyable, it doesn't really matter how you call it.
Enemy wave creation:
Ah, yes it's a bit tricky in unity. I have few modes of operation for enemies:
1) Single enemies (whether small or big ones) that have their own default speed and movement pattern depending on the side of the screen they appear on.
2) Waypoint enemies. They, uh, follow the path of course, number of enemies following the path and their speed scales with progress.
3) Squadron enemies. A big chunk waves, usually consisting of grouped number of enemies which all follow the same speed and movement rule (for example, carrier with a speed of 1 followed by fighters which have a default speed of 3, but since they're part of carrier+fighters squadron, they inherit the speed set for that squadron, i.e. 1).
Logically, the waves in the game are a combination of those three. It seems easy when you look at it, simply define enemy spawn points and drag and drop everything where you imagine it. But there's a lot of movement speed tweaking, being careful for the enemies not to overlap (it's usually impossible, but at least the enemies from the same wave) and making things interesting, so it all takes a lot of time.