Brief moment before we begin: Go check out hifi's game review section! I just spent an evening capturing a ton of screenshots from real hardware for a bunch of games, both ones I've streamed and ones I haven't, and I'll be posting new ones on Fridays for the next few weeks until the pool runs out. Use the RSS feed to your advantage, and stick around for more to come.
So as I alluded to in the post from the other day, there's one other idea I've had for the cammy.somnol refresh that I've started working on. If you check the footer as of writing this, you'll see that the link designated "Elsewhere" is marked as an unimplemented link. That's because, up until now, I've not been quite sure how to use it.
It's pretty typical when you have a personal site to link to other people's sites. This was what I did all the way back on Neocities, linking to the sites of my friends and acquaintances and, funnily enough, a couple people who dislike me now. (Lempamo, babe, call me, let's catch up.) That was originally the idea for the /elsewhere/
directory, having a big long imagemap of the Somnolians peeking out of various stone portals, each of which would take you to their sites. Naturally, I never implemented this.
I mentioned in that post that I was pondering Arkm-style choose-your-own-adventure site navigation for cammy.somnol, but ultimately decided against it. I still think the idea is cool as fuck (much like Mario), and I didn't want to abandon it completely, so I decided to apply it to the still-vacant /elsewhere/
and turn it, indeed, into an exploration into elsewhere: you can use it to browse the rest of the site, you can explore other Somnolescent sites with it, or you could visit the various creative worlds of Somnolescent with it.
If this is sounding a little familiar to the longtime Somnolescent viewers, you might be remembering something I built in 2019 called "Colton's Adventure". "Colton's Adventure" was meant to be a CYOA-style way to explore Pennyverse's Apricot Bay, the two paths terminating in short stories I wrote. I don't mention "Colton's Adventure" much anymore because I really don't like how it came out. I just think it's mean-spirited and weird in spots, I don't much like the stories it went with, and I sat with it too long. There wasn't a sense of jubilation in the group when I finished it. In fact, it kinda went quietly. Not great.
It wasn't the format that was the problem, though. It just needed something better to come along and take advantage of it.
That brings us back to Elsewhere. When I built "Colton's Adventure", it was done entirely in static HTML, figured out by hand with flow maps on paper. Charming for sure, but clunky, and no doubt in the six years since then, I could come up with a better way to structure a CYOA section, yes?
Indeed. In twenty minutes at 4:30 in the morning after a night spent drinking (I sleep weird when alcohol is involved), I implemented a simple little PHP-and-JSON thing that completely trumps my old setup. Yes, it came that quickly.
JSON, if you don't know, is a plain text data format meant to be written by humans and read by computers. It consists of a long list of nested objects, arrays, and name-value pairs that, when put together, structure whatever you need the data for. In my case, I needed a list of objects, each one representing what would've been an HTML document under the old setup. From there, name-value pairs represent where you are, the description of the scene, and the scene ID, concluding with a list of scene IDs you can visit next.
"1": {
"world": "island",
"location": "Cammy's front yard",
"bodytext": "<p>You stand in the yard in front of the large cluster of stone buildings that makes up Cammy's house in the sky. A marble fountain with many little jets of water spewing out in a circle stands between you and the house, though what water feeds it, you're not sure. A garden shed free stands to your left, and around the taller silo attached to the house to your right is a set of stairs descending into the ground.</p>\n<p>Cammy is probably inside the house, up to something or other. By the same token, though, there's plenty to see outside as well. Where do you go next?</p>",
"directions": [
{
"destination": 4,
"text": "Enter the house."
},
{
"destination": 0,
"text": "Approach the garden shed."
},
{
"destination": 0,
"text": "Take the staircase down into the earth."
},
{
"destination": 2,
"text": "Look around at the other islands and floating ephemera around you."
},
{
"destination": 9999,
"text": "<i>(What exactly is this?)</i>"
}
]
}
PHP has a json_decode function for exactly this. Given a valid JSON file, it'll break objects into a list of associative arrays that you can manipulate from there. In twenty minutes, I had a decoder that would take a scene ID, print out various bits listed under its heading, and list out various other scenes to progress to next. Another hour to pretty it up, and I had the programmatic equivalent of "Colton's Adventure". If I want to add more scenes, all I have to do is add them to the JSON and link them up by ID to the existing ones. The PHP end of things takes an HTTP GET variable for the current scene, fetches it from the JSON, and parses it out.

I'm routinely impressed with how easy and fun PHP is to work with, I really am.
Now, the grind is writing out all those scenes! I've got plans for roughly four paths, more depending on how much the Somnolians want to help: a Cammy path, where you explore my house in the clouds and it takes you to various pages across mari.somnol and cammy.somnol, a Somnolian path, where you can visit their sites through Elsewhere, a Pennyverse path, where you can interact with the citizens of Apricot Bay, and a Pinede path, taking you a bit around probably Caerpinwyd (way too big a world to let you roam it freely, that could be a CYOA game all on its own). There's potential to visit other Somnolian worlds, but I'd need Caby and Savannah's help with those, and they can be added at a later date. My focus is on something shippable right now.
I'm convinced "Motorcycle" by Remy Zero was written for folks slightly under the influence. "Too much wine has crossed my mind" indeed.