loopingworld.com

As the header says I'm now using loopingworld.com as the main site.

This means that the site here won't (usually) be updated and I'll eventually copy all of book-related posts over there. The rest of the stuff will stay here for as long the site stays up (not planning of pulling it down for the foreseeable future).

UPDATE: There's a possibility I'll reopen the blog, but it will be for writing about roguelike development, tracking my own (lack of) progress.

Friday 5, September

Rape culture, #GamerGate, misogyny and Slow News Day

These are a few forum posts (relatively standalone) where I tried to analyze and explain what the hell is going on. When I'm doing this sort of thing I step away from my own personal opinion and just try to figure out the motives behind all that I see. I try to understand and describe what I see from a neutral point of view.

Notice that I don't mention Zoe Quinn, because that's one aspect that I just find baffling and do not understand at all.

So this is my interpretation of what is going on:

--

All these women (and some guys) are saying is 'Can we have less violent video games please, with less violence towards (insert choice of concern)?' and the reaction from the socially conditioned video game masses (that are mostly teenage boys and maladjusted guys) is 'KILL THEM! BURN THE WITCHES! GAYS!'

You won't reach your goal by ranting about someone else's enjoyment because you don't have yours.

Your actual problem isn't about the next GTA, your problem is about the need for games that do not exist yet. A market space that you feel is empty. So the goal is: fill that space.

But if your strategy to fill that space is about going against someone else's space, you simply won't obtain much (if not reactive hostility).

I'm talking from a purely practical point of view: you will obtain very little by pushing the issue in that way.

--
(context: game critics or players going against perceived rampant misogyny in games)

The problem is that those critics seek contrast. As I said above, instead of trying to find and develop a new space, they rile against current games.

It's only natural that someone who enjoys CURRENT games feels like it's an attack on the things they like. And so all the accuses about limiting expression, freedom and whatnot. It's like: you're stepping into my garden with your haughty judgmental stance. You judge things I like, and by extension you judge me as a human being because I like those things (rape culture, every white male guy gamer endorses rape by liking and playing these games). So now I'm going to kick you out. Very vehemently. You're not anymore a welcome guest.

The core of all problems is this judgmental look from the outside. Someone looks at what you do and what you like, and judges you.

The problem is again that this strategy sucks. If you want new types of games, once again, you don't get them by confronting what already exists and pretend change (like petitioning to add female avatars in Assassin's Creed). You simply open that space. You focus on new games that do not exist yet, instead of ranting against games that exist and that you scorn.

But if instead your style is confrontational, then the contrast just escalates in the ways we've all seen. Legitimately or not.

--

Finally, someone came along and said "Hey, whoa, these are some pretty offensive worlds you guys have created, I mean just look at these examples"

This is a judgmental stance.

It reads like "whoa, you are a lesser human being for liking and appreciating this stuff. Feel ashamed of your gaming habits, poor kid."

It's the implicit scorn that sets people off: "Haha, look at this kid."

Are you surprised that then these guys respond with all the vitriol?

--
Making sweeping generalization only stacks one faction against the other and builds up the hate. I'm simply saying that this "strategy" to address the very issue won't solve a thing, and is instead likely exacerbating it.

Vile, hateful speech is to condemn regardless of its topic. If there's more of it than usual, it's because this war of factions was energized by the amount of attention it received.

The attention itself is good, but too often to defend a position people point to the worst cases in both parties.

I'm persuaded that a majority of the vocal minority is made of trolls who don't even think what they are writing, they just bask in the mess and are having a laugh. Just because there are lots of people like that, who enjoy the vitriol. It's like attending one giant rave party that lasts for weeks. They do it merely for fun, and not for the political heft of the issue.

And it's *these trolls* in particular that create the revolving party. I'm writing about this because my twitter has become 80% clogged by this. And between a number of developers commenting the issue, 90% of their tweets is about POINTING AND LAUGHING at the worst examples.

These developers and players are TAKING THE BAIT, making everything worse.

These are the same people who created the #ResolutionGate because Xbox output 720p compared to 1080p PS4. It's just another giant meme.

