So, I've wanted to implement this idea for a while now, but only just recently actually started to do it. A module builder of sorts, that creates semi-unique areas by letting the user piece together areas that already exist in game to create their own layouts. This will allow everyone, including those without the slightest modding experience do design a layout of an area and export it to the game in a matter minutes. There is still a lot of work to be done but the basics of placing rooms, snapping them together and exporting the corresponding MDL/MDX/LYT is implemented.
Here is an example of the program in its current state in action:
Ultimately the goal would be to have most existing interior areas in both KotOR and TSL to be implemented into this. A list of areas include:
- Sith Base
- Black Vulkar and Hidden Bek bases
- Undercity Sewers
- Devik's Estate
- Sandral Estate/Khoonda
- Dantooine Academy and its Sublevels
- Korriban Academy/Tombs
- Endar Spire/Harbinger
- Telos Residential Area
- Telos Military Base
- Telos Academy
- Nar Shadaa
- Iziz Palace
- Trayus Academy
- Hrakert Station
And of course there is always the possibly of custom user-made content. The main issue is that settings up the rooms for use does take time, so depending on interest I might not do all of them. Currently I have been using the Sith Base as you can see from the screenshots above. The biggest issue is none of the rooms in the game follow a specific size convention, so in most cases, if you try set up a module that has a circuit, It probably won't align properly.
Features that I plan on implementing include:
- Exporting with doors. Have each door frame have a door and doors which don't go anywhere should be unselectable.
- Exporting a minimap. This would include settings up the appropriate values in an .ifo file so there is zero setup required.
- Export as a MOD file, so no setup required to get them to run in game.
- Export textures/lightmaps with a custom prefix to allow user's to easily retexture areas that won't interfere with other existing modules.
- Export any area as K1 or TSL models.
- Allow the user to set up rooms to transitions to other modules.
- Some kind of intuitive and simple UI that allows players to configure the VIS file.
- More as I go a long.
This development of course has not gone smoothly, here is a list of frustrations I noted down if you an be bothered to read them:
- Both the MDL and WOK files contain the walkmesh data, which seems redundant. The MDL walkmesh handles grass and camera-blocking whereas the WOK walkmesh handles actual movement and pathfinding. AFIAK both share identical geometry. I imagine this is because of certain precomputed values stored in it that change when the model shifts?
- The WOK ignores the position of the room in the LYT. Changing the coordinates in the LYT will shift the MDL but not the WOK. So this means the vertices in the WOK need to be manually shifted. Because of this, bounding boxes on the AABB need to be moved and face normals need to be updated. Some values which im not even sure what they are may need to be changed as well (place distances/most significant plane)?
- The LYT lacks any rotation property for room entries.
- The orientation property in the node header for MDLs doesn't do anything, even when controllers aren't present, so I'm not sure why this exists. Maybe a remnant from NWN format or the console version?
- The root node in MDL doesn't come with any controllers at all, I should probably check if MDLEdit is capable of this if the ascii file is modified correctly. My work around to this is to child a dummy node onto the root and have that node parent everything else. I use this node to rotate the entire model.
- Rooms either come with a full doorframe, or none at all, meaning I have to edit each room to have half-doorframes to make them universally compatible with all the other rooms of the same door type. More of an inconvenience than anything else really.
- In order two connect rooms, the geometric edge on both rooms as to 'point' to the other room's index in the LYT file. This means I have to use a combination of KAurora and MDLEdit to figure out the index of the edge that my program has to edit on export. Its an very tiresome task.
- There is some bug in KotORBlender that if I export an MDL then delete one of the objects, then export it again an error occurs because the object is missing. Sigh. Of course its missing, I deleted it. A quick work around is just to copy all the model into a new .blend file and export that instead.
This tool is not intended to be a full fledged module editor but mainly for building an area which can be edited using some other tool. That said it will be incorporated with my All-in-one toolset (WIP) but I will most release a stand alone as well. I'm also open to name suggestions if anyone.
I do also want to try create a terrain editor as well. This hypothetical tool (exteriors) would compliment the one I just talked about (interiors). I'd imagine it would have some kind of "cliffs" ability that would mimic the walls that shape modules the same of what you see on the surfaces Dantooine/Dxun/Telos. You would further be able to detail the landscape with objects such as trees/rocks. It would be technical challenge, but I'm definitely going to take a stab at it.
For now, that about covers it all.