seedhartha

Members
  • Content Count

    35
  • Joined

  • Last visited

  • Days Won

    4

Everything posted by seedhartha

  1. That is the most voted option so far, followed by feature-parity with vanilla (i.e. no alterations, until it is finished, haha). I'm surprised more people hadn't vote for co-op multiplayer. Starting that poll was a good idea - I'll make sure to adjust project priorities accordingly. Regarding real-time combat: it is going to be tricky due to how KotOR systems (e.g. d20 and animations) are orchestrated for turn-based combat: feats, Force Powers, damage calculation - everything is tied to these 3-second combat rounds. We're looking at some major balance-breaking changes, unless we find a good enough compromise (any ideas?).
  2. View File LIP Composer Python script I wrote to automate generating LIP files from text. It works by converting entered text to CMU phonemes using CMU pronouncing dictionary, and then converting CMU phonemes to KotOR phonemes. Keyframe times are linearly interpolated between 0.0 and entered sound length. When a word is not present in CMU dictionary, it will be converted to phonemes letter by letter. Requirements: Python 3 reone-tools 0.18 Usage: Determine the length of your sound file Edit tools_dir variable in compose_lip.py to point to reone-tools installation directory Execute the script from the command line, enter text and sound length when asked: `python compose_lip.py` output.lip is your generated LIP file - output.lip.json is its JSON representation Tweaking: Add words that were not recognized to cmudict-0.7b.txt Edit output.lip.json, compile using reone-tools: `reone-tools --to-lip output.lip.json` List of KotOR phonemes (aka shapes): 0 - EE 1 - EH 2 - SCHWA 3 - AH 4 - OH 5 - OOH 6 - Y 7 - S/TS 8 - F/V 9 - N/NG 10 - TH 11 - M/P/B 12 - T/D 13 - J/SH 14 - L/R 15 - K/G Submitter seedhartha Submitted 04/22/2021 Category Modding Tools  
  3. Version 0.18-git

    6 downloads

    Python script I wrote to automate generating LIP files from text. It works by converting entered text to CMU phonemes using CMU pronouncing dictionary, and then converting CMU phonemes to KotOR phonemes. Keyframe times are linearly interpolated between 0.0 and entered sound length. When a word is not present in CMU dictionary, it will be converted to phonemes letter by letter. Requirements: Python 3 reone-tools 0.18 Usage: Determine the length of your sound file Edit tools_dir variable in compose_lip.py to point to reone-tools installation directory Execute the script from the command line, enter text and sound length when asked: `python compose_lip.py` output.lip is your generated LIP file - output.lip.json is its JSON representation Tweaking: Add words that were not recognized to cmudict-0.7b.txt Edit output.lip.json, compile using reone-tools: `reone-tools --to-lip output.lip.json` List of KotOR phonemes (aka shapes): 0 - EE 1 - EH 2 - SCHWA 3 - AH 4 - OH 5 - OOH 6 - Y 7 - S/TS 8 - F/V 9 - N/NG 10 - TH 11 - M/P/B 12 - T/D 13 - J/SH 14 - L/R 15 - K/G
  4. Made a poll on /r/kotor regarding the future on reone. Feel free to chime in.
  5. It's doable in KotorBlender (I've tested editing supermodel animations not long ago). You'd have to determine the frame range of both animations, and manually copy position and orientation keyframes from one model into another, probably one object at a time (I don't believe this process is currently automated). Altough, if K1 and K2 models do indeed have different bone structures, then you're out of luck with this method.
  6. Thanks! That was to be expected, I suppose, since I do all my development and testing using a vanilla English version of KotOR. I've added this issue to the roadmap - will make sure to look into it.
  7. To give you an idea, here's what I managed so far. This really isn't the best example, and @lachjames got a lot further than that. These models were both trained for 10,000 iterations (around 1 hour of fine-tuning, after which the validation loss plateaus) using a method I described on my wiki page. Just to make it perfectly clear, this is not the project I'm actively working on, but rather a discovery I wanted to share, and a guide on how to get similar results. atton_as_canderous.mp3 bastila_as_kreia.mp3
  8. Yes, we are in close contact with @lachjames on the matter. I'm curious, what are these extra materials you're talking about? My primary source is TLK and DLG files, and I have sufficient tooling to extract this data.
  9. Hello, I have recently discovered this video, which got me interested in a field of speech synthesis. I have researched this subject and, as it turns out, today technology is quite capable of producing semi-realistic speech, which, I believe, is more than good enough for modders to do voice-overs. I was able to replicate results shown in this video, and while at it, made some Python scripts and sort of a guide on how to train a model on Bastila's (or any other character's) voice. Here's the link: https://github.com/seedhartha/reone/wiki/TTS-Research Training an AI model is a tedious and error-prone process, but this step can be avoided altogether if you use a pre-trained model. I'm not sure I want to make my models public due to legal concerns, but contact me if you're interested in the topic (i.e. you need a voice-over for your mod), and we can work something out.
  10. Status update: I'm releasing version 2.0.0, which is the first non-beta version of the updated add-on. I've tested it on quite a few models, doing modelling, texturing, rigging, animation, etc. I think KotorBlender is now on par with KotorMax in terms of functionality: it works equally well for editing (and creating) character and area models, and I'm quite happy with the result. Here's the excerpt from the release changelog: Rewritten handling of materials and lights (Eevee) Made materials configurable from Object Properties Implemented import & export of LYT files Implemented import & export of ASCII PTH files (reone-tools) Implemented armature creation (no animations yet) Fixed MDLedit compatibility issues Removed NWN-specific functionality Disabled minimap rendering (until later) Code cleanup and refactoring in accordance with Blender and Python code styles
  11. View File reone-tools Tools executable from the reone project. Features: Inspect and extract BIF, ERF and RIM archives Convert 2DA, GFF, TLK and LIP files to JSON Convert JSON files to 2DA, GFF, TLK and LIP Convert TPC images to TGA/TXI Unwrap audio files (WAV and MP3) Create RIM, ERF and MOD archives from directories Convert binary PTH to ASCII PTH and vice versa (KotorBlender) Refer to this Wiki page for usage instructions. Submitter seedhartha Submitted 04/01/2021 Category Modding Tools  
  12. Version 0.18-git

    8 downloads

    Tools executable from the reone project. Features: Inspect and extract BIF, ERF and RIM archives Convert 2DA, GFF, TLK and LIP files to JSON Convert JSON files to 2DA, GFF, TLK and LIP Convert TPC images to TGA/TXI Unwrap audio files (WAV and MP3) Create RIM, ERF and MOD archives from directories Convert binary PTH to ASCII PTH and vice versa (KotorBlender) Refer to this Wiki page for usage instructions.
  13. Status update: I've done a couple of beta releases (now at beta 4), where I've improved compatibility with MDLedit and added support for editing PTH files. For those interested in baking lightmaps or editing PTH files in KotorBlender, I've listed the necessary steps in the description.
  14. Fix is in the repository (mesh removal made redundant after upgrade).
  15. View File KotorBlender (for Blender 2.8) This add-on is a fork of KotorBlender, upgraded to support Blender 2.8+. KotorBlender is in turn based on NeverBlender, forked from version 1.23a. Find the latest version on GitHub. ## Features - Import & export ASCII MDL models: geometry, materials, animations, walkmeshes and TXI files - Import & export LYT files - Import & export ASCII PTH files ## Installation 1. Clone this repository or donwload a ZIP release 2. Copy or unpack the **kotorblender** folder into Blender addons directory, e.g. "C:/Users/USERNAME/AppData/Roaming/Blender Foundation/Blender/BLENDER_VERSION/scripts/addons" 3. Enable the add-on in Blender Preferences via Edit → Preferences → Add-ons ## Usage ### Modelling 1. Extract MDL, MDX, WOK, and, optionally, TPC and LYT files to a single directory (Kotor Tool, reone-tools, etc.) 2. Convert TPC files to TGA/TXI (reone-tools) 3. Convert binary MDL to ASCII MDL using MDLops or MDLedit 4. Import ASCII MDL into Blender via File → Import → KotOR Model (.mdl) 5. Create/modify models 6. Export ASCII MDL via File → Export → KotOR Model (.mdl) 7. Convert ASCII MDL to binary MDL using MDLops or MDLedit ### Baking Lightmaps 1. Select lightmapped objects and enter Edit mode 2. UV Unwrap Faces via UV → Lightmap Pack (increase Margin to avoid overlapping faces) 3. For each lightmapped object: 1. Select lightmap UV Map in Object Data Properties 2. Select lightmap texture node in material node tree 3. Remove a link between Multiply node and Base Color slot of Principled BSDF node 4. In Render Properties 1. Set Render Engine to Cycles 2. Set Device to GPU Compute, if available 3. Set Margin to a lower number, e.g. 1 4. Press the Bake button Fine-tuning: 1. Disable rendering of walkmeshes in Outliner 2. Set Render samples to a higher number, e.g. 1024, to reduce noise 3. Enable Ambient Occlusion in World Properties and tweak Factor to improve contrast 4. Tweak light radius and color (try copying color from vanilla lightmaps) ### Editing Paths 1. Extract PTH file from the module's RIM file, e.g. "modules/danm13_s.rim" (Kotor Tool, reone-tools, etc.) 2. Convert binary PTH to ASCII PTH using reone-tools: `reone-tools --to-ascii m13aa.pth` 3. Import ASCII PTH into Blender via File → Import → KotOR Path (.pth) 4. Create/move path points, or modify path connections via Object Properties 5. Export ASCII PTH via File → Export → KotOR Path (.pth) 6. Convert ASCII PTH to binary PTH using reone-tools: `reone-tools --to-pth m13aa-ascii.pth` ### Connecting Room Walkmeshes 1. Select a room walkmesh 2. Enter Edit mode and select two vertices adjacent to another room 3. Determine 0-based index of the other room into the LYT file 4. Enter Vertex Paint mode and set brush color to (0.0, G, 0.0), where G = (200 + room index) / 255 5. Ensure that brush blending mode is set to Mix, and brush strength is set to 1.0 6. Paint over the selected vertices ## Trivia - Check "Image search" when importing to recursively search for textures in subdirectories - Only selected objects are exported, unless none are selected, in which case all objects will be exported - When baking lightmaps, disable rendering of unwanted objects, such as walkmeshes and path points ## Compatibility - Blender 2.8+ - MDLops 1.0.2 - MDLedit 1.0.3 ### Known Issues - You cannot have neverblender and kotorblender *enabled* at the same time - MDLedit has problems reading `color` and `selfillumcolor` controllers from ASCII MDL Submitter seedhartha Submitted 03/18/2021 Category Modding Tools  
  16. Version 2.1.0

    88 downloads

    This add-on is a fork of KotorBlender, upgraded to support Blender 2.8+. KotorBlender is in turn based on NeverBlender, forked from version 1.23a. Find the latest version on GitHub. ## Features - Import & export ASCII MDL models: geometry, materials, animations, walkmeshes and TXI files - Import & export LYT files - Import & export ASCII PTH files ## Installation 1. Clone this repository or donwload a ZIP release 2. Copy or unpack the **kotorblender** folder into Blender addons directory, e.g. "C:/Users/USERNAME/AppData/Roaming/Blender Foundation/Blender/BLENDER_VERSION/scripts/addons" 3. Enable the add-on in Blender Preferences via Edit → Preferences → Add-ons ## Usage ### Modelling 1. Extract MDL, MDX, WOK, and, optionally, TPC and LYT files to a single directory (Kotor Tool, reone-tools, etc.) 2. Convert TPC files to TGA/TXI (reone-tools) 3. Convert binary MDL to ASCII MDL using MDLops or MDLedit 4. Import ASCII MDL into Blender via File → Import → KotOR Model (.mdl) 5. Create/modify models 6. Export ASCII MDL via File → Export → KotOR Model (.mdl) 7. Convert ASCII MDL to binary MDL using MDLops or MDLedit ### Baking Lightmaps 1. Select lightmapped objects and enter Edit mode 2. UV Unwrap Faces via UV → Lightmap Pack (increase Margin to avoid overlapping faces) 3. For each lightmapped object: 1. Select lightmap UV Map in Object Data Properties 2. Select lightmap texture node in material node tree 3. Remove a link between Multiply node and Base Color slot of Principled BSDF node 4. In Render Properties 1. Set Render Engine to Cycles 2. Set Device to GPU Compute, if available 3. Set Margin to a lower number, e.g. 1 4. Press the Bake button Fine-tuning: 1. Disable rendering of walkmeshes in Outliner 2. Set Render samples to a higher number, e.g. 1024, to reduce noise 3. Enable Ambient Occlusion in World Properties and tweak Factor to improve contrast 4. Tweak light radius and color (try copying color from vanilla lightmaps) ### Editing Paths 1. Extract PTH file from the module's RIM file, e.g. "modules/danm13_s.rim" (Kotor Tool, reone-tools, etc.) 2. Convert binary PTH to ASCII PTH using reone-tools: `reone-tools --to-ascii m13aa.pth` 3. Import ASCII PTH into Blender via File → Import → KotOR Path (.pth) 4. Create/move path points, or modify path connections via Object Properties 5. Export ASCII PTH via File → Export → KotOR Path (.pth) 6. Convert ASCII PTH to binary PTH using reone-tools: `reone-tools --to-pth m13aa-ascii.pth` ### Connecting Room Walkmeshes 1. Select a room walkmesh 2. Enter Edit mode and select two vertices adjacent to another room 3. Determine 0-based index of the other room into the LYT file 4. Enter Vertex Paint mode and set brush color to (0.0, G, 0.0), where G = (200 + room index) / 255 5. Ensure that brush blending mode is set to Mix, and brush strength is set to 1.0 6. Paint over the selected vertices ## Trivia - Check "Image search" when importing to recursively search for textures in subdirectories - Only selected objects are exported, unless none are selected, in which case all objects will be exported - When baking lightmaps, disable rendering of unwanted objects, such as walkmeshes and path points ## Compatibility - Blender 2.8+ - MDLops 1.0.2 - MDLedit 1.0.3 ### Known Issues - You cannot have neverblender and kotorblender *enabled* at the same time - MDLedit has problems reading `color` and `selfillumcolor` controllers from ASCII MDL
  17. What are the limitations, I'm curious? Things like maximum number of lights and bones are not going to be an issue any longer. New graphical features could be added mid-difficulty, as well as new game mechanics, given enough interest from modders/developers.
  18. Oh, I see. This has more to do with the save system, than with modules. Save system is actually one of those things that I'm willing to completely redesign, due to how hard it would be to make it 100%-compatible with vanilla. If "real-time" reloading of templates would make modders' life easier, then this is the way we could go, no problem. I hear you - recreating something that already works and NOT improving upon it does sound wrong. I'm coming from the "minimum viable product" point of view. Getting the equivalent of vanilla out with slightly better graphics and QoL improvements beats releasing a shiny but incomplete engine, in my book. I will of course consider adding advanced graphical features - perhaps when the engine is a little more mature? That's a good point. I will keep this vanilla/ehanced mode toggle in mind and develop accordingly.
  19. Could you define "modular"? reone reuses most of vanilla assets and does its best to recreate behavior of the vanilla engine. This means that modules are constructed from the same IFO, ARE, GIT, LYT and VIS files.
  20. Version 0.16 of the engine has been released, which achieves a major milestone: the Endar Spire has been made completable. This is among many other things, such as lip sync and PBR. As always, if you're interested in checking reone out, you can download the latest release from GitHub, or build it from source. https://github.com/seedhartha/reone
  21. Most should, if not all of them. There are things in the engine that we hard-code as opposed to reading them from the game assets, e.g. new animations cannot be added at the moment, but we'll sort it out. As a rule of thumb, mods that create or modify *assets* should work (this includes new areas and scripts). Anything that relies of less studied files, or fiddles with vanilla executables, will not.
  22. Thanks! Talking about possible - anything is, this is an open-source project after all. Do I have plans to add anything graphics wise? Not for the time being. I find it much more important to focus on the gameplay - particularly making the first game completable, minus the minigames. Changing vanilla behaviour is kind of a grey area, but that certainly sounds doable. Things like these could work as a feature toggle, I think.
  23. This may very well be true if we're talking about creating a new game, but with recreations, you're forced to do things in a very particular way, and to reimplement a lot of stuff, including the scripting subsystem, resource formats and etc. Because of that the benefit of using a third-party engine is much less than it could be, while the costs are still there. As I've said, the hardest part is reimplementing the game logic. I fail to see how a Unity-based project has more chances at being finished and usable than its custom counterparts, which already have the low-level subsytems covered (reone and KotOR.js already do).
  24. @sELFiNDUCEDcOMA I think you're misunderstading the idea behind engine reimplementations. None of those are trying to recreate the vanilla engine in a sense of replicating the old technology - they are always based on newer frameworks (e.g. they use modern OpenGL with proper shaders), and they do add a *lot* of value to modders. Being open source, these projects allow modifications (gameplay and graphics wise) that were never possible with the vanilla engine. As the person who have effectively recreated the KotOR engine, I can tell you that using a third-party (proprietary) game engine is actually more of a detriment to such projects - it *hurts* their long-term viability. Recreating graphics, audio and miscellaneous subsystems are least of your worries as the engine developer, since you're going to spend most of your time reimplementing the game logic - this is just as true for Unity-based projects.
  25. Alpha is controlled by a separate shader node, which multiplies diffuse texture alpha by model node alpha. You need to change the latter for alpha to be exported - this is by design.