“Changing Direction” – March to May 2023

Well, it’s been a few months since I wrote an update! I’m going to make this a short one because to be honest, I haven’t been making a lot of progress. I forgot how hard it is to find time when you have a full-time job, so I’ve put the monthly Blender renders on hiatus until I finish my game. Speaking of which, I’m at a bit of a loss on what to make.

In my last update I mentioned I’d start making prototypes, and to an extent I did, but it was more to figure out basic workflows in Unreal Engine 5. I also know I said I’d start prototyping game ideas in Godot, but I decided against it because I’d rather focus on just learning UE5. With my limited time, I’ve learned how to do some very simple things such as import assets and animations and then create animation blueprints to play blended animations. All very beginner level stuff.

The progress has been at a snail’s pace, and that’s mainly due to the fact that as mentioned before, I don’t have as much free time as I used to – and I also don’t really know Unreal Engine 5. So realistically, I’m better off going back to what I did back in 2021 and making tiny games to learn the engine.

This is something that does frustrate me as I want to make more complex and interesting games, but to be honest, I really need to get experience with the engine first. Even trying to scope my game for October has been impossible because I don’t know how long it takes to do anything in UE5.

The other aspect is I don’t want to work on this every weekday. I make games now as part of my day job (yay) – but that does mean that most nights when I get home from work, I don’t want to do anymore game development. I also just have other responsibilities. Plus, it would be unhealthy to work on this every night anyway.

So yeah, I’m going to go back to making *tiny* games. Just to actually learn Unreal Engine 5 and to warm myself up for the bigger games I’ll hopefully get to make. It’s a bit frustrating and feels counterintuitive, but I’m going to make those tiny games again. It won’t be 1 Game a Week, but they will be very small games. That feels like a lot less pressure to me, because if a game is bad, it’ll be a few weeks before I get to the next one – which will hopefully be good! I’m also no longer making a “big” game for October that I feel needs to justify the months of work on it. The risk is a lot lower.

So yeah, that’s it! tl;dr I’m going to make tiny games every couple of weeks. The goal is to build up my experience in Unreal Engine 5 until I’m comfortable enough to start expanding to larger games. I’m also going to put the Blender projects on hiatus until around October.

This post was a bit of a ramble but I just needed to write this down somewhere public, to give myself permission to work on smaller games again. If you’re interested in seeing some small weird games in the coming months, keep an eye on this blog.

As always, thanks for reading my post and I hope you have a great day!

Blender Project: Ocarina of Time

Continuing on from my Master Sword render in January, I decided to continue with a Zelda theme for my next project. I thought the Ocarina of Time was going to be fairly simple to create, but to be honest it was a real struggle. My main issue was topology, specifically trying to handle the holes and the Triforce.

My original plan was to make the Triforce part of the same mesh as the Ocarina, except that it was embossed into the material. It took me a few evenings and I just couldn’t figure out the topology for it, which is a shame.

I also decided to use the subdivision surface modifier for this render as practice. I didn’t really enjoy it. I found playing around with the mesh to make the subdivided render look correct was very tedious. Also it doesn’t really match what I want to do with 3D modelling, which is to be able to make simple game meshes. I did use the subdivision surface for this project, but in the future I’m going to just do standard modelling.

After scrapping the original project after a few days, I made a simpler version where the Triforce was simply a different object on top of the Ocarina. It doesn’t have the effect I wanted, but it still looks okay.

Trying to model the holes was frustrating too, but I at least learned about using Loop Tools in Blender. These are a set of extra tools that includes a way to turn a vertex into a circle. I used this to create the circles where the holes should be, then I extruded them in, scaled them and transformed them to give the illusion that you’re looking inside the Ocarina. In reality, it’s just a cylinder.

I made some very simple materials, and added an animation. And here we are!

The Ocarina of Time spinning around.

I really did want this project to turn out better. I was just stretched for time this month and ran into so many weird topology issues that I couldn’t quite hit the bar I wanted. I haven’t even started prototyping the game I want to make, so I’m going to take a break from Blender until after I release my game. Hopefully that means I’ll finish the remaining 9 renders after October, and I’ll have gained more Blender experience by making the simpler assets for my game.

If you’re reading this and you have any advice or comments on how I could have made this render better, please let me know! I’d love to hear your thoughts.

Thanks for reading!

“Settling In” – February 2023

I’m writing this blog post about a week late, February has been a hectic month! Moving to a new country and getting settled has been challenging, but I’m finally starting to settle down in my new job and apartment. With that said, I haven’t done much “personal project” work in February since my weekends were mostly spent buying whatever furniture I needed, doing admin and also just relaxing because I don’t want to burn myself out! Thankfully I’m finding myself some more free time, so I’m planning to actually have some proper updates in March.

