Old blog posts from April 2006


28th of April

Well, it’s sure been an eventful couple of days. Not least because of uni exams and coursework which all seemed to gang up on me at the end of the week, but also because some sod decided to steal my generic HDR shader and tried to get a free mount and blade licence out of it. The resulting flameage was actually rather humorous, and more than enough to make up for the few minutes it took me to download his shader and prove that it was my own mod.*

Speaking of my fake HDR mod, I’ve given it its own description and download page, instead of just linking to TESsource. It’s also been updated to 1.2, although there are no dll or shader changes - I just improved the readme a bit, and put the ATT compatibility patch into a separate download.

Obmm is now up to 0.6.8. Builds 5 and 7 didn’t last long,** so don’t really count. See the changelog for the list of fixes. This set of updates were mainly bugfixes. Expect another bugfix release tomorrow, followed by some slightly more interesting stuff next week.

*The dll was byte for byte identical to beta 2 of my generic HDR dll. He even left my original comments in the shader file. He could have at least compiled it himself and changed a few of the file names to make it look like a new mod.

**0.6.7 lasted less than half an hour. I didn’t even have a chance to add it to my version archive. Now it’s going to have a hole in it for ever and ever and ever. How depressing...


25th of April

Obmm is now officially open source.* Thanks to DragoonWraith, I’ve also had to update omod2zip to cope with omods created by obmm 0.6** I haven’t been bothering to keep it up to date recently, because I never thought that anyone would actually release a mod in omod format only.

Obmm 0.6.4 fixed a few of bugs, including one big one. (Moving the omod folder stopped you creating new omods) The autoupdater seems to be working fine, so it should now no longer be necessary to redownload the whole of obmm for minor updates.***

A couple of people asked for a generic version of my HDR shader. I tried to create one that would work for any DX9 game, but seem to have failed somewhat. Oblivion is the only DX9 game I have installed, and works perfectly. Any other game anyone else has tried either crashes it, or completely ignores it.

*It’s always been unofficially open source. I’ve given the source to anyone who’s asked for it, and decompiling a .NET application is trivial anyway; just google reflector. The source code that reflector spits out probably has marginally more comments than the original. I don’t tend to comment much. :p

**He released a mod in omod format and with the strict rule that it was not to be repackaged and released in any other format. He’s a lot braver than I am…

***The autoupdater wont update between major versions. Once I hit 0.7, you’ll have to download the whole thing again.


23rd of April 06

obmm is up to 0.6.3 already. As with the immediate releases following 0.5.0, they’re mostly bugfixes. There may still be some unexpected behaviour if an omod shares data files with a mod which you installed manually, but the current behaviour is intended not buggy. If a data file exists but is not linked to any omod, and an omod tries to overwrite it then clicking no will delink that file from the omod. This means that if you overwrite it with another omod and then deactivate that omod then the file will be deleted.

It’s fast coming up to exam season, so my updates are going to slow down for a while. Wish me luck. :)


19th of April 06

Right. My HDR shader really is finished this time, I hope. There were two rather stupid mistakes in 1.0. Considering how many people were playing around with the shader, I’m surprised no-one noticed the first mistake.* The second mistake** was hidden in the dll, and didn’t make an awful lot of visual difference, so I’m not so surprised about it. Also, the new version of ATT seems to work perfectly together with this mod. Many thanks to the ATT team, (and daf,) for clearing that up. My HDR mod still includes the patch for anyone who’s using older versions of ATT, but anyone using the latest version should no longer need it.

obmm 0.6.0 should be out later today. Once that’s done, I intend to rewrite TESsnip from scratch, make a few more minor obmm releases to add in all the feature requests I promised to add and then completely forgot about, and then take a break from oblivion modding for a while. I’ll probably have another attempt at writing a game or something.***

In other news, Bethesda have released the second of their payable mods, and once again, it’s a complete waste of money.^ I’m not interested in the money though, since I never had any intention of buying them in the first place. I’m more interested in the BSA archive. As with the horse armour mod, both of the current BSA extracting tools suddenly found that trying to extract the new BSA resulted in a crash. 10 seconds later, Rick pointed out that if the archive is default compressed and the file size has the 1<<30 bit set then the file is not, in fact, compressed. 20 seconds later, and both BSA unpackers suddenly found that they could happily unpack the archive again.^^ I wonder if this game of cat and mouse will carry on with the next mod too? By my calculations, it can only carry on for 8589934592 mods before Bethesda run out of unused flags to set, which means at the current rate of mod release, we have about half a billion years to go before us programmers can finally relax. I wonder if the elder scrolls 5 will be out by then?

