Booboo is a side-scrolling adventure platformer, where the player takes on the role of Booboo, who is on a quest to find his purpose for existence. Booboo has a unique ability to teleport to warps that he can create. In a world filled with lava, blades, timed doors, and the ever-so-deadly gravity, it will take your sharpest wits at every step to move ahead without dying.
This is a personal project, built on Unity3D completely by myself in under three months, using my free time during my final Master's semester. I produced/managed the game throughout the process with iterative testing. I also designed and executed all programming, art/animations, UI, and level design on my own.
Noteworthy areas of work include: • Custom physics: Using raycasts, to make the movements and dynamics in game feel very arcade-like. • Gameplay analytics: Tracking code at many points in the game help analyze each unique player's gameplay-style, helping in managing retention and other relevant conversions. • Warp mechanics: Allow Booboo to instantly teleport to previous locations, as long as he has sufficient joules. Porting conserves momentum, allowing the player to exploit this mechanic to reach otherwise-inaccessible areas. • User-interface: Minimal HUD ensures critical messages are shown exactly when needed. HUD layout also changes based on the player's progress through the game. • Viral mechanics: Players are directed towards sharing screenshots and reviewing the game from within the app. • Particle-system mechanics: Custom spawn-mechanics for each unique group of particles in the game contribute to better visual feedback as well as general ambience. • Visual design: All art and animations- characters, items, environment and ambient effects, action-visuals, UI-graphics- are original and created with a categorized palette specifically for Booboo.
All music in game, by Kevin MacLeod (incompetech.com) Licensed under Creative Commons: By Attribution 3.0 http://creativecommons.org/licenses/by/3.0/
FAT LOOT IS FREE TO PLAY!
Download the installer from the official Fat Loot site, or from here. It is currently only playable on a local network. Feel free to contact me for any help with the game.
Fat Loot is a multi-player stealth/action game, where up to four players take on the roles of thieves as they compete to finish with the biggest loot among them. Each player in the game controls a thief with character-specific abilities, with the objective of carrying the most loot possible back to their hideout. However, guards on the lookout for trespassers and other sneaky players make the task easier said than done.
The game is built on Unreal Engine 3. The 25-strong Fat Loot team consists of engineers, artists, designers, producers, and sound-artists.
I personally implemented the following key areas in the game: • CAMERA • • Third-person action camera: a third-person camera that can be rotated independently of character movement. • Various camera modes: primary Third-person camera, over-the-shoulder sprint camera, vantage-point (vase) camera, first-person camera, and a "cheat" aerial-view camera; all implemented with smooth transitions when switching.
• GAMEPLAY AND CHARACTER STATES • • Base Character Class: The base template for the four different champion types. • Energy Logic: energy gets used to perform actions, and starts regenerating after a duration of not being spent. • Character Sprinting, including ease-transitioning between speeds, camera changes, and energy usage. • Character Deceleration/Acceleration. • Exhaustion, a walking-based state that the character enters into when their energy is below 20%. • Carrying the treasure, specifically, the particular state and its handicaps, and also adding the corresponding mesh to the character's carrying socket. • Character Finite State Machine: designing the various possible character states (with the help of other engineers on my team).
• ABILITIES AND POWERUPS • • Belly Bump, an ability of Lady Qian, that lets her jump to a location ahead, knocking away any other characters in the way. • Roar, an ability of Tiger, that lets him roar, stunning any character in a cone in front of him. • Invisibility, a power-up that makes the players invisible to other players and guards- including shader-changes and effects on map. • Disguise, a power-up that the player can use to look like one of the guards for a short time- including shader-changes and effects on map. • Buddha Palm, a power-up that lets the player shoot out a giant palm in a straight line ahead, knocking other players out of its way.
I also worked with the engineering team in resolving various other bugs and issues throughout the entire project.
MegaFish is a single-player, accelerometer-based, casual game made for iPad-2, revolving around the story of a fish left to its own in an eat-or-be-eaten world. I worked with a team of five, including two level-designers, to create this game. In addition to contributing to the implementation, I also single-handedly designed and executed all graphics, UI, and animations in the game. I managed the team during this time as well, including low-level goal-setting, scheduling work, and coordinating progress of tasks among members. Megafish was made entirely on Cocos2D, with no pre-existing codebase, on a deadline of two months.
In this game, the player controls Megafish, who's on his own to find his way to an eating competition on the other side of the sea. Underneath the silly plot, the primary game objective is to eat as much "food" (weaker fish and clams) as possible in the given time without being eaten yourself. • Various types of fish (with distinct behaviours) in the sea constantly make your task harder. The occasional friendly whale attempts to balance that. • Objects in the environment, such as sea weed and magnetic rocks, are double-edged swords and can be harmful if not used intelligently. • Other mechanics, such as fish-nets and volcanos, also create further openings for strategy. • To retain a taste of classic gameplay, a few powerups (such as a shield and invisibility) were thrown in the mix. • Achievements, 'Perfect' level stars, and an Unlockables Shop, were implemented to maintain a metagame even outside level play.
In addition to programming the Megafish codebase, we also focused on a few things from a design aspect: • Developing a difficulty curve and tutorial levels. • Making levels more fun and simple to play: catering to a wider audience in general, while still keeping a few levels with the option of strategy open for more aggressive players for better rewards. • Though straightforward play achieves the purpose, we designed levels with a higher degree of risk/reward, with rewards like hidden areas, special item bonuses, and pacman-style power-pellet.
PrimeEngine is a C++-based game engine developed by Artem Kovalovs. I had the chance to get hands-on with this engine through the CS-522 course at USC.
Aside from the core code, PrimeEngine is also compatible with Python and Lua scripting. Tools to export assets from Maya to PrimeEngine were part of the original codebase.
A basic functional framework was given, on which I became able in implementing the following: • Creating Custom Objects and Behaviour: creating custom models with animations in Maya, exporting to PrimeEngine, and creating logical classes and AI behaviour. • Blending between Animations, and Partial-body Animations. • Passing Custom Data by modifying game object MetaScripts and Lua Scripts. • Compressing Data sent on the Network, such as converting full transformations into 3 quaternion floats, and changing value precisions. • Socket Programming. • TRIBES Networking Model, fully working. • Multi-threading. • Geometric Data, including vertex buffers and vertex/pixel shaders. • Culling Volumes outside the Camera Frustum, which involves reducing the number of objects submitted to the graphics pipeline for rendering. • Texture-Coord Buffer for meshes, functional on PC, PS3, and Xbox 360.
I also worked on gameplay design and programming. Some specific areas were: • Physics Components: Bounding volumes (spheres, boxes), Gravity, Acceleration/Deceleration, Conservation of Momentum, Knockbacks. • Physics Engine, sufficient for a car racing game. Mechanics like Drifting, Handbrake mechanics, Hit-and-rebound, are all possible. • Ammo system for each player. • Player HP system. • Python scripting on Maya, including the use of multi-threading.
Some other concepts that I picked up during this time are: • Geometry Instancing. • Post-processing. • Deferred Rendering and G-Buffers. • Compute Shader Concepts.
GzRenderer is a 3-D Win32 renderer built using C++ without any existing graphics libraries.
Through this project, I have understood the core flow of the 3-D rendering pipeline, and have been able to translate it into code. I put into effect the following functionalities in GzRenderer: • Rasterizing techniques, including LEE technique, Scanline technique, and Hidden-surface removal (using Z-buffer). • Streaming common 3-D object filetypes. • Object transformations: Translations, Rotations, Scaling, Inverse-transformations. • Ability to manipulate data at any space in the rendering pipeline: Model-space, World-space, Camera-space, Perspective-space, Screen-space; including Perspective-projection. • Lighting: Ambient, Diffuse, and Specular lighting; Gouraud and Phong shading. • Texture-mapping: 2-D image textures, Procedural texturing, Bump-mapping, Fractals. • Anti-aliasing, using Super-sampling and Reconstruction.
I also worked with 3 other engineers (Pramodh Aravindan, Ravi Teja S., Lin Wang), to implement the following features into the renderer • Shadows, using shadow-maps. Both soft and hard shadows are possible. • Reflections, using cube-maps. • Refractions. • Post-processing effects, specifically cel-shading and colour manipulation.
AM Android App was made as the deliverable for the Web-Technologies course at USC (Spring 2013).
The app allows users to enter a key-phrase and search for it among a database of Artist, Album, or Song types (chosen by the user). These results are obtained from the database of a popular music site.
The bottom layer is a PHP file that searches for the key-phrase and type on the music site, and crawls through the resulting page to create an XML of results that is usable by our app. This XML is then sent to a servlet. This servlet translates the received XML to a JSON string, which is then parsed and output to the Android interface.
On the front-end Android UI, users can share details of the result to their Facebook, and also, in the case of songs, stream audio.