DarthParametric

Modders
  • Content Count

    4,567
  • Joined

  • Last visited

  • Days Won

    514

Everything posted by DarthParametric

  1. Using the Workshop is a very bad idea™. If you must do it, then preferably only use TSLRCM and then manually install any other mods over the top of its Workshop folder. But the Aspyr version isn't worth using at all anyway, since all it really does it add a bunch of extra bugs. If you have multiple different Workshop mods then you are going to run into all sorts of grief. But for the purposes of testing, your 2DA needs to go into the Workshop folder of the most recently installed mod. You can see the mod's ID from its Workshop page URL.
  2. Depends. Are you using the Steam version with Workshop mods installed?
  3. Given the usual quality of said input, he was probably at that stage about a decade ago.
  4. Poorly probably. Odyssey's envmap system is terrible. Things could have been so much better if they had implemented spec maps.
  5. There's zero difference in how both games work in that regard. A model with no appearance texture overrides will display whatever is set in the model. There are no practical limitations beyond one texture per mesh. However, what is specified on the model will be overriden by a racetex in appearance.2da, if one is specified. That's how the vanilla HK models work. It's a single shared model that has three separate race textures. TSL strips textures off the model altogether due to an engine issue with TXI clashes with instanced models. Just change it from this: label race racetex 3 Party_NPC_HK47 P_HK47 P_HK47_01 538 Droid_NPC_hk50 P_HK47 C_HK50 539 Droid_NPC_hk51 P_HK47 C_HK51 to this: label race racetex 3 Party_NPC_HK47 ExSel_HK47 **** 538 Droid_NPC_hk50 ExSel_HK50 **** 539 Droid_NPC_hk51 ExSel_HK51 **** N.B. Extraneous columns omitted for brevity, substitute in your own model names.
  6. You don't need to do that. Just export three separate models, one for 47, one for 50, one for 51. Then remove the racetex from their appearance rows and switch the race to your custom models.
  7. Failing all else, read the manual. Per the readme: SithCodec comes with batch files that are set up with commands for some common operations. decode.bat This file will decode all files located in a folder called "in" (no matter what their format) and save the new files in a folder called "decoded". Put the VO in the IN folder, double click decode.bat, find the converted files in the DECODED folder.
  8. Do you want voice over audio, or dialogue text? The former is in streamwaves for K1 and StreamVoice for TSL, categorised into subfolders first by module and then by a DLG-specific identifier (except for global stuff like Huttese). The audio is stored as MP3, renamed to WAV with a fake WAV header. You want to use SithCodec to convert them to something most audio players will accept. The latter is contained in dialog.tlk for both games, along with all other text in the game. Each DLG will identify a given line by its TLK StrRef.
  9. Obviously the Switch edition of the game doesn't use the same folder/file structure as the PC version. I gather anything beyond the simplest of mods is going to require a separate Switch-specific version. Edit: Ah, here you go. Download and install this first - https://deadlystream.com/files/file/2102-kotor-switch-modding-framework/ - then you should be able to install PC mods correctly. Edit 2: Actually no that just adds empty folders. Mods injecting LIP files don't include the MOD because the PC version of the game has them. Still seems to me like you'd need a custom Switch version of a mod to work 100% correctly. Although note that missing LIPs will just prevent lips flapping during dialogue, it won't actually break anything.
  10. Based on a similar comment you just made on a different mod, I'm guessing you are trying to install this on a non-PC version of the game?
  11. Just gave it a quick test with a save from the previous version and a test bake ran fine after rebuilding. You might want to add a note to the description about the button being in the OdysseyBase's properties. On a different note, how do you get KBlender to load in a layout's diffuse textures and display them in the viewport? Seems that it doesn't use the Textures directory specified in the Blender preferences.
  12. As should be evident from the version number, it will be a new version (1.10.0), not a hotfix to the current version (1.9.x). It's highly unlikely to release this year.
  13. Yeah I was aware of that, although not that it could resize them. Interesting. Something on my end presumably, but I have no idea what. Haven't encountered it with 3.2 yet. I wasn't using that previously because I wasn't aware that KB was compatible with it.
  14. OK 2.93 didn't seem to be doing anything, just stuck there Not Responding with 0 CPU use. I tried 3.2 and that seems to have successfully completed. Not sure if that is anything to do with KB, or just another manifestation of the lockup issues I described with 2.93 in previous posts. Are you able to specify the output resolution of the bakes anywhere? Seems like it is fixed at 512x512?
  15. Ah ok. I tried it with a freshly imported LYT and got this error: Python: Traceback (most recent call last): File "D:\Blender\2.93.9\2.93\scripts\addons\kotorblender\ops\bakelightmaps.py", line 53, in execute bpy.ops.object.bake( File "D:\Blender\2.93.9\2.93\scripts\modules\bpy\ops.py", line 132, in __call__ ret = _op_call(self.idname_py(), None, kw) TypeError: Converting py args to operator properties: : keyword "margin_type" unrecognized location: <unknown location>:-1 Error: Python: Traceback (most recent call last): File "D:\Blender\2.93.9\2.93\scripts\addons\kotorblender\ops\bakelightmaps.py", line 53, in execute bpy.ops.object.bake( File "D:\Blender\2.93.9\2.93\scripts\modules\bpy\ops.py", line 132, in __call__ ret = _op_call(self.idname_py(), None, kw) TypeError: Converting py args to operator properties: : keyword "margin_type" unrecognized location: <unknown location>:-1
  16. So is the "Object '{}' material does not contain diffuse by lightmap node" error complaining about lacking a link to a physical file?
  17. Well it's a good example for why you should always use unique tags, at least for anything plot-critical. There are a few vanilla examples where they have to tie themselves in knots to nail down a specific object like a door because there are half a dozen other objects in the level with the same tag. It's no doubt why functions like GetNearestObjectByTag exist. But then again they do rely on duplicate tags quite a bit to handle things like animating placeables, dealing with trash mobs, etc.
  18. I would imagine the first time in a module should be the spawn order, subsequent visits should be based on the stored GIT order. Edit: That was kind of poorly worded. It's still spawn order in both cases, it's just that the starting module GIT ordering is not retained in the game save GIT. So the real question is "how does the engine decide the struct order when creating a GIT?".
  19. Nah, as I said a few posts back, new UVs aren't practical. The original script does actually auto-UV if the mesh lacks a second UV set, but I stripped that out. I could create new atlas'd UVs far more easily in Max if it came to that. So batch baking was all I was interested in. After playing around with the script a bit, one thing I discovered is that the baked maps are very washed out. Seems like it applies a pure white material to the mesh first, which is screwing with things.
  20. The problem with KMax is that OdysseyLight radii are all ginormous, so if you try using those you typically just end up with overblown whiteout. My understanding was that KBlender had addressed this, so I was hoping that it would allow for less work. Of course in a lot of cases - like pretty much every single interior module - there's really no option but to create all new lights from scratch, since the in-game lights don't match the baked lighting. If I am forced to go that route then yeah I'll just do it in Max. See for example some of my Ebon Hawk lightmapping experiments. But I thought maybe exterior modules might be doable in KBlender. But not if you can't easily batch bake the maps. Edit: Interesting. I found a batch baking script that sort of works, after a bit of editing on my part. The only problem is that it seems to regularly cause Blender to eventually lock up and become unresponsive at some random point in the process, although I did manage to get it to successfully complete a full run through a level of around 60 meshes twice. Original script here. Modified script: blender-bake-lightmaps.py Not sure if that is of any interest to you @seedhartha. Edit 2: Seems the lockup problems aren't the script, it's Blender not liking something about my system.
  21. It's a gazillion times easier than Blender's approach to things certainly, but the results aren't exactly stellar. I've discussed the issues with KMax's OdysseyLight implementation with seedhartha previously and I was lead to believe that KBlender deals with them differently. I figured there was no harm (except loss of sanity points) in seeing what sort of lightmaps Blender could spit out.
  22. Is that a limitation of Blender or just because of dealing with Odyssey models? I stumbled across this - https://github.com/Naxela/The_Lightmapper - although it seems heavily focused on creating lightmap UVs, which isn't my primary concern. As terrible as the vanilla lightmap UVs are, I'd prefer not to have to replace hundreds of room models.
  23. Is there a way to batch lightmap an entire level in one go? The described process of doing each individual mesh one at a time is not particularly practical given the sheer volume of meshes in an average level.
  24. It's not accounted for in the current version, but I have plans for an update that will add a starting cutscene for Canderous when he is the chosen jail breaker (since he's the only one that lacks one), and in that he will automatically re-equip his gear, just like now happens for the PC (and Bastila/Carth) at the end of the escape. I'm still working on the stunt animation at the moment. I may have to add an additional sequence to the end because the collision around the beds is too excessive to allow regular scripted anims to work as intended (a character can't get close enough to the bed). Either that or I need to adjust the walkmesh. I'm taking a break from it for a while to work on some K1CP additions, but here's a couple of snapshots of the WIP:
  25. The vanilla game setup is as follows. The exit node of the pre-Leviathan cutscene on the Hawk starts the Prison Block module with a waypoint in the torture room as the custom destination. When loading that module, the player is inside a trigger, which has the escape setup script as its OnEnter. This script spawns a force cage on top of the player, then gives the player a safety jump back to the waypoint in case they got displaced by the cage it seems. The end of that script starts the cutscene of the three troopers discussing the chosen jail breaker. Later on, when the jail breaker opens the doors and control is switched back to the player character, the PC is spawned at the destination waypoint near the door, where they were supposed to run to from their cage (like Bastila and Carth do). During the development of the mod, I moved the PC's starting point back inside their force cage and quickly discovered a collision problem. It seems that placeables that are spawned via script do not rotate the PWK to match the rotation of the parent placeable. Which is a pretty big problem if the PWK is non-symmetrical. It appears that Bioware, rather than fixing the underlying issue, just didn't bother putting the player back in their cage. After a lot of messing about, I ended up adding the player's cage to the GIT, so the initial setup script was changed to remove the (now unnecessary) spawning of the cage. I didn't encounter any errors with the player not starting the module correctly, so I'm not exactly sure what the vanilla setup was in aid of. Maybe it was some issue on the Xbox that forced that approach, or maybe it was a legacy of the original boarding sequence scene that was cut. Although either way I still see no reason to have spawned the cage via script. The vanilla script cannot be decompiled by DeNCS, but you can have a look at k_plev_escsetup_ATTEMPTED_RECONSTRUCTION.nss in the SOURCE folder for my interpretation of it based on the bytecode. What I probably should have done is just nixed the trigger setup altogether and moved everything into the module OnEnter. But by the time I actually figured out what the hell was going on under the hood with the spawned placeable I had been working on the mod for 3 or 4 weeks and was kind of sick of the whole thing and just wanted to get it out the door. Plus more radical changes would potentially raise additional potential compatibility issues. At some nebulous point in the future I may add my own boarding sequence, at which point I would definitely rework the entire initial setup. And yes, if you are using anything from K1R then it's likely got a whole bunch of incompatibilities.