I wanted to give an update on the Great BREW Experiment. We (we = my company = me and my buddy jim) decided that a good first in-house commercial project would be a BREW game, targeting the high-end 3D/EVDO phones, like verizon's VCAST handsets, Amp'd network's multimedia phone, and now we're thinking about this new Helio phone (through our friends at Requiem, hopefully they get that gig, cross your fingers!). It's been a really interesting project so far, I'm just taking a break from a marathon coding session so I thought I'd bang out my thoughts and ideas. If anyone has more experience with this stuff (I started the project monday morning) feel free to chip in with your thoughts/ideas.
EDIT - i should say that the main reason we're pursuing 3d is phone operators LOVE it. they want it in their pants right now. And we're basically an unknown company, so any edge we can get we will take! I'm not opposed to putting some eye candy in there for sales reasons as long as the base game is solid.
Ok. So the goal of this project is to create a game (hopefully even "games" plural) that uses the phone's limited input and 3D visuals in a way that really suits these new phones, i.e. has good framerates! I don't know if you guys have played many of these 3d mobile games, but they are very choppy and clunky compared to their "real" game console counterparts. They're certainly playable, and some of them look very nice, but the choppiness just drives me nuts, especially for games when reflexes really count.
Research and coding experiments over the last few days have led me to the following conclusions:
1 - These phones, while apparently very powerful, have very specific limitations that can guide your game development rather than hamper it. Specifically, the majority of them can only use fixed point arithmetic, and as such they use OpenGL ES 1.0, which has some fairly strict limitations of its own. None of these things are dead ends, but they do preclude certain types of games from being really high performance; specifically, third- and first-person shooter games in the traditional console/PC vein. Basically, anything that requires a VERY dynamic, player-controlled camera and arbitrary occlusion (meaning it has to figure out on the fly what crap to draw, and what to skip) is IMO a bad idea on these systems. That's not to say the camera can't move, but if it moves predictably then you have a LOT more control over exactly what ends up on your screen.
2 - Why is that? Well, OpenGL ES is heavily optimized for vertex arrays. Meaning, big lists of crap to draw all at once. If you have to monkey with these lists every single frame, you are wasting a lot of CPU time that could otherwise be used to get framerates ABOVE 10fps.
3 - So what does "predictable camera movement" mean? It means that you can make some friggin sweet games, you just have to plan a little more carefully. If you're going to make a 3d shooter, consider having a fixed perspective. It can vary from area to area, and it can shift and move within the area, but the important thing is to some extent you control what the camera sees and when. This will let you update your vertex arrays at discrete times, instead of every dang frame. Obvious candidates are overhead adventure/exploration games, racers, rail shooters, and shmups, but the limited input can really hamper the shooters and shmups unless you are careful to take that into account. Metal Slug has no place on cell phones, not until they get better key layouts and allow simultaneous key presses. Other genres can be easily adapted though - e.g. the camera style used in the original Silent Hill and Resident Evil games (or mayb emore accurately Dino Crisis) would work GREAT on a cell phone, whereas the camera from say Resident Evil 4 would be a very, very bad choice (from a programmer's standpoint anyways).
4 - Cheat like crazy on your AI, and choose game types that don't require massively intelligent enemies. These phones appear to have fairly reliable and accurate timers, so you can good feedback and interactions, you just don't want to sit in a big fat branching logic tree when you could be dumping an extra frame to the screen.
Ok that's all that's on my mind right now. If anybody has a BREW simulator set up already for 3D work let me know and I'll post a VERY rough demo of our game later this week!