Sunday 31 December 2017

Games of the Year 2017

Year six of our annual gaming celebration on this blog. At the end of last year I wanted to find time for a few games and The Witness certainly gave me two days of intense puzzle solving early in 2017. It seemed almost tailored to me (as if the black box in my head was used to decide the training set used to introduce the puzzles) with the only exception being the few puzzles that involved audio cues. Unfortunately I also think that's a major weakness as anyone who doesn't learn like me should not be surprised to feel completely alienated by that learning path (also there's not much deeper than the visuals and a few twists to enjoy beyond the puzzles). A lot of the rest of my missed games were enjoyable but I'm reasonably happy with my list from last year despite a few things slipping through the cracks. But it's 2017 and I already noted that this year has been incredible (something about years ending in seven and video games) so let's check out the few highlights I thought we had to talk about.

    Robots of the year:

NieR: Automata

As one of the few people with a copy of the original NieR on my shelf, this was always going to be the sort of game story I'm attracted to. But it's also found a far wider audience thanks to a reasonable budget, some polished combat mechanics, and word of mouth as everyone attempted to avoid spoiling the glimpse they got of a world seen through this prism of a story.

Games have (often through the focal point of various mechanics originated in RPGs) come to merge genres and offer experiences that are many things. Every open world game on this list does this to some extent. Stealth games now offer deep combat alternatives to restarting after being caught; immersive sims build around several ways of progressing. We are used to bending genre conventions and being offered several ways of playing games but rarely is it done like this - taking different styles of action (shooter) and moving the camera between them while retaining the same mechanics/rules.

This is one of those games that is both long and also much of the emotional payload is built around various reveals that are best not spoiled (unless you've played the last game, in which case you know some themes that are about to be revealed). Even all of the side stuff that's mainly adding texture to the world is best stumbled upon rather than knowing what's coming so anecdotes aren't really suitable. Suffice to say it's a story about sapient/sentient androids dealing with the deafening echoes of humanity and it's all scored with a great soundtrack to bring up the emotional tones.

The visuals are inconsistent, with some great particle effects and certain style/scale stuff mixed in with other rather uninspiring areas and dated/sparse assets. That's not helped by a PC port that didn't seem to optimise for all system configurations or offer meaningful options for lowering the impact of the most demanding settings. There are visuals to like here (while targeting 60fps on all platforms) but it's not something to play for the eye candy. The hype for this game points in the right direction: there's a lot of things to find in this world and you should look around for yourself.

    Open world of the year:

Horizon Zero Dawn

Seeing this game in action is enough to make sure you remember to check every white paper about the rendering engine. This is, on a technical level, a significant achievement out of the PS4 and something to study in terms of real-time rendering with just enough sub-pixel stability to push a soft 4K that doesn't look like an aliased compromise. On top of that technical achievement, it's also a great art direction and world that leverages the ability to render people, machines, and foliage with equal ease.

Aloy's travels (another great performance from Ashly Burch) through another post-apocalyptic world offer just enough pieces to keep you engaged with uncovering what happened long before and what the current state of play is. It's neither purely spelunking into the past or only concerned with the here and now - both parts offering a reason to keep exploring for answers. Combat is perfectly serviceable with upgrade trees and enough range of options to allow you to play how you want without ever becoming outstanding. Add in the standard open world affordances, including optional item maps to avoid cluttering the world until you wish to go hunting for the final missing pieces, and you've got a space you can get lost in without ever being forced to aimlessly trudge through. The only slight downer is the lack of vertical traversal options - this is very much the Uncharted/Tomb Raider style of limited predefined climbing paths, not even going as far as what you'd expect in an Assassin's Creed open world.

    Queer of the year:

Butterfly Soup

This coming-of-age visual novel revolves around queer girls and baseball. Its somewhat basic art style doesn't get in the way of the writing and that's what'll keep you hooked through the few hours of (seemingly pretty linear) story. Fun, light, and queer; this is more of that refreshing independent content finding ways to reach wide distribution in recent years.

    Good boys of the year:

Yakuza Zero

The Yakuza series continues what was started in the Shenmue series - building distinctly Japanese open worlds around small, compact areas and filling them with stories that mix the mundane with the explosive. Are you about to shift the balance of power between the great crime families or dropping into an arcade to play some era-appropriate classics between helping someone find a date? Here, you'll do both all wrapped around a decent brawler combat engine and several large skill trees (with stance changes to access each set). This prequel makes for a good starting point for the series (which Sega seem to be planning to update and re-release at least some of with the Kiwami subtitle) with the bright setting of Tokyo during the tail of the 1980s combining with two protagonists whose journey oscillates from heart-breaking to laugh-out-loud funny. Once again (in common with most of the Japanese games that made my list this year) the soundtrack here deftly brings energy to the proceedings and weight to the emotions.

    Puzzle machine of the year:

Opus Magnum

Zachtronics puzzles are about expressive play, designing machines around certain functional constraints and evolving your solutions as you figure out new structures to build into complete designs. There is not the answer to the puzzle, only a space of many possible solutions with various local maxima in the metrics of speed, costs, and area (which provides a gradient on which to refine designs beyond just "does it work"). The solutions you craft show your path there, from the basic patterns you prefer to the early design ideas leading to constraints that shape the final design you run. This is engineering catnip, a great sandbox of puzzles you can keep coming back to refine.

A sequel to 2011's SpaceChem, this game moves away from concurrency (SpaceChem used two threads/loops per processor, with added parallelism through several processors in most solutions) and towards a simple design problem of coordinating many swinging arms doing a similar job of connecting and separating various orbs (elements) from source compounds to form the product required; all programmed with a simple action bar. The narrative provides a suitable framework for ever more complex puzzles and gives a taste of a world and characters trapped in it.

    Nazi killer of the year:

Wolfenstein II: The New Colossus

The New Order brought character and an interesting mix of all-out (duel-wielding) shooting & stealth to the Wolfenstein series. It also showed that id tech 5 (designed for massive open spaces) did not lend itself to corridors and contained more than a couple of rather tall difficulty spikes.

Here, id tech 6 shows a massive step up (even if not quite at the same technical level as Doom last year) and replaying the last game immediately before on the same PC really showed how visuals jumped forward as well as performance. The drama sections and cut-scenes dripping with character return and a better upgrade system quickly allows you to lock up some armour penetration on your ranged rifle to ease through the harder enemies (this completely fixed any difficulty concerns I had playing on Hard, although some of that probably relies on being able to dial in headshots with whatever controller you're using - the only time I felt stuck was in the final boss fight, which I realised is actually optional). In The New Colossus there are far fewer points where I wished the shooting would finish so the story could continue and just as many points where I was hooked on where the story was going.

A great advertising campaign (world-building) led into a story that pulls relatively few punches for a mainstream title; this is the game about shooting Nazis we needed in 2017.

    Horror return of the year:

Resident Evil 7: Biohazard

This series had been on the decline for a while. Resident Evil 4 was the high point for a playable world of horror/action which didn't hate the player (at least with Wii controls allowing precision aiming in an era when not all games had the accuracy on dual-analogues of a Halo) while the immediate sequel provided less of a world but the first workable dual-analogue controls. Since then we've had a bad pure action sequel, several more spin-offs, and very little to recommend.

This first person reinvention of the series starts out really leaning back into the horror roots, while building a pretty new pocket of the universe to keep things fresh. Impressive as a return to form that doesn't just retread previous highs, Resident Evil 7 really shows why it's on this list when you put on a headset and play a AAA budget horror game in VR. Being trapped in a 360 degree immersive space to play horror games with great positional sound is something else, quite possibly too much for some. It's an experience you've not had before and hopefully a sign of more things to come.

    Spaceship of the year:


Prey is to System Shock as Dishonored is to Thief. That description alone is enough to attract at least a modest crowd who know exactly what to expect and will feast on another modern immersive sim.

To draw in the rest of the crowd, the opening area of Prey perfectly combines some tastes of what is to come with an opening reveal about how the story of deception will play out (as it must in a game built on discovering the backstory of areas and diving into notes and messages to understand what has happened and what there is left to do to shape what comes next). Going through a looped day with that great credit roll during a helicopter flight through a city skyline into being treated as an experiment, watching as a mimic hides in plain sight and things start to all go wrong, to finally uncovering the first secret that the flight was just part of a fancy "Looking Glass" virtual sound stage - the moments of horror, of feeling your only real option is often to hide, and being lied to: these roll through the first half of the game before turning to more of a power fantasy. If you want to see a AAA game set in a lavish traversable space station, infested by hidden creatures intent on destroying you, then this is a place you need to explore. I'm possibly going to side with Dishonored as the slightly better series at this point (and with low sales and leads leaving the studio, we may see far less AAA immersive sims in the next few years, including no sequel to this) but you should definitely check this out; the opening hours are available as a demo on all platforms.

    Hella queer of the year:

Life Is Strange: Before the Storm

Two years later, a new team with a new engine are going back to fill in the backstory of a game I still think back over as the best of the modern adventure game genre. Stripping the core gameplay mechanic out of a series (along with the protagonist) is actually a surprisingly bold move here, considering this is the obvious prequel story set up in the first game which fleshes out a character you never got a chance to meet and the primary love interest in that game. It also gives the chance to embrace the audience Life is Strange found and make the queer subtext into text.

This new team, with a new voice cast due to a strike by US workers during production (which has since been resolved), have managed to not fumble it (despite all these causes for concern). Here we get to play as a younger, less cocky, and more uncertain Chloe who is just falling for Rachel Amber. The performances don't quite hit the level achieved by the later episodes of the first season, nor is there quite as much to the writing, but there's just enough there that it'll draw in existing fans and give us what we crave. There is also a bonus episode releasing early next year to finish off this season but even just based on the main three episodes, this is worth it and we can finally stop relying on implied queer subtext.

    Burnt rubber of the year:

Gran Turismo Sport

GT Sport has issues. Even after patches, keeping your credits and xp from solo progression is locked behind an online requirement (almost keeping it off this list). The visuals are a bit of a step back from current PC sim/semi-sim offerings (it’s not bad and there are flashes of real attention to detail but a PS4 Pro is working from a significant disadvantage compared to a PC to feed a 4K screen). Collisions seem iffy at best and sound terrible. The assists seem less major performance penalties and more like obvious options to work with (playing on "Expert" with ABS dialled back to Weak, Traction Control is a dial you can set at any point during a race, and there is some Countersteering Assistance that also gets set to Weak on the top predefined tier - that last one being something you do really need to play on a controller rather than a wheel and equivalent to Forza's Normal Steering). Missing: any dynamic racing line with braking-/speed-colours so using the manual gears becomes an assist as it notes which gear you’ll probably want to drop down to for the next corner - which, along with cones on the track edge, give you just enough information to brake confidently your first time into a corner. The most major difference from Forza's model of how assists work: there is no rewind so you'll also be driving more conservatively because you can't afford to fluff a corner on the last lap. The bit that's not racing online is a decent selection of challenges but the actual career mode is a very threadbare offering that only just arrived via a patch. Add a limited section of vehicles (slowly being added via patches), no real upgrades (there are two dials, one for engine performance and one for weight that you can upgrade to push cars into different vehicle classes), and possibly a few less tracks than you'd really want (with no dynamic time or weather) and it sounds like a hard sell.

And yet, Sony got worried by the reception and quickly discounted this into the bargain bin and I got hooked. There are some smart choices like a reasonable daily distance goal (about 15 minutes of fast driving) which rewards a free random car and the challenges & missions have a decent range of demands with fixed vehicles (plus some freedom to pick your own car in a class in some events - it's a somewhat limited career mode inside the other modes) while also throwing out lots of car rewards. What really captured me was what I started to look at once I'd stopped obsessing over the triggers around each corner - tyre wear, fuel consumption (a dial you manage during the race, next to traction control), when to pit. These are all a million miles from Forza Motorsport 7's model of magic tyres that transform into wets once the rain starts and AIs that don't experience tyre wear even when it's set to Simulation. Even when you do decide to pay more attention to the triggers, the UI offers information that makes it easier to know what you need to do - rather than flat blue bars, GT paints the top of the white bar red when it's too much trigger (allowing you to learn what each vehicle demands).

I always thought I’d generally spend much of my 2017 slowly improving with rewind to let me race up until the edge of my skill/attention (while needing a clean lap to leaderboard and so actually compare); that I’d always be for the development of better reactive skills (eg ABS etc driving assists off, managing a changing track condition) rather than memory skills (eg no braking line). And yet I’ll jump into GT Sport for a bit every day or take on an endurance challenge. It's making me question most of what I thought I wanted out of a semi-sim package and even the basics of how they should control. When I played DriveClub it was the dynamic time and weather (plus mini-challenges) that kept each track fresh but here it is the tyres and fuel that perform a similar role in giving each race an arc. Once an accessible (ie works well on controller) semi-sim game does everything at once, that'll be truly exceptional.

    Halo of the year:

Destiny 2

As I mentioned a few moths ago, this was what I wanted from a new Halo game. There isn't an endless online experience waiting for you (unless you get deep into the middling online PvP - it's fun enough but you've seen it all before) but if you've got 20-30 hours then there's a good campaign and some less structured fun to be had (some with friends or even strangers) all the while slowly levelling up your gear and finding which weapons really speak to your play style (at which point you feed the drops you get into those to make them level up with you).

The visuals, freed of PS360 era ports, provide great vistas and lovely lighting over a range of locations onto which the missions and other corridor sections have been attached. The shooting feels precise and makes to move to mouse without feeling like you're playing something meant for sticks (something the old Halo ports never managed). I don't think this will stand up with some of the releases this year, something looked back on in a decade as why 2017 was amazing for games, but it's certainly the pinnacle of what Bungie have been building for the last 20 years.

    Ripped from the headlines:

Persona 5

This is, as has now becomes the expectation, an RPG that combines dungeon crawling with a significant teen social drama that drives you through an extensive cast and pantheon of villains. As always, the music selection is catchy and will worm its way into your brain, fused to the stylish presentation that permeates this game. Always a series that slowly releases significant iterations, this has again completely changed the style while retaining the premium (and not seen elsewhere) feel of the presentation. Rather than relying on a catchy level up chime that's been iterated in half a dozen sequels, Persona 5 creates a completely new tune that makes it feel unique and brands this game. It's the little touches that make each sequel in this series feel special and explain why it's been years since we last played new content.

The story of friendship here moves towards actual headlines shaping the various incidents you'll encounter as you level up and fuse your various personas. The adults have failed you, carceral solutions block any path forward, and now extreme actions are the only answer to provide any justice. Mechanically the ability to talk to and persuade enemies replaces games of chance in recruiting new personas, which is a welcome move back to Shin Megami Tensei. If you've seen any footage (something Atlus Japan have made harder by trying to ban users from recording and sharing footage of the game) then you've seen just how stylish every inch of the presentation is here, even if the game is clearly a PS3 port (as noted, a very slow release schedule) and could have really done with higher upscaling considering (especially on PS4 Pro, where there is no Pro Mode patch).

    Blast processing of the year:

Sonic Mania

Classic Sonic is back in 2017. The work of several fan-developers who provided various ROM hacks and engine rebuilds for classic 2D Sonic games, Sega handed over an official license and got behind a passion project, resulting in a great new game in the series. This is exactly the Sonic you remember from the early '90s, managing momentum through massive levels in which you could build up a stunning top speed, only now with boss fights that were never this good before. Visually it's an homage that does a few things those old games couldn't 25 years ago. Hopefully this will lead to a sequel that breaks away from remixed themes and builds a game out of entirely new worlds.

    Daddies of the year:

Dream Daddy: A Dad Dating Simulator

A visual novel about a dad dating a bunch of dads and his relationship with his teenage daughter. This fantasy world is just filled with joy and kindness, a welcome escape from reality into an alternative cul-de-sac populated with queer guys. Consistently well written, there are touches of reality mixed in with the fantastical but this very much feels like the sort of escapism you sometimes need, that rejects the idea that representation always has to be "gritty" to have value.

The games that didn't quite make the cut:

    Zelda: Breath of the Wild - It was Eventide Island when I realised this wasn't going to get onto my list (despite looking good for sweeping many publication's GotY awards). Playing some months after the buzz, I'd been looking for a new Morrowind (or even Far Cry 2) and found a world devoid of interesting writing or even much diverse use of the game systems outside of Shrines (which I'd already started to wear out after only scratching this massive world). But everyone spoke of Eventide as a really clever section you stumble onto and fall in love with so I'd avoided all spoilers or hunting for it. At some point, I'd just naturally arrive there... and 20 hours in, I did. No real narrative payload, not even an interesting visual flourish, and three incredibly stock challenges involving collecting metal balls later, I completed the island in about 25 minutes. I actually went and checked a walkthrough to make sure I'd not accidentally sequence-broken it and missed the good part everyone loved. I hadn't (although it seems many don't know that Hinox can be paraglided onto). This wasn't something new, this was yet more copy-paste problems I'd seen elsewhere in the game that didn't ask me to be inventive beyond the very surface veneer of novelty (here, taking away my disposable weapons and locking away my partially-upgraded clothing - but under that it has no more variety than an MMO "collect X of Y" quest).

On top of a story that seems decades out of date (with the worst kind of gender essentialism dripping from the moment to moment and bigger picture), BotW creates a massive world and then fails to find something to fill it with. There are 900 Korok Seed puzzles but actually there are about 9 puzzles which have been endlessly copied to locations on the map and which you'll need to stumble upon (and if you want to get round the inventory limitations then you better keep looking for them) as there's no way to get a map pulse or reveal (basic affordances figured out years ago). In another pair of examples, the Shrines seem to exist more as fast-travel nodes than because they had that many original ideas for puzzle rooms and the mount system is about as broken as you can make it - completely useless for the most part. You have to wonder, given how many open world games (MMO and offline) have refined mount systems to be low friction while not trivialising traversal, who decided to do it this way. Many of the systems presented here seem to similarly ignore where the genre design has gone in the last decades. The climbing traversal and carefully designed sight-lines are fun for the first dozen hours but there's little of substance under it and it's a great lesson in why something like inFamous (which also refined traversal, slowly allowing you to run anywhere by First Light) was smart to stick with 5-15 hour experiences. The potential is here but the praise feels like it will age as well as that for Super Mario Sunshine.

    Forza Motorsport 7 - I knew what I wanted this year from a driving game. An engine I'd already seen running wonderfully on Windows, masses of cars and circuits (new and returning), and a system of assists/difficulty that I'd slowly advanced through and was ready to push (with rewind always there to catch a slightly too aggressive corner attempt). Then it all started to fall apart.

Thanks to homologation, I’m almost never thinking about the fun of upgrading a car to a spec tier but rather am stuck with the precise list of parts that lock it to the specs (it seems far more common for there to the be one restrictor you have to apply than being a range of viable parts you can use to build the car to the requirements) and that’s it. That’s the car - one that’s often kinda broken from what it should be due to being restricted from the racing spec it would have in real life and competing with a load of other vehicles that... are kinda the same. There’s a bit of variety to it but really, in order to make all cars in a spec competitive, every car has to roughly be able to do corners at the same speed and hit the same top with similar acceleration (otherwise some cars would be vastly better than others and it would just depend on the track). Somehow I'm at the end of the year with several dozen hours in a game that just doesn't grip me like GT Sport does. It's a fine game, it's exactly what I thought I wanted, but I'd much rather be dealing with proper tyre wear, fuel richness dials, and pit stop strategy (even with a limited car roster) rather than finessing braking (without ABS) with infinite cars that all feel homologated into a blur.

    Night in the Woods - It just didn't quite grab me like it did many other people. Honourable mention but in a year with this many great games, this angsty tale couldn't get into my top tier.

    Tales of Berseria - The sixteenth main Tales game and yet this feels like a reinvigorated series that has stories left to tell. Unfortunately this year has just had so many amazing and huge games (plenty of which didn't make the list) that I've not had enough time to play this enough to put it on the big list. It's definitely got character from what I've played of it and most years I'd expect I'd have had more time to give to it.

    Torment: Tides of Numenera - Speaking of not having time for RPGs, who would have thought that the spiritual successor to Planescape: Torment would be released and I wouldn't be able to find time to play more than the start of it. The 2D style revitalised in Pillars of Eternity is back but it'll have to wait until I find time in 2018.

    Atelier Firis - Wow, and the curse of 2017 strikes again. Now the Atelier series have eased off the time constraints, they feel a lot more fun to play as light RPGs with a lot of heart. Hopefully I'll get to explore it more fully in 2018.

    Gravity Rush 2 - Here's one that I really should have found time for earlier in the year and just kept on being pushed back. It's here because I really need to find time for it in 2018; speaking of...

    The 2017 games that I really need to find time to start playing in 2018:
Assassin's Creed: Origins, Dishonored: Death of the Outsider, Hellblade: Senua's Sacrifice, What Remains of Edith Finch, Uncharted: The Lost Legacy, Divinity: Original Sin II, The Evil Within 2, >observer_, Pyre, & Mario + Rabbids Kingdom Battle. Ye, it's been a year and a half!

Wednesday 15 November 2017

Tabs vs Spaces is the Wrong Question

We've all been there, let's agree upon a style guide/rules for this source code so we can all work on it without anything falling apart via an inconsistent mess or the commit logs being endless back and forth over style changes. From the most basic (CR+LF or LF - because no one wants that flipping back and forward in a document's commits as people work on it from various systems) to K&R vs 1TBS vs Allman etc braces. If we can find agreement on indent styles, can we also find agreement on spaces (2? 4? 3?) vs tabs?

The problem is, this asks the wrong questions. Why does my view of this source code need to be the same as yours? Why is our version control system working so hard to force us to all agree on the most minute of details (even totally invisible ones like line breaks)? I'd always said tabs was the right answer to indentation because that way the user can set their own indentation length without changing the underlying text but this is not actually the answer. The answer is that we shouldn't be sharing source code as (pure, versioned char by char) text in the first place. We should look at what this source code actually looks like to the machine, the underlying meaning onto which we insert some decoration (comments that we should preserve at their attachment point in the source code): the AST.

Maybe I spent a year or two too many in the metaprogramming/code analysis/compiler dev space recently but this seems like not only the obvious solution (only held back by lack of inertia) but also something where everyone wins. We standardise a bit, because you'll no longer be messing around with fixed-width spacing to align notes and will have to get better at both self-documenting code and writing meaningful contained comments, and we allow the actual sharing of our source code to compare via ASTs. From there the actual storage medium can still be text documents (or some AST intermediate format) but before anyone views stuff then it goes through their own pretty printer. Whatever style guide you want to make to most clear what the code does, you apply that and that's what you see and edit (with your own settings keeping your style consistent). When you share it again then it gets turned back into the AST view and so only the actual changes are committed (to be shared back to everyone else).

Do you find K&R braces so much easier to parse? Then that's what you set your pretty printer to generate for your local copy. There's no reason why we should all be forced to view the same text document representation of source code. We all have different views on the various choices of formatting and which errors it makes easier or harder to spot. We all have different susceptibilities to inserting those defects. We should all find the best way to view source code to reduce our chances of making mistakes when writing our source code. We can start this today. Rather than spending time in meetings and maintaining or teaching the house style guide, spend the time writing tools to make your sharing layer style agnostic. Just start out by always pretty printing the code before commit into a common style and pretty printing changed documents with the user's preferred style after a pull. If you have someone on the team who tinkers with LLVM/Clang then you've probably already got the expertise to make those tools (even if you can't find something suitable that's already out there which can do what we need in reformatting for your programming language). If this idea gains traction, this is something that should be extended into the basic functionality of VCSs.

Once tools start to support this we can look at moving the VCSs to never needing the text version, just storing an AST representation. Also your commit system now automatically includes static code analysis options as you're parsing this text into an AST - no excuse for allowing commits that your compiler will choke on.

We can move into more deeply integrating this new freedom. While I may like mixedCase names/ids, another person may prefer snake_case and why do we need a common naming convention when actually we're just using different ways of compounding a list of words (the actual unique identifier). We can store them as lists of words tied to each name and pretty print then into the actual source code to suit your preference. As long as we're not tripping over any language restrictions then that should be totally fine. We don't need to fight over so much in these style guides, the compiler certainly doesn't care.

Edit: with thanks for links to projects already working to provide the tools to do exactly this: SwiftFormat & Esprima's Source Rewrite demo. I'll add that my own source rewriting tools were always built on PyCParser (which is a lot easier to throw something together with than using the transformation stuff in LLVM/Clang but also only for C99 unless you write your own grammar). I see Clang now has a mature ClangFormat tool so C/C++/Obj-C code doesn't need to poke around in the guts of (potentially moving) Clang APIs for formatting. I see that's already getting some thumbs up (with the same desire to one day fix all this via ASTs).

Also very good to hear of development teams who are already doing exactly what I've suggested above (with rewriting to a house style on commit & option to custom pretty print on pull).

Tuesday 31 October 2017

Guild Wars 1: Halo Edition

I thought I was going to write about Forza again this month. New game, it was the first time back on the circuit-driving stuff for me for some time so all of those new tracks & cars would be fresh (and lovingly rendered in 4K HDR with the arrival of the Motorsport series on Windows). The series had finally caught up with the competition (dynamic conditions etc) and this has always been the best semi-sim racing to be had with a controller.

It was not to be. The actual racing still got me where it needed to be. Start out with assists off (baring a braking point so I don't need to memorise tracks), cockpit cam; overtake the pack for a few laps of racing then go into driving mode and chase that top clean lap for the leaderboards at the end. But I'd decided to play around with longer races in the career (nice option) and beyond the LoD system seeming to remove all the LoD levels at once (possibly now patched), the game's stability simply wasn't there. There are no in-race checkpoints that save your progress so if you select a three hour race (as the long version of the very first endurance race in the career is) and the game crashes after two hours then you have to start again. I asked myself, "what if it crashes again?" and realised I don't know if I want that groundhog experience. Guess I'm waiting for them to nail down a proper release (still no Forzathon events, an auction house, or leagues) that works 100% of the time or add in mid-race save points for endurance races.

What have I been doing instead? Catching up on some backlog stuff and then jumping into that Destiny 2 PC release. I'd generally not been that bothered by the release of the first game, especially with the crashlanding of the launch version they originally scraped together from their cancelled initial vision. Basically the idea of a Halo game without even the framework of a low-budget SciFi story to keep it all going forward sounded like something I'd find ok but not remarkable (and the bits of it I did play confirmed that it wasn't quite sticky enough for me to keep going with that gameplay loop around shooting the packs of enemies).

What changed? I guess I finally had a break from playing Halo games (Halo 4 was fine but maybe I'm done until they find something new to engage me with and Halo 5 was not that) which gave me time to look forward to more of that sort of SciFi shooting. I also found something in the RPG loop of The Division that scratched an itch I wasn't convinced you could scratch well (with years of FPS RPGs showing that anything but the actual shooting or gun collecting was where the real game was - the point of classic Deus Ex is not to constantly find the guns fun to shoot with, they're where you go when a plan is unravelling).

So Destiny 2 is a shooter based around being part of a class of people who are special but during the plot it turns out that actually you are the one true extremely special person (or person in a robot body? some of the world details are really not explained if you didn't dig into the website descriptions provided with the first game) and so get to do a load of heroic missions where everyone speaks in your ear to say what a good person you are for being good at shooting and literally unable to die. Except for the bits where you're not allowed to die and you get checkpointed back to the last save point. It's very Halo possibly by way of Bioshock's Vita-Chambers. But it tells a basic complete story which is accompanied by a load of good skyboxes and enough dialogue to keep you bouncing along that ten hours of main narrative. If you have played AAA solo FPSs, you know roughly what to expect.

There is also, in an almost Guild Wars 1 style move to bring a story to an online setting, lots of side missions (many co-op, others solo) and hidden treasure in the four large open areas that much of the story campaign is built around. There's probably another ten hours of narrative there (moving away from cut-scenes into purely audio and scenarios - some repurposing the mission areas with new enemies and set dressing) and a lot of it doesn't really get pointed out while you play the main campaign story (beyond being map icons to run past).

The story is for pushing players from level 1 to 20 which ties into a gear (power) level of 10 to 200. After which the gear goes to around 300 but you'll have finished the main campaign so it's an ideal time to do all the other side missions. I ended up at around 275 after enjoying those additional stories and hunting for some hidden caches in each open area. I even bumped into some other players and did some of the co-op encounters (not story but just a scenario that plays out against waves of enemies and some props that you have to destroy to capture within the time limit of the public event) while I was moving between locations. It's all very as expected for an online game like this without making it a game you need to constantly group up to enjoy. They put a full Halo in there, even if they did make it so basically better gear stops really dropping at 265 in order to make there a tier left for people who want to group up and do "end-level" activities (some PvP and PvE content, including a single raid, for which there is a bit of story setting it up in the game but not that much - they did kill the big bad at the end of the story so you can't fight them here).

One of the weirder things is that The Division (and what I understand from Destiny 1) built guns from random perks and archetypes/names with a bit of variety to give it that Diablo dice roll for exactly what you get. Here, a gun has a name and a power level; that's enough to completely define it. From there you get to equip your own paint skin, mod (a gem system for attaching a small extra stat to a single slot), and pick from what that weapon type has in terms of options. But you're not rolling a "Gun X with Red Dot 3" - all Gun Xs either have the option (ready to be enabled) to equip Red Dot 3 or they don't. A few guns have no options at all and many it's just a choice of short or medium scope (which changes the effective range far more critically than changing the actual optics of the weapon - if you're outside of the effective range then it doesn't matter if you always hit the weak point, you'll be doing next to no damage).

It's a fun game for the moment to moment and there's just enough variety in there to give you enough to get a strong preference for certain play styles and so weapons that enable that (eg by the end I had decided that I always wanted range for my kinetic slot and leave the 3-shot pulse rifles at home because I'll always take a scout rifle for the DMR-style experience). If you're looking for a slightly more evolved combat than just replaying a Halo game, Destiny 2 isn't a bad option.

Tuesday 19 September 2017

Forza Motorsport 7: Demo

About a year ago I wrote about my history with the Forza series of games and how I found the state of the series with the PC beta/test release of Forza Motorsport 6: Apex.

We are two weeks away from Forza Motorsport 7 finally providing a full track experience outside of the closed console ecosystem and a demo (a three event series which has been used to show off the game at events but now runs outside controlled environments) has just been released. There are already a few concerns about FM7, from loot crates (including exclusive player customisation rewards) taking a prominent role to the Auction House and several other features being missing at launch (they are coming later but this does feel like an XB1X launch game they're pushing out early), but I'm sure we'll be able to get into that next month when we actually know exactly what's in that final retail experience.

I am no Forza pro, the sharpest end of the global leaderboards are beyond my skill levels, but I do enjoy a bit of a spin with assists off and the AI tuned up towards the top difficulty. The rewind options in solo play allows fast development of skills because you can constantly work at the edge of your skill level for that car class. The assists mean you can slowly turn off automation and get used to something new to master while the way those assists limit your performance give a reason to want to drive without them, even at the sharper end where reaction times are being tested. None of that can really be drilled into in a three track demo that fixes the vehicles (this is the introduction that tutorialises the start of the campaign in FM7) but we can get a feel for how it runs (on my ageing PC - hurry up Intel, release those mainstream hexacores) and if it feels significantly different to the previous Motorsport entries.

From a technical standpoint, the dynamics settings allow for a smooth 60fps v-sync on my system driving 4K with 4xMSAA (you can decide which things are static so you can enforce MSAA constantly rather than having it tweak on the fly - there is no temporal AA here to accumulate sub-pixel accuracy over time) but something about it feels off. I can view my replays and see the locked 60fps presentation often without dropped frames around the areas of concern (and what looks like even time-steps on my fixed-refresh screen) but it feels like a micro-stutter. My best guess at this point is that in the points where I feel it, the car is starting to shake on the track (at speed or over corners) and the more reactive camera causes this oscillation to combine with the framerate in a way that feels like stutter. I have tried changing the Camera Motion Effects but that only appears to change how the chase-cam and HUD shake - inspecting the replays shows the cockpit camera is still bouncing around inside the car whatever this setting is configured as. Something about it feels new and possibly something I'll need to get used to in the high-end vehicles before I can feel comfortable.

There are also some areas of actual stutter that I'm finding under extended play; perfect 60fps frame pacing that suddenly stalls for 5-6 frames in a row before catching back up, which is hopefully an issue they're tracking and not a sign my CPU isn't fast enough for the simulation. You can see a slightly concerning stall (10 frames long) just before the lap change in the video above but it's very rare that it drops more than an occasional single frame - completely different to the mess that was Forza Horizon 3's launch.

Edit 21/9: So I actually looked at the performance logs to see if I could find what was happening when the GPU stalled out for these up-to-a-dozen-frame blocks in the demo and just having task manager open made it obvious - I need more RAM. Due to my PC being over six years old, the motherboard no longer accepts multiple RAM sticks (again, weeks away from Intel responding to Ryzen and then I pick which system to buy) so I'm stuck on 8GB. Forza (at least with the settings on Ultra-Dynamic) plus OS (nothing else in memory, even video capture turned off) seems to want at least 10GB of RAM so these stutters (as seen above) are from RAM evictions/shuffling to pagefile.

The new more-forward cockpit position option is great, giving just enough of the dash to read the instruments (although a custom-FoV option would be appreciated to give a bit more control) without losing 50% of the screen to rendering the inside of the car. Everything feels good. In this demo there is no customisation, no sense of how the progression is, but as a small taste then it runs, if anything, better than Apex does. There are a few tweaks that should happen before release (icons for the vehicles on the mini-map rather than opaque rectangles is presumably a texture load issue) but this is looking like a solid platform on which they have hopefully built enough tools to keep everyone happy.

Thursday 31 August 2017

Engine Change: Life is Strange

There has been a lot of discussion of the "fingerprint" of an engine recently. Does it matter to people who play games which engine has been used? Are we beyond an era when Unreal Engine games are desaturated brown blobs that slowly stream in the high detail textures several frames after the camera gets there or Unity Engine games are limited by the lacking level geometry options for efficient map construction? Generally the answer is yes, but there are still some things which you can choose to use from the default engine configuration that make things visible (beyond license deals to save money by showing the splash screen of the engine when you start the game - seriously publishers, pay to not show the dang logo; you can afford a proper premium license).

It's important to note that anything can be rebuilt on top of or in replacement of anything that ships by default in a major engine. Most of them now offer source code access rather than forcing developers to work in a scripting language to do their gameplay code and locking up the engine as a binary blob you can't poke and rewrite (traditionally something that was prohibitively expensive to license access to). Everything on the GPU is just a shader and you can write your own, the fingerprints can come from which shaders are in the examples directory or part of the effects package that is offered with an engine. If you want a depth of field effect, there's probably a well optimised version tuned in your engine options rather than rolling your own and possibly making some trivial mistakes (or some incredibly subtle ones that only pop up on unusual hardware platforms). If you're using physically based lighting then your engine probably has one specific way of doing that with a load of default parameters for exactly how it looks.

With the move from Unreal to Unity, let's explore that in Life is Strange. The interface immediately shows you where the Unreal Engine is an extremely mature option. Everything feels good to just move around with either mouse or joypad. Opening Before the Storm, Unity's UI (at least the iteration being used here) shows less polish. The deadzones that come with sensible defaults in Unreal are here unable to deal with the slight wobble on my old 360 stick. Is the deadzone still only 0.001 here? That does not feel like the 0.1-0.2 deadzone of sticks in something like Halo or Gears - something that should possibly be set even wider in a UI where you're only using the stick as a digital four-way most of the time.

From the very opening screens it is clear that these two games in the series are not going for the same look. We can highlight a few things here from a technical perspective. LiS has a very strong directional blur around the edge of the scene with strong chromatic aberration effect (the blur size is different for each colour, causing fringes) that's missing in BtS. Meanwhile, BtS immediately shows a high quality blur effect being used to create depth of field (which we see in LiS itself but not in this menu, where a thick fog effect really paints a haze onto the bay). There are also a thousand little things about how the lighting is calculated and the tone mapping used to resolve that to the final image which lead to very different results.

But outside of the technical, look at the art. These scenes are more than technically using slightly different technology and effect choices. LiS is always painted with a style that invokes a rectangular brush and that's already apparent here. Leaves to tree shapes to houses, to the white cliffs - it's all being textured for this very specific impression of a certain painting style, faking what would be brushstroke type despite being a clearly polygonal construction. Just look at the leaves on that main tree on the left in BtS - speckled with perfectly circular dots to give the impression of detail and the tree bark, while showing some of the rectangular blocks of colour, breaks them with far too much heavy detail texturing so the brush effect is lost. This is an artistic difference we will see throughout the comparison. It's not the engine that's providing the biggest cues to a changing style but the choices of the art director and other artists on the projects.

Here we finally pick up on that chromatic aberration in BtS but toned down to the point where we only just pick it up in the bottom of the scene (and will continue to only just catch it in the rest of these screenshots). But we can also see that the high quality blur is being used to good effect in this dark scene along with some decent light cones to make this 1337 jump out in the very first scene of the game.

But I still miss the visual style of the original game. Despite the night vs day difference here, I find that things like the heavy fog over a high quality blur make for a more satisfying result which highlights the texture work. It's rough and like the chromatic aberration, it's got absolutely no interest in even pretending to hide itself. It charms me, much like that characters in the game.

When blur is used here in LiS, it's that smearing effect that gets caught out on the polygon edges in the foreground. I know the technical reasons why and I'd avoid it 99% of the time as long as I could afford to use a more expensive DoF system but here, here it reinforces the blocky presentation. Yes, a deep blur is used in spots but it never seems to totally overwhelm the angular stroke edges it smoothes over. I will always look at the BtS depth of field and feel the roundness of it bringing out the smoothness of the scene in contrast to the more angular blocky LiS texture.

Clearly, with objective eyes to the technical details, Chloe is improved in BtS. The eyes immediately show more of a spark of life, there's an attempt to bring the characters towards a slightly cartoon end of realism and it comes with better facial animation and far closer to what you'd expect from CG actors. We will have to see how the quality is received after LiS ran into quite a lot of comments about the lip-sync that showed some had troubles connecting with the characters which getting caught up on technical details of the presentation.

LiS opened front and centre with some strong technical effects that highlighted the art direction and brush style being invoked. Water fell and left rectangular patches of wet to reflect the light, the simple models and texture style jumped out and reinforced that opening menu vista while showing off a familiarity with real-time effects around lighting that merged well with the more classic approaches like using fog to tint the scenes in a less photo-realistic style that built on those base textures. Effects were rarely subtle but it provided a very distinct final look. I am interested to see where BtS goes with this new approach which still nods to the old visuals while removing any rough edges.

Monday 31 July 2017

Platform-Agnostic Hot-Swapping for C

Quick post discussing some coding things that are pretty old but also something possibly not obvious for people who are new or used to modern tools (IDEs) that remove the need for doing it yourself.

I've been really busy but tried to jump into a quick game jam to bash out a new renderer in Vulkan over a weekend. Doing so the core requirements were rapid iteration and low overhead (verbose, explicit everything Vulkan was an interesting constraint). As I'm back on Windows (after five+ years basically exclusively doing serious work on Linux) then I'm using Visual Studio and have access to Edit and Continue. But what if I didn't or was using a programming language not supported or wanted this to be something that worked over several IDEs (including ones without this feature)?

We're used to building our project, running it, and then rebuilding it for another test. But that's not rapid. Here's the old alternative that's possibly as old as shared libraries (maybe even older). Start your main program loop setting up some data storage and then:

[do all your initialisation here - don't leave it in your dll load]
while (notQuitting) {
  newTimestamp = getDllModifiedTimestamp();
  if (newTimestamp != currentTimestamp) {
    if (dllLoaded) {gameUnload(&data); FreeLibrary(tempDll);} // empty old library.
    CopyFile(Dll, tempDll); // so compiler can write Dll later, not blocked.
    LoadLibrary(tempDll); // get new library.
    gameLoad = (loadCall*)GetProcAddress(tempDll, "load");
    gameTick = (tickCall*)GetProcAddress(tempDll, "tick");
    gameUnload = (unloadCall*)GetProcAddress(tempDll, "unload");
    currentTimestamp = getDllModifiedTimestamp();
  gameTick(&data); // run the actual game.

Which gives us a rather simple implementation of a program that waits for us to swap out the dll it uses to actually do the work and then reloads that new dll. Use the storage you pass in as somewhere to pass through any data you want to persist (so ideal for the persistent game state if you're making a jam project). Just make sure you encode any tweaks to the structures you need into the updated OnLoad() method so you can tweak anything. No, it's not as powerful as stop-anywhere Edit and Continue with the automatic editing of locals to allow the program to resume but if you're writing a game then you really don't need that granularity - just reshape things as you need at the outside of the loop between game ticks.

Oh, and one final thing: when Visual Studio is actively debugging the loader application you're in, it doesn't want to let you build another project in the same solution. The command line gets round this issue but I have no idea why anyone thought that compiling a different project should be blocked when anything in the solution is being debugged.

msbuild gameDll.vcxproj /p:configuration=release /p:platform=x64

Monday 19 June 2017

The End of Quad-Core Dominance

Quad-core CPUs on desktops have been the dominant PC configuration for a long time. Long enough that my old early-2011 system is finally reaching the point where the motherboard is probably dying and the CPU cannot be overclocked any higher to fix poorly optimised shipping games. In fact, the crashes and beeps from the motherboard are quite insistent that that overclock is now beyond the system.

However, console-followers will have noted that octo-cores are now the hot thing. This isn't hyperthreading (hardware schedulers that can shuffle two threads onto the execution units inside a single core without evicting either) but eight genuine Jaguar cores running around 1.6GHz in both the main consoles. The caveat being that a Jaguar core has about half as many execution units (count Int and FP ALUs that can be scheduled vs Ryzen above) in which to do the actual maths the code requires and is clocked at about half the frequency of modern desktop processors. Even the decode and dispatch front-end can only chew through half as much to feed the core when compared to the Ryzen's design - everything is relatively balanced. Effectively, there are eight cores but only about as much work can be done (with the maximum throughput) as with two cores on a high-end desktop CPU. This requires game engines be optimised to work well with low single-threaded performance (apparently unless you're porting Forza Horizon 3 to Win10/UWP!) when tuned to each console (where there is far less overhead from the OS/other tasks running).

My old Sandy Bridge's cores actually sits somewhere in the middle of Jaguar and Ryzen in terms of execution units. That's one of the reasons why a new CPU may not clock any higher (especially at the limits of overlocking) than my processor but it can do significantly more work. Each core is bigger and can do more each cycle. But, eventually, four cores is simply not something you can just keep making wider without leaving resources underutilised. This is one reason why hyperthreading becomes a really good move, because juggling two threads on each core increases the chances of being able to dispatch work to each execution unit. The big rumour (basically all but confirmed) is that by this time next year even Intel will have moved to six cores in their upper-end mainstream processors. If you're buying new hardware today (which is where I am) then you must consider this push to increasingly threaded work, the benefit of thread scheduling for wide cores, and the expected future where four cores is something you find on laptops and lower end desktops.

The i7-7700K may offer the fastest single core, but it appears that Intel's new High-End DeskTop platform (with beta motherboard firmware) is offering many cores without holding back single-threaded performance. With enough money, you can now buy six, eight, or ten cores (up to 20 threads with hyperthreading) with that supreme Intel single-threaded performance. Competition will only increase when AMD's Threadripper (four partially disabled Ryzen dies on a single socket) appears in August. What do these HEDT platforms offer that the current Ryzen (octo-core with those cores we already described as wide) doesn't? Twice as much RAM bandwidth from extra memory controllers and more dedicated PCI-Express 3.0 lanes (rather than lanes bottlenecked off the motherboard controller) to connect graphics cards and other high-speed devices. That becomes more of a concern for a future-looking platform as M.2 SSDs already push to use 4-lanes of bandwidth each. The short load times on PC continue to look like they'll go down, even without new SSD memory types.

CPU launch Cores/Threads CBr15 ST CBr15 MT CPU+mobo
Threadripper 1950X August 2017 16/32 170 3000 $1,200
Threadripper 1920X August 2017 12/24 160 2400 $1,000
i9 7900X June 2017 10/20 195 2200 $1,200
Threadripper 1910X??? Late 2017? 10/20? 165? 1950? $850?
i7 6950X 2016 10/20 165 1850 $2,000
i7 7820X June 2017 8/16 195 1800 $800
Ryzen7 1800X 2017 8/16 160 1650 $575
Ryzen7 1700X 2017 8/16 155 1550 $500
i7 6900K 2016 8/16 155 1500 $1,200
i7 8700K? Sept 2017? 6/12 195? 1400? $500?
i7 7800X June 2017 6/12 185 1350 $600
Ryzen5 1600X 2017 6/12 160 1150 $450
i7 7700K 2016 4/8 190 950 $475
Ryzen5 1500X 2017 4/8 155 800 $350
i5 7600K 2016 4/4 170 650 $375

If we assume that RAM will cost what it costs (4x8GB sticks is not significantly different to the price of 2x16GB sticks, everything uses DDR4), the platform differences will come down to CPU costs and motherboard costs. The HEDT platforms are both going to lack value motherboard offerings and so inflates the platform cost beyond simply buying a premium CPU. But also that will provide more connectivity, making use of the extra PCI-Express lanes. The full picture will only emerge in August when Threadripper launches but we can already look at some initial data. I've done a few guesstimates for where we've yet to see initial results and AMD's HEDT is definitely the far more speculative section as we don't even have pricing, let alone beta performance numbers.

Edit: shortly after writing this the main reviews (taken after the weekend BIOS updates) landed so those speculated scores for Intel HEDT have been replaced with solid data - the estimates were basically on the money except the 7820X is actually slightly stronger in single-threaded tests than expected.

Edit 2: By late July, it had become clear that Intel was likely going to react with a new desktop i7 (with six cores) earlier than 2018 and that the models of Threadripper on offer at launch were not the full range speculated upon earlier (rather than being two Ryzen on a chip, they are the parts that failed EPYC server testing so have half the cores disabled and may not offer a low-end cheap variant (1910X)). The table has been updated again (with finalised 1920/1950X data confirmed in August to be as expected, no 1910X on the horizon).

Threadripper will all have 60 PCI-Express 3.0 lanes, giving effectively unlimited bandwidth for anything that will fit on a motherboard. The top of Intel's offerings are also not going to worry anyone who isn't buying several GPUs (44 lanes on the 7900X, 40 on the 6950X & 6900K). Where Intel start to differentiate their offerings is the 7820X & 7800X which only have 28 lanes, not even enough to fully saturate two 16x GPUs, although currently GPUs rarely actually use the full bandwidth offered. The Ryzen and quad-core Intel mainstream CPUs all have 16 lanes for the GPU connection but then mainly rely on their chipset to provide anything else. Ryzen does have four extra lanes that can be dedicated to a M.2 SSD as well as the chipset connection while the Intels generally shuffle far more lanes off the chipset than X370 motherboards - but you can't use them all at the same time as they'll just bottleneck. The issue is when motherboards mask lanes, for example where you have several 16x slots but using them will start to cut bandwidth or disable other connections like M.2 ports. It's not an immediate concern as everything should be able to drive a high end GPU and SSD for now, but expandability may be more limited than the selection of ports (several 16x slots, multiple M.2 ports) on the motherboard implies - the second M.2 port may well be a 2x PCI-Express 2.0 connection so quarter of the bandwidth (2.0 is half the speed of 3.0) of a full M.2 port.

We can certainly see where a future hexa-core mainstream i7 may offer an extremely good value next year with both single-threaded performance and enough cores to compete with the brand new 7800X, even if the RAM bandwidth will be reduced - potentially starving cores with workloads that are mainly about fetching data. It is clear that for threaded tasks the Ryzen 1700X already offers a similar price for even more performance thanks to eight cores and Threadripper should offer a lot more. However, if we look at single-threaded performance then the void becomes apparent and that is what leads to some issues. CineBench 15 isn't the perfect test but it's illustrative of the gap, one that Threadripper is unlikely to dent. The 7820X retains most of the value of the 10-core cousin that costs $400 more and offers performance in every use case for an expensive but attainable price (no worse that a premium laptop). Of course, all of this changes if Threadripper has some secret sauce to provide single-threaded results beyond that of Ryzen. In less than two months we should have all of the data. The 7820X offers twice the performance (in tests that can spread the work) for less than twice the price of Intel's mainstream i7 option and without sacrificing any single-threaded performance or overclocking ability. For those who don't require the maximum single-threaded performance (especially overclocked), the current Ryzens already offer a significantly more attractive package at a similar price to the quad-core Intels.

Last year's $1200 Intel HEDT offering is certainly looking like a very bad choice while the $2000 premium combination looks to be made completely redundant with Threadripper. Hopefully by speculating about where the mainstream goes next year, we can avoid bad choices if we need to buy a new system this year.

Sunday 28 May 2017

Do the Work: Mouse & Keyboard in Fallout 4

So I've been thinking about controls recently. Both for a project I'm working on that will primarily be played on a standard controller (the one that hasn't changed much in 17 years) and because I've been playing games that clearly didn't. The most glaring example of that, despite nine major version patches and 18 months to fix it, is Fallout 4.

It's everything that you'd expect from an evolved Fallout 3 - a better renderer on top of that clunky old engine (it actually looks better than in screenshots because the temporal AA appears to cycle sample points); a million incremental design decisions giving you a host of new systems to engage with; and another world and story that initially feel slightly empty but the longer you play the more they feel like they're a deep sucking void. But the controls, oh the controls.

I started out booting into the main menu to find that because I had a controller plugged in (hardly an usual configuration) that the game had completely disabled the mouse so I couldn't click through the menus. First I had to disable the controller, then I could start on doing basic stuff with the mouse and keyboard. I rebound everything as I wanted it and jumped into the game. Only I hadn't rebound everything because a good half of the controls in the game are not rebindable and actually clash if you do rebind things because they stick to the old WASD layout it defaults to.

I don't use WASD and yet in VATS I must use QWEASD as my controls.

The 'E' to accept in these menus doesn't work. Presumably because I rebound the default for use from 'E' to something else but the thing I changed it to is also a unrebindable default in the interface. It is from this conflict that I realised that the other buttons in the previous inventory menu (top) are still active on this page. 'X' sorts and 'T' (the thing I rebound use to) moved a load of stuff into the right storage. 'T' does repair, which makes me wonder why 'E' doesn't do anything (bottom). Lovely when you're not expecting it.

The 'Alt' here is never mentioned in the interface for rebinding keys. It simply isn't a control they expect you to ever move from the default. So you can't change it. This isn't the only things that got forgotten off the list of bindings, outside of the ones that default to their original bind and then sometimes don't even work. This is a whole different kind of interface FUBAR.

So let's talk about one of the major new systems in Fallout 4: the construction interface. Here you can build your outposts and grab a load of raw materials for the new trash into upgrades system. Only 'R' is bound to scrap the object in from of you. You can't change that binding. I move with RDFG. Yep, when I open this interface in the outposts it disables the move forward key. Why offer key rebinding if it doesn't actually work? This is a shameful lack of effort and design foresight. In a game series that is now fully a first person shooter with RPG on top. But appears to only expect players to use a controller and if they do use a keyboard then to not ever rebind anything because that system simply doesn't even approximate a working configuration menu.