-
Content Count
18 -
Joined
-
Last visited
-
Days Won
4
Lane last won the day on November 26
Lane had the most liked content!
Community Reputation
38 Jedi KnightAbout Lane
-
Rank
Jedi Apprentice
- Birthday 11/12/2000
Contact Methods
-
Website URL
https://www.youtube.com/channel/UC_EnGk6GWeY-jaAoMzUiG2w
Profile Information
-
Gender
Male
-
Location
US, TX
-
Interests
Speedrunning
Recent Profile Visitors
The recent visitors block is disabled and is not being shown to other users.
-
Been chatting with a few community members, and I've been asked to share some of the other binaries I've come across. Attached below are the binary executables for Kotor 1 Mac, Kotor 2 Mac, Kotor 1 Android, Kotor 1 Xbox XKOTOR KOTOR2sub libKOTOR.so default.xbe
-
@DarthParametric for the time being it is just 50. Though I plan to make it adjustable in the future. This was mostly a proof of concept In an ideal world, a level cap would be selected that is appropriate to the mods installed. I could forsee a future where there is so much added mod content that 50 levels would be too few Not to mention the associated 2DAs can be adjusted to make the higher levels less over-powered. Such as increasing the exp requirements, or introducing diminishing returns for things like feats, spells, defense, etc. But yeah, this is just laying the ground work
-
Today's little demo: This patch was originally put together by @LanguageWriter123 (see here). He and I worked together to see what it would take to port this over, and today I decided to give it a shot, and I'm very pleased with the results! cc @darthbdaman as you asked about level caps earlier
-
Hi @Salk I know what your talking about! The load behavior of a main menu load, a hard load (load game menu in game), an autosave load, and a quick load all have subtle but important differences. This has actually come up in the speedrun world a few times. For example, the effect duration glitch (in which they last a long time) only happens if you have previously loaded a hard save in this session (as that messes up the global timers). There's a variety of other small differences, between these functions; most of which I haven't dug too deeply into. But I'm unsurprised you've run into this before. If you could provide an example of a specific script related issue that performs differently for different loads (to use as a reference point), I'd be happy to mount a bit of an investigation into it when I get the time. As mentioned above, it's a busy time of year so this may be backlogged a bit. I'd also be happy to field any other questions! Thanks, Lane
-
For those who are hungry for updates, thanks for all the kind words and support. As holidays are around the corner, my free-time has been a bit taxed lately as I strike the balance between KotOR things and spending time with my and my fiance's family. (Not to mention keeping up with my real job 😬) However, I did spend some time formalizing some of the various "wishlist" features, as well as other pending investigations within the repository issues view. Most upcoming work on my radar for this project is of the unexciting sort. I want to adjust the way I'm modelling game objects in the patching framework to better reflect the underlying inheritance in the base game (i.e. Functions that take a CSWCObject can accept a CSWCCreature, which is derivative, as valid input, etc). I also want to improve/expand the address database system. Right now, they're being stored in plain-text TOML format, which is fine at the current scale, but as this project has grown, this system is already becoming unwieldy. I'm looking to swap to using SQLIte, such that we can have efficient, live, swappable local databases that we can just dump address data directly out Ghidra into. Finally, kotor 2 reverse engineering just needs more work. Kotor 1 is in a great place, such that if we were only targeting that game, I could really accelerate this project. But since I'm endeavoring to provide a solid framework for both games, some TL&C is required to get kotor 2 at least somewhat up to speed. I likley will be giving DarthOuroboros's GhidraMCP suggestion a shot to see if that can accelerate things more here. As a lot of the work to be done is mostly comparative reverse engineering, which I hope falls into the low-complexity class of problem that AI typically excels at. As always let me know if there are any questions or suggestions! P.S. @ajdrenter Galaxy map stuff would be pretty interesting, I've added an issue for me to investigate that at some point in the future. Thanks for the suggestion!
-
Another little demo: Here I show off directly accessing 2DA values from scripts
-
@th3w1zard1 Been avoiding AI thus far (largely so I could learn about how kotor works while I reversed it), but you're probably right that using Ghidra MCP would probably be a reasonable next step. The primary difference between Steam and Gog, is the steam version has DRM, which for one means, that we need to do our patching at runtime (after steam DRM decrypts everything), it also means the entry point is a bit different. But yeah, I've already did some experiments with attaching at runtime for the Steam version, and I absolutely plan to support it as well. An example of where this entry point difference causes some issue is the additional console commands patch. Console commands get initialized during the static initialization block before the call to `main()`, which means (in its current form) it doesn't work with Steam, as we have to wait for the game to spin up before we can attach the patcher, and so we miss this initialization step. I have a few ideas for how to work around this, but I haven't gotten around to it just yet. @DarthOuroboros The script extender can be pushed quite far, seeing as we can basically inject whatever C++ code we want wherever we want in the game. So, specifying your own custom file formats is definitely possible, if a bit high-effort. That's not quite on my radar at the moment, though I'd be happy to help on-board you if you're interested in taking a crack at something like that (assuming you're comfortable with C++ and Windows API). For .gltf specifically, Kotor already imports opengl.dll, and some related tooling, expanding that to handle some modern graphical formats/infrastructure would be an interesting project, the main struggle would be coming up with a solid translation layer for the Aurora Gob/Part system used under the hood.
-
Ah, what I meant was that because I created a robust file I/O interface, that it wasn't clear how valuable the existing (unimplemented/gutted) print features would be. Though, in that the functions *are used*, but just not doing anything. Then yes, I agree, this would be quite valuable for sleuthing existing game logic and debugging those issues. For new mods though, I'd definitely recommend my function that's just a wrapper for `fopen`. But regardless, getting logs/feedback out of the game has been asked for a lot, and establishing several avenues for y'all is definitely a high priority for me.
-
Little demo for this morning, showing off FreeCam in both games:
-
@DarthParametric I actually cracked the debug camera a long time ago when I was working on thread injection: Around 2-minutes in that video Honestly this entire playlist is filled with things I've gotten up to in these games. I haven't stuck a way to use it in the patcher just yet, but I have a few ideas.
-
Well the print screen stuff is another one of my earlier patches to re-enable the AurPostString function, which is also separately not implemented in the base game. That patch is a little more complicated, as I essentially need to redirect the execute command call to actually invoke the PostString function. As far as script logging goes, I'm not seeing anything. The PrintString, PrintInt PrintObject, etc functions are in various states of incomplete. With things like PrintInt simply doing nothing, whereas PrintString looks like it should do something, but when you dig into it more it doesn't. These could probably be restored to some degree, though I have also implemented file I/O, so it's unclear the degree to which this would be valuable. I didn't actually know about that level 50 hack. Looking at it, he seems to take a code-cave approach. Pretty nifty, though has a few issues by the looks of things.
-
That should be very doable, right now the shipBuild function just return `true`, and does nothing else. So as far as patching goes, it's as easy as swapping a byte or two. I'll throw something together later today, and make a mini demo. Good suggestion, I'll add this to the list @DarthParametric Here ya go:
-
Two demos in one day! In this one I show, kotor 1 working with more than 256 rows in placeables 2DA (something that previously wasn't possible).
-
Another demo, this time showing off some of the Kotor 2 creature stats functions in Kotor 1. A few discoveries during this process: The various "BonusForcePoints" functions kotor 2 implements are going to be non-trivial to implement unfortunately, as Force point calculations are very hard-coded, and I'm not aware of any convenient ways to tip the scales there. `SetBonusForcePoints`, `AddBonusForcePoints`, and `GetBonusForcePoints` are still on the wishlist, they'll just take a bit longer as I patch the FP logic. `Modify<Reflex/Fort/Will>SavingThrowBase` functions are in a similar camp. Anytime the game calls `GetBaseWillSavingThrow` (or related), it live calculates the value based on class level and specific feats. Kotor 2 gets around this by adding an additional field to the creature stats structure that stores a modifier they use in this calculation. So again, these are still on the list, but will require a bit more love to get working than the commands I show off in the demo video All-in-all progress is going well. I'll be cutting another alpha release later, for anyone interested in experimenting. As always please share questions and comments on this effort!
-
The early progress on the patch manager I've been using as well as releases can now be found on GitHub
