And boy was I wrong. One of the first things I had to do on the job there was dive into the FIFA Online 2 source code and documentation. That’s more than 400,000 lines of C++ code with lots of proprietary subsystems to support the game, a nebulous implementation to say the least. It was a very daunting task, even till the end of my internship, I only managed a rough understanding of just the major parts of the code.
But one has to admire the technical achievement of those 400,000 lines of code. FIFA Online 2 is a networked game for up to 6 concurrent players that could run consistently at 30 frames per second. I’ve taken CS4344 (Networked and Mobile Gaming) before, and in that module you learn about many techniques for making games perform correctly in a networked environment, and it is no easy task at all. And although FIFA Online 2 shares many similarities with its console siblings, deep inside, it’s a different beast altogether because of these online constraints. Making a game like FIFA Online in a best-effort communications environment like the internet, meant that a lot of mechanisms had to go into the game to make it resilient to network delays and loss events. And it’s not just about coping with the characteristics of a network, it’s also about 400,000 lines of code running in REAL-TIME. I don’t know about you, but that’s a feat of engineering to me.
A lot of my time at EA is about absorbing all that engineering innovation that went into the product and applying them to the things I did. I worked on a couple of In-House tools, created my own custom builds of the game, designed a small code library for tool development, unified 2 different database access technologies under a single library, and I even started a Wiki server for documentation. So as you can tell, all that involved a spectrum of development skills. I’ve added a couple of videos to give you a better idea of what FIFA Online 2 is about.
To further illustrate, my company has graciously given me permission to talk about one particular in-house tool I did at EA. And we call it the FIFA Asset Verification Tool. A tool for ensuring that assets were correctly integrated into the game. Assets, by the way, are game dev lingo for artwork, 3D models in this case, and the studio has a rather complicated asset pipeline that turned the Maya artwork that the artists did into resources that were loaded by the game. Often artists needed to verify their work in the game and before this tool it was a rather cumbersome process. Furthermore, they couldn’t mix and match soccer players with various team uniforms and animations.
The tool exposed many hidden functions in the game by loading a custom-built DLL of the game and initializing the various database, rendering and animation subsystems to generate what you see in my screenshot. From a technical perspective, this tool involved:
- Win32 Programming
- Software Engineering
- Code-reuse via the concept of DLLs
- Software design that enabled 2 separate applications to work together
- Advanced C++ programming.
- Code-reuse via the concept of DLLs
- Working with EA proprietary subsystems for Rendering and Animation.
- Some Computer Graphics
- ODBC and EA Proprietary Database access.
If I were to map those fundamentals into the modules we learnt in school, here’s what I believe geared me for my internship:
- Software Engineering (CS2103)
- Database Systems (CS2102)
- Computer Networks (CS2105)
- Operating Systems (CS2106)
- Computer Graphics (CS3241)
- Game Development (CS4343)
- Networked and Mobile Gaming (CS4344)
In summary, here are the key takeaways from my post about the internship.
- Self-paced learning approach
- Unfettered access to source code and EA technology
- Learn and apply things not encountered in school.
- Windows Programming
- Software Engineering Practices in terms of code reuse and library design
- Game Architecture and Networked Gaming design
- Advanced C++
- Shijun
No comments:
Post a Comment