If DISE is stuck trying to update, run this command in Command Prompt.

Saturday, December 31, 2011

Painting test :)

I am just testing the map feature and painting on it within DISE. Doesn't look perfect yet but it's coming along! :) Actually, after testing a bit more, I'm not entirely convinced that DISE does it wrong after all. Here's why:
  1. Paint in DISE, then save.
  2. Restart DISE, then reload the game-save. Looks good! Just as I saved it.
  3. Load it in-game, then quit the game (which saves it).
  4. Load it in DISE. Looks just like it was in-game (with the errors).
The game was probably never meant to display explored areas like this, but I am slightly disappointed. :)

Preview: Visual map

It's not ready for release just yet, and I still have some concerns regarding performance, and the explored area seems slightly off at the bottom... However, please check it out! :)

Update: The explored area was correct after all. I had simply explored slightly more in-game before saving and loading it in DISE! :D
Added a new screenshot to "prove" it! Well, except one tile is either wrongly explored in DISE, or the game doesn't like it... (; - -)

The map is from, by the way! :)

Would you like a notification when DISE finishes saving?

You know, a tiny popup in the main window or something that stays for a second or two, then disappears. It's just to see that something happened (DISE should never fail, though). Many programs has this fancy feature, even if it doesn't take long to save.

Would you like to have such a feature anyway? Please answer the poll! :)
Oh, and I'll of course make it optional if you vote for this. :)

Please see examples further down.

Should I do it?


Thursday, December 29, 2011

Application icon for DISE

I guess it was about time I made an icon for DISE. This is what I have so far, and I plan to use it for DISE. :)
What do you think?

Another sample. I think it can be improved. Trying to make something that will look alright as a 16x16 icon (and favicon).

Update 2:

Release: Alpha 48

I'm pretty happy to release this one! :D

What's new
  • Inventory lists:
    • Delete items with the Delete key.
    • Clear the selection with the Escape key.
    • Navigation with the arrow keys (up/down).
  • Medkits can be assigned to quick slots.
  • Finally tracked down and caught a bug which caused a crash on startup, then I released it back to nature. This was more likely to happen on slower computers because the bug was so quick. I was unable to fix this earlier because I couldn't detect the bug's presence easily (don't get me wrong, not saying your computer is slow).
  • Fixed a bug where the integrity check on update would fail if the hash had zeroes in it. I made sure that the hash for in this release doesn't have zeros in it, to make it a bit less painful for you.

Tuesday, December 27, 2011

Release: Alpha 47

If you try to reveal the map, please look for anything that could be missing or wrong. :)

What's new
  • Reveal the map (screenshots). It's on the Misc. tab. Experimental, since all the values are just set to max, but it seems to work.
  • Changed the item attributes randomizer to generate values all the way up to 4294967295 (highest possible value), after a user discovered the value being higher that the current max in the Bloodbath Arena DLC.
  • Minor changes.

Revealing the map

I'm experimenting with revealing the map, and I think it's pretty successful so far.

Spoiler alert

Here are some screenshots taken from a new game, before and after revealing the map.

Chapter 1

Chapter 10

If you use DISE alpha 42-45, you should update

While writing this post, I removed 4 other posts related to this, to keep the blog cleaner.

These versions are affected by a "feature" gone wrong (a bug, in other words).

They have one or both of the following issues:
  • Destroyed/Empty backups.
  • Will never receive automatic updates again.
I thought I could simply apply a hack on the server to crash these versions (so that you would know something was up, and would check the blog), but the code proved to be more robust, so it is impossible after all. Sorry.

Of course, DISE shouldn't corrupt your game-saves (especially not for the PC), even if you lost backups.

Monday, December 26, 2011

Release: Alpha 46

Please don't use alpha 42-45 because backups will be broken/empty. I really am sorry for any inconvenience.
I'll do better to make sure something like that doesn't happen again.

What's new
Fixed a bug/failed feature with backups. The "feature" was simply removed for now.


Release: Alpha 45

Warning: Backups are broken

