Andrzej Koloska talked about participating in Epic Spring Jam and developing Clash of Morons in UE4.
80lv: Andrzej, it’s been a while since we’ve last spoken. What have you been working on recently? What happened with the Shooter Tutorial? How did it develop?
Great to speak with you again, you guys are doing a great job!
I have been really busy in the studios I have worked in and haven’t had time for Shooter Tutorial. You know how it is.
Basically, when I was developing Shooter Tutorial, UE4 was in a different stage than today. Almost every update changed a lot in the engine and my tutorials were outdated. During this time I was learning C++ and it came to me that I should create step by step book about UE4 and making shooter game using it (this was like 3 years ago), both with C++ and Blueprints using UE4 features like we are using them in pro-development.
It was really hard to work after my job, as I was working like… a lot, not because I was forced but because I really liked it. I was part of Strange New Things (which is now CDP-RED) and we wanted to create something really fresh in the industry. Then we have created the Artifex Mundi Wroclaw department to work on Indie AAA. Both projects were really cool to work with and really challenging. I liked that but I haven’t had the time necessary to finish the book.
Some time ago, I have left my job and currently, Shooter Tutorial book is put on hold. I won’t have time to finish it. But what I would like to do in my game dev life is Shared Development. Hopefully, when everything ends my way I will be back with a lot of stuff (and not only me)!
Joining Epic Spring Jam
80lv: How did you end up at Epic Spring Jam? Where did it take place, what did you want to do there? Who was on your team?
Let’s start from the problem I see. In most studios when you are a lead, producer or basically someone who is managing people you don’t have time to work with your skills because you are constantly attending meetings. The problem is that game development is evolving very fast and if you aren’t in track you lose development skills and which affects your leading. I was trying to boost my skills after the job but it wasn’t easy.
When I left my job I saw that in a couple of days there was Epic Spring Jam. This was a great opportunity to get back on track with my skills. I wanted to create something complete, hard to implement in many systems – to have a challenge. I wanted to see if I’m still capable of doing things fast and with creativity.
Unfortunately, the game jam was organized during the national holiday here in Poland and my friends haven’t had a lot of time to help me out. But still, they were able to help. For example, I needed an AI Manager and haven’t had time to create such – I called my friend and he created it after getting back from holiday. I haven’t had time to create an environment – my friends came to my apartment and worked on it, some sounds and shaders. On the last day, all of them came to my apartment and we worked together to finish stuff. Our team consisted of Daniel Stanczak (art & sound), Kamil Kocot (code), Mariusz Krzywicki (art), and Adam Wesierski (art). I was working in my apartment and these guys came to help me after getting back from holiday.
Clash of Morons: Idea
80lv: Let’s talk about Clash of Morons. Did you have this idea before or was it something you’ve just come up on the spot? What way did you work out the idea?
I wanted to develop something challenging in the given time frame. This was a major motivation and idea. When Epic announced the theme we were like “hmm, let’s do two sides fighting each other but make it something like a USP for this jam?” We came up with an idea to let you possess any character and play with it. Normally, someone would tell “you are crazy, there are too many characters, the scope is too big for a game jam” – but well, I wanted to have a challenge. I also knew from experience that you can create games in UE4 really fast and I did a lot of game jams before (for example, Tree, Intensive Exposure, Grand Theft Taxi, Pomela Cat Royale). When you have experience in developing games and participating in jams, you know what to do to iterate faster.
And it came out it wasn’t so hard to develop a game like this. During the first 2 days, I was developing systems to create and iterate gameplay faster. The rest of the time I was implementing skills, player feedback, and characters.
Helpful UE4 Packs
80lv: What pack did you use here? What are the meshes and assets you’ve used and why?
For the environment, we used Polygon Dungeon Pack because:
- We liked the style and haven’t had time to create our own style because of holidays.
- It is small, doesn’t use big textures, and is easy to work with.
There were some issues with it, though, like messy UVs and weird pivots – but nothing you can’t fix on your own to use it as you want.
Still, we wanted to add to the environment something custom and that was: dynamic blinking light, curve shader, simple outline, a rough mask to have better light reflections and direct AO post-process shader which worked really great with the poly-like models.
Using models from this pack we have created one level with 3 parts:
- Prison (where skeletons are coming from)
- Cave (where goblins are coming from)
- Main Hall (where knights are coming from)
The level was created in one day. We could invest more time to polish it but other things needed to be done as well.
Another pack we used was Able Ability System which is a tool to create actions. It’s easy to modify (thanks to the source code) and fast to iterate, and we did a couple of additions to this system to fit our project. UE4 has Gameplay Abilities but we haven’t used it earlier. We were using Able in other projects and because of the time cap we decided to go with Able. When developing games (even during game jams) you need to think about fast iteration – which pipeline to choose and how much time is needed to change something or add something new. Able helped a lot, and all character skills were implemented in one evening.
The last pack we used was Robo Progress Bars created by our friend Krystian Komisarek who is an experienced UE programmer. We wanted to use his pack and check if he messed something up just to tease him. Well… he didn’t, the pack is great.
Animating with Control Rig in UE4
80lv: You’ve mentioned that Control Rig was a great addition here. Could you talk a bit about this feature? Why is it important and how did it help you in the project? Is it an alternative to Maya or is it more like a little addition that helps you tweak your animation?
When you are developing a project in a small team you should keep in mind the skill set you have. Our game needed animations and we haven’t any animator in our team. So we messed that up. Additionally, when you are prototyping gameplay you should be not dependent on anything. You should iterate gameplay really fast with one click. If your gameplay is animation-dependent then you have a problem.
I was using Control Rig in earlier prototypes and wanted to use it again after a long break to see how it developed. Thanks to Control Rig I didn’t need to use Blender or Maya to create animations, export them and check in the engine. Instead, all animations were done using Sequencer and Control Rig right inside UE4. It was super easy and quick to iterate.
Control Rig can be used to prototype things without the need of having an animator in your team. Gameplay programmers can iterate using it. You can learn it without a problem. Basically, after making prototype animations and iterating gameplay with them, proper animators can come in and they will already have the material with timings and other stuff to work with. Less work will move to trash.
Another thing is that Control Rig can be used to create procedural animations: turrets, robots, hands IK – you won’t need animators for that now.
Here’s a great talk about it at GDC by Epic:
I don’t know Epic plans for Control Rig but for me, it would be great to have it as a procedural animation tool that’d help with prototyping without using additional assistance from animators. I don’t think it will replace Maya as it has too many tools, but who know? Maybe Epic want to have animators working more directly in the engine. That would be great.
80lv: How did you work on the world building here? What were the challenges? How are these spaces created? Is it all procedural? Would be awesome to hear a bit more about the way you’ve approached it.
Normally you would like to work with grid and space using a world builder tool like this:
When you are happy with your spaces (connected to the gameplay, of course) you can create an environment. We did more than that thanks to curve shader.
Take a look:
It was easier for us to motivate the player to go somewhere. Basically, if something is behind “horizon” the player intuitively wants to check it out and go there.
Another thing is that big spaces feel not so big and empty and small rooms feel like they have more space. This was an amazing discovery.
Main hall without the curve shader:
And with the curve shader:
You can see that space becomes less boring. You can see more ceiling and space is more compact. And you want to go forward.
Our level is static – we wanted to create generated levels but because of the holidays we haven’t had time for it.
80lv: Do you have dynamic lighting here? Why did you make this choice? Did you bake any of the lights here? How does the lighting work? I loved your volumetric lighting in the environments!
Yes, game lighting is full dynamic. If you don’t have a lot of lights it might be cheaper than a static pass. It is faster to iterate, you don’t need to create separate UVs, can mess around with your lights more and make your world look more dynamic.
And it’s really simple to iterate. Just have a skylight with ambient lighting which isn’t so dark:
Enable AO and add small direct AO to your post-process:
Then just add spot and points lights. Make sure they aren’t overlapping and most of them don’t use shadows.
Another thing is our base shader, and it was really cheap:
So basically we were more CPU heavy than GPU.
We could have done a lot more: stationary volumetrics, normal detail maps, more decals, and props, differ lighting – but we haven’t had time.
As for volumetrics, we used UE4 built-in volumetrics (just played with scattering for the lights) combined with meshes to have more polygon feeling to it.
What is cool is that we have created blueprints for every light we have in the game, and artists weren’t allowed to use any other lights. It was faster to make changes.
By the way, you should watch Daedalus’s lighting academy if you want to study lighting.
The last thing we did was blinking light which I have done a couple of times earlier in other games. When you are doing the same thing over and over you are iterating your approach – this time I have used C++ and created Spot/Point light components for the artists to use.
80lv: You’ve done some very economical VFX here. Very neat and very smart use of particles. Could you tell us about the way you used them?
Thanks but I don’t think they are neat! I have created them in like 15 minutes using Cascade. But they could look neat in this style if someone would invest more time. That’s why I love less realistic styles – you can make things you would never think of when going for realism.
I was thinking to use Niagara as it’s more powerful than Cascade but because of the time restriction, I used Cascade. Hopefully, for the last time. Niagara is mindblowing.
When using the poly style you don’t need to have advanced materials, just cube with a simple color:
For the blood splats, I have used collision and event generator to spawn some kind of decals when a splat hits something.
When you hit someone, particles are spawned: they move the opposite to the hit direction.
This simple thing is making the game more crispy.
Fire is a little bit different as it uses 3 emitters: fire, smoke, and sparks. Combined all together, they create really a simple fire which looks cool in motion.
They are really simple: just scaling, rotating, and orbiting over life. Anyone can create something alike. Poly stylized games can be created by smaller teams faster.
80lv: You’ve shown some very cool work on cutting down the characters’ limbs. Could you talk a bit about the way it’s done?
We have a component in the base character class which is responsible for doing disassembling. A melee hit “marks” which bone was hit and the component is checking if our character have support for this bone. Component is basically doing this:
1.Scaling hit bone to 0. This can be done using Anim Blueprint:
Our melee system knows what we hit and it’s passing that data to the manager which has disassembling configured:
If the hit bone is supported, the manager is passing data to AnimBp. Then…
2. Showing geometry near the scaled bone. Config of the component has IDs array to show that.
When you scale down a bone it will look weird and you should have some geometry to represent bones and flesh. For example, here is a head without a gap:
And with a gap:
It uses a separate material ID which stays hidden on spawning character. Hidden IDs using Show Material Section won’t do any draw calls so it’s really cheap.
3. Then spawn a prepared body part blueprint at the bone location.