You know? Slow News Day.

Nothing exciting happens in gaming, waiting for the autumn releases, people are bored. This one topic is just the occasion for a number of people to enjoy the Internet in their own Special way. Everyone else just took the bait and eagerly jumped in the mud pit. Because it's fun and makes you feel like you belong to a community. And as when kids go around in bigger groups of kids, the naughty becomes the style of choice, because you are anonymous in the group and being part of the group means you don't feel any personal responsibility.

It's exactly like city-wide looting, when people get completely batshit crazy just because they are in a group that legitimates all they do.

Monday 14, July

Setting up all the shit (MinGW-w64 and libtcod)

The original idea was to document all the steps, from deciding which programming language to use, the books I used to learn, the compiler I decided to use, how to set it up, the editor I would use, its own configuration and so on. There's quite a lot of stuff and it requires quite a bit of time to examine and figure out.

Since I just went through the process of refreshing a few things, I'll document at least this transition.

The problem I got was that I was looking for a way to convert hex format color codes, like HTML #FFFFFF, converting it to RGB that I need to use to make colors within libtcod (the roguelike library I use to print stuff on screen).

In the end I came up with something like:
std::stoi(color.substr(1,2),nullptr,16);

This is supposed to work, but in the standard and most up to date version of MinGW it doesn't:
error: 'stoi' is not a member of 'std'

And if you look it up on the internet you'll see it's a bug in the distribution that has been there from YEARS. On top of that, this standard version of MinGW is lagging behind with updates.

So I started looking again for alternatives and found two:
- http://nuwen.net/mingw.html
- http://mingw-w64.sourceforge.net/index.php

I went with the second that seemed more widely adopted but, honestly, the documentation sucks.

"Mingw-builds Project" and "Win-builds Project" on the sidebar lead to the same page. And on that page you find again both options:
Mingw-builds project
Win-builds project

Both seem to target Windows, so I don't know the difference. I decided to go with the second option that more explicitly targeted Windows and that looked like based on a more stable version. So I end up on another different site:
- http://win-builds.org/index.html

The documentation here is worse than sparse. We get a:
"Installation on Windows can be done for MSYS, Cygwin or without them."

Initially I tried a barebone install, but eventually I found out there was no "make" in this package, and to compile my own game I normally use a basic form of makefile. MSYS instead is a tool that creates a Linux-like shell under Windows. Normally it is not required, unless you want to compile other stuff that makes also use of Linux commands and the like. This is OFTEN the case when you want to compile other games and libraries.

So I knew that MSYS at least included "make". But the MinGW package here does not include MSYS. If you follow those instructions on that page you get:
for MSYS: run it from the command-line as: yypkg-1.4.0.exe --deploy --host msys

But if you do this, the program asks WHERE you have installed MSYS. So it's obvious that first you have to install MSYS, then you install this MinGW on top of it. But, go figure, if you install MSYS it will ask you where you have installed MinGW. So read on and lets figure this out.

Since I needed MSYS, I went looking for a standalone MSYS package, and reached this other page:
- http://sourceforge.net/p/mingw-w64/wiki2/MSYS/

Have I already mentioned the documentation sucks? Because that page there gives you three package options, the last of which is said to be more inclusive. So you go grab that one, but when you look in the archive you notice there's no "sh /postinstall/pi.sh", which is exactly the command it tells you do execute to configure the program.

So, instead of downloading that third package, I downloaded the middle one. In this case it had the configuration script. BUT the important point here is that you don't need to execute that configure command at all. So all those three packages will be fine, and you should just choose them depending on what kind of features you want added (if you are a noob like me you'll probably use none of them, so you could as well go with the first package. Though, as far this guide is concerned, I personally used the 2nd).

Before starting to install stuff I'll mention that whereas installing MSYS included with standard MinGW puts MSYS within MinGW itself, instead if you go with the option of installing MSYS, then it's MinGW that goes into MSYS. So you'll only interact with MinGW through MSYS itself.

Let's start installing stuff. Since I work in D:/, I'll install MSYS in D:/msys.

