Tuesday, 22 April 2008

Accepted!

Yay! Accepted! Posting here proposal of entity creator. It wasn’t so big from start—I’ve made many additions and corrections to it during application period.

I’m proposing to implement advanced entity creator in Ember client. It will consist of script functionality in entities and GUI that could be connected to properties and parameters. It will allow world authors to easier creation of new entities.
First part is script bindings. It introduce hooks (placeholders like $hook) to entity definition that are replaced with script output. It can be single (literal) value or atlas-tree represented by a lua object.
Second, it is an editor widget that has bindings between GUI adapters and script parameters controlled with a specific config. Also config defines bindings of script output to hooks or other scripts. Script input will also include whole entity atlas-tree.

To show how I envision its work, here is use cases:
1. Creation of single items (entities without minds). Some items can have many attributes and these attributes could have linked values (ex. mass/size/density) and some attributes are technical and could be set to constant or random values. For these objects proposed application will reduce overall number of properties that world author have to fill while creating.
2. Creation of NPC. Script can help to fill main part of mind (ex. to what neighbour NPC know). It can help to fill it's inventory. This will let author to concentrate on primary content – what NPC should do.
3. Creation of child objects at once with the parent. Examples: creating house with all contained objects, filling NPC inventory. First edition of editor would allow to create fixed set of contained objects returned from script. World editor that would allow to edit many objects at once with undo feature is out of scope of this program, I think.
4. Bringing variety to the game world. Some games (like Planeshift) have unpleasant look because they have completely identical objects like houses, people, items, etc. In current implementation it is possible to show or hide parts depending on parameters (like in mushroom model). Or may be some future feature will allow to vary texture/model.
Randomizing script could be added to parameters that are responsible for look of entity. This will add variety of created entities and save time for creating the world.
One more example is variation of contained objects when creating a house. This could be helpful when creating a village, for example.
5. Creation of big number almost identical entities. Currently it is possible to do it only with writing a python script. But with this tool it will be probably a bit easier. It can randomly distribute objects’ position, size and any other attributes. Example could be planting dark forest or making orcs army. As in 3rd use case, it would allow to create only some scripted set of objects.
6. Enhanced GUI adapters. Entity Editor could include some adapters that are not just simple controls. It could be, for example, tool that selects point on map or (if server would allow) drawing panel.

In all this cases proposed tool is letting world authors to concentrate on creation, not technical details of it. Also implementing it will open the way to other authoring tools, like advanced entity editor and also it could be extended to be a user tool in cases where user is allowed to create new object or edit somehow existing one.

Approximated plan of work:
Each step is supposed to take about a week. I’m planning to start some work before May 26.
0-1. Learn the problem in depth. Study needed internals. Probably, code some concepts. Decide on format of semi-atlas specification. Decide on format of binding between properties and adapters/scripts. Document these in wiki.
2-3. Make parser of semi-atlas specification and bindings (reuse existing code). Make script bindings. At first, make only inserting of simple values as properties in place of hooks. Second, start to making insertion of whole objects/xml tree.
3-4. Make advanced entity creation widget. Start to making preview. Look how to do pointer-to-terrain ray tracing.
5. Make all this work together and fixing bugs…
6. --- Mid-term evaluations: present some working code.
7. Enhance scripting possibilities. Finish insertion of whole objects. Next, implement library of useful functions that could be used in scripts.
8-9. Make more advanced controls available as GUI adapters. Make pointer-to-terrain ray tracing. Make easy position of new entity and in-place preview.
10. Improve overall usability of entity creator. Fix bugs.
11. Make some real entities/models with scripts as examples.
12. --- The last week is to finish the work.

No comments: