Friday, January 20, 2017

The Elementalist Alpha!

So first, I have really exciting news: The Elementalist Demo for Windows is ready to rock!  I have play tested it fairly extensively on Windows 10 and also done a full play-through on Windows 8 and I am ready to get some reactions from the world beyond my own keyboard.  The demo is packaged as a simple executable file (.exe) that will install the game for the current user in the local user directory (e.g. C:\Users\Zack\AppData\Local\The Elementalist DEMO) and make an entry in the start bar as well as a shortcut on the desktop.  You shouldn't need to do anything other than download, double-click, and (hopefully) enjoy!  It can also be uninstalled from the normal add/remove programs control panel or just deleted directly, though I don't know why you would do that.  ;-)

Just click on the link to download the appropriate install file from my Google drive, accept the license (after you read it), and give it a whirl!

Download The Elementalist DEMO

I was intending to have downloads for Mac and Linux ready to go as well but I ran into a few stumbling blocks along the way.  I am currently hard at work to get the Mac version ready and will then be devoting myself to the raw zip version, the Linux Debian based version and finally the Linux RPM based version.  I think I am pretty close on the Mac front but it ended up being a bit more of a struggle than I anticipated... hold onto your hats people, it's story time!

Last week after I published my last post I sat down to test my Mac installer with my wife's aging Mac Book Pro.  I had done my research about making disk image (.DMG) files using OSX disk tools and had done a trial run so I was pretty confident I could make this thing happen, albeit in a more manual way than I normally prefer.  That is when I discovered that her Mac didn't have a recent Java version, so I couldn't even try my game before I delved deeper into testing the installer.

Ok, no sweat, I've installed hundreds of versions of Java on countless machines over the years.  So I head over to Oracle, download the Java Runtime Environment (JRE) and install.  Everything appears to go smooth, no errors, but it doesn't work... at all.  So I head to the Internets and start digging... in a couple minutes it is clear what the problem is, her Mac is so far out of date that it won't install modern Java.  Alright fine, I'll just back up all her content (just in case) and upgrade to the latest and greatest version of OSX.

Believe it or not, the OSX update goes smooth and the backup remains just that.  Now we're cooking.  I re-run the JRE installer and it appears to work, huzzah!  I try to run my java based installer again, but I get this cute pop-up that says I need to install a Java Development Kit (JDK) in order to run Java command line tools.  At this point I begin to get annoyed...  I don't want to be explaining to all you good people that you need to install a JDK even though you aren't actually developing software because you want to run "java" outside of the browser.  Ok, a few deep breaths and some searching on the Internets says this happens all the time because Apple stopped packaging their Java versions but there are some vestigial linkages left or something; whatever, it's something that Adobe is telling their users about on their site, I guess it's fine...

I start writing a blog-post explaining the process I am going through in case someone else has to go through something similar.  No big deal, there are a few references to the fact that you can make this go away by downloading the legacy Java 6 version for Mac, then updating to a modern version.  Ok, bait swallowed, I get the legacy version installed and the error goes away.  I re-install the current Java 8 JRE and launch my installer.  It starts up but immediately exits with an error that says I need a Java 8 version installed and I have Java 1.6 something....

I immediately karate my keyboard in half with my face.  Oh, well, actually it's a split keyboard so it was already in half... Phew!  No need to buy a new keyboard today.

Deep breaths, deep breaths....  I open up terminal and type "java -version" and by golly it really does say 1.6 something.  So the JRE is not being picked up by the system, neat.  More internet digging and a relatively steady stream of cursing leads me to the overwhelming conclusion that if one wishes to use "java" for anything that doesn't launch out of a browser on a Mac one had better darn well install the JDK, not the JRE (here's a good read about how to make the JRE work for you if you really, really want it: https://oliverdowling.com.au/2015/10/09/oracles-jdk-8-on-mac-os-x-el-capitan/).

