Thursday, 21 April 2011

Excerpt from Facebook


    • Ben Abraham You have been taken over by a freaky AI.
      about an hour ago ·
    • Ben Abraham But I like it. I really, really like it. Took me two whole reads to get what you were doing, and then it clicked and I was like "Aha, this... is real clever."
      about an hour ago ·
    • Andrew Doull Well I can't comment on your blog, and your latest post was the reason I posted this review... it's in the vein of my reviews of World of Goo and Bioshock which both achieved a measure of notoreity.
      about an hour ago · · 1 person
    • Andrew Doull And you did basically say the same thing regards Portal vs Far Cry 2 = S.T.A.L.K.E.R. for me... (I had actually written this this morning, but we're obviously reacting along the same lines)
      about an hour ago ·
    • Ben Abraham I'm beginning to think that we need better ways of responding to games beyond rate it or hate it.
      about an hour ago ·
    • Ben Abraham Like I *know* it's a damn good game, but... I guess it's not for me? But it is for me... kinda? It's for my *demographic* and it should appeal to me, but at the same time... I
      about an hour ago ·
    • Ben Abraham ‎...I'm more than just a demographic. Certain things work for me, and certain things don't.
      about an hour ago ·
    • Andrew Doull Like Left4Dead2, I found myself soullessly rushing through the levels because Valve's visual/level design is so good there is such an obvious path to move forward on... sometimes the player should be free to feel like they are discovering something for themselves, something dangerous even.
      about an hour ago ·
    • Andrew Doull Dare we reference NGJ?
      59 minutes ago ·
    • Ben Abraham WE DARE.
      37 minutes ago ·
    • Ben Abraham But yes, I know exactly what you mean. I found myself slipping into "the portal method" where I go... hmm, I can't tell where to go. Okay, lets look for whatever the light is shining on. There's my exit. Then I worked back from there.
      36 minutes ago ·
    • Andrew Doull
      Hunch: The difference between critic scores and user reviews at http://www.metacritic.com/browse/games/score/metascore/all/pc?view=condensed&sort=desc is the exact thing we're talking about but can't quite put our finger on. Also: Does it matter that I haven't replayed World of Goo again after finishing it in the same way you won't play Portal 2? Opinion: Portal matters more than Portal 2 because in Portal, you are the person who makes the leap of faith to escape, Portal 2 doesn't give you that. Clint Hocking: Ludo narrative dissonance?
      20 minutes ago ·
    • Andrew Doull ‎(Ignoring but also taking into account the Portal 2 user score rating scandals/ARG fuck up/day one DLC).
      17 minutes ago ·
    • Andrew Doull BTW: This is the sort of conversation I imagine occurs on twitter all the time but probably doesn't due to stupid character limi
      15 minutes ago ·
    • Andrew Doull ‎:)
      14 minutes ago ·
    • Ben Abraham Re: twitter, exactly.
      9 minutes ago ·
    • Ben Abraham Also: I like the phrase "ignoring but taking into account" all that stuff. I feel like the milieux around release simultaneously needs to be and cannot be ignored. Weird paradox.
      7 minutes ago ·
    • Andrew Doull Sounds like a weird paradox which is more like life & death (or at least career) for some:http://dubiousquality.blogspot.com/2011/04/storm.html
      6 minutes ago ·
    • Andrew Doull Anyway, should have been up late playing Portal 2 and instead up late engaged in civilised debate/theoretical wankery (delete one). Tempted to post this verbatim to blog, but may sound like too much of the later and not enough of the former.
      3 minutes ago ·

Wednesday, 20 April 2011

Review: Portal 2

I am.

Shift technician one three six, audio diary day seventy four, notes for test pass four oh niner. Add drop light highlighting sealed liquid outflow. Test subjects four through six spent mean of 16.3 seconds in room interval transition - increase marketing screen size 3.2%. Widen conveniently fallen metal trellis work cross section by 2^40 picometers. Still waiting on results for next test subject.

I am test.

Amusing anecdote three needs to be moved to 32s from game start to allow reviewer to mention without spoiling. Test subject two was able to deviate by 0.2 radians from part one climax reveal - need to reduce prisoner pod yaw by 1 hammer unit. Come on people - we need ARG in-joke to be tangentially referred to in 68% of reviews. And where's the results for that test subject?

I am test subject.