March Goal: Game Prototypes

If I want to release a game for October, I’ll need to know what I’m making! I rambled a lot in my last update about how I want to approach this game, and basically I’m going to do the tried and tested approach of making tiny prototypes of different game mechanics and seeing what interests me.

Unlike that time I did 1 Game a Week, I won’t be polishing these prototypes. They’ll be throwaway, made to just answer questions, and they’ll be ugly and unbalanced. I’m a master of overthinking things, so just making prototypes and getting forward momentum is the most important thing for me to do.

I’ll probably use Godot to make the prototypes, even though my plan is to learn Unreal. This is just because in my experience it’s easier to get a simple project up and running in Godot than Unreal. I’m sure for other developers it would be the other way around, but that’s just what works for me. Once I know what I’m making, I’ll jump over to Unreal as the “real” code base. Plus I can publish Godot projects online, so I can get quick feedback on my prototypes.

March Goal: A new Blender Render!

I haven’t done a render since January, and I want to keep on track for my 12 renders this year. So I’m picking something that has fairly simple geometry. I specifically want to try and get the material to look a bit more photo-realistic, so I think I’ll play around with the lighting and textures with this render. I also have my desktop computer back, so I’m no longer rendering on a 6 year-old laptop that takes an hour for a simple Eevee render. I’m planning on uploading the render in the next week or two!

But yeah, that’s it for this update. It’s a short one, but I’m hoping that on the start of April I’ll have the game prototypes complete and a lot more insight on what game I’m going to build.

As always, thanks for reading my post and I hope you have a great day!

“Hello Edinburgh!” – January 2023

So, here’s my first monthly update, and what a month it has been!

I’m very happy to announce that today I have started as an Associate Designer at Rockstar North in Edinburgh!

I’ve been a fan of the Grand Theft Auto series since I got a copy of GTA III for my 6th birthday (lol). I feel incredibly lucky and privileged to have the chance to work with the talented people behind some of my favourite games such as GTA V and Red Dead Redemption.

The team were incredibly welcoming and I’m very happy to call Edinburgh my new home. I look forward to exploring the city and also having a part to play in the future of Rockstar Games!

(And of course, any views expressed on this website are my own and in no way represent Rockstar Games or Take Two Interactive)

Blender Renders: 2 out of 12

I finished my first two renders earlier this month. First I made a Power Cell animation from the game Jak and Daxter, then I made a render of the Master Sword from The Legend of Zelda. Getting two done in January is a good start since I don’t think I’ll be able to keep pace of 2 renders per month now that I’ve started my full-time job.

I would like to do another simple render next month. Nothing too crazy with the model itself, and something where I can play around a bit more with composition and lighting. I’ll see how it goes in 4 weeks!

Personal Game Devlog: What to make? (I ramble a lot here)

In between preparing for my move to Edinburgh and making some Blender renders, I spent a bit of time figuring out what game I want to make by myself this year. Just like everybody else, I have a ton of game ideas. But ideas are cheap and execution is what counts. So before I actually make a game, I need to decide on what idea interests me the most and to be honest I’m in a proper state of analysis paralysis right now. Suffice to say, I haven’t decided yet…

Why can’t I decide on a game idea? I’m definitely overthinking it a lot, but here are a few problems:

Overscoping

Most of the concepts I am interested in end up as games with a scope so large that it would require a team to make and therefore would be completely unreasonable to develop solo in a few months. Everyone who has ever tried to make a game runs into this issue right away. Thankfully, I’ve gotten better at recognising when the scope is unrealistic. Unlike when I was a teenager, I know I cannot make an MMO by myself. But a single-player immersive-sim RPG? So tempting, I’d love to do it, but still too ambitious for one person…

Uninterested in making “tiny” games

Yes, I know that the classic advice is to make tiny games and in doing so you slowly learn the technical skills required to make larger ones. That is definitely great advice – I have learned a ton by making games as part of 1 Game a Week. There’s still an ocean of things I still need to learn but I just don’t want to keep making tiny games. So that’s why I’m trying to go for something a bit larger than what I’ve done before, while still giving myself time to work on it.

October soft deadline

I’ve already given myself a soft deadline of October to release a game. I also want to make a game that is larger than what I’ve made before. I think that’s a reasonable timeline, but I want to be confident in the game’s vision so that I don’t pivot the project halfway through and suddenly I’m targeting April 2024 as a release date.

Part-time Project

