More Fun Times with Browsers 11:03AM 12-5-2008
Unfortunately, the browser share statistics I gave last time were incorrect. Although I did my best to try to remove erroneous hits from web crawlers, site grabbers, and the like (which don't constitute valid visitor hits), I overlooked a growing trend in hits from (what I suspect are) botnets trying to exploit URL parameters that may be used to pass in filenames to a script that subsequently includes that file (i.e. executes the file). Of course, none of my scripts have that glaring vulnerability in them, but the zombies try it anyways, creating bogus hits. The reason I missed these hits earlier was that their volume per distinct IP was low enough such that I passed over deleting them on initial inspection of the log data. Of course, crawlers like Google will often have thousands of hits per IP, which is simple enough to identify and remove.

However, swarms of zombie computers weren't the only reason my data was off. Microsoft's search engine also uses subversive techniques to get in under the radar. From a huge pool of IPs under 65.55., they continually run bogus searches on sites like mine using a User Agent that doesn't identify itself as a bot but rather looks like a normal (of course Windows) user. I would just block MS's range altogether, but I suspect that would just anger their search engine. They may have reasonable motives for doing these search checks (e.g. to make sure sites display the same content to the crawler that they do to a visitor), but it's an annoying system nonetheless.

Anyways, I present to you the revised graphs from the cleaner data below. Thankfully, it looks like users are moving towards IE7 and away from IE6 more than I previously reckoned. Also, Firefox seems to be gaining on both flavors of IE more than expected. Meanwhile, Safari and Opera are not to be counted out. However, Netscape is still finding a new definition of pain and suffering as it is slowly digested over a thousand years.


To be sure this new data was reasonably accurate, I found a neat site that analyzes internet market shares at major websites. Their data does concur with mine; however, due to my enthusiast-orientated content, I do get a lot more Firefox visitors than mainstream sites. This is perfectly acceptable, though.

Actually, the reason I was looking at the log data again to begin with was because I got interested in Operating System shares after reading a revisit on the suckiness of Vista in MaxPC. Thankfully, I'm not the only one that's holding out on upgrading my OS until something significantly better comes along. Unfortunately, a lot of people are having Vista shoved down their throats just because they want a new computer. ...It's been a while since everything Microsoft did didn't piss me off.


Even though Internet Explorer 7's adoption is on the rise, web developers can't rejoice yet, as IE7 is still a faulty product in its own right. Since I've been testing my new layout in IE7, I've noticed more and more a strange scrolling bug. It is characterized by an incomplete scrollbar and frequently stuck mouse wheel scrolling. It wasn't until I tested my new version of the Deus Ex guide (a very long page) that I realized how much of an issue this bug was. Googling around, I could find barely a mention of the bug on all the intertubes. However, one bizarrely made page (#41: Infinite loop related to overflow and position: fixed) did have the problem outlined quite well on a list of IE7 bugs. Unfortunately, there's no simple fix beyond scraping the whole fixed positioning layout. Reportedly the only way to remedy the situation was to scroll to the bottom of the page, which could take a poor visitor several minutes to do on my DX guide.

However, after I thought about it for a little while, I thought there may be a way to force the page to scroll to the bottom and then back up in JavaScript on page load. I recently used a scrollIntoView function on my new content system overhaul that did just that. It worked brilliantly. And with a little creative use of the DOM, the script can be dropped into any page with a fixed positioned content frame and overcome this bug automatically. Unfortunately, the mouse wheel scrolling issue remains--can't fix everything with the DOM.
//trigger this function with body onload and onresize events
function IE7ScrollBarHack() {
    //get the main content frame from id
    var mainFrame = document.getElementById('main');
    var ie7hackanchor;
    
    //check if our span has already been created
    if ((ie7hackanchor = document.getElementById('hackanchor')) == null) {
        //create a span and append it to the content frame
        ie7hackanchor = document.createElement("span");
        ie7hackanchor.setAttribute("id", "hackanchor");
        mainFrame.appendChild(ie7hackanchor);
    }
    
    //scroll down to that span and then return
    var prevScroll = mainFrame.scrollTop;
    if (ie7hackanchor != null) {
        ie7hackanchor.scrollIntoView(false);
        mainFrame.scrollTop = prevScroll;
    }
}
Of course, it's probably best if you only print this function in IE7 using whatever server scripting language you have. I usually use something like this (in PHP):
$IsIE7 = preg_match('/^Mozilla\/\d+\.0 \(compatible; MSIE 7\.0/i', $HTTP_USER_AGENT);

-Snake   
Tags: website, programming, internet, statistics


Snake crunches more numbers 2:01PM 11-27-2008
(Any excuse to make a spreadsheet.)

Since the election is over (as predicted, Obama landslide--yes, I am a happy snake) and I'm now lacking my daily dose of poll data, I've turned to crunching other data to support my statistical addiction. Obviously, the first data I looked at was the final election results so I could update my "blue shift" map. Naturally, this led to an examination of the differences between my previous map (from the last blog post), which used predictions based on polls, and the final results. The map this data produced basically only shows where polls were over- and understating support for a candidate. While I was at it (and because it was trivial to drop new data into my SVG generator program), I generated maps for the 2004 and 2008 final presidential election results. All four maps follow--click for the full image, obviously.




The aspect that jumps out the most in the first image (Blue Shift) is how Arkansas is the only state shifting decidedly more Republican; Louisiana and some other adjacent states are also slightly more red or neutral. As I alluded to last time, it appears that the demographics in these states are such that: A. there was profound white prejudice/misinformation against Obama and B. there wasn't enough black/minority support to overcome this.

The poll performance map is even more interesting. Immediately, North Dakota and Wyoming stand out as performing way better for McCain than expected--I'm going to attribute these two to the limited number of polls. It's also likely that Rhode Island, Vermont, and Hawaii fall into that same category except in the Democratic direction. Arkansas, as previously discussed, also under-performed prominently for Obama. But I think the biggest conclusion we can draw from this map can be seen if we look at the bigger picture. The Southeast and Central states are all mostly under-performers for Obama, while the western states over-performed (in general). Perhaps, when they get in the polling booth, rural westerners are generally more open-minded and less bigoted (and thus more accepting of a black president) than rural southerners? It could also say something about the turnout regionally. More information is required before we can make a decisive conclusion, but it's interesting nonetheless.

It occurs to me that the maps aren't particularly useful for seeing specific results. I considered rectifying that at one point but decided that the purpose of the maps was mainly to compare states to each other, which the maps do quite well. However, if you want to see the data I used, I uploaded the spreadsheet here (Excel 2002 format).


More recently, I've been studying the visitor demographics for my site--pondering my precarious IE support and wishing IE6 would just go away already. Though sadly, the data suggests that IE6 usage will persist. It's like the herpes of web development. Anyways, I collected the data using this site's raw logs, counting only distinct IPs for a particular browser (i.e. multiple hits are filtered out). Then, I made some pretty charts in Excel to show off the results. Nothing is really surprising here, but... it's interesting nonetheless. Charts below.


As a status update, I've been working on my Deus Ex guide again and... yes... it's almost complete. And I've only had to play DX what must be 12 times over 7 years to write it! I'm not complaining, though. Really, it feels like the definitive guide to Deus Ex on the internet and I'm quite proud. Look for an updated GameFAQs version soon.

Also, I'm working on a massive overhaul of the SnakeByte content system which will feature tabviews (emulated with clever HTML, DOM, JavaScript, and CSS, of course), more images, changelog support, and even some AJAX. It's about 75% complete as of this post, with expected completion before the end of the year.

-Snake   
Tags: website, politics, graphics, Deus Ex


SnakeByte Studios Endorses Obama-Biden 5:25PM 10-26-2008
The election will surely be a landslide for the Democrats with this crucial endorsement!

But seriously, I've been behind Obama since the primaries. My decision is based on his keen intellect, technological prowess, and inspirational charisma (and you know, the fact that I'm a Democrat). I often wonder how anyone in my field can even support McCain, who can barely use a computer, versus the young, ambitious, and intellectual spirit of most programmers that is embodied in Barack Obama.

