In Game Editor vs Separate Editor

Started by
14 comments, last by aeroz 14 years, 1 month ago
Hello guys I'm developing a kind of jump and run game and there should be an editor for creating levels. I'm questioning myself whether an "in game" editor is better than a separate application or vice versa. By "in game" I mean an editor that you can access from the game's main menu. It has the custom GUI of the game. Example of in game editor: Age of Empires. By "separate" I mean an editor that is in a separate executable. The editor would probably use the standard GUI from the OS. Example of separate editor: Warcraft III. Currently I have a simple editor in the game itself. But it's very simple for now. My subsystems should be reusable for a separate editor if I want to create one. I really can't find a key argument for using one type of editor instead of the other. My requirements on the editor is that it has multiple "windows" for selecting entities from a list, selecting textures, editing objects, creating triggers and objectives. The only pros and cons I can find for each editor type are: In game editor:
  • (+) Easy access in the game menu
  • (+) One single "package" instead of multiple programs
  • (-) Needs programming of custom GUI
  • (-) Multiple windows can be confusing
Separate editor:
  • (+) Clean look (maybe my personal taste)
  • (+) Can easily be used parallel to other programs (e.g. Internet browser) since not fullscreen
  • (-) Need to load up the whole game for testing a level
But I think that none of this points is very important. Is the whole think only personal taste? Which kind of editor would you prefer in your favorite game? Can you point out some other arguments in favor and against each sort of editor? Still a few points that are probably of importance: 1. My game is cross platform (GNU/Linux and Windows so far). So using the Win API directly is not a solution. 2. I have no (good) GUI implemented yet in the game. I'll use something like CEGUI or guichan for the game GUI. Maybe this is good/bad for an editor. 3. I'm thinking about using some scripting languages like Python for the editor (for writing the editor itself, but maybe also for using in levels), but that would probably not work because the game framework is written in C++ Thanks for the help! aeroz
Advertisement
My editor is purely internal so I dont limit myself to APIs and platforms based on my game being cross platform. The advantage of this is that i get to use WPF and C# which imo is the current leader in GUI contstruction. I picked up expression blend 3 over the weekend and although the learning curve is really high, it is pretty awesome what you can do.

So as you can see i went the "separate" way. It keeps the main program lightweight and only includes in your main.exe WHAT YOU NEED. Also, it allows you to make things modular, building a level from pieces as opposed to having all your pieces loaded in your engine and constructing a level from everything.

And like i said above... i dont know about you but my game engine is nowhere NEAR as robust as WPF and C#, and it shouldnt be, its a game engine.

------------------------------

redwoodpixel.com

I personally prefer separate editors. I've never tried to create one myself, but I have used many - I'm an avid mapmaker for many games.

I think the most important thing to have in an editor that is kept separate from the main game is a quick testing environment - a scaled down version of the actual game that can be quickly executed to take a look at a map in progress. If the game itself does not take long to boot up, then it won't need to be scaled down. The key is speedily switching between the two, as when I'm putting the final touches on a map or scenario I might need to rapidly try many variations of the same map.

I Create Games to Help Tell Stories

I'm a fan of in-game editors, but that might be because I somewhat enjoy making a custom GUI.

If you use a separate editor, one trick that you can use to improve the experience is live asset reloading. In the game, you write some code that constantly checks the modified-time of the level file. (this code gets disabled in the final production version) If the modified-time ever changes, you reload the whole level. Then when editing, you run the game and the editor simultaneously. Every time you save something in your editor, the game will pick it up and start showing you the new version instantly. So you get the best of both worlds.

That's easier said than done; it can take some work to make the game engine support quick level reloading. But if you can support it, it's a pretty fun way to work.
IMO in-game is only worth it if you want it to be usable by your end-users, and even then it still probably only makes sense if you're targeting consoles. Making a good enough GUI for an editor is a tremendous task, and one that's easily underestimated. The moment you say "hey I want to browse for a file" and realize that you can't use GetOpenFileName, it dawns on you.

Also with regards to "Need to load up the whole game for testing a level"...that's certainly not true. If you have your editor use your engine + renderer for drawing (which you should), it's not that hard to take it all way and allow in-editor playtest. This really gives you the best of both worlds.