That second package I downloaded comes in just a "MSYS-20111123.zip", so I'll simply unpack it in the directory, making sure that MSYS bin directory becomes d:/msys/bin

At this point you'd normally execute D:/msys/msys.bat opening a Linux/DOS prompt (right click on the window top to set properties as you like, like buffer size, font type and useful QuickEdit mode), so that you could give it the configuration command. But with MinGW-w64 this step should be skipped.

Then I proceed to install MinGW-w64 itself, downloading the package manager from win-builds.org and launching it through the command line/DOS prompt:
yypkg-1.4.0.exe --deploy --host msys

It will ask you to install i686 or x86_64. As far as I know it's basically 32bit or 64bit. Since I'm on 64 bit I decided to try with 64 by default, and it's also possible to install both and then switch to the version you want to use through a command given to MSYS. But consider that when I tried to install both, after it finished installing one and started to fetch packages for the other, IT CRASHED. This is not a big deal since you can just relaunch the installer, but it's a better idea to install 32/64 separately, so running the launcher twice.

After you tell it which version to install, it will ask for MSYS directory, so I give D:/msys which is the root where /bin should be, and press ENTER. Then it will automatically download the packages from the internet and install them.

The whole thing (32+64 bit packages, and MSYS) takes about 1.2Gb on the hard disk.

Now is the time to configure MSYS. Since the package manager seems to install MinGW within MSYS, so that the 32bit and 64bit versions can be freely swapped, there seem to be no need to mess with Windows PATH or MSYS configure scripts.

Instead I used this command (explained here):
echo '. /opt/windows_64/bin/win-builds-switch 64' >> ~/.profile

This essentially switches by default to the 64bit version. Whenever I open msys through the .bat, it will be already set up to work in 64bit toolchain, with all the paths set correctly. If you then type gcc -v it will look up at the right version of gcc it has internally (4.8.2 at this time).

Apparently no other tweak seems needed. I was able to compile my game alright, so the paths should be already set correctly.

In short:
- Install MSYS separately by simply unpacking the archive in a directory you want to use.
- Launch the MinGW package manager through the command: yypkg-1.4.0.exe --deploy --host msys
- Pick either 32bit or 64bit version, or both, and tell it to install into MSYS root directory (where 'bin' and other directories are)
- Launch MSYS with the .bat file in its root, and give the command to default to either 32 or 64 version, like: echo '. /opt/windows_64/bin/win-builds-switch 64' >> ~/.profile

Now the problem is that if you want to use 64bit, libtcod library is instead compiled as 32bit version, so if I now try to recompile my game at 64bit it will fail because it says the library is not compatible.

So I went and had to recompile the library itself on 64bit. Yet, this also requires a further step, because the SDL it uses also needs to be in 64bit. Since SDL1 is not available in 64bit, I had to compile it myself. So I downloaded the sources for SDL 1.2.15 (because for some reason SDL2 is INCREDIBLY slow with libtcod), launched through MSYS: configure, and then make.

It compiled alright. Then I only had to move the compiled SDL-1.2.15\build\.libs\libSDL.dll.a to libtcod-svn\dependencies\SDL-1.2.15\lib\mingw

And finally I had to tweak libtcod makefiles, because they use mingw32-gcc and mingw32-g++ that do not exist in this MinGW-w64, so renamed them to just gcc and g++

To compile libtcod I use, from its root: make -f makefiles/makefile-mingw release

Also consider that through my various attempts I was often getting compiler/linker errors. I eventually found out that some data was lingering in C:\Users\username\AppData\Local\Temp\libtcod so make sure the Temp directory is clean if something goes wrong

This should be enough to compile the library fine. The tool to compress the .dll at the end will fail, but the libraries still work well for me.
EDIT: You can obtain here a more recent version of UPX that compresses 64bit files. Just download and move upx.exe to dependencies\upx\win\ in libtcod directory. The makefile will use it automatically, and you can also use it manually to compress SDL dll as well your own game exe, if you want.

