I just don't have time to update the blog. I'm considering removing it. But who knows, I might get some free time to make and post some personal projects... I will leave it up for now.
I've been attending Devcom 19, it's been two days jam packed with talks and show cases. On Monday we also had a panel moderated by Dean Takahashi where we talked about the design challenges in Wolfenstein Youngblood when going from a linear single player experience to a more open co-op structure.
The panel went really well with some really good questions from the crowd. It's always fun to connect with fellow developers and share experiences! Today it's time to check out Gamescom before hopping on a flight back to Sweden.
I have been poking around in blender 2.8, doing some tutorials. And I gotta say it's starting to stick! I think I will print out a cheat sheet for some of the shortcuts and use for a while.
I have been checking out Grant Abbit's blender tutorials for complete beginners, and ended up with this well! The main purpose was me learning the program, the tools and how to model in blender, but I think I will dig in a bit more into lighting too, because good lighting does soooo much for presentation. Anyhow, here is my little well
Long time no see! I have been busy with game development as we wrapped up and released Wolfenstein: Youngblood. And after some much needed vacation I am back. And now I am poking around a bit in blender!
My first attempt at blender was 10 years ago when I was struck by the steep learning curve, unintuitive input (right click to select, what?) and brutal UI. So like many others I just wrote it off as a bloated, undirected, esoteric opensource project, and I moved on to Autodesk 3D Studio Max... Fast forward a decade and the Blender community have released Blender 2.8. There is much buzz about this release, and a lot of big industry actors have thrown their weight behind it. I downloaded it, and I got to say that I am very impressed by it! Totally new UI, visible tools instead of complex undocumented shortcuts, normal inputs, and a real-time viewport. It's a powerful tool that has a lot of potential.
Right now it seems like biggest driving factor in blender development is animation and compositing, and the modelling side is lacking a bit in comparison, but I hope that the attention of gamedev giants such as Epic and Ubisoft nudges the development in a direction where Blender can become the one-stop shop for all gamedev 3D needs.
Check it out
Alright, the C# course is coming along nicely. All base mechanics for rocket lander are in, including debugs and cheats to assist development. All I need to do now is to make some good levels. I have stuck to these test-levels because I wanted to focus on coding and game mechanics. But since the game mechanics are more or less complete - it's time to put this on the shelf and proceed with the next project which is a StarFox-type rail shooter. I'll update the blog when I have made some for this game.
I'm continuing with the C# course and this time it's a moon lander type game. Things are developing nicely with PL controls, collision detection, win/lose conditions, level progression/loading, state machines etc. Code-wise I must say that things are really starting to click, and the feeling when you are deviating from the course to write your own code and systems, and seeing it actually work as intended is a very satisfying feeling. I now see why some of my friends stay up all night coding - the feeling when thing work as intended is very rewarding.
I completed the Terminal Hacker game. It was a very big learning experience, and my knowledge in Blueprints really helped me out when it came to variables, arrays, "custom actions" etc. Gonna keep going with the next project in the course! Here's the simple game in action:
The C# course is coming along nicely. Now it's time to make a Terminal Hacker game.
The game has a menu system that PL can navigate
PL gets to choose a list of a targets with increasing difficulty
PL then gets to guess different passwords, and gets presented with hints that are scrambled versions of of the correct password.
PL wins if they guess the right password. PL loses if they fail to guess he password too many times.
At MachineGames it’s a tradition to include at least one Easter egg or reference to Wolfenstein 3D in our own Wolfenstein Games. In Wolfenstein: The New Order (2014) there is an Easter egg where Blazkowicz goes to sleep, only to have a nightmare where he is in the first level of Wolfenstein 3D. A fun little Easter egg that was appreciated by the community.
In our next game, Wolfenstein: The Old Blood we expanded on the easter egg so instead of having just one level of Wolfenstein 3D, we added the whole first episode of Wolfenstein 3D spread out throughout the single player campaign, ending with the killing of Hans Grosse. The biggest change from the original Wolfenstein was that the pickups and the weapons were in 3D, and the the vista that B.J runs into after defeating Hans Grosse got fleshed out a bit.
A Game Within a Game
When we made Wolfenstein 2, the question was how we would handle Wolfenstein 3D this time around. We ultimately settled on not having it be a hidden easter egg at all, but rather we’d include the entire game and remake it to fit the setting of Wolfenstein 2, and put it right in front of the player, in an arcade cabinet located in the living room of Eva’s Hammer – the Nazi submarine hijacked by the resistance.
In the alternate history of Wolfenstein 2 the Nazis won the war and enslaved the world, so their Wolfenstein 3D version would be the complete opposite of the Wolfenstein 3D version we all know and love. Instead of playing as B.J Blazkowicz killing Hitler and the Nazi leadership you would play as "Elite Hans" killing B.J Blazkowicz and the Kreisau leadership.
Who is Elite Hans?
Elite Hans is the GI-Joe of the Nazi Regime, a made up character made to glorify the military and recruit young kids into the various wars of the empire. We originally referred to him as SS-Hans, but for legal purposes mainly concerning the laws of Germany and Austria we settled with "Elite Hans".
Our marketing department made amazing in-universe mock commercials starring Elite Hans to advertise both the release of the game, and the collector’s edition of Wolfenstein 2, which is made entirely in-character as a real Elite Hans toy.
The making of Wolfstone 3D
The time came to make the game itself. It was a technical, logistical and artistic challenge. There were mainly 4 people involved in this. Myself (Aydin Afzoud), a Olle Rosenquist (Senior Programmer), Christian Grawert (Senior Level Designer) and Karl Johan Dimming (Sound Designer) with additional support.
The plan was originally to outsource the pixel art to an experienced pixel-artist and have them convert and redesign all nazi-related Wolfenstein pixel art into the the anti-nazi pixel art we were looking for. But the candidate I had in mind was unfortunately busy at the time, so I had to take it upon myself to redraw everything that needed redrawing.
I'm a game designer and not an artist at MachineGames, my regular job tasks include designing weapons, enemies, and systems for the "real" game, which means that if I was to make all the art for Wolfstone 3D I had to do it on the side. So to gauge how long would take to tackle this task I started out with converting Mecha-Hitler to Mecha-B.J, as I figured that if I could pull that off it would mean that I'd be able to redo the other enemies too.
That went pretty well, so I started redoing the all the enemies. They were actually harder since they have a lot lot more sprites compared to the bosses, but luckily most of them only needed new uniforms. However it wasn’t just a quick fix in Photoshop, I had to stick to the WOLF3D palette, no other colors were possible.
Then it came time to redo the all nazi wall-art. It consisted of redrawing swastikas and other nazi symbols and convert them to the symboks of Kreisau and the antifascist resistance. And of course replacing Hitler with Blazkowicz. Here's a little sample of sprites that got edited or redrawn completely.
The programmer responsible for the technical implementation is Senior Programmer Olle Rosenquist. He re-wrote the entire code for Wolfenstein 3D - everything is remade again from the ground up, it runs its own thread and updates a single texture on the arcade cabinet. It even replicates the proper IBM Mode 13h. The game supports loading, saving, and everything that the original Wolf3D had, contrary to popular belief it is not an an emulation.
Personally I find it very impressive how he got Wolf3D to function within the game and draw it on a single texture. Regarding the development of Wolfstone 3D Olle says:
“[It was] Interesting to go back and see how they made everything work with the resources they had at the time, especially some of the self-modifying rendering code. Was less fun to make it comply with the modern world of localization and console technical requirements, different profiles/ save-slots and now there's 2 games to bug test since it's a real proper game running (not an emulator) within the 'real' one.”
Unfortunately for us, Nazi-symbols were also baked in to entire levels, meaning a a lot of levels had to be redesigned. This was made by Senior Level Designer Christian Grawert.
We had things ranging from small swastikas here and there to huge swastika based levels
(The left version is original Wolfenstein 3D, the right version is Wolfstone 3D)
Basically all voice audio had to be re-recorded to fit the theme of the game We opted to emulate the notoriously bad/funny voice acting in the original Wolfenstein 3D, as well as the audio quality of the time. The person responsible for the recording, mixing and implementation was Sound Designer Karl-Johan Dimming and he did a great job in making it replicate the original sound quality.
Here are some examples of replaced lines. The voice actors are me and our HR Administrator Nicole Åkerlid:
When it comes to Music, Mattias Wennlund removed the Nazi-music and even added some new unused music that was lurking in the original files. The music is made by the great Robert Prince.
Back in 1992, Apogee, the publishers of Wolfenstein 3D were going to run a competition. They had hidden a message deep inside a very hard and sadistic maze that said “CALL APOGEE, SAY AARDWOLF”. The idea was that the first person to call the publisher and say it would win the grand Prize. The problem was that as soon as the game was released, people just unpacked all the files, found the message and called en masse to Apogee saying AARDWOLF! So they cancelled the competition and patched out the message. Joe Siegler have a very good blog post regarding the whole AARDWOLF debacle. Apparently people kept calling in 20 years later yelling "AARDOWLF! AARDWOLF", believing they were the first to find the message.
When we made Wolfstone 3D we thought: "Let’s finally run the AARDWOLF competition, 25 years later! The AARDWOLF shall have its justice!" So we did - a special sprite hidden inside a maze, inside a game inside another game.
Our version said Tweet @Wolfenstein say “Aardwolf”. And the first three persons did it received Wolfenstein II: Collector’s Edition for free!
And just like in 1992 people are still finding the easter egg and tweeting it. I also added a coded message in the sprite b̶u̶t̶ ̶n̶o̶b̶o̶d̶y̶ ̶h̶a̶v̶e̶ ̶s̶o̶l̶v̶e̶d̶ ̶i̶t̶ ̶y̶e̶t̶.̶ ̶S̶o̶ ̶t̶h̶e̶ ̶E̶a̶s̶t̶e̶r̶ ̶e̶g̶g̶ ̶s̶t̶i̶l̶l̶ ̶h̶o̶l̶d̶ ̶s̶o̶m̶e̶ ̶s̶e̶c̶r̶e̶t̶s̶!̶ 2022 EDIT: 5 years later SHODANFreeman cracked the code, and solved the easter egg fully. It says THESLIPGATEISOPENINGPREPAREFORHELLONEARTH. And since then, the slipgate opened and a new official Quake episode was released and DOOM Eternal was set on earth, so it all came true.
Summary & Acknowledgements
This is a very abbreviated insight in how Wolfstone 3D was made. There was a lot more work involved: Narrative Designer Tommy Tordsson Björk wrote the end-art, Mattias Wennlund implemented all the SFX, and the heroic QA department at Bethesda bug-tested it thoroughly.
Making Wolfstone 3D was fun and challenging, and it’s nice to see that old hardcore Wolfenstein 3D fans went back and replayed the "opposite version" and explored the new levels. It was likewise fun to introduce Wolfenstein 3D (albeit an altered version) to a whole new generation of FPS fans that had never played the grandfather of first person shooters.
And since you’ve read this far I’ll let you in on a secret: If you press Right Trigger + Left Trigger + Right Bumper + Left Bumper + Right Stick + Left Stick all at once you’ll get full ammo, all weapons, all keys and full health. Might be useful when tackling Wolfstone and gunning your way to Mecha Blazkowicz!
I've always preferred grenade effects that don't overdo explosion part, but rather focuses on the smoke/dust so I made one! EDG32 palette
I tried fixing the last 2 frames and the irregular GIF loop, but it seems Photoshop can only export gifs at max 50 FPS, even though I set the max to 60. Oh well, here is the fixed version albeit too slow.
I had avoided to put in some kind of smoke in the grenade explosion because the smoke "overwrote" the other effects. Then my friend just told me to move the smoke a bit behind the stuff and I felt pretty dumb for not even thinking of that. Doh! So I added a bit of smoke and also tweaked the curves for other effects to make it more dynamic and less static and boring.
I re-created the grenade explosion, using some stuff I learned while making the bullet impact. Screen algnment: PSA velocity is pretty useful for creating sparks and real sharp shrapnel. I also realized that I thought I could not use size over life for the bullet impact, but that was just me being silly. So I need to revisit that too.
Continuing poking around in cascade using the primitive shape materials. This time, I attempted a bullet impact. Again, learned a lot while poking around with this one.
To familiarize myself with cascade I attempted a grenade explosion limiting myself to the square, circle and triangle shaped materials. I am also limited to only using these in cascade:
Acceleration > Acceleration Drag
Color > Initial Color, Color Over Life
Lifetime > Lifetime
Light > Light
Location > Initial Location, Shapes
Rotation > Initial Rotation
Rotation Rate > Initial Rotation Rate
Orientation > Lock Axis
Size > Initial Size
Velocity > Initial Velocity, Velocity Over Life, Cone
Might not look much to the world, but I learned a lot poking around in Cascade. Will attempt bullet impacts next.
The blog of Aydin Afzoud, Senior Game Designer at MachineGames.