The lack of polish is a bit annoying at times in Ultima IX. One such place is early in Despise. As you progress in the first half of the dungeon, you hear a Karma Ding (the sound for losing Karma). And you haven't done anything to cause it. Just being a certain distance from the beginning is all it took. If you check your mana, you have only lost one point. Still you are left wondering what happened.
Well, the karma loss is supposed to be from leaving Castro and Felix to rot in that storeroom. Due to some incomplete scripting, however, you lose karma whether you free them or not. In fact, if you don't free them early on, they disappear from the cell anyway.
What is occurring is a Timer repeatedly checks the area for the presence of either Castro and Felix. If one or both disappear or get killed, there is a one point karma loss and another Timer object is supposed to be set off. Only it seems to set itself off. Might be the trigger is simply turning off the Timer, I didn't look that closely. In any case, matter what you do, these two end up vanishing.
In my progress of finding the object that has the karma loss trigger, I found something rather interesting. Apparently, at one time, another timer was supposed to activate and set Castro and Felix to fight each other. It never fires even if you leave them in the cell. Probably due to bugs or limits with the engine.
As you can see, there are several issues to be fixed here. The first is only having the karma loss (reset to 5 points) occur if you them leave in the cell. A quick fix is adding a Skip If (Jump If Global) command that skips the rest of the trigger if the variable for freeing them is true. Unfortunately, there is no variable for that. What is there is a Felix Trigger Activated variable that becomes true only if you accept the information (regarding Kiran Gems) reward. If you leave the conversation early, this trigger is still activated with the Bye Dialogue, but the variable isn't set to true. A quick addition of a command to set global variable for Felix Trigger Activated to true within the trigger itself is all that was needed there.
There is one final issue. If you leave them inside the cell, they will disappear. It makes no sense why they would disappear with the door remaining locked. Even if they died somehow, there is nothing to indicate they did. So I added some additional triggers and objects that reveals two dead bodies, some rags, and some blood if you leave the area near the storeroom without freeing them. This is to indicate that they eventually came to blows while you were completing the dungeon. The idea is largely inspired by the fighting script apparently intended by the designer. Their dialogue certainly indicates they are hunger and getting annoyed with each other. Also being so close to the Column of Despise (and Hatred) should eventually cause some hostility.
Any way, that issue is effectively complete. Other issues I'm working on this week include polishing up the Leeland/Joshua scripting, attempting to fix Moonglow Tydus crashes, and fixing the key/lock pairings.
For the keys, that task is partially completed as I have a full table of all keys and locks as well some ideas for feasible locks. There are 65 keys in the game, and 19 of them are never used or get left in your inventory after being used in scripts/dialogue. Fortunately, the task for changing keys and adding locks is really simple. Check the Key Locations in Ultima IX page at the Codex wiki for more information.