2 August 2010
On a typical day, I use ActionScript 3 to program multiplayer games or virtual worlds. I use Adobe Flash or Adobe Photoshop for preparing most of the assets for the games I build. My code IDE of choice is Flash Develop and I use SOS Max by Powerflasher for viewing runtime logs. I can't forget ElectroServer (a product of Electrotank)! It is the socket server technology that powers all of the multiplayer projects that I develop.
The latest project I worked on (that has been publicly released) is Fruit Smash Organic for the iPhone. Fruit Smash Organic is a match 3-style puzzle game that includes some unique secondary game play elements. As you play the game, you earn virtual money. You can use that virtual money to buy fruit seeds, pots, soil, and some other things. Using the resources you purchase, you can plant the seeds, fill the pots with soil, and water them using the accelerometer. The seeds grow over time into plants, trees, or bushes. When they're ripe, the fruit can be harvested by shaking the iPhone.
This game was originally created using Flash Professional CS5 with the Packager for iPhone. Due to the recent updates to the Apple terms of service, this game will probably not have a bright future on that device. Fortunately, Adobe invited me to participate in the AIR for Android prerelease program. I was able to get Fruit Smash Organic working on an Android device in a matter of hours!
At Electrotank, we earn revenue through a mixture of technology licenses, work-for-hire projects, and casual game sales. The most commercially successful project is one of our technologies, EUP (Electrotank Universe Platform).
EUP provides both an architecture and a framework for building MMOs, virtual worlds, and large-scale social games with complex features like crafting, questing, and a lot more—and it can run on both Flash and Unity 3D. EUP grew out of the belief of myself and others at Electrotank that there's an increasing need for flexible, high-performance game development architecture as online gaming strives to meet end-user demand for engaging game-play and graphics accessible on multiple devices. EUP currently powers a number of leading virtual worlds, which is pretty impressive for such a young technology. So, that's a success, but it's one that we're looking to build on. We also have some pretty big announcements and launches coming up that we're excited about.
The least commercially successful? Well, I've been doing this for more than a decade and so I've seen my share of failures. If I had to pick just one, I think it would be a jigsaw puzzle casual game that I created. It has been out for years and has probably sold only a few hundred copies. As for why it was a failure...probably because it was a jigsaw puzzle!
There are many technological challenges that I've encountered over the years. Some of the biggest obstacles were solved as a team. One issue that we ran into as we started doing more virtual-world work in Flash is rendering performance. Our project required rendering and smoothly scrolling isometric scenes that are dozens of times larger than the screen, while simultaneously displaying 20 avatars on the screen at a time. We wanted to develop a generic solution so that it could be applied to more worlds in the future with differing avatar types. Achieving this goal was difficult and took months of work. I'm oversimplifying it a bit, but we essentially tried three approaches:
Another big challenge relates to working with larger teams. Electrotank experienced rapid growth a few years ago. We were working on projects with teams of between three and ten people. There were problems with some developers being able to compile the projects and others who could not. There were also issues because some developers could reproduce a bug, while others could not. Only one or two people could actually do a full project build for both client and server code. This was a huge time waster. So, we brought Maven into the mix. After heavily configuring Maven and writing some Maven plug-ins, we devised a system that allows any developer on the team to compile the entire application with next to no setup. That was a huge breakthrough for us! After having that system in place, we were able to add continuous integration—every time code is checked in, the project is compiled and test cases are run against it on the server. If a problem is encountered, an e-mail is automatically sent out to the team.
I'm not sure of the top three strategies for monetizing projects, so I'll just speak to this generally from two different perspectives.
Wearing my technology provider hat, I think it is critical that the software fill a need in order for it to be a success. In the case of ElectroServer and EUP, we ourselves had the need for the technology. We filled that need, and then thought that others would also benefit from it. If there are competing products, it's likely that you'll have a tougher time, but you can still succeed by differentiating your product from the competition.
Wearing my game developer hat, there are a few more points to make. First, it is really difficult to know exactly how to make a successful game. There's no special recipe for that. If you are trying to make a successful (money-making) casual game, then check out the top-selling games on the big casual game portals right now. Strive to make a unique, quality game that has similarities to games that are popular now. You'll have an easier time publishing your game and the consumers will have a better understanding of your game before actually playing it.
I don't get quite as excited about the technology by itself. For me, the excitement comes from how I can apply the newest technology to the work I do. I tend to wake up a littler earlier and work a little later when I'm right in the guts of a new type of game that I've never worked on before. Frequently, this occurs when I'm working with a technology that I haven't worked with before, such as the iPhone, Android, or frameworks/APIs like Papervision or Box2D.
I've never spent much time reading blogs or technology news sites. I get most of the hot news about technology through Twitter. Also, a few times per week, the developers at Electrotank send out e-mail announcements on newsworthy developments to the group.
One of my favorite sites is Polygonal Labs by Michael Baczynski. He always posts highly technical and very interesting experiments or useful utilities to share and talk about. I've done a little work with Michael's physics engine and I've used a few of his data structures in my games.
As much as I love working on video games, I rarely play them. When I'm not working, I'm usually playing tennis (or following it on TV) or hanging out with my wife and pets. My wife loves to play RPGs. Sometimes I'll watch a game she's playing for a while and it inspires me to experiment on things like AI or particles. I remember spending about two weeks playing with flocking algorithms after watching my wife play Pikmin.
I look forward to the day when we can really develop something once and interact with it on all popular, relevant devices at the same time. It seems like we aren't too far from that right now.
I'd build a Flash application that could love me back.
My original inspiration was physics. My educational background is in physics, so when I left school and started developing, I naturally began experimenting with some physics-related projects. They led me to build several basic games like pool, air hockey, and miniature golf. I used Flash because I had no programming background and ActionScript was super easy to jump into. This was a long time ago, before classes—and even before functions were supported in Flash!
For the last several months, I've been working on the latest release of ElectroServer (version 5). I'm focused on building the ActionScript 2 and ActionScript 3 APIs, documenting everything, and creating a series of examples to help get developers up to speed quickly. Version 5 will be released in July 2010. After ElectroServer 5 is out the door, I'll probably work on one of a few ideas we have for real-time multiplayer games that can run simultaneously on all major platforms.