*Take a look at the 1.0 shader. It’s in the bloom pass. If you cant spot it in 10 seconds, you aren’t looking hard enough.

**I got the height and width of the bloom texture backward, in case anyone was wondering. (i.e. for a 640x480 resolution, it was creating a 480x640 texture.

***This is something that every amateur programmer goes through. Convinced they’ve come up with an awesome game design which will make them their millions, they go off on a month long programming spree after which they just get bored, give up and forget it ever happened. Apparently, about 1 in 10 of these attempts results in a playable beta, and 1 in 50 results in a commercially viable game. I’ve been through it 4 or 5 times, one of which actually resulted in a playable beta, so statistically speaking, I’m doing quite well.

^Not quite as much of a waste as the horse armour mod mind. They are very few things you could do with $2 that would be more of a waste than the horse armour mod.

^^Is this seriously supposed to be some sort of copy protection? Bury flags in the BSA archives which aren’t used by default oblivion, and then make use of them one at a time when each mod is released to break all of the BSA extraction tools? It seems a bit pathetic.


17th of April 06

My HDR shader is finished. I cant make any further improvements as long as I cant see it in game, so I wont be working on it any more. The speed should now be consistently comparable to the real HDR effect, plus I made an ATT compatibility patch to let you use the shader together with ATT’s OSD, or other features which require hooking the D3D dll.*

Next obmm release will be a beta version of 0.6. It wont be out till much later this week, or possibly even next week. I have exams coming up, so I don’t have us much free time as usual. Look forward to some interesting new features, which one or two people might even use.

*Actually, it looks like there’s going to be a new version of ATT out today which breaks this patch. If it does, I will officially give up, and recommend that no-one with ATT download this mod. The old behaviour of just crashing was way better - it made it more obvious to mod users that something was wrong.


15th of April 06

My HDR shader has continued to get faster, and is now a real viable alternative to oblivions standard HDR. In fact, a couple of people have said that it’s now faster than the real HDR, and a few more people* have said it looks better than the real thing too. The only bad news is from ati tray tools: as anyone who tried running my HDR shader with the old version of ATT’s OSD active, doing so causes oblivion to CTD on startup. The problem was basically caused by ATT mistaking my dll for the real one, and attempting to inject code into it. I assumed that ATT would be able to fix this easily by checking that a dll was in the system32 directory before trying to hook it, but instead they decided to just detect and disable my dll. The result is that anyone with the latest version of ATT installed cannot use my shader.**

On the oblivion mod manager front, I seem to have developed some competition. About half an hour after I released obmm 0.5.7 with its shiny new save game plugin listing thingy, Wrye released Wrye Bash.*** Not much of the oblivion ess/esp/esm file formats have been decoded yet, so it isn’t anywhere near as feature heavy as wrye mash was, but anyone familiar with mash may want to take a look at it.

obmm 0.5.8 is out today, with mostly minor extra features which nevertheless took ages to write.^ There is also a fairly important bug fix - if a plugin contained uncompressed NPC_, LAND or PGRD records, trying to scan it with the conflict detector would crash obmm. Also, for the philosophers who think that .omod should be a genuine archive type, it is now possible to round trip an omod to a 7-zip and back without losing any information.^^

*Although not the same ones. Presumably some shader tweaking was involved.

**Presumably it will work if you shut down ATT before trying to launch oblivion. I doubt that the old trick of just turning off the OSD will still work though.

***For anyone not familiar with morrowind’s wrye mash, one of the features is to check the currently active plugins against a list of the plugins required by a save game.

^Adding new omods by double clicking them when obmm is already open is a lot harder than it sounds, especially when .NET refuses to let me use named pipes for no apparent reason whatsoever. I didn’t want to use sockets because I didn’t want security conscious people complaining that obmm was trying to access the internet, and remoting would have been major overkill just for a single string array. Somehow I ended up using a temp file. Very messy and unprofessional looking, but at least it works.

^^Actually, you do lose the omod creation date. This is deliberate.


13th of April 06

I spent most of yesterday fiddling around with my fake HDR shader. It’s was running a lot faster than the 11th, and now I’ve made a further update today which has sped it up again. Staring at a wall in the prison cell, I’ve gone from 17 -> 29 -> 33 fps, so it’s getting better.* I’ve also tweaked the bloom down a bit. NPCs look a bit less radiant now.

I also released a new version of TESsnip, which I had hoped would be able to open oblivion.esm, but which actually just sits there chewing up memory until it crashes. It’s fine for opening up and modifying esps though.

*Admittedly, I do get near 100 fps with the shader turned off, but I did warn you that it wasn’t going to get much faster.


11th of April 06 - updated*

Yesterday saw the release obmm 0.5.5. In an attempt to improve omod-zip relations, I’ve added the ability to directly convert an omod to a zip or 7-zip file. There’s also single omod conflict reports,** the ability to search and save the contents of the text editor, the ability to sort esps and omods by file size, and a ‘force disable’ option to get rid of persistent omods.

I’ve got something a little different planned for today. You’ll just have to wait and see what it is though - I’m not going to make any fancy announcements yet in case I’m not able to finish it.***

*Memo to self. Writing blog entries at 5:30 AM is not conductive to good grammar.

**These are very messy. They will be majorly cleaned up for 0.5.6

***At the time of updating this blog, I’ve already finished and released it. It doesn’t actually work, but at I did at least finish it. :) (It was a HDR lighting shader using sm2.0, in case you’re wondering.)


