Skip to content

Releases: ScoobyDouche/VitaKotor

VitaKotor v0.2.0 — the movies play, and the buttons work

Choose a tag to compare

@ScoobyDouche ScoobyDouche released this 22 Sep 01:30

VitaKotor v0.2.0 — the movies play, and the buttons work

Until now every cutscene was skipped and the Vita's buttons worked but mapped wrong, so the game was played by touch alone. This release plays the movies, with sound, and maps the game's own gamepad controls onto the Vita — while keeping the touchscreen, so you can use whichever suits the moment.

Most of this release is the work of pyjabox, who contributed it in pull request #7. Thank you.

What changed

  • Cutscenes play. The game's Bink movies now run with video and sound instead of being skipped. Tap the screen or press a button to skip one.

  • The buttons work. The left stick moves, the right stick turns the camera, the D-pad navigates, Cross accepts, Circle cancels, Square and Triangle are the game's X and Y, L and R are the shoulder actions, and Start pauses.

  • The touchscreen still works, alongside the buttons. Mix them freely: tap a menu item, then carry on with the stick. The rear touch panel stays off, so holding the console never taps anything.

  • The minimap stays inside its frame, and the hazy rectangle over the class picker and the Quick/Custom Character screen is gone. GUI panels are now clipped to their own area on real hardware, the way the game expects.

  • Less work while you play. The audio mixer now holds its lock for much less time, and several rendering paths do less per frame. These came across from pyjabox's KOTOR II port, where they were measured; how much they help here has not been measured yet.

Why the buttons never worked before

The game has a full Android gamepad layout built in. The Vita reports its buttons in a different order from an Android controller, so every press arrived under the wrong number and matched nothing. The loader now translates each button into the number the game expects before the game sees it.

Honest limits

  • A normal attack is easiest by touch. The Android layout puts some actions on the L2 and R2 triggers, which the Vita does not have. Tap the on-screen attack button.

  • Touch and buttons together have only had short sessions. Everything worked in testing, but nobody has played an hour with both yet. An older build once stopped responding to input about 50 minutes in; relaunching cleared it.

  • Not every movie has been checked. The ones played so far run with sound and return to the game cleanly.

  • Voice-over is English in every language, as it was in the retail releases.

  • Distant sounds are still too loud. They hold at about a fifth of full volume instead of fading out.

  • Shiny armour still reflects the room. Still not understood.

  • Geometry can still come apart late in a long session. It has not been demonstrated fixed.

Everything else from v0.1.13 still applies

Playable from boot through character creation and on into the game. Combat, dialogue, inventory, containers, saves, the swoop bike race and Force powers all work, the on-screen keyboard covers character and save names, the music plays, and the console asks which language you want.

Still outstanding: no trophies.

You need your own copy of the game

This is a loader, not a game. It needs the Android release's main and patch .obb files, which you must own.

Something broken?

Open an issue with ux0:data/kotor/log.txt attached. Every fix in this release came out of one of those logs.

VitaKotor v0.1.13 — pick your language on the console

Choose a tag to compare

@ScoobyDouche ScoobyDouche released this 21 Sep 02:30

VitaKotor v0.1.13 — pick your language on the console

The last release let you play in French, Italian, German or Spanish, as long as you were willing to edit an ini file on a memory card. Now the console asks you, and the loading screen answers in the language you picked.

What changed

  • Choose your language on the console. The first time you run this build, a list comes up before the loading screen: English, Français, Italiano, Deutsch, Español. Move with up and down, and the bottom of the screen names the button that confirms. Your choice is saved and you are not asked again. To change it later, press L while the game is starting — any time from launching it until the loading screen appears.

  • The loading screen speaks your language too. The hints along the bottom, and the word "Loading" above the bar, now come from the game's own text for the language you chose, rather than always from the English one. All five sets were already in the game data you installed.

  • The note about the slow first boot only shows on the slow first boot. It explains that the archive index is being built, which is true exactly once. Every boot after that opens straight into the game's own hints, in your own language.

  • The ini still works. Language=fr under [Game Options] in ux0:data/kotor/swkotor.ini does what it always did, and that is still where the picker saves your choice. Editing it by hand and using the picker are the same setting.

