Up until this point, I’ve been building all my tests as simple, flat, 2D experiences. With my newfound familiarity with the Wiimote’s pointer, I’ve decided to jump into the brave new world of 3D and attempt to build a first person shooter experience. This was built in the TFB Tool for the Wii. The video capture above showcases a collection of three separate tests folded into one experience. The first challenge was to create the core mechanic of aiming/firing/moving. Here I learned how to:
- Synchronize a 3D model projectile with the pointer
- Map camera controls to the Dpad
- Map forward/backward/strafe movement to the analog stick
- Integrate a fully animated, skinned, character model.
- Utilize attach nodes
- Control lights and real-time shadows
I intended to stop there, but the controls felt very natural and I wanted to extend the experience so I ventured towards the second challenge of introducing an alternative movement mechanic with a new camera perspective: the third person. I used Metroid Prime as inspiration. Here I learned how to:
- Organize logic into distinct, modal “behaviors”
- Control animation play calls
The third part of this test was by far the most challenging. The idea was naively simple: display a north facing HUD map. I went about this drawing each wall dynamically, based on the player’s proximity, so that it would automatically reflect changes to the level. As an Animator, I never thought I’d use Trigonometry as much as I did in this one feature. One word: SOHCAHTOA.
Looking back, it would have been way easier had I made an accurately scaled bitmap of the level instead. Not only would it require a lot less logic, it would have also made it a lot easier to artistically control as a single asset. I have to remind myself that the purpose of these tests is really to learn new things, so taking the hard road is actually more of a win even if it’s not the smarter solution. Justifications aside, by implementing a dynamic HUD map I learned how to:
- Capture and analyze subjects within a radius of interest
- Manage a hierarchy of sprite containers
- Dynamically position + orient + scale 2D sprites relative to the player’s world position
- Use sprite priority + “cut outs”