Quick fix before I get some rest. :)

What's new
  • Removed quick slot from exported data. You could end up with two weapons using the same quick slot. Or at least it would look like it, and I personally don't think it looks cool. :)
I didn't bother providing backwards compatibility with alpha 44 for the few people who used alpha 44 (maybe between 2 and 5?), so you have to manually remove the QuickSlot line from the exported file, in order to import it in alpha 45.


Release: Alpha 44

I chose to skip the official release of alpha 43 so that everyone receives this update. :)

Some of you may have been affected by the trouble I had just now, and more of you will unfortunately not be able to receive further updates if you're on alpha 42 or pre-43. The only thing I can do is apply a hack on the server which will crash your alpha 42/pre-43... Can't say I feel tempted, even if I want you to know to check the blog. :(

However, there's new, cool stuff in this release! :D

What's new
  • Export/Import inventory to/from file.
  • Export/Import game progress to/from file (experimental).  Please tell me if something important is missing when you find out (assuming you will).
  • Added map/location/spawn point/active quest to Preview tab (no proper text yet though, and it's read-only).
  • Improved error detection on updates.
  • Suppressed silly error message after updating, when everything went alright after all.
  • Minor improvements/changes.
  • From pre-alpha-43:
    • "Fixed" a crash when trying to open files from the menu. I am not even sure what caused it in the first place. I didn't touch the code, and it still fixed itself after I tried many things.
    • Some minor changes.
Exported inventory & game progress
The file is exported as XML. Please see the contents to see exactly which information is stored. Please note that the info stored there may change.

Since I am not able to read quest progress data 100% correctly yet, I just dump the raw data. Therefore, it cannot be converted to a different format (PC -> Xbox 360). It is safe to try however.


Saturday, December 24, 2011

Pre-alpha-43 test (update: new package)

Please don't comment on my blog if you experience the same crash(es) in this release, because I'll either ask you to e-mail me or ignore the comment. You can however comment if it works fine, and if your issue hasn't been commented on already (include the version of DISE (mpress, upx ultrabrute, upx or uncompressed), and where/when it crashed so that we know). d-(^_^)o

After trying all 4 versions of DISE and you still have the same crash(es):
  • Please e-mail me, and
  • include where/when it crashes (exact steps to reproduce, if possible),
  • and which operating system you have (Windows XP, Vista, 7, etc).
I ask you to e-mail me so that I can ask for more specific information if needed. I won't send spam, and as far as I know, I don't have any viruses that snatches your e-mail address to send you spam. I won't sell your address either. I hope that will make it easier for people to e-mail me and not continue posting on my blog after I ask them to e-mail me. :)

The test
Since some people are experiencing a strange crash, I imagine a few possible reasons:
  • Issue was introduced after upgrading wxWidgets (C++ framework). Maybe bug or change in behavior, and I need to update my code.
  • The EXE packer/compressor (UPX). It's like zip/rar/etc, just specifically made for EXE/DLL/etc.
As an attempt to rule out the packer, I have included 4 versions of DISE:
  • Uncompressed/Untouched
  • UPX (highest compression)
  • UPX (highest compression and "ultra-brute")
Don't be alarmed if your anti-virus software complains about any of these.

Download (new package)

Thank you for helping me help you. :)

Friday, December 23, 2011

Release: Alpha 42

Thanks for all your suggestions and for reporting issues. Your patience as well. :)

Note: If you get this message saying this after updating, please don't worry about it:
"[...] dise.exe.updbak' couldn't be removed [...]"
The file was probably removed after all, and who knows why it says that it couldn't. The next version of DISE should suppress the message. You're more likely to see similar messages (even when nothing was wrong) due to logging in wxWidgets 2.9. :)

