Heal - team-based vertical shmup

A place for people with an interest in developing new shmups.
Post Reply
User avatar
mariejuku
Posts: 4
Joined: Sat Mar 26, 2022 3:53 am
Location: Australia
Contact:

Heal - team-based vertical shmup

Post by mariejuku »

Image
Hi everyone. I'm Marie, I'm a Melbourne-based hobby dev. I'm making a narrative-focused shmup with team mechanics. My background is in programming and visual design, and I've previously worked on some Wipeout-esque racing games where I contributed level design and visual direction. Narrative design and writing are by Maxine, who is NZ-based.

The game is (hopefully) small-in-scope and has a narrative focus. Gameplay sees the player leading a team of pilots that support each other in the fashion of Ninja Storm or Genshin Impact. We're planning to have 5-6 missions in total once all is said and done, and about 25-30 minutes of playtime if optimized.

My influences include Ikaruga, Zone of the Enders, Nier: Automata and Porter Robinson. Ikaruga is definitely a heavyweight when it comes to influencing future works but I became particularly fascinated with it's world and the supplemental nature of it's narrative.

Gameplay involves building meter in all three ships with appropriate chaining and then switching to make use of each ship's specials. These specials synergize. In each case, one ship applying an affect that another is suited to take advantage of.
Image
The game runs on Unity. At this moment in the project, I've created a variety of gameplay systems, but I would still consider the project to be in pre-production for now. The milestone we're currently working towards is a demo first level that includes short cut-scenes, some dialogue, enemy formations and your typical mid-boss and end-boss. I see this as a stress test that should highlight any areas lacking in my tools (I can then correct for that).

Going forward, our plan is to give ourselves 4 months of working time. After that period, we'll review and assess how confident we are in the project at that stage.

It's worth noting that our skillset currently lacks audio. This is a point of trouble that I'm anticipating, and I'm gonna be doing what I can to plan a path toward suitable audio (be it commissioning or something else).

I've mentioned that it's a vertical shmup. I have some considerations to make about this. I prefer the vertical look, and an exclusively vertical perspective allows the game to make use of a TATE mode. The game is intended for modern systems though, and a 16x9 aspect ratio among most people these days allows the game to make use of a changing perspective (if one exists). Having a flexible perspective is something I'm open to if I later find that the game would benefit from it.
I'd also like to discuss first level philosophy with yall and share my thoughts (I will be making a post for this shortly).

Thank you for reading. I hope we can make something nice, and I hope you all can enjoy it :)

Development for Heal is gonna progress in our Discord: https://discord.gg/TuEpgJwwDV
I post pictures and gifs, you can chat with me there and ask questions. I am very conversational (if a little curt at times).
Some of my past work is displayed on my portfolio.

Thank you for your time :)

I am going to be making a follow-up post shortly to discuss our current Unity progress and my tooling.
Ark
Posts: 49
Joined: Sat Jan 16, 2021 1:28 pm

Re: Heal - team-based vertical shmup

Post by Ark »

Hi,
I'm looking forward to this world. Sounds quite dystopian based on some of the influences. I'm interested in how you
will present a narrative focus shmup, sounds like this game will be very dramatic and cryptic/poetic. Music will be a huge factor for the
atmosphere based on your game references.
User avatar
mariejuku
Posts: 4
Joined: Sat Mar 26, 2022 3:53 am
Location: Australia
Contact:

Re: Heal - team-based vertical shmup

Post by mariejuku »

Thanks! :)

We won't be able to have any voice-acting, so I'm planning to take an approach like Touhou that keeps dialogue short and inserts essential dialogue in between chapters and sections of the level. I'm looking at non-essential dialogue being either optional or happening in the side-bar, as well as any dynamic barks also happening in the sidebar and not on the main screen.

------------------------

I want to talk about my tooling inside of Unity.

I've not seen how others do this or what a mature in-house shmup engine looks like, so I'm very curious to see the similarities and differences among the solutions I came up with and those of others.

