Well.. first of all I want to make it clear that I don't have a completely clear idea of the way it should be managed, I'm trying to figure what could be the best solution (not only for me of course) and trowing ideas as they come (ok, I apply some filter
)
I think I have to describe my idea a little better, I think this will answer a lot of you questions and break some of the assumptions you have done.
First of all I don't want a tool which edits muls. There are tons of tools which do that and some (especially yours) do their job quite well.
If you want to develop an all inclusive uo worldbuilding studio, then I think you should go to the next level. What is it? Well, stadard uo mul editing tools such as Dragon, Map Generator, Worldforge and so on just take data and convert them to muls or directly edit data in muls. I'd like your Suite (le'ts call it Punt's Suite
) to create a project file which contains data in a different way. map tiles and static items are sored in muls because the client needs to access them quickly and it only cares of their look and properties related to the game. But this data structures doesn't reflect exactly the design of a world. static0.mul has inside it trees randomly generated to create a forest together with the mighty tree of life which has been hand placed by a builder... there's too much precious data lost when you put stuff in muls!
Andhere comes my idea: let's have a world editing Suite with which one can create a world project. The world project will have various objects and builders will edit these objects. They won't edit muls! the generation of muls will be the final step. So, summerizing it... The chief builder creates a world project, then any number of builders (I'll discuss later how) edit this project and whenever the project reachs a new stage the chief builder generates the muls. If later something must be modified in the world, one opens the project again, edits it and at the end generates a new version of the muls. There shall never be direct muls editing, never.
Some examples of the power of such approach: I can define any number of random statics generation areas and give them a name. If randomly generate trees in a forest and I don't like the result I can regenerate them just hitting a button. And this can be done also if months have passed and someone built a new town on the map! Because no direct mul editing is done. The town has been added as a group of statics. It has its name in the project and it's placed in the mul every time the muls are generated. So I can have separate names for eah building and group them with a treen structure. I can lift a town which groups buildings and all building will be lifted and so on. I can open a window to edit a building static by static and then save it as a new building to be placed somewhere or replace it to the existing one.I can ask the suite not to show something, such as a building or the terrain map, the floors, the doors. I can say the project to show something but to exclude it from exportation in the mul when the muls are generated (useful for doors). I can set a plugin which, when I generate muls, says the server to generate dynamic doors for the doors I've set as dynamic. and so on, I think you got the picture.
Now, my only concerns are:
- it's a pretty complex project
- performance when trying to render in the Punt's Suite Client suc ha complex data structure: there's no more a plain collection of static items, but a lot of data listed with criterias which have nothing to do with coordinates.
The second important subject is: we want more than one builder to be able to edit the world project. Were is the project? who can build it? How do the handle concurrent editing?
First of all I think the project file should stay in a single place. the single builder might have the data about some buildings and such, but the whole project should stay inly in one place. There should be a Punt's Suite Server which is an executable separated from Punt's Suite Client. It's the only one who generates a project and modifies it. The clients only send requests to him and he processed them. But this does not prevent a Client from having offline editing capabilities because the client can request the sever to send back some of the project data: the whole map, a section of the map, a building, a group of builings and so on... What's cool is that the server could deny access to the requested data! In fact there should be a way to grant permissions to download and to edit project objects. And there should be also the ability to grant editing permissions in a portion ofthe map (useful if one wants to teach a new builder how to use the Suite and test his skills ans reliability before granting him access to the whole project or to some other portion of it)
Finally, there's the problem of clients refresh. Indeed one can edit a huge amount of data in few seconds, for example one could lift the whole world (map, buildings, random statics, everything...). Propagating all the data in realtime would freeze the clients. I'd probably go for an hybrid solution: client are informed realtime of which map coordinates have changed. A map coordinate changes when a map tile or static object inside it has changed in any way. Then the client takes his time to receive the detailed update. During the time in which the client knows the coordinate has changed but does not know how, thos coordinates need to be shown with some proper visual effect and editing by the client is locked untill the details of the update have been received. Just an idea, but it might work
Ok, now it's time to answering your questions punt:
1. Yes, this is indeed a nice feature. but it's important it's a feature and not a limitation, so I should be able to lock a section of the map, but not obliged to do so. This means the way the server manages data and synchronization should not rely on this locking possibility
2. Do you mean something like Bob drags a wall and Alice sees the wall shifting in realtime? I don't think it would be something to spend time on
3. Not sure what do you mean here. Maybe the answer n.4 covers this too?
4. there should be separate undos. One is a client undo which undos what has been done clientside (for example when you are editing a building offlien to later send it), the other is a server undo which undos the commands sent to the server
5. I think the best solution is to have a master server, which is an executable separated from the client. It's the one who keeps track of clients connections, which does authentication, which receives alterations requests and sends the result to all the connected clients.
6. Nice question. See the above hybrid idea about client data refreshing
7. offline editing and later synch is a nice plus indeed, I'd love it. See above when I say that centralized project does not necessarilty mean the client can't download, edit and submit
8. structures as well, otherwise it will never be a all in one studio. But this does not mean, as above stated, that I want a direct statics editing
Now, more features coming to my mind:
1) In uo client it's easy to show something to another builder because speech and the character helps. But Punt's Suite Client does not a character and does not need speech inside the viewspace. You may add commands to send speech to other Punt's Suite Clients connected to the server, but ICQ/MSN/SYPE/whatever can help so it's not foundamental. What iss foundamental is a way to show a static object or a map tile, a way to say "this one", and I suggest some visual effect associated to some "show" (in command line terms) command, which lets the builder select something to which apply the visual effect for all connected clients which are viewing what has been selected
2) clipping is needed as well as view toggle by types (doors, floors, roofs, walls and such) is needed
3) view toggle by static id is a must
4) view toggle for map is a must
5) I'd like to have the ability lo load some text file which defines static items with some structure to be added. This is very useful if one wants to integrate the suite with some ingame building system (of course emu scripts are up to the user)
I hope all this makes sense and my mad ideas don't bother you