Iconic game developer and president of Nintendo Co., Ltd. Satoru Iwata returns for the second consecutive year to deliver the keynote address of the 2006 Game Developers Conference (GDC). GDC, the world's largest event exclusively devoted to the art of game creation, will take place at the San Jose Convention Center Monday through Friday, March 20-24.
In his keynote, entitled "Disrupting Development," Iwata will inspire developers to take risks and mine the depths of their imaginations to create innovative games regardless of the size of teams or budgets. He will point to the Nintendo DS brain-training games and Nintendo® Wi-Fi Connection to prove it is still possible to succeed at engaging new players and surprising existing players. Iwata will also share his thoughts on the role Nintendo's video game systems will play in expanding the market and widening the possibilities for developers.
"We are extremely honored to feature an experienced platform leader such as Satoru Iwata as a keynote speaker," said Jamil Moledina, director, Game Developers Conference. "As Nintendo reinvents the scope of what games can be, it is ever more crucial to share their creative and market-growing philosophies with the other leaders of the game creation industry."
Born in 1959 in the Hokkaido Prefecture of Japan, Iwata studied at and graduated from the Tokyo Institute of Technology University, where he majored in computer science. Shortly after graduating, Iwata joined HAL Laboratory, Inc. and in 1983 began coordinating the software production and development of Nintendo titles, such as the Kirby series. By 1993, he had become president of that company. In 2000, Iwata moved to Nintendo Co., Ltd. as the head of the Corporate Planning division, where he was responsible for Nintendo's global corporate planning. In 2002, he was named president of Nintendo Co., Ltd. where he continues to guide development of games with the passion of a game creator.
Satoru Iwata's keynote, "Disrupting Development," is scheduled for Thursday, March 23, from 10:30 to11:30am.
The GDC is the largest and most important professional development event for the games industry. The conference will feature more than 300 lectures and workshops designed to provide inspiration and build skills. The annual event offers an independent forum for developers from around the world to set the agenda for the next stage of interactive tools.
The GDC will take place March 20-24 at the San Jose Convention Center. To secure early rate pricing, be sure to register by February 15.
Monday, January 29, 2007
Friday, January 26, 2007
Games From My Game Development Course
I will close 2006 with a summary of my game development course I taught at Tufts University earlier in the year. You may be wondering why I taught the course considering my background is primarily in computer security and privacy. As I wrote in the beginning of the year, students in my previous computer security, privacy, and politics course expressed interest in more technical content including programming. Moreover, the Tufts Experimental College asked students what courses they would like to see in the future, and many said a course on game development. What better way to expose students to computer programming and the different facets of Computer Science than game development.
I taught the class using Java. I had a little over twenty students in my class. A number of students had strong computer programming background, while others never did any programming before. I lectured on a number of standard game development topics including user interfaces, 2D graphics, game testing, texture mapping, animation, sound, and 3D graphics. Teaching the course in Java had its strengths and drawbacks. In short:
Strengths:
* Rich 2D graphics and UI widgets (e.g. Swing) all part of the standard development kit
* The “write once, run everywhere” paradigm worked well
Weaknesses:
* The bugs in Java 3D and Java sound
* Extremely deep library with obsolete and deprecated classes
Students and I didn’t observe any glaring performance issues in Java, contrary to popular belief. I also didn’t find the notion that Java “is too high-level” to be necessarily true, considering depth of the Java Sound API and support for input devices including joysticks.
The most important aspect of my course was creating games, and did that. I created five teams, each creating a different 2D game. Each team had technical and non-technical students. It would not be right if there was a team of all programmers and another team of students with no programming experience. I asked each team to submit a proposal for a game, and once approved, a design document for the game. For your pleasure, several of the games are available for download:
BattleBlocks - An arcade style game somewhere between breakout and space invaders. Available for download on SourceForge.net (JAR file).
BattleBlocks screenshot
Flauncy Space Cows - Presented by Maniacally Obese Penguins, a nifty Asteroids clone. Design document for the game is also available. Build and run the game from source.
Flauncy Space Cows screenshot
Startrain Chronicles - Based on, and extensive modifications, to Professor Andrew Davison’s “JumpingJack” (a sidescroller), presented in his book Killer Game Programming in Java. Build and run the game from source.
Startrain Chronicles screenshot
The production of games was a major accomplishment in my class. The accomplishment was reflected on my course evaluations: students were pleased that they had the opportunity to implement a 2D game, and the skills that they learned (the design, programming, and teamwork skills) were valuable. Some students wished that there was more programming involved in the course, while others wished that there was less programming in the course. In addition, several students wished that there were more discussions on the gaming business and on game engines. I enjoyed teaching the course, but it was no walk-in-the-park. Is Java relevant for game development? I think it is a great language for implementing 2D games. Several students even told me to just focus on 2D games if I do teach this course again in Java. Students and I struggled with Java 3D. For 3D games and using game engines, I feel that C++ is by far more suitable.
I taught the class using Java. I had a little over twenty students in my class. A number of students had strong computer programming background, while others never did any programming before. I lectured on a number of standard game development topics including user interfaces, 2D graphics, game testing, texture mapping, animation, sound, and 3D graphics. Teaching the course in Java had its strengths and drawbacks. In short:
Strengths:
* Rich 2D graphics and UI widgets (e.g. Swing) all part of the standard development kit
* The “write once, run everywhere” paradigm worked well
Weaknesses:
* The bugs in Java 3D and Java sound
* Extremely deep library with obsolete and deprecated classes
Students and I didn’t observe any glaring performance issues in Java, contrary to popular belief. I also didn’t find the notion that Java “is too high-level” to be necessarily true, considering depth of the Java Sound API and support for input devices including joysticks.
The most important aspect of my course was creating games, and did that. I created five teams, each creating a different 2D game. Each team had technical and non-technical students. It would not be right if there was a team of all programmers and another team of students with no programming experience. I asked each team to submit a proposal for a game, and once approved, a design document for the game. For your pleasure, several of the games are available for download:
BattleBlocks - An arcade style game somewhere between breakout and space invaders. Available for download on SourceForge.net (JAR file).
BattleBlocks screenshot
Flauncy Space Cows - Presented by Maniacally Obese Penguins, a nifty Asteroids clone. Design document for the game is also available. Build and run the game from source.
Flauncy Space Cows screenshot
Startrain Chronicles - Based on, and extensive modifications, to Professor Andrew Davison’s “JumpingJack” (a sidescroller), presented in his book Killer Game Programming in Java. Build and run the game from source.
Startrain Chronicles screenshot
The production of games was a major accomplishment in my class. The accomplishment was reflected on my course evaluations: students were pleased that they had the opportunity to implement a 2D game, and the skills that they learned (the design, programming, and teamwork skills) were valuable. Some students wished that there was more programming involved in the course, while others wished that there was less programming in the course. In addition, several students wished that there were more discussions on the gaming business and on game engines. I enjoyed teaching the course, but it was no walk-in-the-park. Is Java relevant for game development? I think it is a great language for implementing 2D games. Several students even told me to just focus on 2D games if I do teach this course again in Java. Students and I struggled with Java 3D. For 3D games and using game engines, I feel that C++ is by far more suitable.
Thursday, January 25, 2007
CGI Pro-Gaming Team Manager: Craig Levine
We talk to Team 3D's manager Craig Levine, aka Torbull, about running a team of pro-gamers.
By GameSpy Staff | Aug. 24, 2006
<A HREF="http://de.ign.com/event.ng/Type%3dclick%26FlightID%3d45114%26AdID%3d49552%26TargetID%3d9046%26Targets%3d6556,5180,7716,7012,5169,6915,5154,6507,6775,8526,8648,9046,5759,7898,5779,9385,9635%26Values%3d30,46,50,60,72,84,100,110,150,206,216,218,227,240,268,430,1186,1481,1590,1817,2303,2681,2721,3086,3163,3416,3543,3887,3932,4056,4296,4800%26RawValues%3d%26Redirect%3dhttp://www.comcast.net/games/invasion/sales/" target="_blank"><IMG SRC="http://ads.ign.com/advertisers/CONSUMER_PRODUCTS/comcast/comcast_300x250.jpg" WIDTH=300 HEIGHT=250 BORDER=0></A>
The first ever Championship Gaming Invitational was filmed last month on Treasure Island in the San Francisco Bay area. Contestants duked it out in Counter-Strike 1.6, Battlefield 2, Halo 2, Project Gotham Racing 3 and Dead or Alive 4. You can check out all the action on DIRECTV channel 101 on September 8 through 10. In the meantime, we wrangled up some of the event's competitors to talk to us about what the life of a pro-gamer is like and what they think it takes to make it into the big leagues.
GameSpy: How did you assemble the team?
Craig Levine: I started Team 3D back in April 2002, when I was a freshman in college. I grew up playing video games and played competitively for a few years but quickly learned I couldn't juggle professional gaming, school and a social life. As an undergraduate business major at NYU I decided to assemble the best talent in North America to form a new "super team." Eight months later we won our first major championship and a big-time sponsorship deal.
GameSpy: What does your team do better than any other team?
Levine: Team 3D is more than just five guys playing Counter-Strike. We really embrace our roles as e-celebrities and as ambassadors of gaming. Our players are always friendly, professional, personable, and of course great gamers. The team puts a lot of hard work and time into practice and we have a good time doing it.
GameSpy: How often should a team practice together per week?
Levine: The team typically practices about four hours a day, five days a week together online to prepare for regular online matches and upcoming live tournaments. Before a major tournament, such as the Championship Gaming Invitational, we'll all get together for a boot camp at a game center and fine tune our strategies and communication in person. During a boot camp we will typically play eight hours a day for six days a week.
GameSpy: What obstacles/challenges has your team faced?
Levine: We face the same obstacles and challenges that many other teams do -- competition! The professional gaming circuit is so competitive that at any event there are about a dozen or so teams that, if they play well, can win an event. We need to stay focused, practice hard, execute on match days, and be on our game!
GameSpy: Who is your strongest player?
Levine: I don't know if I can identify one player as our "strongest." What is great about Team 3D is that in any given round of any match any player can step up and change the tempo of a game. Ronald "Rambo" Kim is probably the most well-rounded player on the team because of his versatility with weapons and strategic mindset.
GameSpy: Does age have anything to do with how good a gamer is?
Levine: It is still to be seen at what age gamers become "too old" or when in a gamer's career their skills start to diminish. I think that to be a successful professional gamer you would probably have to be over 18 years old to have a mature outlook on the profession. Every team has their ups and downs, and it is important that each member has good communication skills to work through problems.
GameSpy: Who would you say your biggest competitor is?
Levine: Our biggest rival is complexity. We tend to face them in a lot of the tournaments we attend and we often go back and forth with wins and losses, but every match is exciting for the players, fans, and media. It's like the Yankees/Red Sox rivalry of e-sports!
By GameSpy Staff | Aug. 24, 2006
<A HREF="http://de.ign.com/event.ng/Type%3dclick%26FlightID%3d45114%26AdID%3d49552%26TargetID%3d9046%26Targets%3d6556,5180,7716,7012,5169,6915,5154,6507,6775,8526,8648,9046,5759,7898,5779,9385,9635%26Values%3d30,46,50,60,72,84,100,110,150,206,216,218,227,240,268,430,1186,1481,1590,1817,2303,2681,2721,3086,3163,3416,3543,3887,3932,4056,4296,4800%26RawValues%3d%26Redirect%3dhttp://www.comcast.net/games/invasion/sales/" target="_blank"><IMG SRC="http://ads.ign.com/advertisers/CONSUMER_PRODUCTS/comcast/comcast_300x250.jpg" WIDTH=300 HEIGHT=250 BORDER=0></A>
The first ever Championship Gaming Invitational was filmed last month on Treasure Island in the San Francisco Bay area. Contestants duked it out in Counter-Strike 1.6, Battlefield 2, Halo 2, Project Gotham Racing 3 and Dead or Alive 4. You can check out all the action on DIRECTV channel 101 on September 8 through 10. In the meantime, we wrangled up some of the event's competitors to talk to us about what the life of a pro-gamer is like and what they think it takes to make it into the big leagues.
GameSpy: How did you assemble the team?
Craig Levine: I started Team 3D back in April 2002, when I was a freshman in college. I grew up playing video games and played competitively for a few years but quickly learned I couldn't juggle professional gaming, school and a social life. As an undergraduate business major at NYU I decided to assemble the best talent in North America to form a new "super team." Eight months later we won our first major championship and a big-time sponsorship deal.
GameSpy: What does your team do better than any other team?
Levine: Team 3D is more than just five guys playing Counter-Strike. We really embrace our roles as e-celebrities and as ambassadors of gaming. Our players are always friendly, professional, personable, and of course great gamers. The team puts a lot of hard work and time into practice and we have a good time doing it.
GameSpy: How often should a team practice together per week?
Levine: The team typically practices about four hours a day, five days a week together online to prepare for regular online matches and upcoming live tournaments. Before a major tournament, such as the Championship Gaming Invitational, we'll all get together for a boot camp at a game center and fine tune our strategies and communication in person. During a boot camp we will typically play eight hours a day for six days a week.
GameSpy: What obstacles/challenges has your team faced?
Levine: We face the same obstacles and challenges that many other teams do -- competition! The professional gaming circuit is so competitive that at any event there are about a dozen or so teams that, if they play well, can win an event. We need to stay focused, practice hard, execute on match days, and be on our game!
GameSpy: Who is your strongest player?
Levine: I don't know if I can identify one player as our "strongest." What is great about Team 3D is that in any given round of any match any player can step up and change the tempo of a game. Ronald "Rambo" Kim is probably the most well-rounded player on the team because of his versatility with weapons and strategic mindset.
GameSpy: Does age have anything to do with how good a gamer is?
Levine: It is still to be seen at what age gamers become "too old" or when in a gamer's career their skills start to diminish. I think that to be a successful professional gamer you would probably have to be over 18 years old to have a mature outlook on the profession. Every team has their ups and downs, and it is important that each member has good communication skills to work through problems.
GameSpy: Who would you say your biggest competitor is?
Levine: Our biggest rival is complexity. We tend to face them in a lot of the tournaments we attend and we often go back and forth with wins and losses, but every match is exciting for the players, fans, and media. It's like the Yankees/Red Sox rivalry of e-sports!
Game Developers RANT!
A group of game industry veterans wrapped up GDC 2005 with a roar, venting about all the problems they see hampering the business...
By Dave 'Fargo' Kosak | March 16, 2005
There's no doubt that the games industry has pushed out some great products lately, but long-time players ask why we're not seeing anything really new. That frustration of dedicated gamers is echoed, even amplified, within the industry itself. If you've been following the game development scene in recent years, you'd definitely have spotted a seething undercurrent of frustration among game developers. And not just the struggling independents!
Is the game industry fundamentally flawed? Has it mutated into a strange evolutionary dead-end, where people slave away in sweat-shop conditions to crank out derivative products with better graphics, sponsored by publishers terrified of taking any risks on creative ideas?
Depending on their paycheck, some people in the industry think that the current creative rut is just a natural part of the industry's evolution. Others see this as a crisis point. This year at the Game Developer's Conference, a special panel was set aside toward the end of the show, specifically for industry veterans to rant about the problems that they feel need to be addressed.
"Rant" seems like too sterile a word. What transpired was an emotional catharsis, a spewing of pent-up rage. Like Ahab facing Moby Dick, if their chests were cannons, these developers would've shot their hearts upon the white humps of Sony and Microsoft. Judging by the packed auditorium and occasional standing ovations, the sentiments expressed were views widely held. I was surprised the lecture didn't end with the passing out of pitchforks and torches. People were angry!
Heading up the panel was a group of people moderator Eric Zimmerman described as "Illustrious Curmudgeons," with something like a combined total of over 100 years in the gaming industry. You had: Warren Spector, creator of Thief and Deus Ex, struggling to start a new development house. Jason Della Rocca, the Director of the IGDA. Greg Costikyan, who's been in the industry since the pen-and-paper days and has dozens of games, board games, and RPGs under his belt. Brenda Laurel, an industry consultant and commentator since 1976 who's written several books and sits on the advisory boards of the Berkeley Institute of Design and the M.I.T. Comparative Media Studies program among others. And Chris Hecker, from the GDC Advisory Board, who heads up the GDC Experimental Gameplay Workshop every year, and is a frequent contributor to industry publications like Game Developer Magazine and The Journal of Graphics Tools. What did they have to say?
Warren Spector: "This Business is Hopelessly Broken."
Spector stepped up to the podium with a huge stack of notes that ultimately he ended up tossing over his shoulder, having far too little time to get into all of the problems he saw with how games were made and sold today. First and foremost? Games cost too much, and there's not enough outlets to sell them.
Look at the movie industry, for example: After the domestic box office, movies are then sold overseas, then they go to Pay-Per-View, then to the cable companies, then they're sold to the rental places, and eventually maybe to Network TV. A movie has a million channels through which consumers might pay for it. But games? They appear on store shelves, and then within two months they disappear due to limited retail space. That's the ignominious end of up to four years of development!
As a result, games have to hit big and they have to hit quick. "Every game has to be a blockbuster or a student film," grumbles Spector. In such a climate, Wal-Mart ends up making design decisions. "We have a flawed funding and distribution model!" he called out, thumping the podium. He asked the audience to support online distribution, any mechanism that'll work alongside of retail to get games out to people.
Spector says that he was once told that 4 out of 5 games lose money. This is despite all the ridiculous focus-testing and market research. With those odds, he says, can we do any worse if we trusted the creatives?
Ideally, game publishers would ask more than one question. They wouldn't ask which products would "generate maximum profit." The movie industry, with distributors like Miramax or Fox Searchlight, has found ways to be experimental. The games industry needs to do the same.
By Dave 'Fargo' Kosak | March 16, 2005
There's no doubt that the games industry has pushed out some great products lately, but long-time players ask why we're not seeing anything really new. That frustration of dedicated gamers is echoed, even amplified, within the industry itself. If you've been following the game development scene in recent years, you'd definitely have spotted a seething undercurrent of frustration among game developers. And not just the struggling independents!
Is the game industry fundamentally flawed? Has it mutated into a strange evolutionary dead-end, where people slave away in sweat-shop conditions to crank out derivative products with better graphics, sponsored by publishers terrified of taking any risks on creative ideas?
Depending on their paycheck, some people in the industry think that the current creative rut is just a natural part of the industry's evolution. Others see this as a crisis point. This year at the Game Developer's Conference, a special panel was set aside toward the end of the show, specifically for industry veterans to rant about the problems that they feel need to be addressed.
"Rant" seems like too sterile a word. What transpired was an emotional catharsis, a spewing of pent-up rage. Like Ahab facing Moby Dick, if their chests were cannons, these developers would've shot their hearts upon the white humps of Sony and Microsoft. Judging by the packed auditorium and occasional standing ovations, the sentiments expressed were views widely held. I was surprised the lecture didn't end with the passing out of pitchforks and torches. People were angry!
Heading up the panel was a group of people moderator Eric Zimmerman described as "Illustrious Curmudgeons," with something like a combined total of over 100 years in the gaming industry. You had: Warren Spector, creator of Thief and Deus Ex, struggling to start a new development house. Jason Della Rocca, the Director of the IGDA. Greg Costikyan, who's been in the industry since the pen-and-paper days and has dozens of games, board games, and RPGs under his belt. Brenda Laurel, an industry consultant and commentator since 1976 who's written several books and sits on the advisory boards of the Berkeley Institute of Design and the M.I.T. Comparative Media Studies program among others. And Chris Hecker, from the GDC Advisory Board, who heads up the GDC Experimental Gameplay Workshop every year, and is a frequent contributor to industry publications like Game Developer Magazine and The Journal of Graphics Tools. What did they have to say?
Warren Spector: "This Business is Hopelessly Broken."
Spector stepped up to the podium with a huge stack of notes that ultimately he ended up tossing over his shoulder, having far too little time to get into all of the problems he saw with how games were made and sold today. First and foremost? Games cost too much, and there's not enough outlets to sell them.
Look at the movie industry, for example: After the domestic box office, movies are then sold overseas, then they go to Pay-Per-View, then to the cable companies, then they're sold to the rental places, and eventually maybe to Network TV. A movie has a million channels through which consumers might pay for it. But games? They appear on store shelves, and then within two months they disappear due to limited retail space. That's the ignominious end of up to four years of development!
As a result, games have to hit big and they have to hit quick. "Every game has to be a blockbuster or a student film," grumbles Spector. In such a climate, Wal-Mart ends up making design decisions. "We have a flawed funding and distribution model!" he called out, thumping the podium. He asked the audience to support online distribution, any mechanism that'll work alongside of retail to get games out to people.
Spector says that he was once told that 4 out of 5 games lose money. This is despite all the ridiculous focus-testing and market research. With those odds, he says, can we do any worse if we trusted the creatives?
Ideally, game publishers would ask more than one question. They wouldn't ask which products would "generate maximum profit." The movie industry, with distributors like Miramax or Fox Searchlight, has found ways to be experimental. The games industry needs to do the same.
Tuesday, January 23, 2007
Massively Multiplayer Online Games
The most important aspect of a game that inspires more gamers to play it is the amount of challenge it provides. The best way of making a game more challenging is to make it multiplayer. Because Artificial Intelligence in computer games has not reached a point yet where it can predict every kind of move you make and also every kind of player, they are easy to beat once you understand the patterns they follow. In multiplayer games however, you get to play with and against other gamers, and each time you play someone new you face a new kind of challenge. Owing to this fact, the game developers came up with a new category of games. This category is Massively Multiplayer Online Game or MMOG and enables thousands of players to join and play the game simultaneously via the internet.
There are some MMOG's these days that have servers all around the globe connected to each other, enabling gamers to interact and play each other from every corner of the globe. Most MMOG's create a persistent universe where the game goes on whether any player is online or not. Since however, it stresses on multiplayer gameplay, they usually have Artificial Intelligence, to allow the game to be played in single player mode and people do not leave if there is no other person online.
Unlike single player games MMOG's do not have an end point in the game. They are modeled in a way that the game goes on and the characters within it develop like real life. Only a few MMOG's have a winning condition that too based on the standings of the players after due time the game has been played.
MMOG's are able to support thousands of players online simultaneously. Because of the diversity of gamers playing these games from around the globe and the amount of detail the game developers put into these games, they are very challenging and filled with endless new experiences. Some MMOG's allow clans to be formed, so people can form their own groups of gamers and compete with other groups. This makes the game even more challenging as each clan tried to overpower the other clans.
MMOG's are most suitable for gamers with loads of free time as they are quite addictive and time consuming. However, for any gamer who appreciates game details and quality, MMOG'S are heavenly.
There are some MMOG's these days that have servers all around the globe connected to each other, enabling gamers to interact and play each other from every corner of the globe. Most MMOG's create a persistent universe where the game goes on whether any player is online or not. Since however, it stresses on multiplayer gameplay, they usually have Artificial Intelligence, to allow the game to be played in single player mode and people do not leave if there is no other person online.
Unlike single player games MMOG's do not have an end point in the game. They are modeled in a way that the game goes on and the characters within it develop like real life. Only a few MMOG's have a winning condition that too based on the standings of the players after due time the game has been played.
MMOG's are able to support thousands of players online simultaneously. Because of the diversity of gamers playing these games from around the globe and the amount of detail the game developers put into these games, they are very challenging and filled with endless new experiences. Some MMOG's allow clans to be formed, so people can form their own groups of gamers and compete with other groups. This makes the game even more challenging as each clan tried to overpower the other clans.
MMOG's are most suitable for gamers with loads of free time as they are quite addictive and time consuming. However, for any gamer who appreciates game details and quality, MMOG'S are heavenly.
Online Games - Flash Bingo
Online games are becoming more and more popular. When the internet first arrived it was not long before online games technology became more advanced as users sought more ways to entertain themselves online. Initially, internet connections were slow and users were frustrated by a lack of game quality and ease at which they could download or play games online.
However, now that technology has moved forward, and with broadband penetration being some 79% in UK alone (Neilsen Netratings) people are finding games with more quality and greater ease of play, and are using them more often to pass away any spare time.
Flash has proved to be one important technology that has helped drive the popularity of games online. It is a lightweight application that has become standard, allowing a game developer to offer medium to high complexity games. Designs, animation and application user interfaces are deployed immediately across all popular web browsers and platforms, providing a rich web experience.
Flash game sites are high in number and all provide a varied range of games to entice users to the site. Sports games, action games and adventure games but to name a few. And of course the most important element is that flash games are mostly free, and download time is minimal. In fact it is also possible that most flash games do no require a download, but can be played via the web site itself.
Games are a good way to pass away a few spare moments while at your computer. If you are at the office waiting for some work to arrive, or during a lunch break have a spare half an hour, then why not try downloading a flash game.
Flash is the technology that is also powering most online poker, casino and bingo games. One of the more popular flash games of the last year has proved to be online bingo with some $2 billion USD wagered in 2006.
Parlay, the World’s leading bingo flash game supplier, provides a flash bingo game for over 40% of bingo operators across the globe. Its popular bingo product has many features which provide a good interactive experience for bingo players, while allowing them to play for free or for real cash money. It offers a 75 ball and a 90 number bingo game, with chat room interaction and many other features.
This flash bingo game can be found on many bingo network sites, like St Minver’s International Bingo Network. The advantage of this flash game is that is requires no download, and is free to join in.
Flash games are also a way of driving traffic to your website. How many times a week do we all receive a html link to a promotion which, when clicked, takes us to a flash game or flash video advertisement, promoting a new product or element of a website. These are called viral campaigns and are used by many search engine companies to entice people to a website.
Traditionally it was men who played online games the most. We all know the stereotypical young man sat at his computer for hours on end, joystick in hand, aiming to conquer whatever enemy the game can throw at him.
Well now web sites, and particularly gaming web sites, are proving more popular for women. Some 85% of players online are female, with women over the age of 40 spending 50% more time playing online games than men (recent AOL study). Perhaps this is due to the type of games that are available, or perhaps because women have more access to computers in their daily careers, undertaking more office or secretarial roles which tend to give sporadic moments of free time at the computer.
The versatility of flash is there to be seen, and with more advantages in technology, and more games like bingo targeting a female audience, the future for online games looks to be rosy.
However, now that technology has moved forward, and with broadband penetration being some 79% in UK alone (Neilsen Netratings) people are finding games with more quality and greater ease of play, and are using them more often to pass away any spare time.
Flash has proved to be one important technology that has helped drive the popularity of games online. It is a lightweight application that has become standard, allowing a game developer to offer medium to high complexity games. Designs, animation and application user interfaces are deployed immediately across all popular web browsers and platforms, providing a rich web experience.
Flash game sites are high in number and all provide a varied range of games to entice users to the site. Sports games, action games and adventure games but to name a few. And of course the most important element is that flash games are mostly free, and download time is minimal. In fact it is also possible that most flash games do no require a download, but can be played via the web site itself.
Games are a good way to pass away a few spare moments while at your computer. If you are at the office waiting for some work to arrive, or during a lunch break have a spare half an hour, then why not try downloading a flash game.
Flash is the technology that is also powering most online poker, casino and bingo games. One of the more popular flash games of the last year has proved to be online bingo with some $2 billion USD wagered in 2006.
Parlay, the World’s leading bingo flash game supplier, provides a flash bingo game for over 40% of bingo operators across the globe. Its popular bingo product has many features which provide a good interactive experience for bingo players, while allowing them to play for free or for real cash money. It offers a 75 ball and a 90 number bingo game, with chat room interaction and many other features.
This flash bingo game can be found on many bingo network sites, like St Minver’s International Bingo Network. The advantage of this flash game is that is requires no download, and is free to join in.
Flash games are also a way of driving traffic to your website. How many times a week do we all receive a html link to a promotion which, when clicked, takes us to a flash game or flash video advertisement, promoting a new product or element of a website. These are called viral campaigns and are used by many search engine companies to entice people to a website.
Traditionally it was men who played online games the most. We all know the stereotypical young man sat at his computer for hours on end, joystick in hand, aiming to conquer whatever enemy the game can throw at him.
Well now web sites, and particularly gaming web sites, are proving more popular for women. Some 85% of players online are female, with women over the age of 40 spending 50% more time playing online games than men (recent AOL study). Perhaps this is due to the type of games that are available, or perhaps because women have more access to computers in their daily careers, undertaking more office or secretarial roles which tend to give sporadic moments of free time at the computer.
The versatility of flash is there to be seen, and with more advantages in technology, and more games like bingo targeting a female audience, the future for online games looks to be rosy.
Online Games for the Masses
The new joy on the internet, the Romanians have discovered flash gaming on their websites. More and more sites from Romania are battling for a higher pagerank in google, trying different SEO tools, and backlink campaigns. The business of the online games industry is a complex one, requiring the input and integration of many variables -- people, business conditions, product goals, and more -- to create, implement, and distribute a successful online game. Senior IT architect Veronika Megler ignites the first of a five-part series that focuses on infrastructure providers for online games. The series illustrates the state of the industry today and demonstrates how to develop a high-level business description and how to identify the all-important business patterns. The author offers eight steps towards this goal.
Describing the online game industry in any level of detail would take quite a long time and I want to focus on the development issues rather than the history. To create a context for this discussion, I want to spend a moment talking about the industry.
The industry that creates, distributes, and runs games is complex. Increasingly, game art is developed by artist studios rather than by the code developers who performed every task back when I was writing games. Game developers can vary from small startups with a great idea, to major entertainment studios who wish to capitalize on existing media assets by developing a game with movie, character, or brand tie-in.
Games may be distributed by the company that developed the game, by the game publishers, or by game consolidators. The game-development industry is starting to look more and more like movie production with its major studios and small independents -- who sometimes partner and sometimes compete.
Describing the online game industry in any level of detail would take quite a long time and I want to focus on the development issues rather than the history. To create a context for this discussion, I want to spend a moment talking about the industry.
The industry that creates, distributes, and runs games is complex. Increasingly, game art is developed by artist studios rather than by the code developers who performed every task back when I was writing games. Game developers can vary from small startups with a great idea, to major entertainment studios who wish to capitalize on existing media assets by developing a game with movie, character, or brand tie-in.
Games may be distributed by the company that developed the game, by the game publishers, or by game consolidators. The game-development industry is starting to look more and more like movie production with its major studios and small independents -- who sometimes partner and sometimes compete.
Game Software Development Online
It is possible to obtain an online degree in Game Software Development without setting foot in a traditional classroom. Through a distance learning course, students can learn to create exciting video games to satisfy the demands of our evolving, technological society.
The field of Game Software Development is a fast-paced, challenging environment. An online course teaches aspiring software developers to evaluate gaming products and how to program and plan character options and game environments. The Game Software Development curriculum helps to hone the students' artistic abilities as well as their technical skills. Areas of study include applied knowledge of video and computer gaming, basic art and design, computer programming, character and environment creation, game play, and background design.
There are several online schools offering college degrees in Game Software Development. Students can study via the Internet, at their own pace, to obtain degrees such as an Associate of Arts (AA), Associate of Science (AS), Bachelor of Arts (BA), or Bachelor of Science (BS) in Game Software Development.
Careers in Game Software Development include programmers, interactivity designers, 3D object modelers, 3D character builders, 2D conceptual artists, game-play testers, and many others. Graduates of online Game Software Development School are in demand in many fields of entertainment, such as film, television, video and video gaming. Learned skills can also be applied in military, architectural, and educational fields.
To learn more about an online education in Game Software Development, feel free to search the many options found on our website.
The field of Game Software Development is a fast-paced, challenging environment. An online course teaches aspiring software developers to evaluate gaming products and how to program and plan character options and game environments. The Game Software Development curriculum helps to hone the students' artistic abilities as well as their technical skills. Areas of study include applied knowledge of video and computer gaming, basic art and design, computer programming, character and environment creation, game play, and background design.
There are several online schools offering college degrees in Game Software Development. Students can study via the Internet, at their own pace, to obtain degrees such as an Associate of Arts (AA), Associate of Science (AS), Bachelor of Arts (BA), or Bachelor of Science (BS) in Game Software Development.
Careers in Game Software Development include programmers, interactivity designers, 3D object modelers, 3D character builders, 2D conceptual artists, game-play testers, and many others. Graduates of online Game Software Development School are in demand in many fields of entertainment, such as film, television, video and video gaming. Learned skills can also be applied in military, architectural, and educational fields.
To learn more about an online education in Game Software Development, feel free to search the many options found on our website.
PS3 Games Online
John Hight, external production director for SCEA, is the overseer of PS3 games' digital distribution program, E-Distribution Initiative. He claims that this new distribution project will benefit Sony and open opportunities for game developers. Hight explains that online distribution erases inventory risks while being cost-effective. He asserts that this is Sony's contribution in the anti-piracy drive because online distribution will curtail the sales of used games and software transfer.
As added benefit for the developers and aspiring developers of PS3 games, the difficulties of breaking in the game publishing industry is minimized by the online platform. Through the online platform new games by big and new developers can be tested with low risks in a medium that encourages quick feedback. There is no need to publish the game and get reviewers to test it. The prototype of the game is uploaded in the online platform where actual PS3 gamers can play it and post their own reviews. Hight asserts, in another dig at Microsoft, that their company is committed to game development in the circle of its own studios. He reminds that Microsoft relies on third party game developers to supply their Live Arcade with games. He even added that Sony opens platform doors for independent publishers who funded their own games. But not just any game can make it to Sony's online platform. Hight stresses that despite the openness of their platform, Sony is only looking for new and fresh ideas to benefit from the influence of the PS3.
Sony Computer Entertainment's Ken Kutaragi, amplifies the cost-efficiency of their online platform. He states that they expect high returns from the sales of downloadable PS3 games. He also denies reports about added fees and charges for playing and networking through the E-Distribution Initiative. He explains that all basic services from Sony's online platform will be free except for the downloads.
SCEA also confirms reports that some of their PS3 games, downloaded or not, are not compatible with Xbox 360. The company gives hardware demands and game designs as reasons behind the incompatibility. This confirmation coincided with the announcement of new game titles developed exclusively for Sony.
From these, Sony makes it clear that it is taking steps to compete with Microsoft even in the online arena. Though the initial information released by SCEA is vague, the online platform clearly has two primary functions: PS3 games download and player interaction. Its basic functions are much like that of Microsoft's online platform. The PS3 games console is facing a tough challenge from Xbox 360 because of its delayed launch. Whether the E-Distribution Initiative will face the same challenge remains to be seen when it collides with the more established Xbox Live Arcade.
As added benefit for the developers and aspiring developers of PS3 games, the difficulties of breaking in the game publishing industry is minimized by the online platform. Through the online platform new games by big and new developers can be tested with low risks in a medium that encourages quick feedback. There is no need to publish the game and get reviewers to test it. The prototype of the game is uploaded in the online platform where actual PS3 gamers can play it and post their own reviews. Hight asserts, in another dig at Microsoft, that their company is committed to game development in the circle of its own studios. He reminds that Microsoft relies on third party game developers to supply their Live Arcade with games. He even added that Sony opens platform doors for independent publishers who funded their own games. But not just any game can make it to Sony's online platform. Hight stresses that despite the openness of their platform, Sony is only looking for new and fresh ideas to benefit from the influence of the PS3.
Sony Computer Entertainment's Ken Kutaragi, amplifies the cost-efficiency of their online platform. He states that they expect high returns from the sales of downloadable PS3 games. He also denies reports about added fees and charges for playing and networking through the E-Distribution Initiative. He explains that all basic services from Sony's online platform will be free except for the downloads.
SCEA also confirms reports that some of their PS3 games, downloaded or not, are not compatible with Xbox 360. The company gives hardware demands and game designs as reasons behind the incompatibility. This confirmation coincided with the announcement of new game titles developed exclusively for Sony.
From these, Sony makes it clear that it is taking steps to compete with Microsoft even in the online arena. Though the initial information released by SCEA is vague, the online platform clearly has two primary functions: PS3 games download and player interaction. Its basic functions are much like that of Microsoft's online platform. The PS3 games console is facing a tough challenge from Xbox 360 because of its delayed launch. Whether the E-Distribution Initiative will face the same challenge remains to be seen when it collides with the more established Xbox Live Arcade.
How To Make a Video Game - It's Free, and Not as Hard as You Think
Video Game making has evolved dramatically over the past decade. It used to be a world filled with tedious hours of programming in a language like C. But today there are readily available tools that do all this programming work for you and allow you to focus on the creative task of building a fantasy world game.
Finding and Using the Software
There are many free for public use video game software suites and they are all very similar. If you learn how to use one of them you can readily transfer your skills to the others. And if you are serious about your video game making, the skills you learn with the free software are a good foundation for working with the high-end software tools that the professionals use. You can easily find any number of these free software applications by using a popular search engine. Two of them that I have used are the Genesis game engine and the Reality Factory game development suite.
Five Steps to Making a Video Game
There are five basic steps to making a video game. These are the steps that professional developers take when making a cutting edge game and they are the same steps you take when making a small game that you and your friends can enjoy.
Step One - Design on Paper
The very first thing you have to do when designing a video game is to get it down on paper. This is the most over-looked step and it is also the number one mistake that many budding game designers make. If we compare the process of making a video game to the process of building a house this step would be like drawing up the blueprints. Before building a house you have to get everything into the blueprints so you can know exactly what you are building, where everything goes and what everything looks like. This holds true with game design. Before you start making your video game you have to conceptualize it. You have to draw out on paper what the game looks like, where everything goes and to take this one step further than home building you have to write a script so you can understand what will happen in your game. This script doesn't have to be complex. It can be as easy as "The player has to work his way through the dungeon and find the Sword of Happiness to complete the game".
Maps and Sketches
Your video game is a complete world that a player will be able to walk around in and this means that the first thing you should make is a map of the whole world whether it is an outdoor world or an indoor dungeon-like world. When you do this it gives you a base to start with. When making your video game one of the first things you will do is create a large box that contains your whole world. Inside this box is where you will place all of the various objects of your game. If your map has outdoor areas you will put in it the terrain features like mountains, rivers, bridges and building. If it is strictly an inside world you will map out all of the various rooms.
After you have your overall map completed you can work down into the details. Draw floor plans of any buildings and dungeons. Place the rooms and all the structures. To aid in the visualization of your buildings and rooms you should draw sketches of key areas. Are there temples? What will they look like? What are the unique things about your game? Draw sketches of these. Once all the concepts are detailed, and your vision of the world is created you can begin the actual software creation of your game. This translates your game from its paper version to its computer version. Professional video game design companies spend an enormous amount of time in this phase of game development. They work out every detail and make drawings and sketches of every room, every character, and every scene. You do not have to design your game with this level of detail but you should make it as detailed as possible. Every hour of work you do in this stage of the process will save you several hours of work in the next step.
Step Two - Building the wire-frame of your game
In this step of creating your video game you make an overall shell that the whole game will be played in. These are the boundaries of the game world. Inside this game world you place all of the inanimate objects whether they be outside terrain features or inside objects like rooms and furniture. This stage is where all of the inanimate objects are created and placed in your computerized world. It is a complete world without any animals, beasts or characters. When you do this you are simply building and placing all the objects where they belong and defining their shape.
This-step is commonly called "wire-framing" because the end result will look like a drawing with many wires in three dimensional locations that define and show all of the various shapes and surfaces of your game. After the wire framing is complete you will bring it to life by applying textures to all the surfaces.
Step Three - Texturing
This "texturing" of the game is a simple process of selecting a surface then choosing a texture that will be applied to it. All game development software comes with a library of ready to used textures that you can choose from and apply to surfaces with a single click of your mouse. Professional game companies spend an extraordinary amount of time creating their own textures and applying them to the wire-frames of their games. It is this texturing that gives a game it's own unique look and feel. It is a very important part of game design and companies have people dedicated to just creating textures for their worlds. Games can be composed of thousands of unique textures and on any professional game development team this job of creating textures is a full time job.
Step Four - Placing entities in your world
Entities are the players in your game or objects in your game that either move or interact with the player. These entities have two unique components that have to be designed -what they look like and what they do. With today’s free software you get a whole host of pre-built entities and characters that you can simply drop and drag right into your game. They are complete with their behaviors and their look. A good example of an entity is the avatar of the player. There are available characters that have all their properties already assigned to them. You simply place the character in your world and it is ready to use -and complete with a host of characteristics such as running, jumping and using weapons.
Step Five - Creating your own characters and behaviors
If you want to make a video game you can do it without this step at all. All of the tools are already designed and ready for you to pop right into your game. But if you want to develop your skill further, or if you have very specific requirements of your game that are not readily available, you can create your own characters with programs such as Milkshape. And utilizing scripts that come with your software you can assign unique characteristics and properties to your characters. This will give your game a sense of uniqueness and an individual look and feel. Using the scripts that come with your game does take some time to learn. A script is a low level programming language and you have to learn the rules of how to use them.
Creating a video game is not hard
Once you have downloaded the software you can have a one-room game completed in less than an hour. You can save this game then run it and play it -even share it with your friends. And the beauty of the software is that once you have learned how to make one room the process is exactly the same for making ten or a hundred rooms. You simply stitch them all together and cut doorways between them and you have a big and complex world that you and your friends can adventure in.
The Sky is the Limit
Once you have a good understanding of the basic skills there are any number of directions you can take in your video game making. You can further work on your conceptualizing of games, you can further your artistic skills by creating characters with modeling software, or you can create your own textures for your game. The only limit to your video game making is the scope of your imagination.
Finding and Using the Software
There are many free for public use video game software suites and they are all very similar. If you learn how to use one of them you can readily transfer your skills to the others. And if you are serious about your video game making, the skills you learn with the free software are a good foundation for working with the high-end software tools that the professionals use. You can easily find any number of these free software applications by using a popular search engine. Two of them that I have used are the Genesis game engine and the Reality Factory game development suite.
Five Steps to Making a Video Game
There are five basic steps to making a video game. These are the steps that professional developers take when making a cutting edge game and they are the same steps you take when making a small game that you and your friends can enjoy.
Step One - Design on Paper
The very first thing you have to do when designing a video game is to get it down on paper. This is the most over-looked step and it is also the number one mistake that many budding game designers make. If we compare the process of making a video game to the process of building a house this step would be like drawing up the blueprints. Before building a house you have to get everything into the blueprints so you can know exactly what you are building, where everything goes and what everything looks like. This holds true with game design. Before you start making your video game you have to conceptualize it. You have to draw out on paper what the game looks like, where everything goes and to take this one step further than home building you have to write a script so you can understand what will happen in your game. This script doesn't have to be complex. It can be as easy as "The player has to work his way through the dungeon and find the Sword of Happiness to complete the game".
Maps and Sketches
Your video game is a complete world that a player will be able to walk around in and this means that the first thing you should make is a map of the whole world whether it is an outdoor world or an indoor dungeon-like world. When you do this it gives you a base to start with. When making your video game one of the first things you will do is create a large box that contains your whole world. Inside this box is where you will place all of the various objects of your game. If your map has outdoor areas you will put in it the terrain features like mountains, rivers, bridges and building. If it is strictly an inside world you will map out all of the various rooms.
After you have your overall map completed you can work down into the details. Draw floor plans of any buildings and dungeons. Place the rooms and all the structures. To aid in the visualization of your buildings and rooms you should draw sketches of key areas. Are there temples? What will they look like? What are the unique things about your game? Draw sketches of these. Once all the concepts are detailed, and your vision of the world is created you can begin the actual software creation of your game. This translates your game from its paper version to its computer version. Professional video game design companies spend an enormous amount of time in this phase of game development. They work out every detail and make drawings and sketches of every room, every character, and every scene. You do not have to design your game with this level of detail but you should make it as detailed as possible. Every hour of work you do in this stage of the process will save you several hours of work in the next step.
Step Two - Building the wire-frame of your game
In this step of creating your video game you make an overall shell that the whole game will be played in. These are the boundaries of the game world. Inside this game world you place all of the inanimate objects whether they be outside terrain features or inside objects like rooms and furniture. This stage is where all of the inanimate objects are created and placed in your computerized world. It is a complete world without any animals, beasts or characters. When you do this you are simply building and placing all the objects where they belong and defining their shape.
This-step is commonly called "wire-framing" because the end result will look like a drawing with many wires in three dimensional locations that define and show all of the various shapes and surfaces of your game. After the wire framing is complete you will bring it to life by applying textures to all the surfaces.
Step Three - Texturing
This "texturing" of the game is a simple process of selecting a surface then choosing a texture that will be applied to it. All game development software comes with a library of ready to used textures that you can choose from and apply to surfaces with a single click of your mouse. Professional game companies spend an extraordinary amount of time creating their own textures and applying them to the wire-frames of their games. It is this texturing that gives a game it's own unique look and feel. It is a very important part of game design and companies have people dedicated to just creating textures for their worlds. Games can be composed of thousands of unique textures and on any professional game development team this job of creating textures is a full time job.
Step Four - Placing entities in your world
Entities are the players in your game or objects in your game that either move or interact with the player. These entities have two unique components that have to be designed -what they look like and what they do. With today’s free software you get a whole host of pre-built entities and characters that you can simply drop and drag right into your game. They are complete with their behaviors and their look. A good example of an entity is the avatar of the player. There are available characters that have all their properties already assigned to them. You simply place the character in your world and it is ready to use -and complete with a host of characteristics such as running, jumping and using weapons.
Step Five - Creating your own characters and behaviors
If you want to make a video game you can do it without this step at all. All of the tools are already designed and ready for you to pop right into your game. But if you want to develop your skill further, or if you have very specific requirements of your game that are not readily available, you can create your own characters with programs such as Milkshape. And utilizing scripts that come with your software you can assign unique characteristics and properties to your characters. This will give your game a sense of uniqueness and an individual look and feel. Using the scripts that come with your game does take some time to learn. A script is a low level programming language and you have to learn the rules of how to use them.
Creating a video game is not hard
Once you have downloaded the software you can have a one-room game completed in less than an hour. You can save this game then run it and play it -even share it with your friends. And the beauty of the software is that once you have learned how to make one room the process is exactly the same for making ten or a hundred rooms. You simply stitch them all together and cut doorways between them and you have a big and complex world that you and your friends can adventure in.
The Sky is the Limit
Once you have a good understanding of the basic skills there are any number of directions you can take in your video game making. You can further work on your conceptualizing of games, you can further your artistic skills by creating characters with modeling software, or you can create your own textures for your game. The only limit to your video game making is the scope of your imagination.
Game Software Development Schools
Game Software Development Schools provide an environment for developing skills necessary for this creative and interesting field. They offer tools appropriate to developing concepts and skills that enhancedcreativity, problem-solving, design, and computer uses for applications in the growing and evolving field of video game production.
The specialized skills of design and problem-solving can mature in classes that deliver hands-on experience in game development. Students learn to apply acquired knowledge in logic and critical-thinking to the engineering of new software. Curriculums emphasize interactive software and game development so graduates will be prepared for applying skills to resolving the problems of real-world occupations.
Students in Game Software Development Schools can choose to study for certificates, diplomas, and Associate of Arts (AA) degrees in various vocational, trade, and technical schools, and community colleges. The programs offered at this level can help graduates prepare to meet the challenges of entry-level positions in the Game Software Development industry.
Advanced degrees are also often available from four-year colleges and universities. Bachelor of Arts (BA) and Bachelor of Science (BS) degree programs require additional education courses (as well as computer experience, programming experience, and possibly business courses) to provide solid skills for building a strong base for success in Game Software Development and production fields.
Preparation from Game Software Development Schools helps graduates to qualify for occupations that include conceptual artist, interactivity designer, 3D object and character builder, game tester, and computer programmer, among others. Degree skills are often applied to other fields, and graduates of this technology are in demand.
Incomes vary widely. Game software developers and designers can anticipate earning salaries ranging from $35,000 to $80,000.
The specialized skills of design and problem-solving can mature in classes that deliver hands-on experience in game development. Students learn to apply acquired knowledge in logic and critical-thinking to the engineering of new software. Curriculums emphasize interactive software and game development so graduates will be prepared for applying skills to resolving the problems of real-world occupations.
Students in Game Software Development Schools can choose to study for certificates, diplomas, and Associate of Arts (AA) degrees in various vocational, trade, and technical schools, and community colleges. The programs offered at this level can help graduates prepare to meet the challenges of entry-level positions in the Game Software Development industry.
Advanced degrees are also often available from four-year colleges and universities. Bachelor of Arts (BA) and Bachelor of Science (BS) degree programs require additional education courses (as well as computer experience, programming experience, and possibly business courses) to provide solid skills for building a strong base for success in Game Software Development and production fields.
Preparation from Game Software Development Schools helps graduates to qualify for occupations that include conceptual artist, interactivity designer, 3D object and character builder, game tester, and computer programmer, among others. Degree skills are often applied to other fields, and graduates of this technology are in demand.
Incomes vary widely. Game software developers and designers can anticipate earning salaries ranging from $35,000 to $80,000.
Game Design And Development
Game development is used to describe the process by which a game is produced. It is usually used to refer to the development of computer and video games, and varies according to the company and project.
Game development involves game designing, sound designing, music composition and writing. To enter the world of game development, one has to have serious communication, theatrical and imaginative skills. Some companies also require a BS in Computer Science. Artistic experience is required for game development, as computer games have color and resolution restrictions. So if you have skills in this area, you can easily get a job. Most companies ask for a portfolio of your work. However, don’t try sending this electronically, as most companies respond better to snail mail than e-mail.
Writers are hired by contract, and have to write scripts, character dialogue and ‘online helps’ for the game. The software developer need not always have a BS in Computer Science. This is because companies usually look at your samples in your portfolio, before hiring you. If you don’t plan on working full-time in a company, consider part-time work. Whatever the case may be, you need resources to work. Get good books on programming, a compiler and game development books. Programmers should have knowledge of C++ and Java.
If you plan to become an artist in game development, then take art classes with a good paint program and a 3-D modeling program. Those with writing skills should vie for writing positions in game development. Create some sample scripts with story lines to succeed in game development! Game developers should also have some experience laying out levels. Note the structure of levels and environments in the top-selling games. Take theater, communication and computer science classes to get a good job. Once you enter the game industry, you’ll find this field is always changing, very addictive and as challenging as it is rewarding.
Game development involves game designing, sound designing, music composition and writing. To enter the world of game development, one has to have serious communication, theatrical and imaginative skills. Some companies also require a BS in Computer Science. Artistic experience is required for game development, as computer games have color and resolution restrictions. So if you have skills in this area, you can easily get a job. Most companies ask for a portfolio of your work. However, don’t try sending this electronically, as most companies respond better to snail mail than e-mail.
Writers are hired by contract, and have to write scripts, character dialogue and ‘online helps’ for the game. The software developer need not always have a BS in Computer Science. This is because companies usually look at your samples in your portfolio, before hiring you. If you don’t plan on working full-time in a company, consider part-time work. Whatever the case may be, you need resources to work. Get good books on programming, a compiler and game development books. Programmers should have knowledge of C++ and Java.
If you plan to become an artist in game development, then take art classes with a good paint program and a 3-D modeling program. Those with writing skills should vie for writing positions in game development. Create some sample scripts with story lines to succeed in game development! Game developers should also have some experience laying out levels. Note the structure of levels and environments in the top-selling games. Take theater, communication and computer science classes to get a good job. Once you enter the game industry, you’ll find this field is always changing, very addictive and as challenging as it is rewarding.
To win at software development, change the game
Without exception, software developers and testers at every company I've ever worked in or with have harbored the belief that they--and they alone--are victims of uncaring management, undefined requirements, unreasonable customers, and absurd schedules, while other companies are developing and testing their software the "right" way.
Well I have news for you. Everyone, everywhere is in the same situation. The next company I see that has an orderly, timely, formal, and effective approach for developing software will be… the first. Don't get me wrong, lots of companies are making valiant attempts to define their development processes and stick to them, but somehow, somewhere, it all goes by the wayside.
Instead of clinging to the old systems-development life cycle because it makes sense--or used to--reorient your thinking to today's conditions.
The fundamental question is, why?
The good old days
Although we all laugh about how the mainframes of yore can fit on a chip today, the fact is, software development in the past was a far more disciplined process. Flowcharts, diagrams, and coding pads existed for a reason: At one point in time, people actually used them. Application development was approached as a scientific discipline and was commenced only after extensive analysis, planning, and design. Testing was equally systematic, with methodical techniques for deriving test conditions and cases. Computer programmers were revered as geniuses.
So what was different then?
It all comes down to time. In the early days, computers were new, and they were replacing tasks already being done manually. Accounting, for example, was commonly automated first. Because it was all so new and because there were manual alternatives in place, software could be developed over a two-to-three-year period and no one thought anything of it. Development took as long as was required to get it right.
The bad new days
Today, of course, 90 days is the norm for development cycles. Computers have infiltrated every aspect of our lives and company operations, forever changing the way we conduct communications and commerce. Software is a competitive weapon, used both offensively and defensively: If your competitor announces a new billing plan or fare-pricing program, you've got to respond quickly or risk losing business.
Ironically, this collapse in the timeline for development is exacerbated by an expansion of complexity in technology, a byproduct of advancement. The number of variables involved in hardware, software, and the applications they support now, compared to then, is orders of magnitude greater. So we've got more to do and less time to do it in.
And there you have it. It's not that everyone forgot how to do it right, or developed bad attitudes or sloppy practices, it's just that economic realities have forever changed. You can't win this game playing by the old rules.
What can you do about it?
Software is a competitive weapon: If your competitor announces a new billing plan or fare-pricing program, you've got to respond quickly or risk losing business.
Start by changing your beliefs. Quit castigating yourself, your company, your coworkers, and your customers for failing to adhere to principles that have all the immediacy and relevance of dinosaur mating rituals. Accept the fact that it's a new world and software is organic instead of static; that it's part of a continuous flow of economies and realities reflecting the state of commerce and not the state of the art.
Next, change your approach. Instead of clinging to the old systems-development life cycle because it makes sense--or used to--reorient your thinking to today's conditions. It's like changing from a marathon runner to a sprinter--it takes a completely different strategy and approach to succeed. Here are a few tips:
Become a team player. There is no substitute for a cross-functional team that includes marketing, development, testing, training, documentation, and support personnel. Act and think like a sports team: Everyone plays their position but covers for everyone else when necessary, and everyone wins or everyone loses.
Ask your customers to join the team. Instead of being treated as outsiders and critics of the product, customers should be insiders, participants to the whole process. If you sell your product to other organizations, recruit "alpha" sites to join in. This sense of ownership will help you--and your customers--make critical decisions about priorities, risks, and schedules. You'd be surprised how practical customers' demands become when they see what is actually involved.
Release early and often. Traditional wisdom says it's better to wait until all of the functionality is ready before releasing the product. These days, it's better to add functionality incrementally, in the smallest possible pieces that will still work and make sense. This gives you faster feedback and allows you to incorporate design changes before the product is too far along.
Pace yourself. Once you realize that every schedule will be a crunch, you'll stop believing you can kill yourself today and recover later. Later will never come. Instead, work hard and be just as aggressive about maintaining balance in your life. It will greatly improve your productivity and your attitude.
Measure what you do, not what you don't do. It's a crime to measure a product by its defects--it completely ignores what it does well. Software is never perfect, and it never will be. Instead, focus on what you achieved in terms of new functionality, problems corrected, and performance enhanced. This doesn't mean you should turn a blind eye to defects, just realize that they are only one small measure.
Simply put, the rules have changed. So, change your game and the way you play it.
Well I have news for you. Everyone, everywhere is in the same situation. The next company I see that has an orderly, timely, formal, and effective approach for developing software will be… the first. Don't get me wrong, lots of companies are making valiant attempts to define their development processes and stick to them, but somehow, somewhere, it all goes by the wayside.
Instead of clinging to the old systems-development life cycle because it makes sense--or used to--reorient your thinking to today's conditions.
The fundamental question is, why?
The good old days
Although we all laugh about how the mainframes of yore can fit on a chip today, the fact is, software development in the past was a far more disciplined process. Flowcharts, diagrams, and coding pads existed for a reason: At one point in time, people actually used them. Application development was approached as a scientific discipline and was commenced only after extensive analysis, planning, and design. Testing was equally systematic, with methodical techniques for deriving test conditions and cases. Computer programmers were revered as geniuses.
So what was different then?
It all comes down to time. In the early days, computers were new, and they were replacing tasks already being done manually. Accounting, for example, was commonly automated first. Because it was all so new and because there were manual alternatives in place, software could be developed over a two-to-three-year period and no one thought anything of it. Development took as long as was required to get it right.
The bad new days
Today, of course, 90 days is the norm for development cycles. Computers have infiltrated every aspect of our lives and company operations, forever changing the way we conduct communications and commerce. Software is a competitive weapon, used both offensively and defensively: If your competitor announces a new billing plan or fare-pricing program, you've got to respond quickly or risk losing business.
Ironically, this collapse in the timeline for development is exacerbated by an expansion of complexity in technology, a byproduct of advancement. The number of variables involved in hardware, software, and the applications they support now, compared to then, is orders of magnitude greater. So we've got more to do and less time to do it in.
And there you have it. It's not that everyone forgot how to do it right, or developed bad attitudes or sloppy practices, it's just that economic realities have forever changed. You can't win this game playing by the old rules.
What can you do about it?
Software is a competitive weapon: If your competitor announces a new billing plan or fare-pricing program, you've got to respond quickly or risk losing business.
Start by changing your beliefs. Quit castigating yourself, your company, your coworkers, and your customers for failing to adhere to principles that have all the immediacy and relevance of dinosaur mating rituals. Accept the fact that it's a new world and software is organic instead of static; that it's part of a continuous flow of economies and realities reflecting the state of commerce and not the state of the art.
Next, change your approach. Instead of clinging to the old systems-development life cycle because it makes sense--or used to--reorient your thinking to today's conditions. It's like changing from a marathon runner to a sprinter--it takes a completely different strategy and approach to succeed. Here are a few tips:
Become a team player. There is no substitute for a cross-functional team that includes marketing, development, testing, training, documentation, and support personnel. Act and think like a sports team: Everyone plays their position but covers for everyone else when necessary, and everyone wins or everyone loses.
Ask your customers to join the team. Instead of being treated as outsiders and critics of the product, customers should be insiders, participants to the whole process. If you sell your product to other organizations, recruit "alpha" sites to join in. This sense of ownership will help you--and your customers--make critical decisions about priorities, risks, and schedules. You'd be surprised how practical customers' demands become when they see what is actually involved.
Release early and often. Traditional wisdom says it's better to wait until all of the functionality is ready before releasing the product. These days, it's better to add functionality incrementally, in the smallest possible pieces that will still work and make sense. This gives you faster feedback and allows you to incorporate design changes before the product is too far along.
Pace yourself. Once you realize that every schedule will be a crunch, you'll stop believing you can kill yourself today and recover later. Later will never come. Instead, work hard and be just as aggressive about maintaining balance in your life. It will greatly improve your productivity and your attitude.
Measure what you do, not what you don't do. It's a crime to measure a product by its defects--it completely ignores what it does well. Software is never perfect, and it never will be. Instead, focus on what you achieved in terms of new functionality, problems corrected, and performance enhanced. This doesn't mean you should turn a blind eye to defects, just realize that they are only one small measure.
Simply put, the rules have changed. So, change your game and the way you play it.
An Othello / Reversi Game in VB5 / 6
This code sample shows how to build the Reversi Game in VB and the logic behind the moves made by the computer. It also demonstrates some good graphical techniques.
PROJECT NAME
Othello.vbp
ENVIRONMENT
This is a VB5 project, which will run under Windows 9x.
No other than basic VB-controls are used.
YOU CAN LEARN
The code is too specific for this game, so you only can
learn how to implement game rules & thinking, besides
some general graphical skills...
COPYRIGHT
None. I made the code myself and everybody is free
to use it.
RUNTIME FILES
Othello.exe
othhelp.htm
othello.gif
CODE FILES
Othello.vbp/.vbw
frmOth.frm/.frx
frmStart.frm/frx
othello2.ico
PROJECT NAME
Othello.vbp
ENVIRONMENT
This is a VB5 project, which will run under Windows 9x.
No other than basic VB-controls are used.
YOU CAN LEARN
The code is too specific for this game, so you only can
learn how to implement game rules & thinking, besides
some general graphical skills...
COPYRIGHT
None. I made the code myself and everybody is free
to use it.
RUNTIME FILES
Othello.exe
othhelp.htm
othello.gif
CODE FILES
Othello.vbp/.vbw
frmOth.frm/.frx
frmStart.frm/frx
othello2.ico
Using Graphics: Making a Lander Game
This week, I'm going to conclude our trio of articles on games and graphics programming with a touch of class. Not a new stylish interface, but a class module to run a high score system. This system will be adaptable, so that you can use it in your future games should you wish, and will read and write the registry, with no API calls in sight. It must be magic!
Blow Up!
Let's just have a little think about what this system must do, before we get coding:
* Be able to save a name and score for each item
* A score system where either bigger is better, or smaller is better
* Insert a new score in the correct place, according to the sort order
* Persist scores in the registry
* Support unlimited numbers of high score tables
* Provide a variable length formatted display of current highest scores
A tough call? With a little classy coding, we'll soon have it under control!
We'll be using a User Defined Type (UDT) to hold the data. This needs to hold the name and the score, so it would seems sensible to have two fields, one for the name and one for the score:
Private Type Score
strName As String
intScore As String
End Type
Private Scores() As Score
You may be wondering why there are no dimensions defined for the array. This is because the array is dynamic. In other words, we can change the size of the array as the program is running. This enables us to have a dynamic length table that can be changed by a property of the class, rather than having it hard coded into the class. To change the length of the array, we can use the ReDim statement.
As I mentioned, we will be using a property to control the table length. If you don't understand properties or classes, have a read of the ActiveX Tutorial and all will be revealed! Let's take a look at the code first, then I can explain it:
Private numberplaces As Integer
Public Property Get NumPlaces() As Integer
NumPlaces = numberplaces
End Property
Public Property Let NumPlaces(ByVal vNewValue As Integer)
numberplaces = vNewValue
ReDim Preserve Scores(1 To numberplaces) As Score
End Property
As with all properties, a private variable within the class holds the actual value of the property. The Get function is very simple, but the Let function is a little more tricky as the array must be resized. This is done using the ReDim statement. The Preserve keyword tells VB to try and keep all the data that is in the array intact. This works well when the array is made smaller, as VB can just get rid of the excess data, but when the array is enlarged, VB just fills the array with empty variables - not great, but it'll do.
We also need properties for the table name, and for the 'type' of high score table. The type of high score table determines whether a higher score is better, or a lower score is better. This could be achieved using Enums, which allow us to take advantage of VB's autocomplete features. Here's the code:
Private scorename As String
Private ScoreOrder As ScoreSystem
Public Enum ScoreSystem
BiggerIsBetter = 0
SmallerIsBetter = 1
End Enum
Public Property Get ScoreType() As ScoreSystem
ScoreType = ScoreOrder
End Property
Public Property Let ScoreType(ByVal vNewValue As ScoreSystem)
ScoreOrder = vNewValue
End Property
Public Property Get TableName() As String
TableName = scorename
End Property
Public Property Let TableName(ByVal vNewValue As String)
scorename = vNewValue
End Property
That's most of the boring bits out of the way now. Let's have some fun with the registry.
Since we will be using VB's built in registry functions, we can't go far wrong, but the normal caveats still apply. The registry is an integral part of windows, so make sure that you backup before you start fiddling!
The registry functions must be able to read and write the entire high score table in the registry, according to the application's title, the name of the table and the number of rows in the table. The GetSetting and SaveSetting functions allow us to do all of this in only 4 lines of code! Check it out:
Public Sub ReadScores()
Dim getscore As Integer
For getscore = 1 To numberplaces
Scores(getscore).strName = GetSetting(App.Title, "Scores" _
& scorename, getscore & "name", "No name")
Scores(getscore).intScore = GetSetting(App.Title, "Scores" _
& scorename, getscore & "score", 1000)
Next
End Sub
Public Sub WriteScores()
Dim putscore As Integer
For putscore = 1 To numberplaces
SaveSetting App.Title, "Scores" & scorename, putscore & _
"name", Scores(putscore).strName
SaveSetting App.Title, "Scores" & scorename, putscore & _
"score", Scores(putscore).intScore
Next
End Sub
How much explanation does this code need? The read function goes through all the positions in the scores array, getting a value from the registry, and defaulting to "No name" and 1000 if none exist. The write function again goes through every element in the array, saving the value. You don't need any degrees or Microsoft Certifications to understand this!
Where a certain score is placed in the table depends on the score itself and whether bigger is better, or smaller is better. At first we will look at a system using bigger is better, although we will not be using it for the Lander game, it is easier to understand.
The first thing is to check whether the score is good enough to get on the score board:
Public Function InsertScores(intScore As Integer) _
As Integer
Dim insertscore As Integer, updatescore As Integer
Dim strName As String
If intScore < insertscores =" 0">) used to determine whether the score is elegible. The best way to evaluate this in just one line of code is to use the IIf function. If you have not come across it before, look it up in the help file, as it can be really useful. This is how we will use it:
If IIf(ScoreOrder = SmallerIsBetter, intScore > _
Scores(numberplaces).intScore, intScore < insertscore =" 1" scoreorder =" SmallerIsBetter,"> _
Scores(insertscore).intScore) Then
' we've found the score's position, so move
' all the other scores down:
For updatescore = numberplaces - 1 To insertscore + 1 Step -1
Scores(updatescore) = Scores(updatescore - 1)
Next
' then get the user's name
strName = InputBox("Please enter your name")
' set the new name
Scores(insertscore).strName = IIf(strName = "", "Anonymous", _
strName)
' and the new score
Scores(insertscore).intScore = intScore
' and return the new position
InsertScores = insertscore
Exit For
End If
Next
End Function
And that's it! The score can now be inserted by using some code like this:
clsScores.InsertScores 180
Now that we can get scores into the table, lets figure out how to get scores out of the table.
This function returns a string containing the table, with the three columns, position, score and name separated by tabs. There is an optional parameter, BiggestScore, that allows only part of the table to be printed. If this is not specified, then the whole table is printed:
Public Function MakeScores(Optional BiggestScore As Integer) _
As String
Dim makescore As Integer
If BiggestScore > numberplaces Or IsEmpty(BiggestScore) = _
True Or BiggestScore = 0 Then BiggestScore = numberplaces
MakeScores = IIf(ScoreOrder = BiggerIsBetter, "Bigger", _
"Smaller") & " is better" & vbNewLine & "Position" & vbTab _
& "Score" & vbTab & "Name" & vbNewLine & String(60, "-")
For makescore = 1 To BiggestScore
MakeScores = MakeScores & vbNewLine & makescore & ")" & _
vbTab & Scores(makescore).intScore & vbTab & _
Scores(makescore).strName
Next
End Function
The code is a lot easier to read all on one line, so load up VB, and all will be revealed.
Well, this is the end of my development of the Lander game. As usual, you can check out the demo to accompany this article. I hope you have gained some knowledge about programming a simple game in VB, and will continue to add features to the program.
Blow Up!Let's just have a little think about what this system must do, before we get coding:
* Be able to save a name and score for each item
* A score system where either bigger is better, or smaller is better
* Insert a new score in the correct place, according to the sort order
* Persist scores in the registry
* Support unlimited numbers of high score tables
* Provide a variable length formatted display of current highest scores
A tough call? With a little classy coding, we'll soon have it under control!
We'll be using a User Defined Type (UDT) to hold the data. This needs to hold the name and the score, so it would seems sensible to have two fields, one for the name and one for the score:
Private Type Score
strName As String
intScore As String
End Type
Private Scores() As Score
You may be wondering why there are no dimensions defined for the array. This is because the array is dynamic. In other words, we can change the size of the array as the program is running. This enables us to have a dynamic length table that can be changed by a property of the class, rather than having it hard coded into the class. To change the length of the array, we can use the ReDim statement.
As I mentioned, we will be using a property to control the table length. If you don't understand properties or classes, have a read of the ActiveX Tutorial and all will be revealed! Let's take a look at the code first, then I can explain it:
Private numberplaces As Integer
Public Property Get NumPlaces() As Integer
NumPlaces = numberplaces
End Property
Public Property Let NumPlaces(ByVal vNewValue As Integer)
numberplaces = vNewValue
ReDim Preserve Scores(1 To numberplaces) As Score
End Property
As with all properties, a private variable within the class holds the actual value of the property. The Get function is very simple, but the Let function is a little more tricky as the array must be resized. This is done using the ReDim statement. The Preserve keyword tells VB to try and keep all the data that is in the array intact. This works well when the array is made smaller, as VB can just get rid of the excess data, but when the array is enlarged, VB just fills the array with empty variables - not great, but it'll do.
We also need properties for the table name, and for the 'type' of high score table. The type of high score table determines whether a higher score is better, or a lower score is better. This could be achieved using Enums, which allow us to take advantage of VB's autocomplete features. Here's the code:
Private scorename As String
Private ScoreOrder As ScoreSystem
Public Enum ScoreSystem
BiggerIsBetter = 0
SmallerIsBetter = 1
End Enum
Public Property Get ScoreType() As ScoreSystem
ScoreType = ScoreOrder
End Property
Public Property Let ScoreType(ByVal vNewValue As ScoreSystem)
ScoreOrder = vNewValue
End Property
Public Property Get TableName() As String
TableName = scorename
End Property
Public Property Let TableName(ByVal vNewValue As String)
scorename = vNewValue
End Property
That's most of the boring bits out of the way now. Let's have some fun with the registry.
Since we will be using VB's built in registry functions, we can't go far wrong, but the normal caveats still apply. The registry is an integral part of windows, so make sure that you backup before you start fiddling!
The registry functions must be able to read and write the entire high score table in the registry, according to the application's title, the name of the table and the number of rows in the table. The GetSetting and SaveSetting functions allow us to do all of this in only 4 lines of code! Check it out:
Public Sub ReadScores()
Dim getscore As Integer
For getscore = 1 To numberplaces
Scores(getscore).strName = GetSetting(App.Title, "Scores" _
& scorename, getscore & "name", "No name")
Scores(getscore).intScore = GetSetting(App.Title, "Scores" _
& scorename, getscore & "score", 1000)
Next
End Sub
Public Sub WriteScores()
Dim putscore As Integer
For putscore = 1 To numberplaces
SaveSetting App.Title, "Scores" & scorename, putscore & _
"name", Scores(putscore).strName
SaveSetting App.Title, "Scores" & scorename, putscore & _
"score", Scores(putscore).intScore
Next
End Sub
How much explanation does this code need? The read function goes through all the positions in the scores array, getting a value from the registry, and defaulting to "No name" and 1000 if none exist. The write function again goes through every element in the array, saving the value. You don't need any degrees or Microsoft Certifications to understand this!
Where a certain score is placed in the table depends on the score itself and whether bigger is better, or smaller is better. At first we will look at a system using bigger is better, although we will not be using it for the Lander game, it is easier to understand.
The first thing is to check whether the score is good enough to get on the score board:
Public Function InsertScores(intScore As Integer) _
As Integer
Dim insertscore As Integer, updatescore As Integer
Dim strName As String
If intScore < insertscores =" 0">) used to determine whether the score is elegible. The best way to evaluate this in just one line of code is to use the IIf function. If you have not come across it before, look it up in the help file, as it can be really useful. This is how we will use it:
If IIf(ScoreOrder = SmallerIsBetter, intScore > _
Scores(numberplaces).intScore, intScore < insertscore =" 1" scoreorder =" SmallerIsBetter,"> _
Scores(insertscore).intScore) Then
' we've found the score's position, so move
' all the other scores down:
For updatescore = numberplaces - 1 To insertscore + 1 Step -1
Scores(updatescore) = Scores(updatescore - 1)
Next
' then get the user's name
strName = InputBox("Please enter your name")
' set the new name
Scores(insertscore).strName = IIf(strName = "", "Anonymous", _
strName)
' and the new score
Scores(insertscore).intScore = intScore
' and return the new position
InsertScores = insertscore
Exit For
End If
Next
End Function
And that's it! The score can now be inserted by using some code like this:
clsScores.InsertScores 180
Now that we can get scores into the table, lets figure out how to get scores out of the table.
This function returns a string containing the table, with the three columns, position, score and name separated by tabs. There is an optional parameter, BiggestScore, that allows only part of the table to be printed. If this is not specified, then the whole table is printed:
Public Function MakeScores(Optional BiggestScore As Integer) _
As String
Dim makescore As Integer
If BiggestScore > numberplaces Or IsEmpty(BiggestScore) = _
True Or BiggestScore = 0 Then BiggestScore = numberplaces
MakeScores = IIf(ScoreOrder = BiggerIsBetter, "Bigger", _
"Smaller") & " is better" & vbNewLine & "Position" & vbTab _
& "Score" & vbTab & "Name" & vbNewLine & String(60, "-")
For makescore = 1 To BiggestScore
MakeScores = MakeScores & vbNewLine & makescore & ")" & _
vbTab & Scores(makescore).intScore & vbTab & _
Scores(makescore).strName
Next
End Function
The code is a lot easier to read all on one line, so load up VB, and all will be revealed.
Well, this is the end of my development of the Lander game. As usual, you can check out the demo to accompany this article. I hope you have gained some knowledge about programming a simple game in VB, and will continue to add features to the program.
Book Review: Game Developer's Marketplace
This hands-on "Marketplace" guide is packed with insider tips, techniques, resources, and time-proven advice from industry experts. Key topics featured include how to find jobs in the interactive gaming field, how to start your own game company, how to protect your ideas and creative properties, how to find talented people to work on your creations, how to design killer games, how to negotiate contracts that work, and much more. Cover Title.
Game Developer's Marketplace is the premiere resource for people thinking about or actually producing electronic interactive entertainment. From idea generation and conceptualisation to design and development, Game Developer's Marketplace has the information to point you in the right direction. Whether you're looking for an overview of the game industry, or diving in head-first on your first or tenth project, this is the book you want by your side!
Game Developer's Marketplace is the premiere resource for people thinking about or actually producing electronic interactive entertainment. From idea generation and conceptualisation to design and development, Game Developer's Marketplace has the information to point you in the right direction. Whether you're looking for an overview of the game industry, or diving in head-first on your first or tenth project, this is the book you want by your side!
Developing Java-Based Mobile Games
Some Java programming experience is necessary. GUI development experience with AWT and SWING will be helpful though not mandatory.
In recent times, mobile games have gained popularity for providing personal entertainment on the go. This popularity has mobile gaming playing a pivotal role in revenue generation for the cellular carriers, game publishers, and handset makers, while generating numerous opportunities for game developers and associated professionals. With the number of mobile gamers around the world expected to reach 220 million by 2009, the mobile gaming business is projected to expand to higher levels and constitute a bigger portion of the profit pie for the cellular carriers and handset makers.
Mobile games can be classified into three broad categories:
Among these three categories, browser games are today's most popular type of mobile games for their innovative and multimedia-rich content, appealing presentation, and lower cost of gaming compared to SMS games. This article discusses the development of browsing games and henceforth, the term "mobile games" will refer to "browser games" in this article.
Note: This article concentrates on 2D games. Because a large number of mobile phones in circulation today have very limited resources (small screen, limited memory and graphics support, cumbersome key input), the most suitable as well as commercially feasible games for these devices are 2D games. But, as capabilities of mobile phones are bound to increase over time, 3D games will become commonplace in the near future.
Mobile games can be developed using C++, Java (Java 2 Micro Edition, to be precise), and the Binary Runtime Environment for Wireless (BREW) platform from Qualcomm.
Why Choose Java for Mobile Game Development?
Although C++ has the advantage of being compiled into native code with direct access to system resources, and with BREW the platform provides end-to-end solutions to mobile game developers while allowing them to work with any desired language (including C++, Java, XML, and Flash), Java is the most popular choice for game development. Java, or the Java 2 Micro Edition (J2ME) platform to be precise, is identified as the most convenient for developing mobile games. (For more specifics on J2ME, see "What is Java 2 Micro Edition?") The driving forces behind J2ME's popularity are:
Now, you will explore MIDP 2.0 the in context of mobile gaming.
The Role of MIDP 2.0 in Game Development
MIDP 2.0 API is a set of feature-loaded APIs used for developing secure, rich-content multimedia applications, including games, for mobile devices. MIDP 2.0 builds upon its predecessor MIDP 1.0 to provide a better development platform for building efficient and fast mobile applications. For more information on MIDP 2.0, see the Resources section at the end of this article.
MIDP 2.0 further refines the features and functionalities provided by MIDP 1.0. For information on the new features, see What's New in MIDP 2.0. One of the important additions made to MIDP is the Game API, or the javax.microedition.lcdui.game API package to be precise. Through the Game API, MIDP 2.0 provides game developers with the readymade building blocks that were to be developed from scratch in the case of MIDP 1.0. These building blocks are classes for creating and controlling various game elements such as game canvas, sprites, layers, and so forth (these are explained in the next section). Thus, MIDP 2.0 significantly reduces the time involved in game development.
The other two MIDP 2.0 API packages essential for game development, also explored by this article, are javax.microedition.midlet and javax.microedition.lcdui.
The javax.microedition.midlet API package provides a base for developing all mobile applications. It contains the javax.microedition.midlet.MIDlet class, which is the base class of all J2ME-based mobile applications (also known as midlets) and must be extended by the main classes of all mobile applications. Quite similar to the java.applet.Applet class, the MIDlet class provides resources necessary to create midlets.
The javax.microedition.lcdui API package is necessary to develop a user interface (UI) for all types of mobile applications. This API provides classes to create and control UI components (such as screen, form, text box, radio buttons, and so on) and processing input for mobile applications, including games. Developers who have GUI development experience with AWT and SWING will find that the elements of the javax.microedition.lcdui package are similar to elements from these APIs.
I'll discuss the elements of these APIs relevant to game development as upi encounter them during the development of the example game app.
Building the Example Game
To understand the APIs and their respective classes better, you'll start developing a simple mobile game. This will be a solo player offline game, a car moving through an obstacle course. The player uses the left and right handset keys to "steer" the running car to the left or right to keep it from colliding into an obstacle. The game is over when a collision happens and the score is displayed. I'll call it HardDrive.
Note: The example game is developed using the J2ME Wireless Toolkit 2.1_01 and J2SE 1.4.2_07 SDK on a Windows 2000 platform. Other versions of both the Wireless Toolkit and J2SE SDK that are compatible with various platforms are also available.
Begin building the game app by putting together the source code; call it HardDrive. From what you've explored in the previous section, the first thing you need develop is the HardDriveMIDlet (HardDriveMIDlet.java) that extends the javax.microedition.midlet.MIDlet class.
HardDriveMIDlet.java
Listing 1.1: Code snippet from HardDriveMIDlet.java
import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.*;
public class HardDriveMIDlet extends MIDlet implements CommandListener {
... ... ... ... ... ... ... ...
HardDriveMIDlet also implements the javax.microedition.lcdui.CommandListener Interface to receive command events generated during application execution and process them. The command events occur when commands such as EXIT, CANCEL, BACK, OK, STOP, and the like are issued by using soft buttons (special buttons near the mobile phone's screen, other than arrow keys) and are handled by the commandAction( ) method of the HardDriveMIDlet. To be effective, a command should be added to a canvas.
HardDriveMIDlet serves as a container for all canvases, which are objects representing surface available for drawing on mobile device screen. Here, the midlet contains HardDriveCanvas, which extends the javax.microedition.lcdui.game.GameCanvas class. The GameCanvas is a special canvas meant for drawing efficient animated graphics for the game app, and is also capable of querying key status off-screen graphics buffering for smooth animation.
Another canvas that HardDriveMIDlet contains is GameOverCanvas, which extends the javax.microedition.lcdui.Canvas class. Canvas is a simple canvas meant for drawing text, lines, and simple shapes. The canvas is extended when simple drawing on the screen is required, instead of heavy graphics; for example, to display splash screens, game over screens, and game instructions. A game app's midlet may contain any number of canvases, but only one canvas is displayed at a time by using the setCurrent() method of the javax.microedition.lcdui.Display class.
HardDriveMIDlet also contains three other important methods, also called lifecycle methods. They are startApp(), pauseApp(), and destroyApp( ), corresponding to the Active, Paused, and Destroyed states of the midlet. In the startApp( ) method of HardDriveMIDlet, HardDriveCanvas is instantiated and the EXIT command is added to it by using the addCommand( ) method of HardDriveCanvas.
HardDriveCanvas.java
HardDriveCanvas implements a java.lang.Runnable interface to enable itself to run in its own thread, which is necessary to independently execute the game loop. The game loop is executed continuously to run the game until conditions necessary to stop the game become true (in this example, when the car collides with an obstacle or when the player exits the game anytime by using the Exit button).
Listing 1.2: Game loop of HardDriveCanvas.java
public void start()
{
gameRunning = true;
Thread gameThread = new Thread(this);
gameThread.start();
}
... ... ... ...
... ... ... ...
public void run()
{
Graphics g = getGraphics();
//... ... ...some code
while (gameRunning) //The game loop
{
tick();
input();
render(g);
//... ... ...some code
try
{
Thread.sleep(timeStep );
//... ... ... ...some code
}
catch (InterruptedException ie) { stop(); }
}
Listing 1.2 shows the game loop of HardDriveCanvas.java. This is a typical game loop that consists of calls to the following methods in a given order: tick( ), input( ), and render( ). The tick( ) method checks whether conditions necessary to stop the game have become true and changes the game state accordingly if so. Method input( ) handles game key (keys assigned for game playing) inputs and performs necessary actions for each key press, such as a game element's movement. The rendering of the game according to its state is handled by the render( ) method.
HardDriveCanvas also uses an instance of javax.microedition.lcdui.game.LayerManager that adds and manages multiple layers of the HardDriveCanvas, each layer representing a sprite. A sprite is a basic visual element of a game, a character that moves around on a game canvas and interacts with other sprites (here, the car or obstacles are sprites that may collide with each other). Each sprite forms a virtual layer, which may be fully or partially transparent, laid on the game canvas; these layers are stacked upon one another. A sprite is an object of the javax.microedition.lcdui.game.Sprite class, which provides the functionality of displaying, transforming, and rotating the sprite along with collision detection for the sprite. The tick( ) method internally uses the collidesWith( ) method of the sprite class to check the collision.
HardDriveCanvas instantiates an object of the ObstacleManager class that renders and moves obstacle sprites on the game canvas and checks whether they've collided with the car sprite.
ObstacleManager.java
An ObstacleManager creates and manages obstacles that appear randomly in the car's path. For the sake of simplicity and convenience, ObstacleManager.java has hardcoded values of a maximum number of obstacles appearing at a time in car's path. This value may be modified as desired.
Listing 1.3: Code snippet from ObstacleManager.java
private static final int MAX_OBS = 10;
//... ...some code
To create and display obstacles at random positions, ObstacleManager employs a simple strategy. It creates the initial batch of 10 obstacle sprites and uses LayerManager to add these sprites to the game canvas. Then, it sets their position by using randomly generated values of x and y coordinates and starts moving them towards the bottom of game canvas. As soon as each of these obstacles reaches the bottom of the canvas without colliding with the car, its position is again reset by using the same technique while the game score is increased by one. Thus, ObstacleManager re-uses the same obstacle sprites and displays them randomly.
GameOverCanvas.java
GameOverCanvas is a simple canvas that receives the game duration and game score information from HardDriveMIDlet and displays it.
Readying the Example Game for Distribution
J2ME Wireless Toolkit provides KToolbar, a useful tool for compiling, preverifying, packaging, and testing a mobile application. KToolbar simplifies and automates most of these tasks.
Now that the game code is ready, it needs to be organized in the following directory structure, provided by KToolbar (see KToolbar's User Guide for "Operating with KToolbar"). To achieve this, start KToolbar and create a new project, HardDriveGame, that will contain the HardDrive game app under the apps folder inside J2ME Wireless Toolkit's installation folder.
HardDriveGame (game project name, user-defined)
|___src
|
|___bin
|
|___classes
|
|___res
|
|___lib
|
|___tmpclasses
|
|___tmplib
Now, simply copy all four source files of the game app into the src folder and the car.png and obstacle.png icon files in the res folder. KToolbar takes care of everything else.
Now, the following actions will open the corresponding HardDriveGame game project, build it to compile (by using the JDK compiler), and preverify the game application.
Open project button -> choose HardDriveGame -> Build button
If some errors occur during the build process, they are displayed in the KToolbar window. Modify the game source code in the src folder to correct them; debugging has to be done manually because KToolbar does not provide a debugging facility. Otherwise, if no errors occur, a "Build complete" message is displayed in the KToolbar window.
Once the game project is built successfully, it could be run in the Emulator (a KToolbar component that virtually simulates the execution of the application on mobile phones) to test the application.
The game app is now complete and ready to be distributed. To package the game app into a .jar file for distribution using KToolbar, the following actions are to be performed.
Open project button -> choose HardDriveGame -> Project menu -> Package -> Create package / Create obfuscated package
The Create Package menu option will create a standard .jar file, whereas Create Obfuscated Package creates a .jar file of a smaller size than a standard .jar file. Once packaging is complete, the location of the .jar file is displayed in the KToolbar window, along with a .jad (Java Application Descriptor) file created automatically during packaging and used by Emulator while running the game app.
Emulator running example game app

Figure 1.1: Emulator running the example game app
Optionally, the game app's midlet is signed after packaging by using following actions:
Project menu -> Sign
This creates a digital signature for the .jar file, and adds it to the .jad file.
Now, the game app's .jar and .jad files, along with the MANIFEST.MF manifest file, created by KToolbar and grouped together as a midlet suite, are ready to be distributed.
This is how 2D mobile games are developed using Java. You can model your own games on the example given in this article.
Conclusion
Mobile game development has become a lucrative industry with a manifold increase in mobile subscriptions and the number of avid mobile gamers around the world. J2ME and MIDP 2.0 help game developers tap the potential of this industry by providing a platform for developing mobile game conveniently, quickly, and efficiently. MIDP 2.0 dedicates a whole API package for game development that provides readymade building blocks to simplify and quicken mobile game development.
In recent times, mobile games have gained popularity for providing personal entertainment on the go. This popularity has mobile gaming playing a pivotal role in revenue generation for the cellular carriers, game publishers, and handset makers, while generating numerous opportunities for game developers and associated professionals. With the number of mobile gamers around the world expected to reach 220 million by 2009, the mobile gaming business is projected to expand to higher levels and constitute a bigger portion of the profit pie for the cellular carriers and handset makers.
Mobile games can be classified into three broad categories:
- Embedded games: Games that are hardcoded into the mobile handset's system and shipped with it. Soon to be outdated/obsolete. Example: Snake, shipped with all Nokia phones.
- SMS games: Games played by sending text messages—for example, SMS to game server—that process them and sends back the result through SMS. Often in the form of live contests and polls. Not very popular because the cost of gaming increases with each SMS sent to the game server.
- Browser games: These games are played using mobile phone's built-in microbrowser (net browser for mobile devices), either in online or offline mode. Players can play such games online through their cellular carrier's or a third-party game provider's game Web site, or download them for offline gaming. This category includes a wide range of games, such as solo or multiplayer games, network games, offline games, arcade games, and so forth
Among these three categories, browser games are today's most popular type of mobile games for their innovative and multimedia-rich content, appealing presentation, and lower cost of gaming compared to SMS games. This article discusses the development of browsing games and henceforth, the term "mobile games" will refer to "browser games" in this article.
Note: This article concentrates on 2D games. Because a large number of mobile phones in circulation today have very limited resources (small screen, limited memory and graphics support, cumbersome key input), the most suitable as well as commercially feasible games for these devices are 2D games. But, as capabilities of mobile phones are bound to increase over time, 3D games will become commonplace in the near future.
Mobile games can be developed using C++, Java (Java 2 Micro Edition, to be precise), and the Binary Runtime Environment for Wireless (BREW) platform from Qualcomm.
Why Choose Java for Mobile Game Development?
Although C++ has the advantage of being compiled into native code with direct access to system resources, and with BREW the platform provides end-to-end solutions to mobile game developers while allowing them to work with any desired language (including C++, Java, XML, and Flash), Java is the most popular choice for game development. Java, or the Java 2 Micro Edition (J2ME) platform to be precise, is identified as the most convenient for developing mobile games. (For more specifics on J2ME, see "What is Java 2 Micro Edition?") The driving forces behind J2ME's popularity are:
- J2ME enjoys the status of an industry standard backed by all major handset makers, with most of the present day mobile phones being Java-enabled.
- J2ME is a free and open platform. This helps keep the development costs low and provides the necessary flexibility with ample support freely available for developers using it.
- Its highly portable nature ("Write once run anywhere") ensures that a game application written for one brand/type of handset will work with all other brands/types of Java-enabled handsets.
- It is especially optimized for small devices, is lightweight, and is highly secure because applications written on it cannot access or affect other applications running on the phone/device.
- J2ME consists of the Mobile Information Device Profile (MIDP) API that is designed specifically for developing applications for mobile devices including mobile phones, keeping in mind their limitations and constraints. Furthermore, the latest MIDP version 2.0 itself dedicates a whole API to game development, making game development simpler and quicker.
Now, you will explore MIDP 2.0 the in context of mobile gaming.
The Role of MIDP 2.0 in Game Development
MIDP 2.0 API is a set of feature-loaded APIs used for developing secure, rich-content multimedia applications, including games, for mobile devices. MIDP 2.0 builds upon its predecessor MIDP 1.0 to provide a better development platform for building efficient and fast mobile applications. For more information on MIDP 2.0, see the Resources section at the end of this article.
MIDP 2.0 further refines the features and functionalities provided by MIDP 1.0. For information on the new features, see What's New in MIDP 2.0. One of the important additions made to MIDP is the Game API, or the javax.microedition.lcdui.game API package to be precise. Through the Game API, MIDP 2.0 provides game developers with the readymade building blocks that were to be developed from scratch in the case of MIDP 1.0. These building blocks are classes for creating and controlling various game elements such as game canvas, sprites, layers, and so forth (these are explained in the next section). Thus, MIDP 2.0 significantly reduces the time involved in game development.
The other two MIDP 2.0 API packages essential for game development, also explored by this article, are javax.microedition.midlet and javax.microedition.lcdui.
The javax.microedition.midlet API package provides a base for developing all mobile applications. It contains the javax.microedition.midlet.MIDlet class, which is the base class of all J2ME-based mobile applications (also known as midlets) and must be extended by the main classes of all mobile applications. Quite similar to the java.applet.Applet class, the MIDlet class provides resources necessary to create midlets.
The javax.microedition.lcdui API package is necessary to develop a user interface (UI) for all types of mobile applications. This API provides classes to create and control UI components (such as screen, form, text box, radio buttons, and so on) and processing input for mobile applications, including games. Developers who have GUI development experience with AWT and SWING will find that the elements of the javax.microedition.lcdui package are similar to elements from these APIs.
I'll discuss the elements of these APIs relevant to game development as upi encounter them during the development of the example game app.
Building the Example Game
To understand the APIs and their respective classes better, you'll start developing a simple mobile game. This will be a solo player offline game, a car moving through an obstacle course. The player uses the left and right handset keys to "steer" the running car to the left or right to keep it from colliding into an obstacle. The game is over when a collision happens and the score is displayed. I'll call it HardDrive.
Note: The example game is developed using the J2ME Wireless Toolkit 2.1_01 and J2SE 1.4.2_07 SDK on a Windows 2000 platform. Other versions of both the Wireless Toolkit and J2SE SDK that are compatible with various platforms are also available.
Begin building the game app by putting together the source code; call it HardDrive. From what you've explored in the previous section, the first thing you need develop is the HardDriveMIDlet (HardDriveMIDlet.java) that extends the javax.microedition.midlet.MIDlet class.
HardDriveMIDlet.java
Listing 1.1: Code snippet from HardDriveMIDlet.java
import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.*;
public class HardDriveMIDlet extends MIDlet implements CommandListener {
... ... ... ... ... ... ... ...
HardDriveMIDlet also implements the javax.microedition.lcdui.CommandListener Interface to receive command events generated during application execution and process them. The command events occur when commands such as EXIT, CANCEL, BACK, OK, STOP, and the like are issued by using soft buttons (special buttons near the mobile phone's screen, other than arrow keys) and are handled by the commandAction( ) method of the HardDriveMIDlet. To be effective, a command should be added to a canvas.
HardDriveMIDlet serves as a container for all canvases, which are objects representing surface available for drawing on mobile device screen. Here, the midlet contains HardDriveCanvas, which extends the javax.microedition.lcdui.game.GameCanvas class. The GameCanvas is a special canvas meant for drawing efficient animated graphics for the game app, and is also capable of querying key status off-screen graphics buffering for smooth animation.
Another canvas that HardDriveMIDlet contains is GameOverCanvas, which extends the javax.microedition.lcdui.Canvas class. Canvas is a simple canvas meant for drawing text, lines, and simple shapes. The canvas is extended when simple drawing on the screen is required, instead of heavy graphics; for example, to display splash screens, game over screens, and game instructions. A game app's midlet may contain any number of canvases, but only one canvas is displayed at a time by using the setCurrent() method of the javax.microedition.lcdui.Display class.
HardDriveMIDlet also contains three other important methods, also called lifecycle methods. They are startApp(), pauseApp(), and destroyApp( ), corresponding to the Active, Paused, and Destroyed states of the midlet. In the startApp( ) method of HardDriveMIDlet, HardDriveCanvas is instantiated and the EXIT command is added to it by using the addCommand( ) method of HardDriveCanvas.
HardDriveCanvas.java
HardDriveCanvas implements a java.lang.Runnable interface to enable itself to run in its own thread, which is necessary to independently execute the game loop. The game loop is executed continuously to run the game until conditions necessary to stop the game become true (in this example, when the car collides with an obstacle or when the player exits the game anytime by using the Exit button).
Listing 1.2: Game loop of HardDriveCanvas.java
public void start()
{
gameRunning = true;
Thread gameThread = new Thread(this);
gameThread.start();
}
... ... ... ...
... ... ... ...
public void run()
{
Graphics g = getGraphics();
//... ... ...some code
while (gameRunning) //The game loop
{
tick();
input();
render(g);
//... ... ...some code
try
{
Thread.sleep(timeStep );
//... ... ... ...some code
}
catch (InterruptedException ie) { stop(); }
}
Listing 1.2 shows the game loop of HardDriveCanvas.java. This is a typical game loop that consists of calls to the following methods in a given order: tick( ), input( ), and render( ). The tick( ) method checks whether conditions necessary to stop the game have become true and changes the game state accordingly if so. Method input( ) handles game key (keys assigned for game playing) inputs and performs necessary actions for each key press, such as a game element's movement. The rendering of the game according to its state is handled by the render( ) method.
HardDriveCanvas also uses an instance of javax.microedition.lcdui.game.LayerManager that adds and manages multiple layers of the HardDriveCanvas, each layer representing a sprite. A sprite is a basic visual element of a game, a character that moves around on a game canvas and interacts with other sprites (here, the car or obstacles are sprites that may collide with each other). Each sprite forms a virtual layer, which may be fully or partially transparent, laid on the game canvas; these layers are stacked upon one another. A sprite is an object of the javax.microedition.lcdui.game.Sprite class, which provides the functionality of displaying, transforming, and rotating the sprite along with collision detection for the sprite. The tick( ) method internally uses the collidesWith( ) method of the sprite class to check the collision.
HardDriveCanvas instantiates an object of the ObstacleManager class that renders and moves obstacle sprites on the game canvas and checks whether they've collided with the car sprite.
ObstacleManager.java
An ObstacleManager creates and manages obstacles that appear randomly in the car's path. For the sake of simplicity and convenience, ObstacleManager.java has hardcoded values of a maximum number of obstacles appearing at a time in car's path. This value may be modified as desired.
Listing 1.3: Code snippet from ObstacleManager.java
private static final int MAX_OBS = 10;
//... ...some code
To create and display obstacles at random positions, ObstacleManager employs a simple strategy. It creates the initial batch of 10 obstacle sprites and uses LayerManager to add these sprites to the game canvas. Then, it sets their position by using randomly generated values of x and y coordinates and starts moving them towards the bottom of game canvas. As soon as each of these obstacles reaches the bottom of the canvas without colliding with the car, its position is again reset by using the same technique while the game score is increased by one. Thus, ObstacleManager re-uses the same obstacle sprites and displays them randomly.
GameOverCanvas.java
GameOverCanvas is a simple canvas that receives the game duration and game score information from HardDriveMIDlet and displays it.
Readying the Example Game for Distribution
J2ME Wireless Toolkit provides KToolbar, a useful tool for compiling, preverifying, packaging, and testing a mobile application. KToolbar simplifies and automates most of these tasks.
Now that the game code is ready, it needs to be organized in the following directory structure, provided by KToolbar (see KToolbar's User Guide for "Operating with KToolbar"). To achieve this, start KToolbar and create a new project, HardDriveGame, that will contain the HardDrive game app under the apps folder inside J2ME Wireless Toolkit's installation folder.
HardDriveGame (game project name, user-defined)
|___src
|
|___bin
|
|___classes
|
|___res
|
|___lib
|
|___tmpclasses
|
|___tmplib
Now, simply copy all four source files of the game app into the src folder and the car.png and obstacle.png icon files in the res folder. KToolbar takes care of everything else.
Now, the following actions will open the corresponding HardDriveGame game project, build it to compile (by using the JDK compiler), and preverify the game application.
Open project button -> choose HardDriveGame -> Build button
If some errors occur during the build process, they are displayed in the KToolbar window. Modify the game source code in the src folder to correct them; debugging has to be done manually because KToolbar does not provide a debugging facility. Otherwise, if no errors occur, a "Build complete" message is displayed in the KToolbar window.
Once the game project is built successfully, it could be run in the Emulator (a KToolbar component that virtually simulates the execution of the application on mobile phones) to test the application.
The game app is now complete and ready to be distributed. To package the game app into a .jar file for distribution using KToolbar, the following actions are to be performed.
Open project button -> choose HardDriveGame -> Project menu -> Package -> Create package / Create obfuscated package
The Create Package menu option will create a standard .jar file, whereas Create Obfuscated Package creates a .jar file of a smaller size than a standard .jar file. Once packaging is complete, the location of the .jar file is displayed in the KToolbar window, along with a .jad (Java Application Descriptor) file created automatically during packaging and used by Emulator while running the game app.
Emulator running example game app

Figure 1.1: Emulator running the example game app
Optionally, the game app's midlet is signed after packaging by using following actions:
Project menu -> Sign
This creates a digital signature for the .jar file, and adds it to the .jad file.
Now, the game app's .jar and .jad files, along with the MANIFEST.MF manifest file, created by KToolbar and grouped together as a midlet suite, are ready to be distributed.
This is how 2D mobile games are developed using Java. You can model your own games on the example given in this article.
Conclusion
Mobile game development has become a lucrative industry with a manifold increase in mobile subscriptions and the number of avid mobile gamers around the world. J2ME and MIDP 2.0 help game developers tap the potential of this industry by providing a platform for developing mobile game conveniently, quickly, and efficiently. MIDP 2.0 dedicates a whole API package for game development that provides readymade building blocks to simplify and quicken mobile game development.
The XNA Game Development Studio for Xbox 360 and PC
Lowering the bar for entry
On Monday, Microsoft celebrated the official full release of Microsoft's XNA Game Studio for both Windows and the Xbox 360. The beta program started in March of this year, and allowed developers a sneak peek at these technologies.
XNA Game Studio is a collection of game development technologies that Microsoft believes will make it easier than ever for independent developers to write and publish new titles. A basic version of the software package is a free download on Windows, but for $99 a year, or $49 for a four-month trial, developers gain access to a host of extra features, including access to sample art assets, technical support, source code, and the ability to compile and run their games on both Windows and the Xbox 360 platform.
Much has been written about the runaway cost of video game development in recent years. Keeping up with the ever-expanding laundry list of new graphics features and the demand for high-resolution content has caused the number of employees required to produce a new game to skyrocket. Smaller game companies have either folded or been bought out by larger publishers with the financial resources to pay for such large teams. In this environment, what chance is there for the independent developer?
Microsoft's hope is that the XNA Game Studio will help level the playing field and allow these small developers to produce games that can stand up with the "big boys" without requiring an enormous amount of resources. The company wants XNA Studio to become a kind of "YouTube for game developers," allowing many more people to express themselves in the form of video games and share their work with the world.
To achieve these goals, Microsoft is using a three-pronged strategy: technology, content, and community. The idea is to provide independent game developers with assistance at every stage of the game development process, and thus make it easier for small teams and even individuals to make their own games.
The technology
On the technological side is the XNA Game Studio software itself, which uses a customized copy of Microsoft's popular Visual Studio compiler. The big advantage of developing games with the XNA Game Studio is the ability to use managed code, which means that the compiler and runtime environment handles all the messy issues of memory allocation and garbage collection (deleting references to memory created by objects that are no longer in use, thus freeing up the memory for use elsewhere). This is done through Microsoft's .NET framework, which is available as a free download for Windows XP and comes preinstalled with Windows Vista. XNA acts as a bridge between the .NET frameworks and the lower-level game interfaces such as DirectX. Programmers call routines in the XNA game library that activate 3D screen modes, create polygons, paint textures on 3D meshes, play sounds, and interface with control devices such as joysticks or the Xbox 360 game controller.
Programming in managed code is generally acknowledged as being far more productive than using traditional methods. Joel Spolsky even went so far as to say that using managed code was the only advance in programming methodologies that led to measureably increased productivity. Microsoft's stalwart Visual Basic, although often derided by "real programmers," used managed code, and it was famous for its ability to enable coders to create programs quickly. However, interfacing between Visual Basic and DirectX was rather nasty and required a bunch of hacks that didn't always work as expected, nor did they allow the full functionality of DirectX to be accessed.
There were other managed development solutions available, such as Java, but performance concerns and a lack of integration with game libraries such as DirectX meant that Java was never a significant force in game development. (This is not to say, however, that nobody is developing games in Java—there is a healthy Java game development community, and the cross-platform nature of the Java library has meant that the language has found considerable success on diverse hardware such as cell phones.)
In the Windows and console world, however, there was no easy way to connect managed code and existing game development technologies, until a small team at Microsoft came up with the Managed DirectX platform, which was a set of libraries that glued together the .NET development framework and DirectX itself. A couple of years back, I picked up a copy of Managed DirectX Graphics and Game Programming by Tom Miller, which contained sample code and tutorials that allowed a complete game programming novice to enter the world of 3D meshes, texture maps, sound and joysticks, and even special effects such as specular highlights and programmable shaders. Having attempted graphics programming in C++ before, I was surprised at how easy the process was in C# (the code worked equally well in Visual Basic.NET as well).
Microsoft has taken this effort and expanded it tenfold to create the XNA development platform. Not only are all the Managed DirectX goodies present, but the entire build process has been optimized to make game development easier. The Game Studio includes an asset management system to simplify handling the hundreds of meshes and textures that make up a typical 3D game.
Of course, with the switch to managed code comes inevitable questions about performance compared to traditional C++ programming. The Managed DirectX team was concerned about these issues, and included sections on optimizing managed code and tools for finding performance bottlenecks. While performance may never match that of a highly-tuned C++ game engine, the XNA team has done wonders with the technology.
To demonstrate the types of games and the kind of performance that can be created with the XNA Game Studio, Microsoft took a small team and made an XNA Racing Game Starter Kit, which comes with the full source code and graphics. The game runs on the Xbox 360, utilizing one of the system's CPU cores (the code is single-threaded—developers can add multiple threads if they wish but there are no special libraries to assist in multithreaded code development as with Valve's new toolkits), and runs at 30 frames per second at 1080p, with 2x antialiasing and lots of special effects such as motion blur.
The content
Programming, of course, is just one aspect of game development. An increasingly large proportion of development costs these days is taken up by game art and other media assets: from 3D models to level designs and high-resolution textures, the task of creating the mountain of new content required for a new 3D game often seems overwhelming, especially to a small developer.
Microsoft hopes to help by providing subscribers to the XNA service access to the "XNA Creators Club," which includes a large database of free 2D and 3D art, models, and textures. Developers can use these assets as-is free of charge in developing their own games, or modify them to suit their purposes. Everything from human models to vehicles can be found in the art library. While there are plenty of free 3D models available on the Internet, having everything in one place saves developers time and energy, and ensures that the quality of the content is up to certain standards.
In addition, developers can, if they choose, share their own art assets with the community by uploading them to the Creators Club site.
3D models come in a dizzying variety of formats, depending on what tool has been used to create them. In order to make it easier for developers to create their own content, Microsoft has announced that SoftImage has added support for the XNA's native ".X" format to their Mod Tool 4.2 software, a free version of the company's popular 3D modelling program. In addition, the XNA software supports the Autodesk .FBX format, which can be exported by tools such as 3D Studio Max and its free cousin, GMax. The .X format is text-based and very straightforward, so it is easy for other modelling software companies to add support for the format, and some free file translators are already available.
The community
Microsoft's aim with the whole XNA program is to create a community of developers that can create homebrew games for both the Windows platform and the Xbox 360. Many beta testers of the XNA Game Studio are ecstatic that their games will run, largely unmodified, when recompiled on the Xbox 360.
Developers who subscribe to the $99-per-year service will not only be able to compile their games on the 360, but can upload them to the Creators Club (which will be accessible through Xbox Live) and share them with other developers. Microsoft will then choose which of the games are most popular and suitable for public consumption, and make them available to all Xbox Live users through the Xbox Live Marketplace. Unlike YouTube, where user-created content is shared for free and no money is returned to the creators, developers will receive royalties from games that are purchased on Xbox Live Marketplace.
Microsoft's plan is to allow the strengths of both the Xbox 360 and Windows PC platforms to support and enhance each other. Getting independent developers started for little to no cost with Windows programming encourages new independent games, and making these games available to a wider audience on the Xbox 360 will add financial incentive to keep creating. With Windows Vista, players will be able to access the same game on Xbox Live Marketplace whether they are at the console or at their PC, further adding the number of potential players for these games.
Will the days of the basement coder return?
Back in the late eighties and early nineties, small groups of hobbyist coders broke into the video game business by creating exciting new games on the Amiga, an open computer platform that had many advantages for developing the popular 2D side-scrolling games of the day. With nothing but a few magazines and a compiler, dedicated coders could create something that rivalled the output of the big game houses.
With the move to 3D gaming, development has become more complex, and, outside of the mod community, it has been difficult for small teams or individuals to create games that can stand next to the industry heavyweights. Many of the people on the XNA team either were involved with or remember the glory days of the Amiga gaming scene and its independent coders, and they are anxious to see if those times can come again.
Of course, the sheer sophistication of modern games makes it difficult to imagine a return to the days when an individual could compete on his own with the big boys. However, the popularity of simpler games such as Lumines on modern platforms has shown that you don't necessarily have to make a sprawling epic adventure in order to be a success. With the XNA Game Studio lowering the bar for developers to create content, we can expect more unique and interesting titles to come out of the woodwork. Not all of them will be gems, of course, but the next killer game may well come from someone the world has never heard of.
Microsoft has big plans for the XNA Game Studio, and plans to sponsor a contest in January for the best new game written using their development platform. The winner will receive publicity and an unannounced cash prize, as well as inclusion in the Xbox Live Marketplace. So what are you waiting for? Get coding!
On Monday, Microsoft celebrated the official full release of Microsoft's XNA Game Studio for both Windows and the Xbox 360. The beta program started in March of this year, and allowed developers a sneak peek at these technologies.
XNA Game Studio is a collection of game development technologies that Microsoft believes will make it easier than ever for independent developers to write and publish new titles. A basic version of the software package is a free download on Windows, but for $99 a year, or $49 for a four-month trial, developers gain access to a host of extra features, including access to sample art assets, technical support, source code, and the ability to compile and run their games on both Windows and the Xbox 360 platform.
Much has been written about the runaway cost of video game development in recent years. Keeping up with the ever-expanding laundry list of new graphics features and the demand for high-resolution content has caused the number of employees required to produce a new game to skyrocket. Smaller game companies have either folded or been bought out by larger publishers with the financial resources to pay for such large teams. In this environment, what chance is there for the independent developer?
Microsoft's hope is that the XNA Game Studio will help level the playing field and allow these small developers to produce games that can stand up with the "big boys" without requiring an enormous amount of resources. The company wants XNA Studio to become a kind of "YouTube for game developers," allowing many more people to express themselves in the form of video games and share their work with the world.
To achieve these goals, Microsoft is using a three-pronged strategy: technology, content, and community. The idea is to provide independent game developers with assistance at every stage of the game development process, and thus make it easier for small teams and even individuals to make their own games.
The technology
On the technological side is the XNA Game Studio software itself, which uses a customized copy of Microsoft's popular Visual Studio compiler. The big advantage of developing games with the XNA Game Studio is the ability to use managed code, which means that the compiler and runtime environment handles all the messy issues of memory allocation and garbage collection (deleting references to memory created by objects that are no longer in use, thus freeing up the memory for use elsewhere). This is done through Microsoft's .NET framework, which is available as a free download for Windows XP and comes preinstalled with Windows Vista. XNA acts as a bridge between the .NET frameworks and the lower-level game interfaces such as DirectX. Programmers call routines in the XNA game library that activate 3D screen modes, create polygons, paint textures on 3D meshes, play sounds, and interface with control devices such as joysticks or the Xbox 360 game controller.
Programming in managed code is generally acknowledged as being far more productive than using traditional methods. Joel Spolsky even went so far as to say that using managed code was the only advance in programming methodologies that led to measureably increased productivity. Microsoft's stalwart Visual Basic, although often derided by "real programmers," used managed code, and it was famous for its ability to enable coders to create programs quickly. However, interfacing between Visual Basic and DirectX was rather nasty and required a bunch of hacks that didn't always work as expected, nor did they allow the full functionality of DirectX to be accessed.
There were other managed development solutions available, such as Java, but performance concerns and a lack of integration with game libraries such as DirectX meant that Java was never a significant force in game development. (This is not to say, however, that nobody is developing games in Java—there is a healthy Java game development community, and the cross-platform nature of the Java library has meant that the language has found considerable success on diverse hardware such as cell phones.)
In the Windows and console world, however, there was no easy way to connect managed code and existing game development technologies, until a small team at Microsoft came up with the Managed DirectX platform, which was a set of libraries that glued together the .NET development framework and DirectX itself. A couple of years back, I picked up a copy of Managed DirectX Graphics and Game Programming by Tom Miller, which contained sample code and tutorials that allowed a complete game programming novice to enter the world of 3D meshes, texture maps, sound and joysticks, and even special effects such as specular highlights and programmable shaders. Having attempted graphics programming in C++ before, I was surprised at how easy the process was in C# (the code worked equally well in Visual Basic.NET as well).
Microsoft has taken this effort and expanded it tenfold to create the XNA development platform. Not only are all the Managed DirectX goodies present, but the entire build process has been optimized to make game development easier. The Game Studio includes an asset management system to simplify handling the hundreds of meshes and textures that make up a typical 3D game.
Of course, with the switch to managed code comes inevitable questions about performance compared to traditional C++ programming. The Managed DirectX team was concerned about these issues, and included sections on optimizing managed code and tools for finding performance bottlenecks. While performance may never match that of a highly-tuned C++ game engine, the XNA team has done wonders with the technology.
To demonstrate the types of games and the kind of performance that can be created with the XNA Game Studio, Microsoft took a small team and made an XNA Racing Game Starter Kit, which comes with the full source code and graphics. The game runs on the Xbox 360, utilizing one of the system's CPU cores (the code is single-threaded—developers can add multiple threads if they wish but there are no special libraries to assist in multithreaded code development as with Valve's new toolkits), and runs at 30 frames per second at 1080p, with 2x antialiasing and lots of special effects such as motion blur.
The content
Programming, of course, is just one aspect of game development. An increasingly large proportion of development costs these days is taken up by game art and other media assets: from 3D models to level designs and high-resolution textures, the task of creating the mountain of new content required for a new 3D game often seems overwhelming, especially to a small developer.
Microsoft hopes to help by providing subscribers to the XNA service access to the "XNA Creators Club," which includes a large database of free 2D and 3D art, models, and textures. Developers can use these assets as-is free of charge in developing their own games, or modify them to suit their purposes. Everything from human models to vehicles can be found in the art library. While there are plenty of free 3D models available on the Internet, having everything in one place saves developers time and energy, and ensures that the quality of the content is up to certain standards.
In addition, developers can, if they choose, share their own art assets with the community by uploading them to the Creators Club site.
3D models come in a dizzying variety of formats, depending on what tool has been used to create them. In order to make it easier for developers to create their own content, Microsoft has announced that SoftImage has added support for the XNA's native ".X" format to their Mod Tool 4.2 software, a free version of the company's popular 3D modelling program. In addition, the XNA software supports the Autodesk .FBX format, which can be exported by tools such as 3D Studio Max and its free cousin, GMax. The .X format is text-based and very straightforward, so it is easy for other modelling software companies to add support for the format, and some free file translators are already available.
The community
Microsoft's aim with the whole XNA program is to create a community of developers that can create homebrew games for both the Windows platform and the Xbox 360. Many beta testers of the XNA Game Studio are ecstatic that their games will run, largely unmodified, when recompiled on the Xbox 360.
Developers who subscribe to the $99-per-year service will not only be able to compile their games on the 360, but can upload them to the Creators Club (which will be accessible through Xbox Live) and share them with other developers. Microsoft will then choose which of the games are most popular and suitable for public consumption, and make them available to all Xbox Live users through the Xbox Live Marketplace. Unlike YouTube, where user-created content is shared for free and no money is returned to the creators, developers will receive royalties from games that are purchased on Xbox Live Marketplace.
Microsoft's plan is to allow the strengths of both the Xbox 360 and Windows PC platforms to support and enhance each other. Getting independent developers started for little to no cost with Windows programming encourages new independent games, and making these games available to a wider audience on the Xbox 360 will add financial incentive to keep creating. With Windows Vista, players will be able to access the same game on Xbox Live Marketplace whether they are at the console or at their PC, further adding the number of potential players for these games.
Will the days of the basement coder return?
Back in the late eighties and early nineties, small groups of hobbyist coders broke into the video game business by creating exciting new games on the Amiga, an open computer platform that had many advantages for developing the popular 2D side-scrolling games of the day. With nothing but a few magazines and a compiler, dedicated coders could create something that rivalled the output of the big game houses.
With the move to 3D gaming, development has become more complex, and, outside of the mod community, it has been difficult for small teams or individuals to create games that can stand next to the industry heavyweights. Many of the people on the XNA team either were involved with or remember the glory days of the Amiga gaming scene and its independent coders, and they are anxious to see if those times can come again.
Of course, the sheer sophistication of modern games makes it difficult to imagine a return to the days when an individual could compete on his own with the big boys. However, the popularity of simpler games such as Lumines on modern platforms has shown that you don't necessarily have to make a sprawling epic adventure in order to be a success. With the XNA Game Studio lowering the bar for developers to create content, we can expect more unique and interesting titles to come out of the woodwork. Not all of them will be gems, of course, but the next killer game may well come from someone the world has never heard of.
Microsoft has big plans for the XNA Game Studio, and plans to sponsor a contest in January for the best new game written using their development platform. The winner will receive publicity and an unannounced cash prize, as well as inclusion in the Xbox Live Marketplace. So what are you waiting for? Get coding!
Sunday, January 21, 2007
Tile Graphics Techniques 1.0
What's This Document (Not) About?
I wrote a CRPG for my Amiga and got about 85% finished when I bought my PC and dropped the Amiga project to learn PC programming. The point is that while that game was/is really cool, I have learned and developed much since then. Here's my (partial) full disclosure :)
This document will cover graphics in the style of Ultima 6 (presumably Ultima 7 as well, but I have never played it-- read on). I will also discuss many of the same techniques that Greg Taylor covered in his Tile-Based Games FAQ. That is one reason that I have composed this document, because I found the information in Greg's FAQ to be somewhat disappointing. I hope to present some ideas that will advance those he overviewed. Granted, he covered lots of things I won't cover here (roof tiles, hidden map areas, palette shifting), but there are so many fundamentals that could be implemented in a better way, I had to put out an alternate solution. Oh yeah, it is presumed that the reader has a solid understanding of C programming.
While Mr. Taylor tended to emphasize the 640K barrier, I think that everyone should get a 32-bit, protected mode compiler. Let's face it, the small overhead of running a DOS extender with your protected mode program is negligible in the face of the benefits gained. I feel it's a fair assertion to assume that people who play games have at least 4 megs in their machine. Catering to the lowest common denominator (i.e., 286/640K) is a good thing as long as that denominator isn't too low. I think nowadays, a 486-33/4meg is a decent denominator. The hassles of EMS and conventional memory simply disappear when protected mode is used. I've never been more frustrated by this situation than when I couldn't get Ultima 7 to run on my snappy Pentium because I had to create a boot disk and still couldn't free the conventional memory required (without purchasing a commercial memory manager). I own U7, but I've never played it. That kind of annoyance can be avoided by simply using a "modern" compiler, with the added bonus that most of the time, it will run in the increasingly popular environment, Windows 95. (Sorry to be ranting but that's another reason I'm writing this document :)
Note: I am assuming that you are interested in CRPGs since they are the most common game genre to employ this sort of graphics. Of course, the techniques can be applied to any game or genre (ie, a strategy game).
Vocabulary
For the uninitiated, here's a list of some terms I use and their meanings relative to my conceptions of them.
Clipping This is limiting the plotting of a tile to within an arbitrary boundary (the screen edge, for example). If the tile's graphic imagery crosses this boundary, it is "clipped"or trimmed so that only the area within the boundary gets drawn.
Masking When a tile is draw to the screen with masking, all pixels of a predetermined color are not plotted so that the tile will only cover the background where the shape of the graphic dictates. No big, blank boxes around the graphic imagery.
NPC Stands for Non-Player Character, or anyone that the player cannot directly control.
Object I refer to these in this document not in the sense of OOP, but as an independently defined data structure that describes something in your game universe (a person, an item, or a map entity).
Tile Also called an icon, a bob, a sprite. It is, simply, an arbitrarily sized bitmap (though commonly 16x16 pixels).
Plotting Tiles

The first task to creating a tile-based game is plotting the landscape and its inhabitants. Well, I will assume that you have several routines already:
* Plot a 16x16 tile, without masking (which is faster than with masking).
* Plot an arbitrarily sized tile, with masking.
* Either of the above routines with clipping (though this is optional).
I won't waste time getting detailed about how to plot tiles, as there are many good tutorials available on the subject (get XLib and don't worry about the nuts and bolts of it).
Maps and the Lay of the Land
Greg Taylor mentions multiple layered maps. He's absolutely right: you will need multiple layers to get any kind of complex graphics in your world. But, he didn't take the idea far enough.
Three Dimensional Arrays
Let's look at a typical way of implementing a map: arrays. Good ole arrays. When we all programmed in BASIC and arrays were all we had, sure, use them for your maps. Simply declare map[100][100] and there you have it. Want multiple layers? Okay, map[3][100][100]. There!
Well, here's what I suggest. Keep the first declaration. But what we want to achieve is massive flexibility. We don't want to be limited to 3 layers or waste memory when we need less. (Side note: efficiency is _always_ of utmost concern! I don't care if your target platform has 32 terabytes of memory, always optimize for space and speed!) So how do we get unlimited layers while using only as much memory as required at any given moment?
About the time you take Pascal in your CS cirriculum, they'll teach you about a thing called a linked-list. Perhaps already you can guess what I'm about to explain...
If we define our _entire_ map as map[100][100], then for each element in that array, we define a list header. Yep, each element is a linked-list. You might be thinking, "But what about space optimization? Won't 10,000 linked lists be wasted memory?" Below we'll talk about ways to access the map incrementally, which will solve this huge array problem. As it stands, the answer to your question is still "No."
Remember that we had map[3][100][100], which (at minimum) is 30,000 bytes. Granted, a linked list header may be 8 bytes itself which means map[100][100] is 80,000 bytes. Yes, it's bigger, but even without special techniques for accessing only part of the map at once, the payoff in flexibility and graphic enhancement makes it worth the size. This is another reason for using a protected mode compiler-- when you absolutely have to, you can have these huge structures without worry of hitting any stupid 640K limit.
Okay, so you accept what I've said so far? Okay, then, on to the map representation. How do we use these linked lists to achieve multiple layers? This will require some sort of map "object" definition.
struct map_tile {
struct map_tile *next; // pointer to next in list
struct tile_gfx *tile; // pointer to graphic imagery object
char type; // keep reading...
char bitflags;
};
For example:
map[0][0]
LIST_HEADER -> map_tile -> map_tile -> NULL
map[1][0]
LIST_HEADER -> map_tile-> NULL
...and so on. Using this setup, the first map_tile is the bottom-most layer in your map. Each successive layer simply adds another map_tile to that specific map position (ie, map element, ie, list). This way, you could stack twenty tiles on one map position, while having only two on a tile nearby-- with no memory wasted on empty spaces! That is the big payoff for this technique.
I would advise that you follow some conventions.
1. The first map_tile in a list should be a ground layer (ie, grass, sand). It should also be a constant 16x16 tile that should be plotted without masking.
2. All map_tiles after the first can be variant sized (up to 32x32) and should be plotted with masking. These successive layers will be trees, rocks, walls, people, monsters, swords, treasures, and anything else.
If you're wondering how I intend to handle a 32x32 tile in a 16x16 tile world, keep reading. Let's get the basics down first. In fact, let's drop this for the moment and discuss some fundamental ideas about representing NPCs and items for a game.
The Flesh of a Soul

I should explain that I delineate objects from their graphics. That is, there are separate structures for objects and for their graphic imagery. For example:
struct npc_object {
struct npc_object *next; // keep a pointer handy for later
struct tile_gfx *tile; // pointer to the graphic imagery for this guy
struct attributes atts; // str, dex, hp, inventory, etc.
char x_loc; // location on map
char y_loc; // may need to be an unsigned short if the map
// is bigger than 255x255 squares
};
struct tile_gfx {
struct tile_gfx *next; // always
char *imagery; // pointer to the actual bitmap data
char x_size; // size in pixels
char y_size;
char x_offset; // for handling those 32x32 tiles
char y_offset;
char bitflags; // 8 bitflags (ie, masked?, animated?, etc)
char align; // align to dword boundary
};
So when a person or monster is plotted to the screen, the tile information for each character can be totally different and referenced through the NPC structure. Likewise for items. Remember that these graphics will be drawn with masking so that the map background can still show through.
With this in mind, we commence with map specifics.
Plotting Map Layers
struct linked_list map[100][100];
This is our map definition. We have a separate linked list holding all NPCs that are active and their relevant information.
In Ultima 6, if a character went in a doorway, the character appeared under the archway. The characters were further obscured by tall signs, and the like. This is a very cool and realistic effect. (Though I haven't done benchmarks on any of the mapping techniques here, I suspect that what I'm building up to will require a fair amount of horsepower. Hopefully our common denominator 486-33 will suffice.)
To achieve this obscuring effect, I would flag each map_tile as either "under" or "over" (thus, the need for the bitflags field in the map_tile structure). The bottom layer (ground) will definitely be "under" since all tiles get plotted over these regardless. Things like trees, walls and open doorways should be "over" since the player could potentially appear obscured by such objects. For best efficiency, sort all these tile lists so that "under" tiles come before "over" tiles.
Here's how the plotting algorithm should work:
A) Plot all ground tiles (ie, the first tile in each list).
B) Plot all tiles flagged "under."
C) Plot all NPCs and items.
D) Plot all tiles flagged "over."
The plotting should go from upper-left to lower-right to appear correct.
The 32 Pixel Question
32x32 Tile alignment
Now that the basic map structure and function is understood (it is, isn't it?), we can get to the 32x32 tile question. Since all tiles have a 16x16 "base" anything over this size will simply be plotted with an offset. The offset should force the lower-right corner of the tile to align with the 16x16 pixel base.
A tile that is 20x17 would have an x_offset of -4, y_offset of -1. This is calculated with (16 - x_size), (16 - y_size). If a tile is smaller than 16x16 (a knife, for example), then it will have a positive offset. Look: a 7x10 tile has +8 x_offset, +6 y_offset.
That is, unless you want to center small tiles in the 16x16 pixel space. That's easy enough.
So now we see how a larger tile can obscure those in adjacent locations. A very tall tree would do this. This ain't Ultima 4 anymore! Let's get out of the 80's technology and at least catch up to early 90's.
With this outline, hopefully you can exploit the possibilities yourself. Imagine the flexibility over the "old" array technique. Instead of drawing millions of tiles for each piece of scenery like a plain wall, another wall with a torch on it, etc, you simply draw the plain wall, draw the torch, then stack the picture tile on the wall tile. You can reuse the torch for different wall types without drawing a new wall with a torch on it. Again, this saves storage space by having fewer graphics but with more variety.
Material Objects and Possessions
Handling item objects, if you want Ultima-level technology, requires that each object be defined in a detailed way and managed much like NPCs-- with a linked list. This is a little more complicated, but the enrichment of the game environment is incredible. In my Amiga implementation, for example, I defined objects that can be moved, carried, used, contain other objects, etc, just like Ultima 6. This allows your universes to really come to life.
All you really have to do is have a main item list, call it all_items. This list will hold each and every item that exists in your world from a bedroll to a candle to a ration of food. It's handling this list safely and cleanly that presents the major problem. And if you have a solid knowledge of lists this is not much of a problem. I suggest that you build a list library of common functions (ie, insertion, deletion, creation, destruction) or find a library that already exists and works reliably. Then apply these concepts.
But now, let us aside to something else of relevance to our all_items linked list.
Accessing the World Map Incrementally
Since I've mentioned Greg Taylor's FAQ previously, I will come to it again. He suggests holding the entire map on disk and "paging" in only the areas that are close by. That's exactly what I suggest. The only hairy part is the nature of my maps. They are linked lists and this makes for a complication when accessing them bits at a time.
The main barrier, then, is the storage format. How do we store a map when it's a huge array of linked lists and link nodes? Well, there are many possibilities. One is to encode the data with "identifier" bytes. There are several variations of this.
For each map location (map[x][y]), we write to disk the number of nodes in each list at that location (minimum 1, because we have to have a ground tile). This is very simple. To retrieve it is the tricky part.
1. Read one byte. If it is zero, then we have no more nodes for the current x:y position. If it is non-zero, we have to read that many nodes from disk, building the list on the fly. Keep reading nodes until the Nth node is finally read.
2. Repeat step A until the entire section of map we want is read into memory.
In code:
char c, i, x, y;
struct map_tile *mt;
x = current_x_position; // these will probably be assigned by a loop
y = current_y_position;
while (1) { // loop infinitely, so be careful!
c = fgetc(filehandle); // read our encoding byte
if (feof(filehandle)) break; // end the loop, we are out of data
// you'll also check to see if you've read all
// neccessary data and use break to exit the loop
for (i=0; i<< c; i++) { // read as many nodes as encoded
mt = newnode(); // remember to do failure checks and handle errors!
fread(mt, sizeof(struct map_tile), 1, filehandle);
addnode(map[x][y], mt); // put the new node in the map lists
}
// continue reading nodes until all map data is in memory
}
This code fragment leaves out quite a bit, like list details and deciding what map coordinate range you need to read. At least you get to see the principles in action. There is _lots_ of linked list juggling. You must be very, very careful about memory leaks and such when programming this. Take your time, comment your code, and know what you're doing! With this sort of code, you need to plan out exactly what to do. Some more than others, but everyone needs a plan.
Another method would require that you add two new fields to the map_tile structure:
struct map_tile {
struct map_tile *next;
struct tile_gfx *tile;
char type;
char bitflags;
char x_loc; // store each tile's location here
char y_loc;
};
Now, when you read a tile, it has the location information in it. You simply insert the read node into the according list in memory. I like the first method better, though, because it uses less disk space since the encoding only requires one byte, especially for maps > 255x255 that will need a short for index reference. I leave the final decision with you, because there are better ways to implement this, I'm sure.
Now that we can access the map at arbitrary points from disk, how do we decide what to store in memory and when to load more? As Greg states, look at the current map "chunk" as a set of 9 small areas, theoretical boundaries actually...
Structure of the map
Each small area might represent a 10x10 map chunk. As the player moves across the middle boundaries, the map data is shifted (scrolled) and whatever areas are "blank" afterward will be the ones we load from disk. Refer to Greg's FAQ for more explanation, if you need it. Hopefully, it is self-evident.
I will only say that you must remember to deallocate all nodes no longer needed. This cannot be over-stated. You will find many, many bugs lurking in this section of your program if you are not an alert programmer. I learned this through tedious hours of memory leak chasing. Tedious hours.
And What of Our Possessions
We come back to our discussion of the all_items linked list. Since your world may be exceedingly large (my project included over 400 items at 85% completion), you will not want to keep this whole list all the time. If memory allows, sure, keep it in memory for speed. If not, then access it from disk when needed. Elaboration follows.
Like the huge map, which only comes into memory in chunks, we only need parts of the all_items list in memory at any one time. Two reasons: 1) it is far less space consuming than keeping 1000 items in memory all the time, 2) it is much quicker when performing operations on the items (ie, searches, etc).
Point 2) is particularly of interest since we will be dealing with those items closest to the player the most often. Doesn't it make sense to keep only the necessary items in another list, a "local" list? Of course it does.
Each time the player wants to manipulate an item (say, picking up a sword), the program will have to find the item in question by searching the list. Then it will have to perform some operation(s) on it (ie, place the sword in the players possession). This is not to mention the fact that each graphic update will require searching the list of items to determine which are visible and which are not. Now this makes perfect sense, right?
So we establish a secondary linked list: local_items. This list will grow and shrink as the player moves through the landscape. Items will get moved to and from this list and the all_items list. all_items will hold items not currently used. I would recommend holding all_items in memory when possible for speed issues and issues of altering the game state-- that is, as related to saved games.
You see, if you want to save a game in progress, all object lists must be written to disk. But if you are constantly writing over the all_items list, and the computer crashes, that game state is ruined because part of all_items was in memory, and not all of it was on disk since item in local_items are literally removed from all_items. Follow?
The solution is to simply store all_items, for game use, in a temporary copy of the initial game state. That way, all previous information is preserved and you safely work with a copy. But to avoid all this hocus, keep the lists in memory at all times, only updating the disk image when a game is saved. I hope all that soaked in. If not, re-read it in a couple days.
Straying From the Path

I seem to have gone off on a few tangents here. But I think that they are all an integral part of the big picture. Now I would like to address some of the problems from Greg's FAQ that this framework fixes (I'm not picking on him, but I am hopefully building on his information), with direct references to his work.
III: Walkability
To create a map space that cannot be crossed by the player, simply use the bitflags to denote a barrier object. This can be either a map_tile, a npc_object, or an item_object. If any one of these appears in the location that the player is about to move into, then movement is restricted. Simple and clean, and no need to make any limitations on the map or objects.
In fact, I divide barriers into several classes. One is a total barrier. Another only restricts movement-- but not things like arrows or spells flying across them. Another only restricts arrows and such, but not movement (for magical sanctuaries). This can all be achieved by using those simple bitflags in each object structure.
For those of you who want to see code...
#define flag_BARRIER (1) // this blocks movement and missiles
#define flag_MOVEBARRIER (1<<1) // block movement only
#define flag_MISSLEBAR (1<<2) // block missiles only
Then, wherever your code handles movement...
if (map[x][y].bitflags & flag_BARRIER) // this checks for the bitflag
player_cant_move();
Of course, accessing the map data will involve checking each object in the x,y location list in question for these flags, but you get the idea.
VI: the OBJECT layer
Greg has no autonomous objects. His maps hold object information, much like Ultima 4 probably did. With my system, there is no such restriction and no limitations. You can stack gobs of objects and hordes of people, too, since they all exist independent of the map data.
So Close, Yet So Far
I could go on typing about different areas of CRPG making for hours, but I want to limit this document to tile graphics related problems. I should probably work all of this up into a book and include a demo and tons of source code, but who would publish it? :) Potential future installments...
Using event flags to trigger changes in the game world (ie, when a quest is completed or a decisive action made), the writing of "data compilers" to create attributes for your objects in a script file (as I did with my Amiga project), creating a map/object/graphics editor, implementing a system of spells and using "reagents" to create them, character creation routines, NPC speech system, NPC artificial intelligence-- especially combat where NPCs intelligently arm themselves based on circumstances and resources at hand (ie, close range weaponry, spells, abilities, etc), animating objects. The list goes on. I have experience programming all of these things, and I plan to put that experience to use and create a CRPG for the PC. I am in college, so it will come slowly, but one will emerge. Why don't you explore these subjects with me, and let's create some good games.
If there is sufficient interest, I might write up more technique documents. That all remains to be seen. Give me your feedback. I want to discuss these things with people, because nobody seems to want to. I suspect they fear that people will rip-off their ideas. Let me state a fact, everyone: technical achievement does not make a great game. If everything I said here you can do better, you are at no particular advantage of making a better game than me. The quality lies in content. So quit worrying about someone stealing your techniques and algorithms, because even if they did, that doesn't mean they will undermine your success as a game designer.
SPEAK UP! I would love to hear alternate/better solutions to these programming puzzles.
I wrote a CRPG for my Amiga and got about 85% finished when I bought my PC and dropped the Amiga project to learn PC programming. The point is that while that game was/is really cool, I have learned and developed much since then. Here's my (partial) full disclosure :)
This document will cover graphics in the style of Ultima 6 (presumably Ultima 7 as well, but I have never played it-- read on). I will also discuss many of the same techniques that Greg Taylor covered in his Tile-Based Games FAQ. That is one reason that I have composed this document, because I found the information in Greg's FAQ to be somewhat disappointing. I hope to present some ideas that will advance those he overviewed. Granted, he covered lots of things I won't cover here (roof tiles, hidden map areas, palette shifting), but there are so many fundamentals that could be implemented in a better way, I had to put out an alternate solution. Oh yeah, it is presumed that the reader has a solid understanding of C programming.
While Mr. Taylor tended to emphasize the 640K barrier, I think that everyone should get a 32-bit, protected mode compiler. Let's face it, the small overhead of running a DOS extender with your protected mode program is negligible in the face of the benefits gained. I feel it's a fair assertion to assume that people who play games have at least 4 megs in their machine. Catering to the lowest common denominator (i.e., 286/640K) is a good thing as long as that denominator isn't too low. I think nowadays, a 486-33/4meg is a decent denominator. The hassles of EMS and conventional memory simply disappear when protected mode is used. I've never been more frustrated by this situation than when I couldn't get Ultima 7 to run on my snappy Pentium because I had to create a boot disk and still couldn't free the conventional memory required (without purchasing a commercial memory manager). I own U7, but I've never played it. That kind of annoyance can be avoided by simply using a "modern" compiler, with the added bonus that most of the time, it will run in the increasingly popular environment, Windows 95. (Sorry to be ranting but that's another reason I'm writing this document :)
Note: I am assuming that you are interested in CRPGs since they are the most common game genre to employ this sort of graphics. Of course, the techniques can be applied to any game or genre (ie, a strategy game).
Vocabulary
For the uninitiated, here's a list of some terms I use and their meanings relative to my conceptions of them.
Clipping This is limiting the plotting of a tile to within an arbitrary boundary (the screen edge, for example). If the tile's graphic imagery crosses this boundary, it is "clipped"or trimmed so that only the area within the boundary gets drawn.
Masking When a tile is draw to the screen with masking, all pixels of a predetermined color are not plotted so that the tile will only cover the background where the shape of the graphic dictates. No big, blank boxes around the graphic imagery.
NPC Stands for Non-Player Character, or anyone that the player cannot directly control.
Object I refer to these in this document not in the sense of OOP, but as an independently defined data structure that describes something in your game universe (a person, an item, or a map entity).
Tile Also called an icon, a bob, a sprite. It is, simply, an arbitrarily sized bitmap (though commonly 16x16 pixels).
Plotting Tiles