How the picker treats your ini

The file is yours and the engine's — it holds your display settings, whatever comments you have left in it, and the engine rewrites it whenever you save options in game. So the picker changes the one line it came for and leaves the rest of the file exactly as it found it: spacing, comments, section order, and the spelling you used for the key. It writes to a temporary file and renames it, so losing power mid-write costs you the new setting rather than the file that was already there.

If the font the picker draws with fails to load, there is no picker and your existing setting stands. If nothing touches the pad for a minute, it gives up and boots. On a first run this screen stands between you and the game, so it is built not to be able to trap you there.

Honest limits

  • Voice-over is English in every language. Only one set of recordings was ever produced for this game, so this is what the retail releases did too. The language setting changes text and menu art.

  • The note about the first boot is English in every language. It is this port's own sentence rather than the game's, and there is no translation of it in your game data. Writing one here and presenting it as correct is not something this port will do, so it shows only on the one boot it is about.

  • Distant sounds are still too loud. Attenuation stops at the game's maximum distance rather than continuing, so a sound across the level holds at about a fifth of full volume instead of fading out. The fix is written and measured but still has not been tested on hardware.

  • The minimap and some panels are the wrong size. The minimap overflows its frame, and a hazy rectangle sits over the character sheet and the class picker. Still not understood.

  • Shiny armour still reflects the room. Unchanged, and still not understood.

  • Geometry can still come apart late in a long session. Less often than before, but it has not been demonstrated fixed.

Everything else from v0.1.12 still applies

Playable from boot through character creation and on into the game. Combat, dialogue, inventory, containers, saves, the swoop bike race and Force powers all work, the on-screen keyboard covers character and save names, and the music plays.

Still outstanding: cutscenes are skipped, rear touch is disabled deliberately, no trophies.

You need your own copy of the game

This is a loader, not a game. It needs the Android release's main and patch .obb files, which you must own. Nothing copyrighted is distributed here.

Something broken?

Open an issue with ux0:data/kotor/log.txt attached. Every fix in this release came out of one of those logs.

VitaKotor v0.1.12 — the music comes back, and it can speak French

Choose a tag to compare

@ScoobyDouche ScoobyDouche released this 20 Sep 22:38

VitaKotor v0.1.12 — the music comes back, and it can speak French

The last release said long music tracks were silent and that fixing it was next. It is fixed. The score plays, and while the audio was open the port also learned to read a language out of the ini.

What changed

  • Music plays. Every track over about six megabytes used to be replaced with silence of the correct length, which was most of the score. Long tracks now stream, and a 48-minute session played forty of them with no decode failures.

  • You can play in French, Italian, German or Spanish. All five languages were already in the game data you installed; there was no way to ask for one. Add Language=fr to [Game Options] in ux0:data/kotor/swkotor.ini and the text and menus follow. The codes are en, fr, it, de and es, and the README has the details.

  • Ambient beds sound right. The background layers were being read as the wrong container format. They are now read as what they are, and streamed.

  • Fewer stalls during sound-heavy moments. Decoding used to happen while the mixer lock was held, so every decode blocked the mix.

  • More headroom before the memory runs out. The large-allocation pool had been running pinned at its 32 MB ceiling for whole sessions, pushing the overflow into the general heap and, in one session, into a crash. It has 64 MB now, taken from graphics memory that was never being used.

  • Logging stays on. ux0:data/kotor/log.txt records what the port was doing, and posting it with a bug report is what makes a fault fixable by someone who was not holding your console.

What "streaming" fixed, in numbers

A long music track decodes to 13–15 MB of audio, against a cap of 6 MB, so the old code gave up and substituted silence — the track was still playing, in the game's eyes, and still took its full running time. Nothing about that was visible from the outside except that the music had gone.

Tracks are now decoded a piece at a time into a small window that the mixer reads as it drains. Across a 48-minute session the gaps where the mixer asked for audio that had not been decoded yet came to 4,014 samples — under a tenth of a second, in total, spread over the whole session.

The memory work is the other half. The same session served 5,539 large allocations from the pool with a single one falling through to the general heap; the session before the change had 622 fall through, and the general heap's arena shrank from 159.5 MB to 123 MB.

