It's the lean set of outputs I was asking about. Saying that someone would be able to make the game display in 3D would require a bit of work somewhere, depending on what you intend as the field of view. Would the client ask for all the things in a given rectangle? Where is the control on how much is sent (there can be hundreds of thousands of objects in the rectangle)? I suppose the client could also send in an item cap or something like that. Seems like it would be quite a bit of work on my part, and that I'd also essentially be in the position of supporting 3rd party app performance. It could also just pass across a pointer to the object list and let them do all the culling, but then I'd have to publish all my object definitions, which I'm somewhat leary of, and I'd also have to maintain and update and explain that information constantly, which is a lot more work for me. Or I'd have to set up a second object list with less information that gets sent across? In which case the performance of DF in general decreases as this new data structure is maintained. Or perhaps there's something else.<P>Regarding the DLL, I don't quite understand that either. I know they were just examples, but when would the game engine ever use the dll to call something like drawDwarf? I thought the engine wasn't in charge of that. Does the game engine do more work with drawing game objects than reporting information about their type and location? I thought the client would take the location/type information and do whatever drawing it wanted to do independent of the engine. Or maybe drawDwarf was a name for the location/type report? I guess it couldn't be drawDwarf, because dwarves don't exist outside the raws, so it would have to be something fairly general, and some of the issues raised above come up again.
I think taking a look at Blizzards WoW client interface might help, especially concerns about losing control of the project or being asked to support someone else's. As long as you maintained the vanilla ascii interface, other people's would be no more your responsibility than the graphics sets or raws are now.
For DLLs (You can do something similar with Vanilla C), you don't expose the code, only a small set of functions.
At a broad overview, if I were going to write a 3rd party interface, I'd want :
What's in this square? (would only return what the player could see)
Take a turn. (Do everything you currently do on a turn)
Get events ( Basically anything that you might want to pause on or display)
Actions (Rather than the current menu system, you'd have a 'build' command with parameters)
Build
DwarfChanges (Create a public 'Dwarf' labour object that would turn stuff on and off)
DesignateSquare (Force the UI to call once for every square. This would allows stamps)
Queue Workshop
GetInfo
GetLog
GetStocks(Filter) *UI could then do all the work only displaying the right things
etc. (Note that this enables a separate window that does nothing but display your seeds!)
At the office, we do this (completely separate UI from business logic) whereever possible for the same reasons. The smart guy can do the advanced work, while the new guys can make the simple interface changes without having to worry about them making million dollar errors.
Personally, I would think that it's good OOP practice to do something like this for your own sanity, even if you never let other people write the interfaces.