The first task to creating a tile-based game is plotting the landscape and its inhabitants. Well, I will assume that you have several routines already:
* Plot a 16x16 tile, without masking (which is faster than with masking).
* Plot an arbitrarily sized tile, with masking.
* Either of the above routines with clipping (though this is optional).
I won't waste time getting detailed about how to plot tiles, as there are many good tutorials available on the subject (get XLib and don't worry about the nuts and bolts of it).
Maps and the Lay of the Land
Greg Taylor mentions multiple layered maps. He's absolutely right: you will need multiple layers to get any kind of complex graphics in your world. But, he didn't take the idea far enough.
Three Dimensional Arrays
Let's look at a typical way of implementing a map: arrays. Good ole arrays. When we all programmed in BASIC and arrays were all we had, sure, use them for your maps. Simply declare map[100][100] and there you have it. Want multiple layers? Okay, map[3][100][100]. There!
Well, here's what I suggest. Keep the first declaration. But what we want to achieve is massive flexibility. We don't want to be limited to 3 layers or waste memory when we need less. (Side note: efficiency is _always_ of utmost concern! I don't care if your target platform has 32 terabytes of memory, always optimize for space and speed!) So how do we get unlimited layers while using only as much memory as required at any given moment?
About the time you take Pascal in your CS cirriculum, they'll teach you about a thing called a linked-list. Perhaps already you can guess what I'm about to explain...
If we define our _entire_ map as map[100][100], then for each element in that array, we define a list header. Yep, each element is a linked-list. You might be thinking, "But what about space optimization? Won't 10,000 linked lists be wasted memory?" Below we'll talk about ways to access the map incrementally, which will solve this huge array problem. As it stands, the answer to your question is still "No."
Remember that we had map[3][100][100], which (at minimum) is 30,000 bytes. Granted, a linked list header may be 8 bytes itself which means map[100][100] is 80,000 bytes. Yes, it's bigger, but even without special techniques for accessing only part of the map at once, the payoff in flexibility and graphic enhancement makes it worth the size. This is another reason for using a protected mode compiler-- when you absolutely have to, you can have these huge structures without worry of hitting any stupid 640K limit.
Okay, so you accept what I've said so far? Okay, then, on to the map representation. How do we use these linked lists to achieve multiple layers? This will require some sort of map "object" definition.
struct map_tile {
struct map_tile *next; // pointer to next in list
struct tile_gfx *tile; // pointer to graphic imagery object
char type; // keep reading...
char bitflags;
};
For example:
map[0][0]
LIST_HEADER -> map_tile -> map_tile -> NULL
map[1][0]
LIST_HEADER -> map_tile-> NULL
...and so on. Using this setup, the first map_tile is the bottom-most layer in your map. Each successive layer simply adds another map_tile to that specific map position (ie, map element, ie, list). This way, you could stack twenty tiles on one map position, while having only two on a tile nearby-- with no memory wasted on empty spaces! That is the big payoff for this technique.
I would advise that you follow some conventions.
1. The first map_tile in a list should be a ground layer (ie, grass, sand). It should also be a constant 16x16 tile that should be plotted without masking.
2. All map_tiles after the first can be variant sized (up to 32x32) and should be plotted with masking. These successive layers will be trees, rocks, walls, people, monsters, swords, treasures, and anything else.
If you're wondering how I intend to handle a 32x32 tile in a 16x16 tile world, keep reading. Let's get the basics down first. In fact, let's drop this for the moment and discuss some fundamental ideas about representing NPCs and items for a game.
The Flesh of a Soul

I should explain that I delineate objects from their graphics. That is, there are separate structures for objects and for their graphic imagery. For example:
struct npc_object {
struct npc_object *next; // keep a pointer handy for later
struct tile_gfx *tile; // pointer to the graphic imagery for this guy
struct attributes atts; // str, dex, hp, inventory, etc.
char x_loc; // location on map
char y_loc; // may need to be an unsigned short if the map
// is bigger than 255x255 squares
};
struct tile_gfx {
struct tile_gfx *next; // always
char *imagery; // pointer to the actual bitmap data
char x_size; // size in pixels
char y_size;
char x_offset; // for handling those 32x32 tiles
char y_offset;
char bitflags; // 8 bitflags (ie, masked?, animated?, etc)
char align; // align to dword boundary
};
So when a person or monster is plotted to the screen, the tile information for each character can be totally different and referenced through the NPC structure. Likewise for items. Remember that these graphics will be drawn with masking so that the map background can still show through.
With this in mind, we commence with map specifics.
Plotting Map Layers
struct linked_list map[100][100];
This is our map definition. We have a separate linked list holding all NPCs that are active and their relevant information.
In Ultima 6, if a character went in a doorway, the character appeared under the archway. The characters were further obscured by tall signs, and the like. This is a very cool and realistic effect. (Though I haven't done benchmarks on any of the mapping techniques here, I suspect that what I'm building up to will require a fair amount of horsepower. Hopefully our common denominator 486-33 will suffice.)
To achieve this obscuring effect, I would flag each map_tile as either "under" or "over" (thus, the need for the bitflags field in the map_tile structure). The bottom layer (ground) will definitely be "under" since all tiles get plotted over these regardless. Things like trees, walls and open doorways should be "over" since the player could potentially appear obscured by such objects. For best efficiency, sort all these tile lists so that "under" tiles come before "over" tiles.
Here's how the plotting algorithm should work:
A) Plot all ground tiles (ie, the first tile in each list).
B) Plot all tiles flagged "under."
C) Plot all NPCs and items.
D) Plot all tiles flagged "over."
The plotting should go from upper-left to lower-right to appear correct.
The 32 Pixel Question
32x32 Tile alignment
Now that the basic map structure and function is understood (it is, isn't it?), we can get to the 32x32 tile question. Since all tiles have a 16x16 "base" anything over this size will simply be plotted with an offset. The offset should force the lower-right corner of the tile to align with the 16x16 pixel base.
A tile that is 20x17 would have an x_offset of -4, y_offset of -1. This is calculated with (16 - x_size), (16 - y_size). If a tile is smaller than 16x16 (a knife, for example), then it will have a positive offset. Look: a 7x10 tile has +8 x_offset, +6 y_offset.
That is, unless you want to center small tiles in the 16x16 pixel space. That's easy enough.
So now we see how a larger tile can obscure those in adjacent locations. A very tall tree would do this. This ain't Ultima 4 anymore! Let's get out of the 80's technology and at least catch up to early 90's.
With this outline, hopefully you can exploit the possibilities yourself. Imagine the flexibility over the "old" array technique. Instead of drawing millions of tiles for each piece of scenery like a plain wall, another wall with a torch on it, etc, you simply draw the plain wall, draw the torch, then stack the picture tile on the wall tile. You can reuse the torch for different wall types without drawing a new wall with a torch on it. Again, this saves storage space by having fewer graphics but with more variety.
Material Objects and Possessions
Handling item objects, if you want Ultima-level technology, requires that each object be defined in a detailed way and managed much like NPCs-- with a linked list. This is a little more complicated, but the enrichment of the game environment is incredible. In my Amiga implementation, for example, I defined objects that can be moved, carried, used, contain other objects, etc, just like Ultima 6. This allows your universes to really come to life.
All you really have to do is have a main item list, call it all_items. This list will hold each and every item that exists in your world from a bedroll to a candle to a ration of food. It's handling this list safely and cleanly that presents the major problem. And if you have a solid knowledge of lists this is not much of a problem. I suggest that you build a list library of common functions (ie, insertion, deletion, creation, destruction) or find a library that already exists and works reliably. Then apply these concepts.
But now, let us aside to something else of relevance to our all_items linked list.
Accessing the World Map Incrementally
Since I've mentioned Greg Taylor's FAQ previously, I will come to it again. He suggests holding the entire map on disk and "paging" in only the areas that are close by. That's exactly what I suggest. The only hairy part is the nature of my maps. They are linked lists and this makes for a complication when accessing them bits at a time.
The main barrier, then, is the storage format. How do we store a map when it's a huge array of linked lists and link nodes? Well, there are many possibilities. One is to encode the data with "identifier" bytes. There are several variations of this.
For each map location (map[x][y]), we write to disk the number of nodes in each list at that location (minimum 1, because we have to have a ground tile). This is very simple. To retrieve it is the tricky part.
1. Read one byte. If it is zero, then we have no more nodes for the current x:y position. If it is non-zero, we have to read that many nodes from disk, building the list on the fly. Keep reading nodes until the Nth node is finally read.
2. Repeat step A until the entire section of map we want is read into memory.
In code:
char c, i, x, y;
struct map_tile *mt;
x = current_x_position; // these will probably be assigned by a loop
y = current_y_position;
while (1) { // loop infinitely, so be careful!
c = fgetc(filehandle); // read our encoding byte
if (feof(filehandle)) break; // end the loop, we are out of data
// you'll also check to see if you've read all
// neccessary data and use break to exit the loop
for (i=0; i<< c; i++) { // read as many nodes as encoded
mt = newnode(); // remember to do failure checks and handle errors!
fread(mt, sizeof(struct map_tile), 1, filehandle);
addnode(map[x][y], mt); // put the new node in the map lists
}
// continue reading nodes until all map data is in memory
}
This code fragment leaves out quite a bit, like list details and deciding what map coordinate range you need to read. At least you get to see the principles in action. There is _lots_ of linked list juggling. You must be very, very careful about memory leaks and such when programming this. Take your time, comment your code, and know what you're doing! With this sort of code, you need to plan out exactly what to do. Some more than others, but everyone needs a plan.
Another method would require that you add two new fields to the map_tile structure:
struct map_tile {
struct map_tile *next;
struct tile_gfx *tile;
char type;
char bitflags;
char x_loc; // store each tile's location here
char y_loc;
};
Now, when you read a tile, it has the location information in it. You simply insert the read node into the according list in memory. I like the first method better, though, because it uses less disk space since the encoding only requires one byte, especially for maps > 255x255 that will need a short for index reference. I leave the final decision with you, because there are better ways to implement this, I'm sure.
Now that we can access the map at arbitrary points from disk, how do we decide what to store in memory and when to load more? As Greg states, look at the current map "chunk" as a set of 9 small areas, theoretical boundaries actually...
Structure of the map
Each small area might represent a 10x10 map chunk. As the player moves across the middle boundaries, the map data is shifted (scrolled) and whatever areas are "blank" afterward will be the ones we load from disk. Refer to Greg's FAQ for more explanation, if you need it. Hopefully, it is self-evident.
I will only say that you must remember to deallocate all nodes no longer needed. This cannot be over-stated. You will find many, many bugs lurking in this section of your program if you are not an alert programmer. I learned this through tedious hours of memory leak chasing. Tedious hours.
And What of Our Possessions
We come back to our discussion of the all_items linked list. Since your world may be exceedingly large (my project included over 400 items at 85% completion), you will not want to keep this whole list all the time. If memory allows, sure, keep it in memory for speed. If not, then access it from disk when needed. Elaboration follows.
Like the huge map, which only comes into memory in chunks, we only need parts of the all_items list in memory at any one time. Two reasons: 1) it is far less space consuming than keeping 1000 items in memory all the time, 2) it is much quicker when performing operations on the items (ie, searches, etc).
Point 2) is particularly of interest since we will be dealing with those items closest to the player the most often. Doesn't it make sense to keep only the necessary items in another list, a "local" list? Of course it does.
Each time the player wants to manipulate an item (say, picking up a sword), the program will have to find the item in question by searching the list. Then it will have to perform some operation(s) on it (ie, place the sword in the players possession). This is not to mention the fact that each graphic update will require searching the list of items to determine which are visible and which are not. Now this makes perfect sense, right?
So we establish a secondary linked list: local_items. This list will grow and shrink as the player moves through the landscape. Items will get moved to and from this list and the all_items list. all_items will hold items not currently used. I would recommend holding all_items in memory when possible for speed issues and issues of altering the game state-- that is, as related to saved games.
You see, if you want to save a game in progress, all object lists must be written to disk. But if you are constantly writing over the all_items list, and the computer crashes, that game state is ruined because part of all_items was in memory, and not all of it was on disk since item in local_items are literally removed from all_items. Follow?
The solution is to simply store all_items, for game use, in a temporary copy of the initial game state. That way, all previous information is preserved and you safely work with a copy. But to avoid all this hocus, keep the lists in memory at all times, only updating the disk image when a game is saved. I hope all that soaked in. If not, re-read it in a couple days.
Straying From the Path