Honest limits

  • Distant sounds are still too loud. Attenuation stops at the game's maximum distance rather than continuing, so a sound across the level holds at about a fifth of full volume instead of fading out. The fix is written and measured but has not been tested on hardware, so it is not in this release.

  • The minimap and some panels are the wrong size. The minimap overflows its frame, and a hazy rectangle sits over the character sheet and the class picker. Still not understood.

  • Shiny armour still reflects the room. Unchanged, and still not understood.

  • Geometry can still come apart late in a long session. Less often than before, but it has not been demonstrated fixed.

  • Voice-over is English in every language. Only one set of recordings was ever produced for this game, so this is what the retail releases did too. The language setting changes text and menu art.

Everything else from v0.1.11 still applies

Playable from boot through character creation and on into the game. Combat, dialogue, inventory, containers, saves, the swoop bike race and Force powers all work, and the on-screen keyboard covers character and save names.

Still outstanding: cutscenes are skipped, rear touch is disabled deliberately, no trophies.

You need your own copy of the game

This is a loader, not a game. It needs the Android release's main and patch .obb files, which you must own. Nothing copyrighted is distributed here.

Something broken?

Open an issue with ux0:data/kotor/log.txt attached. Every fix in this release came out of one of those logs.

VitaKotor v0.1.11 — sound that stays, and textures that fit

Choose a tag to compare

@ScoobyDouche ScoobyDouche released this 23 Aug 02:02

VitaKotor v0.1.11 — sound that stays, and textures that fit

The two things people notice most in a long session were the same kind of bug underneath: something ran out of room and the excess was silently thrown away. Sound effects vanished as the mix overflowed, and geometry tore as the texture pool overflowed. Both now have room.

What changed

  • Sounds stop disappearing. Footsteps, menu clicks and combat used to fade out over a session until environmental noise was all that was left. They stay now.

  • Sound has distance and direction. Rushing water across the room is no longer as loud as water underfoot, and sounds sit on the side they come from.

  • Textures use half the memory. The picture stopped tearing in long sessions, and framerate is better in the areas that were worst.

  • Logging stays on. If something goes wrong, ux0:data/kotor/log.txt records what the port was doing, and posting it with a bug report is what makes the fault fixable by someone who was not holding your console. Every fix in this release came out of one of those logs.

Why sounds were going missing

The mixer added every playing voice together and then clipped the result at full volume. With fifteen voices going at once the total ran well past the ceiling, and everything quieter than the loudest source was simply flattened out of existence. Environmental loops play continuously, so they always won; footsteps and menu clicks are brief, so they always lost.

There is now a limiter riding the mix instead. It engaged on about two percent of a recent session, catching overloads of up to two and a half times full volume that would previously have been clipped away.

Positional audio was missing entirely and is the other half of the fix. All four of FMOD's 3D calls were doing nothing, so every sound in the world played at full volume regardless of how far away it was. Distance rolloff, stereo panning and occlusion all work now, which both fixes the balance and leaves the mixer far less to add up.

Why the picture was tearing

Not a leak, in the end. Over a 28-minute session the game uploaded 1,014,190 KB of texture and released 920,002 KB, which balances to the byte — nothing was being lost. The problem was that the textures it wanted at any one moment came to about 102 MB, against the 96 MB of graphics memory a Vita actually has. So the console spent the whole session evicting textures and immediately loading them back, running with a few hundred kilobytes free, and the picture came apart.

Textures now upload at 16 bits per pixel instead of 32. The working set drops to around 55 MB, free graphics memory never fell below 33 MB in testing, and the reloading traffic fell by 41 percent because far less needs evicting. The cost is some colour banding, which ordered dithering keeps to less than one step of the reduced palette.

Honest limits

  • Long music tracks are still silent. Anything over about six megabytes decoded is replaced with silence of the correct length, which is most of the score. Short tracks play. This is the next thing being worked on.

  • The minimap and some panels are the wrong size. The minimap overflows its frame, and a hazy rectangle sits over the character sheet and the class picker. Three separate theories were tested against hardware this cycle and all three were wrong, so this is honestly not understood yet.

  • Shiny armour still reflects the room. Unchanged, and still not understood.

  • The tearing fix has had one clean session, not ten. Free graphics memory improved by more than twenty times, which is a real number, and the session that was clean was the same length as the one that tore. That is good evidence rather than proof.