Digipen spray unit four still malfunctioning due to Kimistry interferance: dropping this feature. 'A short game is a good game' - enlarge this sign in development team bay three and increase psych profiling to flush out deviation. Zombie search teams reporting remaining test subject for this pass lost in level 14 due to misaligned seam in pipe cross section. Need to recruit new test subject.

I am test subject seven.

Following remaining instructions from voice over: Forget Amnesia. Confiscate The Ball. Suppress Research & Development. Instead reuse nameless generic industrial facility we have been leasing for last thirteen years, refurbished with retro-trendy overtones. There is no such thing as over design. Cutting technician easter egg from final release.

I am test subject seven. Where did this Valve spit me out? Shivering in the rain, listening to the howl of mutant dogs, in a zone, somewhere, near Pripyat.

Friday, 15 April 2011

Finished Far Cry 2

I've just added Far Cry 2 to the short list of games I've actually finished.

There's probably twice that again of games I've gotten to the final boss fight and given up... Far Cry 2's narrative is instead extremely effective at motivating you for the equivalent of the final boss fight. After a symphony of betrayals of those you don't care about, it sings poetically for a brief shining few minutes.

Really a rather brilliant game from a narrative point of view, even after seeing the seams.

With regards to game mechanics, just needed the occasional weapon you pick up to not be completely rusted, and give you more running endurance if you choose to throw your existing weapons away. As it is, the checkpoints just grind you down once you have unlocked all the weapons in the game - extra supplies isn't reward enough for the time degrading your shiny armoury supplied equipment.

I've never been so glad for public transport.

Saturday, 26 March 2011

Cutting

Following up from an earlier blog post about being interviewed by Good Game, I've been cut from the episode to air.


It's on permadeath, so hopefully you'll still find it interesting. The story will be going to air this Tuesday 29th March at 8:30pm ABC2.


Latex, interrupted

I'm not finding a huge amount of time to program at the moment, but plenty of time to write - it's easier when you're building information with sentences instead of data structures if you get frequently interrupted.


And, man, LaTex generates some pretty documentation. But it looks like I've incorrectly chosen to use ctable instead of threeparttable and longtable, and I'm about 30 pages in (28 pages of which are tables).

Guess I'm going to have to learn Perl to reparse the stuff I'm written.

Can't get away from needing to invest time in knowing the tools to know which tool I should be investing time in...

Tuesday, 8 March 2011

Naive Javascript (possibly OO) questions

So I've got a data structure I want to initialize for a game map, for example:

// A grid is a collection of cells. It is initialized to the default contents.
function Grid(rows, cols, default)
{
this.rows = rows;
this.cols = cols;
this.cells = new Array(cols);
for(x = 0; x < cols; x++)
{
this.cells[x] = new Array(rows);
for(y = 0; y < rows; y++)
{
this.cells[x][y] = default;
}
}
}


Now, my question is given I want to have default represent a particular terrain type at a location, plus unit types, plus improvements etc. I can see 2 ways of approaching this:

1. Have multiple grids, each of which points to a different thing e.g. TerrainGrid, UnitGrid etc. where a thing might be an integer value, string, head of a linked list and so on.

2. Have a single grid, MapGrid, which points to a Cell object which contains information about these multiple things.

Now the complication is of course, I want multiple view ports pointing at possibly different lists of grids for e.g. multiple players, isometric views, overhead views, different map projections, so I also need a ViewPort object which contains a list of (possibly non-rectangular) cells. (Technically, a view port should always be a rectangular projection, so maybe call it MapProjection instead).

Now, here's the naive question. How do I ensure that I only have a single instance of each cell in my ViewPorts? My approach would be the view port contains a list of (x,y) coordinates of the cells in the view, but is there any advantage to directly pointing at the Cell objects, assuming I go with a single Cell object in a single Grid as opposed to multiple grids. If I do, how do I ensure that I'm using a reference to a cell (and not a copy) and that if I destroy a ViewPort I don't delete the underlying cells. What about concurrency issues, where I have two players acting on the same underlying cell object through different ViewPorts?

These are terribly naive questions which because of the elegant design of C, never really enter the picture when I'm working on Unangband.

I can see how people get paralyzed trying to develop in so-called higher level languages.

Sunday, 6 March 2011

Some notes on installing git on OSX Tiger

Get the latest copy of Xcode supported for Tiger (Xcode 2.5):

https://connect.apple.com/cgi-bin/WebObjects/MemberSite.woa/wa/getSoftware?bundleID=19907

Update MacPorts:

sudo port -v selfupdate

Install Git:

sudo port install git +svn

