- Joined
- Aug 18, 2009
- Messages
- 4,097
I wonder how a good editor for wc3 could look like. The examples of most games in general sort it after physical layers (doodads, units, triggers, sounds, etc.). However, my development of things gave me the idea that it could make sense to work in user-defined scopes.
That means that you could set up a scope Spells\Fireball and save all associated resources within it like script code, dummy missile unit or imports. This way, everything would be well sorted and the working materials are nearby. If you want to delete the Fireball ability, you can do it all at once without forgetting something related. Also, in script code, you can use shortened names to call local resources. Even if you do not want to nest everything, it can be put on a low-level basic scope and then it would be just like the technical layer approach. Still, scoping simplifies moving and corresponds object oriented concepts. Referencing other resources should be highlighted and automatically updated when the target resource changes name/path.
So this concept should work for integral stuff like code and objects since they hardly influence each other and can be merged in the end. The order does not matter or script dependencies can be explicitely done like in vJass libraries at the moment or you sort them during compilation.
What I would not include in this however are terrain and global values like player configuration or gameplay constants. First has to be seen as a whole while developing and it's rarely bound to single features. I do not speak of preplaced widgets here that might be interlinked to code. Those can be put inside the scopes too. But sheer landscape or a global pathing map are less additive. Well okay, it can be done like in Photoshop or Gimp or Farcry but then we need a priority order and that may be done in a separate structure.
After the information has been gathered and unified, upon saving are they redirected to different tools the user would like. Often enough there is need for macroed objects like the method described here makes use of. Since those generated stuff is no explicit user input, it should not show up in the editor, which is why the transformed data should not replace it. Instead, there should be a separate working space the tools modify and the editor finalizes this data to create the playable map file. This is better than to transform the ending-reduced data and it ensures the right format/can give hints.
Generally, I asked myself what would be best to store the development file as and concluded that the interface could run with the normal w3m/w3x files but the dev information is stored inside another file with the same name/other extension in the same folder. This has the advantage that the user would get a playable file everytime without an extra finalization method and would not have to differ between them. Only when the map is moved you need to move the associated dev file along but this is easy to see with the same name. Storing the information directly within the map file as an import would not be senceful because the file size would explode and you do not want to accidentally distribute your dev data via BNet.
The development file is another file but for simplicity, everytime you save it, it builds the output playable file. There could be an import functionality that reads the data of a playable file to just have it all in an unsorted way but maybe this idea should be neglected in order to boost protection of foreign maps.
edit: More ideas:
As you browse through the objects in the treeView, an object inspector will reveal its properties like you know from normal object editor on a right side. But you can pull this window away from the treeView in order to isolate it. When you select another object now, the old window won't be replaced but create another window next to the treeView again instead. This enables editing multiple objects at the same time, so you do not have to switch everytime and search them in the list.
There are object types like units or abilities Wc3 has their idea of which properties they contain. Often enough you do not work with all of those fields though because some are unused in your project or you require additional attributes. That's why it seems to make sense to be able to alter the object definitions. The compiler is open-source or you can transform the data before in order to determine the final wc3 values from yours. You may even set up wholly new objects in order to differentiate between normal units and dummies for example.
That means that you could set up a scope Spells\Fireball and save all associated resources within it like script code, dummy missile unit or imports. This way, everything would be well sorted and the working materials are nearby. If you want to delete the Fireball ability, you can do it all at once without forgetting something related. Also, in script code, you can use shortened names to call local resources. Even if you do not want to nest everything, it can be put on a low-level basic scope and then it would be just like the technical layer approach. Still, scoping simplifies moving and corresponds object oriented concepts. Referencing other resources should be highlighted and automatically updated when the target resource changes name/path.
So this concept should work for integral stuff like code and objects since they hardly influence each other and can be merged in the end. The order does not matter or script dependencies can be explicitely done like in vJass libraries at the moment or you sort them during compilation.
What I would not include in this however are terrain and global values like player configuration or gameplay constants. First has to be seen as a whole while developing and it's rarely bound to single features. I do not speak of preplaced widgets here that might be interlinked to code. Those can be put inside the scopes too. But sheer landscape or a global pathing map are less additive. Well okay, it can be done like in Photoshop or Gimp or Farcry but then we need a priority order and that may be done in a separate structure.
After the information has been gathered and unified, upon saving are they redirected to different tools the user would like. Often enough there is need for macroed objects like the method described here makes use of. Since those generated stuff is no explicit user input, it should not show up in the editor, which is why the transformed data should not replace it. Instead, there should be a separate working space the tools modify and the editor finalizes this data to create the playable map file. This is better than to transform the ending-reduced data and it ensures the right format/can give hints.
The development file is another file but for simplicity, everytime you save it, it builds the output playable file. There could be an import functionality that reads the data of a playable file to just have it all in an unsorted way but maybe this idea should be neglected in order to boost protection of foreign maps.
edit: More ideas:
As you browse through the objects in the treeView, an object inspector will reveal its properties like you know from normal object editor on a right side. But you can pull this window away from the treeView in order to isolate it. When you select another object now, the old window won't be replaced but create another window next to the treeView again instead. This enables editing multiple objects at the same time, so you do not have to switch everytime and search them in the list.
There are object types like units or abilities Wc3 has their idea of which properties they contain. Often enough you do not work with all of those fields though because some are unused in your project or you require additional attributes. That's why it seems to make sense to be able to alter the object definitions. The compiler is open-source or you can transform the data before in order to determine the final wc3 values from yours. You may even set up wholly new objects in order to differentiate between normal units and dummies for example.
Last edited: