| [Top] | [Contents] | [Index] | [ ? ] |
This manual describes the internals of Enigma, in particular how to build new levels using Lua and how to interact with the game engine. It describes Enigma version 1.00.
| 1. Running Enigma | ||
| 2. Levelpack Basics | Addition and managing of levels in packs | |
| 3. Level Basics | Introduction to level description | |
| 4. Objects | Description of all objects in Enigma | |
| 5. Variables | Lua variables that influence the game | |
| 6. Functions | Predefined functions | |
| Function Index | ||
| Concept Index |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
After a hopefully succesfull installation and some first levels you may be interested in some information how Enigma is configured, how you can optimize Enigma to your demands and what some options and attributes within Enigma are for.
This first chapter should give you some valuable information to these questions and provides some basic knowledge you will need to know to manage level packs, levels or write own levels as described in the following chapters.
| 1.1 Locating Resources | ||
| 1.2 Startup Switches | ||
| 1.3 User Options | ||
| 1.4 Level Info | ||
| 1.5 Handicap and PAR | Background to score evaluation and HCP |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
For reasons of backup, system changes, special configurations, level additions and hopefully own new levels you may need to know where Enigma stores the resources and how you can control them.
Enigma maintains several paths for control of load and storage of files. You can list these paths either by pressing F2 within the main menu or by starting Enigma with the switch `--log' (see section Startup Switches) and looking at the console output.
This is the path to the file that stores your preferences concerning application
options. This file is usually located at your HOME directory. For HOME-less
Windows users it is stored in the `Application Data\Enigma' directory. As
it is the third version in the history of Enigma the file is named
`.enigmarc.xml' by default.
It is recommended to backup this file, even though it contains only few data that can be quickly reconfigured.
As these preferences are quite specific for the operating system and configuration you will use a different version on each Enigma installation you have.
Mainly for Enigma developers exists a switch `--pref' (see section Startup Switches) to rename this preferences file. By starting Enigma with a renamed preferences file a developer can temporarily use a complete seperated configuration for testing purposes without the danger of destroying his main configuration. The developer may use it to start Enigma with a plain standard configuration for testing purposes, too.
In all cases the preferences filename will be hidden by a leading `.' in the filename.
This is the main path to the users Enigma data. All updates, user installed levels and user written levels, the users scores, history and usually the users screenshots and level previews are stored at this path.
A backup of this directory is mandatory!
The standard location is the directory `.enigma' at your HOME
directory. For HOME-less Windows users it is the `Application Data\Enigma'
directory.
You can define an own path within the User Options. By this means you can store your Enigma user data on a memory stick or you can store them on a shared partition and use them alternatively from two Enigma installations.
This is a second path to the users Enigma data that is used to access images like screenshots and thumbnails of levels. Usually this path is identical to the main `User Path'.
Just in case you make many screenshots and have limited resources on the main `User Path' you may want to store the images on another path. You can define an own path within the User Options.
This path gives you the location of all system resources that are distributed with Enigma. Here you will find the levels, libraries, etc. A first class address to look for examples if you start writing own levels.
This is a list of paths. Every version independent resource is looked up on all paths in this list and loaded from the first occurence.
User data preceed system data. This way updates on your user data path will win. Have a look at this list if you are observe difference between a source and the runtime behaviour. You may have looked at a file that was hidden by another on a preceeding path in this list.
This path shows the directory that contains the localization data.
Please note that some resources like levels may be zipped. In this case a resource that you expect at `dirname/filename' may be stored in a zipfile named `dirname.zip'. The path of the file within the zip can be either `dirname/filename' or `./filename'. In case a resource is provided in zipped and unzipped the plain file stored in a directory wins, as it is assumed to be an update to the zip.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Besides starting Enigma by clicking on a installation provided icon or start menu entry you can start enigma from a shell or commandline. With release 1.00 the Windows version supports this feature without restrictions. Even though it is not necessary using this feature to play the distributed levels you may take advantage of this feature in special or advanced usage.
The following list explains the supported user options. If an option is listed with a long name preceeded by two minus signs and with a one character abbreviation preceeded by one minus sign use one of both notations not both together, f.e. `--data path' or `-d path'.
A switch for Enigma developers that forces all debugging assertions, even expensive ones, to be evaluated. The additionally evaluated checks look like `ASSERT(noAssert || long_lasting_check(), XLevelRuntime, "remark");'.
A switch for Enigma developers that allows to add an additional path to the resource paths that preceeds the system path (see section Startup Switches). A developer can test an Enigma compilation without installation by calling it from the shell with the current working directory on the main directory via `src/Enigma -d ./data'.
Just list the available startup switches to the output and terminate.
A switch that allows to override any other language preference. The language is given in the common 2 character sequence as `fr' for French or `ru' for Russian.
This switch turns on logging of internal information to the standard output. Windows users will find an file called `stdout.txt' in the current working directory. The output will f.e. list the paths described in Locating Resources.
A switch for Enigma developers that causes Enigma not to grab the mouse. Levels can hardly be played in this mode, but it makes it possible to debug the application in its core parts.
Start Enigma without playing backgroud music.
Start Enigma with sounds being switched off.
The name of an alternative preferences file without the leading dot for hidden filenames. This switch is a pure Enigma developer support feature as described in Locating Resources.
Just print the version number to the output and terminate.
Start Enigma in window mode instead of screen mode.
All further arguments supplied on the commandline are taken as level file addresses. You can use absolut or relative addresses to level files stored on your computer. It is also possible to add url's to levels stored in the internet.
A Unix user may start Enigma with the following command:
enigma --log ~/mylevel.xml http://somewhere.com/netlevel.xml
A Windows user may start Enimga from the command line (please adjust the Enigma installation path):
C:\programs\Enigma-1.00\enigma.exe demo_simple.xml
You will find the levels in a levelpack called `Startup Levels' that is by default only visible if you supplied levels on the commandline.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Please keep this option on the value `Never' until release of Enigma 1.00.
Enter your user name that will be attached to the scores. Please have a look at the Enigma home page for user names already in use and choose a new unique name. It is possible to change the user name at any point of time without loosing any scores.
This textfield allows you to define an arbitrary directory for your Enigma user data as described in Locating Resources.
Deletion of the string resets the path to the default.
The new path is activated on leaving the options menu. Even though all files are stored directly to the new path and files will still be found on the old path you may want to quit Enigma immediatly and first copy/merge the old directory to the new location. This copy of your old data is necessary as with the next start Enigma will locate user data at the new location exclusively.
This textfield allows you to define an arbitrary directory for your Enigma user image data as described in Locating Resources.
Deletion of the string resets the path to the default.
The new path is activated on leaving the options menu. Even though all files are stored directly to the new path and files will still be found on the old path you may want to quit Enigma immediatly and first copy/merge the old directory to the new location. This copy of your old data is necessary as with the next start Enigma will locate user data at the new location exclusively.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
For every level Enigma manages more data than can be displayed in the level menu. You can view them all with the levelinspector. This special menu can be called from within the level menu by right or control clicking on the level icon.
Besides title and author information is provided concerning a public rating of the level, different score values of interest, details on the level version, the level file location and more. Additionally the levelinspector allows you to enter personal annotations for a level. Any screenshots you made for this level can be directly reviewed from the levelinspector, too.
| 1.4.1 Public Ratings | ||
| 1.4.2 Scores | ||
| 1.4.3 Versions | ||
| 1.4.4 Privat Annotations and Ratings | ||
| 1.4.5 Screenshots |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Most levels are rated within five different categories:
To distinguish the ratings from their everyday-meanings, we use the abbreviations for the ratings. Each of these categories takes values between 1 (easy) and 5 (difficult), except for kno, which can also be 6 (unique mechanism).
Please bear in mind that it's not very simple to hold on to the following definitions in each single of nearly 750 cases, so there might be (will be) derivations from them in single levels.
Intelligence (int)
This is intended to measure the creativity, planning and analytic requirements needed to solve the level. Intelligence is a very difficult notion in itself, and thus at first not easy to rate nor to grasp. Consequently, a fixed definition of the five rating-degrees does not only help in the rating process, but is essential. So, assume you know everything about the single elements of a level. Then ask yourself these questions:
High values for intelligence are typically puzzles. int-ratings do not accumulate; the most difficult puzzle alone already determines the rating.
Dexterity (dex)
There are lots of levels, which can be solved either by accuracy or by patience. In our context, dexterity is not meant in the sense of accuracy to avoid patience, but accuracy to avoid death. So it focuses on the lethal positions in a level, not only death-stones and abysses, but also casualties like pushing a stone accidentally into an unreachable corner.
In contrast to the int-rating, dex might accumulate: Many situations, each of dex 3 can add up to dex 4 or even 5. This way dex 5 can be achieved. Rotors in a level contribute as well to dex as to the speed-rating spe. Thus, levels with a high dex-spe-combination are mostly action-driven, whereas a high dex-pat-combination typically is a dangerous maze.
Patience (pat)
Patience is a relatively subjective rating, and refers much to "feeled time". So two levels with same mechanics can have different pat-values, e.g. if one level has a nicer design or shows the progress of the level in some way, like the number of opened oxyds. It explicitly includes having to start the level over and over again; not the time in the lower left corner or the score is crucial, but the complete feeled time needed to solve the level, starting from the first look at it.
A high number of oxyds can as well heighten the pat-value as lower it: If the player has to traverse the level several times to open matching pairs of oxyds, it is definitely pat-heightening. However, if they are arranged to mark the progress of the player, and deal as a kind of small rewards within the level, they can lower the pat-value. The same with a high number of doors: The arrangement is the critical factor.
High pat-values are typically mazes. In combination with int 3, a high pat-value can indicate a hidden item or a hollow stone. pat-values involve the whole level, so they can't accumulate.
Knowledge of Enigma (kno)
The kno-rating mostly takes on the function and interactions of single objects in the game, like stones, floors, items, and actors. However, in some cases it also deals with special techniques. The guide line is the "Advanced Tutorial", which defines kno 3. kno 4 corresponds to standard objects that aren't shown in the tutorial, kno 5 requires a deeper knowledge of the game internals. Finally, kno 6 indicates special mechanisms, that are seldom or unique. The overall kno-rating of a level equals that of the most difficult object or technique (and thus is non-accumulative):
kno 6 does not neccessarily mean that this level is difficult to understand; the unique mechanism or object might as well be very intuitive, like in "Flood Gates".
Speed and speed control (spe)
The spe-value not only corresponds to the maximum speed a level requires (like it's needed to run away from a rotor), but also the degree of control a player has over his mouse while moving it, excellent examples for this are "Mourning Palace" and the middle part of "Sacrifice". This involves moving the mouse with a constant velocity for a long time, as well as correctly estimating the speed that's needed in a certain task, like shattering a sheaf of glass.
The spe-rating again is cumulative, as many slow rotors can add up to spe 3 or 4 or a combination of many slow time-switches to be pressed in a certain order can make up a horrible task. In contrast to the other categories, for which the average is near 3 (or between 3 and 4 for kno), an overwhelming fraction of all levels are definitely spe 1. So, the spe-rating is more a kind of supplement to the three core-ratings int, dex and pat.
Combinations of ratings
In some cases it can be of interest to have a single value to measure the difficulty of a level. A simple possibility to calculate such a universal rating is to choose a linear combination of the 5 single ratings, weighted with appropriate weights. These weights should correspond to the difficulty a single category adds to the universal difficulty, but these weights also should be carefully chosen to avoid number-theoretic obstructions (e.g. when all weights are even except for the spe-rating, then there will be a visible difference in the distribution of even and odd univeral ratings, which can be very misleading). A working and very interesting linear combination is the following, which has been applied in the reordering process:
universal difficulty = 7*int + 6*dex + 4*pat + 3*kno + 4*spe - 23 |
This has the special property that it takes relatively broadly and continuously distributed values between 1 (all ratings 1) and 100 (all ratings 5, kno 6) and emphasizes the most difficult categories intelligence and dexterity. However, some very small or very high values cannot appear in this combination, like 2 or 99. Other combinations lead to full, but narrow, or to broad but uncontinuous spectra.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
The score columns show your and some comparison values for the difficult and for the easy mode if the levels supports it.
The world record is the best score that was retransmitted to the enigma team. The holders of the world record are listed below.
The PAR value is the "professional average rating" of the level. It is the harmonic average of all scores that have been retransmitted. But we take only into account scores from players that have solved a certain number of levels. Opposed to the world record that will be very difficult to gain the PAR value is a much more realistic aim for an ambitioned player. Within the level menu levels are marked with a speeding blackball if you are equal or better than PAR.
The authors value is another reference score. Most authors are not keen on holding the world record of their own levels. But they will likley know the fastest way to solve the level. If your score is much higher than the authors score a simpler solution to solve the level may exist.
The solved number is the number of players who solved this level in the given score version.
The solved percentage is the relation of player who solved this level to the number of players who retransmitted scores. Actually we take only those players in account that could have solved the level. F.e. players that did retransmit scores before the level was written without updating afterwards are not taken into account. A low percentage is a hint for a level that is not easy to solve.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
The version column shows detail information about the level. Read chapter Level Basics node see section <version> and see section <modes> for explanation of the values.
For you as a player the `Score' version number can be of some interest. If solve a level with a certain score it may happen that in a updated Enigma release the level appears with a red triangle in the level menu. Even though the level menu displays the medals showing that you solved the level the score values will not be displayed any more. This is due to a incompatible level update that requires a new solution with different incomparable score values. The author will increase the score version number in such a case.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
The textfield allows you to enter an annotation for a level that you can review on later replays. Note that the current textfield may not allow you to enter all characters and needs the mouse cursor to remain within its boundaries. But it should work for entering short annotations that may be very useful lateron.
Annotations are stored in your private applications `state.xml' file. There is one annotation per level independent of the level version.
You may rate the levels, too. Just click on the ratings button. Values go from 0 to 10 with an additional `-' for abstention. 0 stands for a poor level that you think is not worth playing, 5 for an average level and 10 for the ultimate best levels. Try to use all values in your ratings.
The ratings are stored together with the scores and will be evaluated annonymously. The resulting average rating of all users is displayed for your information. Note that different ratings are possible for different score versions of the same level. This makes sense as levels may improve on suggestions of users. As long as you do not rerate a new version of a level your rating from a previous version in inherited.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
While playing a level you can make screenshots by pressing F10. You can make several screenshots in sequence for documentation purposes. Each will be stored with a unique image filename. With help of the level inspector you can view the screenshots directly from within Enigma. Just click on the screenshot button to view the first image.
As any buttons would disturb the view of a screenshot all functions are keyboard commands. Press F1 to get a help. ESC returns to the level inspector. Page Up and Page Down will show the previous and next screenshot. If you scroll down behind the last screenshot the "missing" screenshot file is named. This may be a useful hint were to search the other screenshot files on your `user image path' (see section Locating Resources).
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
As PAR (see section Scores) describes the difficulty of a level the handicap `hcp' describes your ability to solve levels in PAR. The handicap is always related to a levelpack or group of levelpacks. For each levelpack you can see your handicap in the level menu if you select the PAR mode by clicking on the lower left button until the speeding black marble appears. The value is displayed in the upper right corner together with the number of levels you solved in PAR.
The handicap is similar to the golfers handicap. A low value is better than a high value. If you solve all levels exactly in PAR your handicap will be 0. If you are even better than PAR your handicap will be negativ. Players can use this value to compare their overall abilities.
Just for those of you that want to know the details of this score rating system of PAR and handicap some additional information that others may well skip to the next chapter Levelpack Basics.
We request all users to send their scores. All scores are evaluated for world records and counts of level solvage rates and numbers.
But for the PAR calculation we take only scores from users into account that have solved more than a certain rate of levels (currently about 10% of the levels). For every level we calculate the harmonic average of the scores of these `professionals'. Professionals that did not solve a level are taken into account with the 10 fold world record score. The harmonic average calculates as
harm.avg. = N / (sum_[j=1..N] 1/score_j) )
It weights small times with a greater weight than large solvage times.
The handicap is a sum of values that describe your scores in relationship to the PAR value of a level. As it has to take into account that you have no score at all or that no PAR value exists some exception rules have to be applied to the addends:
• | + 1.0 | for each unsolved level |
• | + log10(score/par) | for each solved level with existing par if score >= par |
• | + 0.7 | as upper limit for each solved level with existing par if score >= par |
• | + log2(score/par) | for each solved level with existing par if score < par |
• | - 3.0 | as lower limit and as value for levels without par |
Note that each score that is better than PAR results in a negative addend and thus reduces your handicap. For a levelpack with 100 levels the handicap will be in the range of +100 to -300. For levelpacks with more or less levels the sum will be scaled by a factor 100/size to result in comparable handicap values. Handicaps are stated with one digit behind the decimal point.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Knowing the basics of running Enigma you may wonder how levels are organized in levelpacks and how you can add levels or complete levelpacks to Enigma.
Levelpacks are sorted collections of levels that consist of an index and optional attached level sources. Not all level sources of a levelpack have to be included within the levelpack itself. A levelpack can crossreference levels stored in other levelpacks. If a levelpack has no own level sources and consists only of crossreferences we speak of a crossindex as the levelpack is just represented by a single index file.
These definitions suite well to all versions of Enigma. But up to Enigma 0.92 levelpacks needed to be manually edited and the registration of levelpacks was a little bit cryptic. Thus we decided to rewrite the complete levelpack system for Enigma 1.0 and tried to make it versatile and easy to use. We did set us the following aims:
Some of these features work seamlessy. You can use them immediately from the levelpack menu. For others you may need to know where to place files. We will explain these details in the following sections:
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
One of the outstanding features of Enigma is its extendibility by new levels. And the community of users usually provides us every week several new great levels.
Adding a new level that you receive as an XML file is very simple. Locate the subdirectory `levels/auto' on your `user path' (see section Locating Resources). Just copy the level file to this folder and restart Enigma. The new level will be part of the `Auto' levelpack and can be played like any other level.
Please note that errornous or incompatible levels are displayed with an error icon in the level menu. Of course an attempt to run such a level will result in an error message. Have a look at the level metadata with the levelinspector (see section Level Info) to identify the required compatibility version and contact the author via the address in case of level code errors.
A second way to run new levels is to add the address of the level files to the commandline (see section Startup Switches). This way you can play levels that are stored anywhere. Even Url addresses of levels stored in the internet may be used. Levels added to the commandline are accessable via the `Startup Levels' levelpack.
If you want to run an old fashioned Lua level that was written for Enigma 0.92 or earlier you may try to start it via the commandline. These old levels miss necessary metadata for auto detection. But commandline supplied levels are treated as temporary levels that are available just for a single run of Enigma. The missing data is substituted by reasonable defaults. You will have good chances that the level will run, but scoring and copy, past and linking of such levels is not possible.
Besides single new levels the community may provide you with complete levelpacks, too. These levelpacks may occur as directories with levels, zip archives or single XML files. All of them can be installed by simple copying the files. But we have to distinguish the three formats.
Levelpacks that are distributed as directories with level files and an index file in it have just to be copied to the subdirectory `levels' on your `user path' (see section Locating Resources).
Levelpacks that are distributed as zip archives have to be copied to the subdirectory `levels' on your `user path'. There is no need to unpack the zip even though it is possible as described in the section Zip Levelpacks.
Levelpacks that are distributed as a single XML index file have to copied to the subdirectory `levels/cross' on your `user path'.
After restarting Enigma all new levelpacks should be accessable via the levelpack menu.
That is all you need to know to be able to add new levels and levelpacks for testing and playing. If your main interest lies in writing own levels you may want to preceed directly to chapter Level Basics. The rest of this chapter explains how to arrange and sort existing levels in own levelpacks.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
With the changes of the levelpack index format it is necessary to convert old levelpacks. Even though the main work is done automatically just by starting Enigma a few special cases remain that need manual preparations. Furtheron some cleanup after the autoconvertion may be useful.
If you used to maintain your levelpacks within the Enigma system levels directory you should now copy your own levelpacks from the old Enigma version to the `user path' subdir `levels' (see section Locating Resources). The `user path' exists on all systems and as Enigma 1.00 will never write to the system levels directory updates and convertions will only be performed on the `user path'. If you registered your levelpacks on the system levels directory within the `index.lua' file you need to copy these registration lines to a file names `index_user.lua' which you shoud store on your `user path'.
If you maintained several own levelpacks Enigma 0.92 allowed you to keep them in several subdirectories of the `levels' directory. But you were also allowed to keep all level files and different indices in the `levels' directroy itself. In this last case you will run into trouble with the auto convertion as Enigma 1.00 allows only one levelpack with attached level files per directory. In this case we recommend a step by step convertion: in every step provide only one old index for convertion. Enigma will convert this index to an new `index.xml'. Move this new index together with all levels to a subdirectory and convert the next levelpack.
A last special case occurs if you had an old index stored in `levels' that referenced level files in different subdirectories of `levels'. As Enigma 0.92 did not had a concept of cross references and Enigma 1.00 requires all level files attached to a levelpack to be stored in a single subdirectory the convertion algorithm needs to guess the correct subdirectory. It just takes the subdirectory of the first level. If this does not fit you may need to clean up your 0.92 levelpack prior to convertion.
All other standard levelpacks should be converted without problems. The convertion is just performed once. As soon as the new `index.xml' exists only this index is used. Thus after a careful check you may remove the old `index.txt'. We recommend to keep a backup of the old index until you completly switched to Enigma 1.00.
In the case that you used an own levelpack in the zip format you will find a subdirectory named with the base name of the zip archive in your user `levels' directory. Within this directory the converted `index.xml' is stored. You may want to exchange the old `index.txt' in the zip with the new index. Afterwards you can delete the subdirectory as the index will be loaded directly from the zip archive.
After converting your levelpacks we strongly recommend that you update your own levels to the new XML format as described in Level Basics.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Besides the classical levelpack format of a subdirectory of `levels' with an `index.xml' and several level files Enigma 1.00 provides a compatible zip archive format. This zip allows you to reduce resources and to ease distribution of levelpacks.
The compatibility is 100%. If you have a classical subdirectory levelpack you can simply zip the complete subdirectory and name the zip with the name of the subdirectory plus standard `.zip' suffix. Now you can completly remove the subdirectory and the levelpack is autodetected and fully playable. Even cross references into this levelpacks will not be broken!
On the other hand you are allowed to expand every zip levelpack to a subdirectory with index and level files. Again everything runs and no crossreferences are broken.
If you keep both, files contained in the subdirectory preceed files in the zip archive. Thus updates of single files are stored in subdirectories in parallel to existing zip archives.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
As the number of levelpacks increased it got necessary to sort and group the levelpacks in the menu. We tried to provide a useful set of default groups and default assignment of the distributed levelpacks to these groups:
But this is just a proposal. You are free to rename the groups, add new groups and change the assignments of the levelpacks. As in other parts of Enigma you can right or control click on the group and levelpack buttons.
The group configuration menu allows you to rename and reposition a group. You can choose any name that is not a duplicate, that is not enclosed in square brackets and differs from `Every Group'. Note that you may not be able to enter all characters that you are used too. Sorry for this inconvenience.
The levelpack configuration menu allows you to assign a pack to a group. The group list contains two special entries: `[Every Group]' and another name enclosed in square brackets. A selection of the first pseudogroup shows up the levelpack in every group. The `Startup Levels' group has this assignment by default. The second square bracket enclosed name is the default group of the levelpack itself. It is a hint for you and allows you to reassign a levelpack to the default group even if you meanwhile have deleted the group.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
To create a new levelpack you simply select the group to which you want to add the new pack. This is most likly the `User' group. Right or ctrl click on the group and simply click on the `New Levelpack' button. The levelpack configuration menu will be called that allows you to enter all important data for the creation of a levelpack.
First you should enter a name for the levelpack. You are limited to characters that can be used for filenames, too. Alphanumerical characters A-Za-z0-9 and space, underscore and hyphen are usable. Note that you may rename the pack lateron for a better suitable display name (see section Modifying and Deleting Levelpacks).
Furtheron you should decide whether you want a levelpack that can contain level sources or just a crossreference levelpack. The first one is useful for storing own self written levels or levels that you download yourself from the internet. The crossreference levelpacks are for your favorite collections where you just reference existing levels of other levelpacks with your own personal sorting. You set the selected type with the `Level types' button which uses symbols for references and carbon copies.
The `Default Location' is a number that determines the sorting location within levelpack groups as long as the levelpack has not been resorted manually (see section Grouping and Sorting Levelpacks). This default value is only relevant if you distribute your levelpack and want to ensure that the users will find your levelpack at a proper location. The value given after creating a new levelpack should work fine in most circumstances.
You may declare yourself as owner or creator of the levelpack. This just a string for identification purposes.
Finally when you completed the configuration you can create the levelpack by clickling `OK'. The levelpack will be created on your `userpath' (see section Locating Resources).
If you decide not to create a new levelpack just click `Undo'. Nothing will be created or changed in this case.
If you want to set up immediatly the new levelpack you can click directly on `Compose Pack'. The levelpack will be created and you can use the composer to fill it with levels.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
To modify a levelpack right or ctrl click on its button in the levelpack menu. You will see the metadata for all levelpacks. But only for your own levelpacks that are stored on your `userpath' a button `Edit Metadata' will show up. Clicking on it allows you to edit the metadata.
It is possible to rename the levelpack, but the filenames will not be changed any more. The new name will be used as the logical levelpack name that shows up in Enigma.
Other attributes that can be modified are the `Default Location' and the `Owner'.
Note that it is not possible to change the levelpack type lateron. You have to create a new levelpack of proper type and copy the levels by Composing Levelpacks.
We do not provide a levelpack deletion function to avoid uninteded loss of levelsources. But the deletion of a levelpack is as simple as deleting the complete levelpack directory on your `userpath'. For crossreference levelpacks you have to delete just the index XML file on the `levels/cross' subdirectory of your `userpath'.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
You can change the levels of a levelpack by the levelpack composer. You call it by right or ctrl clicking on the levelpack button in the levelpack menu and clicking on the `Compose Pack' button in the levelpack configuration menu.
The composer looks quite similar to the levelmenu but it provides other functionallity. All commands are listed in the F1 help menu. First you may note that the levels are bordered red if you compose your own levelpacks. This is a warning as you can modify these levelpacks. System levelpacks as the distributed Enigma levelpacks will border the levels in gray as you can use the composer only for copying levels to the clipboard.
The clipboard allows you to select levels in one or several levelpacks and to insert these levels as reference or as copy to your own levelpacks. First clear the clipboard by `Shift delete'. Then select within the composer levels from any levelpack you want. Add them by `Shift click'. They will show up in the upper text lines in the composer. Return to the levelpack where you want to add the levels. Select the level behind which you want to add the levels. Use `F8' to insert the levels of the clipboard as references. If you edit a levelpack that can take level copies you may use `F9' to insert the levels of the clipboard as file copies.
As soon as you modify the levelpack a small red triangle in the upper left corner signals the modification. Leaving the composer via button `OK' finalizes all changes. Leaving the composer via button `Undo' reverts all changes.
Besides addition of levels you can delete levels by usage of the `delete' button. Note that the level files itself will be deleted if you delete a level that is not just a reference. Be careful with all levels that have the document icon on its preview. Deletions can be reverted by the `Undo' button.
All levels can be resorted by `alt left arrow' and `alt right arrow'. The new sorting is shown up directly and saved by the `OK' button.
The `F5' button updates the index from the levels. This is very useful if you edit levels yourself. Changes in title, revision, easy mode support etc. will be noticed by the levelpack. All levels of the levelpack are updated at once.
By usage of the Auto levelpack and the composer you can setup levelpacks of your own levels as follows. Create a new levelpack, add the level files to the `auto' folder, restart Enigma, add the levels from the `auto' folder to the clipboard, insert the levelpack by the composer to your levelpack as copies, delete the unused level file copies from the `auto' folder.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
As you have played some levels of Enigma you may have noticed that Enigma is a quite dynamic game with versatile levels. Thus it is not astonishing that it is not possible to describe such levels with a static approach of a simple object map like Sokoban. Some levels like mazes, generate their layout and look different each time they are played. Other levels provide a dynamic behaviour during the play. F.e. switches may open doors only on certain circumstances. To comply these demands the powerful light-weight C extension language Lua has been integrated into Enigma.
Up to Enigma 0.92 two different level formats did exist. One was a XML like format that was primarily designed for external level editor programs. As its static object map description part was inconvenient for manual edition it was never used by many authors. The second format was plain Lua code that used an interface of Enigma Lua functions to add objects and callback functions. This second format was used by nearly all authors. But it had a small drawback - metadata for the level like the author name, license info and last but not least the level name itself could only be stored as unformatted Lua comments and had to be reinserted manually into the level-package indices.
With the post 0.92 XMLification of Enigma we achieved full XML support by integration of Apache Xerces and were wondering how to get rid of the old level format drawbacks and how to add some compelling new features:
Let us have a first view on complete simple `Hello World' level in the new format:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<el:level xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://enigma-game.org/schema/level/1 level.xsd" xmlns:el="http://enigma-game.org/schema/level/1">
<el:protected >
<el:info el:type="level">
<el:identity el:title="Demo Simple" el:id="20060210ral001"/>
<el:version el:score="1" el:release="1" el:revision="0" el:status="stable"/>
<el:author el:name="Ronald Lamprecht"/>
<el:copyright>Copyright © 2006 Ronald Lamprecht</el:copyright>
<el:license el:type="GPL v2.0 or above" el:open="true"/>
<el:compatibility el:enigma="0.92"/>
<el:modes el:easy="false" el:single="true" el:network="false"/>
<el:score el:easy="-" el:difficult="-"/>
</el:info>
<el:luamain><![CDATA[
levelw = 20
levelh = 13
create_world( levelw, levelh)
draw_border("st-wood")
fill_floor("fl-leavesb", 0,0,levelw,levelh)
oxyd( 4,4)
oxyd( 14,4)
set_actor("ac-blackball", 4, 11)
]]></el:luamain>
<el:i18n/>
</el:protected>
</el:level>
|
You may notice that the XML part contains all the metadata that the level author is used to supply with a level. The XML part is like a formular that can be copied from a template and be filled out.
The Lua code is embedded in the XML. The only limitation to the Lua part is that `]]>' is reserved for the end mark and would have to be substituted by `]] >'. No further restrictions.
As the example above includes all mandatory XML parts our aim to avoid major changes for Lua level authors should be achieved.
You find the example above in the `Exp' levelpack grouped in `Development'. The source code is located on the system path subdirectory `levels/enigma_experimental' (see section Locating Resources).
If you make your first coding experiments on a copy of this level either add your copy to the auto folder (see section Getting Started with Levelpacks) or use it as an argument on the command line (see section Startup Switches).
Of course we have to look at the details of the format and explain the optional parts:
| 3.1 Getting Started with Levels | ||
| 3.2 XML Level structure | ||
| 3.3 Info metadata | ||
| 3.4 LUA code | ||
| 3.5 Internationalization (i18n) | ||
| 3.6 Usage | ||
| 3.7 Update and Upgrade | ||
| 3.8 Libraries |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
A Simple Level
Here is a very simple level description that can also serve as a starting-point for new landscapes. (In fact, this is the first level in Enigma, so you can try it out right away.)
1 CreateWorld(20, 13)
2 draw_border("st-brownie")
3 fill_floor("fl-hay", 0,0, level_width,level_height)
4
5 set_stone("st-fart", level_width-1,0, {name="fart"})
6 set_stone("st-timer", 0,0, {action="trigger", target="fart",
7 interval=10})
8
9 oxyd(3,3)
10 oxyd(level_width-4,level_height-4)
11 oxyd(level_width-4, 3)
12 oxyd(3,level_height-4)
13 oxyd_shuffle()
14
15 set_actor("ac-blackball", 10,6.5)
|
The resulting level looks like this inside the game:
Let's now turn to a line-by-line analysis of this program:
1 CreateWorld(20, 13)
2 draw_border("st-brownie")
3 fill_floor("fl-hay", 0,0, level_width,level_height)
|
The level begins with a call to CreateWorld, which creates a
new world that is 20 blocks wide and 13 blocks high. Every
block in the world can be accessed with a pair of coordinates:
The upper left corner has coordinates (0,0), the lower right one has
coordinates (19,12). Every block contains a floor tile, an (optional)
item, and an (optional) stone.
A frame of stones is drawn around the newly created landscape with the
draw_border command. Its argument, "st-brownie", is the
name of a stone. By convention, all stones have "st-" prefixed
to their name, similarly all item names begin with "it-" and
all floor names with "fl-".
The fill_floor command in line 3 fills the complete floor with
tiles of type "fl-hay". The other arguments are the upper left
corner and the width and height of the rectangle to be filled.
5 set_stone("st-fart", level_width-1,0, {name="fart"})
6 set_stone("st-timer", 0,0, {action="trigger", target="fart",
7 interval=10})
|
Lines 5 to 7 demonstrate how to create individual stones. The
set_stone command takes a stone name, the desired
coordinates, and an (optional) list of attributes
as arguments. Note the use of curly braces {,
} to enclose the attribute list.
Attributes are the key to customizing the behaviour of objects in a landscape. Here, we first give a name to the first stone we create. It's a fart stone that has the unpleasant habit of "blowing off" when triggered. Triggering this fart stone is done by the timer stone we create in line 6-7. This stone performs a predefined action at regular intervals. In this case we want to send a "trigger" message every ten seconds to the object named "fart".
9 oxyd(3,3) 10 oxyd(level_width-4,level_height-4) 11 oxyd(level_width-4, 3) 12 oxyd(3,level_height-4) 13 oxyd_shuffle() |
These commands place a couple of oxyd stones in the level. The
oxyd command internally uses set_stone("st-oxyd", x,y,
…) to create the stones, but it additionally assigns sensible
values to some of the oxyd stones' attributes (most notably the
color). The command on line 14 permutes the colors on the oxyd stones
currently in the landscape.
15 set_actor("ac-blackball", 10,6.5)
|
This final line creates the black marble controlled by the player. Objects that can move around freely are called "actors" in Enigma. Unlike stones and items, actors are not restricted to integer coordinates, as you can see in this example.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Let us start with a complete overview of all existing top XML element nodes. The following level skeleton contains optional elements that are beyond level basics. These elements are just included for completeness:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<el:level xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://enigma-game.org/schema/level/1 level.xsd http://enigma-game.org/schema/editor editor.xsd" xmlns:el="http://enigma-game.org/schema/level/1" xmlns:ee="http://enigma-game.org/schema/editor">
<el:protected>
<el:info el:type="level">
<!-- required elements omited -->
</el:info>
<el:elements/>
<el:luamain><![CDATA[
]]></el:luamain>
<ee:editor/>
<el:i18n/>
</el:protected>
<el:public>
<el:i18n/>
<el:upgrade/>
</el:public>
</el:level>
|
The first line is the XML declaration. It is fixed besides the encoding specification. Enigma supports on all platforms at least `US-ASCII', `UTF-8', `UTF-16', `ISO-8859-1', `windows-1252'. Enter your encoding and ensure that your editor saves the level in this encoding. On some editors you can start in ASCII mode, copy the level skeleton with a different encoding declaration like UTF-8, save the level still in ASCII mode and reopen the file - the editor may detect the XML declaration and switch automatically to the given encoding. Note that as long as you do not enter international strings in the level you do not have to bother with the encoding at all. You can choose UTF-8 in this case.
Some addiontal remarks for XML newbies. The XML markup tags are quite similar to HTML. But XML requires for each start tag `<element>' a corresponding end tag `</element>'. For elements that have only attributes and no content you can and should use the alternativ empty element notation `<element/>'. Note that when we define an element as empty or state that no content is allowed not a single whitespace, even no linebreak is allowed between start and end tag - use the empty element notation to avoid mistakes.
We use a pretty printing format with an indention of 2. Each element starts on a separate line. Elements with text content have the end tag on the same line. Only elements with subelements have the end tag on a separate line with the same indention.
This format is not mandatory. You can even insert linebreaks in text contents and within the marks and even within attribute values. But note that the basic rule is that each linebreak will be substituted by a space during the XML parsing. Take this space into account to avoid mistakes, or simply live with the long lines.
All tag names and attribute names are prefixed with a namespace identifier. We use `el' as an abreviation for enigma level. All tag names that may be manually edited use this prefix.
And finally a short comment to the XML reserved characters `&' and `<'. These two characters are reserved as tag and entity starting characters. If you have need for them in text contents or in attribute values you have to substitute them by the entity sequences `&' and `<'. Additionally attribute values have to be enclosed either by `"' or `''. Of course the used enclosing character has to substituted in attribute values, too. Use `"' and `&apos'.
Elements:
This is the root node. There is only one instance of this node per file. Like the first XML declaration line this second line is quite fixed. There are two versions. The simple 3 attribute version as used in the first example and the 4 attribute version as above that is only used by level editor programs. For manual level edition just copy the simple version as the second line to your level file.
Attributes:
Namespace definition for the schema. The contents is fixed to "http://www.w3.org/2001/XMLSchema-instance". The attribute tag `xsi' must match the prefix of the next attribute tag and is standard.
Location of the used schemas. The contents is the fixed enigma level namespace followed by the schema location URL. Level editor programs will add their namespace and their schema location URL as in the second example above.
Namespace definition for enigma level. We use `el' as namespace prefix for all level element and attribut tags as standard. The used prefix can be arbitrary but must match this attibutes tag. The contents of the attribute is fixed to the enigma level namespace.
This last namespace definition is used by level editor programs only. As an example we declared `ee' as namespace prefix for all editor element and attribute tags. The used prefix can be arbitrary but must match this attibutes tag. The contents of the attribute is the editors namespace.
The protected node section contains all level data that derive from the author and should not be modified by anyone else.
The info node section contains all level metadata. It is mandatory and described in detail at section Info metadata.
The elements node section is optional. It contains level description parts that are given in a data driven manner. Even though the driving force is the support for level editor programs a level author may use any parts of this section he likes.
The luamain node section is the part to insert manually Lua level descriptions. It is described in detail at section LUA code.
The editor node section is an open extension area for level editor programs. They can add any additional information in this section that they have need of. This node section is simply ignored by Enigma.
The i18n node section contains English strings, native translations and comments supplied from the author for the translators. This node section is mandatory and described in detail at section Internationalization (i18n).
This public node section is an optional extension to the proteced part. It contains information that is not validated by the author and may even be added after the last authors review.
This public i18n section contains further level supplied translations. They may derive from the author or other sources. These translations will be validated by the translators and are used as long as the translators do not supply corrected versions. See Internationalization (i18n).
This upgrade node is part of the Update and Upgrade system.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
The Info node contains all author supplied metadata of the level. This is the source of these data. All other parts of Enigma like level indices just contain copies that will be automatically updated to the levels original data.
Let us have a look on all supported subnodes of info with typically used attributes:
<el:info el:type="level"> <el:identity el:title="Demo I18N" el:subtitle="Translate or let it be translated" el:id="20060211ral002"/> <el:version el:score="1" el:release="1" el:revision="0" el:status="experimental"/> <el:author el:name="Ronald Lamprecht" el:email="ral@users.berlios.de"/> <el:copyright>Copyright © 2006 Ronald Lamprecht</el:copyright> <el:license el:type="GPL v2.0 or above" el:open="true"/> <el:compatibility el:enigma="0.92"/> <el:modes el:easy="false" el:single="true" el:network="false"/> <el:comments/> <el:update el:url="http://…"/> <el:upgrade el:url="http://…" el:release="2"/> <el:score el:easy="-" el:difficult="-"/> </el:info> |
Attributes:
The schema may be used for single enigma levels, libraries that contain level description parts for reusage as well as descriptions for multiple levels at once.
`level' are all single level descriptions. It does not matter if they are edited manually or by a level editor program and which description elements are used
`library' are level description parts that may be included into levels. The library may consist just of Lua code in the luamain node or addtional object descriptions in the elements node. Libraries may make use of nearly all nodes besides the `/level/protected/info/score' and `/level/*/i18n' which both have to be provided but will not be evaluated. Libraries are included into levels via the dependency node-element. See <compatibility>.
`multilevel' are descriptions for multiple levels at once. The main purpose is to support foreign game level formats like the Sokoban level format which describes usually a whole set of level maps in a single file.
The number of levels contained in a multilevel file.
Contents - Elements:
The title, subtitle and the main level identification string. See <identity>.
All aspects of the level <version>.
All information provided about the author him- or herself. See <author>.
The <copyright> message for the level.
Information about the <license> conditions.
All information about <compatibility> to Enigma releases, dependencies from libraries, external data and the editor program that generated the level.
The <modes> that the level supports, as difficulty, network and control.
Optional comments like credits, dedication and code comments. See <comments>.
The authors own <score> of this level.
| 3.3.1 <identity> | ||
| 3.3.2 <version> | ||
| 3.3.3 <author> | ||
| 3.3.4 <copyright> | ||
| 3.3.5 <license> | ||
| 3.3.6 <compatibility> | ||
| 3.3.7 <modes> | ||
| 3.3.8 <comments> | ||
| 3.3.9 <score> |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
The `identity' element is required, as it provides the information for human and system identification of the level.
<el:identity el:title="Demo I18N" el:subtitle="Translate or let it be translated" el:id="20060211ral002"/> |
Attributes:
The English title of the level. Make sure that the title is not too long as it will be used on the level selection menu. Translations of the title can be provided in the Internationalization (i18n) sections.
An optional english subtitle. Used for title parts that are too long for the main title, or for a short first hint. The subtitle is displayed on the level info page and on the start of the level. Translations of the subtitle can be provided in the Internationalization (i18n) sections.
This is the central system identification string of the level that remains valid for all time independent of upcomming release updates. Enigma's single demand on the id is that it is unique. Unique among all levels created by all authors around the world.
As levels can be edited with any text editor or different special Enigma level editors there is no control about the uniqueness. Thus we have to provide a simple convention to avoid any possible id clashes:
YYYYMMDDuserNNN
Where `YYYY',`MM',`DD' is the date of the creation of the first experimental version, `user' stand for a user specific name and `NNN' for a random number. F.e. my level called `Houdini' has the id `20060816ral719'. Of course all level created on the same day have to differ in the random number part. The id is a Enigma level system id and is never exposed to users.
For backward compatibility legacy levels keep their former filename as the new level id and do not fit in the name schema given above. But that does not harm as the only requirement is the uniqueness.
Contents:
The element itself is empty - no content is allowed.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This element provides the versioning information for the system.
<el:version el:score="1" el:release="1" el:revision="0" el:status="experimental"/> |
Attributes:
The score version is given as a positiv integer number. New levels start with score verison "1". New level versions need to increase the score version number if the level modifications cause different solutions with uncomparable score values. Of course level authors should be very restrictive with such modifications.
During the development of a level the attribute `status' should be used to mark a level as not released. Not later than the author changes the `status' to `released' he has to check scoring compatibility and increase the score version if necessary.
This attribute is the logical equivalence to the Enigma 0.92 `index.txt' attribute `revision'.
The technical release version is given as a positiv integer number. New levels start with release version "1". New level versions need to increase the release version number if the level modifications either cause technical incompatibilities with previous Enigma releases or the scoring version has been increased.
The primary cause for technical incompatibilities should be the compensation of Enigma engine changes. As such compensations will not run on the old Enigma version the level versions have to be distinguished by a different release number.
In both cases, technical and scoring incompatibilities, the level file name has to be changed, too. This is necessary as on some systems different Enigma versions may be installed at the same time. They have the need for both level versions at the same time. Internet servers providing Enigma levels need to offer different level release at the same time, too.
To enable humans to assign different level release files to a level itself we strongly recommend the name convention for levels AuthoridentifierLevelnumber_Releasenumber.Suffix. Where the levelnumber is at least 2 digits. For example `ral01_2.xml'
The revision number is a simple ever increasing version number. Every published version of the level should have a new revision number. The revision number is independent from the scoring and release version number.
If Enigma finds two levelfiles in its data serach paths with identical filenames, id, score and release version it will load the one with the higher revision number. This feature guarantees, that a new revision of a level distributed with a new Enigma release can not be shadowed by an older level revision stored on the users home level directory. Online updates will check the level revision numbers, too.
Even though the revision evaluates to a number the attribute can take a second string format as the literal keyword `$Revision: 1.2 $'. This Subversion format allows level authors to let the level revision number be automatically inserted by their Subversion repository. They just have to set `svn propset svn:keywords "Revision" level.xml' at their repository for every level file. As the Subversion revision number is ever increasing it fulfills our criteria. Note that there is no need for revision numbers to be consecutive.
This attributes describes the quality of the level during development. Enigma uses the status to protect the score database to be spoiled by unplanned solution scores. Only for levels marked as `released' scores will be recorded.
A level author who starts a change on a released level should first change the status back to `experimental'. Then he should make his changes and test the level. When he is definitivly sure that he did not introduce any spoilers he can release the level again with a new revision and may be release or score version number.
Contents:
The element itself is empty - no content is allowed.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
The information about the author him/herself. The element itself is required. But all attributes are optional to allow an author to be anonymous. Please remember, that level adminstrators and translators may have a need to contact you as an author. So please give a way to drop a note for you.
The author element node may look like:
<el:author el:name="Ronald Lamprecht" el:email="ral@users.berlios.de" el:homepage="http://myhomepage.domain"/> |
Attributes:
The authors name as it will be displayed on the level info page and on the start of the level. The name defaults to `anonymous'.
The authors email address or a newsgroup or forum he listens to. In general a hint how to drop a note for him. The value will just be displayed as a string on the level info page.
An address about the author or where the author publishes further Enigma levels. The value will just be displayed as a string on the level info page.
Contents:
The element itself is empty - no content is allowed.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
The standardized location for a copyright message of the author:
<el:copyright>Copyright © 2006 Ronald Lamprecht</el:copyright> |
Attributes:
none
Contents:
The copyright notice of the author.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Of course every author is free to choose the license conditions for his levels. But the author has to state the conditions. Thus this node element and its attributes are required:
<el:license el:type="GPL v2.0 or above" el:open="true"/> |
Attributes:
A short license identifier of the license type with an optional link address to the license text or the string `special' if the author supplies an own license as the content of this element.
A boolean statement if the choosen license fulfills the criteria of the Open Source Initiative (OSI). Please note that a value of `false' may keep your level of being distributed together with Enigma.
Contents:
A complete license text may be added as the contens of this element. Please make use of identification of the level via the type attribute.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
<el:compatibility el:enigma="0.92" el:engine="enigma"> <el:dependency el:path="lib/natmaze" el:id="lib/natmaze" el:release="1" el:preload="true" el:url="http://anywhere.xxx/mypage/natmaze.xml"/> <el:externaldata el:path="./extfile" el:url="http://anywhere.xxx/mypage/extdata.xml"/> <el:editor el:name="none" el:version=""/> </el:compatibility> |
Attributes:
The minimal Enigma release number required for compatibility.
The required engine compatibility mode that influences the behaviour of various objects. This attribute is only evaluated for levels. Libraries ignore this attribute.
Contents - Elements:
The comments element itself contains only subelements as content.
With the use of this elemen