Welcome, Guest. Please login or register.

Login with username, password and session length

 
Advanced search

1411505 Posts in 69374 Topics- by 58429 Members - Latest Member: Alternalo

April 25, 2024, 09:20:42 PM

Need hosting? Check out Digital Ocean
(more details in this thread)
TIGSource ForumsCommunityDevLogsRick Henderson - 2D Pixel Art Horizontal SHMUP
Pages: 1 2 3 [4] 5
Print
Author Topic: Rick Henderson - 2D Pixel Art Horizontal SHMUP  (Read 18441 times)
Fat Pug Studio
Level 2
**


View Profile WWW
« Reply #60 on: March 14, 2019, 11:19:19 PM »

Demo is live!

Steam - https://bit.ly/2FayeNc
Itch - https://bit.ly/2Y5Miz0
GameJolt - https://bit.ly/2XWncCr

IndieGoGo campaign starts on monday, you can subscribe here (https://www.indiegogo.com/projects/rick-henderson/coming_soon) to get notified.
Logged

bryku
Level 3
***


View Profile WWW
« Reply #61 on: March 15, 2019, 02:08:05 PM »

Checked it out, looks pretty neat!

One question though: first two attack types seem not to have any ammo nor heating mechanism and I simply was keeping the attack buttons pressed all the time - is this how you plan the players to use it?

I am not saying that it's a bad idea though - I guess most of shmup's have this.
Logged

Busy working on xcom-like, steampunk/vermintide pixel art strategy game called "Shardpunk".

Devlog | Twitter | Webpage
Fat Pug Studio
Level 2
**


View Profile WWW
« Reply #62 on: March 18, 2019, 12:30:45 AM »

Hi, thanks for playing! Yes, there's unlimited ammo and no heating mechanics. However, each of the weapon types deals a different amount of damage based on the type of enemy armor, which is spread out into Unarmored, Armored and Shielded. Switching weapons also takes a bit of time, so that's kinda important too. Not too obvious in the demo, but later on with different factions using all three weapons types becomes quite important, for example, taking down the shield as soon as possible with energy, then switching to missiles to crack open a big enemy, bullets to clear out small guys etc.

Ammo and heating mechanism is a bit hard to accomplish properly so i left that out, though it was planned.
Logged

Fat Pug Studio
Level 2
**


View Profile WWW
« Reply #63 on: March 18, 2019, 01:17:02 AM »

Starting NOW, IndieGoGo campaign is LIVE!

https://www.indiegogo.com/projects/rick-henderson/x/15550954#/
Logged

Fat Pug Studio
Level 2
**


View Profile WWW
« Reply #64 on: December 12, 2019, 06:20:18 AM »

Beta testers wanted!

As the early access draws near, i need some people for testing the game and giving me their opinions and bug reports.

All testers will get access to latest version in the dev branch and a steam key when it gets to early access.

You can apply here: https://steamcommunity.com/app/1023790/discussions/0/2865909716042511185/
Logged

Fat Pug Studio
Level 2
**


View Profile WWW
« Reply #65 on: December 12, 2019, 06:41:38 AM »

Designing enemies on a budget

I posted a small video of an enemy from Rick Henderson on Twitter yesterday and it gained a lot of traction so i think it would be interesting to post some stuff on enemy design and how i do it.




When i started making Rick Henderson i wanted it to be something unique with easily recognizable enemies defined by their faction, design and modes of attack. With something so ambitious as a one man project that works on more than 50 different enemies, making each ship original can be strained in both design and financial aspects of game development.

Boshin was originally designed as an abomination of multiple Paragon Cult faction enemies, easily identified by their purple color and glowing orbs. I wanted some more ships for that faction and funds for pixel artist were already spent so i had to think of a way to utilize what i already had since my artistry level is quite low. I was lucky to work with an artist who knew what he was doing, had a concise palette and distinct shapes for each faction. So i made a pixel art collage that was made out of other ships' parts in a way that makes it recognizable yet different from other ships.



Harder part was designing the pattern of attack for it. I try to avoid the usual move from right to left while firing pattern, and if i really have to use it i try to be creative with it. This was the case with Boshin.

One of the most important aspects of enemy design in shoot 'em up games is "telegraphing". It is a concept of showing the player that the enemy is about to fire bullets at him. Though not really important for so called "popcorn" enemies (easily destroyable, firing slow bullets rarely) it is a must for enemies like Boshin that fire five fast bullets in a burst. You need time to react, otherwise it wouldn't be fair and you would feel frustrated by getting hit.

So, what could i do with limited time and no further financial resources?



Here is the image of the ship when it comes into screen, with the lower portion of wings with guns drawn into hull. We see it for the first time and we still don't know what will it do. Upon entering the screen, after a random time in a defined range, the ship plays its opening animation. Best i could manage without artist was to simply obscure the lower portion (wing with gun and an engine) and animate it as going out of the ship. Now that we see the gun, we have a clear idea that it will shoot from it. By adding a bright red light we rise the tension by letting the player know that something is definitely going to happen. It goes out of the gun, widens, and the gun is fired with bullets coming out spreading no further then the red light angle implied. To keep things interesting, i put a new bullet type for Boshin and made the bullets rotate and move at random speeds.

Opening animation is another example of keeping it cheap while trying to look good. It's not so big, only 22 frames that were just a few layers of parts moving pixel by pixel. Animation of the red "laser targeting device" is made out of two animations since it's quite large and can't fit in one texture (maximum is 8192x8192). I wanted to keep authentic pixel art feeling so i did it manually, it consists out of 93(!) 128x64 frames, which gives us a sprite sheet that is 11904x5952 pixels in size, hence the reason for cutting it into two parts.



After finishing the basic visuals and a small problem with the sprite sheet size, there were some more technical challenges that needed to be taken care of.

It is not yet implemented for Boshin, but most of the ships have some kind of blinking lights on them. To have animated blinking light and the attack mode activation animation like Boshin playing at the same time, you require animation layers and a bit of tinkering with that too.

Also, you probably don't notice stuff like this, but in the video, lower engine does not have engine jet animation playing. I might be a bit of a perfectionist, but i like things nice and tidy. I can either put a new animation, for example a thruster activating then going into regular loop (which requires yet another animation layer), or put an already looping thruster animation as a child prefab and animating its position to follow the animation, with setting the sorting layer to be behind the ship.

The final issue is the collider. As the ship changes its form, it needs to be able to detect hits on the new, extended part too. That can be either done by the most gruesome way known to man, by editing it in the animation window itself, frame by frame, or by using great free asset from the Unity Asset Store called Advanced Polygon Collider, a tool that automatically fits your polygon collider to sprite based on alpha tolerance and scale. It also does a great job in optimizing the collider by reducing vertices, so you don't have to worry about the performance, at least on desktops.

So there you have it, from a visual idea, to implementation and overcoming slight technical difficulties, a fun and engaging new enemy ship is born.
Logged

Shephf
Level 1
*



View Profile WWW
« Reply #66 on: December 12, 2019, 11:30:04 AM »

I follow you on twitter, didn't know you have a devlog here Smiley Cool stuff, keep it up! I'll definitely be watching progress of this one
Logged

Fat Pug Studio
Level 2
**


View Profile WWW
« Reply #67 on: December 13, 2019, 04:36:18 AM »

Thanks man, i appreciate it  Beer!
Logged

Fat Pug Studio
Level 2
**


View Profile WWW
« Reply #68 on: March 05, 2020, 05:20:39 AM »

Optimization time!

I’ve been postponing this for a long time, but some time near the end of the past year i realized another overhaul is due, this time for optimization purposes. It’s a long and tedious process and can get you into a rabbit hole that can be hard to get out of. My recommendation is not to overoptimize, but do take care of bottlenecks as soon as they appear since they can get you back to square one too late in the development to fix in a reasonable amount of time. Plan your design accordingly and optimize as soon as you finish an enemy design or feature, that way you lay a solid foundation for future content creation that will utilize the same, optimized framework so you don’t have to worry too much later on.

Avoiding Instantiate and Destroy by using Pooling

Pooling is a great tool to avoid those dreaded instantiate/destroy calls. You’d think that computers in 2020. can chew up pretty much anything you throw at them, but it’s not that simple. Whenever you create a new object (in our case, a prefab instance) it is stored into memory (with resources taken to do the operation itself and memory taken to actually store it) along with the pointers that, well, point to that part of the memory so that it can be found and used whenever needed. Of course, memory manager needs to find the unused part of memory to use and clear it up before use. That process is called Garbage Collection and it’s the usual suspect in most of the performance problems. It all happens quite fast, literally every frame, so if you ever used profiler in Unity you will see a GC Alloc column which tells us how much garbage is generated every frame. You might see a value of 2-3 kilobytes and think “oh, that’s not much”, but bear in mind that if you have 60 frames per second that’s 120-180 kilobytes of garbage per second. Per minute, that’s 7-10 megabytes, so without collecting the garbage your game would probably slow downs and crash quite soon.

Luckily for us, Garbage Collection in Unity is automated so you won’t have memory leaks which will lead to crashing. Automated means you don’t need to clear stuff out of the memory manually, but, unuckily, it uses garbage collector that stops the execution of the game code (though since Unity 2019 you can use the Incremental Garbage Collection which can alleviate these issues if your garbage footprint is small enough). You will see those exact moments in your profiler as a spike and your game will stutter, which is annoying for the player.



So, only reasonable solution to this problem is to avoid creating garbage. But how can you do it if you are creating new bullets, enemies, asteroids and pickups all the time? By reusing them, of course! It is called Pooling (since you use a “pool” of objects) and it is a old but gold method for boosting performance in video games.

It’s not too hard to grasp, you simply instantiate all the objects you will be using on the start of your game (a bit simplified, it takes some time to load everything so you should do it in segments in appropriate time, but more on that later) and then you simply activate them and deactivate them (colloquially called spawning and despawning). Such a simple solution, but with an expected caveat. When you deactivate an object, it keeps all its properties from the last frame of its active state. So, the despawned enemy will keep its position, rotation, hit points, animator states, you name it, and next time you activate an object it will be in the same state as when deactivated, rotated in unusal direction, with 0 HP and animator stuck on same frame in the middle of an animation. So what we need to do is reset everything to its original state before deactivating the object. Seems simple enough, though it can get complicated if you have object that have children and they have their own children and so on, which is usually the case.



In this simple diagram above we can see an enemy ship with two children – Jet and Gunpoint. They are all spawned and need to be despawned. But what is important here is the order of operation. When we first spawned them, we spawned the ship first, then the Jet and Gunpoint as children. So we need to do that in reverse order because if we deactivate the ship first, children will be deactivated too before they get the chance to reset their variables.

When the ship takes enough damage to be destroyed, it sends the event (don’t worry, sending events is quite cheap in Unity, hoorah) to both Jet and Gunpoint to reset their variables and despawn themselves. They can either send the event that they finished their reset process back to the parent (ship), or the ship can wait a few frames for them to finish and then reset its own variables and despawn. That way, we have a nice, clean object ready to be reused for the next ship that will be spawned.

Don’t think that pooling alone will help your game magically run at 300 FPS since it’s not the only part of the equation of successful performance management but it does eliminate the worst offenders – instantiate and destroy calls.

If you’d like to read more on the subject, i recommend a great article by Mark Placzek (https://www.raywenderlich.com/847-object-pooling-in-unity)that i often like to read again. It also has some good technical tips on creating your own pool, but if you’re a one man army like me i really recommend using a plugin for pooling from the asset store, they work great out of the box, they are performant and they are easy to use. The one i use is Pool Boss (https://assetstore.unity.com/packages/tools/integration/pool-boss-23931) but i can also recommend Pool Kit (https://assetstore.unity.com/packages/tools/utilities/pool-kit-the-ultimate-pooling-system-for-unity-121174) if you have 40+ cookies to spare.

For more stuff on memory management and garbage collection in Unity i recommend their own manual which you can find here https://docs.unity3d.com/Manual/UnderstandingAutomaticMemoryManagement.html, it’s a cool read to get into the innards of how things work under the hood.
Logged

OctoMini
Level 0
**


Talk does not cook rice


View Profile WWW
« Reply #69 on: March 09, 2020, 10:50:09 AM »

Looking great! Will be following this! Good devlog too! As a fellow Unity developer I appreciate the Unity insights as well.

I tested the demo. A few observations:
- Good first impression and general feeling!
- Difficult for me. With a few plays I made it to the second boss.
- The blue weapon feels under powered.
- Is there a warning about all enemies approaching from the left? Sometimes there was a warning but other times I felt totally ambushed. Not sure, there was a lot happening Wink
- At first I felt that the distinction between the background and foreground asteroids was not enough. I guess I kind of got used to it.
- The game runs smoothly on my system, but every now and then there is a momentary lag as if the game is loading something...
- One time I hit the restart after dying. It started normally, but I was unable to shoot...I was not able reproduce it.
- I would love to see a health bar for the bosses.
- Love the enemy interaction with the asteroids!

Good luck with the Early Access!
Logged

Fat Pug Studio
Level 2
**


View Profile WWW
« Reply #70 on: May 24, 2020, 08:11:30 PM »

Hi Octomini, thanks for playing.

- I got several requests for enemies coming from left warning, i will implement it.
- Background asteroids do need to be a bit darker probably, you're not the first one complaining.
- There is a hiccup due to garbage collection, one of the plugins i'm using is creating a tremendous amount of garbage and the guy making it didn't solve it yet, i hope he will in the near future.
- Restart bug has been fixed.
- Health bar for the bosses will be a selectable perk, hah! Right now, sprite gets visibly more damaged on each 1/5 of health.

Thanks for the wishes!
Logged

Fat Pug Studio
Level 2
**


View Profile WWW
« Reply #71 on: May 24, 2020, 08:12:47 PM »



Last demo version of Rick Henderson will be playable on SFF, day after it ends, we go Early Access Toast Right
Logged

Fat Pug Studio
Level 2
**


View Profile WWW
« Reply #72 on: December 15, 2020, 01:23:25 AM »

I'm glad to announce that Rick Henderson is going Early Access on 23.12.2020!











Logged

Schrompf
Level 9
****

C++ professional, game dev sparetime


View Profile WWW
« Reply #73 on: December 15, 2020, 02:15:55 AM »

This looks fantastic! Without having read the thread: please don't be a roguelike :-)
Logged

Snake World, multiplayer worm eats stuff and grows DevLog
Fat Pug Studio
Level 2
**


View Profile WWW
« Reply #74 on: December 15, 2020, 11:20:52 AM »

I'm afraid (considering i'm a one man army) traditional level building approach was out of scope, it already took too much time, so yeah, it's kinda rogueish.
Logged

Fat Pug Studio
Level 2
**


View Profile WWW
« Reply #75 on: August 04, 2021, 11:18:30 PM »

Game is complete and out of early access  Ninja

Ports for consoles and handhelds coming soon!
Logged

Gunroar:Cannon()
Level 1
*


View Profile WWW
« Reply #76 on: August 05, 2021, 08:55:11 AM »

Will definately get if on Android...and not like...200mb.
Logged

The risk I took was calculated,
but man, am I bad at math.

https://hmmmgames.itch.io

How to be saved
Fat Pug Studio
Level 2
**


View Profile WWW
« Reply #77 on: August 05, 2021, 09:20:41 AM »

What do you mean by not like 200mb? Mobile would include sprite and sound/music compression. I don't think i'll be investing time into android port, evetually apple store where premium priced games stand a chance actually.
Logged

Gunroar:Cannon()
Level 1
*


View Profile WWW
« Reply #78 on: September 07, 2021, 02:40:10 PM »

Aww man. the game looked dope Tongue . Too bad for me. Nice game anyway.

PS: no, I was just saying that I personally don't like games that take a lot of space because I don't have time for them. Just me blabbing. No shots shot..en? Smiley .
Logged

The risk I took was calculated,
but man, am I bad at math.

https://hmmmgames.itch.io

How to be saved
Schrompf
Level 9
****

C++ professional, game dev sparetime


View Profile WWW
« Reply #79 on: September 07, 2021, 09:50:33 PM »

Game still looks dope! Good luck on your Console endeavours.
Logged

Snake World, multiplayer worm eats stuff and grows DevLog
Pages: 1 2 3 [4] 5
Print
Jump to:  

Theme orange-lt created by panic