Everything else still applies

Playable from boot through character creation and on into the game. Combat, dialogue, inventory, containers, saves, the swoop bike race and Force powers all work, and the on-screen keyboard covers character and save names.

Still outstanding: cutscenes are skipped, rear touch is disabled deliberately, no trophies.

VitaKotor v0.2.0-rc1 — more versions of the APK, and a loader that says what is wrong

Choose a tag to compare

@ScoobyDouche ScoobyDouche released this 22 Aug 13:21

VitaKotor v0.2.0-rc1 — more versions of the APK, and a loader that says what is wrong

A pre-release, and it is a pre-release for a reason: none of it has been run on hardware yet. That is what it is here for. If you have been unable to use this because your copy of KOTOR is the wrong version, this build is the one to try, and the log it produces is the thing worth sending back.

What changed

  • 1.0.7 and 1.0.71 should now load. They asked for five symbols the loader had never had to provide — two compiler helpers and std::bad_alloc's constructor, destructor and typeinfo. All five are supplied now.

  • 1.0.9 build 54 was never actually broken. Its four native libraries are byte-for-byte identical to 1.0.10's. If you were told 1.0.9 does not work, that was wrong, and the README has been corrected.

  • An unsupported library now stops with a list of names instead of crashing at an address that means nothing. If the game asks for something this loader has not got, log.txt names each symbol and the boot stops there.

  • The README tells you how to check your own APK. Look in lib/armeabi-v7a/: libfmod.so means it will work, libfmodex.so alongside libgnustl_shared.so means it will not. That is a better test than any version number, because the version numbers on these builds do not agree with each other.

What was actually going wrong

An unsupported APK failed by asking libKOTOR for a symbol the loader could not bind. Nothing complained at the time — the slot simply kept the value the linker had left in it, and the first call through it jumped somewhere meaningless. What you saw was a PREFETCH_ABORT about two seconds into boot with a program counter like 0x00025b28, which is not an address at all, and nothing in the log connecting it to a name.

The loader offers seven different tables to each library, so it cannot complain as it goes: a symbol nothing satisfies on the first pass may well be satisfied on the fifth. It now walks the relocations once more after the last pass, and anything still holding a link-time value gets named. A handful of names is usually a handful of lines of fix, which is exactly how 1.0.7 went from unsupported to supported.

What has and has not been checked

Everything below was verified by comparing the libraries against what the loader provides, on a PC. None of it has been booted.

  • 1.0.7 and 1.0.71: no unresolved imports, all 42 hooked functions present, all 10 data globals the same size, and no function prologue that would break the hooks.
  • 1.0.9 build 54: identical libraries to 1.0.10, so nothing to check.
  • The older build carrying libfmodex.so and libgnustl_shared.so: 87 symbols short. It needs an old FMOD Ex audio API and a pre-C++11 C++ runtime, and it is not supported. It should now tell you so rather than crash.

You will also need the expansion files that match your APK. The libraries and the game data are separate things, and there is no reason to expect one version's .obb to satisfy another's.

Please keep your old build

The new check stops the boot when it fires, and it has never run on real hardware. It should never fire on a setup that already works — but if it does, that is a false positive and it will stop a working install.

Before you install this, copy your current working KOTOR.vpk onto the memory card. Recovery is then a reinstall in VitaShell with no PC involved. Your ux0:data/kotor/ directory is not touched by installing a VPK, so libraries, expansion files and saves all stay put — but backing up ux0:data/kotor/saves costs nothing and it is the only thing there you cannot regenerate.

If you are going to swap libraries to try a different APK, copy the four working .so files somewhere else on the card first.

Everything else is unchanged from v0.1.9.2

Playable from boot through character creation and past the Endar Spire onto the first planet. Combat, dialogue, inventory, containers and saves all work. Cutscenes are skipped, long music tracks are silent, and two intermittent faults — input going unresponsive, and world geometry tearing — have each been seen once in about four hours. Save often.

