Showing posts with label Bruce Chia. Show all posts
Showing posts with label Bruce Chia. Show all posts

Friday, December 26, 2008

Tips on how to get into the Game Industry

Today will probably be my last post.  So to round everything up, I've decided to post about getting into the Games Industry.  This is targetted to everyone, whether you are from SOC or not, as long as you are interested in joining the Games Industry.

For starters, I'll give the Top 5 Reasons to join the industry:(in no particular order)
  1. You want to challenge yourself with something new everyday in your job.
  2. You feel a sense of accomplishment when you see your game coming together with materials from your colleagues (be it artists or sound engineers or other coders).
  3. You feel great when people say your game is a great game and you know they are not lying.
  4. You want to make people happy.
  5. You like the freedom of coming up with creative solutions to problems.

And now the Top 5 Reasons why NOT to join the industry:(in no particular order)
  1. You want loads and loads of money. (Try becoming a lawyer, doctor, dentist, minister or join the finance sector instead. No you won't be raking in John Carmack's pay for a while.)
  2. You want to play games everyday. (Game development != Playing games)
  3. You want a slack job. (Game development is hard work! Try getting a rich spouse instead!)
  4. You think you can make fun games. (Don't think, test it! Fun cannot be defined)
  5. You want to ride on the bandwagon since the government is giving out free cash. (Save yourself the humiliation of failure from everyone else before you make the jump)

And finally 5 Steps to get yourself into the industry:
  1. Build up your portfolio, work on your own games (be it alone or with others) but make sure you complete them. Games which are half-done are almost worthless portfolio pieces because they tell your potential employer that you have no perserverence to sit through an entire project. I.e. why should they hire you if you are going to quit halfway.

  2. Build up your portfolio further. Make sure your portfolio shows your potential employer what you're interested in. Is it game programming or art or others? I can't emphasize enough how important a portfolio is, which is why I created a separate point altogether to make it important! If it is programming, are you interested in graphics or AI or something else? The more areas that you can cover the better but at the same time, make sure your portfolio is not a never-ending list. Pick the best few of your works and place them there to impress!

  3. Write a resume to include the great portfolio that you've done in step 1 and 2. If you don't know how to write one, go find out! Don't list your grades if they are terrible (Oh yes, I have seen resumes that do that!). Keep ALL your achievements within 2 pages. If you exceed more than 2 pages, it means you have something less important to take out. If you disagree with me, don't say I didn't warn you. Don't fill up 2 pages for the sake of filling up the space. Don't list your primary school achievements unless they are game development related (I'd be impressed if that were true). Listing your skills and knowledge on a 3rd page (like all the programming languages and software you know) is ok in my opinion but others may beg to differ.

  4. Keep a good working attitude. (Well this is not really something related to games but I'll try to give tips anyway.) Everyone's attitudes are different, but working attitude can be trained. Work and personal matters are best treated as two different things. Don't be too pushy. Don't be too inconfident. Think "can" before you think "cannot". Learn to communicate well and concisely.

  5. Expand your network. Alot of students seem to be afraid to go out and meet people. Knowing people in your industry is the one of the best things you can do to get yourself hired. If they know you and they think you're good, you can even bypass an interview! The Singapore Games Industry may be small but with respect to networking, that is actually a good thing. It means that you can get to know almost everyone in the industry. Getting to know people also shows that you have passion for games and it can create a great impression on others! Furthermore, it allows you to pre-select the company suited to your likings. If you know that this company works a certain way and you don't like that, don't bother sending in your resume in the first place since you probably will end up quitting. Networking is another point I can't emphasize enough.


There you go, 3 sets of 5 points each for you to digest. If you have any more questions for me, let me know in the comments below.

Lastly, I just want to add one super important point. Games are entertainment. That means game development works like all the other entertainment industry. And the characteristic with the entertainment industry is GRADES DON'T MATTER (MUCH). Sad but true... If you have a great portfolio vs someone else who has the best possible grades (CAP 5.0?) but no portfolio at all, you with the great portfolio WILL get hired any time over the other person. PORTFOLIO IS IMPORTANT.  I have to keep stressing that because a portfolio is really the beef that tells others what you can do, and not what you know. What you can do is much more important because someone else doesn't have to teach you that again. Therefore, if any of you are discouraged by NUS' CAP system, my advice to you is "don't be". But if you're doing great in the CAP system and you want to get into games, my advice to you is "that's great but get a portfolio!". If you have both a great CAP and a great portfolio, then there's basically no fight; you'll probably will get head-hunted if you did your step 5 (see above) well.

Have a great weekend!

Thursday, December 25, 2008

My christmas gift to you: Modulo, NUS timetable planner

Well I think its about time I should start talking more about NUS-related topics so that's what I'll do today.

First, I'm going to list all the modules I've taken so far since I'm slightly inspired by my friend's (shijun) list.

Legend: 
green modules are those I think are relevant for game programmers
blue modules are those I think are semi-relevant for game programmers
white modules are those I think are not relevant

Modules Title Brief Reason
MA1505 Mathematics I (Junior College Math) ^ 2
CS1104 Computer Organisation Basics of computer hardware
CS3241 Computer Graphics Basics of how to produce screen images
CS2105 Computer Networks I Basics of Networking
CS4213 Game Development I Basics of what is in a game
CS1101/S Programming Methodology Escaped this with test but useful
CS1102/S Data Structures and Algorithms I probably do not need to give a reason for this but useful
CS2103 Software Engineering Understanding of Code Structuring
CS2102S Database Systems Understanding of Databases
CS3244 Machine Learning and Neural Networks Understanding of how games can learn
CS3212 Progamming Languages Understanding of how to create a game script
CS3243 Foundations of Artificial Intelligence Understanding of how to make games smart
CS3220 Computer Architecture Understanding of modern hardware and assembly code
CS3211 Parallel and Concurrent Programming Understanding of multi-threaded game execution
CS4247 Image Synthesis and Computer Animation Understanding of Quaternions, Textures and Buffers used in games
CS3215 Software Engineering Project Understanding of team communication
CS2106 Operating Systems Understanding of what runs "behind-the-scenes"
MA1101R Linear Algebra I Useful for 3D games
ST2131 Probability Useful for games with chance or randomness
GEK1025 Reading Visual Images Related: Basics of art styles
CS2301 Business and Technical Communication Related: Basics of how to present yourself and write manuals
CS3230 Design and Analysis of Algorithms Related: Basics of creating optimal solutions
CS3248 Design of Interactive Media Related: Basics of Interactive Media Concepts
NM2101 Theories of Communications and New Media Related: Basics of media theories
GEK1519 Science of Music Related: Basics of music
SSB2212 Singapore Legal System: Implications for business Related: Basics of Singapore business law
CS4243 Computer Vision and Pattern Recognition Related: Basics of what to do with photos and webcams
CS1231 Discrete Structures Not apparently useful if it is useful
LSM1301 General Biology Not very useful for games but had to take it. Interesting though
PC1432 Physics Module: Physics II Not very useful for games but had to take it. Tough
JS2213 Popular Culture in Comtemporary Japan Personal Interest
LAJ1201 Japanese I Personal Interest
LAJ2201 Japanese II Personal Interest
NM2210 Aesthetics of New Media Personal Interest
CS3108A Computational Thinking Seminar Took to fill up my 1 UE point (out of 21 UE points)

Disclaimer: The reasons above are mine alone and do not reflect anything of the school's opinion.

I would have to say that the modules in green are the ones I find that I can apply the knowledge in my future career.  The blue ones are those which will definitely help me at one time or another since I will be having to communicate with all professions of people in my line such as artists and musicians.  The last few modules I think are mainly filler modules and I wish I could have used the time spent there to do more relevant topics.

And sorry no, you won't get to see my grades for each of them.  My main point of doing this list is so that juniors who are interested in game programming can start to plan early about what modules to take and this is list is meant to be a very brief guide about what to learn the necessary skills for game development.  Again, this is by no means the best guide and I'm sure many people may beg to differ on many aspects, but I do personally feel that what I have chosen so far in NUS is one of the better routes suited towards game programmers.


Modulo
I hate to create long posts because I know people get bored of reading by this point but I feel that I need to publicise this next project I did with any two friends as it is one of the most useful tools I have done.  They are Lim Zhan Wei and Alvin Ng Shi Jiin.  We did this program as part of the CS3243 Artificial Intelligence module in August 2006 under some supervision/consultation of our then teaching assistant Lim Yew Jin who is now working for Google America after he got his phD.  The best part of this was that we had the freedom to decide what project we should work on.

Modulo is a program which can help ALL NUS students plan their timetable (ok maybe not all with some exceptions).  It is arguable better than all NUS  timetable builders that we know as it uses Constraint Satisfaction to search for a timetable that you want.  All you need to do is to select the modules you want and click go and your timetable is optimized for you.  It retrieves information from the cors module pages and parses the html to extract out the information so that's where it may fail if cors decides to change their formats.  It includes options to keep lunch hours free, prefer late morning classes so that you do not have to wake up too early, and to maximise your free days amongst others.





I just want to comment that I've tried to contact IVLE to see if they would be interested in using the program but to my disappointment, I don't believe they ever replied.  Since I am leaving NUS soon, I think I will probably take this project down as well this July if there is no interest in integrating it to any official system.  Furthermore, I have not had the time to improve/upgrade this project and have not really modified it since two years ago and I personally don't believe that I should leave unattended trash in the internet around.  So if the above link is non-existent in half a years time, you know what happened to it.

Thanks to all those who have downloaded it and liked it.
Please post your comments below if you like someone to get this project integrated with an official school system.

Oh.. And Merry Christmas!
(Sorry about the two year old gift. I'm sure you'll like it though.)

Wednesday, December 24, 2008

AudiOdyssey: First accessible game using Wii Remote

Today I shall introduce the game that I worked on in my gambit internship last summer.

AudiOdyssey, the first game which uses a Wii Remote made for both the visually handicapped (including the colour-blind and the blind) and the sighted .  In the game, you play as a DJ, attempting to synchronize different rhythms to build up your song on the dance floor via a beat-matching mechanic.  That is, you have to swing the Wii Remote at the right time to get the song beats going.  This game was done as part of the Singapore-MIT Gambit Games Lab summer internship held over the 2 months of mid June to mid August, at Massachusetts Institute of Technology (MIT) in Boston, in a team of 8 consisting of 5 Singaporean students and 3 MIT students.
http://gambit.mit.edu/loadgame/audiodyssey.php

I think I will share more about Wii Remote since that's probably not something you would mess with everyday.  We connected the Wii Remote via bluetooth to the PC to be able to use it to play the game.  And then we started to try to figure out how to make it do what. For starters, the Wii Remote has a 3-axis accelerometer and an infrared detector.  The accelerometer can measure how much the device is moving in any direction in a 3D space while the infrared detector will pick up _any_ infrared emitting signal and try to decipher that.  As an interesting experiment, you can point the Wii Remote at the sun and you may still be able control your cursor in the Wii Home screen. You may also try that with 2 candles placed slightly apart.  For this same reason, Johnny Lee is now famous because he built a simple head tracking application and managed to wow the world with it (yes, it is an extremely simple application that any SOC student can do in a week).

With regards to the accelerometer, it records acceleration in values in scales of g. I have a flash debugging tool that can draw the graph of the motion input but Mac users get it for free with DarwinRemote so I'll just show that instead:

The graph is drawn in realtime while you move the Wii Remote.  That means that horizontal axis is time and the vertical axis is the value in the scale of g.  As you can see it the later half of the graph, the wiimote is held stationary but there is still a force acting on it. This is gravity and the g value is 1.  At the start of the graph you can distinctively see there are 3 coloured lines. Each colour represents one of the 3 axes. 

An interesting experiment I did was about how hard a person could  swing a Wii Remote.  It turned out that the maximum I ever reached was about 5g... That's as much acceleration as some of the fastest rollercoaster rides can get (I personally sat the Superman ride which was awesome btw).  If anyone can break 6g with swinging the Wii Remote, please post in the comments below

Now some quirks about the Wii Remote you probably did not know about.  If you swing the Wii Remote really hard and then bring it to a stop very quickly, you will notice that the accelerometers are spring based and they continue to oscillate giving rise to a common damping graph even after you hold the Wii Remote steady.  For this reason and the influence of gravity, programming the Wii Remote motion detection is extremely hard due to the large inaccuracies of the acceleration values.  For example, it is near impossible to detect an S-shaped motion. What makes it worse is that we found that different people use the Wii Remote differently from others.  One person's swing graph could be vastly different from another person's graph depending on the force they use, whether they tilt it slightly or whether they move their wrist instead of elbow.  All these factors basically add up and probably can explain why you may get frustrated with some Wii games due to the controls: It probably worked fine during testing because they got used to it.  As far as I know, the easiest way to detect a swing is of detection by a threshold value.  Several other methods we have tried include storing the history values, average values, etc.  If you have any good ideas on other possible accelerometer-based motion detection techniques, please post in the comments below!

If you're interested more about how to get a Wii Remote hooked up to a computer. Check out these websites:
http://www.wiili.org/index.php/Main_Page

Tuesday, December 23, 2008

More about Showtime

< ADV > Buy the game! Buy the game! Buy the game!

So I promised more information about Showtime and here it is. 

Firstly, I want to introduce the team of 7, consisting of:
Producer Joshua Wong
Artist & Level Designer Desmond Wong
Audio Engineer Guo Yuan
Programmer Lee Fang Liang
Programmer Hansel Koh
Programmer Adrian Lim
Programmer Bruce Chia

Secondly, a hypnotising video to make you buy the game:
< ADV > Buy the game! Buy the game! Buy the game!

< ADV > Buy the game! Buy the game! Buy the game!

Our group was very diverse and relatively new to commercial console game development.  I would say that we mostly did the game with little prior experience in the commercial world other than some hobby games done on our own personal time.

If you have ever played the game, you will find out that there are no limits to the number of objects (we call them props), such as the orange grabbing thing you see in the video above, that you can place when creating a map in the map editor which happens to be only accessible in the purchased version (that's a hint to buy the game!).  Furthermore, each prop will react to the player which is basically a ragdoll made up of several oriented bounding boxes (OBBs).  So if anyone is crazy enough to bother to count, you can actually find that a single level may consist of as much as a few hundred of these props, especially in the more complex maps in the later stages.  And each of these props has to be collided against the player as expected.  

Unfortunately, I'm unable to share everything that I worked on but I will say that I did some optimization for this game.  In order to hide the details, the abstracted problem here was that the game started to lag really badly in the physics department as one would expect since there are many objects colliding with each other, some moving and other not.  I think this problem is not specific to our game alone and I can think of many other games that could have faced this problem if they used some kind of physics in their game.  It definitely boils down to the question of how much your CPU can handle before it becomes slower than the frame rate of a game.  We used a physics engine called Farseer and it already provided us with a sweep and prune collider back then (I believe they have improved this since then). In other words, the physics was already semi-optimized but it was not entirely suitable for our case.  It was not an easy problem to solve for sure and we wasted at least a week on this, firstly to figure out what was causing the lag, and then later to come up with a solution.  

Part of our solution was to basically change the collider to a grid-based one (yay local search wins). This of course was only half the battle won since it helped to reduce the number of collisions with stationary objects but if a game had moving objects, the problem was not so simple since it meant that the moving did not stay within its grid cell for long unlike other stationary objects.  Furthermore, if a game had many moving enemies or objects that spawned every second or so and there could be alot of problems of how to make them collide with all the other stationary elements as well as moving ones.  Well since this _is_ a computing blog, I would actually like to hear what you would do/ how you would solve this problem if you were building this instead of giving the solution to how we dealt with in our case.  I do believe that there is possibly no perfect answer but if you do know of one, please prove me wrong!
In particular, would you manage each moving object in the spatial grid (swapping them from cell to cell as they moved, keeping in mind one box may have to be in two adjacent cells if it is crossing over the edge) or would you separately manage them? And give a brief description of how if possible. So please post your comments below!

However, it really placed us at our toes and made us come up with creative ways to solve the problem.  I would also have to admit that the things that I learnt in NUS did help, and at the same time, I would say that what we learn in theories are only foundations and application of the theories is always a different experience.

Lastly, I would like to give everyone a brief introduction to the lab I am working for as I did not do it justice in my previous post.
The Singapore-MIT GAMBIT Game Lab is a five-year research initiative that addresses important challenges faced by the global digital game research community and industry, with a core focus on identifying and solving research problems using a multi-disciplinary approach that can be applied by Singapore's digital game industry. The Singapore-MIT GAMBIT Game Lab focuses on building collaborations between Singapore institutions of higher learning and several MIT departments to accomplish both research and development.
Find out more about it here: http://gambit.mit.edu/campaign/index.php

< ADV > Buy the game! Buy the game! Buy the game!

Monday, December 22, 2008

First Singapore made Xbox Live Community Game Launched!

Before I get to the news, let me introduce myself. I'm Bruce Chia, 4th year undergraduate from Computer Science. My main interest lies in games and I aspire to be a full-fledged game developer. I have developed over 20 flash games, some of which are freelance projects with local web companies (I'll reveal more in future posts). Mostly I work on the code while someone else does the art and game design.




The latest game that I have worked on is currently breaking the news, and it is called CarneyVale Showtime. In the game, you play as Slinky, a circus acrobat trying to rise up the ranks by performing acrobatic tricks and death-defying stunts through increasingly complex arenas. The game has recently won the Dream-Build-Play 2008 challenge organized by Microsoft, beating over 350 entries from about 100 countries. You may read more here:

http://www.asiaone.com/Digital/News/Story/A1Story20081031-97426.html .



The game has just been launched today and can be bought over the XBox Live Community Games (XBLCG) channel at USD $5 (400 Microsoft points) about SGD $8. The game was made in 4 months with team of 7 including myself.

Go here for more information on the game:
http://gambit.mit.edu/loadgame/showtime.php

And here to see the game on sale:
http://marketplace.xbox.com/en-US/games/offers/00000000-0000-4000-8000-00005855014d?partner=RSS

Come back tomorrow for behind-the-scenes updates about the game!

If you have any comments, please feel free to add them below!