So finally, after having both libtcod and SDL compiled in 64bit I could also compile my own game fine. Caveat: it now requires another dll to run: libwinpthread-1.dll, which does not seem to compile statically. So you have to go fish for it in MSYS/MinGW directory and move it to your game dir.

But otherwise it actually runs, and with a nice 8-10% speedup in my case, compared to the usual 32bit version. And std::stoi compiles fine.

Last tweak: D:\msys\etc\profile can be edited so that every time you open msys.bat you are already in the directory you want. At the very bottom there's a line cd "$HOME", so I commented that out and edited to what I needed:
cd "D:/foe/foetest"

To update this distribution of MinGW-w64, when new packages are released, go into /msys/opt here there should be one or two directories, for 32 or 64 bits, pick the one you want to update, navigate into, for example, /opt/windows_64/bin and (hopefully) just double click on yypkg.exe it should check the repository for updated stuff and install everything automatically.

Tuesday 17, June

Can't have nice things

I won't even mention what it is about, since we're clearly dealing with incompetence and I'm utterly pissed.

This is a JRPG game that was announced for release on Steam for "Winter 2013". Then winter passed, so it was announced for "Spring 2014". Then spring passed.

Actual quotes, June 5:

We're still hoping to have it released BEFORE summer if possible, but failing that, I'm almost certain we'll get it out before fall, so summer is a safe bet.

Safe bet.

A couple of hours later, he checks the calendar:

Oh, crap... I forgot how close summer was!

...You're right, I'm thinking this isn't going to make spring after all...

He forgot summer was close.

This being the first title, because they also announced the MUCH BIGGER sequel. For Summer 2014. Yeah.

Go fuck yourself, fan translations are 300% more competent than this shit.

Friday 13, June

This fucked industry

From a developer post on Reddit, about the Assassin's Creed fuck-up:

However, most teams on AAA don't want to give up quality for anything. Why? Because that means lower Metacritic scores for one thing...a thing that most studio bonuses are inextricably intertwined with. Busted your ass for 2 years on a project and it's expected to bring in a 90 Metacritic so you can get your 20% IC bonus? Wait, you only got an 88% because some jackass kid who gets paid in pagecounts and free games decided you did a half-assed job on the animations for the female character compared to the male and the side-quests weren't involved enough (because your team threw those out to work on the female characters)...no bonus for you, sucker!

...Huh?

Wake up. The responsibility or the blame aren't for the "jackass kid" who wrote a review. The responsibility is on your idiotic management who decided you get paid on the basis of Metacritic.

Get your priorities fixed. Responsibility usually goes upstream. Same direction where the money goes too.

Wednesday 11, June

Don't put stones on the rails of the Hype Train

I so hate when I see this happening. Erikson once told me that I'm disruptive of online communities, and get so much aggressive backlash, because it's like everyone makes an effort to go with the flow, while I'm like on a bridge and dropping stones into the river.

Right now, at the E3, it's the time of the Hype Train. You want to be part of the community and considered to be one of its members? Are you a gamer? Then let's build ANTICIPATION. And together we'll share excitement for all these wonderful, unimaginable great games that are coming. It means this is a POSITIVE moment, when you are asked to put down and forget your criticism and critical thinking. Just watch the advertisement and be part of it.

But nope, you want to spoil it and remind what's at the end of this railroad. It is not the time.

--
It's dumb talking about this when it's all already done. It's SMART talking about this when it is actually happening, instead of being surprised after the fact.

Dark Souls 2 bullshit started well before the year it was released. If all these potential players don't learn ANYTHING from what already happened and are ready to swallow it all again, then this is exactly the problem. YOU are the problem, not the developers. The developers simply exploit what they find. They find a gullible, naive audience? They exploit it, since they will believe everything that they are being told.

When the game is one month from release all the rants and complains result to absolutely nothing. You suck it up and shut up.

But if you start to complain about this when it's actually happening, and call developers out to STOP THIS SHIT, then maybe they'll understand it doesn't work, and that it actually hurts the business to promise something the final product will not match.

But nope. Keep blindly worshiping your developer gods, so they'll keep cheating you.

The Division: E3 2014, the year of delays, sequels and vaporware

