Level editor for CORONA with Physic support

Hello guys,

I want to tell you about great tool called LevelHelper for making levels for your games in a few minutes. Check out

http://levelhelper.wordpress.com for a video presentation

Top features:

Create complex levels with physic in just minutes.
Don’t have to write code to load the level.
Generates code for Cocos2d (C++ and Objective C) with/without physics in Box2d
Generates code for CORONA (lua) with/without physics in Box2d
Transform your sprites to suit your levels with size, opacity, angle and many more.
Change the physic properties on one or multiple sprites at once.
Create joints and make complex physic simulations.
Create masks so that you control if one object collide with another.
Duplicate objects easy and with specified offset.
Create tags and control objects in your custom code.
Add your own custom classes to the objects.
Snap to grid to align your sprites better.
Unlimited undo/redo

Best regards

o wow.. this is awesome.. good job.

Thank you!

I will keep updating on this tool. Version 1.2 should be available in 2-3 days (Apple is reviewing it right now) which brings many new and cool features. Will make a video presentation soon also a complete game tutorial.

Here is the release notes

Added create world boundaries
Added revolute joint
Added ZOrder on sprites and images
Added No Physic as physic property so now you can have both physic enabled and non physic objects in the same time
With ZOrder on images now you can make backgrounds very easy.
Added color on sprite property
Added support for CHIPMUNK (this will be available at a later time - will post message here/website/in app - when it will be available)
Level file now is saved as a PLIST with extension PLHS so that you can double click on it from the Finder.
Now you can put your own unique name to a sprite so you can more easily identify a sprite in code
Added Fixed Rotation on physic properties
Fixed many issues

I've bought this tool and i'm glad to hear that a new version(1.2) is coming in the next couple of days.

I am also glad that you're making a video presentation and a complete game tutorial.That will be a great JUMP START FOR BEGINNERS!

-Oliver

Thank you! I really enjoy CORONA - and i plan to support it all the way!

For examples on how to use the code generated with LH in your CORONA project look inside the file LevelHelperLoader.lua - it contains examples and details on what every function does.

looks nice, will give it a try :)
dois it work only with SpriteHelper or can i use texture packer?

It only works with SpriteHelper - that's because SpriteHelper can also create shapes for box2d on the sprites (shapes the LH uses for physic simulation). An update on SpriteHelper should be available in the next 2 weeks bringing support for convex and concave shapes and many more.

This looks really cool!

Thank you!

I want to point out - that if you guys want some features added - you can post a message here or from within the app (Help menu) and tell me what you need. If its possible i will do it.

awww... :( will they be an upgrade to use sprites generated by other programs? I already use heavily texture packer and physics editor for my projects and don't want to change...

Well - in your project you can still use those apps - but for LevelHelper you need SpriteHelper that's because information on one sprite is located in a single file and LH knows how to import it.

I feel a purchase coming on...

How well does Level Helper cope with larger scenes or levels where the objects and/or the level extends beyond the boundaries of the screen? Can we enable an easy scrolling method? i.e just control the groups x/y coordinates.

Off the top of the head requests if there not currently present would be:

- Multiple scene/level creation in app so you can maintain lots of levels and basic screen constructs all inside your app.

Was going to suggest more but what I've seen in the videos seems great!

I have tested LH with complex scenes and worked fine. Also with levels that extends beyond screen boundaries. V 1.3 will bring support to import information from other level files - till then what you can do is do a save-as on a done level and just remove what you don't need. (i think this is what you were asking - not really sure)

I was thinking along the lines of a Super Mario style platform game where the level extends beyond the screen. Would something like this be possible?

Oh yes - for sure - that's easy to achieve - you just make the camera follow the player. The tutorial im going to make - will do this :)

One thing i want to point out - right now LevelHelper - generates 3 code files - in the version 1.2 that will be available in a few days - it will only generate 1 file (improvement) - so please when you will update remove LevelHelperSprite.lua and LevelHelperJoints.lua from your projects

Regards

Hello guys,

I've updated the site with a CORONA project - so you can get an idea of what you can do with LevelHelper and how to use it.

go to http://levelhelper.wordpress.com its right on the main page at the top

Regards,
Bogdan Vladu

one question: do you have it tested with director class?
And since your direct concurrent, Lime, has performance issues, have you done something in the code that made the levels created faster, or do you have to limit yourself to small ones?

Hey,

LevelHelper uses an online repository for the code - so if there are problems with the code i can updated it immediately so you guys don't have to wait for the next version of LH to be available in the AppStore. (it also has an offline source for the code) - so to answer your questions - i haven't test it with Director class - but i will do it asap and if there are problems will update the code. - For the performance question - if CORONA can support it, then LH can support it as LH only generates a file (a level file) and then you just read that file with the generated code which creates all the sprites in the CORONA engine - to be able to access all your objects the code provides you with the necessary methods.

Look at the project i have put on the LH website to get an idea of how LH does its stuff and don't hesitate to contact me with any question you may have.

Best regards,
Bogdan

I am happy to announce that is working perfectly with Director - i also put a project with Director on LH website (main page - right at the top)

This is great! Just bought the two apps. Waiting for those updates.

Thank you! LevelHelper 1.2 should be available soon. (is in review by Apple for several days now)

Just bought levelhelper - this looks so good.

My only concern, and this probably only is important to me, is that I have a mac and my friend has a pc. This is fine for Corona work because I do the coding and he does the level design (his gf does the images.)

Because Corona, Tiled, Physics Editor, Lime, Texture Packer etc are all Win/Mac apps or platform independent APIs we can all work separately on our own, preferred platforms but bringing all the work together is easy.

With LevelHelper only for Mac the onus is again on me to do all the work (or buy my friends macs!)

So, any plans for a Windows version?

Loving the app though :)

