Trailer
Voodudes
Voodudes is a single player, third-person action adventure where players take control of a voodoo doll named Virgil in his quest to save the world of voodoo. The game takes place in New Orleans, the birthplace of voodoo and home to a powerful voodoo sorcerer named Baron Samedi. In an effort to seize control over both the world of the living and the dead, Baron Samedi summoned the loa, benevolent voodoo spirits of the voodoo world. Baron Samedi trapped these loa spirits in order to seize their power for his own. Virgil must travel along the streets of the French Quarter, through the bayou, and ultimately into the world of shadows itself to free the loa and restore balance to the world of voodoo.
Award and Honor
Voodudes was selected to present at Intel's GDC 2013 booth.
Development Info
Position Highlights
- Lafayette Cemetery level
- Built, lit, and optimized the level
- Designed and balanced encounters
- Designed and scripted warden (mini-boss) fight in kismet and Unrealscript
- Made 3 cut-scenes
- Market District level
- Shadow world level
Design Details
In Lafayette Cemetery, there are three special enemies which are the Conjuror, who uses a medium range attack, the Firemouth, who does fire breath at close range, and the Berserker, who charges players from afar.
Depend on the players' progression, players may encounter a new enemy that they have never seen before. To make sure players have enough time to learn how to deal with each new enemy, I always placed a new enemy along in a opening environment to ensure players have more than sufficient time and space to fight.
Depend on the players' progression, players may encounter a new enemy that they have never seen before. To make sure players have enough time to learn how to deal with each new enemy, I always placed a new enemy along in a opening environment to ensure players have more than sufficient time and space to fight.
Lafayette Cemetery - Cut-scene and Walkthrough of Warden Fight
The warden in Lafayette Cemetery is a superior version of the Conjuror and the warden has 3 abilities. The first is a 3-lines alligator attack. The original idea of this ability was firing 3-lines at once. When we tested this ability, I found it was hard to dodge. I changed it to fire the middle line first then fire the other lines right after the middle line. This change not only gives players more time to react but also makes player paying more attention because players need to dodge it twice.
The second is a stun alligator. The stun alligator is inevitable and it traps the player for one second. This ability happens very frequently but it only takes the player's control away for a very short time so the player won't complain about it. The key for this ability is I arranged when players recover their control, they will face another attack right away. Players need to handle the situation immediately and to make their decisions. This ability brings a lot of dynamics to the encounter and makes this battle more fun to fight.
The third is an AoE attack. There will have a green circle showing on the ground before actual attack happens. When players face this ability at the first time, the warden doesn't use the stun alligator. I want players to have more time to learn how to deal with this ability. When the warden is close to death, the warden uses 3 abilities together to fight against players.
The second is a stun alligator. The stun alligator is inevitable and it traps the player for one second. This ability happens very frequently but it only takes the player's control away for a very short time so the player won't complain about it. The key for this ability is I arranged when players recover their control, they will face another attack right away. Players need to handle the situation immediately and to make their decisions. This ability brings a lot of dynamics to the encounter and makes this battle more fun to fight.
The third is an AoE attack. There will have a green circle showing on the ground before actual attack happens. When players face this ability at the first time, the warden doesn't use the stun alligator. I want players to have more time to learn how to deal with this ability. When the warden is close to death, the warden uses 3 abilities together to fight against players.
The cinematic intro of the warden fight features a long curve of alligators. In order to adjust all alligators at the same time and to avoid as much redundant work as possible, I used a Switch kismet node to tweak the cinematic. Each alligator shared the same interval and animation so it was good to use a Switch rather than put everything in Matinee. Since the locations of the alligators are static, I only needed to find the best angle and speed for camera, then tweak the interval of the alligators to match up with the cinematic.
Market District - Walkthrough of Warden Fight
One of our great level designer, Dallas Chavis, designed 3 abilities of warden bomber and I was responsible for implementing them. We worked very closely to accomplish each other's goal in this warden encounter.
The first ability of warden bomber is summoning 2 landmines at once. The landmine explodes when players touch them. The second ability was summoning some timed bombs in a small area. The timed bombs explode in 3 seconds after they are summoned. They both fell from sky and to differentiate landmines and timed bombs, I made timed bombs bouncing on the ground but landmines not.
The first ability of warden bomber is summoning 2 landmines at once. The landmine explodes when players touch them. The second ability was summoning some timed bombs in a small area. The timed bombs explode in 3 seconds after they are summoned. They both fell from sky and to differentiate landmines and timed bombs, I made timed bombs bouncing on the ground but landmines not.
simulated function Tick(float DeltaTime) { local float bombscale; local VPawn virgil; local Vector VirgilToDeadlyBomb; BombHandLocation = Instigator.Mesh.GetBoneLocation('Bip001-L-Hand'); switch(deadlybombstate) { case DS_INITAIL: //freeze bomb and attach bomb to bomb's hand deadlybomb.Velocity = vect(0,0,0); deadlybomb.SetLocation(BombHandLocation); break; case DS_GROWING: //make bomb bigger and bigger bombscale = deadlybomb.DrawScale; bombscale += growSpeed; deadlybomb.SetDrawScale(bombscale); //freeze bomb and attach bomb to bomb's hand deadlybomb.Velocity = vect(0,0,0); deadlybomb.SetLocation(BombHandLocation); if((StartHealthAmount - Instigator.Health) >= BreakHealthAmount) { //cast damage animation UTPawn(Instigator).PlayEmote('TakeDamage',-1, 1, false, 0.00, 2.00); VBotController(Instigator.Controller).isFinishAnim = true; deadlybombState = DS_FALLING; //`log('falling'); //drop bomb and only hurt bomber only deadlybomb.MineGravity = 1800; deadlybomb.NumBounces = 1; deadlybomb.affectEnemies = true; deadlybomb.affectVirgil = false; deadlybomb.Velocity = vect(0,0,-1); } else if( CountDown >= 0.0f) { CountDown -= DeltaTime; } else { //continue swing animation UTPawn(Instigator).PlayEmote('MeleeSwing',-1, 1, false, 0.95, 1.70); VBotController(Instigator.Controller).isFinishAnim = true; deadlybombState = DS_FLYING; //`log('flying'); //detach bomb and hurt virgil only deadlybomb.MineGravity = 0; deadlybomb.affectEnemies = false; deadlybomb.affectVirgil = true; } break; case DS_FLYING: virgil = VPawn(GetALocalPlayerController().Pawn); VirgilToDeadlyBomb = virgil.Location - deadlybomb.Location; VirgilToDeadlyBomb = Normal(VirgilToDeadlyBomb); if(virgil == none) { return; } else { deadlybomb.Velocity += VirgilToDeadlyBomb * 100; } break; case DS_FALLING: //drop bomb //Shutdown(); break; default: break; } }
The third ability was summoning a growing bomb then throw at the player. The player needed to make certain amount of damage to warden bomber while the bomb was growing. If the player made enough damage, the growing bomb will drop and hurt the warden instead of throwing at the player. I attached the growing bomb to the warden bomber's hand and used tick() function to scale the size of growing bomb overtime.
Shadow World - Intro Cut-scene of Final Boss
In this cut-scene, the final boss slowly walked toward Virgil then started the final battle. The moving forward animation was a running animation, and there was no walking animation in Voodudes. I took Virgil's moving backward animation and played it reversely to make it looks like a walking forward animation.
I also applied animation-blending in this cut-scene. Thanks for our talented game designer, Jordon Trebas, sharing and teaching this trick to our team. When Virgil woke up from ground, it was reversely playing a part of Virgil's death animation. When Virgil looked around the place, it was also a part of Virgil's death animation.