I've called out Eve-Online for bullshit and vaporware for years. These days you can see the result of chasing after bullshit, with CCP firing hundreds of people. Why? Because instead of sticking to what they knew (an online space simulator) they started wasting money on all sort of idiotic sidetracks: characters walking in stations, first person shooters, brand new MMORPGs without a vision.

But in 2014 vaporware is now the absolute norm, considered perfectly normal if only slightly subtler and used to fool the players. After having seen almost all conferences my conclusion is that this E3 celebrated a new standard of total shamelessness: around 90% of the games shown, that offered "gameplay", are absolutely vaporware in the form that what you'll actually get on the system being publicized will look NOTHING like what was shown during those videos. And this doesn't simply includes graphic downgrades, but also fake animations and scripted AI scenes.

Instead of making great games, the budget nowadays goes first and foremost into presentation. I can't even imagine how many dollars and man hours have been wasted on CG trailers and game presentations that will never be featured in the final game.

The ad is the game. You open the box, and you find nothing like what you saw in the ad.

It was a show of scripted scenes, including fake "player" voiceovers. And The Division should absolutely win a prize for being the one game in the whole show to have put EVERYTHING together in one gameplay video that is probably MORE fake than the maximum shamelessness up to this day: Killzone 2.

Either players start a riot against this trend of fake advertizing, or this is only the very beginning.

(TotalBisquit, one of the few worthy critics left, seems to agree.)

Sunday 8, June

Wildstar, what's wrong

It's not about what's wrong with Wildstar, it's Wildstar being wrong in itself.

I recently got FFXIV because I could get it for cheap at around $10, and that's enough for me. I rather enjoy it. System-wise, Guild Wars 2 is superior, but it has none of the charm and personality, so in the end I enjoy FFXIV far more than I enjoyed GW2. I play FFXIV because there's an interesting world, because it has content. Whereas GW2 has good systems, but feels like an empty, dull shell. So these two are the only two MMORPGs that I consider barely worth the attention at this time.

Then there's Wildstar (TESO is also out of my zone of interest, because of what I perceive as a total lack of direction). I have zero interest in it because it makes the stuff I hate in GW2 even worse. The super-fluorescent, over the top, completely inconsistent style. The stuff put in the game for no real reason. It's like the worst of Facebook games rolled into the ugliest, most monstrous package ever.

To better understand what I mean you can read Tom Chick's impressions. What he writes there is PRECISELY the reason why I wouldn't play Wildstar even if it was completely free. I hate its style, I hate its UI, I hate its game design. It's not "personal" hate, it's just wonderfully explanatory of everything I dislike in a MMO. Take Wildstar, turn it upside down, and you'd get what I consider a masterpiece.

It truly looks like a patchwork of systems without any coherence. Just an ugly monstrosity derived from this kind of game design without a direction or vision. It's not a MMORPG, it's an imitation of one.

Some selected quotes:

At this point, you’d think Wildstar is a collection of things other MMOs do, mostly World of Warcraft, done in pretty much the same way they do them, but without any sense of vision or identity, without any selling point, without anything to distract you from the inevitable burning question, much less provide an answer: “Why am I playing this instead of an MMO I’m already invested in?” It is a collection of MMO systems in search of a game. It is unconnected and uninspired stuff.

The text pops up on screen and the narrator says something supposedly funny, like, “Holy shit, you’re going to fuck up the bad guys now!”, except the words “shit” and “fuck” are bleeped out. It’s as if someone played Brutal Legend and liked the font.

"some people liked it, so they left it in there. That’s Wildstar."

Stuff that’s stirred into a game because some people liked it. Not because it’s good, or clever, or well made, or part of a distinct vision or coherent design. But because someone liked it and a bunch of other people shrugged and decided to leave it in there. What a terrible way to make a game, particularly an ambitious one like a subscription-based MMO.

And it has a narrator. “Double kill!” the narrator hollers, “Triple kill!” I think he even says “Killtastic!” or some dumb thing if I keep going. Who is he? Why is he talking to me? Is this a gladiatorial MMO? A narrator is watching over my shoulder and commenting on my battles, on my achievements, on my leveling. Shouldn’t this be my adventure? Why is the idea that I’m entertaining spectators introduced into this game? Who puts a narrator in an MMO? Someone must have liked the narrator.