My post about how to make the game work on a Mac is getting a bit longer than I would like...  This is not the kind of task-list I want to set up for people I probably like.  Ok, a few more deep breaths, I've got the JDK install taken care of now and the terminal happily reports the correct version of Java is installed.  What else could possibly go wrong?

I double click my installer again and I get the message that I have a Java 1.6 version installed and it just isn't going to cut it.  This is probably the moment to turn away and cover your ears.  DIRTY M#($&*  F(&*@## S((#$$&&  H@*&&$) F(*#@@)(  F*&@& S*@*!  Ok.  The Mac and I agree we can no longer be friends but we are going to figure out why my children can now make a sailor blush.

After digging through the source code for the installer that I have been trying to use I see that it is looking for the "Current JDK" link where Mac installs it's JDK instances.  Ok, so why doesn't that work... well, the current version of Java just puts it's link in as "Current", the old link (symlink) for "Current JDK" points at the version of Java from Apple (1.6) instead of the 1.8 version which is for some reason in a directory named "A".  Ok, fine.  I will just un-link and re-link the [EXPLETIVES DELETED FOR THE FAINT OF HEART] "Current JDK" to point at "Current".

Except I can't.  When I attempt to escalate my privileges to re-write the link with sudo (it's a Linux utility that tries to run a single command as an admin user) it asks for my (well, technically my wife's) password.  But she doesn't have a password... sigh.  Mac won't let you run sudo without having a password for the admin account.  OK!  FINE!  I make my wife pick a password and write it down myself because I know if I don't it's my head that will later roll for all of this.

GREAT!  FINE!  NEAT!  I run the sudo command again in a new terminal window with the correct user password and all the escalated privileges I should have.  But it refuses to change the link.  You have got to be $*#(@* kidding me.  The Internets abound with information telling me that SIP (System Integrity Protection), a newly added feature of OSX, prevents users from accidentally causing their computers harm by disallowing some actions it deems dangerous, which apparently includes renaming the link between my installed Java versions.  All I have to do is reboot, hold down a couple of special keys, get to the terminal, enter the secret "disable" command, reboot again, and I should be able to change that link.  Nothing to it!

I stare at this for a long time with my forehead bleeding profusely and dripping broken pieces of keyboard in my lap.

I honestly can't imagine making someone who wants to try to play a game go through this kind of punitive slap-stick computer hazing.  It is time to start looking for other solutions once the head-ache dulls a bit....

Fortunately after a moderate hunt I discover a better solution: packaging the required Java Runtime Environment along with the code it runs and the application data it uses.  A tool that does this (javapackager) was relatively recently added to the Java Development Kit and promises an end to problematic installations... once I can figure out how to use it.  This takes longer than expected considering my relatively intimate acquaintance with Java because the documentation is sorely lacking (and in some places outright lies) and the actual implementations require different arguments from machine to machine.  The other major draw-back to this solution is that it requires actually packaging all of the contents on a machine of the same type, which means building Windows installers on Windows (using x86 and x64 libraries), building OSX installs on OSX, as well as the two major packagers for Linux: Debian and RPM, both with x86 and x64 architectures.  So I have essentially shifted the burden from the user onto me, which is definitely the right trade-off, but it comes at a cost to release speed.

And that mostly brings us up to the present.  I have been working to refine my build processes to produce painless installers that "Just Work".  As it should be.  Even though this is an demo release I feel like it is important that it be as smooth as possible given my own limited ability to test on every possible platform.  So non-Windows users please bear with me just a few more days while I sort out the details for each platform and give it a whirl.  OSX is almost ready to go and then I will be moving on to Ubuntu (Debian) and finally Fedora (RPM) packagers.  Keep your eyes on this space if you are in those camps.  If you are a Windows user get with the downloading and let me know what you think!

Cheers,
Zack

No comments:

Post a Comment

We're all friends here, let's keep it civil. There will be plenty of flame wars in the game! ;-)