Skip to main content

Posts

My CD Projekt RED story, part 4

My CD Projekt RED story, part 4 We left off right after I had a chat with my lead, which I’m calling Dave here. I hoped that chat would help fix some of the problems brewing between the two of us. Alas, that’s not what happened. The very next day I could see Dave’s attitude towards me change for the worse. He would avoid looking me in the eyes and generally stay away from me. Hoping for the best Regardless of all the negative interactions I’ve had with my lead, I was determined to not let the conflict influence my daily work. I’d been as helpful to other developers as I could, enjoying fruitful cooperation with all the developers I worked with - gameplay designers, UI programmers, sound designers, the engine core team. This translated directly into my monthly ratings, which were always above average. The monthly feedback at CDPR at that time amounted to your lead giving you a grade of sorts. From the worst to the best, you could get either a thumbs down, thumbs up, a star, a throph...

My CD Projekt RED story, part 3

My CD Projekt RED story, part 3 We are now 2 years into my CD Projekt RED adventure and so far, it’s been mostly smooth sailing. I got promoted to a QA Analyst position, an equivalent of a specialist position for developers. I was earning around 2600zł or $650 per month, which would sometimes go as high as 3500zł with additional crunch pay. At this point I felt fairly rewarded for my efforts and could even start planning my wedding. I also received the first bonus for my participation in the creation of both Witcher 3 expansions. This amounted to roughly 13.000zł or $4250, which was an amount of money I had a hard time wrapping my head around. I still lived in a single room in an apartment I shared with other people, but at this point it was mostly my own choice. I’ve had my own wedding on the horizon so I needed every coin I could save for the occasion. Getting out of QA It was during that time that I decided I want to transition away from doing QA work. I approached the audio te...

My CD Projekt RED story, part 2

My CD Projekt RED story, part 2 Once the Blood and Wine expansion was wrapped up, the crunch period has ended for the majority of the teams at CDPR. Since there was quite a bit of downtime, the QA team started a series of internal trainings. These would cover many aspects of game development and were presented by embedded QA testers and designers alike. Downtime learning I signed up for as many of these trainings as I could and presented a lecture about audio myself. It was a blast, you could feel the dedication each of the lecturers had to help their peers grow as developers. Around the same time one of the gameplay designers started an internal C++ course, which I immediately signed up for. The concept of programming have always intrigued me. I made multiple attempts to learn how to code before, but would always give up sooner or later. In spite of me getting the syntax quite easily, I just couldn’t see how these skills I was learning could actually be used. When I enrolled on t...

My CD Projekt RED story, part 1

My CD Projekt RED story, part 1 When I joined CD Projekt RED in October of 2015, I was positively thrilled. I did not expect to be given this opportunity with only 9 months of previous game development, or rather games testing experience. But there I was, joining one of the most acclaimed gamedev teams in the world. I was hired as a QA tester in the heat of the Hearts of Stone expansions certification process. My first contract would be a 3 months of probation. I was offered around 1600zł, or roughly $400 a month, which was less than I previously made at one of the Warsaw’s test labs. I figured the limited savings I gathered would see me through those financially rough 3 months, so I accepted the offer. Getting to work I was immediately thrown into deep waters, but with the training help I received from my leads I was slowly learning the tropes of the trade of in-house testing. I had no previous experience with any game engine, let alone one of such complexity as the RED engine....

Designing a flexible radial menu control

It’s been a while since the last article I published. I was busy wrapping up a project I’m working on currently, which, as most game development projects do, turned out to require a little more attention than was planned. The project I was working on was my first porting gig. As can be expected, this exposed me to a bunch of problems I never considered before. One of the tasks I was assigned was writing up a radial menu control, and that’s what I would like to write about today. Radial menu At its core, a radial menu is nothing more than a UI control that consists of a circular items layout and an optional direction indicator. Seems simple enough, right? Well, as it often is with simple concepts, there is a ton of things that go into writing a radial control that is responsive, easy to use and flexible enough. Initial guidelines Let’s start by quickly going over some of the initial discussions I had with people who had done this sort of work before. It’s very important to go thr...

Design like a programmer, part 4: object oriented design

There are many courses and materials available about the object oriented programming (OOP). Although many of them are very solid and accurate, in my opinion most of them fail to catch the meritum of this programming paradigm. As opposed to other materials, which focus mainly on object relationships, like ‘has-a’ or ‘is-a’, or go into great lengths about code encapsulation, I would like to offer a learning perspective focusing on polymorphism. Once we establish a solid understanding of polymorphism, we’ll see how this paradigm can also be applied to code-free designs and what benefits it can have. This article is a little bit more code-heavy, but hopefully my descriptions and explanations will help you go through it even if code is not your thing. The common knowledge When we look at courses explaining what OOP is, they usually put the most emphasis on the structural framework that the paradigm is built upon. We learn about classes that can be instantiated to create objects. We’r...

Design like a programmer, part 3: expanding without modifying

At one point, I was tasked to create a system, that would allow sound designers to stop currently playing sound or sounds whenever another sound is triggered. Since our engine already supported custom sound properties, I knew the most appropriate way to expose this functionality would be to introduce a new list property to each sound entry in the sound config. Thus, sound designers could tweak the functionality as they saw fit using the flow they were accustomed to already. So far, so good. However, it was the next step I wanted to take when my reasoning stood against the open-closed principle, so let’s explore that case together and see what lessons can be learned from my mistake. One disclaimer before we dive in. Since most of my career working with sound involved using Audiokinetic’s Wwise audio middleware, I will refer to each sound as a sound event throughout the article. A sound event in Wwise is a call the middleware expects to receive from the game engine whenever an acti...