I normally wouldn't discuss politics on my website and have continually shaken off the urge to do so recently, but the fast yet seemingly endless approach of the presidential election has gotten me so excited that I've turned into a political junkie over the past few months. Every morning, I scour the web for hot political news; every evening, I'm fixed to MSNBC's line-up; and every waking hour, I'm watching for new poll data. It's gotten so bad, that I'm starting to do programs and spreadsheets with election data.

Friday, I randomly decided to start crunching numbers on the differences in spread between the 2004 election and 2008 election predictions. I grabbed the predictions with a Regex on Pollster.com's fine poll trend data and the results from the Federal Election Commission for 2004 and mashed them together in Excel to get the spreads. Then, I got the crazy idea of seeing the data visually. So from there, I made a VB.Net script to take the data and decide what color to make a state (with the typical Blue equals more Democratic and Red equals more Republican) by adjusting hue, saturation, and luminance. Unfortunately, the linear hue equation made the map mostly purple, which didn't convey the key point that the country is turning Democratic this cycle. So I switched to a logarithmic hue equation that would keep the purples towards the very center. For any interested, here's the code I used to find the colors. (Where "x" is positive for more Democratic and negative for more Republican.)
Dim MaxDemHue As Integer = 147 'hue when input is MaxShift in the democratic direction
Dim MaxRepHue As Integer = 255 'hue when input is MaxShift in the republican direction
Dim MaxSat As Integer = 255 'saturation when input is MaxShift
Dim MinSat As Integer = 160 'saturation when input is 0
Dim MaxLum As Integer = 92 'luminance when input is MaxShift
Dim MinLum As Integer = 207 'luminance when input is 0
Dim CenterHue As Integer = ((MaxRepHue - MaxDemHue) / 2) + MaxDemHue 'hue when input is 0
Dim MaxShift As Integer = 40 'the max spread in either direction

