Tag Archives: Diablo 2

Diablo II Mods and Code Stuff

Hello all. My apologies for not updating this website more.  My life has become complicated lately, and in these uncertain times I find it difficult to want to write about it.  A shame really, as the site has never been more popular.  Seems like every time a new game comes out lacking multi-monitor support, I get hundreds of new visitors and users for Cursor Lock; a few weeks ago, it was Cites: Skylines.  And today with the announcement of another new Deus Ex game, my version of the soundtrack is hotter than ever.  It does make me feel good to know that I can produce things that people need, even if it’s only for video games.

Speaking of video game content, I spent a lot of time a few months ago working on a new class for Diablo II.  Well, it’s not really a completely new class, more like a subclass since I only changed one skill tree for the Amazon.  It just really bugged me how the Amazon felt so lame compared to the Diablo 3 Demon Hunter.  It’s really difficult to keep the monsters from swarming the Amazon, so I designed some Demon Hunter-inspired skills to help remedy the problem, such as caltrops, turrets, and smokescreens.  You can see these skills in action in the video below.

I also just wanted to fulfill my desire to do some really hardcore modding for Diablo II.  The game has a rather awkward system for making modifications.  If it were made today, we’d probably have XML files and LUA scripts to work with.  But since it was made 15 years ago, we instead have to settle for massive CSV files.  You can find the Demon Hunter mod on my Diablo II mod page.  And massive props to the Phrozen Keep for continuing to support D2’s modders.

Another thing that bothered me about Diablo II for so long is that when you die your corpse keeps all your equipment on it, and you respawn basically naked and unarmed.  Your only options are to run in, snatch everything off your corpse, and teleport back to town, or rage quit and hope that your corpse returns to town like it’s supposed to.  Obviously, this is almost always zero fun and is why no games handle death like this anymore.

Unfortunately, there’s no way to change this in the game’s CSV tables.  But I didn’t let that stop me.  Every now and then, a problem comes along which must be solved through assembler hacking, and this was one of those times.  But I didn’t really have a clue which function was involved in character death.  So, I just put breakpoints on every function in IDA and attached to the running process.  It took a while of breaking, disabling breakpoints, and resuming, but I eventually narrowed it down to several dozen functions involved in death.  Some functions did death animations, some saved character data, but then I found a suspicious bit of code that would loop 14 times—the number of equipment slots.  This was the code where the game looped through each equipment slot and moved the item from the player to the player’s dead body.  And then there was nothing left to do but some trial and error to figure out where I could safely jump over the offending code and re-enter.  Now the only problem is that this mod will have to be updated every time there’s a Diablo II patch. 😥

Here we see the fateful jump operation to bypass the character equipment being removed.

Here we see the fateful jump operation to bypass the character equipment being removed.

Since then, I’ve been turning back to more PHP/HTML/CSS/JS coding.  I’m working on a project that I can’t disclose at this time but which quite possibly could be my most epic work yet.  Wish me luck in completing it.

Recently, I’ve also been using PHP as my go to scripting language for everyday projects.  A couple days ago, I wanted to be able to pull all GPS image data from a directory and display it in Google Earth.  PHP has file IO, EXIF, and XML libraries, so it was real convenient to bash out a script using that.  Then I realized I had created an account on Github recently to comment on some projects and thought why not just put this code on there.  So I did.  Maybe I’ll add more small projects like this in the future.

Posted in Modding, Programming, Website | Tagged , , , , , | 2 Comments

Gaming Habits

Going to try to do a less epic blog post today. Realizing more and more that I just don’t have it in me to work on the site much anymore–stupid day job.

I just updated my mods for Diablo 2 to support patch 1.13. Really there wasn’t much difference between 1.12 and 1.13 as far as the modded files were concerned, but I diligently checked all the files regardless. Only the Balance Better Drops Mod needs to be updated to work with 1.13, although I’m betting it’ll probably work fine regardless as the changes were so slight. Find the mods here.

Also on game mods, I did a small mod (more of a hack really) for Tropico 3 a couple months ago that lets you put your own music into the game. The hardest bit was decompiling the compiled LUA code that controlled what music files could be played (a playlist), which I did by hand since no existing decompilers worked. Then I wrote my own LUA script to load whatever music I wanted and modded the LUA compiler to make Tropico-compatible compiled LUA files. You can find all the hot details of the efforts on this thread of the official Tropico 3 forum, and a guide written by another member that sums up my process on this thread.


Lego Batman Complete

While I’m on gaming, I’ll just go through what I’ve been playing recently. Obviously, the girlfriend and I are playing Diablo 2 coop again. In between that, I’m back to trying to beat The Witcher (Enhanced Edition this time). I also replayed Halo (action is still good, but shorter and uglier than I remembered), Titan Quest with Kaylen, and Startopia. Fallout 3 ruled December, except for the part of winter break where Kaylen and I got 100% on Lego Batman (screenshot at right).

