Well that was a bit long
2,299
0
Advertisement
I had been planning on increasing the time between journal posts so I'd have more to talk about that might be interesting to folks but I didn't realize that I had taken that plan so much to heart. I honestly didn't plan on staying away for months but it looks like that ended up happening anyway.
The good news is that I haven't been away from coding during that time so I've managed to make some decent progress on things. The major additions were:
1. Implemented a mostly baked animation system. It does all the basic things like tweening, conditional control/looping, triggering script events, etc. It's also designed in a way that I can easily create different types of animations. I've got a quick sample video here:
[media]
[/media]
That shows off vertex colour animations, texture blending animations, translation/rotation/scaling animations and texture flipping. An object can have any number of animations acting on it at the same time. I still need to add basic mesh animations but since I'm not sure exactly what I'm going to need to do in the game I'm deferring that until later.
2. Implemented an audio system. When I say implemented I really mean wrote some basic wrappers and plugged audio files into my resource manager. The stuff built into SFML is amazing at audio. Even a brain dead coder monkey like myself can get things like streaming audio working in under 10 minutes, all on it's own thread so nothing is blocking. Absolutely a dream to work with.
3. Rejiggered my engine structure to allow easy multi-threading of different systems. Since the goal of my last major project a few years ago was learning how to create a multi-threaded engine this was surprisingly easy this time around. I know a lot of people still work in a single threaded world and say multi-threading is unnecessary but I still think you're silly to limit yourself to one thread. Every single PC/Mac built in the past 5 years is multi-core. Not taking advantage of that is like locking your renderer at 30 fps because "it's good enough" even though it can run at 60. I've currently got graphics/audio/resource management running on one thread and physics/input/scripting on another. I've created the concept of a "System" which can contain one or many managers that run on a thread doing work. Each system can receive messages from any game component/manager/system which it then acts on. This allows things on different threads to easily talk to one another without causing any kind of blocking situations.
4. Refactoring, refactoring and more refactoring. I'm a believer in iterative development which means that I write code to get it into a working state and then revisit the code to make it more modular, smaller, cleaner and faster. I never consider any code completely finished. This may, but doesn't have to include, optimization work. I haven't attempted to really optimize any of my code yet because I don't know what needs to be optimized. I'm a firm believer in not doing any premature optimization unless I have hard proof that something is holding me back. The amount of time most people waste in optimizing code that gains them nothing is usually equal to or greater than the amount of time they deliver a project late. If it ain't broke don't fix it.
Outside of the engine work I've also been working on game ideas with a friend who is going to be doing the art for the game. This in itself has been fun as we've done a bunch of brainstorming on game ideas and really come up with some stuff that I'd like to do. The only downside to working with someone is that you're dependent on their schedule and pace. My friend has recently gone through some major relationship changes so she's been busy and hasn't had a tonne of time to work on things. Up to this point it hasn't been a big deal since I've had a bunch of engine work to do but I'm starting to get the itch to start prototyping ideas to see what will work. It can be kinda hard to do that without art. Our current game idea involves taking some fun mechanics out of some classic arcade games and using them in some more modern game styles. I'm a huge classic arcade game nerd so this is in my wheel house and it's got my excited. I think too many game developers have forgotten what started people into gaming and why it reached such heights in the 80s. There are some great mechanics that haven't been revisited in decades that people will hopefully enjoy.
The good news is that I haven't been away from coding during that time so I've managed to make some decent progress on things. The major additions were:
1. Implemented a mostly baked animation system. It does all the basic things like tweening, conditional control/looping, triggering script events, etc. It's also designed in a way that I can easily create different types of animations. I've got a quick sample video here:
[media]
That shows off vertex colour animations, texture blending animations, translation/rotation/scaling animations and texture flipping. An object can have any number of animations acting on it at the same time. I still need to add basic mesh animations but since I'm not sure exactly what I'm going to need to do in the game I'm deferring that until later.
2. Implemented an audio system. When I say implemented I really mean wrote some basic wrappers and plugged audio files into my resource manager. The stuff built into SFML is amazing at audio. Even a brain dead coder monkey like myself can get things like streaming audio working in under 10 minutes, all on it's own thread so nothing is blocking. Absolutely a dream to work with.
3. Rejiggered my engine structure to allow easy multi-threading of different systems. Since the goal of my last major project a few years ago was learning how to create a multi-threaded engine this was surprisingly easy this time around. I know a lot of people still work in a single threaded world and say multi-threading is unnecessary but I still think you're silly to limit yourself to one thread. Every single PC/Mac built in the past 5 years is multi-core. Not taking advantage of that is like locking your renderer at 30 fps because "it's good enough" even though it can run at 60. I've currently got graphics/audio/resource management running on one thread and physics/input/scripting on another. I've created the concept of a "System" which can contain one or many managers that run on a thread doing work. Each system can receive messages from any game component/manager/system which it then acts on. This allows things on different threads to easily talk to one another without causing any kind of blocking situations.
4. Refactoring, refactoring and more refactoring. I'm a believer in iterative development which means that I write code to get it into a working state and then revisit the code to make it more modular, smaller, cleaner and faster. I never consider any code completely finished. This may, but doesn't have to include, optimization work. I haven't attempted to really optimize any of my code yet because I don't know what needs to be optimized. I'm a firm believer in not doing any premature optimization unless I have hard proof that something is holding me back. The amount of time most people waste in optimizing code that gains them nothing is usually equal to or greater than the amount of time they deliver a project late. If it ain't broke don't fix it.
Outside of the engine work I've also been working on game ideas with a friend who is going to be doing the art for the game. This in itself has been fun as we've done a bunch of brainstorming on game ideas and really come up with some stuff that I'd like to do. The only downside to working with someone is that you're dependent on their schedule and pace. My friend has recently gone through some major relationship changes so she's been busy and hasn't had a tonne of time to work on things. Up to this point it hasn't been a big deal since I've had a bunch of engine work to do but I'm starting to get the itch to start prototyping ideas to see what will work. It can be kinda hard to do that without art. Our current game idea involves taking some fun mechanics out of some classic arcade games and using them in some more modern game styles. I'm a huge classic arcade game nerd so this is in my wheel house and it's got my excited. I think too many game developers have forgotten what started people into gaming and why it reached such heights in the 80s. There are some great mechanics that haven't been revisited in decades that people will hopefully enjoy.
Advertisement
Advertisement
Advertisement
Discussion