It's the anti-world, anti-immersion, anti-simulation. Basically the entirety of the MMORPG genre when you squeezed out all the good aspects, and are left only with a skinner box with no soul and no art. The worst of fast food of gaming.

I'm glad it exists, because I can point to it and show everything that is wrong, so perfectly summarized in just one game.

Saturday 5, April

Guild Wars 2: ten years in denial

If I had an ego problem I'd say that some dev from Guild Wars 2 finally read my blog and received enlightenment. But I don't have that, so I simply believe that they are very slowly dragging themselves where I always stood, because my ideas have been flawless from day 1. You may think this is still way too arrogant, but the fact is that ten years later my model is finally getting adopted.

Simple story: in 2012 I ranted against Guild Wars 2 server structure saying it was fucked up (I'm linking the forum and not the blog because it has the hard dates). The reason: a good server model wants persistent/home servers for PvP, while it needs instanced PvE, in order to load balance and avoid players' fragmentation.

So I ranted because I was realizing GW2 was going to implement a fucked up INVERSE model: PvE was server-based/persistent, PvP was instanced. Aka: how to design a system ass-backwards.

But the model of server structure I suggested is way older than that rant, and it was described in 2004. See the date of that forum post. Basically this new GW2 patch goes live in the 10 years birthday of that forum post. In 2004 the problem was that the technology maybe wasn't ready to support that structure, but in 2012 Guild Wars 2 employed all the systems I used in my own proposed structure, but ordered them incorrectly. The forthcoming patch rectifies some of those mistakes and brings the structure closer to the one I originally proposed.

Arenanet in 2014:

It means that maps will have more players adventuring in them to provide you with the best possible PvE experience.

Me in 2012:

The solution I suggested was thought to fix both player density in PvP, and PvE feeling always "alive" with other players. Design goals are the same.

What does it all mean? Simply that my ideas, once again, get validated by being adopted. It's like witnessing an epic long detour that eventually has to pass through HERE.

They'll eventually get PvP too, even if maybe it will take another ten years for that. Let's be patient?

Friday 4, April

World of Warcraft Draenor expansion resets the game to vanilla 1.0

This is what I've been saying for a few years: WoW was an absolutely great game with almost flawless design, that then got progressively broken by game designers that upset the original fine balance.

Lots of changes with the new expansion: http://us.battle.net/wow/en/blog/13423478/

What a pathetic display of mudlation applied to game design. It all amounts to "with each expansion and patch we broke our fine design, so now we are rolling everything back to how it was originally, so that we can start breaking stuff again."

So Draenor = WoW v1.0

as healers and their allies acquire better and better gear, the percentage of a player’s health that any given heal restores increases significantly. As a result, healers are able to refill health bars so fast that we have to make damage more and more “bursty” in order to challenge them.

To that end, we’re buffing heals less than we’re increasing player health.

Or:

Over the years, we've added significantly more new spells and abilities to the game than we've removed. This has led to the complexity of the game increasing steadily over time, to the point we're at now, where players feel like they need dozens of keybinds.

That means making some abilities restricted to certain specs that really need them instead of being class-wide, and outright removing some other abilities.

Or:

Another big takeaway from Mists of Pandaria is that there was simply too much crowd control (CC) in the game.

To solve that, we knew that we needed an across-the-board disarmament.

It took them quite a while to realize this. Now they basically invented "Infinity, the game design": things start great, then slowly get broken by designers who enjoy fiddling with what works, until it all goes back to the starting point for a new loop.

First they hype stuff being added: people go YAY!
Then they announce they are removing the stuff they added previously: people go YAY!

The ultimate achievement: make what's old feel as if it's new. It already happened with Diablo 3: they design new broken systems so that everyone rejoices when they finally remove them.

And game designers are getting paid to remove what they just added. It's like modern economy: the illusion of wealth by moving virtual money around.