After much wailing and gnashing of teeth, account creation is now finished! (Or a first pass at it, anyway). Oh, how tedious this kind of basic web app stuff is, but it's done now (for now). New players can create an account, and then select their first character from a pre-generated list of unsavoury types.

"The people of BONES of the LOST GOD aren't particularly heroic; not to begin with, anyway. But by picking one from this rag-tag bunch of characters, you can start your adventure. Perhaps they will become a great fighter, either in the great Arena of Rooksfoot, or in the dark dungeons of the world. Maybe they will be a great artisan, a gilded merchant, or study the ancient and arcane arts. They will be lucky; most will die in poverty and obscurity. Such is life."

As always, you can see the live changelog here, but here's this week's entry:

[!] Simple account creation screen which forwards to a character select screen
[!] Created roster selection page to allow players to recruit characters
[!] Created Item class, database table, and a basic collection of items
[+] Rewrote database methods so I can call BOTLG::db()
[+] Added Save and Load methods to character object
[+] Added class templates to character object
[+] Characters now have portrait images and associated colours
[+] Characters now have class features
[+] Player object pre-loads characters and won't needlessly rebuild them
[+] Moved bootstrap functions from Page object into their own collection
[+] Router can force a certain page view for logged-in players
[-] Router can now load arbitrary javascript files into page footer
[-] Portrait image for mobile splash screen
[-] Fixed some cookie-related bugs
[-] Moved some PDO database stuff out into its own class for safekeeping
[-] Moved routing data into a separate file to maintain my own sanity
[-] Implemented DKIM signing for outgoing email
[-] Routine server maintenance

I'm actually quite pleased with how the character selection screen turned out (referred to internally as a "roster"). It's got a pretty hover highlight, the explanation text does it's job in a reasonably succinct manner, and the color-coded portrait images turned out quite nicely. But really, best of all, it's done. Perfect is the enemy of good, or done in this case, and I'm mainly just glad I don't have to work on this little corner of the system any more. Instead, I can start on the good stuff -- getting those player characters out into the work and completing tasks.

One last thing before I sign off for the day. This character was generated while I was working on the roster screen. The layout isn't the same as it is now, but he caught my eye for having a perfect combination of portrait image, name, and descriptors:

undefined

Sometimes the random number generator gets it just right. I'm hoping for a lot more of these moments as BONES starts to take shape.