Dim HueShift As Double = ((MaxShift * 0.262) * Math.Log(Math.Abs(x))) + 3.9138
If HueShift > 0 Then HueShift = 0 'possible that it could go negative with log
hsl.H = CenterHue - (Math.Sign(x) * HueShift)
hsl.S = ((Math.Abs(x) / MaxShift) * (MaxSat - MinSat)) + MinSat
hsl.L = ((Math.Abs(x) / MaxShift) * (MaxLum - MinLum)) + MinLum
Initially, I manually put the state colors into an image. This proved to be a bit time-consuming, so I moved to a vector art format called SVG that, because it's merely XML, can be changed programmatically. With each state shape having a unique ID, I can just XPath to it in code and Regex change the color. Now the results.


Looking at the map, it seems quite clear that indeed the majority of the country is trending Democratic this year. Most of the states are 5 to 10% more for Obama than they were for Kerry. There are some notable exceptions, though. The northeastern states are surprisingly not much more Democratic (or even more Republican in the case of Massachusetts and Rhode Island); I'm guessing this is because they already turned out very strongly for Kerry last election. Similar to Mass. is Arizona, where McCain has the home-team advantage. That leaves Tennessee and Arkansas as the only other states not trending more Democratic, which may be explained by racial factors and population demographics.

Just for the hell of it, I also plugged the raw prediction data into my script to produce a map with a bit more information than the standard electoral ones you see floating around.


I've worked on the new version of Cursor Lock recently and a release is eminent (hope I didn't say that last time I mentioned Cursor Lock). A new installer is already made and all the known bugs are fixed, so there's just the matter of documentation left. If I can peel myself away from the polls, I'll hopefully have the new release done before November 4th.

-Snake   
Tags: politics, programming, graphics, statistics, Cursor Lock


Quirk This! 7:30PM 10-15-2008
It's doubtful any previous visitor would notice the recent complete overhaul of this site's layout, and that's kind of the point. For years (even back to the dawn of S&L), I've been using a framed layout that, while seamless, still required separate pages and an index frame to setup. Since switching to PHP in 2006, I used a script on every page that checked the HTTP referrer to ensure that a page went into frames if referred from an outside site (or no site). I also had a backup JavaScript that would check if the top-level document location was the same as the current document location; and if so, put it into frames. These framing hacks work pretty well for the most part, but can present some occasional odd bugs and intrinsic hurdles, such as infinite framing and query passing.

A month or so ago, I decided to try out an alternate layout using CSS fixed positioning that would nonetheless look and function the same as the frames but without all the hacks. Creating the fixed layout was rather straightforward and effective in Firefox. The only initial issue I had with it was the reloading of the navigation and Flash logo on every page. This requires additional load times and some choppiness as the logo animation restarts. Unfortunately, this factor was one of the key reasons I had been sticking with frames for so long. Many would question my continued use of fixed layouts even, but my own statistics have shown that the likeliness of visitors clicking a link in a navigation that's persistently in view is greatly increased. Even if they're just looking around briefly, chances are something will catch their eye, which is better than them just leaving altogether.

