= How to create Orxonox Levels =
[[OutdatedPage]]
[[TracNav(TracNav/TOC_CC_Tut)]]
== Create the basic file ==
1. Go to the folder ../data/levels. The level files ending with .oxw are simple XML files and can be opened with any editor. Each level file stored in this folder can be selected later in Orxonox.
2. Copy „empty_level.oxw“ and paste it again in the folder.
3. Rename the copy. Try to use a name that sounds good. Avoid whitespace – use „_“ or CamelCase instead.
4. Open your level with your favourite editor.
== About XML ==
XML is a description language that looks similar to HTML. Like in HTML there are tags (in fact we are only using tags):
A template can contain several tags. A tag is the place where a value is set.
The syntax is tag=“vaule(s)“ if only one value is set the quotation marks are not necessary.
Tip: Since your XML files do not have to be compiled you have to simply reload a level to view the changes. In Linux you can switch between the game and the editor by pressing [alt] + [tab]. If you insert only a little error and try to load a level the game will „stuck“. By pressing [alt] + [tab] you can leave the game and view the error message on the terminal.
To create a level in Orxonox is really easy. One does not have to program anything or compile the code again, because our levels are created with XML-Files. There the objects in the level can be defined. On this page we explain what one can do with the XML-Files and how to create a new level for Orxonox with them.
The objects we can add are rooms (BSP-files), spacecrafts (OBJ-files) and moving objects (MD2-files). How to that exactly is best explained with the examples below.
If you're interested in creating rooms and BSP-levels check out this page: [wiki:MappingForOrxonox Maping for Orxonox with GTK-Radiant]
== Adding a menu entry ==
Before you can play a level in Orxonox you have to add the level as a menu entry in the game. To do that you have to alter the DefaultCampaign.oxc file in the data/levels directory (or data/worlds in older versions).[[br]]
Below there is a example for that file:
{{{
#!xml
default
0
The one and only default debug campaign
0
GameMenu
levels/Menu.oxw
1
1
2
Demo Mountain Lake
levels/sp_demo_mountain_lake.oxw
1
2
0
levels/mp_level_arena.oxw
...
}}}
Now to add your level you have to add an !SinglePlayerWorld (or !MultiPlayerWorld) entry to the !WorldList. Be sure to add an identifier a name and the most important: the path of your OXW-file. The number of the identifier and the menu-entry have to be incremented. Close every you open.
== XML level file (OXW) syntax ==
Level files have the extension OXW (for '''O'''rxono'''X''' '''W'''orld). The order of the things you add does not matter.
At the beginning of every file you have to put the tag and close it in the end. Then you put in the name of the level and the screenshot (or picture) you want to show in the menu. You can check out the example below to see how it works.
Every tag has to be closed and stuff which is written in a tag is related to that tag. If open a tag you have to be sure you open it at the right place. In the !WorldDataFile tag the name tag is refering to the name of the level and in the !SpaceShip tag for example it refers to the name of that space ship. So be careful where to put your tags and when you have to close them.
=== Important to know ===
* '''Coordiane system:''' The y axis looks up not z!
* '''Rotation:''' The rotation is described by a Quaternion. Quaternion(rotation, Vector(x,y,z)).[[br]]
Example: Rotation around y by 90° -> 3.14, 0, 1, 0
=== Example ===
{{{
#!xml
Meteroid
pictures/menu/ss_meteroid_512x512.png
pictures/load_screens/default.jpg
16
0,0,1.0,1
.65,.87,.3,.05
pictures/load_screens/default_bar.png
Player
522,-389,419
Player2
models/ships/reap_#.obj
312.19, 172.36, 60.74
...
413.5,183,36.3
media/hero.mov
15
90
75,38.5
...
Sky
pictures/sky/simple_space
10000
comet
300,50,-400
models/comet.obj, 2.5
...
Meteroit
300,50,0
models/environments/meteorit.obj, 2.5
testrotate
models/environments/uranus.obj, 10
50,0,0
5,10,5
sound/music/allgorythm-once_upon_a_time_in_a_small_club.ogg
1,1,1
300,800,0
...
1,1,1
lense flare
pictures/lense_flare/sun.png
pictures/lense_flare/lens2.png
pictures/lense_flare/lens1.png
pictures/lense_flare/lens3.png
pictures/lense_flare/lens4.png
pictures/lense_flare/lens1.png
pictures/lense_flare/lens3.png
}}}
=== Load Screen ===
While your level file is read and the entities are created the game will show a loading screen you will have to define inside the tag. The element count is the number of elements the loading bar will have and the bar image can also be defined. Of course you can also define the position of the two elements (background and bar) on the screen. Check out the example to see how this works.
=== World Entities ===
World entities are all the objects we have in a level. That includes space ships, meteors, animated textures and so on. Since all those objects have the !WorldEntity class in common, we have a list of all the world entities in our XML-file. This list is defined in the tag.
==== Player ====
To add your player to the scene all you have to do is define a space ship or a turbine hover or any other kind of craft you want to play in. We make a difference here because not every ships is controlled the same way. If you define a space ship with the turbine hover model, the hover will be acting like a space ship. Keep that in mind when you define new space ships and players in your level.
As seen in the example above the turbine hover has it's own tag and all you have to do is give it a name and of course fell it where its position should be. This can be achieved by using the tag and define x,y and z coordinates of the position you want to have your turbine hover to be created.
Inside of the !SpaceShip tag we see that a model is defined as well, because we have different models we could use as a space ship. These models can be found in the data/models directory and can be every model of your choice.
==== Skybox ====
The skybox is a world entity. You should only use one skybox, more of them wouldn't make sense. The interesting attributes of the skybox are shown in the example: The size is important for the dimension in every direction. If you choose a size which is higher than the clip of the camera, the skybox will not be visible completely. The material set is also very important. There you define which skybox should be chosen for your level. A skybox is built from six images with the extension ''neg'' or ''pos'' to define front and back and with ''x'', ''y'' and ''z''. The front skybox picture file from the example would be called simple_space_pos_x.jpg.
==== Rotor ====
Rotor is a object which just rotates around a given axis. What you have to do is define the position and direction of the model and the source file of the model itself like you do it with most world entitites. In addition you define the speed the model will rotate around x, y and z axis in the game. This is done in the rotation tag.
==== Weather effects ====
...
=== Music ===
Music is no world entity. All you have to do is to define a sound file you want to play in the level. This can be an ogg file like in the example or a wav or an mp3 file. Feel free to play your own music in the level.
=== Lights ===
You can put several lights into the level. You want that because the level shouldn't be in complete darkness. Most of the time it's advised to put the light far away from the actual scene to put light everywhere. To make other things lighter, just add another light a lot closer to the previous.
You have to experiment with the light sources and it is advised not to use too many. Lights should be locked at as suns and not as street lamps.
First you open the !LightManager tag. Inside you have the Lights tag where you define your list of lights. Each light has a position (abs-coor attribute) and a diffuse color (1,1,1 is white). Play with the values to get your light color of choice. Outside the Lights tag you can define the ambient light color which is important for the light in the whole level. You should play with that option as well.