Even though October is a few months away, I will have a limited amount of time to work on this solo game project since I’m prioritising my day job. So with that in mind, I think it makes sense to make a game that plays it safe with the design so that it requires less playtesting to validate ideas. Not saying I’m going to make a complete ripoff of another game, but maybe I’ll play it relatively safe when picking the game I want to develop.

While writing this post I came across an article by PC Gamer that talks about how indie devs are creating “micro” RPGs, and it got me thinking about my own goals for game development projects. I realised that I end up thinking of trying to make games that are either commercial in scope, or are a stepping stone to a commercial project. Which to be honest I don’t think is the right way for me to make games solo.

I also think that if I immediately aim for the end result of “a game that makes money”, I’m going to act in a risk averse manner and not make anything creative or original, which won’t be very fun. So I think I should really not worry too much about the game having broad appeal and instead try my best to make a small interesting and unique experience, that resonates with a small audience. Which seems obvious to be honest, considering that people don’t go to indie sites like itch.io for mainstream hits.

This section has gone on for longer thatn I would have liked and there’s still a hundred different thoughts I have about this. But as I said at the start, I’m overthinking this.

So I think the best approach is to take an idea for a small game and see how much I can expand it, rather than take an idea for a large game and try to shrink it down. It’s like writing Tetris and then adding rules and modes to expand the scope, instead of starting with something like a CRPG where removing something can destroy the game balance and experience.

I’m going to stop now because I’ve overthought this way too much and I really just need to start sorting my game ideas so I can prototype the low complexity ones.

Thank you for reading my rambling devlog, next one is going to be more coherent!

Blender Project: Master Sword

For my second blender project this year I wanted to try and make the Master Sword from The Legend of Zelda. I’m very happy with how the model turned out, but I wish I could have made the render look a bit more polished. Currently I’m working on an underpowered laptop because of my move to the UK. This has made the iteration times very long between test renders, so I didn’t have the time or processing power to learn how to make more photorealistic materials.

I’m happy with how the glow turned out, although perhaps it’s a bit too much? Either way I think it looks pretty cool. I’m sure there’s a lot to be done with the lighting and composition to make it a more interesting render, but I’m happy with how it turned out from the perspective of a beginner.

I thought it would also be interesting to upload some WIP pictures where you can see how I refined the shape of the Master Sword and then began adding the simple BSDF materials.

The middle ones have quite subtle changes – they’re mainly subdivision surfaces and changes in lighting. I also was originally going to try rendering the Master Sword resting in the stone, but I decided against it since I didn’t have enough time. I got what I wanted from this project and overall I’m quite happy with it!

Blender Project: Jak and Daxter Power Cell

One of my goals this year is to make 12 Blender renders, and this is my first one. If you’re unfamiliar with the first Jak and Daxter game, the goal is to collect all of the power cells scattered throughout the levels. I always liked the look of these, and they seemed like a simple enough beginner project to practice modelling.

This took me about a week of working on and off during the evenings. I spent a bit longer on it than I would have liked and the results aren’t exactly what I hoped for. The hardest part was getting the model correct for the orbiting parts. I was able to setup the top one and use the same modelling data for the other three, so I wouldn’t have to duplicate my work. But as you can see below, I went through a few iterations before I could settle on a topology that worked.

I’m happy with how the model itself turned out, but I didn’t get much of a chance to add VFX, tweak materials and polish the animation to what I envisioned at the start of the project. In the future I think I’ll work on projects that focus on specific facets of 3D art. Such as a project with a simple model but complicated VFX, or a complicated photorealistic material.

A Year in Review: 2022

It’s January 1st 2023, and here I am writing another retrospective blog post! Overall last year was very good, considering how horrible the prior two years were. Thankfully there were a lot of positive changes in my personal circumstances, but I just want to write a bit about my goals for this year. I had 3 big goals I wanted to accomplish last year, and I managed to get 2/3 of them finished. Not bad! The first big one being…

I Got a Game Development Job!

I’m extremely happy to be writing this – I finally got a full-time game development position at an amazing AAA studio! I accepted the offer back in October but I haven’t actually started working there yet. At the end of January, I’m going to be moving from Ireland to the UK to start my first full-time job in the game industry. Needless to say I’m very excited to start! I won’t be able to write or talk about what I’m working on due to the NDA, but I’ll still be working on some of my own smaller side-projects when I have time.

Wrote a 3D Scene Editor for my Ray Tracer

In 2021 I spent quite a lot of time working through the Ray Tracer Challenge by Jamis Buck. I talked about this before but essentially I used it as an opportunity to learn C++, graphics programming, Google Test and simple CMake. I was very happy with the results, but I mentioned this time last year that I wanted to extend my work and add a 3D editor to the Ray Tracer. I’m very happy to report that I did! You can see my post where I go into more technical detail by clicking here!

I’m very happy with how this turned out. Admittedly it’s a bit janky, but for my first attempt at something like this I think it could have turned out a lot worse! There is unfortunately some functionality not present that is in the Ray Tracer, such as CSG and material patterns. But after a refactor and cleaning up some of the main code, I should be in a position to finish off any missing functionality for a 0.2.0 release. However, that’s all hypothetical. For the moment I’m done with the Ray Tracer project, I learned a ton and got what I wanted out of this project. So yes, it’s not a “1.0” release, but I’m happy to say it’s “finished”.

Began learning 3D Art

Towards the end of this year I tried picking up Blender again, followed some tutorials and now I’m on my way to improving my 3D modelling skills! I’m still a very early beginner, but I thought it would be worth at least mentioning that I started to properly learn 3D around now. I first tried learning 3D at the end of 2020, but I decided to not continue at the time.

After finishing the famous Blender Donut, I’ve mostly been following tutorials from Blender Guru, Ryan King and Sickly Wizard to create some scenes. Here’s some of the work that I’ve done this year, nothing truly original and mostly created from tutorials, but still I’d like to show it off!

I’m particularly happy with the PS1 style desk scene thanks to Sickly Wizard, and I like the Skyrim Sweetroll I made. I don’t quite know how to make the icing texture, so I like to think it just hasn’t been put in the oven yet. The candy is from a Blender Guru tutorial, and the strange untextured ship/turret is from an unreleased game jam project I was working on.

A Year in Preview: 2023

I have a good feeling about this year. It’s going to be busy and very different to what I’m used to. To be honest, writing these goals feels over ambitious and realistically I don’t think I’ll accomplish all of them – but I’ll definitely try!

Move countries and work in the Game Industry!

This is definitely my big goal. It’s going to be strange for me living away from home for the first time, but I’m excited to live in a new city! This is something I’ve wanted to do for a very long time and I really want to make it work. I’ll be busy throughout this month getting ready to move to the UK and setting myself up for the rest of the year. My main priority this year is to do the best job I can in my new role. Everything after this is lower priority but I do hope to accomplish them.

Release a Small Game

So last year one of my 3 big goals was to release a game. I sadly didn’t manage to do so due to a few reasons.

  • I decided to move away from using Unity and began learning Unreal Engine.
  • I couldn’t decide on an idea, and the ideas I did like were way too over-ambitious. If I’m being honest, feels like I was procrastinating by trying to find the “right idea”. I did make a few prototypes though!
  • Got sidetracked with a house move, renovation and some other commitments.

The big difference is this year I’m going to do monthly dev-logs where I write about the work I did month-to-month. I’m not promising that they’ll be super detailed or well-written, but it’ll be there to show off my progress and to stay accountable.

I have a few game prototypes I’d like to make, and I’d like to pick something interesting but small in scope. I’m giving myself a release date of around October to release the game. I hope to have a project outline done by the end of February and then I can work on the game throughout the year. Because of my full-time job and other commitments, the game will be slow to develop so I’ll need to keep the scope tight. If I don’t hit the October release date, then I’ll delay the game release to early next year so I can wind down in November and December.

Catch up with my Reading Backlog

During C̸̭͒Ō̶̮̣͒V̴̲̌̈́I̴̙̣̋͊D̶̠̄ I bought a lot of books that ended up gathering dust on the shelf. This year, I’m going to finally get through one of them!

Game Engine Architecture – 1165 pages

So, this book has just under 1200 pages. If I read 100 pages a month, I’d finish it by the end of the year. Now, I’m not planning on actually reading it cover-to-cover, but I do want to at least skim chapters and then read in-depth for important chapters. But my goal with reading this book is to get a greater understanding of what goes on under the hood of game engines. I like to know what my code is actually doing, and I think really studying this book will make me a better game programmer overall.

Now, if I somehow manage to get through that book quickly enough, I’d like to also get through these two as well!

A Programmer’s Introduction to Mathematics – 360 pages

I’d like to improve my graphics programming skills, and a large part of graphics programming requires a thorough understanding of Mathematics. I know enough for gameplay programming, but once it gets to more advanced topics and reading about algorithms written by mathematicians, I get lost. I’d like to become more comfortable with understanding Maths concepts so that I can understand what is actually happening intuitively, rather than copy-pasting someone else’s algorithm.

Effective C++ (Third Edition) – 272 pages