I expected the worst as I went to test the new CSS layout in IE6. I wasn't disappointed: the page layout was completely dysfunctional. IE6 simply has no support for fixed positioning. However, through a number of hacks, I was able to get something that acts almost the same. There are actually two stages of hacks for IE6. In the first stage, absolute positioning (which works fine in IE6) is substituted for fixed positioning and a floating nav is enabled. Once the page finishes loading, the height and overflow of the <body> and <html> are set to 100% and hidden. Then the main frame's width and height are set to exactly the available window dimensions, causing the overflow to require scrolling. If this all sounds rather tedious and precarious, that's because it is. I'm hoping that the adoption of IE7+ gets to a point soon that I can drop the crappy IE6 hacks. However, the fact that many still run XP (not so bad) and XP comes pre-installed with IE6 (goddamn you, Microsoft) means that IE6 will likely require support for several more years.

I thought the nightmare was over, but then I went to test IE7. IE7 supposedly supports fixed positioning BUT only in standards-compliant mode, something I'd been putting off accepting for years since Microsoft's own standards were the dominant force. I knew I was opening Pandora's Box by switching on standards-compliance, but it was the only way to get IE7 to not look as bad as IE6 (without the hacks). Luckily, Firefox's only major adverse reaction was to dimensions given without a unit (i.e. 0 instead of 0px). IE had a bizarre issue with centering table contents if the table was centered, fixed with table {text-align: left;}. All browsers had a problem with <dd> tags that I'd used forever to do quick paragraph indents. I'm still unsure how I want to resolve this other than just removing the tags. I could do a special class with indents, but what a hassle (plus W3C insists that block formatting is better anyways). Overall, my impression of standards mode is that it's more quirky than quirks mode.

It's unlikely I'll switch back to frames, though. The industry is moving more and more towards CSS and the support for fixed positioning will only get better. Also, there are some neat tricks you can do when you have script access to the entire page. You can see one of these tricks when viewing any large image (such as the one at right). If an image is larger than the main frame, it can be maximized to the whole window without reloading the page. (Plus, the maximizing is animated thanks to the YUI library I've been playing with.) Also, I've been noticing some vastly increased Google hits since making the switch. For the Kangaroo paper alone, it went from 0-2 hits per day to 10-40 hits per day. Unfortunately, half of those hits are from weirdos looking for kangaroo sex.


RIP Frames
2000-2008


-Snake   
Tags: website, internet


The Monolithic Procrastination Post 4:12AM 9-2-2008
Yes, I'm aware that I'm a bastard for not posting for a whole two months despite not having any work obligations. I was honestly going to post last month following the release of the new Cursor Lock version, but got sidetracked with other projects. The story of my life really--project ADD.

However, for anyone yearning for a new version of Cursor Lock, I can assure you that I will finish it soon as it's practically complete already (as the screenshot at right will show). I've already completed a majority of the testing and just have a few more issues to resolve and documentation to update. I've also found a game that puts the new features to use: DX-Ball 2. The new window locking mode works perfectly in the game's windowed mode to keep the paddle's responsiveness from drifting out of the window with the mouse.

Another project that I wanted to post about alongside Cursor Lock last month is my newest Age of Empires 3 mod, Banner Army Reforms. It's a relatively simple tweak that makes a big difference to the manageability of the Chinese civilization. It allows the player to train units individually instead of in unique groupings (Banner Armies). While a key facet of the Chinese, Banner Armies were just a strategic annoyance to me. Too bad the Chinese still suck.

Last post, I mentioned a PHP script that used PEAR's Text_Highlighter package, but which I had some concerns about and thus wasn't ready to go live with. Since then, I've been racking my brains trying to come up with a way to securely show external source code files (that have been parsed with Text_Highlighter) embedded inside a formatted page. My second implementation idea was to use my inflatable wrapper technique that places a formatting script inside the target source code file; however, that would force me to make the source code files have .php extensions. I also considered a database of IDs and associated code files, which would be secure but also a hassle and it would obfuscate the underlying source code files.

After much googling and frustration, I finally found a way to make certain file extensions be passed to a handler script. This obscure Apache manual page shows how to add an action to extension handlers. If the target of the action is a script, it will receive the originally called file as some sort of CGI parameter; in PHP, it's placed in the ENV variable $PHP_SELF (don't use $PATH_INFO, it can be spoofed).