9th of April 06

Yesterday saw the release of obmm 0.5.3, and was my last attempt at fixing up EDID tracking to the point where it was useful and useable, instead of just a buggy mess. Today, I decided that I had failed, and 0.5.4 stripped out all the ‘advanced’ conflict detection. As a result, it runs at about 10 times the speed and probably has a tenth as many bugs. On top of that, you can still use the advanced conflict detection anyway - just click the conflict report button. The big downside of this change is that if two plugins both alter, for example, the same levelled list, obmm wont automatically alert you - it is up to you to check by running the conflict report before activating the plugin.

I also released 0.5.4’s new conflict report generator as a stand alone utility yesterday, and iIt seems like it’s rather more popular than obmm is. The relz thread I created saw over 100 posts in under 2 hours. Things have died down a bit since then, luckily.

One really good bit of news that came from this new conflict report business is that I invested some time in working out oblivions compressed record structure. This means that today sees a new TESsnip release which can cope with compressed records without crashing. Not only that, but you can edit them normally, just like any other sort of record.* Enjoy.

*But it still cant edit oblivion.esm. In yet another fit of non-standardness, oblivion.esm appears to contain two subrecords which are greater than 2^16 bytes in size. This means that their size cannot be represented by the 2 bytes available in the subrecord header. Beats me how oblivion reads them, but TESsnip just crashes out when it tries.


7th of April 06

Two new releases yesterday. 0.5.1 fixed a few bugs in 0.5.0, added a ‘clean all’ option and took it out of beta status. 0.5.2 added the ability to directly convert rar and 7-zip archives into omods. I couldn’t get my hands on any c# libraries to unpack either format, so I used the ‘official’ precompiled unpackers instead. unrar.dll takes care of .rar files, and ‘7za.exe’ takes care of .7z files.*

Next up is a full conflict report generator. The current conflict report only lists conflicts between active esps and inactive omods. This makes it fast enough to be used in real time, (i.e. you can make the omods change colour instantly just by unchecking an esp,) but it doesn’t give as much information as it could do.

*And .z. But nobody uses .z.


6th of April 06

Well, 0.5 is out. Conflict detection is way better than 0.4’s and now picks up almost all conflicts. I’m still working on the NPC, CELL and WRLD records though. I’ve also fixed up the installer - if it wrongly thinks that you don’t have .NET installed, you can just skip the check. Also, it now links to the download page instead of the file, and if it detects that you are running a 64 bit version of windows you get linked to the correct version of .NET.* Go read the changelog to find out what else has changed. 0.5 will retain its beta status until bug reports start to dry up a bit.

While working on obmm’s conflict detection, I came across another record type which breaks my esp parser: the NPC_ records. As far as I can tell, they don’t contain any subrecords. I responded to this by just ignoring them, which isn’t the best way to fix things, but which will suffice until the esp file format is decoded further. Even with this tweak, TESsnip still crashes when trying to parse oblivion.esm, which presumably means that there’s even more non-standard records hiding in there somewhere.