What's new
  • Updated wxWidgets to version 2.9.3.
  • Worked around a very strange issue where "0" somehow wasn't "0" (when it seemed to be, and it worked fine before). The issue just came out of nowhere, causing a crash when starting DISE and no update was found. Bug in wxWidgets or something else. Just strange.
  • Switched item condition slider (which didn't do anything anyway) with a text field because I haven't figured how to calculate the max condition. -1 = unbreakable/not used (usually firearms and other things).
  • Added button to randomize the "attributes" value.
  • Added some more tool tips (hover your mouse cursor over a text field, etc, to see info).
  • Minor changes.

Thursday, December 22, 2011

Release: Alpha 41

If you have trouble with user preferences or just want to reset everything, this should make it easier for you.

What's new
  • Reset/Delete all preferences (Preferences dialog).
  • Added command line argument "-deletepref" to reset/delete all preferences. Just run "dise.exe -deletepref".
  • Game storage location doesn't have to exist, so it can now be cleared or set to anything.

Release: Alpha 40

Yay for increasing the release number! It's easy to just bump it up and keep track of less numbers. I guess someone else thinks so, too, with Chrome 16. Wait, I thought it was 14, then 15 just moments ago. Oh well!

What's new
  • Fixed a bug introduced in alpha 38. If you didn't have a game-save open before clicking OK in Preferences, DISE would crash. Let's hope I didn't break anything else! (^o^)/

Release: Alpha 39

I think that some of you will like this release! :)

Semi-geek alert
Also, I really hope that you won't get a file integrity error like with the last update. I attempted to improve the update download process to hopefully make it more reliable.. I think I did an alright job.

Then, as I was looking into why the downloads were corrupted after downloading them, I noticed that the MD5 hash was still wrong after my wonderful attempt to fix/improve it. How come?

After my efforts, I went into my database and saw that it was indeed wrong. In the database, I mean. I had swapped the hash with a different one. ( ̄。 ̄;)

What's new
  • Move/Copy items from one game-save to another! Open DISE for each of your game-saves, then simply drag & drop items between them. :) Move = drag & drop, Copy = Ctrl + drag & drop. It's best to scroll all the way up if you select multiple items, or just select one at a time (limitation by virtual list controls, and even MS Excel has this limitation).
  • Preferences dialog can be resized (workaround if your computer is setup to use big fonts/high DPI).
  • Improved the update downloading process. Let's see if it defeats bad downloads (when I haven't accidentally swapped the hashes).
  • Fixed/Improved: If you have the game on Steam, the game storage location (game-saves and profiles) is saved automatically when DISE starts. This way, you won't need to open Steam first the next time you start DISE.

Tuesday, December 20, 2011

Release: Alpha 38

I have been quiet lately, but I did go back to work again, and I give you a better DISE now. :)

However, I really wish I could have included all the features I planned for this release. Those will have to wait until I (or someone) figure(s) out how to properly read the quest progress data.

What's new
  • Detects Xbox 360 content package file (which contains your actual game-save) and tells you what to do about it instead of saying that the file is unsupported. This is temporary until DISE supports these packages. :)
  • Improved support for Xbox 360 game-saves. Hopefully, they will not get corrupted anymore.
  • Export/Convert game-save to different formats (experimental): (depends on reading the quest progress correctly)
    • PC (load this in-game)
    • PC (raw/uncompressed)
    • Xbox 360 (inject this into content package)
    • Xbox 360 (raw/uncompressed)
  • Optimized skill trees. Switching character is quite a bit faster.
  • Optimized app startup a bit (a little faster).
  • Fixed Xbox 360 game-saves being repaired using data from a PC game-save.
  • Save item order (inventory). Right-click a list and save the order. * Please read more below.
  • Minor fixes and optimizations.
"More below" :)
Save item order (inventory)
Items are normally ordered in-game by the time you picked them up. You can now sort them in DISE, then save the order, but there are some catches:
  • New items you pick up in-game will be in the order you pick them up.
  • The items can't be sorted completely in-game (even if they can in DISE). This is because items are stored in separate lists in the game-save file. There are 4 lists (quick slots, storage, etc). It means that the next time you open the same game-save in DISE, the items will still be sorted, but grouped together by those lists. DISE combines all lists into one (except for storage) so that you don't have to operate with different lists. If you sorted from A-Z, items may appear from A-Z 3 times in your inventory (3 lists). I hope I explained it alright.
  • Weapons assigned to quick slots will not be sorted in-game. The game depends on the actual order in the file, so changing that would mess up your quick slots.

