First Dev Update - Introducing COG

In hopefully the first blog of a (fairly!) regular series I would like to introduce the game I've been working on for a while now. With a working title of COG, the game is a 3D action adventure game with a Steampunk theme and strong platformer elements.

This is very much an indie project ... the coding of the home grown engine is done by me, the 3D modeling is (largely) done by me, the level design is done by me and ... well you get the idea! About the only support I'm getting is from my kids who are doing the 'QA' (and who are super critical when something doesn't work!).

So where am I with this project? The game engine itself is pretty much 'feature complete' and the game playable even if there is still a lot to do in optimising and polishing the different components. Most of the standard platformer elements (conveyor belts, lifts, moving platforms, spike traps, switches, etc, etc) are already working and available through the level editor with the 'levels' (more accurately map sections) loading on the fly to create a continuous, seamless world. Basic monster code is already in place with it being pretty easy to add new monster types as needed for the game. The lighting and particle systems are currently being reintegrated into the game (the code is complete, but was deactivated while creating the first builds) so hopefully the landscape will soon be full of splashing water and rising steam and smoke (pretty important to have rising steam in a steampunk game!).

The camera system is nearing completion - it allows the player to have full control of the angle of the camera with objects close to the camera position fading out to improve player visibility (this is the last bit being worked on here with the drawing order of semi-transparent buildings being tightened up and optimised).

Looking at the content there is currently some placeholder content being used with the worst offender being the player's character which is currently a (not very steampunk) Kiwi rather than what will eventually be a small robot. In addition, while the 3D models are almost all self created, the textures used are a mix of those I've created myself, that I've purchased and a handful of temporary placeholder textures. These placeholders have allowed for rapid prototyping (especially as creating textures is a slow and painful process for me), but will obviously need to be replaced in the near future. Fortunately this shouldn't be a huge task as I'm using texture atlases that allow for easy swapping in and out of new textures ... there should be relatively few cases where it may be necessary to tweak the texture mapping. For information the screenshots and video contain this placeholder content.

As a result of all this there is now quite a nice library of 'Lego bricks' available including a range of basic building blocks (platforms, towers, walls, pipes, etc), more exotic props (the already mentioned spike traps, barriers, lifts and switches as wells as the mandatory barrels and movable crates), plants, rocks and other landscape elements. Finally, there is a series of animated models including waterwheels, steam engine, pistons and so on whose clanking and whirring will helpful give the impression of a living world around the player.

So things are going pretty well at the moment (especially given the limits on the time I can devote to this) and COG seems to be getting to a stage where it is moving from a process of writing code to one where the current task is to complete the game - a pretty rare thing for me!

Please let me know you think of the screenshots and video - one of the main reasons for starting this blog is to start getting some feedback to help shape the remainder of the game ... all constructive comments would be very much appreciated. Also if there is interest in a particular aspect of the game development process I would be happy to share more details in a later blog entry.

2 Comments

Recommended Comments

I love the music, the art style the limited drawing distance. It gives me a pleasant feeling of nostalgia.

Funnily enough, the only thing I want more is to have RPG elements, and then I saw on your channel that you worked on a similar looking RPG before. Were you planning on integrating RPG elements in this one? I think an RPG and puzzle hybrid could be a lot of fun.

I'm also working on a self made engine/game project and I can't help but smile when I see other people who share the passion to code.

About the title, is COG the actual name or does it stand for something?

0

Share this comment

Link to comment

I love the music, the art style the limited drawing distance. It gives me a pleasant feeling of nostalgia.

Glad you like the art style - I'm trying to avoid being too cartoony while still having something colourful and sharp.And as the whole project has been an exercise in 'comfort food' development with a lot of elements pulled out of games I've enjoyed playing in the past I'm not surprised there is a sense of nostalgia.

With the drawing distance this was initially driven by performance assumptions with short drawing distances helps keep the frame rate up in an amateur game engine.However, the game is still managing a very healthy frame rate even in the most packed areas so I could increase the drawing distance a bit. However, the limited visibility gives a bit the feel of foggy/smoggy Victorian England and the smoke of the industrial revolution - quite appropriate for the game.As such, I'm planning to leave it pretty much as it is, possibly only pushing out the draw distance a bit when the player is in open countryside (where the scene density is lower in any case so performance would allow this).I may even experiment with bringing in the fog a bit in certain factory zones where monsters could pop out of the thick smog to attack the player.

9 hours ago, Michael Aganier said:

Funnily enough, the only thing I want more is to have RPG elements, and then I saw on your channel that you worked on a similar looking RPG before. Were you planning on integrating RPG elements in this one? I think an RPG and puzzle hybrid could be a lot of fun.

The game engine is actually the same one so there is a lot of potential in this direction.Indeed the ability to steam a seamless and in theory endless map rather than discrete levels comes directly from the RPG game.I am also already using the scripting code to handle more complex puzzles and I plan to use elements of the dialogue system for a bit of interaction between the player and other characters in the game.However, I would make a distinction between creating an adventure game (where there is a story that unfolds) and a RPG game with a bundle of quests, loads of stats and a lot of very diverse game content - being a team of one, working on a RPG game was eventually overwhelming.It wasn't from creating the game engine, but from populating the world ... spending a weekend writing the contents of books that the player may possibly read or debugging a quest that keeps breaking limits the speed of any progress.Even with a 'lighter' game it still takes a couple of days to create about 5 minutes of gameplay (what with the initial level creation, tweaking and then the testing).I'm very wary of falling into the same trap of over ambition.