Once I had all that snazzy handler business figured out and implemented in the script, I noticed a glaring oversight in the Text_Highlighter package. Since they place all the source code in a <pre> tag, no word-wrapping is done. Quite frankly, I never care enough to bother with manually line-breaking code and just let it run off as far as I need. However, on a webpage, horizontal scrolling is a cardinal sin. So, I spent more time than I'd like to admit rewriting the output module of Text_Highlighter to put the source code in a table which would allow it to wrap effectively while preserving line numbering and line indentations. I ended up actually having to put the indentation whitespace in a cell by itself. The script still needs a bit more polish, but can be seen in action on the files in this parallel program directory.

Those source code files are actually part of a column I've been working on lately to show off the parallel program I wrote for my final college project. Besides having beautified code, the column is also to have a web-based version of the Powerpoint slideshow I gave during my results presentation. I had originally made a simple PHP script that took a page number as a parameter and showed the appropriate slide image with all the formatting and such. I had two problems with this, however: there was no ability to copy the slide's text and it was a bit underwhelming in this Web 2.0-hyped world. So, on a whim, I decided to have a go at making a Flash movie with all the typical play controls as well as Fullscreen and Copy Text buttons, which could load in an external SWF file with one slide per frame. Of course, it has all sorts of delicious alpha effects, too. The parallel presentation slideshow isn't quite live yet, but you can see the new Flash in action on the lovable old Tony the Worm column. It still needs a smidgen of work yet, though, such as tooltips. I find Flash a decidedly quirky and frustrating format; finishing one button is enough for celebration.

-Snake   
Tags: website, modding, programming, PHP, Flash, Cursor Lock


A Full Month of Doings 5:44PM 6-30-2008
I've been working on so much stuff lately that it's hard to decide what to devote each day to. Of course, practically everyone I know doesn't give a shit about the awesome stuff I do and rather I just jump into the rat race. But anyways, here's an overview of what I've been working on...

Not long after my last post, I updated my mod for the Age of Empires 3 expansion The Asian Dynasties called Gatling Guns for All!. Previously, you could only use the mod with a specific unmodified version of TAD, but I wanted the mod to be usable by all versions of both The Asian Dynasties and The Warchiefs expansions even if they've been previously modded. Thus, I had to create an installer (similar to the one I did for Stalker) that would modify only the aspects of the game that I changed. Originally (as I did in the Stalker mod installer), I tried to use regular expressions to find the appropriate setting to change. However, being that the game data is stored as XML, Regex had problems matching certain XML formatting quirks. So, I moved to a query language that I'd never used before called XPath, which is basically XML hierarchy-aware Regex. Though getting some of the nodes in AOE3's settings files to match was still tricky, XPath in .Net did the job perfectly.

When I went to package the new version of the mod, I actually found out that I had incorrectly archived an essential file in the wrong path in the first versions of the mod. Thus, nobody that downloaded it would have gotten the mod to work as intended. And only one person called me on it, though I thought he was a noob at first. But all has been rectified now.

Next, I started working on a script for this site that would color-code programming language syntax and elements so I can attach beautified code to some columns. The script uses a PEAR PHP library called Text_Highlighter to do the color-coding on the fly. However, at the moment, my part of the script still presents certain security risks that I will have to mitigate before it goes live.

That project was interrupted by a visit from Kaylen that turned into non-stop gaming in the form of Lego Indiana Jones. Although the game was littered with some annoying little bugs (having just been released), we did manage to get 100% completion. As most reviews have said, it wasn't really as fun as Lego Star Wars--how can you beat lightsabers and the force? Though bazookas and bushes you can jump into come close.

The next week, following a concern from a user, I began working on a major new feature for Cursor Lock. Though not really having anything to do with multimonitor gaming, the feature is a natural progression of the existing code. It allows the user to select whether to lock the cursor into the current screen (what it did originally), the selected window, or the selected window interior (client area). Locking the cursor into the window interior is particularly useful for playing windowed 3D games. While I was at it, I decided to completely overhaul the setup GUI to be much more intuitive, separating the selection of the different modes with pretty, graphical buttons. It's looking rather nice already and should only take a few more days of testing and fixing bugs until public release.

