Stripping Down the Civ IV PitBoss

| 0 Comments

Note: This was originally written in August of 2007. I haven’t verified this in ages to make sure these instructions still work. I am restoring this article mostly due to kind words from someone. Reader beware.

This is actually a Civ IV mod, Fall from Heaven 2. I'm cheating. =)

It's tradition that the brilliant Civilization series have so-so to crappy multiplayer implementations. It came as a shock then that Civilization IV was not just one of the best games of all time, but was one of the best multiplayer games of all time as well.

The secret to making it work is some software called the "Pitboss." Running on one machine, this lets you log into a persistent server and play. So far, not very special.

Where it becomes special is that, if all of your players are online, you play in real-time. Otherwise, you simply take a turn and logout when you please. It makes online games that stretch days or weeks an absolute breeze, removing the pain that was play by email.

However, the Pitboss requires Civilization IV to run, which means it requires DirectX and about 1.5 GB of disk space. For a dedicated server on Windows Server 2003, this wasn't going to fly.

So, thus began my hacking to arrive at the minimum installation required to run Pitboss.

How to Do It

Super-briefly, here's how its done. Reasons why will follow:

  1. On a machine with Civ4 installed, make a copy of your Civ4 directory.
  2. Delete the proper files from your Civ4 Root directory and Assets directory so that they resemble those shown below. (d3dx9_XX.dll will come from your c:\windows\system32 directory)

    The CivIV Directory The Assets sub-directory
    Your CivIV Directory Your Assets Subdirectory

  3. Copy to the server and enjoy! No registry hacks / DirectX install needed, and you've just reduced ~1.5GB and some change to about 200 MB (310 MB or so with Warlords installed)

The Fine Print