There are a couple of games that have been sources of inspiration for this project, these being Oceanhorn and particularly Hob - both have the platformer / puzzle elements combined quite nicely with adventure / RPG elements and both worth a look if you like this mix.

9 hours ago, Michael Aganier said:

I'm also working on a self made engine/game project and I can't help but smile when I see other people who share the passion to code.

Another mad person It's something I enjoy doing and a nice way of relaxing after the day job.A couple of years ago I had a go using the Unreal Engine and while the engine was clearly much more powerful (no big surprise there) it didn't give me what I wanted and I found myself fighting with the engine rather than enjoying the development process.And there was a real loss of the sense of achievement for me (yeah that worked ... because I'm using UE).So it was back to the home grown engine and the process of reinventing the wheel

9 hours ago, Michael Aganier said:

About the title, is COG the actual name or does it stand for something?

It started with the idea that I wanted a short name for the main character.With the steampunk theme and lots of machinery I eventually settled on Cog (the player being one cog in a bigger machine). And then after thinking about an eventual title screen I quite like the idea of each letter in the name itself being a cog ... which would be easier to do with capital letters

Similar Content

...and I'm wondering what would be the best way to tile my game world. At the moment my sprite renderer works nicely, I'm able to render only a portion of a texture given the right x,y, width and height. I can even animate my sprites:

Question
What's the best way to draw my environment though? I can't imagine creating a bunch of game objects just to fill the screen with floor tiles. I thought of perhaps making a few giant quads, scatter them around the world, and texture each quad with an image of the environment tiles already placed. Maybe this could avoid making so many game objects.
Or maybe I'm wrong. Hopefully somebody can point me towards the right direction, no code is needed.

I'm not using any particular engine btw, just opengl, c++, and glm for math. Thanks!

I'm creating a 2D game engine using Vulkan.
I've been looking at how to draw different textures (each GameObject can contain its own texture and can be different from others). In OpenGL you call glBindTexture and in vulkan I have seen that there are people who say that you can create a descriptor for each texture and call vkCmdBindDescriptorSets for each. But I have read that doing this has a high cost.
The way I'm doing it is to use only 1 descriptor for the Sampler2D and use a VkDescriptorImageInfo vector where I add each VkDescriptorImageInfo for each texture and assign the vector in pImageInfo.
VkWriteDescriptorSet samplerDescriptorSet;
samplerDescriptorSet.pNext = NULL;
samplerDescriptorSet.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
samplerDescriptorSet.dstSet = descriptorSets[i];
samplerDescriptorSet.dstBinding = 1;
samplerDescriptorSet.dstArrayElement = 0;
samplerDescriptorSet.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
samplerDescriptorSet.descriptorCount = static_cast<uint32_t>(samplerDescriptors.size());
samplerDescriptorSet.pImageInfo = samplerDescriptors.data();
//samplerDescriptors is the vector
Using this, I can skip creating and binding a descriptor for each texture but now I need an array of Samplers in fragment shader. I can't use sampler2DArray because each texture have different sizes so I decided to use an array of Samplers2D (Sampler2D textures[n]). The problem with this is that I don't want to set a max number of textures to use.
I found a way to do it dynamically using:
#extension GL_EXT_nonuniform_qualifier : enable
layout(binding = 1) uniform sampler2D texSampler[];
I never used this before and don't know if is efficient or not. Anyways there is still a problem with this. Now I need to set the number of descriptor count when I create the descriptor layout and again, I don't want to set a max number you can use:
VkDescriptorSetLayoutBinding samplerLayoutBinding = {};
samplerLayoutBinding.binding = 1;
samplerLayoutBinding.descriptorCount = 999999; <<<< HERE
samplerLayoutBinding.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
samplerLayoutBinding.pImmutableSamplers = nullptr;
samplerLayoutBinding.stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT;
Having said that. How can I solve this? Or which is the correct way to do this efficiently?
If you need more information, just ask.
Thanks in advance!

i just finish learning c++ a month ago and did a couple of projects like a calculator and i want to start making games where should i start and how do i gain experience i really want to make 3d games but that can wait as i enjoy 2d game too

FusionCL.Net is a new wrapper around OpenCL for C#(4.7.2) -
The git is online, and it is working. It's not 100% complete but you can create programs, run kernels, create membuffers and read/write them. It works fine for me on a Nvidia 1060.
There are two projects on the git repo.
FusionCLNative.dll - this is a C++ wrapper around opencl, you do not need to use this.
FusionCL.Net - This is a C# set of classes(Namespace:FusionCL) that internally uses the native dll to create and use the OpenCL library.
Like i said, not 100% complete, but it is working and usable. Only a small amount of code really, but it works well and I think is very easy to use.
- So, yeah just a head's up. Free for anyone, please let me know if you run into any issues or have any requests for future commits. Cheers!
https://github.com/AntDevUnity/FusionCL.NET

Greetings to everyone, I urgently need a ready-made game or source code (compatible with Visual Studio 2017 and DirectX SDK June 2010) according to the book Vaughan Young. "Programming a multiplayer FPS in DirectX". I already found the source code: https://github.com/matt77hias/VYGE/, but I get errors when creating a project.
Also, I found many topics on this site with a similar theme, but they were created a long time ago, most of the links do not work.
Please help me!