You need your own copy of the game

This release contains no game code or data. You must own the Android release of KOTOR and supply its files yourself — the .apk and both .obb files. Setup instructions and a troubleshooting table are in the README, including kubridge.skprx and libshacccg.suprx, both of which are required.

What to send back

ux0:data/kotor/log.txt, whatever happened. It is worth an issue in all three of these cases:

  • It named symbols and stopped, on an APK you think should work. Include the version and what is in the APK's lib/armeabi-v7a/.
  • It named symbols and stopped, on an APK nobody has tried. That list is the entire cost of supporting it, so it is genuinely useful.
  • It fired on a setup that was working before this build. That is the failure this pre-release exists to catch, and it is the most useful report of the three.

VitaKotor v0.1.10 — the boot screen stops being a black rectangle

Choose a tag to compare

@ScoobyDouche ScoobyDouche released this 22 Aug 17:57

The two minutes before the main menu used to be a bare progress bar on black. It now looks like the game.

What changed

  • The boot screen wears the game's own loading art. One of the 97 loading screens KOTOR ships is picked at random and drawn behind the bar, with the game's logo above it and a rotating hint below — the same hints the game shows you between areas, read out of its own hint table rather than written by hand.

  • The progress bar sits where the art says it should. Every one of those 97 screens has a groove painted into it at the same place, and the bar is now cut to fit it. The game's own layout file describes a bar about 30 pixels wider on each side, which overhung the groove.

  • Nothing waits for the game to start up. The art is read straight out of patch.obb before the archives are mounted, so the screen is dressed from the first moment there is something to look at.

Why it took two attempts

The first version of this wedged the console hard enough to need a power cycle, at 25.1 seconds into boot, and the reason is worth writing down.

The loader logs every graphics call the game makes, which means the loader's own drawing was running inside the game's. vitaGL records the array buffer that is bound at the time alongside the pointer it is given, so once the game had a buffer of its own bound, an address on the loader's stack was read as an offset into that buffer.

The screen now stops drawing at the game's very first graphics call and hands over cleanly. Probing confirmed the handover point is clean and that the game has both a vertex and an index buffer bound four seconds later, which is exactly where the earlier boot died.

Honest limits

This release changes the loading screen. It does not fix anything below.

  • Sound thins out over a long session. In a 59-minute session, spoken lines and effects gradually stopped playing — worst after about 40 minutes. This was thought fixed in v0.1.9.1, and the severe form of it is: the leak that used to exhaust memory and file handles and take the game down with it is gone, and nothing crashes now. What remains is quieter and slower, and it is the thing being worked on. Relaunching clears it.

  • World geometry can tear into diagonal streaks. Now seen twice rather than once — a 37-minute session on Taris joined the earlier 44-minute one. Walls and floors smear while the HUD and dialogue text keep drawing perfectly. Nothing crashes and your save is safe.

  • Some armour renders flat white instead of shiny, turning reflective only under certain lighting. Sith armour is the clearest example. The reflection comes from an environment map, and the port is not sampling it reliably.

  • Input can stop responding. Unchanged from v0.1.9.2: seen once at around 50 minutes, cleared by quitting to the LiveArea and relaunching.

No longer true, and worth correcting: previous notes said entering a new area pauses hard and that this was genuine asset loading. It is not. Measured across three transitions in a 59-minute session, an area load now takes 0.4 to 0.8 seconds. The archive indexing and I/O buffering work did this a few releases ago and the note simply outlived it.

  • The Undercity runs badly. Around 5–8 frames per second, against 30–40 in the areas above it. It is playable but not pleasant. The area draws about three and a half times as many objects per frame as the streets of Taris and the port spends its time issuing those draws, so this is a port problem rather than the console being out of its depth.

Everything else from v0.1.9.2 still applies

Playable from boot through character creation and past the Endar Spire onto Taris. Combat, dialogue, inventory, containers and saves all work, and the on-screen keyboard covers character and save names.

Still outstanding: cutscenes are skipped, long music tracks are silent, rear touch is disabled deliberately, no trophies.

Save often. It is worth playing in sessions; it is not yet a playthrough.

You need your own copy of the game

