Jump to content

Chris Vossen

Members
  • Posts

    688
  • Joined

  • Last visited

Blog Entries posted by Chris Vossen

  1. Chris Vossen
    An in-depth look at a basic Third person camera.
     

    Script.target = nil--Entity "Target"
    Script.distance = 5--float
    Script.debugphysics = false--bool
    Script.debugnavigation = false--bool
    Script.pitch = 35--float
    Script.angle = 180--float
    Script.pickradius = 0.5--float
    Script.verticaloffset = 1.8--float
    Script.smoothness = 30--int
     
    function Script:Start()
    if self.target==nil then return end
     
    --debug functions for viewing physics or navigation in game
    self.entity:SetDebugPhysicsMode(self.debugphysics)
    self.entity:SetDebugNavigationMode(self.debugnavigation)
     
    end
    function Script:UpdatePhysics()
     
    --Exit the function if the target entity doesn't exist
    if self.target==nil then return end
     
    local originalcamerapos = self.entity:GetPosition(true)
    local targetpos = self.target:GetPosition(true)
    local newcamerapos = self.target:GetPosition(true)
    targetpos.y = targetpos.y+self.verticaloffset
    self.entity:SetPosition(targetpos)
    self.entity:SetRotation(self.target:GetRotation(true))
    self.entity:Turn(self.pitch,self.angle,0)
    self.entity:Move(0,0,-self.distance)
     
    local targetpickmode = self.target:GetPickMode()
    self.target:SetPickMode(0) --so that the pick doesn't hit the target
    newcamerapos = self.entity:GetPosition()
    local pickinfo = PickInfo()
    if (App.world:Pick(targetpos,self.entity:GetPosition(),pickinfo,self.pickradius,true)) then
    newcamerapos = pickinfo.position
    end
    newcamerapos.x = Math:Curve(originalcamerapos.x,newcamerapos.x,self.smoothness/Time:GetSpeed())
    newcamerapos.y = Math:Curve(originalcamerapos.y,newcamerapos.y,self.smoothness/Time:GetSpeed())
    newcamerapos.z = Math:Curve(originalcamerapos.z,newcamerapos.z,self.smoothness/Time:GetSpeed())
    self.entity:SetPosition(newcamerapos)
    self.target:SetPickMode(targetpickmode)--return pick mode to original value
    end

     
     
    At the top of the code I start off by declaring a set of script variables that will be used throughout the code:
     

    Script.target = nil--Entity "Target"
    Script.distance = 5--float
    Script.debugphysics = false--bool
    Script.debugnavigation = false--bool
    Script.pitch = 35--float
    Script.angle = 180--float
    Script.pickradius = 0.5--float
    Script.verticaloffset = 1.8--float
    Script.smoothness = 30--int

     
    Notice that these declarations all have a "--" followed by a type "float, bool, Entity, int" these are extra parameters that will make the variables appear in the engine:
     

     
    target: The target entity that the camera will follow.
    distance: The default Z distance the camera will follow behind the target.
    debugphysics & debugnavigation: Handy debug settings.
    pitch: The pitch angle the camera will be facing.
    angle: The angle that the character controller is rotated to.
    pickradius: The width of the raycast that will check if there are objects between the camera and target
    verticaloffset: The height of the camera offset.
    smoothness: How smooth the camera will be when moving between positions.
     

    function Script:Start()
    if self.target==nil then return end
    --debug functions for viewing physics or navigation in game
    self.entity:SetDebugPhysicsMode(self.debugphysics)
    self.entity:SetDebugNavigationMode(self.debugnavigation)
    end

     
     
    The start function is called once when the script is loaded and should be used to initialize variables. Here I check to make sure there is a target and then do 2 function calls to camera debug modes.
     

    function Script:UpdatePhysics()
    --Exit the function if the target entity doesn't exist
    if self.target==nil then return end
    local originalcamerapos = self.entity:GetPosition(true)
    local targetpos = self.target:GetPosition(true)
    local newcamerapos = self.target:GetPosition(true)
    targetpos.y = targetpos.y+self.verticaloffset
    self.entity:SetPosition(targetpos)
    self.entity:SetRotation(self.target:GetRotation(true))
    self.entity:Turn(self.pitch,self.angle,0)
    self.entity:Move(0,0,-self.distance)
    local targetpickmode = self.target:GetPickMode()
    self.target:SetPickMode(0) --so that the pick doesn't hit the target
    newcamerapos = self.entity:GetPosition()
    local pickinfo = PickInfo()
    if (App.world:Pick(targetpos,self.entity:GetPosition(),pickinfo,self.pickradius,true)) then
    newcamerapos = pickinfo.position
    end
    newcamerapos.x = Math:Curve(originalcamerapos.x,newcamerapos.x,self.smoothness/Time:GetSpeed())
    newcamerapos.y = Math:Curve(originalcamerapos.y,newcamerapos.y,self.smoothness/Time:GetSpeed())
    newcamerapos.z = Math:Curve(originalcamerapos.z,newcamerapos.z,self.smoothness/Time:GetSpeed())
    self.entity:SetPosition(newcamerapos)
    self.target:SetPickMode(targetpickmode)--return pick mode to original value
    end

     
     
     
    The update physics section is where the magic happens, this function is called with every physics update.
     

    --Exit the function if the target entity doesn't exist
    if self.target==nil then return end

     
    First I check again that a target entity actually exists. I do this just in case the target entity gets deleted at some point during the game, so that you wont be referencing a nil value later on.
     

     
    local originalcamerapos = self.entity:GetPosition(true)
    local targetpos = self.target:GetPosition(true)
    local newcamerapos = self.target:GetPosition(true)

     
    Three local variables are declared:
    originalcamerapos: This will hold the original position of the camera and will be used in the smoothing function later on.
    targetpos: This variable holds the position of the target entity.
    newcamerapos: This variable will hold position of the next location a camera will be at.
     

    targetpos.y = targetpos.y+self.verticaloffset

     
    You want the camera to be positioned above the target character so you add the verticaloffset to targetpos.y
     
     

     
    self.entity:SetPosition(targetpos)
    self.entity:SetRotation(self.target:GetRotation(true))
    self.entity:Turn(self.pitch,self.angle,0)
    self.entity:Move(0,0,-self.distance)

     
    These 4 function calls are awesome and are all that are needed to set the camera to a third person view.
     
    1. You put the camera in the same position of the target.
     

    self.entity:SetPosition(targetpos)

    2. You rotate the camera to the same rotation as the target
     

    self.entity:SetRotation(self.target:GetRotation(true))

    3.Tilt the camera.
     

    self.entity:Turn(self.pitch,self.angle,0)

    4.Move the camera backwards along its local z axis.
     

    self.entity:Move(0,0,-self.distance)

     
    Now the camera is in the correct position, in a perfect world this is all that you would need... but sometimes walls or pillars will come in between the camera and the target blocking the cameras view and that is not cool at all. Luckily we can fix that with picking (a raycast)!
     
     

     
    local targetpickmode = self.target:GetPickMode()
    self.target:SetPickMode(0) --so that the pick doesn't hit the target
    newcamerapos = self.entity:GetPosition()
     
    if (App.world:Pick(targetpos,self.entity:GetPosition(),pickinfo,self.pickradius,true)) then
    newcamerapos = pickinfo.position
    end

     
    First off we don't want our raycast to hit the target so we set the target pickmode to 0, but since other functions in the game might want to hit the target entity with a raycast we first need to save the original pickmode and reset it after our ray cast.
     
    We also set the newcamerapos to the entities current position, this is for smoothing later.
     
     

    local targetpickmode = self.target:GetPickMode()
    self.target:SetPickMode(0) --so that the pick doesn't hit the target
    newcamerapos = self.entity:GetPosition()

     
    Now the fun starts. To understand this code you need to understand how the pick function works.
     
    Imagine a scene where there is a wall between the player and the camera:
     

     
    If I was playing this game I'd be pissed because I couldn't see my player all I could see is a wall!
     
    So we do a raycast from the target to camera and check if anything is in the way:
     

     
    Then we move the camera in front of the first thing the ray hits:
     

     
     
    Just as in the lovely pictures, you can perform the same thing in code:
     

    local pickinfo = PickInfo()
     
    if (App.world:Pick(targetpos,self.entity:GetPosition(),pickinfo,self.pickradius,true)) then
    newcamerapos = pickinfo.position
    end

     

    local pickinfo = PickInfo()

    A lightweight class that holds the information if a raycast hits an object.
     
     

    App.world:Pick(targetpos,self.entity:GetPosition(),pickinfo,self.pickradius,true)

     
    Does the raycast from the target to the camera (self.entity:GetPosition) pickradius is the radius of the ray, and true means return the 1st object hit.
     
     

    if (App.world:Pick(targetpos,self.entity:GetPosition(),pickinfo,self.pickradius,true)) then
    newcamerapos = pickinfo.position
    end

     
    If an object is hit, then set the camera's new position in front of that object.
     
     
    The final thing we need to do is to smooth the camera movements so that it doesn't jump around and make users sick.
     

    newcamerapos.x = Math:Curve(originalcamerapos.x,newcamerapos.x,self.smoothness/Time:GetSpeed())
    newcamerapos.y = Math:Curve(originalcamerapos.y,newcamerapos.y,self.smoothness/Time:GetSpeed())
    newcamerapos.z = Math:Curve(originalcamerapos.z,newcamerapos.z,self.smoothness/Time:GetSpeed())
    self.entity:SetPosition(newcamerapos)
    self.target:SetPickMode(targetpickmode)--return pick mode to original value
    end

     
    We call Math::Curve which takes two numbers (the new camera position and the original camera position) and will return a division based on the smoothness. Basically it breaks the camera movement into a bunch of little steps instead of a big jump.
     
    For example if your camera had an x value of 0 and the next position was supposed to be at 100, if you just set the position to 100 the user would notice a large jump. but Math:Curve(0,100,10) would break the distance into 10 chunks meaning that instead of a 100 the camera would go to 10, on the first update then to 20, then 30.... basically it would be smoother.
     
    Finally we set the pickmode back to it's original value in case a different raycast wants to hit the target.
     
    And there you have it, a step by step explanation of the 3rd person camera.
  2. Chris Vossen
    A tutorial for creating map with a goblin that has third person controls and a third person camera
     
    1. Create a new project.
     
    Inside the LE3 editor open up the leadwerks project manager click File->Project Manager
     

     
    Once open click "new" select "Lua" project, add a title, and click "Ok".
     
    Select your newly created project and click "Ok"
     
    2. Create a platform for the goblin to stand on.
     
    In a 2d viewport drag-out a box to be used as a platform.
     

     
    3. Add a material to the platform.
     
    In the assest browser open up the material->developer folder and drag and drop bluegrid.mat onto the platform.
     

     
     
    4. Add the goblin model from Darkness Awaits to the new project.
     
    Using your file browser navigate to the Darkness Awaits goblin model folder (C:\Leadwerks\Projects\DarknessAwaits\Models\Characters) and copy the goblin folder into your new project.
     

     

     
     
    5. Drag and drop the goblin into the map
     
    In the asset browser open up models->goblin. Click on the goblin.mdl icon and drag it into the scene.
     

     
     
    6. Set the goblins position and rename it
     
    In the Scene browser select SKIN_MESH and change its position to 0,0,0 and change the name to Goblin.
     

     
    7. Setup the goblin's physics properties
     
    With the goblin still selected in the scene browser, click on the Physics tab.
    Change Physics Mode to "Character Controller"
    Mass to 1.0
    Collision Type to "Character"
    Character Rotation to 180. (The default model facing is towards the positive Z axis, the goblin model was created facing the negative z axis so you have to rotate the character controller to match the model)
     

     
    8. Add in a camera
     
    In the Object browser select Miscellaneous for object and camera for type. Click in a 2d viewport and click Create (or hit enter).
     

     
    9. Download Scripts
     
    Download the 3rdPersonMovements.Lua and 3rdPersonCamera.Lua
    http://www.leadwerks...-person-camera/
    http://www.leadwerks...erson-controls/
     
    Save these files into your projects script folder (or drag and drop into the asset browser)
     
    10. Attach Scripts to goblin.
     
    In the Scene browser, right click on the goblin and select "Add Script"
     

     
    Browse to the 3rdPersonMovements.Lua and click okay
     

     
    Once again right click on the goblin, select "Add Script" and in the Scripts/Animations folder select AnimationManager.lua
     
    11. Attach Scripts to camera.
     
    In the Scene browser, right click on the camera and select "Add Script"
     
    Browse to 3rdPersonCamera.Lua and click okay.
     
    12. Setup the 3rd Person Camera target.
     
    In the scene browser, left click on camera then click on the 3rdpersoncamera tab.
     
    now drag and drop the goblin into the camera's target field.
     

     
    13. Click run
     
    On the tool bar click on the run icon, or Game->Run, or press F6 on your keyboard.
     

     
     
    14. Run around!
     
    Using the W and S keys move the goblin forward and backward or rotate with the A and D keys.
  3. Chris Vossen
    Hello Leadwerks Community!
     
    In the game industry everyone is always shuffling around between companies as projects reach different stages of development. Since my senior year of college I have been striving to get on board a production team. So, when Telltale offered me a production internship I jumped at the chance.
     
    One of my favorite parts of the transition is that Telltale uses Lua as their scripting language so if I ever run into a production problem that involves scripting I could always jump in and investigate their code!
     
    I loved my time at Leadwerks from day drinking with Josh while coding to running our GDC booth. It has been truly amazing.
     
    I also wanted to say farewell to the Leadwerks community, you guys have been the most intelligent and professional online community I have ever seen and without you guys Leadwerks would not exist.
     
    Thank you all for all the content that you've put up. Seeing games created with the engine make it all worth while.
     
    Farewell for now (I am still constantly going check the blogs),
    Chris Vossen
     
    P.S.
    I can't wait to see Leadwerks on Steam and all the future games that are going to come out of LE3!
  4. Chris Vossen
    Between the release of LE3 and the GDC, life at Leadwerks has been busy to say the least. Now that things have settled down (a little) it is time for something that I have been looking forward to for a while: Tutorials!
     
    At GDC we were constantly talking about the power and flexibility that direct native code programming allows and how users are not locked into only component based programming. But then you look at the example game Darkness Awaits and see only component based programming and just Lua scripts....
     
    It's time to right these wrongs.
     
    A comprehensive series of tutorials are underway that will teach how to use the many tools of the engine as well as demonstrate the capabilities of direct native code programming.
     
    This series is currently in the design phase and I am working with universities to make sure that the tutorials not only teach the engine but also cover key game development topics.
     
    Here are a few high level design points for the tutorials:
    Teach the engine and its tools
    C++ programming
    First Person Shooter

    As always I'd love to hear suggestions and ideas! I'll keep updates coming as tutorial development ramps up!
  5. Chris Vossen
    For those of you who are more familiar with C style syntax here are a few oddities that initially threw me off:
     
    The not equals in lua has a tilde

    self.entity ~= nil
     
    if you want to "not" a boolean you have to use the keyword "not"

    if not self.target then
     
    All "if" statements you have to do include 3 keywords if, then, end

    if self.stunned==true then return end
     
    While loops have 3 keywords while, do, end

    While x < 10 do x = x+1 end
     
    This is what a for loop looks like:

    for i = 0, 10, 2 do print ( i ) end
     
    in C that same for loop would be:

    for (i = 0; i <= 10, i += 2) { printf("%d \n",i); }
     
    Notice in the Lua for loop that exit condition is always less than or equal to <= so be careful!
     
    There are no +=, -=, /=, or *= in lua
     
    String concatenation is ".." rather than +
     
    There is no need to end each line with a semicolon although it can be used to break up lines of code. This way you don't have to dedicate a whole line to a small declaration.

    x = 10 ; y = 10;
     
    Lua uses tables for everything, instead of arrays and maps. (A table is basically a map though..)
     
    tables are declared with {}

    Script.state={}
     
    you can add specific keys and values to this table by:

    Script.state.idle=0 Script.state.walk=1 Script.state.chase=2 Script.state.attack=3 Script.state.hurt=4 Script.state.dying=5 Script.state.dead=6
     
    Then if you want to know the size of the table use the symbol #

    #self.state
    will return 7
     
    In Darkness awaits I always use the short hand function call.

    Time:GetCurrent()
    This is expanded to the long hand: (I think this is the correct syntax)

    Time.GetCurrent(Time)
    The short hand is cleaner but when you get an error in one of the parameters the debugger will be wrong in the argument number. For example say you called gotopoint with too many arguments (there should only be 5 not 6

    self.entity:GoToPoint(20,2,0,0,1.4,1)
    The debugger would complain and say "argument #7 is 'number';" and you'll think to yourself, there is no argument 7 you crazy debugger.... but this is because the function is expanded to the long hand form so it is actually calling

    self.entity.GoToPoint(self.entity,20,2,0,0,1.4,1)
    and you can see the extra argument is actually in the 7th position.
     
    Well off the top of my head these are all I can think of. I know there are more. For more in depth lua info check out: http://www.lua.org/pil/contents.html#P1
  6. Chris Vossen
    Much like many jobs, in programming there are tasks that you enjoy working on and then there are the tasks that lack joy and glory but are quite necessary. I recently began moving our project from visual studio 2008 to visual studio 2010 and well I can firmly state that this task fell into the latter category.
     
    After receiving this job, my first step was to jump right into it and use the VS 2008 to 2010 converter wizard. Everything seemed to move smoothly but being a programming pessimist, I didn’t hold my breath. When the magical wizard had finished I jumped into Visual studios 2010 and went to do a batch build of the project, the only problem was there wasn’t a “batch build” under the build options. I thought to myself: “hmm that’s weird” but then proceeded to do a single build.
     
    I started the build but then realized that I had forgotten something so I went to the build menu again and attempted to stop the build…but that feature was missing as well! At this point I realized something fishy was going on and after a quick google I discovered the problem. When installing Visual Studios 2010 express on your computer, it starts off in some sort of simplified mode called “Basic Settings” in order to reach advanced features such as stopping a build (super advance technique) you must change your settings to “Expert Settings”. So I am proud to announce that I believe I am now an expert because have the need to stop build and perform batch builds…I feel so cool.
     

     
    To make a long story short, on Friday I succeeded in getting the debug and release dll’s and libraries to build. This means we are a large step closer to supporting visual studios 2010 for all the experts out there.
  7. Chris Vossen
    As the summer heat begins to taper off, testing on the new engine has taken the driver seat. My first task when transitioning from particles to QA was something along the lines of "Make a scene with a character and an enemy, then make the character be animated and have the enemy chase the character"
     
    One rectangle primitive, one camera, two character controllers, two models, and 5 Lua scripts later I sat in front of a completed task:
     

     
    I sat at my desk, looked around, then decided to play with the CSG modeling a little bit longer... I just wanted to add a few obstacles, but then obstacles led to making a bridge, which led to making moving platforms, then you can't have moving platforms without jumping..... needless to say my simple test scene quickly devolved into a flying deer farting dust rainbow being chased around a level by a teapot that vacuumed up the rainbow.
     
    Basically this is what Josh saw when he looked over my shoulder:
     

     
    As you can see there are a few issues to be taken care of, but the testing will keep chugging along (just as long as I stop playing the magical deer and teapot scene)!
  8. Chris Vossen
    On the previous episode of the “Leadwerks3D particle show” a Nyan Cat / Colored Printer of Death roamed the land showing off the difference between RGB and HSV color interpolation. Well jump forward to today’s episode and that cat is now dead…or perhaps I should say has matured into a more complex and quite simply cooler particle system.
     
    I’m still not finished with all of my work but here is a quick look at few particle effects I’ve tinkered with:
     



     
    I'm so disappointed that I don't have Fraps on my work desktop because this sphere of electricity looks pretty cool live.
     




     
    A classic waterfall
     







     
    Since we live so close to the Folsom Prison, I thought we should channel some Johnny Cash and throw in a burning ring of fire (technically a torus).
     
     




     
    This is just a blob of particles really, but I stumbled upon it while trying to create something else and thought it looked cool.
     
    That's all for now, more updates will come as the project gains speed!
  9. Chris Vossen
    Like many college students, part of my time at UC Santa Cruz was spent visiting a variety of fine local establishments perusing their beverage assortments and discussing deep philosophical ideals with enlightened patrons.
     



     

    (Me at an art meeting, the day after a night of enlightenment.)


     
    Okay I’ll admit it, I went to bars and talked to girls (Give me a minute this story is going somewhere relevant). The easiest small talk to make in a college town is to ask someone about their major and every time I would meet someone for the first time this question would pop up. Now my major was Computer Science: Game Design and I was always timid to admit this to girls. So instead I would say that “I’m a business major” and immediately ask them their major to silence any further questions.
     



     
    I realize that lying is bad and every PBS show I watched growing up tried to teach me to “be myself” (Thank you Mr. Rogers and Wishbone) but for some reason I was scared of the taboo behind playing and making videogames.
     
    That is until one faithful night when I finally admitted to being a “Games major.” I braced myself for the reaction I expected: a look of disgust? Laughter? Silence? The cold shoulder? A drink tossed in my face? Instead I got “OMG, I was addicted to the Sims for years!” Surprised but happy, we went on to talk about her years of playing The Sims and the families she made and how much fun she had and it was wonderful.
     




    (My summoner name is too inappropriate for the work place)


     
    The dirty little secret of games is that everyone plays them! Sure not everyone is trying to climb the ranked ladder in League of Legends (currently at 1635 ELO and climbing) or going to a midnight release of Diablo III and missing the next day of work (Josh I might randomly be sick on Tuesday May 15th…) but everyone plays something and has memories associated with their experience.
     
    My goal in game development is to one day have someone say “Of course I know that game, it was the first game I ever stayed up playing all night with my friends!” Because our job as developers is not to release “a product.” No, instead it's our job to create. Worlds. Stories. Fun. Challenges. Memories. We create.
  10. Chris Vossen
    Anyone who peruses the forums regularly might have noticed a fresh new intern posting a particle system feature request thread. That intern, who shall remain nameless, was ready to tackle the task of aiding in the creation of a rich particle system that was both powerful and intuitive to users. That was over a month ago… in that time I have been sidetracked with other more important and pertinent tasks but I’m proud to finally admit that the “Super Awesome Chris Particle System of Awesomeness +3” or SACPSA+3 (please note: this name has not yet been officially approved by Josh) is finally underway.
     
    In the spirit of spring time, I decided to start off by working on particles that change colors. Colors are interesting because just like numbers, they have different coordinate systems: RGB, HSL, and HSV being the most common (in my experience).
     
    RGB or Red, Green, Blue is the most widely known system and is usually represented using values that range between 0 and 255. The lovely cube below shows the relationship between RGB values.





    HSV or Hue, Saturation, Value is a cylindrical coordinate system (shown above) and is represented using values between 0-100% for Saturation and Value, and 0-360 degrees for the Hue.


     

    Why does this all matter? Well when you’re iterating from a starting color to a final color there is a vast difference between RGB and HSV.
     
    For example say you wanted the particle to start as red and end as blue. The RGB path leads from red to pink to blue, while the HSV path goes: red, orange, yellow, green, blue (like a rainbow).



     



     
    The resulting particle systems are as shown:
     





    RGB






    HSV


     
    I’ve found that in the end of the day, the choice between particles changing color according to RGB or HSV falls to how the user wants the particle effect to look. I can’t wait to see how people use the changing colors in their games (fireworks, fireballs, teleporters), so that means I better get back to working on the particle system! Stay tuned for more updates!
  11. Chris Vossen
    There are two types of days here at Leadwerks; days that we work and those that we werk. On werk days we hunker down at our desks, cups of caffeine in hand, and code (Unless you’re thinking… or pretending to think). Then there are work days, on these days we focus on business development: researching, planning, and occasionally field trips. So to kick off our intern hunt members of Leadwerks grabbed their sack lunches, kissed their monitors farewell, and ventured over to the Sacramento State University for some high octane presentations!
     



     
    These action packed presentations were given to students in both a game architecture course and a 3D modeling class, focusing on highlighting our four new internship openings:
     

    Programming Internship


    Assist the development team with core engine design
    Work with game development team to create a sample Leadwerks3D game
    Gain experience working in a professional software development environment
    C++ and Lua experience are a plus but not required

     

    3D Art internship


    Become proficient with the Leadwerks3D design tools
    Provide feedback to the development team to improve the art pipeline
    Assist game development team by producing 3D models, textures, animations, and game levels

     

    Web Development Internship


    Work with marketing to enhance our online identity
    Develop social features for our online community of game developers
    Foster online community relations

     

    Marketing Internship


    Author promotional materials for website, press releases, and newsletters
    Interact with the development team to communicate technical information to the public
    Enhance and promote our unique company brand

     
    We had a wonderful reception and have received an outpour of interest. The trip was well worth leaving our keyboards neglected for one day. A special thanks to everyone at Sac State and with any luck the Leadwerks intern family may be growing in the future!
  12. Chris Vossen
    There is only one word to describe the people of the gaming industry: awesome. Maybe it’s because we work on projects we love, maybe it’s the lack of sleep, it could be the countless hours we’ve spent perfecting our twitch reflexes, but I think the bottom line is we are 1337 (It’s probably because of the robe and wizard hat).
     
    This past weekend members of the Leadwerks team journeyed out to the Sacramento Game Developers Meetup Group http://www.meetup.com/gamedeveloper/ to rub elbows with the local game dev community.
     

     
    The meeting kicked off with a presentation by Robert H. Oats III (pictured above) the associate technical director at Bioware Sacramento. Robert gave a refreshingly unedited account of his time in the game industry reciting stories of his career path which started at Gas Powered Games, moved to Telltale, and ended up at Klicknation which was acquired by EA and given to Bioware.
     

     
    After the presentation finished, came a brief Q & A session in which Robert offered advice on a myriad of subjects ranging from “What questions do you ask in an interview?” to “What is it like working for EA?” My favorite question came from my boss Josh when he inquired “Do you ever regret hiring an employee” this is not a question you want to hear your boss ask when you are the newest intern. Josh later assured me this question was not directed towards me but it certainly made me smile during the QA session.
     
    Overall it was a great group of game developers talking about their personal projects and a fun a welcoming community. Basically game developers rock.
  13. Chris Vossen
    In the recent weeks Leadwerks has leveled up by joining the Sacramento State University Center for Entrepreneurship (CBA) and after much scanning of the talent tree, Leadwerks has recruited a new intern.
     
    With that, I am proud to introduce myself (the intern) to the Leadwerks Community. My name is Chris Vossen, I am a recent graduate from the University of California: Santa Cruz with a Bachelors of Science in Computer Science: Computer Game Design. During my senior year, five programmers and I joined up to create Journey to the Sun (JTTS) a three player puzzle adventure game for the PC. By the end of the year, our team had expanded to twenty three members (6 programmers, 13 artists, 4 sound designers) and we went on to win the UCSC game awards for audience choice and best audio. When I wasn’t wrangling artists, I was in charge of our games AI, pathing, particle effects, and designed half of the levels. It was an amazingly fun project that will be ported to the Xbox 360’s Indie Game section in the month to come. Here is a brief look at JTTS:
     

     
    It is such a pleasure to be aboard the Leadwerks team; I have only been here for one week and my brain already hurts. It will be a challenge to uphold the high coding standards set, but I’ve never been one to give up.
     
    My first of many tasks will be implementing a mind blowing particle system. Particle effects hold a special place in my heart, to me they are the glitter of videogames. Don’t have a 3D model for your enemy? Make it a particle effect smoke monster! Characters punch animation looks off? Throw a crazy particle effect in to cover it up! Trees look bland? Make a falling leaf particle effect! I cannot count the number of times my team used particle effects to add a burst of magic to our game.
    I am currently researching existing particle engines and finding a load of fun features to implement but I would love suggestions and input into what other users find exciting. Please post these on the particle systems’ feature request page:
     
    http://www.leadwerks.com/werkspace/topic/4687-particle-systems-feature-requests/
     
    I have been an avid gamer my entire life. As a child my parents were adamant in their stance of “We will never buy our kids videogames.” Thus my gaming career began on my uncle’s hand-me-down Atari 2600 playing endless hours of River Raid, Combat, Pitfall, and Warlords. Then one faithful day in 1991 my parents purchased a one dollar raffle ticket for a school fundraiser with an unknown prize and gave the ticket to my older brother. Little did they know that the grand prize was a new Sega Genesis with a copy of Sonic the Hedgehog and as fate would have it my brother won that raffle. Ever since then my path has been set. Videogames are my career now and I would have it no other way. It is amazing to be here working at Leadwerks and I’m excited to hear from anyone and everyone in the community!
     
     
     
    Favorite Games:
    League of Legends (MOBA) [My main champion is Janna…the power of the wind]
    Hero’s of Might and Magic III (Strategy RPG)
    Flying Dragon 64 (Fighting)
    Super Smash Brothers Melee (Fighting)
    Gladius (Strategy RPG)
    Perfect Dark (FPS)
    Ogre Battle 64 (Strategy RPG)
    Shinning Force (Strategy RPG)
    River Raid (Best Atari Game)
×
×
  • Create New...