Game Development | Scalability And Other Issues

in Hive Gaming4 years ago

scalability and other issues.png

June has shaped up to be one of the hardest months I’ve dealt with so far as game development goes with still a long road ahead. I’ve known for a while now that I would be hitting the wall as far as scalability goes. A lot of the earlier things I worked out how to do started having massive limits.

Back in January when I said screw it I’m making a game and I’m going all out. I knew there would be mountain-sized speedbumps in the road to navigate to get around. I also would not have been happy making a tiny little game as my first one either.

One thing I accepted early on is a lot of things would need to be redone over and over again. As I bring them up to par with better methods, ability to scale to my needs, and even as a challenge to make improvements. June has been one of those months.

This just seems to be normal in game development in general. It is often what I think when I see massive triple-A game studios announce over and over again huge delays. Many times they say everything is done things just need to be bug fixed and improved. Improvement or bug fixes tend to be things that didn’t scale like you needed and were rebuild from the ground up if they could not be salvaged. Otherwise, delays would not be months to a year but just a couple of weeks instead.

Up and coming on my roadmap are two very big systems. I wanted to take my game from having 2 different characters (classes) you could run around with that did almost nothing. Along with a quest system that is going to need to handle a lot of different things all coming together to work.

Four Classes

selectaclass.png

I had announced on Twitter a couple of days ago that I had picked my next two classes I wanted in my game. I already have plans for a paladin and a sorcerer. Melee for me tends to be an easier route to go so I felt an Assassin style class would be fun to create around. I also wanted a bit of a challenge with another caster class even more so a necromancer since in my eyes they summon minions to help fight.

The character models themselves are from Mixamo. Chances are you have seen a lot of the different character models on that site before. It tends to be a huge place for many indie developers to go. With everything having humanoid skeletons that are similar to Unreal Engine 4’s skeleton standards animations are also bountiful if you need to go that route.

The Assassin is now running around in my game without issue. I gave him a really basic attack for now and outside of needing to make some adjustments to some timing for a smoother transaction from running to standing still. He is ready for the next stage.

The Necromancer on the other hand is being a pain. Despite setting up animation blend spaces, animation blueprints, state machines, and some other stuff several times now. I just can’t get more than one animation to work when you are spawned in as the character pawn. Despite the fact, it works in testing within the blueprints and animation window. Everything is similar to what I’ve done before.

I also rebuild my character select screen yet again. It was not like the last time where it was a full rebuild. I just popped in the new meshes into that scene capture. I also made some adjustments to the camera and added a couple of buttons to handle the pawn spawning in and code.

Scalability comes down to how I’ve been creating systems around two characters. These things are just not a simple mesh swap and you are done. Soon I’m going be working on fully different skills, talent trees, and some other stuff. So things were somewhat done with that in mind.

A lot I have learned about creating a game over the past few months has also been solely focused around having one character in your game. I was able with some creating thinking able to make it work for 2 different characters. Four though? That is a hard NO.

This is also one of those things I wanted to see if I could take my learned knowledge and work out a solution without doing further research into it. Maybe this is not as big as an issue as I’m thinking. Maybe I’m missing something big or and I’m sure I have made some mistakes along the way.

For now, my current solution has everything working on three of the four characters. My sorcerer is falling a bit behind as it was its entity in its aspects and always needed everything manually included for it to work with. I don’t want to redo that one just yet till I know for sure the solution I came up with is going to work the way I want it.

Need To Cleanup

delete assets.png

I also have needed to do a lot of cleanup and reworking things. Cleaning up things in Unreal Engine 4 is not usually as simple as clicking the delete button on an asset, blueprint, or whatever that you no longer want. That can lead to a lot of issues.

Once things are integrated and being used it could be stored in a few places in memory and have reference to it that you might have forgotten that could break entire systems. While Unreal Engine 4 does give you the “force delete” option I’ve learned from my early days to not do that. It can cause the engine to crash, corrupt stuff, things could break.

As a result, I tend to go in manually and clear settings, remove connecting, and delete references. It can be a bit time consuming to clean things up. So I tend to move things to a needs to be deleted folder when I’m not in the mood to deal with it that day.

This is also why when I can I do things I’m testing them out in a separate test environment. Many times in the testing map if it’s something small in my game’s file. Other timers if it’s going have a bigger impact I have a separate game file that is more cut down just for testing that can and will brick it. I can do a full wipe and not care too much when that happens.

