GAEM on SourceForge.net
Intro on GAEM
How to Use
GAEM is a very little kind of game engine focused to adventure games for wireless devices, concretly mobile phones (but any MIPD2.0 compliant device will do the trick).
What GAEM stands for?
GAEM stands for Graphical Adventure tiny-Engine for Mobiles.
What are the principal uses for GAEM?
I found two main uses for GAEM although more can be around there...
- Create an adventure game (or similar) targeting mobiles. This would be to adventure fans normally without many (or any) experience on programming games.
- Create another engine from GAEM. This should be addressed to people with at least a little background in programming and heavy skills at wondering what my code does :-P
What kind of games can GAEM support?
GAEM was designed initially to create a game like first graphical adventure games, especially the ones from LucasArts. The view is the same as for the most RPGs, practically vertical. There's special emphasis in the use between objects, so any game with need to deal with objects would be fine.
How is GAEM developed?
GAEM is developed under J2ME platform with MIDP2.0/CLDC1.0 as running environment. Currently being written in Jext and compiled through Sun Wireless Toolkit 2.2.
Who is developing GAEM?
At this early stage only me, Victor Borrull.
How is the game presented?
Each game in GAEM has a number of levels. Each level has a number of maps (rooms). The player go to each map through a 'key object' in its last state, which leads him to a specified row and col in the also specified destination map.
How can I create my own adventure-alike wireless game with GAEM?
You will need to make a script and design some maps. In the script you must detail each map apparience as well as its literary description; you must also think about the puzzles and how to solve them using objects between them. It's useful to create a table with the data for each object in each state, specially the info regarding the use between objects.
Do I need to know programming?
No. You will not need to know anything about programming, just how to imagine a story with objects and puzzles and be able of drawing maps with tiles in a grid.
How can I create my own game engine from GAEM?
This project is open source under GPL license, so you can access to the entire source code and you can modify it to meet your own needs and correct or make more efficient. I released the code with the hope it helps someone :-)
Where can I download GAEM?
Information about downloading GAEM in Download GAEM menu option. It covers releases for all kind of users: Engine modifyers, Game developers and Gamers.
Can I download and install GAEM from my phone?
Sure you can. View Download GAEM menu option.
What will I need to create my game?
You will need be able to create a plot, put situations in it with logic puzzles to challenge the user, know how to draw a map (room) over a grid and cut it to grid sized tiles, or draw a map by putting tiles along in a grid.
More tecnically, you will need:
- "niveles.dat" >> File containing the number of levels, its names, and how many maps has each one.
- nameLevel + "mapa" + numberMapa + ".dat" >> Map data file.
- nameLevel + "obj" + numberMapa + ".dat" >> Objects data file.
- nameLevel + "fondo" + numberMapa + ".dat" >> Background data file.
- "prota.png" >> Main character animations.
- Images for each state of each object, image containing the tiles for each map and each background (these last can be the same for each map).
What are the .dat files?
They are simple plain-text files. Theirs structures are formed by a number of fields containing data separated by a distinctive '|' or a simpler ',' in the level file. There are three types:
- .dat for Map: Here goes all the colisionable scenery.
- .dat for Background: Self explanatory.
- .dat for Objects: All data for objects in map.
How can I generate the .dat files?
You can create them with any text editor but be sure to save as plain text and WITHOUT back returns (all in one line). Although you will create the map matrix by drawing it like:
3|0|0|0|5| Example for a 5x3 map
But the final .dat file will look like: 0|1|2|1|2|3|0|0|0|5|4|0|0|1|2|
Where can I see a reference of the .dat files structures?
You can see that at the Javadoc reference, but here goes a brief explanation for each type:
- niveles.dat: Number of Levels|Name of Level|Maps on Level|Next Name|Next Maps on Level|...
- Map: Description|Column|Row|Map Columns|Map Rows|Path to Tiles Image|Tiles Width|Tiles Height|Map Matrix|
Col and row is the initial position in the map, but since you access maps with key objects this only is need for the first map (0).
- Background: Map Columns|Map Rows|Path to Tiles Image|Tiles Width|Tiles Height|Map Matrix|
Same as the .dat map file but starting at 'Map Columns' field.
- Objects: Total Number of Objects|Object 0 State 0|Object 0 Last State|Object N State 0|...
This is the global structure. The next is the structure of Object Z in State 0 with detail:
Animated|Key|Destination Map|Dest. Column|Dest. Row|Column|Row|Number States|Path Image|Description|Takeable|TextOnTake|xNumberMap|Number Object|Number State|TextError|
The fields on red are optional and can be leaved blank conserving the '|'. The blues are also optional but the '|' must be removed too. The Animated field is represented with an 'a', the key with a 'k' (key only works on its last state). Takeable is 0 or 1 (true or false), its text is always displayed (taked or imposibility of taking). Maps, objects and states start counting on 0 (zero). The last 4 fields are the data regarding interactivity between objects. Example: |x3|4|2|These objects are usable between them but not in their states| >> The actual object can be used in its actual state with object number 4 in map 3 if it's in it's third state (0,1,2). The error phrase is self explanatory... For the next, the structure of Object Z in State 1 (and so on):
Path to Image|Text of Use|Description|Takeable|TextOnTake|xNumberMap|Number Object|Number State|TextError|
The text of successful use between two objects is from the previous state. If leaved blank the object does not disappear after using it in his last state.
Is there an editor to easily create .dat files?
You can use a map editor like Mappy and export like text making some adjustements. The .dat files are about to be modified changing from plain text to some sort of binary with a simple compression rutine.
What's an object?
Is the main thing in all this kind of games GAEM try to emulate. For example, a candle needs to be lighted with a match, that could be part of solving a puzzle in an adventure game. The candle has 2 states, as well as the match (ie. not-lighted, lighted). But probably we want the candle to have 3 states because it's no sense in lighting up the candle and it disappearing, not like the match. An object has many attributes detailed some answers before.
What is the structure of an object?
See above. Here's a practical example. Key object 0 in map 0 with two states. The key drives to map 2, column 4 and row 3. The objects initially stands on position 5,6. In the first state you can't grab the object, and it's usable with object 4 in state 2 in map 12. When this occurs, the text of use in the next state is displayed. The last use is set to point itself in his first state, this is a trick to avoid implementing when it's not needed (since an object can't be used with itself and it's impossible for it to be in 2 states at the same time [state 1 makes use reference of state 0 on the same object in the same map...]). In this case the object has no more utility that to serve as a door to other map.
k|2|4|3|5|6|2|/img0.png|It's an object in state 0.|0|I can't grab it.|x12|4|2||/img1.png|The object is used.|It's in state 1, the last.|0|doggone the luck!|x0|0|0|
What is the use capacity of an object?
An object in one of its states is usable with other object, maybe on other map, with a determined state. See above about info regarding how to code this info in the .dat file. This is implemented Two ways by GAEM, so the two objects must be well coded in the .dat files. Example:
Map 1 Object 2 State 0
Usable with Object 1State 2 in Map 0. And This one (M0 O1 S2) should be: