Tuesday, 15 April 2014

Final Fantasy XIV - The good, the bad and the "omg what were you thinking?"

I've been dabbling in Final Fantasy 14 for a while now - even got my cousin into it so that I wouldn't get bored. And here are my thoughts about it.


The Good

Single player

Lots of content. The main story line appears to only have the occasional dungeon segments where you actually require other people to progress, but it looks to me that most of the game's side-quests are designed for just one player.

Inventory space

It's large enough so that people who play just for the questing/instancing component don't have to worry about it. However, if you plan on having a fully developed character, you'll soon learn that inventory space is precious and requires planning. Overall, in my opinion, the available capacity is about right.

One character, all classes

I just love this. I'm what one would call an "alt-aholic" (from WoW) and not having to swap characters when I want to play a different class is a big big plus. Especially considering that I can gather up gear for the other classes while playing with the same character.

Leve allowances

The game features repeatable quests, but you are limited on the number of times you can do them. Instead, you have an allowance (leve) which is awarded over time (even when you're offline). This is an easy way to help infrequent players to keep up with the regulars. This goes in addition to the widely implemented "rested bonus", which basically does the same thing.

Proper NPC hubs

Some games have really poorly designed cities. Where do the citizens actually live? Where do they grow their food? Why are they not walking around town as normal people during the course of their lives? FF14 got this right - the cities do feel "real" (at least Uldah does). Gridania and Limsa Lominsa probably not so much though.


Voice acting

Main story quests have (some) voice acting, which was a surprising element in the game. Well done.

The Bad

Voice acting

Nearly non-existing for anything other than story line quests. NPC's won't say "hello" or "goodbye" to you.
I miss WoW's Orc's "Zug zug".

Baked animations

With today's hardware, it's not impossible to have some randomness on animations. After a couple of hours of sword swinging, you kind of know the animations by heart already. Some variety please!

Loads everywhere

While most games will allow you to seamlessly transitions from one game area to the next, FF14 won't. You have loads everywhere. It's quite annoying really, because they're not fast either - even with an SSD. Seamless transitions between areas have been around for AGES! Even worse, going back to an area that you just left won't make the load any faster. Hasn't Square ever heard about caching? I have 16GBs of RAM, time to put it to good use! As of 10th April, Square seems to have improved this.

Crafting

Crafting is dull. Sure you have the "auto-synthesis" to let your character automatically craft a bunch of the same item, but EXP-wise, it's not profitable. If you want to really level up the crafting class you have to painstakingly spend hours crafting items, striving for the highest "Quality" bar you can produce.
Also, it seems that all crafting classes are intertwined - at some point you need the others to level up one or you'll have to buy the materials off other players, which might hurt your profitability. But I suppose this can be seen as a good thing too: only the truly dedicated succeed.

The interface

For a "medieval" and "magic" theme'd game, the game interface feels very technological. The colour scheme of the menus, typefaces, mili-second resolution numbers...



Also, when you finish quests with a final cut-scene (such as the crafting quests), when selecting the quest reward, you're not able to open your inventory to compare the item stats. You can't talk to NPCs while mounted either (at the very least the game could auto-unmount you).
You can't change gear when the crafting log is open. I see no reason why this is so.
You can't "/tell" (send a private message) while in a dungeon (or in a single-player instance). Why?!
The launcher needs some clean-up. I wish we could have automatic login. And I'm always asked for the one-time password. Surely it would only be needed the first time you login on a different IP address. And you can't update the game without actually logging in.
If the connection drops after launching the game, you have to restart the whole process again. There's no neat re-login screen in-game. Bah...
Lastly, my biggest grief - the equipment sets aren't synchronised with the server. This means that if you play the game on a different computer, you have to set up all your sets again. This makes no sense to me.

The class names

Why name it Thaumaturge? Why not the alread-estabilished "wizard" or the typical Final Fantasy "Black Mage"? My spell checker doesn't even recognise "Thaumaturge" - is that even a word?

Date formats

This plagues lots of games. When releasing a game internationally, you'd expect bit software firms to get localisation right and use the standard date format (or at least an un-ambiguous one). Either DD/MM/YEAR or YEAR/MM/DD please.

Distance measurements

While Blizzard went the way of the dinosaur and used "yards" for WoW's distance measurements, Square opted by the next worse thing, "malms", "yalms" and whatever which have no meaning for the players. I assume of course they meant "miles" and "yards" and whatever primitive measurement still in use by some countries, but that is no excuse not to use proper metric system.
Not that we can measure distances in game anyway, so I suppose this point is moot.

The "OMG what were you thinking?!"

Gear style

Seriously, no one in the real world would wear bright yellow armour. That's begging to be shot at. If people want to use such colours, they can dye the gear (which you can do) but please, don't make me pass by a piece of equipment just because the colour is abhorrent, because I am that vain.

And some pieces go beyond ridiculous. Let me show you: (other gear pieces removed for added effect)

Interestingly, this isn't on my belt slot. It's on my trousers slot (leg equipment). But the funny part actually is that this "leg" gear piece is actually smaller than the underwear the characters have should you be completely nude:

I've since dyed this piece in pink. Got some laughs out of it!

Thursday, 27 June 2013

Fractal Design Define R4 and Corsair H110

I am currently building my own computer by getting the components off Amazon, Aria and Scan whenever their prices are down, and I opted for the Fractal Design Define R4.
Ok, it looks cool. Realy cool (see the pictures below).

A while after, one of the coolers I had in my list (Corsair H110) dropped in price; I ordered it and quite excitedly started fitting it onto my case (even though I don't have a mother board yet, but new toys...).

The case specifications described it as being able to allow 140mm radiators on the top of the case; while the fan holes are there, there was a bit problem: the holes didn't match up with the cooler:

As you can see, the screw holes on the cooler have a wider space between them than the case. Foiled.
There was not enough room to mount the radiator at the front, and on the bottom of the case, the space was occupied by my PSU (Corsair AX 760).

Meh, had to send it back - it was either that or the case (which I fell in love with). Ordered the H90 instead; lets see how that one fits!








Wednesday, 16 January 2013

Chrome sound and pulse audio

A while ago I suddenly stopped having sound in Google Chrome. The symptoms were a hung YouTube and Google Music (the progress bar would be stuck at 0 and not progress). I booted Chrome through the command line, but no helpful messages as to diagnose the absence of sound. The rest of the system was unaffected.

I suspected it was the Flash plugin. But, wait, I am using HTML5 YouTube and Google Music...

I traced back to see what I had changed on my system to cause such problem; it had been a while since I used this sort of web applications, so didn't really know how far back I had to look.

Of the packages I had recently updated, I only found the Kernel to be a reasonable suspect. Alas, my kernel configuration has been the same for quite a while.

After a bit of googling and fiddling with Portage, I realised that Chrome uses PulseAudio whereas the rest of my system uses GStreamer (either directly or through Phonon). Could this be a bad config?
As I delved into /etc/pulse/ I noticed a strange thing... I had not one, but two audio devices; the first being my Intel HD Audio and the second an AMD Radeon audio device. Weird. Could PulseAudio be routing the audio through this card instead?

I searched Portage for pavucontrol (PulseAudio Control) but it would pull in loads of GTK dependencies; surely there must be a command-line solution?
I looked on the config files for PulseAudio, and with the help of Google, I found http://ptspts.blogspot.co.uk/2009/03/how-to-select-alsa-sound-card-and-have.html and after I tried this, the videos on YouTube were suddenly playing about twice as fast as they should. Well, at least they were playing!

What if instead of selecting an audio sink for PulseAudio, I could route it through ALSA? After all, that's what GStreamer is doing, and it's working fine. That solution turned out to be very easy and quick, as described at http://forum.pinguyos.com/Thread-How-to-Pulseaudio-and-Alsa.

On my system, all I had to do was comment out the udev module on /etc/pulse/default.pa

#load-module module-udev-detect
and enable the ALSA module
load-module module-alsa-sink

And sound's back!

Friday, 4 January 2013

High memory java death

I recently further upgraded my system's memory to 12GBs.


I turned the computer on and everything worked just fine.
I popped open Thunderbird and Chrome and everything was right with the world. Until suddenly, Thunderbird just dies when I opened the Chat tab. I found that rather odd, but the bug was reproducible. I couldn't really be bothered with debugging it, had more important things to do, but then Chrome started randomly dying. I ran it through the command line, and the error was "Bus error" and chrome://crashes/ didn't show anything. Obviously, I immediately blamed the new memory stick: it must be faulty!

I also noticed that my ebuild of NetBeans and LibreOffice were failing as well, although other ebuilds were unaffected. The ebuilds failed with


Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.

Which sounds odd. I mean, 12 GBs of RAM and Java says no memory? Well, I did disable the kernel's over-allocation, but surely it would have made no difference.
I Googled about this and found out that the VM will allocate a quarter of a system's ram for the heap. Well, a quarter of my system's ram is 3GBs, which in a 32bit system would surely make the address space of the process rather tight, which would explain why the kernel simply refused it. Oh wait, according to that page I found, the VM clamps this allocation to 1GB. That's odd. I wonder if they took into account that a 32 bit system can have more than 4GBs and used a large variable to store the system's total memory (ie, if they used a 32 bit integer and queried the number of bytes available in my ram, it would surely have overflown).

I switched to other VMs; I was using Sun's, and tried Oracle's and IcedTea, but all failed with the same error.

Alas the solution was simple:

export _JAVA_OPTIONS="-Xmx640m"

And emerge built NetBeans and LibreOffice with no problems. For some strange reason, if I increase the value (from 640) the Java death returns. No idea why.
Oh yeah, you still need an export to get emerge going with forced Java options

export I_WANT_GLOBAL_JAVA_OPTIONS=true

Thursday, 8 November 2012

The end of the annoying warning

When I upgraded my Gentoo's gcc to 4.5.4, I suddenly started having this spammage of a warning:

file.c:120:1: warning: visibility attribute not supported in this configuration; ignored [-Wattributes]

I immediately thought to myself "oh, how nice, new warnings!" (I'm a warning addict) but didn't pay much attention to it. I also noticed that lots of Gentoo packages were spewing this warning as well, which I started to find suspicious, so I tried fixing them on my own sources to understand the cause of the warning.
It gets generated when I specified the __attribute__((visibility)). Because I generally set the -fdefault-visibility on my make files, pretty much every non-static function was printing out the warning. And I found this rather odd, when building for x86, surely this would be supported on my configuration.

Turns out the "configuration" wasn't my platform at all, it was the result of GCC's "./configure" script:

checking assembler for .hidden... yes
checking linker for .hidden support... no

I wondered why my linker support didn't support the .hidden flag all of a sudden. I had been using the same binutils for a while now and if the previous build of GCC succeeded, why wouldn't this one?
I rebuilt my binutils just to be sure I didn't have any link problems or outdated USE flags, but the configure of gcc still failed.

Eventually I went through the configure scripts themselves and found out that I was using gold (ld.gold) as my linker. I wondered why this would be relevant though, why wouldn't gold support .hidden? But just to be sure, I switched to the bfd linker:

eselect binutils --linker ld.bfd

And behold, the configure script correctly detected the .hidden support by the linker. The warning thus went away. Interestingly, I switched back to the gold linker afterwards and all my projects (along with gentoo packages) that use the .hidden compile fine. I suspect this is a detection problem on GCC's configure script.
Granted, this was with gcc 4.5.4, a more recent version might not have this detection bug.

Tuesday, 4 January 2011

Android MusicRemote

A week ago I finished the first alpha of my first Android app named "MusicRemote". I did not post it on the Android market yet due to the fee involved. I asked a few friends of mine for some testing and have been using it myself! Useful to change the music playing while on some computer game.

For those interesting in some testing, check the downloads section of my bitbucket repository at https://bitbucket.org/silverclaw/musicremote

I intend to add support to Winamp and Amarok in the future. I don't know yet how to do it for WinAMP, but for Amarok, I can just SSH into the host and use Dbus messages.

Saturday, 30 October 2010

nbandroid deprecated error

Recently I purchased the HTC Desire. I am very very very pleased with it!
As with all users of smartphones, I immediately went to the App Market to check out the various apps around. Since I am a foobar2000 user, I found this neat app to remotely control the music playback. Sadly, the app miserably failed.
I've checked another one, but the English of the author is appalling. Yes, I know, I can just get the source, fix it and send it back, but its too much trouble when...

I can do it myself!

It's been a long while since I coded for myself (since I program for a living) so I opened a repo in BitBucket and started my own MusicRemote application (http://bitbucket.org/silverclaw/musicremote).

I fired up Netbeans (I dislike Eclipse) and got the nbandroid plugin to allow development of android applications.
Sadly, the newest SDK for the Android has deprecated some tool and the program fails to build. Took me some muckering around to find how to fix it. Well, its the 3rd commit of my repo!

Apparently, the xml build script is outdated. To fix it, one only has to insert a single line:

arg value="-d"

(between < and > of course. Can't put them here because it breaks the post)

where the apkbuilder tool is configured, line 489 of "build-impl.xml" on the "nbproject" folder. Add it just above the line where the -z option is configured.

This should allow your run process to finish. Keep in mind that, at least on my computer, I need to first start the emulator and then opt to run the app on the already running emulator.