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 but nobody have solved it yet. So the Easter egg still hold some secrets!
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.
My good friend gave me a material/cascade primer, so I will now attempt to create a few effects. However he restricted me to use basic shapes and materials to begin with. I also have a restriction on what functions to use in Cascade. I think that's a great idea since it makes me focus on the movement and the effect itself instead of flashy eye candy. Looking forward to familiarize myself with cascade and upload the results. This is a completely uncharted territory for me. These are the shapes I will use.
I did a quick exercise in BP communication off a tutorial i found you YouTube... In this example, the Powerup BP communicates with the PL BP and temporarily changes PL speed. It works, but I think a better way is to to have all available powerup-effects (such as speed/jumpHeight/Health/etc.) in the PL BP and have the power-ups send events to the PL BP instead of having the logic in the powerup BPs themselves.
I'll set up a system like that next!
Been ironing out Pac-Man bugs. And I also did the flaming chair BP quickshot, because why not?
Been making a lot of progress with the course and the Pac-Man game. We now have a proper working game with win and lose conditions! Additions include
And here's a demo of the game so far. Still got some distance to go though
Implemented a simple AI that wanders around the maze, killing the player on overlap.
Not as advanced as the original Pac-Man AIs but I'm not making a replica of that game, just learning Unreal 4.
The blog of Aydin Afzoud, Senior Game Designer at MachineGames.