Monday, December 19, 2011

Alpha 38 coming soon :)

I'm doing some testing, and getting help from someone else with testing as well. If it goes well, I can release alpha 38 within 24 hours or so. :) Thank you for your patience!

This version should have improved support for Xbox 360 game-saves (my tests were successful but I'll test a bit more), optimizations and some other fixes.

Thursday, December 15, 2011

This is what's up lately

Geeks needs some rest, too!
Not my cat, by the way.
You probably noticed that I haven't released a new version of DISE for a little more than a few days?

I made some improvements for the next version already, and I realized that I had to read the whole game-save file in order to implement a feature that I had already pretty much completed.

That's when I started working on understanding the quest progress data which I mentioned before, and after countless hours with hard work, I was still unable to figure it out, exactly.

I usually never give up, and... Well, I'll admit that I forgot to take care of myself, and realized that I needed a break from everything.

I'll be fine soon, and so will DISE (with or without quest-related features and other planned things). :)

Saturday, December 10, 2011

Trying to read quests properly, but I'm stuck and need help

This post is a bit technical, so here's the GEEK ALERT.

Update Jun 2 2012: Source code: Reading quest data from saves (you can help!)

For the last few days, I've been trying hard to figure out exactly how the quests are read by the game, for several reasons:
  • Improved fixing of corrupted saves
  • Converting/Exporting game-saves
  • A step towards a quest progress editor
It has proven to be a bit difficult for me, but I haven't given up. I could however use all the help I can get if you're familiar with x86 assembly code and using a debugger/disassembler.

I don't expect to receive any help from anyone, but I would appreciate it if you can and if you're willing. :)

I'm going to show you some of my work, in case you get interested and you're up for helping. Maybe it'll even help me understand it better just by posting this and looking at it again.

The data I'll show you was taken after starting a new game (prologue), going down into the elevator and stepping right outside to reach the checkpoint.

All quest progress data:
04000000 E59A39DB 02000000 01 03000000 01 04000000 00 26000000 2F000000 91010000 00 01000000

The parts being read will be highlighted. The current values being read will have this color while subsequent reads will have different colors.

I'm going to name the main function readQuests, and the functions inside readQuestX<number>, and some in there, readQuestsX<number>_<number>, etc.. Just to call them at least something that is somewhat meaningful, but without nesting them deeply.

Question marks in the code just means that I don't know what they are and/or where the values come from.

My "code" here isn't in any specific language, and doesn't include all the logic. It's just an attempt to explain kind of how this works.

Please note that I also don't guarantee that the info here is correct.

04000000 E59A39DB 02000000 01 03000000 01 04000000 00 26000000 2F000000 91010000 00 01000000

uint32 count = 4
 // not equal to the number of quests seen in-game, nor the amount of "tasks" or "steps"
uint32 unk1 = 0xDB399AE5
while i < count:

   This is read later
   This is read even later
04000000 E59A39DB 02000000 01 03000000 01 04000000 00 26000000 2F000000 91010000 00 01000000

int32 questId = 2 // maybe
bool thisIsTheLastQuest = true // maybe something like that (last quest in this loop), but I don't know. Probably not hasFinishedQuestStep (or task or whatever). Update: this name must be wrong, but not totally off.

if (questId < 0) or (questId >= 403): return false
if not thisIsTheLastQuest: return true
ptr = ? // pointer to some interface or something?
if ptr: // maybe safe to assume that this always happens
count = ?
while j < count:
  x = address to the memory reallocated earlier
  // I think it reads int32 here sometimes, but not with the quest data I'm using this time

// This is where it gets a bit tricky
readQuestX3_2() or someOtherFunction() // calls readQuestX3_2() the first time, but calls someOtherFunction() the the recursive call (at least the first call)

   This is read later
   This is read even later