Posted in Gaming, Modding | Tagged | Leave a comment

Biding Time

Until President Obama waves his hand and magically fixes the economy so I can find a job, I’ve been biding my time with several projects as usual. As mentioned in my post a couple months ago, I expected to complete a major overhaul of the content system by the end of last year and amazingly actually did so. I felt like the content pages were too bulky with the varying number of images and description lengths, and it didn’t look very clean. So I crafted a custom vertical tabview to organize the information into specific tabs for description, images (dynamically loaded with AJAX), changelog, and downloads (also AJAX). The default tab, called “Vitals”, is a combination of the other tabs, showing general information, a shortened description, one image, and the number of total downloads. The succinctness of the vitals tab helps keep the tabview height down and thus all the items on the page look uniform.

Of course, it all looks rather well until you go to test in Internet Explorer. Despite my attempts to keep everything within standards, IE6 still has issues such as flickering tab button background images and the always enjoyable broken box model. However, IE7 isn’t without its problems either and the tabviews seem to adversely affect my fixed positioning hack from last post.

I’ve also been redoing parts of the site to use more CSS and less inline formatting. Most of the web seems to be in love with CSS to the point that they blindly use only CSS, but I tend to be more pragmatic about it. Certainly, CSS is useful for centralizing style information that is to be used repeatedly or as part of an overarching theme. But the CSS standard is not quite complete enough to handle everything a developer might want to do. I frequently need a property that tells an element to be springy (i.e. fills up the remaining height or width of its parent), but there exists no such property in CSS2. A trick that I like to do with (100% height) tables is to use them to keep something vertically centered in a page or at the bottom of a window but able to expand. CSS has no way to do these things; its vertical-align property only works on inline elements (and don’t get me started on margin hacks). So I think I’ve made my point: it’s a good start, but it’s not there yet. (Plus: IE6. So even if it were there, we still couldn’t use it.)

But I haven’t just been diddling web development lately; I’ve also been back at VB.Net to release a public beta of my much slaved over alarm program cleverly named “Snake’s Alarm”. Not much has changed since I last worked on it in earnest in August 2007. I finally fixed any instability with the FMOD system playing two alarm sounds concurrently by just preventing it from doing so, figuring there wasn’t much use for two overlapping sounds playing. I have also perfected the snooze feature by adding options to control the max amount of snooze time allowed and to turn off the monitor when snoozing. There’s still a lot left in the TODO file, but this version is still completely functional and reliable.

In hardware news, I recently replaced my Radeon 9600XT with a GeForce 7300GT as a stopgap upgrade until I can finally afford a new system. It was seriously the best AGP nVidia card I could get on Newegg–they’re going like hot-cakes (whatever the hell that means). I had my eye on a 7600GS until it sold out when I went to buy. Now the 7300GT that I got is already sold out. I wrote a lengthy review on Newegg for the video card about a week before it sold out (albeit one person labeled it as helpful before then) that I’m going to republish below.

Pros: I haven’ t done a lot of benchmarks, but it looks to be about 60-120% faster than the Radeon 9600XT it replaced, depending on the game or benchmark of course. I chose to switch to nVidia because this card supposedly runs cooler and with less power than ATI’s final AGP offerings (and to prevent fanboy-ism). My tests with RivaTuner show the core runs a bit hot at idle (~116°F), but it only creeps up marginally in most games (~140°F). Video stress tests put it at about 166°F. Overall, the 7300GT’s performance is only somewhat noticeably better in most newer games compared to its predecessor.

Read More…

What’s silly is that I’ve mostly been playing Diablo 2 (an eight year old game) since getting this new video card. I convinced Kaylen to play it with me, being that it would run on just about any computer and she was in exile over winter break. Though it seems I got her hooked since we played all the way through with my Paladin and her Sorceress. Since the first completion, I’ve been poking around in the game’s data files for any changes I can make to perceived flaws.

My biggest complaint about Diablo 2 has always been that you level too frequently at the beginning and hardly ever later on. I did a huge spreadsheet with player experience, monster level, and level-to-area calculations trying to come up with the best solution for a balanced and steady leveling system. One of the most telling graphs of this data is at right, showing the percentage increase in experience needed to get to the next level compared to the last level. In vanilla Diablo 2, after level 11, the player needs 25% more experience to get to each subsequent level, which can lengthen the process significantly as one approaches level 27, where the experience difference levels out at a more respectable 9%. I created a modification to the leveling system that merely smooths out the experience difference from level 5 to 30 and balances the resultant increased difficulty by lowering monster stats according to how far behind in levels the player is.