Sorry, LevelHelper uses Cocoa in the back as opposed to QT for the apps you enumerated - so a port to Windows is very hard to make. Will probably make a port in the future, but not very soon - as right now my focus is in adding more features in LevelHelper and SpriteHelper.

Best regards,
Bogdan

PS - Thank you for the kind words :)

I thought so - doesn't matter, I still look forward to building games with your system. It's amazing how much work you've done for all of us!

Thank you! I will continue to add new features so that LevelHelper can help you even more.

@vladu.bogdan

You got some tutorials showing how to do a game like == Mario - Tiny Wings - Bubble Ball - Blast Monkeys or something like this ?

After my battle against my lazy i'll purchase your app because i work with bootcamp so i need to xchange to Mac OSX - Just finishing some models on Google Sketchup !

Hey - not right now - but i will make a full game tutorial soon - till then you can look at the CORONA projects that are on LevelHelper website (main page - right at the top) and also maybe read the Cocos2d small tutorial to get an idea - you use LH the same way with all engines. (there may be some little differences - like for instance in LevelHelper 1.2 you can apply color on a sprite - but this will not be visible in CORONA as color on sprites is not supported in CORONA - but in Cocos2d is)

Ok friend thanks for your Fast reply !

Wow, after spending some time looking for the right feature rich level editor, I think I might have just found one, especially at that bargain price!

My only question is, can it deal with curved levels. What is putting me of doing anything in tiled is curved maps with loops and bumpy terrain seem difficult if not next to impossible, since you seemingly can't integrate polygons into Tiled Maps. Are curved features possible with LevelHelper?

Cheers for the response!

Hey - Right now there is no curves support in LevelHelper - but i will add support in future version. What you can do now - is define a polygon shape on your sprite inside SpriteHelper - and that polygon shape will be available in LevelHelper/CORONA. So with that you can define some sort of ground. Its not the best solution, i know - but will add support soon for curves as its a must and a feature that many people have asked for.

Best regards,
Bogdan Vladu

Come to think of it - will make an example right now and upload it on the website in a few minutes.

I've updated the Director example with a scene containing a ground example - i realize that this is not the best solution of doing ground shapes - will add support for curves in version 1.3 (i plan to release a version every 1 or 2 weeks)

Wow that was a super speedy reply! Thank you. Making a polygon that is curved is still a great deal further than other alternatives and I am impressed to see you are revising and updating the program so fast!

Well - this is what i plan to do - i hope i will succeed (one version every 2 weeks). I want to make LevelHelper and SpriteHelper great, so i'm always looking for feedback, as that has helped me in the past and i'm convinced will help me in the future.

Best regards,
Bogdan Vladu

Something occurred to me. If I wanted to open level creation to players, similar to how Super Meat Boy did, how would I go about this. Levelhelper produces source files. Is there any scope for creating something which could use predifined sprites and just place them down with the standard physics defined for each sprite when you created them in Levelhelper. I'm not adverse to creating software which can do this, but I would need to have an understanding how physics is defined for each object.

Hey - First of all - LevelHelper does not create source files - the level is saved in a proprietary file (v1.2 brings plist format) it then generates you a code file that you use to load the level file. Look inside the CORONA project example from the LevelHelper website - you will find some files with plhs extension - those are the level files - LevelHelperLoader.lua - is the code file to load the plhs files. - Open the plhs with a text editor to see how LevelHelper saves a level.

As for specific type of objects (that you define in LevelHelper and are somehow compound objects)- this will be done in a later version - as this is a nice to have feature - i agree with you.

Best regards,
Bogdan

Thanks once again for your speedy reply. The plhs files seem to be pretty descriptive!