*It’s nice to know I’m not the only person who completely forgot about the existence of windows x64. Bethesda did too, with the result that anyone who bought the horse armour mod on windows x64 cannot install it. For some slightly twisted reason, I find this amusing. I cant believe anyone is actually prepared to pay money for the horse mod anyway.


4th of April 06

I posted a message on the TES forums yesterday asking what everyone's problem was with .NET. I was expecting responses like ‘because it’s made by microsoft’, and ‘I don’t want useless junk on my computer’, and I did indeed get them. However, judging from some of the PMs I’ve received, there was another major reason - people are running pirated copies of windows, and .NET refuses to install on them. A lot of these people even had the cheek to ask me to write a new version of obmm that doesn’t require .NET, just so they can run it on their illegal machines.* I wonder just how many of them even own a legitimate copy of Oblivion.

Work on 0.5 is progressing smoothly, although not as fast as I would like. I have this little thing called real life getting in the way, and the fact that there’s only one working computer in the house and that my little sister/parents want it all the time doesn’t help much either. I’m still hoping to get it out this week, but may have to do a Bethesda if I lose any more time.

*For the record, I will not be making a non .NET version of obmm. Ever. This isn’t because I’m a .NET fanboy and want to force everyone to install it; it’s just that C# is my most proficient language by far. At best, using something else would have majorly delayed obmm. At worst, it would never have been released at all. As I’ve said multiple times before, if someone else wants to write another mod manager without using .NET, then they’re more than welcome. The link to the omod file format is over on the left.


2nd of April 06

What with today being a Sunday and me being one of those religious types and all, I didn’t get an awful lot of work done today. I did make another half hour obmm bugfix though. 0.4.5 generates crash dumps,* and points out if the user has installed it to the wrong location. 0.5 is still on track for next week.

p1p3 had the great idea of saving a screenshot into an omod and displaying it in a little preview box when the mod is selected. I don’t care if it holds up release of 0.5 for a week - that idea is definitely going in. Also on the way are far better conflict reports. obmm can now detect two mods modifying the same levelled list, or other item. It cant yet detect two mods which modify the same cell though, and of course there’s a whole host of different ways for mods to conflict (through scripts, for example,) which obmm will never be able to detect. Another nifty feature is that when you’re putting together an omod, you can right click on an esp and click ‘scan for required data files,’ which will look through the esp and automatically add any required data files to the omod. (Again, it’s slightly limited in that it cant yet pick up textures required by nif files. There are probably other ways for a mod to require a data file which it wont pick up yet too.) There’s also some interface changes, the ability to edit existing omods, a ‘check for updates’ button, many scripting enhancements and a whole host of other minor tweaks.

*If you can call them that. A memory dump or register contents or even the code address of the exception has no meaning for a .NET executable. The only thing that the crash dump contains is the error message and a stack trace. And because the executable is a release build with the debug info stripped out, the stack trace only contains function names and not line numbers.


1st of April 06

Started off the day by fixing the CELL crash issue with TESsnip. Bethesda never seem to be able to stick to one format for anything*, and in this case the problem was that they decided to nest multiple GRUP records. As far as I can tell, the GRUP containing the CELL records is the only place they do this. TESsnip just strips out the extra GRUP's now, which may or may not cause awful problems later.

Next up was yet another obmm bugfix. (0.4.4) They've been coming out daily ever since I first released 0.4. I'm not going to get any time to work on 0.5 at this rate... Anyway, todays fixes were purely cosmetic. If you install too many omods and they go off the bottom of the list, you no longer end up with messy overlapping text. Plus the file extensions are no longer shown, which was another issue that bugged me.

The official forums seem to be divided into 3 camps. Those that love obmm, those that hate it and those that have never heard of it.** Some of those that hate it have valid reasons, like not wanting to install .NET. What most of them seem to lack, however, is any respect for modders whatsoever. Any modder who dares release a mod exclusively in omod format gets flamed. Instantly. This sort of 'I don't care if it's extra work for you. Give it to me _now_' mentality used to be the exclusive property of oblivion general. It's a real shame to see it spreading to the other forums too. The fact that I've released an omod2zip converter that doesn't require .NET 2 and can convert omods to normal zipped mods extremely easily never even seems to get mentioned.

*This was my excuse for never finishing my morrowind script compiler, and may or may not bare any resemblance to reality.

**99% of the forum population, most likely. I don't go in for advertising much, unlike certain mod site owners who are using automated scripts to spam anyone who dares make a thread in the oblivion mods forum with REL in the title.