So I'm looking at this from the question: "What do we need?" Well, to start, we need an arena. From the outset I needed to have a play area that could be moved and rotated while the player's view remained fixed, and crucially without affecting player motion at all. The motion of all bullets, enemies and the player all happens within the arena's local space. The camera is fixed to the arena as well. My project uses Cinemachine, and the arena camera is a cinemachine virtual camera. Also, the game uses a secondary camera that renders only bullets on top of all other parts of the scene so they can't be obscured.
Image
The white box is the Arena's bounds. There are also some placeholder enemies moving there.

There is also scenery there, the ocean (the first stage happens over the ocean). I use a scenery manager to scroll scenery objects. The transform space of scenery is seperate to the arena, the arena can rotate away from that forward scrolling direction if it wants to.

Scenery in my game is instantiated at runtime. I did this so the player can advance through the stage at a variable pace, and the scenery will be tied to their progress through the stage even when scrolling quickly. So the scenery is made from chunks, which are prefabs, that get loaded in order until they fill up some distance ahead and behind.
Image
The 'chunked distance' is dynamic during the game. I usually keep it short so that response from the system is fast, but it can be made long for instances where the camera faces towards the front and back horizon. And then brought back to short again with removing those chunks. If you look at gameplay of 3D shmups, they sometimes use a very short fog point to hide loading objects but I'm hoping that I can display a believable horizon (and sunset) with this system.

Chunks are stored in a Scenery Zone.
Image
When the scenery changes to a Zone it will create the Start chunks, then loop the Main chunks. On changing, it add the End Chunks.
Zones usually get changed when new encounters happen, more on that in a second. The chunks themselves are just Unity prefabs with an appropriate component. These have colliders so that when enemy ships are killed they can turn into a physics object in world space and collide with the scenery below.

Stage Manager has the most responsibility in a single level. I intend to have one stage manager per scene and for all intents and purposes it is the level.

The level is defined by a series of events that are executed in order. Some of these can take time and others are instantaneous. I wrote my own custom inspector for this component.
Image

You can rename and reorder components and change their properties. In this image is the Capture Players component, this will either spawn the player objects if they don't exist or take ownership of them if they got loaded in a previous scene. The stage manager also (for now) contains the information on the player's team. This includes the current leader ship. Everyone's meter and stats are stored individually still.

Encounter is the most important event here and the level will be mostly Encounters.
Image
When an encounter starts it can command a change of zone and it can choose how the level waits, with a time limit or destruction of all enemies. Enemies are stored in Squads, which are just prefabs. There's an optional delay on the instantiating of those squads.

A squad contains the enemies. They're a group of enemies collected inside one prefab that are spawned all at once at a certain location, usually outside of the player's view and then they move into view. The red box in the gizmo indicates the relative position of the player's view.
Image

Enemies are spawned in the transform space of their parent squad. This is useful if they are grounded enemies, but if they are flying around then the Release Mode allows them to be moved into Arena space either immediately or when they come into view. The squad tracks it's own enemies and destroys itself when they have all been defeated.

Enemies are not considered to be 'in play' until they've entered the arena. Until this time, they cannot damage or be damaged. They can despawn by leaving the arena only once they've entered it first.

Image
Enemies run on a behaviour driver that's individual for each enemy. They move based on their Move Behaviours, and shoot with Weapon Behaviours. There can be multiple behaviours in a row and they'll run in order. Some are instantaneous and some take time, with a dynamic ending condition (this makes enemy motion difficult to preview without a real enemy doing it in the game). These behaviours are things like 'move to location', 'move to player' or 'follow this path' and have some properties.

The squad can store behaviours, too. The squad will send orders to all it's enemies, so that you don't have to set those up on an individual basis. These orders are added ahead of any individual orders and that's what 'initial behaviours' means. You can also set the 'mirrored' flag on an enemy and all its motion orders will be flipped. I'm currently working on a behaviour that lets the enemies coordinate in different formations, like a circle.

For cutscenes, I'm making use of Unity's Playable Timeline. I'm recording motion for cameras and the arena. The player can be at any position when a cutscene starts, so I animate placeholder transforms and I blend the position of the player between the desired cutscene position and their player position.