This release contains no game code or data. You must own the Android release of KOTOR and supply its files yourself — the .apk and both .obb files. Setup instructions and a troubleshooting table are in the README, including kubridge.skprx and libshacccg.suprx, both of which are required.

Something broken?

Everything is logged to ux0:data/kotor/log.txt, including full CPU fault reports. Attach that file to any issue.

  • Black screen, no error → libshacccg.suprx is missing from ur0:data/
  • Crash at launch → kubridge.skprx is not installed

VitaKotor v0.1.9.2 — cutscene voice lines

Choose a tag to compare

@ScoobyDouche ScoobyDouche released this 22 Aug 01:23

VitaKotor v0.1.9.2 — cutscene voice lines come back

A small release on top of v0.1.9.1, with one fix you will actually hear.

What changed

  • Voice lines play in cutscenes again. In a 38-minute session six spoken lines simply did not play, and the scene ran on in silence for as long as each line should have lasted.

  • The audio decoder asks for a fraction of the memory it used to. A voice line that fits in 828 KB was demanding 1881 KB, against a heap that could offer 1024 KB.

  • The README ranks the remaining faults by how often they have actually been seen, rather than by how bad they sound. Release notes now live in the repository under docs/releases/.

Why the lines went missing

The decoder sized its output buffer by assuming the worst possible case for every frame in the file. KOTOR's voice is 48 kbps mono, which is nothing like the worst case, so it asked for 2.25 times what it needed. When the heap could not serve that, the audio was replaced with silence of the right length — which is why the scenes stayed in time while saying nothing.

The file states its own bitrate in its header, and the buffer is now sized from that, with slack left for variable bitrate. Both failures in the log that prompted this fit comfortably afterwards. The large-allocation pool goes further as a side effect, since these were among the biggest requests being made.

Honest limits

The first two have been seen exactly once each, in about four hours of play, and neither has been reproduced since. They are listed because you may hit them, not because they are reliable.

  • Input can stop responding. Seen once at around 50 minutes: the camera stick and the touchscreen both stopped doing anything, while the game carried on running and drawing at full speed. Quitting to the LiveArea and relaunching clears it.

  • World geometry can tear into diagonal streaks. Seen once at about 44 minutes: walls and floors smear while the HUD and dialogue text keep drawing perfectly. A later 52-minute session was completely clean. Nothing crashes and your save is safe.

  • Entering a new area still pauses hard. Unchanged; that is genuine asset loading.

What is known about the two intermittent faults

For the input freeze, the game was still being handed input at the time and simply stopped acting on it, so this is a game-state problem rather than a frozen console. This release adds logging to catch it in the act, and it is the thing being worked on.

For the tearing, it followed the player between areas rather than being tied to one, and the clean 52-minute session came after the one that tore, so whatever triggers it is not just time played.

Everything else from v0.1.9.1 still applies

Playable from boot through character creation and past the Endar Spire onto the first planet. Combat, dialogue, inventory, containers and saves all work, and the on-screen keyboard covers character and save names.

Still outstanding: cutscenes are skipped, long music tracks are silent, rear touch is disabled deliberately, no trophies.

Save often. It is worth playing in sessions now; it is not yet a playthrough.

You need your own copy of the game

This release contains no game code or data. You must own the Android release of KOTOR and supply its files yourself — the .apk and both .obb files. Setup instructions and a troubleshooting table are in the README, including kubridge.skprx and libshacccg.suprx, both of which are required.

Something broken?

Everything is logged to ux0:data/kotor/log.txt, including full CPU fault reports. Attach that file to any issue.

  • Black screen, no error → libshacccg.suprx is missing from ur0:data/
  • Crash at launch → kubridge.skprx is not installed

VitaKotor v0.1.9.1 — keyboard and longer sessions

Choose a tag to compare

@ScoobyDouche ScoobyDouche released this 21 Aug 21:18

VitaKotor v0.1.9.1 — keyboard and longer sessions

Every session used to end at a door, 10–20 minutes in. They don't any more.

