Difference between revisions of "How to create smooth levels using Inkscape"

From X-Moto
Jump to: navigation, search
Line 23: Line 23:
  $ cd the_rep_where_you_ve_done_the_cvs_checkout
  $ cd the_rep_where_you_ve_done_the_cvs_checkout
  $ cd xmoto/tools/svg2lvl/
  $ cd xmoto/tools/svg2lvl/
  $ mkdir -p ~/.inkscape/extensions/
  $ mkdir -p ~/.inkscape/extensions/svg2lvl
  $ cp svg2lvl.inx *.py ~/.inkscape/extensions/
  $ cp svg2lvl.inx ~/.inkscape/extensions/
$ cp *.py ~/.inkscape/extensions/svg2lvl
Then, you can launch inkscape.
Then, you can launch inkscape.

Revision as of 21:46, 5 September 2006


Caution: this software is still in early development stage. Please report bugs on the irc

Required softwares

  • Inkscape (>= 0.44)
  • Python (>= 2.4)
  • Svg2lvl converter and inkscape extension (available in xmoto cvs)
$ cvs -z3 -d:pserver:anonymous@xmoto.cvs.sourceforge.net:/cvsroot/xmoto co -P xmoto/tools/svg2lvl/


You have to install the svg2lvl inkscape extension.


$ cd the_rep_where_you_ve_done_the_cvs_checkout
$ cd xmoto/tools/svg2lvl/
$ mkdir -p ~/.inkscape/extensions/svg2lvl
$ cp svg2lvl.inx ~/.inkscape/extensions/
$ cp *.py ~/.inkscape/extensions/svg2lvl

Then, you can launch inkscape.


Go to the share/extensions/ directory inside your inkscape installation. Copy the .py files and .inx file inside that directory.

Then, launch inkscape.

Draw the level

Open Inkscape.


You're ready to draw your level using Inskcape. See Inskcape howto's from the help menu.


Transform all objects into paths

Inskcape deals with its own shapes like stars, circles, ... so you have to convert them to path of vertex.

Disclaimer: don't put objects properties before transforming them to paths !
Else properties will be lost... Inkscape remove them.

First, select the object, Inskcape-obj.png

Then, Shift+Ctrl+C (or use the menu)


And you got a path of vertex


Repeat this process for every inskcape shape (rectangle, circle, star, ...)

Level objects properties

Once your level is drawn, you have to put entities, blocks and sprites properties. Select an object, right click on it, then select 'object properties'.


Properties are put inside the 'label' box. They are seperate with a '|'. If no properties are set, then the object is put as a block with default texture. You can also fill the 'id' box, it's useful if you write a lua script for the level, because you got the blocks, zones and entities names to use in your script.

WARNING : properties are case sensitive ! Write them with the exact case as show below.

Block properties

  • background
  • dynamic
  • usetexture=texture_name


A background block (it's a block in the background and the player can't interact with it) using the Dark Dirt texture:


A dynamic block using the default texture:


A block using the default texture:

(you have nothing to put in, let it blank (or let what inkscape puts in it))

A block using the Dark Dirt texture:


Entity properties

  • typeid=[PlayerStart|EndOfLevel|Strawberry|Wrecker|ParticleSource|Sprite]
  • size=float_number (the entity colision radius)
  • param_name=param_value available params name are (there's more of them):
    • z (for Sprite)
    • name (for Sprite)
    • style (for every entity)
    • type (for ParticleSource)

For example

A particle source throwing smoke:


A strawberry:


A tree sprite put under foreground blocks


Player start:


End of level:


Zone properties

  • typeid=Zone
The only possible value for a zone

Generate level file

You no longer have to add many vertex, the script handle that itself !

launch the converter

In order to save your level in the .lvl file format, use the menu File -> Save as... (or use Shift-Ctrl-S) and choose the X-Moto Level file extension, put the level file name then press Save.


A new window pops, you have to put:

  • level width : the level width in xmoto unit. play with it until you find the right value for your level
  • smoothitude : the higher the value, the smoothest the level. But don't add to much vertex, because xmoto doesn't scale very well with big levels made with thousands of vertex... and became quite slow...
  • lua script  : the absolute path to your lua script (leave blank if your level doesn't have a lua script)
  • level id  : the level id (each level got a unique one)

Then your level file will be save in the place you choose in the Save as... window.

Disclaimer: on GNU/Linux, it seems that saving the level directly inside ~/.xmoto/Levels/ doesn't work...
Disclaimer2: There's a bug in Inkscape. The very first time you save a level in lvl, put something into the lua script box. Else Inkscape will abort...


You can also use the command line.

$ python svg2lvl.py --width=100.0 --smooth=95.0 --lua= --name=myLevelId svgfile > levelfile.lvl

Params are:

  • level width in xmoto unit
  • smooth percent (play with it)
  • absolute path to lua script file (optional)
  • level id
  • absolute path to the svg file

Then, put your lvl generated file into your xmoto Levels directory, and you can play it:

level in the editor

Our level in X-Moto

The script add a log file svg2lvl.log into your home directory.

Files used in this howto