As mentioned, I use cinemachine to blend between gameplay and cutscene cameras. I also use Yarn to handle dialogue.
User avatar
mariejuku
Posts: 4
Joined: Sat Mar 26, 2022 3:53 am
Location: Australia
Contact:

Re: Heal - team-based vertical shmup

Post by mariejuku »

So: Further to the above, I've taken the last couple weeks to make some changes and additions.

Firstly, I've expanded the arena somewhat. In addition to placing enemy prefabs, the arena can now spawn it's own enemy objects at runtime based on a timer and some other settings. I'm hoping this makes it easier to make consistent patterns.
Image

I can add as many different groups as I like, and there are 'delta' properties that allow for a spread of values across each mob. It also makes it easy to update the alternate side of any patterns that are mirrored to the other side of the stage.

I've added a GUI representation for this, and here's what that looks like:
Image
It displays the initial direction and position of the spawned mob.

The arena and mobs now support a 'standby' behaviour set, which is optional. This can be used to place the mob in the world with some direction, but not attack the player yet. They can sit visible in the background and wait until the arena calls on them to starts their attack.

Further to this was a small consolidation of the mod's movement options; movement is now controlled by a velocity variable that persists in the mob across different motions. Previously the behavior held their own velocity, which meant they couldn't smoothly transition from one to another.

Image

Next, I reworked the way colliders in mobs operate. The mob includes a set of Units, sometimes just one, sometimes several. The units represent the individual sections of a boss mob that can be independently damaged or destroyed, and the mob's colliders are attached to each unit. I can mark a section as a weak point, causing it to take double damage if players hit it there. Damage applied to the unit can be chosen to damage only that section or the entire mob together.

Image

I've also added a screen-space shader to highlight weak zones. I took some time to touch up visibility of projectiles by writing an edge-highlight shader, and adjusting the look of player rockets.

Image

So a lot of the tooling seems to be coming together now, and that's exciting.

Image

For a test introductory level I figured it best to make sections that focus on the abilities of each player type. This hopefully gives me good grounds to test their gameplay loops in isolation before bringing them together. So this first part focuses on the red player, and next I'll be building out the section for the yellow player. The yellow player is the mobility-type ship and in my initial draft features a close-range weapon and a dash for moving quickly.

---

When it comes to the first level I had this idea in my head that the normal game would introduce a player to each ship individually at first. I expect this segment to last only 60-90 seconds, so we're talking short as possible, but it presents each player type with a small pattern that can be handled cleanly with that ship's abilities before everyone begins working together.
I plan for the normal game and challenge game to present different patterns even though they're telling the same story. The challenge game will skip this initial tutorial phase.
jhonmartin692
Posts: 3
Joined: Tue Apr 12, 2022 6:00 pm
Location: England

Re: Heal - team-based vertical shmup

Post by jhonmartin692 »

Ark wrote:Hi,
I'm looking forward to this world. Sounds quite dystopian based on some of the influences. I'm interested in how you
will present a narrative focus shmup, sounds like this game will be very dramatic and cryptic/poetic. Music will be a huge factor for the
atmosphere based on your game references.
Yeah! The game definitely has a dystopian feel to it, and the narrative focus will be on uncovering the mysteries of the world and the characters inhabiting it. The music will be atmospheric and contribute to the game's overall mood. :D
User avatar
mariejuku
Posts: 4
Joined: Sat Mar 26, 2022 3:53 am
Location: Australia
Contact:

Re: Heal - team-based vertical shmup

Post by mariejuku »

Balancing life & work is difficult! But I've been continuing on the game.
Here is some testing of the yellow player's skills:
Image
Image
I am working on blue player next, which includes a beam weapon.
Image
I'm a designer first and a graphics person second so I expect to come back to these effects and improve them in the future.
Blue player will include a non-autofire weapon and a melee AOE attack.
Follow development on Discord: https://discord.gg/TuEpgJwwDV
Cromer852
Posts: 3
Joined: Wed Jun 09, 2021 4:12 am

Re: Heal - team-based vertical shmup

Post by Cromer852 »

Awesome and interesting article. Great things you’ve always shared with us. Thanks. Just continue composing this kind of post.






DGCustomerFirst.com
Post Reply