Last week, I got distracted when randomly deciding to replay Deus Ex: Invisible War and then subsequently desiring to mod out some of the major flaws in the game. Only a few changes would make the game much more palatable to the PC fanbase. One of the mod ideas I had was to combine the various proximity and thrown variants of grenades (EMP, scrambler, gas, and concussion), which would return the grenades to their vanilla Deus Ex functionality and give the player a lot more inventory space. So apparently, the developer of Deus Ex, Ion Storm, only decided to release the Thief: Deadly Shadows editor and not the Invisible War one, even though the games were made concurrently on the same engine (Unreal Warfare). I tried for days to get the Thief editor to work for Invisible War, but I don't see it ever working out easily; there are far too many hardcoded elements of the games in both the editor and the game executables. The best I could do was to get the DX2 packages to load in the Thief editor after it had loaded the core Thief packages first. Then, I could get the DX2 packages to save after some simple modifications, but that made it so there were both Thief and DX2 classes mixed together, making a good number of DX2 objects break ingame (e.g. inventory, particle emitters). In other words: Epic Fail.

However, while I was poking around in Invisible War's resources, I found the plaintext files containing the secret area's developer quotes. I decided it'd make a good contribution to my Deus Ex column, despite not being from vanilla Deus Ex. Then, whilst I was formatting the quotes for HTML, I got the crazy notion of using the game's font for the text. Unfortunately, the font was not in a TrueType or comparable format, but rather it was merely a texture and an accompanying text file (DX2_FONT.cel) of comma-delimited texture character widths (in pixels) that were ordered corresponding to their ASCII value. The texture character height was understood to be 23 pixels, so that a width of -1 in the text file meant to go to the next row. Using a quickly thrown together program, I turned the width values into a Paint Shop Pro script (macro) that would cut out all the characters into individual bitmaps. Finally, I manually pasted them into a font editor to complete the conversion. The font can be downloaded here, and then can be tested on the aforementioned DX2 quotes page.

-Snake   
Tags: modding, programming, website, .Net, PHP, Cursor Lock, Age of Empires 3, Deus Ex


Keeping Busy 7:30PM 5-28-2008
Posts have been slow to come lately, but of course, this doesn't mean I haven't been working on anything. In addition, school just ended at the beginning of the month--this time for good, or so I think. I haven't actually gotten my diploma in the mail yet. But, I'm pretty sure I graduated.

And now I'm being bombarded with queries about what, when, and where I'm going to get a job. So far, I've taken a passive approach to finding employment and, even with that minimal effort, have had a couple offers already. I think once I decide I've rested enough and start looking in earnest, I won't have much trouble finding a great job.

Naturally, now that I'm done with school, I have a bunch of academic papers that I'm wanting to add to the site. Previously, I would just upload a Word "Web Page" version of papers, link them, write a little blurb, and that'd be it. However, I've grown weary of the full-frame white document backgrounds of all my uploaded papers and the disconnected feeling it brings to the site's style. At first, I went about rectifying this with another PHP script where you pass in an ID for a particular paper listed in a database. However, I ran into a snag with this method because Word always exports Web Page image paths (and also <a name> internal links) relative to the document, and the script's path would differ. My first fix was a client-side workaround using the <base href> tag which forces a document's path to whatever you want. This worked decently enough, but of course, you can never be too sure of client-side support for a rather obscure tag (though FF2 and IE6 did seem to support it). My final fix was to "include" the wrapper script in the document itself (thereby eliminating the need for the aforementioned fix), obtaining the calling document using the $SCRIPT_NAME environmental variable. From there, the wrapper script reads the calling document's title, url, body contents, and style contents, outputting them where necessary and giving the page a clean, stylized, embedded document look.

So far, I've only applied the wrapper script to some of the existing academic papers. This is taking longer than it sounds because I'm having to redo the Web Page export from Word. Apparently, in Word 2003, there is an option to export a "Filtered" Web Page, which removes all the Word-specific markup and reduces the file size by about 4KB + 10% of the overall size. I'm also doing more robust linking, both internal and external to the document. It should be fairly impressive once everything, previously existing and new, has been updated and linked into databases--I've even got some source code to put in this time around.