What changed

  • The area-transition crash is fixed. The longest test run for this release went 44 minutes across several area loads, with the game's heap still healthy at the end.

  • You can name your character. Character creation could not be finished before, because the name box had no keyboard behind it. It now opens the Vita's own, and the same fix covers naming your saves.

  • Audio survives a long session. Sound used to thin out and then disappear entirely, voices included, eventually taking the game down with it.

  • Controls are documented in the README, including the Vita button index table.

  • Heap and video-memory telemetry goes to log.txt, which is what made the crash diagnosable. 4x MSAA is off by default, and redundant texture binds are skipped.

Why the crash happened

The cause was fragmentation, not exhaustion. The game mixes megabyte-sized allocations in with thousands of small long-lived objects, and over a session that shreds the heap into confetti. There was plenty of memory free, just never enough of it in one contiguous piece to satisfy a routine 1 MB request. Large allocations now come from a pool of their own, away from the small-object churn.

The audio fault was a leak rather than a fragmentation problem, but it ended the same way. The engine was never being told when a sound finished, so it never reused a voice or closed a music stream, and eventually both file handles and memory ran dry.

Why there was no keyboard

Tapping the name box asks the platform for one. On Android the system provides it; on Vita nothing did, so the field could never receive a letter, and the game will not accept a blank name. That was the end of the road for character creation.

Honest limits

  • The picture can degrade after roughly 40 minutes. World geometry starts tearing into diagonal streaks, getting worse over the following minute or two, while the HUD and dialogue text keep drawing perfectly. Nothing crashes and your save is safe — relaunching and loading the same save came back clean.

  • Entering a new area still pauses hard. Unchanged; that is genuine asset loading.

What is known about the tearing

It is not tied to any particular area: it builds with time played and follows you when you walk elsewhere. It has been seen once, and a later 52-minute session showed no sign of it, so it is real but not reliable. It is not a failed allocation — vitaGL reports none — and the game's own heap is healthy at the time.

Everything else from v0.1.9 still applies

Playable from boot through character creation and past the Endar Spire onto the first planet. Combat, dialogue, inventory, containers and saves all work.

Still outstanding: cutscenes are skipped, long music tracks are silent, rear touch is disabled deliberately, no trophies.

Save often. It is worth playing in sessions now; it is not yet a playthrough.

You need your own copy of the game

This release contains no game code or data. You must own the Android release of KOTOR and supply its files yourself — the .apk and both .obb files. Setup instructions and a troubleshooting table are in the README, including kubridge.skprx and libshacccg.suprx, both of which are required.

Something broken?

Everything is logged to ux0:data/kotor/log.txt, including full CPU fault reports. Attach that file to any issue.

  • Black screen, no error → libshacccg.suprx is missing from ur0:data/
  • Crash at launch → kubridge.skprx is not installed

VitaKotor v0.1.9 — faster startup, steadier combat

Choose a tag to compare

@ScoobyDouche ScoobyDouche released this 01 Aug 21:23

VitaKotor v0.1.9 — much faster startup, steadier combat

Launching now takes under half a minute. Two releases ago it took over a minute, and before that two and a half.

What changed

  • Startup is down to about 28 seconds, from about 44. That is time from tapping the icon to the first drawn frame, on a warm boot.

  • Combat is steadier. Measured on the same area and the same scene load as the last release, the worst dips went from about 16 fps to about 20, and the slowest 10% of play from about 20 fps to about 22.

  • The debug log no longer costs anything. v0.1.8 sped things up by switching the noisiest diagnostics off. This release keeps every one of them and makes them cheap instead — log lines are now collected and written in batches rather than one card write at a time. A line went from about 11 milliseconds to about 0.3.

Typical frame rate is unchanged, and that is the interesting part

The average is still around 31 fps. Only the dips improved.

That is worth explaining, because it says where the remaining work is. The logging cost turned out to be concentrated in the moments the game was loading things, not spread evenly across every frame — so removing it smooths out the rough patches and leaves the ceiling exactly where it was. The cost of drawing a frame is unchanged to within a fraction of a percent.

The upshot: for the first time, what the game reports about its own speed is actually the game, not the measuring. Everything from here is real rendering cost.

Honest limits

  • The ceiling is still around 38–39 fps. That is the game's own frame limiter, not the Vita and not the port.

  • Entering a new area still pauses hard. Unchanged; that is genuine asset loading.

  • Combat is smoother, not smooth. Reduced dips, same average.