While I’ve been using Blueprints to learn the Unreal Engine API, I’m very shortly going to be using C++. I already have a good bit of experience after working on my Ray Tracer, although I’d like to “level up” my C++ skills. From reading online, this book seems to have a lot of examples of well formed vs badly formed C++ code.

Create 12 3D Renders

I also want to challenge myself to make 12 polished 3D renders with the purpose of sharing them online. On one hand, I’m considering pacing myself at around 1 render a month, or I could make them during November/December once I release my game. I mainly want to do fan-art stuff this year. They’ll mostly be small, simple props rendered in Unreal Engine, and I might throw in some animations and VFX too! This is purely to pick up a new hobby.

Finish Grade IV Piano

So I’ve been practicing the piano for the past few years, and I’m doing the graded exams through the Royal Irish Academy of Music (RIAM). This year I’d like to push ahead to the next grade, which is Grade IV. Although I’m moving to the UK, I’m thankfully able to do my lessons online. Eventually I’d like to compose my own music, but perhaps that’s a challenge for next year!

Relax, don’t burn out!

So yeah, I have a lot of plans for this year and it looks like I’ll be very busy. The most important thing however is that I don’t burn out. If I manage to just live in the UK and do well at my job and get nothing else done then I’ll consider this year a success!

So that’s it!

That’s my post. Another year came and went. I’m really looking forward to moving to the UK, working with the new team at the end of January and finally “officially” being part of this industry.

I hope everyone who read this had a great New Year and I hope you all stay safe and stick around for next year! Thanks so much for reading ❤

Reccy’s Ray Tracer 0.1.0 is out!

Last year I started working through the Ray Tracer Challenge by Jamis Buck, and I wrote a software ray tracer in C++. This was a highly educational and interesting project for myself as it gave me the opportunity to really learn 3D Maths and C++ in a fairly controlled way by working through the unit tests presented in the book. I finished that about a year ago, but I always wanted to add an editor or some tool on top of it that allowed someone to actually create their own 3D scenes without editing the source code.

Today I’m happy to say that I’ve finished my first editor implementation! I’ve been working on it on and off for the past few months and it was quite an experience, learning the basics of OpenGL, Dear ImGui and putting everything together.

The first version of the editor. Simple scene and material editor with a scene outline and inspector.
Render of the scene shown in the editor.

The first version of the editor can:

  • Save and Load Scenes to a .rrt file (XML)
  • Create, Edit and Assign Materials to different scene objects
  • Transform, rotate and scale controls for objects
  • Change render camera position and direction, and render dimensions

This is only the first version of the editor, as it doesn’t expose the full functionality of the core ray tracer. Features such as Constructive Solid Geometry and Pattern Materials aren’t implemented, but I might do so in the future. Realistically it’ll be bug fixes, small updates and refactoring the 3000 lines of code in the main class.

While that’s a small amount of features for v1, here’s a list of the low level systems that had to be implemented to support the user-facing features:

  • Replacing CMake with Visual Studio Solutions (I was spending too much time fixing CMake issues)
  • Cursor picking (Scene raycasting and collision detection, 90% of it was done for core raytracer)
  • Scene rendering (Setting up OpenGL VAO, VBO, Shaders, etc)
  • User Interface (Setting up Dear ImGui and all the minutia involved)
  • Gizmo handles – Transform, Rotate and Scale (3D modelling, implementing Torus collider)
  • PLY Model loading – Used Stanford PLY as it’s a simple format that supports vertex colors
  • The Math library (Never ever ever making my own Math library again, it’s just painful)
  • Model View Projection Matrix for Camera rendering
  • Probably a lot more I can’t remember…

Point is, there’s a lot of implementation details that’s easy to gloss over for what does seem like a simple project on the surface. Once I come back to this project in a future, I do plan on adding support for CSG and Pattern Materials. But, that’s quite a while away. I want to focus more on game dev in the near future.

Feel free to check out the source code and download the release! It’s completely open source so feel free to do whatever you want with it. The source code is available here: https://github.com/Reccy/CppRayTracerChallenge

You can also download the Windows release here: https://github.com/Reccy/CppRayTracerChallenge/releases/tag/v0.1.0

BONUS: Development Gifs

This was taken while trying to implement the rotation gizmo. It works fine now, but debugging rotation bugs is incredibly frustrating.
This is an early gif from when I first got the flycam and orientation gizmo working. The gizmo is rendered by the camera to an OpenGL texture, which is then rendered one frame later onto the screen.
Another rotation bug. Instead of storing the X Y Z euler coordinates separately, each scene object only has a quaternion rotation. Each frame the euler rotation is generated to display on the UI, then it is transformed back into the quaternion. This is clearly very unstable because of floating point imprecision and the fact that a quaternion maps to multiple euler angles. So now, the quaternion is generated from the euler angles.
Same bug as above.
No bugs this time, just showing off the working gizmos. The gizmos took a surprising amount of time to get implemented.