Thanks MacPorts!

Wednesday, 2 March 2011

Procedural voyeurs

In lieu of anything interesting to say[1], I'll just point you in the direction of a couple of PCG blogs I have been enjoying: nullpointer, and Procedural World. Feel free to mention more in the comments.

[1] The closest I've come to being 'interesting' of late is realizing my fractured schedule was ideal for Facebook gaming, and signing up for Brenda Braithwaite's Ravenwood Fair. I got as close as opening the game once - but was luckily saved at the last minute by the fact it refused to sync correctly. Close call.

Saturday, 19 February 2011

Civilisation V on sale this weekend only for USD $48.67

In Australia.

We have dollar parity with the US, but for some reason this news doesn't appear to have reached 2K Games.

Thursday, 17 February 2011

Good game

I've just been interviewed by ABC2's Good Game. Thanks to Ben Abraham for the shout out.

More details to come.

Angband Experimental Fiction

I shared this via Google, but it really is good enough to justify its own post.

"Angband, or His 55 Desires" is an experimental fiction piece by Mike Meginnis.

Wednesday, 9 February 2011

My Pyro Life (part two)

Valve has a habit of deleting old posts from the TF2 forums, so I'm preserving a thread I started here for posterity. You can see the original thread here.

Reliability vs. Opportunity


A mistake a lot of people make when talking about weapon balance is the difference between reliability vs. opportunity, and these are concepts which apply particularly to Pyros. An opportunistic weapon is 'Last week I was in situation x with weapon y and I did z to get a kill.'. A reliable weapon is 'Every time I get into situation x with weapon y and I do z to get a kill.' I'm wary that a lot of balance discussions around the pyro degenerate into lists of 'no he can't do this' vs. 'yes he can'. What I want to hear are arguments of the form 'yes he can every time', not just yes he can.

An example: A Pyro is a reliable spy checker, because he can set alight a spy every time with his flamethrower, even if that Spy is cloaked or invisible. A Pyro is an opportunistic rocket reflector, because he cannot reflect rockets every time. But note you can modify this statement to say 'A Pyro is a reliable reflector of long range rockets, because he can reflect rockets fired from a distance every time'. So it is possible that situational use can turn an opportunistic weapon into a reliable weapon (e.g. airblasts for environmental kills on the bottom bridge of Double Cross). The problem with situational use is that it makes weapons map dependent.

Hitscan weapons are intrinsically more reliable than projectile weapons, because they only take into account player skill - whereas a projectile weapon is dependent on predictive factors which are only partially under the control of the player. Note that this is not always the case: assuming perfect accuracy, the Soldier's Rocket Launcher is reliable at inflicting some damage up to x HU away from the soldier for an enemy moving at 100% speed: the limiting factor is the speed of the rocket times the width of an enemies's hitbox / the target's maximum movement speed (300 HU per second). The Soldier is also able to convert near misses into reliable damage by bouncing enemies into a predictable kinetic path, which he can follow up with one or more additional rockets for reliable damage.

Juggling enemies is a clear example where skill can be used to escalate the payoff of a particular weapon in a reliable fashion. The Sniper Rifle is another example: by aiming for a smaller, harder to hit target, the Sniper can triple the damage this already reliable hit scan weapon can produce. The additional damage that the Sniper Rifle does with a headshot doesn't make the Sniper rifle more reliable, but it is a payoff for increasing your skill level with that weapon, and through increased skill you can make headshots more reliably.

The Pyro feels underpowered and frustrating, because many of the Pyro weapons are opportunistic not reliable, and I've tried to with the testable side grades file to modify the designs to make them more reliable.

Quote:
Pyro starts with 200 health instead of 175 health.
Degreaser
-25 health
Valve have tried buffing the health of the Pyro previously, with the +50 health bonus for using the Backburner. I'm suggesting a less severe buff, but increasing the survival rate of the Pyro - particularly the Backburner Pyro - is high on my list of requirements. Since I'm balancing these changes against the Degreaser - Shotgun - Axtinguisher Pyro, the complement to increasing the Pyro health is nerfing this bonus on the Degreaser. It also helps distinguish the Flamethrower from the Degreaser more clearly (more health & afterburn against faster weapon switches).