I seem to have gone off on a few tangents here. But I think that they are all an integral part of the big picture. Now I would like to address some of the problems from Greg's FAQ that this framework fixes (I'm not picking on him, but I am hopefully building on his information), with direct references to his work.
III: Walkability
To create a map space that cannot be crossed by the player, simply use the bitflags to denote a barrier object. This can be either a map_tile, a npc_object, or an item_object. If any one of these appears in the location that the player is about to move into, then movement is restricted. Simple and clean, and no need to make any limitations on the map or objects.
In fact, I divide barriers into several classes. One is a total barrier. Another only restricts movement-- but not things like arrows or spells flying across them. Another only restricts arrows and such, but not movement (for magical sanctuaries). This can all be achieved by using those simple bitflags in each object structure.
For those of you who want to see code...
#define flag_BARRIER (1) // this blocks movement and missiles
#define flag_MOVEBARRIER (1<<1) // block movement only
#define flag_MISSLEBAR (1<<2) // block missiles only
Then, wherever your code handles movement...
if (map[x][y].bitflags & flag_BARRIER) // this checks for the bitflag
player_cant_move();
Of course, accessing the map data will involve checking each object in the x,y location list in question for these flags, but you get the idea.
VI: the OBJECT layer
Greg has no autonomous objects. His maps hold object information, much like Ultima 4 probably did. With my system, there is no such restriction and no limitations. You can stack gobs of objects and hordes of people, too, since they all exist independent of the map data.
So Close, Yet So Far
I could go on typing about different areas of CRPG making for hours, but I want to limit this document to tile graphics related problems. I should probably work all of this up into a book and include a demo and tons of source code, but who would publish it? :) Potential future installments...
Using event flags to trigger changes in the game world (ie, when a quest is completed or a decisive action made), the writing of "data compilers" to create attributes for your objects in a script file (as I did with my Amiga project), creating a map/object/graphics editor, implementing a system of spells and using "reagents" to create them, character creation routines, NPC speech system, NPC artificial intelligence-- especially combat where NPCs intelligently arm themselves based on circumstances and resources at hand (ie, close range weaponry, spells, abilities, etc), animating objects. The list goes on. I have experience programming all of these things, and I plan to put that experience to use and create a CRPG for the PC. I am in college, so it will come slowly, but one will emerge. Why don't you explore these subjects with me, and let's create some good games.
If there is sufficient interest, I might write up more technique documents. That all remains to be seen. Give me your feedback. I want to discuss these things with people, because nobody seems to want to. I suspect they fear that people will rip-off their ideas. Let me state a fact, everyone: technical achievement does not make a great game. If everything I said here you can do better, you are at no particular advantage of making a better game than me. The quality lies in content. So quit worrying about someone stealing your techniques and algorithms, because even if they did, that doesn't mean they will undermine your success as a game designer.
SPEAK UP! I would love to hear alternate/better solutions to these programming puzzles.
Subscribe to:
Comments (Atom)