From what I can tell, a dict (I assume this mean dictionary, maybe I'm wrong :P) is a tag which encapsulates an object, you then have the various key tags to describe the value you are changing and the integer etc tags to describe the format of the variable you are changing.

I'm sure it wouldn't be too much work for me to create an app that outputs specific predefined objects with set tags, then just have it change the position, size, scale and I assume zorder are like layers. Then it could just write all of this to a phls file to be loaded by a specific function in the game.

That way I can stop people changing the physics of specific sprites and still let people create levels by placing the objects on a map in different places.

The only thing that worries me is, isn't this technically copying your software. I don't want to create a full level editor, just something that enables people to place the graphics in different places, hence creating a level. Most of the tags will be predefined by your level editor, my software would just copy them to a new document from some form of encrypted source document.

It also just occured to me from reading your above comment again a couple of times. The code used to read the phls file and create the level on the screen, is this the same code independant on what is in the level, or is this different for each level? In addition how will a plist file differ from a phls file?

Cheers for any replies!

Hey,

So you are correct dict is a dictionary. Not everything you see in the file is used by CORONA - for instance zOrder is not used. File is created with all the info that is needed for all engines (Cocos2d, Cocos2d-X, Corona) and also for LevelHelper.

plist file is actually an xml that is proprietary to Apple. It is very easy to read this kind of files with Objective C - but on Windows or in Lua - it can be real hard especially if you want to do something multiplatform.

The code (LevelHelperLoader.lua) reads everything no matter what you place in the level. But the level file should be done with LevelHelper as it follows a specific sintax to read the level.

I have given the level file extension plhs and not plist in order to be able to register that specific type of file with LevelHelper and be able to double click on it in the Finder and to automatically open the file in LevelHelper (also to differentiate a file done with LevelHelper from other plist files)

So to make matter more clear - plist files created by LevelHelper are not the same as plist files created by other programs (like Zwoptex)

For what you want to do - i suggest something like this

(some of this will be included in the full game tutorial i will do soon)

Lets say you have a specific game object - CAR - for that type you have wheels and body.

Create a level file that will contain only that - the body and the wheels position correctly on the body car - put the hole car at position 0, 0 (this is top left corner in LevelHelper)
(it can even have revolute joints with motor on them so the car will move)
Save your scene file as CAR.plhs

now in lua you should make a group (something like Director is doing) in which you add the car (all elements)

From here when the user wants to put another car in the level you just create a new group and you translate it to the position selected by the user.

You do this for all types of game objects you have.

Sorry for my bad english - i know im not very clear. Hope i helper.

Kind regards,
Bogdan Vladu

PS Don't hesitate to contact me with further questions

Just finished a major feature in SpriteHelper - now you can do concav shapes - and most important - you can do holes in your objects. I have updated the Director example for CORONA - (LevelHelper website - main page - right at the top) with a scene that contains concav objects with holes. I can only imagine the possibilities of what you can do with this. I plan to release the new version of SpriteHelper in a week - so not much till you can do this to.

Wow, this is dedication towards software development that I have never seen before! Thank you for your detailed reply on the above matter. Yes that would be perfect, create a Car object in levelhelper with all the things set up correctly and save it to a new phls file!

I'm not entirely sure I understand what you mean by creating a new group, I've looked over the director code. From what I understand levelhelper creates the phls file which describes position etc. The levelhelperloader just loads the level based on the phls file and the code for this does not really change. I'm not sure I understand fully what the director.lua file is doing other than scene transitions.

Edit: The curved shapes look awesome, I assume you will be able to have smooth curves too! Great work!

Thank you for all your time and help!

I'm glad you made the point, that it doesn't create source files. I thought it did, because the App Store description says it generates code, e.g., "Generate code for CORONA (lua) with physics". You may want to make this clear in your description.
Source code generation is the main reason I was ready to purchase it, it would make for a good way to learn Corona/Lua.

Your product looks very impressive. With me being new to this, help me think through the following. Since you are capable of writing this tool, would it be true that what LH generates is optimized to the greatest degree? Would you ever consider outputing Lua source code, which would give the programmer a way to optimize and tweak it themselves?

I am still playing with this, purchased both the spriteHelper, and the levelHelper. I'll say this though, right off the bat... these tools are class-acts. Not only are the prices very fair, but the presentation and use-ability are also great. Perhaps just, if not more important, I was pleased to find in the help menu that it takes you to a site where there are tutorials on use.

I noticed in a posting ahead it was mentioned whether it generates the code for you, or it does't. For me, it's not an issue. The grunt work that these programs take care of is what I care about. I'm happy to write my own code... frankly, I often don't use "generated" code from tools, as it doesn't usually meet a specific need for a project. Because things are tools, they are by definition, general. Code generated from tools, if any, is simply a starting point. I especially like that I can not only use them for Corona, but ALSO for Cocos2d, as I develop with both.

For me, these are really nice tools. The impression I get is that they are well supported and under constant development. Both great pluses. Being a long time programmer myself, I'm not looking to split hairs over nuances for products priced so fairly. If there are some rough spots, or what have you, I'm happy to ride it out. If they were $50 a piece... THEN I would expect perfection.

Personally, I'm very satisfied, and look forward to watching these tools evolve. Nothing but love for the programmer ;-)

Hey

So to make a further explanation.

In a level file generated by LevelHelper - the objects are saved in a way that LH understands. (you to if you look inside - as the file is very descriptive).
The code file - LevelHelperLoader.lua - is actually LUA/CORONA code. Whats going on there is that its reading the level file and translates everything in CORONA objects. So here you have functions that reads throw the level file and does this

-- object is circle
physics.addBody( sprite, physicType, { density = lhSprite["Density"], friction = lhSprite["Friction"], bounce = lhSprite["Restitution"], radius = size.width/2*scale.width, filter = collisionFilter } )

for example.

So this way - I only have a couple of functions that creates objects with some parameters that are read from a file.

If i were to create the objects writing code for every sprite you add in a level - this will be ok for 10 sprites - but when you add 100 - then... - good luck understanding something from that file.

So, basically, you can still learn from looking in the LevelHelperLoader.lua - how to create physic objects in CORONA, joints, and how to read files. Its a complex file, so i agree, its now easy to digest.

So, instead of doing this

physics.addBody(...
physics.addBody(...
physics.addBody(...
.........

it does this

for i = 1 in #objectReadFromFile do
physics.addBody(...
end

Don't you agree this is better ?

A better understanding will be to take the example project and look in the LevelHelperLoader.lua - right at the bottom - is the function that read the level file - and at the top - the function that iterates through what it was read and creates all the CORONA specific things.

Hope i made it a little clearer.

Kind regards,
Bogdan Vladu

Than you for the kind words gcc.programmer.
I constantly work on the tools - and update them regularly.
I know there are lots of features to add so I won't stop till I add them. I believe in a connection with every customer. Talking with you guys makes me understand what you need, how you use the tools and how I can make it better. So I listen to everything each and everyone of you is saying to make a better experience for everybody.

Kind regards,
Bogdan

Thank you once again for your reply. I guessed that was how the levelhelperloader file worked, hence you keep the source simple and just have it iterate through everything in the phosphate file. However can you give a breif explanation on what the director files is doing and what you meant by a group.
Thanks once again for your time.

Director file is actually not related to LevelHelper.
You can find out more on Director class here
http://developer.anscamobile.com/code/director-class-10
Ricardo Rauber developed this to help people make transition between scenes. Good job for the developer. Very nice work.
By a group i mean this
http://developer.anscamobile.com/content/group-display-objects
A special display object that holds other display objects - by moving this special display object - you move all other display objects that are inside of the group. I use a group in the moving cart (well - wood with two balls as wheels) example.

Hope that helps,
Bogdan

Thanks gcc.programmer, your points were very helpful. I also agree, with this price and the level of commitment by the developer, there isn't really an option of passing it up.

vladu.bogdan, thanks for your further explanation and your willingness to work diligently on this product. I look forward to it continued growth.

Thanks for clearing that issue up vladu.bogan. It makes me relieved to hear that I can just focus my efforts on the levelhelperloader file. I notice you call it a class, I was under the impression that Lua didn't really support object orientated programming and that I was going to have to use some odd method of nested functions just to get it to work. I was looking forward to trying the model view controller pattern, but now I am wondering if doing OOP is worth it for a smaller project like this.

On another note, I really do agree with the above, the pricing is brilliant, especially so with your continued dedication! It will cost me £7 to buy both levelhelper and the sprite software. I feel like I'm almost robbing you when the price of similar software, that actually does nothing but load a level is £40, down to £20 and I would still have to make my level in Tiled, which isn't really suited to curves! It's also just a bit more than the price of a foot long subway, yet it must have taken you far longer to produce.

Hey

Lua does not really support OOP but you can make it work - look at how i do it in LevelHelperLoader.lua

As for the price - i consider the products at the beginning of their life as so the price is what i consider ok for the features it gives. With every new version the price will rise. So people who are with me from the start are rewarded with a smaller price.

Kind regards,
Bogdan

I've updated the Director project with something that was asked by Astridax93 - how to make compound object to use in custom in game level editor.

I also want to point out that the example CORONA projects are done with LevelHelper 1.2 and so you will have to wait for Apple to release the update in order to see those files in LevelHelper and do what i do.

Kind regards,
Bogdan

Thank you very much Vladu. From your example, I easily replicated your code to create a third car! I originally was intending to create a PC program that would create the level in the phls file, but I recognised that your idea of having a level editor within the game is probably far easier. Now all I need to figure out is how to enable an already precompiled app to read a phls file so people can play user made levels.

Thanks once again for your help

views:2272 update:2012/1/3 13:02:13
corona forums © 2003-2011