My main motivation for the 200 hp is that complex, and at the moment overly one-sided, balance between the Soldier and Pyro. At the moment, the Soldier dominates with rockets, and without the Degreaser, the Soldier will have the initiative on switching to Shotgun. To compensate, I feel that the Pyro must clearly dominate Shotgun vs. Shotgun. With 175 hp, this is too close to call, with your superiority speed and maneuverability, balanced against the Soldier's superior hit points. Yes, the Soldier will have lost hp rocket jumping, but you will have lost some by being edged or with mistimed reflects. Starting with 200 hp is an attempt to push the Pyro towards dominating this phase of the encounter.

Another approach suggested recently was giving the Pyro innate explosive resistance. I've toyed with this idea before, but decided you want to encourage Soldiers to try to kill you with an opportunistic rocket, precisely so that you can get the chance to use reflects. If every Soldier switches to Shotgun when they see you, you will lose this, in favour of a Shotgun fight you are less likely to win than with the hp buff I've proposed.

Quote:
Backburner
On kill: Guaranteed criticals for 3 seconds
+100% ammunition consumption
My first reaction to editing the items_games.txt was giving the Backburner back the air blast, but increasing the ammunition cost. I'm not alone in suggesting this, but testing with the Airburner pointed out one significant flaw with this design: you rarely run out of ammunition, because you rarely live long enough if you're on the front line air blasting back rockets. The other flaw is that the weapons merge into each other: the Flamethrower Pyro already plays like a gimped Degreaser Pyro, without giving the Backburner the only ability which distinguishes him.

Is it possible to make an intelligent play style for the Backburner? I think it is, and a mention in the Heavy forums of kill chaining using the KGB suggested the above change. The difference between a regular Backburner pyro and the buffed Backburner I've suggested, is how a beginning Pyro approaches the ambush. A regular BB relies on the opportunity of someone facing the wrong way when they approach, falling back on spamming the group so everyone is alight and the afterburn has some effect while they respawn. This buffed BB helps you focus on getting the next kill; because as soon as you do, you can reliably kill chain through the rest of the nearby enemies. In terms of balance, 3 seconds of guaranteed criticals is no more powerful than silent backstabs, and in a Medic - Heavy pair, the overhealed Heavy still has enough time to turn and kill you before you can take him out with the criticals the dead Medic gives you.

The +100% ammunition consumption is designed to discourage W+M1, and make the Backburner Pyro actually run the risk of running out of ammunition. But didn't I just state that ammunition consumption didn't apply to Backburner Pyros? It does with the critical buff. You will find you run the real risk of having to switch to your secondary, because you actually are capable of killing a cluster of multiple enemies in quick succession using your primary without getting killed in return.

Quote:
Flare Gun
+50% burn damage.
Minicrits become crits which means you crit against burning targets at all ranges.
My initial concept of buffing the base flare gun damage worked really well, with one important exception. I buffed the flare gun to 66% additonal damage, that is 50 base damage, 67 minicrit damage, 150 critical damage, and it didn't feel at all overpowering. You get flare hits on targets at long range infrequently enough that the critical damage feels like an appropriate reward, and the increase in spike damage from 90 hp to 150 isn't that noticeable because the vanilla flare gun takes out most of the low hp classes with that hit anyway - it is only soldiers and heavies who are at higher risk from the high base damage flare gun. More importantly, you start to get to useful DPS territory in the short and medium range, and the minicrit becomes a more meaningful spike, but mostly because the base damage is that much higher.

But there is one significant problem with a flare gun that does 50 hp base damage: it is feels too effective against sentries. But why? A 50 hp flare is less effective than a 90 hp rocket, and Soldiers can fire rockets more frequently and less accurately to take sentries out. But bumping the flare gun base damage brings the flaregun to within 30% of the effectiveness of rockets. [Edit: Removed text about ramp down. As several people have pointed out below, buildings are unaffected by rampdown].

Instead, I've tried to make the Flare gun at least justifiable, by bumping the afterburn damage and allowing crits against burning targets to apply at all ranges, so it is a useful alternative to a puff and sting axtinguisher or shotgun attack, while having longer range utility.

Quote:
Homewrecker
+40% sentry damage resistance
What is so noticeable about this homewrecker buff, is that it is not actually as useful as it looks. Sure, you get effectively as many hit points against sentries as a heavy - the problem is that you don't have the damage output of a heavy at anything except point blank range, so taking down a sentry nest is much harder. The homewrecker buff is therefore to try to give you a bit more survivability in a situation where you end up with engineers aggressively using minisentries, or to rush a poorly positioned level 2/3 sentry and come off not quite as badly as you would otherwise have done.

tl;dr

These are design notes. They are notes about design for people who like reading.