A Year in Review: 2021

So it’s January 1st 2022 and here I am writing a yearly retrospective blog post. I don’t really know how to write these, so I guess I’ll just take a look back over some of the things that I’m proud of that I did over 2021. To be honest, I’m kinda uncomfortable writing this as I don’t want to appear arrogant, but I also think that maybe it’s a good idea for me to at least acknowledge my accomplishments in the past year?

Anyway, here we go!

Started my website / blog

So as I was finishing up my full-time job in May, I started building this website in WordPress. I’ve wanted to setup a personal website for a long time, and I always had a kind of vision for what it’d look like. Ideally it would be a fullscreen interactive website, like the one for Nicalis. But it’d be some sort of simple game and that’s how the user would navigate the website. While I think it’s a cool idea on paper, it’s actually a lot of work and also it’s terrible for accessibility. So I’m glad that I finally just decided to make the simplest website possible for my blog and portfolio. It frees up more time for me to actually work on the portfolio itself.

Finished the Ray Tracer Challenge book

Something that I’ve also wanted to do for a while is tackle the Ray Tracer Challenge by Jamis Buck. I started working on this in May while I was in my full-time job. I finished the project in early August. This project was treated as an opportunity to improve my C++ skills and to start learning about graphics programming. This is the largest program I’ve written so far in C++ and I found it a very educational experience. I learned how to create and run C++ unit tests with Google Test and how to configure the project using CMake.

This is also the first program I’ve written where using unit tests gave me the freedom to optimize my code without worrying about breaking the existing functionality. Since I had good test coverage, I could iterate on my code very quickly as I wouldn’t have to spend much time testing. I got to use a variety of different techniques to figure out how to improve the ray tracer performance.

https://twitter.com/TheReccy/status/1419282865083371523

Some of the tricks I used to reduce the render times were:

  • Multi-threading to render each line using a thread
  • Variable caching to avoid expensive calculations
  • Replacing std::vector with a native array to prevent heap allocation and std::vector setup times

I’m really happy that I managed to finish this project and learn so much from it. I do have some more plans to expand on it in 2022. I think it would be cool to build a 3D editor around it so that a user can place the primitive objects in real-time and then perform a render, rather than downloading the source code and recompiling to get a render.

Made 15 Game Prototypes as part of 1 Game a Week

After finishing the Ray Tracer Challenge in early August I messaged Rami Ismail on Twitter to setup a consulting call for advice on getting better at game development. His top advice was to begin making 1 game prototype every week. There’s actually a great article on his blog that explains the premise: https://ramiismail.com/2014/02/game-a-week/.

So that’s what I did! For the rest of 2021 I made a game almost every week

Game 1 is a platformer with virtually no gameplay whatsoever.

Game 2 is a Pac-Man clone.

Game 3 is about a submarine that doesn’t really do anything.

Game 4 is about trying to not eat your own shit.

Game 5 is about herding very very dumb sheep.

Game 6 is about flying a ship in orbit around a planet.

Game 7 is a top-down train game that also has no real gameplay.

Game 8 is a tough puzzle game about escaping a ruin.

Game 9 is a slightly better platformer about trying to destroy a giant flying snake.

Game 10 is an unfinished game about trying to control the minds of your enemies.

Game 11 is a game about placing mines to defend a port.

Game 12 is an interactive fiction game about leaving your home city.

Game 13 is another unfinished game about ordering your units to create mine shafts.

Game 14 isn’t really even a game but you get to set a bunch of people on fire.

Game 15 is about you punching people in a fast-paced top-down action arena.

To be honest, most of these games are terrible… which is ok!

The whole idea of making 1 prototype every week is to figure out what does and doesn’t work, and to learn from my mistakes while getting better at game design. I made a lot of mistakes, and I wrote a blog post for each of these games where I tried to figure out what went wrong and what I’d do differently in the future.

Some of the mistakes I made are classics such as over-scoping, not managing my time well, not having a simple game concept to work on, ignoring game juice, not adding SFX or decent game art, and a few other issues that I go into in the specific blog posts.