A few points on this approach:

  • You'll notice when you launch Pitboss that it generates a few errors in its console window. It doesn't seem to affect anything in its performance.
  • If you want to play it safe, include all of the "AssetsX.fpk" files in your Assets directory. I'd hazard a guess that future updates will require resources from those excluded.
  • For your Warlords subdirectory, you can follow the same approach. (I'd also assume it works the same for Beyond the Sword, but I haven’t tested that.)
  • Despite the fact that the Pitboss doesn't display anything graphically, the Shaders subdirectory does seem to be required. Civ appears to use the shaders to do version detection when connecting to multiplayer games. Why that is, I couldn't say.

That's about all there is to it though. If you run this on a dedicated Win 2003 server, you'll probably want to run it from the Console so that you don't have to remain logged in permanently. If you're accessing your machine remotely, that can be done by going to Start -> Run and typing in "mstsc -console" without the quotes.

Let me know if you run into problems.
-Scott

The day-to-day

| 0 Comments

Photo by flattop341

Scott Koon recently wrote a great article, Pros Don’t Make Do. Scott argues that in order to be a true professional, you have to use the right tool for the job.

I agree entirely. Rarely is there one silver-bullet solution to every software problem. No language, framework, or toolset is appropriate to every situation, but numerous software shops assume the opposite. Many software developers are or have been in such "one-size-fits-all" organizations. Is there a reason in these places to study tools and frameworks you may not be able to use right here, right now?

Expanding your repertoire carries long-term benefits to your career, but hardly impacts the day-to-day. However, there are less obvious and more immediate benefits to such knowledge too. Learning a toolset doesn't just add to your base of knowledge, it changes the way you write software. It goes back to the idea of "programming into a language" rather than "programming in a language" to borrow from Steve McConnell’s Code Complete. McConnell argues that your code should ultimately not be constrained by the choice of language or toolset.

Writing such code is only possible by either being a super-genius, or by expanding your knowledge of tools and technologies. Perhaps a concrete example will help. Last week I, along with another .NET developer from a different company, attended a meeting of the Chicago Area Scala Enthusiasts about making Domain-Specific Languages with Scala, via Dave Orme.

Neither of us will ever, EVER have a chance to use Scala in our current jobs. However, all we could talk about after the meeting was how Dave's use of implicit conversions in Scala to create DSLs changed how we viewed C#'s extension methods.

Whereas before we have viewed extension methods as mainly a way to add missing convenience methods to pre-built classes, now we saw them as a useful method to change the entire meaning of constants and classes, to build basic DSLs out of primitives and constants in .NET.

I have similar stories about Ruby's method_missing, aspect oriented programming, and pair programming, to name a few off the top of my head. All of these have provided opportunities to rethink how I'm writing code independently of these technologies.

Of course your mileage may vary. If you decide you have nothing to gain in the day-to-day from learning an alien language or unfamiliar toolset, you are destined to be proved correct regardless. If instead you approach such opportunities with an open mindset, you may be surprised at what new thoughts and ideas trickle in.

Or if you are like me, you’ll be pleasantly surprised when anything whatsoever manages to trickle in.
-Scott

Picking Nits with Graphical Integrity and IE9

| 0 Comments

Internet Explorer 9 was officially announced today at the Microsoft Professional Developers Conference. Timed to coincide with this is a blog post from the IE team, An Early Look At IE9 for Developers. It’s chock full of interesting information, but I want to pick on them for a particularly misleading graph. I don’t think it was done intentionally, but it’s still worth thinking about because…

  1. Data & details matter
  2. This chart’s design is covering up some impressive stats.
  3. The other chart on the page is pretty interesting.

The accused party:

Defendant: this blurry chart

According to the IE team, this “shows the relative performance of different browsers on the same machine running the SunSpider test.” In other words, relative Javascript performance. Also note the tooltip states that this shows IE9 is competitive “with FF3.6, Chrome4, and the nightly webkit build.”

Certainly, it looks that way. IE9 looks insignificantly larger than its contemporaries. But does this chart really proves that IE9 is only a bit slower than the competition?

Nope.

There is a difference between what this chart purports to show, and what it actually shows. The inclusion of IE7 and IE8 distort the range wildly, so the results we are meant to compare (IE9, FF3.6, Chrome4, Webkit) are scrunched together near the bottom. This makes any meaningful comparison of those data points rather ineffective.

If you think I’m full of crap and this is a perfectly fine chart, consider an alternative, more truthful approach. I’ve done my best to base this on the data from the original, but the range distortion is such that these numbers may be somewhat off. I’m also throwing out the scale in favor of a relative measurement, since the original point of this chart was to compare relative performance.

This would require a pretty radical level of transparency from the IE team, admittedly.

Hey, that’s different! So, is IE9 competitive with the other browsers? I would hazard to say that “competitive” to Firefox 3.6 is possible since FF looks to be about 85% of the whole.

Chrome and Webkit are another story. As someone that has spent odious amounts of time lately thinking about performance, I’ve been thrilled when I get a 10-15% reduction in execution speed. IE9 is going to have to manage a ~50-55% reduction just to get where Chrome 4 and the Webkit are at this very moment. If I were on the IE9 team, that would be a pretty sobering realization.

That makes “competitive” a bit of a stretch. By comparison, the world record for the mile-run (3:43) is roughly 40% of my current best, but I doubt I’m in serious contention for the 2012 Olympics just yet.

 

Earlier, I said the original was covering up some interesting data – let’s revisit that. Even though it is meant to show relative JS performance in the latest browsers, the chart is much more impressive as a testament to how far IE9 has already come. Again, consider this alternative:

Tufte would probably say this chart is overkill, that I should just go with the bold sentence below.

There are still nits to pick with this chart, but it makes clear just what an achievement the IE9 team has pulled off even if they shipped today. IE9 is already in the neighborhood of 5-6x better in script performance than IE8, and around 15x better than IE7. That’s awesome. As developers push increasingly more work onto the client, we need every bit of performance we can get.

 

So, review time. What have we learned?

  1. There is a new version of Internet Explorer in the works.
  2. The IE team has made some great progress, but they still have a lot of work ahead of them.
  3. Even if you don’t fudge the numbers on your graphs, you can still inadvertently make them misleading.
  4. Subsets of large data sets often illustrate much more than the whole.
  5. I am a prickly bastard who thinks about charts too much (In my defense, I’ve spent a lot of time in the past two months creating tables and charts for clients)

For more information on how to make a great chart, I can’t recommend The Visual Display of Quantitative Information by Edward Tufte enough. It is a remarkable book.

Gold stars for everyone, including the IE team. 5x is damn impressive, even if it’s not yet par with the other browsers.

-Scott

Spray and Pray Developer Resumes

| 0 Comments

Resume

I interview a fair amount of software developers (although not as often as I used to, sadly), and so I have people ask me about a variety of issues related to finding programming gigs. What certifications, what schools, what questions to ask, and even what attire to wear.

I really thought interview attire was something of a solved problem, but apparently not.

I digress. When I’m asked one of those questions, I usually try to stress that it’s hard to hurt yourself when answering any of the above questions. Yeah, some schools are better than others, but that doesn’t matter too much for programmers, especially once they have a year or so of experience. Certifications usually don’t hurt or help too much unless it helps you meet a job’s requirements (although an XML Master Certification is resume poison).

However, there is one particular brand of resume that, regardless of talent, really irks me and makes it difficult to get on my good side, let alone get a recommendation from me. I hate, hate, HATE finding a “spray and pray” resume. This is the kind of resume that is two pages long for every year of experience and is absolutely crammed with a wide range of unrelated technical terms. It’s the kind of resume where someone has liberally sprayed the document with verbiage and prayed that some of it tricked someone into interviewing them.

It doesn’t work.

Telltale signs you’ve written a Spray and Pray Resume

  • Under “Programming Languages,” you list every single programming language you have ever encountered.
  • You list every job, ever.
  • For each job, you list an insane number of different, unrelated responsibilities.
  • You have the world’s most vague Objective Statement.
  • You list at least one OS for which you don’t know how to navigate the file system from a command prompt.
  • You list any UI framework for which you cannot instantly tell me the base class/method/approach for displaying a “Hello world” window.

What’s so bad about that, huh?

Many people would say these resumes looks desperate, and you generally want to avoid looking desperate in an interview. I don’t really care too much about that however, as Lord knows I have been desperate for work before and lucked out to find a job despite it.

A more significant problem with this kind of resume is that is just looks lazy. If you can’t make the time to trim your resume down to only those things the interviewer has a chance of caring about, then why should the interviewer make the time to talk to you? Just 2-3 minutes spent making a specific objective statement, removing irrelevant items (or moving them to a Hobbies/Interest section if you really, really want them on your resume) and tightening the resume up in general can work wonders.

Worse than looking lazy is looking dishonest. If you are confident enough in some skill that you put it on a resume, then you’d damn well better be at least at an intermediate level in it. If you haven’t touched that programming language since high school, leave it off your resume. Otherwise, as soon as you have to tell an interviewer you don’t know much about something on your resume, you bring everything into question. It reflects poorly upon you, and the interviewer will subsequently devote a fair amount of time fact-checking your resume rather than really engaging with you.

Even if you don’t look lazy (which you might), and even if you don’t seem dishonest (which you will), you’re still doing yourself a disservice. Why? Because your strengths will be lost in the “noise” you create with unrelated terms and bullet-points. I promise you, even if you are just graduating from school, you already have strengths that are worth showcasing on a resume. It’s many times more effective to have three bullet points that prominently highlight things you excel at than to hide those amongst umpteen other areas where you aren’t so hot. By paring down your resume and saying less, you can let your strengths shine that much more and seem stronger.

 

Almost all of those problems listed earlier can be solved by simply going over your resume, and asking yourself “Could I answer a simple question about this?” If the answer is no, leave it off your resume. Otherwise, you might just be sitting across from someone like me who ALWAYS picks one of the programming languages you put at the end of your list and asks you to compare and contrast it against a language from the front of your list.

Oh, and never list XML as a programming language. (Although if anyone ever says that they really meant XSLT and that XSLT is Turing complete, I’ll be suitably impressed to overlook the mistake. Throw in a “Duh” for good measure though)

-Scott

The Two Things You Cannot Do in Champions Online That You Could in Marvel Ultimate Alliance

| 1 Comments

Apparently it’s “MMO Fortnight” here on citizenparker.com – sorry to everyone that normally tunes in for the deafening silence I usually feature prominently. I will do my best to resume to your regularly scheduled nothing whatsoever.

People keep saying this game doesn't look good. I don't get it.

Tonight the open beta for Champions Online wrapped up. I would like to point out something very important – there are two things you cannot do in Champions that you CAN do in Marvel Ultimate Alliance:

  1. Throw another player.
  2. Jump into a bottomless pit. (Also, combining 1 with 2)

Despite this, there is still a marvelous amount of jumping, smashing, and questing.

I may write up a bit more about it in the next few days, but until then this photoessay must suffice (as always here on the citizen, random comments when you hover on the images too)

I feared a tough boss was approaching when I took this shot, but it didn't happen. Instead, I was left holding a car for "just in case."

Flying and preparing to throw a Humvee. It hurts. A lot.

 

Note the intricate carving on the side of the cart. The game is filled with little flourishes like this.

Flying and preparing to throw a flower cart at a GIANT robot. You may think “Hmm... Scott character’s special power must have been flying and throwing things.” That’s not true though – he was also pretty good at throwing things while standing, it just didn’t make for such great photo opportunities.

 

Like WoW, Champions isn't afraid to use the full color palette available. I like that.

This picture is a bit ugly, but it gives you some idea of just how gigantic that robot from the previous pic is. Those bright yellow things are his feet.

 

Remember, agent: skills for kills.

Downtown Millennium City looks a lot like the Agency HQ from Crackdown. So naturally, I had to find the tallest building and jump off of it.

 

I was breakdancing, although I like to think I just booted that red hero straight into the air

The highlight of the evening was a battle against a GM-controlled villain “Cryptonaut” who was particularly mouthy, and particularly hard-to-kill. So of course, once we brought him face down into the pavement I organized an impromptu dance party.

A Cataclysm Long Overdue

| 1 Comments

Over the past few days I decided it was time to get acquainted with a few big name MMOs that I had never really tried out: Age of Conan, and Champions Online. Oh, well, and this third MMO I had never played, but we’ll get to that one. You may have heard of it.

 

Both Champions Online and Age of Conan featured cutscenes. I don't know how I feel about those in MMOs. It's interesting.

The introductory bits of Age of Conan are as good as people say. You start as a slave who is recently “freed” by a shipwreck, and within minutes of washing ashore you are dashing through the jungle on your first quest, to murder the only man that knows your true identity.

It’s engrossing. My character immediately has a purpose, and a quest that is directly important to him. You are doing interesting things right away. I immediately transitioned from the beach to the forest as I tracked my prey.

 

You'll notice all three PCs have shit on their back. If there is one thing about Champions Online, its that no one can resist making a character without SOMETHING on their back.

Champions Online follows a similar bent, although the execution leaves a bit to be desired. You start off in a sealed zone of Millenium City that is under attack by alien invaders. Within minutes of starting in this tutorial area, you are repelling the alien invasion, saving civilians, and meeting with the mayor. And you feel GODLIKE, even if you don’t necessarily understand the intricacies of what you’re doing. (Many people find some of the particular concepts and character attributes poorly explained, and I have to agree entirely despite being once familiar with the pen & paper RPG it’s based on)

 

I don't miss playing Warhammer Online so much, but I really do miss the *place*. I miss how how amazingly different the Dwarven and Empire starting areas felt, the sense of urgency, the variety of things to do.

Both games reminded me strongly of my experience with Warhammer Online. As a Warrior Priest for the Empire, by the time I had hit level 5, I had:

  • Relocated to a visually different area
  • Run a few quests, both of the “Kill X” variety as well as a few “Rescue the blah” type
  • Participated in a Public Quest (a raid-style encounter open to everyone)
  • Fought in a Player-versus-Player scenario
  • Learned the overall purpose of my character’s existence

The game designers behind these three very different titles all understood one thing: the introductory moments of your game are what sells them to a player. They should provide a sense of the character’s place in the world, give them interesting things to do, and in short answer the question “Why should I continue to play this game?”

 

Mulgore. More like MulBORE! (I will give credit to Blizzard for using bright colors. I wish more games featured bright, varied colors. I also wish it was put to better use than Mulgore, I suppose.)

About that third game. I decided it was time I finally try out the “gold standard” of MMOs that I would constantly hear all others compared against. It was time to play World of Warcraft.

I’m sure when it came out in 2004, it was enough for players to be dumped in a village and receive a dozen “Kill X Wolves” quests without any kind of overarching justification behind what made your character wake up one day, grab a club, and start grinding out XP. Certainly compared to the likes of EverQuest, that’s a wealth of background and detail. But even by 2005 you had City of Heroes and Guild Wars, each of which provided me more compelling reasons to begin questing.

But WoW has a reputation for being amazing, for paying back dividends many times for what you put into it. I took it on faith that my experience would improve, and Boozleboo the Shaman wandered out to the hills where creatures lazily stood around waiting to be killed. Keep in mind in other games I was already killing for some good reason, killing something that posed some threat against me or my kind. But here I’m collecting feathers and talons from mostly harmless creatures. Heroic.

Eventually I grind out enough of these quests that its time for me to move beyond the modest Tauren village and up the road. I made it to the next larger-but-otherwise-visually-identical village to start talking to people and gathering quests.

Aside from feeding a dog, they were all “Kill X creatures” quests with threadbare narrative behind or connecting them. Again.

Once the dog was fed, I plonked away at my other quests halfheartedly. Once I reached that second village, the tale of Boozleboo the Shaman ended before it began. While this kind of experience was probably good enough five years ago, in 2009 it’s a far different story. I need some variety in quest, setting, and/or narrative. I need some explanation as to why I am in the world and what goals I’m supposed to be working towards.

 

So this is where the story ends. Or at least, it would have ended had I wrote this yesterday as intended. Instead, Blizzard announced a new expansion on Friday, Cataclysm. It contains many tweaks to the five year old game, but let me quote this choice bit from Eurogamer’s writeup on the expansion:

Every single zone on the levelling path from 1 to 60 will be revamped with updated quests, art, and items.

I applaud Blizzard for finally taking this step. As it currently stands, the introductory areas are in poor shape. If they are intended to answer the question of “Why should I continue to play?”, the current answer seems to be a confused shrug before wandering off to high-level content.

If nothing else, add some more dog feeding quests.
-Scott

Please welcome my new sponsor

| 0 Comments

A fortnight ago, I promised an ad for an exciting new product.

WELL, SIR, A PARKER NEVER FORGETS HIS DEBTS!

yarr_sync - like a cool wind being blown onto a ship making sail for earth.

Now that your appetite has been roused by this tasty hors d’heurve, it’s time you find out more about yarr_sync.

If you would like your product to be featured on this website, please refer to the Terms of Sale.

-Scott

Terms of Sale

| 2 Comments

Here’s three things this blog isn’t:

  1. Frequently updated
  2. Visited
  3. Captivating

I’m at peace with this. Minimalist design for a frankly minimalist blog. But those three attributes should pretty much spell “Advertising Poison.” Advertisers should avoid this site just as much as I avoid them. But a key exception is if you’re trying to game Google.

Enter Linkstar UK. I get an email from “Joseph” that makes it pretty clear that someone actually looked at this site for a few minutes, and wants my blog not despite the aforementioned conditions but because of them.

Some brief Googling turns up some interesting tidbits about Linkstar UK. My email lacks the concrete offer given to Ed, but contains the same bizarre “STRICTLY CONFIDENTIAL” footer despite the fact that it’s unwarranted solicitation.

There’s also another, more investigative approach to Linkstar UK.

So no, I won’t do SEO. Sorry.

 

As I expect this to be the first of a veritable torrent of advertiser pleas to me, allow me to set forth my terms here to Linkstar as well as all future requests. I am beyond serious on these terms. As long as I do not find your product not morally reprehensible (e.g. eugenics or something), I will gladly agree to this.

  1. Any ad must be done by me in MS Paint, no exceptions. I may use Paint.NET at my sole discretion, but it implies no increase in ad quality. If you would like a sample, please see below an ad for a fictional product “EGGZ” (I also reserve the right to introduce the motto “Give it unto my mouth!” and/or the character “Mister Barnsworth” into the ad as appropriate. These will remain my intellectual property licensed to the advertiser for the sole purpose of the advertisement if so)
    SAMPLE ONLY - NOT A REAL PRODUCT. TEARS. 
  2. No amount of page views is promised or should be expected. In fact, if it is possible for your ad to somehow be viewed negative times (perhaps I travel back in time and kill my past self before making your ad, I dunno) then you should expect that.
  3. Fee is payable upon posting.

So Joseph, if you’re reading this, consider this my offer. I look forward to hearing from you.

Regards,
-Scott Parker

 

This blog post was written by Scott Parker and is considered EXTREMELY UNCONFIDENTIAL. So not-confidential, in fact, that it is solely licensed for public broadcast and performance. Any private readings of this by individuals or groups constitutes a violation of the citizenparker.com Terms of Service.

What I’ve Been Up To Lately

| 0 Comments

Ye Olde Blog has been Ye Olde Quiet As Hell lately. What have I been up to recently, besides redesigning this blasted website yet again?

 

BooCube? Really?

That, pretty much. Very rough cut at the moment, don’t read too much into it. A few thoughts:

  1. In no manner does it connect to Twitter, or will it, ever. I did flagrantly rip off the classic Twitter “What are you doing?” question, however.
  2. I’m writing this in WPF, which is a marvelously fun technology. Prior to this I had written Windows apps in QT, FLTK, WinForms, and even good ol’ MFC/COM. I had pretty much resigned myself to unending pain each time I had to write a desktop app. (Maybe that’s what drove me to the web? Hmm)
  3. (More like a 2b) WPF is really fast to develop in. I’m pretty shocked. Once I know more about what I’m doing, I could be pretty dangerous.

I’m signing off for now, however. I managed to sneak into the Cities XL beta, and I can’t wait to give it a spin. I grabbed mine via Massively (who juuust now ran out), but you can still grab some via CVG I believe.

-Scott

Some Quick Thoughts on the Iranian Elections

| 0 Comments

The recent Iranian election has kept me preoccupied the past few days. I can’t recall being so interested in the outcome of a foreign election, and that was even before the many forms of popular outrage against the results. Many videos and images have come from such protests, but this seems by far the best.


(via Huffington Post)

I know that I’m a hopeful, naive young thing, but I still find this immensely moving. Yes, the size of the movement is impressive, but take a closer look at the face of those involved. Far as I can tell, I see young and old, male and female, all coming together in a moment of unity.

Their situation is still incredibly dangerous and fragile, so I don’t mean to paint this as entirely roses and wine. I can’t fathom the courage required for such a thing from the reform candidates themselves all the way down to the protestors in the streets. But this certainly gives me hope, especially when creeps like Nick Griffin are elected to office in more open, less oppressive countries.

If you too are interested in following the coverage on this, I can’t recommend niacINsight enough.

-Scott