04000000 E59A39DB 02000000 01 03000000 01 04000000 00 26000000 2F000000 91010000 00 01000000
int32 unk1 = 0x26 // or 38 (dec)
if unk1 == 0: return true
bounds check on unk1, return false if outside of bounds
return true

// Loop + read recursively
count = ? // 1 in this case
while i < count:

// doesn't read from the file, but reallocates some memory

In the end...
I managed to highlight all of the reads here, but I'm having a hard time figuring how the game chooses to read sometimes and not read other times, and figuring out the count value in some loops.

I wonder if the game just knows the values already, so that we can't simply read the quest data without knowing what the game already knows prior to reading.

Like I said earlier, I don't expect to receive any help from anyone, but you know how to contact me. :)

Tuesday, December 6, 2011

How to edit saved game with DISE and Modio (Xbox 360)

This less-than-a-minute long video I made shows you how to do it (as the title says) quick and easy. Please pause/rewind if it's too quick. :)

Modio version: 3.0.
DISE version: alpha 37.

You can get Modio from the official website or from my download section.
More user-made videos can be found here.


Monday, December 5, 2011

Automatic extraction/injection of game-save (Xbox 360)

I happened to come across HashIt by synmuffin of, which is a tool for resigning/rehashing e.g. the save_0 file from the Xbox 360. From the looks of HashIt's code (I had a quick peek), it can extract and replace files, and of course resign/rehash the package. It's open source and coded in C++/Qt!

If you read my earlier posts, I said that I had no time to make an extractor/injector at that time, but by studying HashIt's source code as well as articles on, I look forward to learning more about this and further developing DISE. :D

Release: Alpha 37

Those who don't have Steam installed may find this release less annoying. For everyone else, there's nothing new this time. :)

By the way, feedback on the Xbox 360 support would be much appreciated, perhaps even some game-saves I can do some testing with. It's still experimental, even if my own tests indicate that it works (more or less, though with a few quirts which may or may not be DISE's fault). :)

What's new
  • Improved handling of Steam not being installed.

Sunday, December 4, 2011

Release: Alpha 36

If you used an old version of DISE to change your character and/or reset your skills and you're having problems now, then you should reset your skills again. The reason is that only half the job was done before, and DISE now relies it being done properly. :)

What's new
  • Improved handling of improper "skill tables" (or what to call them), and suggests resetting your skills.

Skills icon pack

The icons are based on the ones on

Simply extract the archive to where you placed dise.exe. The icons should be in assets\skills\images.



Release: Alpha 35

Things can't always go right the first time! This fixes some mistakes I did in the last release. :)

What's new
  • Changed item color from "Purple" to "Violet". I can't always tell the difference easily between some colors, but an internal file in the game does mention "violet" in this context, instead of "purple". :)
  • Embedded the font I use on the Skills tab, so that the skill trees will be displayed like in the screenshot.

Release: Alpha 34

Note: This release is not heavily tested, so it's okay to send me hate mail. I really like happy mails best, though. :D

Edit: I forgot to embed the font DISE uses on the Skills tab. I'll fix it in the next release!

For now, I thought about implementing something very basic for adding skills and such. I ended up putting some extra efforts into it, so it's a little less basic than I planned. Still needs some optimizing and other improvements, though. :)

As always, please report any nasty critters! :D

What's new
  • Edit your skill trees. Add/Reset individual/all skill trees. Whether it works or not, you can also give one character's skills to to a different character.
  • Changing character: Instead of forcing resetting skills, only suggests doing it.
  • Changed item color from "Purple" to "Violet". I thought I changed it but I forgot to change the actual text. :S I'll fix it in the next release!
Supports skill icons, but the icon pack will be available separately a little later. :)

I don't know if most of these even work. Either way, you could pretend that in this mess lies the key to surpassing yourself and evolving into an ugly, raging mutant who is practically invincible. Mankind is not worried about petty zombies anymore. :(