I think overall the issues I run into with most of my games are that I focus too much on complexity and trying to come up with a clever design rather than building the toy first and failing fast. Just getting the initial idea down as a playable demo and going from there is a proven approach that I don’t seem to do as often as I should. When I do get the small toy working quickly, I can realize the idea doesn’t work out. I’m then in a position to scrap it and try something else. For example, my Ludum Dare game was made in around 12 hours, but I spent 36 hours working on a failed prototype before I scrapped it. The final 12 hour version is much better.

I also learned a lot of Unity and prototyping techniques over the last few months. I don’t think my skills are at a place I’d like them to be, but at the same time I’ve only spent a single College Semester’s worth of time on this challenge and on full-time game development. I guess it isn’t that much time in the grand scheme of things, and I still have a lot to learn!

But at the same time, I’ve learned a lot with the past 15 games.

A Year in Preview: 2022

So after building a Ray Tracer and making 15 pretty bad (but useful!) prototypes, I’m at Day 1/365 of 2022. While I have some non game development work scheduled for January and some other personal life changes going on, I have exciting game development plans for this year!

Make a Video Game

First of all, I want to make an actual full video game. Not just a 1 Game a Week or Game Jam entry, something that will take a few months. The largest game I made up until now was MAG-CHAMBER in 2016, which took 3 months of work during college. I know now that I’d be able to make that game in half the time since I’m a much more confident programmer than I was 5 years ago. Plus the fact that I can dedicate myself full-time on a game for 3-6 months makes me think that I can make something pretty cool! It could be terrible, but it could be cool. I’ll find out either way and learn a lot while doing it.

No matter what, this is the year I make an actual game!

Get a Game Development Job

Something I’ve been working on for the last few years is getting myself into a position where I can work as a game programmer full-time. Arguably I’m already doing that now, but I’d like to actually get paid for it too, and to work on a project that actually has a budget and artists and composers and designers and all that fun stuff.

I think having my 15 prototypes plus a full game will be plenty for my portfolio to get hired as a full-time Game Programmer. I do already have some experience as a Game Programmer Intern in 2018, so I’m sure with the extra work I’m putting in this year I’ll be able to get myself into that position. If I don’t, then at least I’ll have made a game and will be in a stronger position for 2023! But for real, getting hired this year would be great. If you’re a recruiter reading this, here’s my contact details.

Add a 3D Editor to my Ray Tracer

I’d love to make improvements to my Ray Tracer to add in extra features and fix some bugs. The major change being an actual real time 3D Editor. While I don’t use C++ for my day-to-day work, I do enjoy playing around with a language that uses manual memory management and gives me the opportunity to use lower level optimization techniques. This is low priority compared to my other two plans, but I hope to get a good shot at this later in the year!

So that’s it!

That’s my post. Me looking back on 2021 and looking forward to 2022. Writing this felt pretty strange, since usually I’d keep all of this stuff private on a .txt file that would get lost somewhere on my hard drive. But now everybody can read it on my blog, which is cool since now I can’t back out of my commitments!

I do want to get my main goals done for this year, but I’m sure I’ll also meander a bit and end up doing other smaller projects. I think Making a Video Game and Getting a Game Programmer Job are both pretty big goals, but at least they’re clear and I can work towards them this year. Updating my Ray Tracer is something that’s a much lower priority, but I think it will be a fun project I can work on during 2022’s Winter once I’m in a job. Hopefully.

I hope everyone reading this had a great New Year and I hope you all stay safe and stick around for next year! Thanks a lot for reading ❤️

1 Game a Week – Week 15

Alright, it’s time for my last devlog for the year of 2021. I think I’m ending this on a high note, as I’m actually really happy with how this project turned out. After finishing Week 14 I was away on holiday for a while, so I had some time to think about what game I wanted to make for Week 15. I had the idea of a top down brawler where you can punch both the left and right fists separately, I also wanted the fists to be actual GameObjects that are procedurally animated rather than in a sprite sheet.

One new thing I wanted to try out with this game was to allow myself to use third party assets a bit more for prototyping. One mistake I’ve made in all of my previous games was not relying on existing solutions to problems, and essentially reinventing the wheel. I used my own A* algorithm for a few games before replacing it with the A* Pathfinding Project. On one hand it’s good to write stuff from scratch for the purposes of learning, but right now I’m focusing on game design and high-level game programming. Writing a pathfinding algorithm from scratch is definitely something useful for me to be able to do, but it’s taking away from the final product as my time could really be used better elsewhere.

Debug view of my in-development A* algorithm from Week 13. I should have spent more time making the actual game instead of a generic algorithm.