If you hit a crash

Crash reports are written the same way as before — when the game faults, logging switches back to writing immediately so the dump always reaches the card. That path is verified by testing but has not yet been triggered by a real crash in the wild. If you do crash and the log looks cut short, please say so in the issue and include it anyway; setting LOG_BUFFER_KB to 0 in loader/config.h and rebuilding restores the previous behaviour exactly.

Everything else from v0.1.8 still applies

Playable from boot through character creation and past the Endar Spire onto the first planet. Combat, dialogue, inventory, containers and saves all work.

Still outstanding: some music missing, a few voice lines silent, rear touch disabled deliberately, no trophies.

First launch is still slow, and that is expected

The first boot after installing takes roughly two minutes while it reads through the archive and writes main.obb.idx next to it. Every launch after that is well under a minute. If you replace an .obb, delete its .idx — a mismatched one is ignored rather than trusted, so the worst case is slow, never broken.

You need your own copy of the game

This release contains no game code or data. You must own the Android release of KOTOR and supply its files yourself. Setup instructions and a troubleshooting table are in the README.

Something broken?

Everything is logged to ux0:data/kotor/log.txt, including full CPU fault reports. Attach that file to any issue.

  • Black screen, no error → libshacccg.suprx is missing from ur0:data/
  • Crash at launch → kubridge.skprx is not installed

VitaKotor v0.1.8 — smoother frames

Choose a tag to compare

@ScoobyDouche ScoobyDouche released this 01 Aug 21:03

VitaKotor v0.1.8 — smoother frames

The game was spending about a fifth of its time writing its own debug log to the memory card. It no longer does.

What changed

  • The worst dips are roughly half as bad. The slowest 10% of play went from about 12–17 fps to about 18–23 fps. Combat and busy scenes are noticeably steadier, though not perfectly smooth yet.

  • Typical frame rate is up as well, from around 26–29 fps to around 31–35 fps.

  • Startup is about 20 seconds faster again. A warm boot now reaches the first drawn frame in roughly 44 seconds, down from about 70.

Why it was slow

During development the loader logged every GL call, and a heartbeat for every thousandth memory allocation. KOTOR allocates about 2.3 million times in a play session, so even that heartbeat added up. Each line is a separate write to the memory card costing around 10 milliseconds, and those writes happened in the middle of frames.

Turning off the two noisiest traces removed roughly 25 seconds from startup and a large share of the in-game hitching. Nothing about the game's rendering changed — it was never as slow as it appeared. The diagnostics are still there and can be switched back on in loader/config.h if a bug needs chasing.

Honest limits

  • There is a ceiling around 38–39 fps. That is the game's own frame limiter, not the Vita and not the port. This release gets closer to it; it cannot go past it.

  • Entering a new area still pauses hard. Loading a module can take the better part of a minute with the picture barely moving. That is genuine asset loading, not stutter, and it is unchanged in this release.

  • Some hitching remains in combat. Reduced, not eliminated.

Everything else from v0.1.7 still applies

Playable from boot through character creation and past the Endar Spire onto the first planet. Combat, dialogue, inventory, containers and saves all work.

Still outstanding: some music missing, a few voice lines silent, rear touch disabled deliberately, no trophies.

First launch is still slow, and that is expected

The first boot after installing takes roughly two minutes while it reads through the archive and writes main.obb.idx next to it. Every launch after that is well under a minute. If you replace an .obb, delete its .idx — a mismatched one is ignored rather than trusted, so the worst case is slow, never broken.

You need your own copy of the game

This release contains no game code or data. You must own the Android release of KOTOR and supply its files yourself. Setup instructions and a troubleshooting table are in the README.

Something broken?

Everything is logged to ux0:data/kotor/log.txt, including full CPU fault reports. Attach that file to any issue.

  • Black screen, no error → libshacccg.suprx is missing from ur0:data/
  • Crash at launch → kubridge.skprx is not installed

Note that the log is much shorter than in previous versions. That is the change described above, not a fault. If you are reporting a rendering or performance bug, say so in the issue and I will point you at the switches in loader/config.h that restore the detailed trace.