LOWRESJAM finished a couple of hours ago and I wanted to get a second blog post up to talk about what I was able to accomplish across the past week or so and give an idea of where things might go from here.
There are Linux, Mac and Windows end-of-jam snapshot builds over on Itch if you want to try it out. At this stage it's not much more than a prototype, but it does let you mess around with travel, communications and combat.
When I last wrote about this project, I had character studies/concept art done for two of the game's three alien races. It took a little while for the third to come out, but it eventually did, and I think rounds out a nice and distinctive range of character archetypes that more interesting individuals can be drawn from down the track.
Keep in mind that all of these are headshots and there are bodies (of sorts) that go with each. I like to imagine that this one has a levitating head above an omnidirectional body - something to refine with futher concept art!
We started to think about how the story might open and how the player might be thrust into whatever role the game has in store for them. We wanted to make sure that players had the prompts they needed to pick up the main plot's thread but also give them an opportunity to strike out on their own and make sure they feel in control of their own actions.
Below is a storyboard that shows the kind of thing we have in mind. In it, the player receives a transmission from their captain, and is given command/control of the ship before the planet suddenly disappears. The player is left with the decision of whether or not to honour the former captain's request to seek out their government on Sox.
From here, we imagine that the ship wouldn't have enough fuel to get to Sox, and that gathering enough resources to make the journey would be a good small initial adventure in itself.
We also managed to settle on a name for the project. I'd made a bit of a list of possible names, but none of them ended up being something we could agree on. Eventually we decided that maybe it should be a two word name with the first word being six characters long and the second four characters long (the two digits of 64) and wound up with "Hidden Star". Here's a look at a few of the name ideas that didn't make it.
- Void Runner
- Space MacGuffin
- Warp Break
- Star Shard
- Space Gambit
- The Cold, Deep Black
- Sinister Orbit
- The Moons of Denora
- Space Winter's Wake
- Stellar Approach
- Ga Lax Eee
- The Mask of Glleld
- A Star To Guide By
- Indie Space Merc
- The Galactic Adventures of The [ship name]
- Stellar Wind Runner
Now that we had a name, we needed a title screen. Or something. I had an idea for a sun-breaking-past-a-planet type scene that was pretty quick and easy to put together. It's a little minimalist, but came out well. When we get around to polishing the menu transition, I think having the planet pull away to reveal more light and fade to white should make for a nice effect.
Nemoder popped it into the game and made use of the race-specific fonts (more on those in a bit) to give a scrambled effect to the text as it appears (in later versions, it cycles through all the different fonts and looks even better).
Something I didn't touch on in the last post was the ship designs I'd been working on. I wanted each race to have a distinctive feel, and thought that maybe that could be rooted in race-specific engine configurations with variation coming from weapon placement and hull shape (this kind of thing is how most of Star Trek's post TOS ship designs seem to be arrived at). Unfortunately, everything I came up with looked better when I took away the prominent engines, (with the exception of the ring-ships' circular motif). So much for that idea!
Since these were only going to be, 16px square, it made sense to block out the shapes at 8x8 and add detail from there. Here's a look at some of what I came up with, with front views on the left and rear views on the right. I plan to expand on and build around these ideas until each style has at least three variants, and of course shade them up a bit so that they look a little less pixellated.
Towards the end of end of the jam, I put some time into doing higher res three quarter views of a couple of the ships for the comms screen backgrounds.
Something I decided early on was that I wanted to be able to present each race as having its own written language. Perhaps a translator system might be an upgrade that players have to purchase for their ship in order to communicate effectively? At the very least, it felt like it'd be cool to have text appear in the speaking alien's native font and then be converted character by character into the english font face.
Top to bottom, we have the flowy Sneeb font, the angular/geometric Krull font, the pattern/morse code looking Plink font, and finally the boring Earth people font (with only 64 characters to spare and a 3x5px font, I don't hold much hope for localisation of Hidden Star, so English is our domiant language, I guess ;_; ). I designed these before writing each race's biography, and I feel like the end result ended up having a bit of influence over the kind of characterisation each race received.
If anybody's interested, I've also attached a monospace TTF version of the English font that I've been using to speed up GUI mock-ups. I plan to make a full set of variable width fonts at some point down the track.
Remember how last time I said I was enjoying being the artist person rather than the progammer person? That didn't last as long as I'd hoped. In an effort to help increase what was achievable before the end of the jam, I switched gears to help lighten Nemoder's load. All up, I wrote about 3,000 lines of code, which is somewhere between half and a third of the codebase.
Towards the end of the jam I jumped into writing the game's GUI code. My goal was to have a generic button implementation that could be used for all of the game's needs. In addition to being able to make the kind of filled buttons from the UI mockups I showed last time, I also wanted to be able to show text-only buttons for menus, and sprite based buttons for anything else that we might need to click on such as destinations on the starmap or the directional moving/firing icons during combat.
Once that was usable, I switched gears to work on the comms implementation, aiming to implement a communications menu tree that could be easily customised and adjusted depending on the player's reputation with the game's factions, whether they have a bounty, what cargo they have onboard, etc.. Alongside this I wanted to make sure that it could also be used for scripted sequences like the intro animated storyboard at the beginning of the post, which wasn't something I was able to get fully implemented before the end of the jam (it's pretty close though!)
The flow for communications is managed by two vectors (I had to write my own vector implementation too \o/ ), one containing NPC dialogue and the other menu definitions for player responses. The Comms_NPCDialogue struct contains details on what state the comms system should transition into once that line is finished, which might be to display another NPC line, or it might be to show a menu of responses that the player can choose from. The Comms_PlayerChoice struct contains an indicator of what action each choice will result in. The generic greeting/trade/fight/farewell options make up a total of 10 possible NPC lines per encounter and 3 menuts of player responses. Anything above that I can use to show extended dialogue that might be plot/location/character specific without interfering with how the normal comms interaction stuff works. That probably sounds like gibberish, but the design feels pretty solid in my mind, and should be capable of everything we need.
With four hours left on the LOWREZJAM clock, I turned my attention to the travel system. So far, we had a nice collection of disparate systems, and nothing to bind them together but a crowded debug menu. We had/have plans for a real-time travel mode where players must avoid obstacles and take the correct turnoffs to arrive at their desired destinations, but there was no way I was going to be able to implement that with the time remaining.
We also had plans for a sort of starmap overview for planning out routes. Although we had planned for that to be sprawling and something the player would have to pan around as they explored, a small FTL style pick-a-node-and-arrive-there implementation that fit within 64x64px felt achievable and would give some space in which comms encounters that lead to combat (or not) could occur. Unfortunately some unexpected SDL behaviour meant that the node connections aren't being rendered at the expected virtual pixel size (as you can see in the screenshot below). After wrestling with that for a lot longer than I should have, I was able to get what's up there now together with two minutes to spare \o/
Working on Hidden Star has been really enjoyable. I've learned a lot and I love the foundation we've set here. There are broader features such as dynamic economies and reputation systems that I think we'd still like to pursue, and there's the story to flesh out and explore as well.
Part of me would like to be able to continue putting the amount of time into this game that I have been, but I think I need to take a break from it to make sure that I have room for Winter's Wake/Icicle development alongside contract work.
I definitely plan to keep working on the project, but it's probably going to be reduced to writing and doing a sprite or painting a week for now, and most of the forward progress on features in the short term is likely to come from Nemoder.
I hope the prototype is of interest and that my ramblings here have been insightful :)