While in an ideal world I would only be implementing final versions of everything into my game. In reality days, months, or even years from now there are going need to be changed and even removed stuff. I don’t have a best practice I just try to be mindful it’s easy to add something into my ecosystem than it tends to be to remove.

Failure In making A Minimap

minimap.png

Speaking of a possible cleanup I need to do I did have a bit of a failure this week. I wanted to test out some simple ways to go about making a mini-map. I ended up making it in a test map and not in a separate game.

It is also something I’m going to circle back around when I need a change of pace or find some time. I sometimes find it easier to move onto something else when I’m struggling to get the result I want. Sometimes I find a new way to think about approaching the problem that makes it much easier to solve.

I went with a rather quick and dirty method of having a minimap. You can see it on the screenshot above that has a red jeweler icon as the player overlaying to the right of the character.

It’s just a camera pointing down showing what it sees with some options changed on the camera itself. The bulk of the meshes I use are so thin it does not pick up them what so ever. So they might as well be invisible as it’s not able to pick them up.

The camera also clips on doorways or low hanging ceilings and flickers the player icon as it loses sight of the player. This is also not ideal.

There is also the performance hit. Since it is a second camera being added to the player’s viewport and it’s rendering everything it sees. This makes me not want to go much further.

MiniMapTest1.png

A more advanced way would be to create an outline of each map. Then track the player’s location with an icon. Then I could add in a quest, monster, doors, or whatever kind of icons I wanted to represent other things.

The issue is that I don’t have a solution for is making an accurate map for the player’s icon to be displayed on. This is what my in-game camera sees when I try and take a screenshot for something to trace over walls in the paint with lines. So that is also not a solution I can go with.

While having a minimap would be cool in my game. It’s also a bit more of a luxury feature I feel I could go without. A really easy way to add one in has too many drawbacks and I feel it is not doing what I need it to. So for now I’m putting this small break I needed back on the shelf. Maybe one day I’ll get back to working on it.

Questing System

quest system.jpg

A lot of things needed to come together to get what I wanted out of a questing system. The issue was yet again scalability. Many of those systems the questing was going to interact with were built as a solution to single problems. They didn’t work that well and a lot of rework had to be done.

I’ve known forever and a day now my character’s inventory system that I had set up was quite limited. It was something I did during my early days. It would filter a couple of items that would have to be predefined and each slot individually checked against that item in a very ineffective way. It was a pain to set up and no way would it function for the scale I needed things. Needless to say, it was not going to work well in a questing system with the scale I wanted.

My experience and leveling system was also a pain in the butt. Everything was being done in a very long function that was on every creature. As a result everything always gave the same amount of experience since it was being done on a function and not simply on the blueprint adding an amount to the experience variable.

The good news is now I can just add whatever amount of experience I want. I’ll need to redo some stuff still I’m feeling it will no longer have the limitations I was dealing with before.

All these things were very much needed overhauls. In return, I’ll be able to have quests reward experience for completing them. Along with quests having items the player needs to acquire among many other things.

Final Thoughts

Not always the greatest feeling when a lot of things need to be redone. A lot of time invested in getting things working at a basic level. Then needing to go in make systems handle situations you didn’t design them around. More times than not it’s easier to start over than salvage as things get complicated over time. Then going through and clearing up the relic of the older system.

Speaking of things getting complicated. My main character has in his blueprint over twenty nodes handling everything from health regen, movement, UI, and skills. It has to be at least 100 variables and functions. Along with another dozen components handling things like character mesh, different systems being attached, collision, and cameras. I’m so thankful I’ve commented on what stuff was otherwise I’d be lost by now.

Other Posts:

Information

Screenshots were taken and content was written by @Enjar. Screenshots are from Unreal Engine 4.

Sort:  

I've said it before...
I appreciate the meticulousness of what you are doing.
Just remember, any failures will probably teach you something.
Thanks for the update.

They often do.

It’s also fun to see things evolve over time. A large amount of the time I’ve spent on my game has been creating 15 maps. Now that I’m playing around a lot more in blueprints and looking into things I’m expecting to make decent leaps in understanding and implementation.

For instance, I’ve started to set up a lot more parent and child blueprint classes. So in the future when I need to make a sweeping change the bulk of the work can be done on the parent blueprint. That would have saved me quite a fair amount of time if I started off thinking that way and implementing as such.

It’s also nice knowing I’ve gotten past a lot of challenges where many have given up on and stopped trying to make a game once they hit a snag. Failure and how you adapt to overcome it is a huge part of the process. While it can be frustrating I also enjoy getting a takeaway for improvement.

@tipu curate

Thanks for the support.