I've been working on the Company of Heroes map mentioned last time some more. I haven't made a lot of progress, but nevertheless, I'm almost done with the playable area of the map. Beyond the playable area is the "out of bounds" (OOB) area, which is mainly just for making the map setting look realistic and "not like a table-top" so they say. It's basically the same idea as my wrapper script, smoothing out the differences between the playable area and the surrounding environment. The OOB won't take nearly as long to construct as the playable area has, though, because it will mostly be low-poly pine tree groves and the stream and road rolling off into the distance. Anyways, here's a screenshot of the area I have been working on lately--a raided German AA site. It looks a bit stylized because I've been playing around with filters for the final version's loading screen.


In other news, I did my first No-DVD crack for a game last week. Of course, I can't give any more information about availability of the crack or what game it was for. But still, it's a notably L33T personal achievement and a stepping stone in my learning assembler (or disassembler rather) through practical uses. Previously, I've already done a bug fix for a game in assembler and a mod for a game in pseudo-assembler. Besides a thorough disassembler (like IDA), I've learned the best tools are NOP (No Operation) and JMP (Jump) to either "comment out operations" or make conditional statements (various forms of Jump If) always or never take the jump. Even though I love this kind of reverse engineering programming/troubleshooting, sifting through millions of lines of assembler code takes a lot out of a person, and thus I don't expect to be doing a lot of it in the near future.

-Snake   
Tags: website, academics, modding, mapping, troubleshooting, hacking, PHP..., Company of Heroes


Killing Fields 2:57AM 4-4-2008
Regretfully, it's been more than a month since my last post. Mainly, I just haven't found the time, which is funny considering I only have classes three days a week this semester. Some of the reason for my lessened time is that I've been working on a new Company of Heroes map/scenario. You may recall about this time last year, I was dabbling in making a map based on my university. That map was doomed from the start because it was too large, and the gameplay suffered as a result of building scaling issues.

Thankfully, my new map is very small, so I may actually finish it. It was inspired while I was playing through the Panzer Elite campaign of the COH expansion pack, Opposing Fronts. One map called Best (after a town in Holland) has an expansive pine forest area littered with makeshift fortifications and the occasional burning tree/scorched earth. I found it made for very intense combat weaving through the trees and defenses. Perhaps I just wanted an excuse to play around with the World Builder again, but the burning pine forest was the early inspiration.
    The main physical features of my map include:
  • A stream that divides the two players' halves of the map
  • A road that runs perpendicular to the stream, crossing it with a simple earth and stone bridge
  • A small church with adjacent parking lot and graveyard
  • Farmland where the axis base is
  • The rest of the map is all pine forest with some clearings for the various control points and existing defenses.
Obviously, the bridge over the stream is the major chokepoint; however, the stream is shallow enough to allow crossing at any point. The resource control points are arranged so that advancement will take considerable time (i.e. there is little fuel). Unless one chooses a doctrine that has tank reinforcements, it's unlikely the game will take long enough to see tank combat. The map focuses on infantry combat, as tanks are difficult to move through the forests and the one road is easy to defend. The choice of doctrines, units, and strategies is immensely important in this small map as the room for error is minimal.

Of course, I am equally concerned with the visual appeal of the map. For each of the 11 sectors, I have gone through the laborious task of adjusting the heightmap through coarse and fine brushes, painting the various terrain tiles, adding decorative and defensive 3D objects, laying out texture splines for paths and edging, placing splats (basically texture patches) to reduce terrain texture redundancy, and finally placing grass (where applicable). I've even gone through the trouble of creating time passage through environmental changes (mainly lighting, fog, and sky adjustments). I'm hoping all this work is producing a believable world for the player that is nearly on par with Relic's (the developer) maps. I've noticed many COH mappers don't even bother placing much more than roads, buildings, other 3D objects, and the necessary control points and HQ.




However, while I was mapping one day over spring break, a most unfortunate tragedy occurred. Our newest kitty addition to the family, "Crush", was killed in the street. I had trouble not being overcome by flashbacks for a while. I had to watch helplessly as he died when only three hours prior, we had cuddled up for a nap together. A sweeter, more lovable kitty I have never known. As such, I will dedicate this map to him, and in it, I have composed a digital grave for him to cat-nap forever.



-Snake   
Tags: modding, mapping, Company of Heroes


1 2 3..25..49
4 8 16 32
<< < > >>

SnakeByte Blog 0.6 (bld 10-8-08)