[Edited by - MJP on March 3, 2010 4:04:08 PM]
I'm actually playing around with a game with a map editor now, I'm doing it in C#/XNA and the way I have it set up is in 3 projects:

Game (XNA Project)
SharedLogic (XNA Library)
MapEditor (XNA Project / C# Windows Forms Application)

MapEditor and Game share classes such as the map and camera from SharedLogic, making them seperate executables but having the exact same display methods of the game world. MapEditor is actually an XNA project due to the hackiness I went through to get an XNA window inside a windows form panel. It really works quite well and removes the need to create a custom GUI system.

Thought this might give you some ideas for your own. :)
I started off doing a separate editor in wxWidgets, but I ended up scrapping it and going for an in-game one. I was using CEGUI for my in-game GUI anyway (it's an RTS so it's got fairly complex GUI requirements already), and I didn't think it was worth it to go to the effort of learning CEGUI and wxWidgets in-depth.

At the end of the day, though, I'm not really sure if it was the best idea... I've thought about going back to wxWidgets many times. CEGUI is nice and powerful and all, but MJP certainly has a point about the "GetOpenFileName" stuff... I had to write a file browser from scratch! (and it still sucks compared to the built-in one with it's nice keyboard shortcuts and so on). Obviously it's more than just that as well, but a nice GUI designer wouldn't go astray (the on that CEGUI has is pretty horrible).
Hi, thanks for the replies! A few comments on your replies:

Quote:by AverageJoeSSU
My editor is purely internal so I dont limit myself to APIs and platforms based on my game being cross platform. The advantage of this is that i get to use WPF and C# which imo is the current leader in GUI contstruction. I picked up expression blend 3 over the weekend and although the learning curve is really high, it is pretty awesome what you can do.
I have never used WPF but it seems to be very Windows specific (you say your game is cross platform??).
Quote:by AverageJoeSSU
So as you can see i went the "separate" way.
First you say internal and then you say separate, what is it exactly? Sorry, maybe it is just my bad English that makes me not understand.

Quote:by Telcontar
I personally prefer separate editors
Quote:by pinacolada
I'm a fan of in-game editors
Sounds like it's really personal choice...

Quote:by pinacolada
(...) but that might be because I somewhat enjoy making a custom GUI.
So you actually prefer in-game editors just because of the development process or also do you like it as end user?

@Codeka: your two approaches of making the editor are basically the same as mine.

This options are currently on my list:
- Separate editor application made with wxWidgets
- In-game editor with CEGUI as GUI
- In-game editor with guichan as GUI
Which one of those can you recommend me? (Note: I have never used these GUI libraries before, just a bit o wxPython)

Thanks again!
This is a tough call, this question. I always seem to decide at the start of a project to go in-game in order to streamline asset creation, then end up going external in order to take weight off the actual game.

The nice thing about external is that you can bodge any old rubbish together as an editor for just you to use until such time as the game is playable, then you can start to put a more usable editor together.

User generated content should, to my mind, be a key consideration of most indie projects at the moment. But not until the project is mature enough to be released in some demo form and has an existing base of interested users.

However, I recently decided I was at the point where I could invest some time in a better editor for my game. That was about two months ago and I've done precisely NO work on my actual game since.

Maybe we should be writing the game in-editor? [smile]
Well, as I said, I ended up going the in-game editor with CEGUI route, but I've kind of regretted it. CEGUI is great and it's very powerful, but there's stuff that a native GUI simply does much better.

For example, you can't do keyboard shortcuts in CEGUI (well, you can do it "manually", but there's nothing in CEGUI itself that'll do it). Also, tabbing: you basically need to implement tabbing yourself (I wrote a wrapper class that I "attach" to controls on my windows that subscribed to the "KeyUp" event, looking for the tab key and setting focus to the next control in the list).

These may not sound like much, but when you're writing an editor, it's very important that your designers can be as efficient as possible. If you can save 10 seconds for every five minutes they're using your editor, that's 15 minutes a day!

So yeah, I'd probably recommend the wxWidgets route now.

This topic is closed to new replies.

Advertisement