Carnero is a FPS, action-platform, single player game.

  • Game Engine: Unreal Development Kit
  • Platform: PC/Mac, and devices that can use UDK
  • Programming Language: UnrealScript, C++ and Flash
  • Additional Support: nFringe
  • # of Players: 1
  • Genre: FPS, Action-Adventure. platformer
  • Trailer

Bryan O’Hara – Designer/QA
Thomas Triplet – Designer/QA
Alison Seffels – Producer/Designer/QA
Craig Ellsworth – Designer/QA
Steve Beaulieu – Programmer
Evan Burrill – Artist
Cory Livingston – Designer/QA
Eric Nardo – Artist
Corey Moore – Designer/QA
Keith Tatarczuk – Artist
Chris Cheng – Programmer

The goal of Carnero is to navigate the hero, Kurt, through a dangerous ship filled with killer robots and defeat a crazed A.I core. Kurt’s weapon of choice is a salvage gun that can dispute and tear metallic material. This is Kurt’s main method to defeat the robots, but not his only option. While on the ship, you have access to different environmental controls through your own A.I ally, Eli, to out move, trick and defeat your robot pursuers. Eli can change room temperatures to freeze enemies and structures, overheat robots, and change the polarity of certain components.

The Salvage Gun
-Kurt starts off the game with his basic model Salvage gun, it only has one function, the smelting beam. The beam does damage to enemies and can push certain away for some distance; it can be used to break structures to open up access points and break objects that can trick or crush robots.
-Holding down the fire button will release a constant stream of beam, but could also be shot in burst if pressed quick enough.
-During Kurt’s adventure, he finds a second Salvage gun, Vera, and it will replace his basic model.
-Vera has a secondary function that launches a attraction orb that draws the attention of robots.The attraction orb allows Kurt to trick the robots to chase it instead of himself, and set up opportunities to lure the robots to certain locations to ambush them.
-The orb uses a different set of power aside from the beam attack, and the orb dissipates over time.
-The basic model and Vera model does not use ammunition, but recharges over time.

The Enemies
-Sentential robots: these robot, once encountering Kurt, will be in attack mode and attempt to follow the player until either blocked, lost or destroyed. Before encountering the player, they are static in nature and do not move.
-Patrolling robots: these move between two or three assigned points constantly, if they see Kurt the will be in attack mode. If they lose the player, they will attempt to return to their patrol pattern. Patrol robots will alert surrounding robots to be in attack mode. Patrollers can be deadly for a player attempting to sneak past a group of enemies.
-Worker Robots: these robots have been program to transport gold. Following these robots will lead Kurt closer to his goal, but be careful, this robots will defend their cargo and will be guarded by other robots.

Environmental Control
Environmental Control is your most powerful tool for survival in this ship. It is the difference between you and all the poor fools that are now chop-meat for the swarms. The ship houses a powerful environmental system that allows for the dynamic control of the environment of any storage hanger. Your AI is plugged into the ship’s core and can control these systems at your command. Over the course of the game, the player will learn to master multiple types of environments:
Magnetic Floors
Magnetic floors slow down any susceptible enemies, making them easier to avoid and target. Magnetic floors, however, also slow down the player. Magnetic floors do not affect enemies or the player when they are not touching the floor. Magnetic floors are displayed by a green “glow” emitted at floor level.
Heat raises the room’s temperature to beyond normal human limits. Heat causes most robots to be more vulnerable to damage and to Kurt. A heated room turns red to the player’s vision.
Cold causes Robots types to deal less damage and slows down movement. Best used when enemies are close and being attacked is likely. Some structures will freeze motion completely. Cooling down the room adds a blue tint to it.

Win/Lose State
-Win: Find the gold, get off the ship.
-Lose: Health is completely depleted.

Author’s Note:
I spent quite a long time working on weapons in this game; countless hours searching through default UDK files to study and replicate code that made our gun’s behave the way we wanted it. I took the designed from the original LinkGun that came with UDK and began to modify it in minor ways first. I tackled the different gun effects such as laser colors, sound effects and damage effects to give me a sense of how the code flows and the difficulties of the UnrealScript. I had to “Frankenstein” code to get the LinkGun to have a secondary function like a grenade launcher to shoot out the attraction orb. I had to enable secondary fire to be a “grenade class” and then remove some of the default properties(damage radius, explosion count down, and gravity effects) Additional properties also assigned which surfaces the orb can stick to and how the orb change’s the AI of the enemies. And lastly, I had to calibrate recharge rates and anti-spamming weapons so players can’t over use either the beam or orb.

Using Ammo and Recharge Ammo Code:
The Salvage gun uses energy to create a laser beam (and later an orb) to be used on different environments and enemies. Using the salvage gun will consume a reserve of energy that will recharge over time (About 0.10 nano seconds after the last click of the primary fire button).
Consume Beam Ammo

function ConsumeBeamAmmo(float Amount)
{//PartialAmmo = Left over ammo
PartialAmmo += Amount;
if (PartialAmmo >= 1.0)
{//Ammo usage, take away ammo
PartialAmmo -= int(PartialAmmo);
if (AmmoCount<= 0 && IsFiring())  {//IsFiring checks to see if a gun has fired. Responses in a True or False. StopFire(1);//The function that cancels fire, 1 means primary. UnLink(); //Disconnects the beam from weapon to target. TurnOffBeam = true; //Turn of the visible beam. } }

Consume ammo has two functions: 1) Use available ammo 2) Stop the Weapon when ammo is all consumed. PartialAmmo is checked to see if there is any ammo left, and if there is, then it will be used. Also, PartialAmmo is also related to AmmoCount. If there isn’t any AmmoCount left (Also no PartialAmmo available) then stop the firing sequence, along with any additional effects.
Recharge Function

function RechargeAmmo()
if (AmmoCount < MaxAmmoCount)//Checks the count first
AmmoCount += 1;//Add one ammo back to the total
if (AmmoCount < MaxAmmoCount)//Again for any changes
SetTimer(RechargeRate+0.10, false, ‘RechargeAmmo’);
}//SetTimer is the internal counter
}//RechargeRate is a global variable and adds times back
}//Then calls itself to check again.

RechargeAmmo checks to see if the current ammo count is less than total ammo count (MaxAmmoCount). When the a single (or more) count of ammo used, +1 ammo will be added. The function RechargeAmmo is constantly checking if the weapon needs to be recharge, so it will be called a few times by weapon code.
Complete Sample Code:

Original code from Unreal Development Kit:

My version of the code:

Here are two weapon files from the game, one original UDK LinkGun file, and the file that I wrote. Please feel take a look and find anything useful in the future with what I created.