I’m not sure if it’s all as complicated as it sounds, but when I finally release the mod, I’ll be sure to include the spreadsheet for others to marvel at. I’ve also done a number of smaller mods and have already uploaded three such mods as of this post. One fixes the ever-annoying game font where the 5’s look like 6’s–a huge confusion when looking at item stats. More will follow as soon as they’re thoroughly tested in our new Barbarian and Assassin game. 😛

Posted in Benchmarking, Hardware, Modding, Programming, Website | Tagged , , | Leave a comment

Image Browser, CoH Mapping, Titan Quest

I spent most of spring break drinking on the beach, and then I had sex with a fugly, fat chick cause I was drunk and thought she was hot. No wait, that was probably you. I actually spent most of my spring break coding an image browser in PHP.

It can mostly just read the files in the directory and match up thumbnails to full images. But it tries to link up images to entries in a database for extended information, like description and hits. Directories are a little more involved, requiring a full traversal of subdirectories for random thumbnails; but the product of those thumbs in my cunning folder graphic table is way snazzy. It also has the usual sorting and page selection options. The link in the nav frame goes directly to the Photo Album directory, but it’s possible to navigate up to the image root and view all my images. The only thing left to do on the image browser is keyword searches, which wouldn’t be too hard, but I’ve been engaged in other projects lately.

For one, I recently started making a map for Company of Heroes set in an interesting locale, Longwood University’s campus. It came to me in a dream (the result of too much school and CoH, probably). I saw myself commanding a German force comprised of some friends against the entire rest of the student body. I’m only roughly 10% into the project, but it should be rather interesting, whether it’s playable or not. It’s already obvious Brock Commons will be the major chokepoint of the map. A couple 88s could defend the whole thing, causing the Allies to find a way through the various buildings to flank.

But for the last couple weeks, I’ve mostly been playing Titan Quest. It’s pretty much just a Diablo clone, albeit many enhancements. I think I actually prefer TQ because of its familar story elements (Greek mythology anyone?) and less dreary atmosphere.

I had to overcome several problems to really get into TQ, though. First of all, it crashes all the time for me, even when patched. The solution I found was to just use a NoCD patched executable. This makes sense because the patched exe disables the shoddy Securom code–stuff that the developers can’t fix but are forced to include. Another problem was that my extra mouse buttons would often lag for several seconds. As one can imagine, this is really annoying and can sometimes put my character’s life in danger. I eventually noticed that Titan Quest really doesn’t like to share the CPU with other apps. Thus, the simple fix is to set its process priority to below normal. Lastly, the game doesn’t lock the mouse into the game window. But, of course, my CursorLock program easily fixed that.

Posted in Gaming, Modding, Troubleshooting, Website | Tagged , , | Leave a comment

New Demo Reviews

I’ve got two new demo reviews up today. I think I was supposed to review the D2 demo 3 months ago, but never got around to it. Well, check it out anyways.

Diablo II
Armored Fist 3

Tagged , | Leave a comment

May 26, 2001 #2

A LOT of things have happened with me in the past 3 weeks. So I’ll try to keep this as condensed as possible.

The first topic is: I AM THE MASTER OF THE 56K!!! How many of you with 56k modems on normal ISPs out there are frustrated because you get disconnected so often? Well this was not a problem for me: I decided to go for broke and leave my PC on, connected, for as long as possible. I used my trusty and incredibly stable SupraSonic II modem, the local ISP, and of course stable Wad for this test. I saved screenshots of my connection window every so often and chatted about it on AIM. Well, below this is the final proof. I had to shut down my PC after AIM crashed (and Explorer had done about 5 fake-restarts and was having severe window button blips)… after being connected nonstop, at 48kbps, for 8.9 days.

Loogie says: i swear to god, the people at hovac died

Next, I finally beat DiabloII in Normal mode, as a Level 27 Amazon. When we have our 2001 Game Awards Column, D2 will most likely be getting very high accolades. I did take a number of screenshots while playing, but I don’t feel like compiling them onto this news entry.. maybe another day.

Weird Shit is the next topic. Please gaze over the following 3 screenshots from GameSpy and AIM that I found really weird. To save space on this entry, I put the descripts as mouseovers on the images.

I went to Snake’s yesterday for about 5 hours for pics for my next Column… all about computer mice. We used his (his dad’s.. shh) digital camera and took about 14 pics of anything I owned even remotely related to a mouse, and there’re still more pics to come. The column will be done within 2 weeks. We also shot BBs at a can and a milk jug {insert own comment here} for a bit. Fun.

My additions/revisions to the site lately have been totally redoing the POTM and fixing parts of my Staff Page. I have also lately been busy updating a couple of Angelfire sites for people I know.

There’s probably more that I’ve done, but I can’t think of it right now…

Posted in Hardware | Tagged , | Leave a comment