So anyway, for the game itself I started off by focusing purely on how it feels to punch an enemy. I ignored juice for a lot of my recent games, since I thought I wanted to focus more on making gameplay that can stand up on its own without any SFX or VFX. I think that was a major mistake, and I got the notion from a Reddit post a few years ago where someone mentioned that a game’s mechanics should be fun by itself with no juice. I don’t know if that’s a common opinion in the game industry, but personally I don’t like prototyping games without at least placeholder graphics or effects. So I downloaded the Feel Asset, the Cartoon FX Remaster Asset and the Universal Sound FX Asset. This way I had some generic effects and a nice framework to setup juice and micro-interactions without much code, speeding up my prototype time. Finally after a little bit of time in Unity after playing around with Feel, I had a simple punch implemented.

Simple yet satisfying. My first attempt at making a punch.

I really focused on the juice and feel here, not worrying about any other part of the game. I figured that if it’s not fun to punch an enemy in a fighting game, then nothing else is going to hold that up. I decided to focus solely on audio, and after a bit more tweaking I had a version implemented. I was very surprised just how much better the game feels with audio feedback. My biggest lesson here was not to underestimate how powerful audio is.

The next 2 days involved me implementing a simple Health, Stamina and Shield System. I also started to implement the VFX juice while tweaking the punch timings. I also made it so that when you KO an enemy, your last punch sends them flying a bit farther, just to emphasize the character’s victory. I used some of the placeholder VFX then for a ‘death’ animation. While I don’t think the effects really ‘fit’ with the game’s graphics style, it still is much better than having nothing at all. A player should be able to play this and get the gist of the game in the prototype. If it was to go into full production, I would change out the VFX and SFX to something more appropriate.

I kept on tweaking the feel of the punch while I worked on the other parts of the game. I wanted the enemy to have some form of intelligent AI, so they don’t just rush the player constantly. While simple, there are a few rules with how the engage the player in combat. For example, if the player punches an enemy and they have enough stamina, they will engage their shields and back away to protect themselves. They are very simple rules and it does make the AI seem like they have some intelligence. If I’m being completely honest though, it needs a lot more work to make them feel more ‘alive’. They’re still kind of dumb.

Unfortunately the game is quite difficult, but the stamina and block system at least gives the player the time to receive a number of hits. I intentionally gave the player more HP and Stamina, so that the enemies will tire themselves out from walloping the player. I also made it so that the player regains some HP after each round. I’m not too happy with this solution as it doesn’t feel like it changes the game for the better. There isn’t much strategy other than blocking an enemy when they hit you to drain their stamina. Then when they run out of stamina, you can quickly dispatch them by punching them multiple times in quick succession. On the bright side, I do think it feels satisfying.

I also spent all of Monday trying to fix a performance bug where the browser would slowly compile the shaders when a player is spawned. Sadly I couldn’t figure it out. It’s not noticeable on a native Window version, so if anyone reading this knows why shader compilation is so slow on Chromium browsers, please send me a message!

Final gameplay with enemies spawning in

What went well

  • Made a game that is actually fun to play for a few minutes
  • Learned the importance of good VFX, SFX and Juice
  • Implemented Hitbox/Hurtbox collision detection and response in a simple and clean way

What could have gone better

  • I *technically* didn’t finish this game in the week, since I was working on a performance fix on Monday. Thanks, Chromium. It shouldn’t take 5 seconds to compile 10 shaders…
  • I would have liked to add in actual graphics and an environment, but I really already went over time so I didn’t spend time polishing it.

What I learned

  • I don’t like prototyping games without VFX or SFX. I enjoy working on the prototypes more when it feels more like a “real” game. I just need to be careful not to only work on polish and ignore fun gameplay like my sheep herding game from Week 5.
  • It’s okay to use third party assets for things that I’m not skilled in. I can’t make VFX or SFX (yet), so there’s no point in doing it badly for a prototype when there’s already good resources out there that I can use.
  • The problem with a lot of my earlier games is lack of feedback. I think even the mining game I made would feel way more interesting to play if the miners actually had a digging animation with a pickaxe SFX.

Summary

After making a few terrible projects in a row, I’m glad to have finally made something that I’m happy with. I learned a lot of important things making this project that makes me look back and see where I went wrong on my earlier games. Getting the core interaction polished and fun is something that isn’t new to me, I’ve read about it many many times but even then I feel like I ignored that advice for too long.

From now on I’m going to get the game feeling good immediately with some placeholder SFX and VFX. That will allow me to set the game’s mood and get closer to how I want to player to feel when they’re playing the game.

As always, if you want to try out the prototype, the link is right here:

1GAW – Week 15

Fast-paced round-based Beat ’em Up Prototype

Available now to play on your browser

If you wanna play around with the code, I also have a link to the GitHub repo if you click here!