In the last update I mentioned that I couldn't autodetect whether the game was running on the Steam Deck, something I wanted to do so that the new text-scaling feature could automatically be applied.
Two years ago when I was starting integration with Steamworks, I evaluated two possible C# libraries for Valve's API. One was "Steamworks .net," an unofficial straight 1:1 port of the API to C#, the other was "Facepunch," made by the maker's of the popular sandbox game, Garry's Mod. I ended up going with Facepunch because a) it's more of a proper C# implementation of the Steamworks API and b) the author of Steamworks .net himself recommended people use it instead. It works very well, but hasn't kept up with Valve's changes to Steamworks.
So last weekend I started migrating the workshop integration to Steamworks .net. Unfortunately, there's not a lot of documentation on the correct way to handle workshop calls. The examples I found felt brittle, and I ran into an issue that caused the Editor to freeze, which was both unsettling and time-consuming to troubleshoot.
After spending two and a half days attempting the migration, I decided it was turning out to be too time consuming (and too risky) for too little reward. The only feature I really wanted to do the migration for wasn't even connected to the Workshop, just find out if the game was on the Deck. So I ended up writing a two-line method based on the GPU (the deck uses a custom AMD GPU called "VANGOGH"). It's a hack that works, but not ideal-- for example it may not detect the next iteration of the Deck.
Game dev is fundamentally a process of exploration, and it's inevitable that some time will be lost investigating paths that lead nowhere, but still frustrating to abandon days of work.
I did make some progress in the past week:
Worked on some missing controls for gamepads
Fix for battlestation and shield "charge" not persisting across saves (not Havok, though)
Changes to a late game player "weapon" that make it a bit easier to use for its intended purpose and more fun
As always, changes discussed in these posts are works in progress and will not be immediately available to players until a build is deployed.
Until next week! - Kevin
Weekly Update: May 24, 2024
The big news for the past week was Kepler being promoted to the default build, as announced here.
So far, players have reported few significant bugs. I think at this point the biggest question mark is how many "stuck points" will first time players encounter. I.e., points where, due to unanticipated player behavior, the game provides insufficient guidance as to how to proceed. There were a lot of these in Ganymede, and some in Icarus. While Kepler addressed most of the outstanding ones, it also adds new content so there are probably still at least some.
Besides monitoring player feedback, I've started work on improving the game's Steam Deck support, particularly adding the option to scale text up. This seemed like a relatively minor task, but has turned out to be larger than anticipated for a few reasons:
First, there are a lot of individual textual objects in the game, and the "correct" way to scale them depends on multiple factors. For example, with the ship status HUD in the lower right, the correct behavior it seems is to scale the entire transform up, including the bars and icons, so that it takes up a greater percentage of the total screen space. While with something like an anomaly dialogue, which already takes up most of the screen, that wouldn't work. So there the font is scaled up but the dialogue container remains the same size.
Second, it makes sense for this to happen by default on the Deck, since the scale that looks good on a PC monitor is too small. But the third party API wrapper I use for Steam is out of date and doesn't have the IsSteamRunningOnSteamDeck() method.
Finally, there's the added friction that development on the PC is quite fast because in Unity I can test most changes within seconds in the Editor, where to test a change on the deck I need to build the game, deploy it to Steam, then update the game on the deck and run it.
Incidentally, if you are playing on the deck, there's a "secret" opt-in beta with the super secret password of "111111111111" (that's twelve ones). This build enables a text scaling option. It's "secret" because I'm deploying untested changes to it unannounced, and do not plan on maintaining it long term.
Until next week! - Kevin
Kepler Build Now Live
The "Kepler" build has now been promoted to default build for Starcom: Unknown Space. Since the previous default build was "Icarus", this is a significant update, incorporating the changes from both Jupiter and Kepler.
The biggest change is that the main storyline now has a proper ending, but there are lots of other updates of various magnitude, including a number of new side quests, factions, and more "off-path" regions.
Since both Jupiter and Kepler were made available for opt-in testing and dozens of players have reached the end, I feel confident that Kepler is at least pretty solid: there have been some issues reported, but few serious bugs as of the latest build.
Saves are not compatible between named builds, but if you were in the middle of a game, don't worry: you can always switch back to Icarus to finish your current game. See here for instructions and select "Icarus Rollback".
Here is a minimal-spoiler list of changes since Icarus:
Ending to main story line
Prologue opening transition
46 new planet anomalies
Anomaly "environment soundscapes"
New stories, side quests, factions, Easter Eggs
Improved guidance/fixes for missions where players commonly found themselves stuck
Numerous new character dialogues, crew prompts
New ship modules and technologies
New weapons, variants
Numerous balance changes
New enemy attacks, AI
NPCs now automatically aggro'd by attacks to their allies (unless also allied with aggressor)
Changes to fixed guns
New music tracks
New achievements
Mission "priority" indicator for main story critical missions
Newly unlocked techs highlighted
Ability to toggle mission goal tracking
Difficulty / skill roll modifiers now in 5% increments
Changed autosave timing
Fix for vsync not being saved
Engine turbo sound fades out
Improvements to game controller support
Fix for anomaly image change not reflected in log
Fix for projectiles, effects persisting after save game load
Various QoL improvements
Additional analytics
Performance optimizations
Early Access Content Progress
As with previous named builds, for comparison purposes, here are some metrics to give a rough sense as to how much content has been added to the game since it first entered Early Access almost 16 months ago:
Betelgeuse (Dec 2022, first Early Access version): 75 anomalies 1264 mission logic elements 25,000 words
Draconis (Jan 2023): 91 anomalies 1516 mission logic elements 29,000 words
Europa (Mar 2023): 111 possible anomalies 1839 mission logic elements 36,000 words
Fornax (May 2023): 120 possible anomalies 1990 mission logic elements 40,000 words
Ganymede (June 2023): 145 anomalies 2390 mission logic elements 48,000 words
Icarus (October 2023): 179 anomalies 3340 mission logic elements 64,000 words
Jupiter (January 2024): 197 possible anomalies 4329 mission logic elements 82,182 words
Kepler (current Default): 225 possible anomalies 4848 mission logic elements 90,400 words
For comparison, Starcom: Nexus had roughly ~195 anomalies and 65,000 words of text. It used a different mission system, so there's no clear comparison, but Starcom: Unknown Space definitely has significantly more mission logic and text.
There are still a number of features, fixes and content I'd like to add, but at this point I am starting to think about a 1.0 release, possibly later this summer. Although as I have said since the start of Early Access, the key determinant is how players feel about the state of the game.
Thanks for reading, and thanks for playing Starcom: Unknown Space!
Weekly Update: May 17, 2024
Since last week's update at least two dozen players have made it to the end of Kepler's content and there have been no major new bugs reported. I've also deployed several patches to Kepler, but these are fairly minor. Assuming no major issues appear, I plan to promote Kepler to be the new default build in the next week.
If you're about to start a new game, you may want to switch to Kepler, as it has the most content/improvements, but is not save compatible with previous named builds (Opt-in instructions here).
Here are the changes relative to Jupiter (the last opt-in beta):
Non-spoiler changes in Kepler:
New side-quests
27 new anomalies
Additional void regions
Changes to existing missions
Difficulty / skill roll modifiers now in 5% increments
New alien
Several changes to late game
Player drones
Ability to toggle mission goal tracking
New music tracks
Three new achievements
New analytics tracking for various progress metrics, localization
If anomaly image changes during anomaly, the last image will appear in the log
New enemy weapon
New ship modules
New technologies
New achievements
Numerous balance changes
Changes to fighter sounds, trails
Changes to enemy AI
NPCs now automatically aggro'd by attacks to their allies (unless also allied with aggressor)
Refactor fighter drone logic
Various performance optimizations
Various UI fixes
FPS limit option
Priority mission identification
Fixed transient objects, screen shake persisting after game load
Added discovery sounds/tier labels
Block players from interacting with cloaked ships
Fix several minor anomaly bugs reported by players
Fix for potential soft-lock in late game
Fix for null reference exception
Added some missing gamepad UI indicators, controls
Known Issues:
Loading a game during a transition (such as a wormhole) can break the game camera
Player drone behavior/balance needs some work
Until next week!
- Kevin
Weekly Update: May 10, 2024
As promised last week, the first Kepler build was made available as an opt-in beta last Sunday. There have been two patches since then to fix potentially significant bugs, but at least some players have made it to the game's end.
Here are the changes relative to Jupiter (the last opt-in beta):
Non-spoiler changes in Kepler:
New side-quests
27 new anomalies
Additional void regions
Changes to existing missions
Difficulty / skill roll modifiers now in 5% increments
New alien
Several changes to late game
Player drones
Ability to toggle mission goal tracking
New music tracks
Three new achievements
New analytics tracking for various progress metrics, localization
If anomaly image changes during anomaly, the last image will appear in the log
New enemy weapon
New ship modules
New technologies
New achievements
Numerous balance changes
Changes to fighter sounds, trails
Changes to enemy AI
NPCs now automatically aggro'd by attacks to their allies (unless also allied with aggressor)
Refactor fighter drone logic
Various performance optimizations
Various UI fixes
FPS limit option
Priority mission identification
Fixed transient objects, screen shake persisting after game load
Added discovery sounds/tier labels
Block players from interacting with cloaked ships
Fix several minor anomaly bugs reported by players
Fix for potential soft-lock in late game
Fix for null reference exception
Added some missing gamepad UI indicators, controls
Known Issues:
Loading a game during a transition (such as a wormhole) can break the game camera
Plasma range extender doesn't unlock
Player drone behavior/balance needs some work
Since Jupiter was never promoted to default, unless some critical bug appears, I hope to make Kepler the default build once enough players have finished it that I'm confident in the stability.
If you're about to start a playthrough, you may want to switch to Kepler, as it has the most content/improvements, although there may still be some undiscovered bugs. (Opt-in instructions here).
Until next week!
- Kevin
Weekly Update: May 3, 2024
I chiseled through most of the small items I wanted to finish for Kepler and started another playthrough. The playthrough so far uncovered three major bugs introduced by the various changes, which I have fixed.
I still need to finish the playthrough and then tackle a few small items that would be difficult to fix in a patch, but Kepler should hopefully be ready for opt-in testing in the next few days. There are some items which I plan on deferring to a patch.
As usual, I'll start with a post on the discussion forums. Once a few players have had a chance to check it out and it doesn't look like there are major issues I'll post a news announcement.
Fingers crossed! - Kevin
Weekly Update: April 26, 2024
Last week I mentioned that I had two big items and about 50 smaller items that I wanted to get done for the Kepler opt-in, plus another fast playthrough to ensure nothing major has broken.
The two bigger items took a bit longer than I expected, but they are now done. One was a new enemy attack, the other is a new side-quest that connects some story threads. That still leaves about 40 smaller items and a playthrough, but hopefully these will go faster and Kepler will be ready for opt-in in the next week or so.
Tasks done in the past week:
New enemy attack, effect
Refactored portions of enemy attack AI
Four new anomalies
New side quest
Started integrating new music tracks
Until next week! - Kevin
Weekly Update: April 19, 2024
Last weekend I finished a full playthrough of Kepler and came up with a list of just under 100 candidate items I'd like to fix/add before making it available as an opt-in beta.
Most of these were pretty small bug fixes/tweaks/balance changes, although there is one feature and one new story line that will take more time. In the first half of the week I whittled the list down to under fifty.
Now I'm starting into the two larger items. My current plan is to see how far I get in the next week. Then I'll do another fast playthrough because a number of the latest round changes/fixes are big enough that the chances of introducing a game-breaking bug is significant.
My current goal is to have Kepler available for opt-in testing in the next two weeks, but that will depend on how long the two bigger items take and whether the second playthrough hits any critical issues.
Tasks done in the past week:
Finished full playthrough
Prioritized list of candidate changes
Lots of fixes, balance changes
Added resource source analytics
Optimized NPC tech modifier lookup
Refactored map icon updates
Started work on new enemy attack
Worked with Moritz on the new music tracks
Until next week! - Kevin
Weekly Update: April 12, 2024
A quick update this week: my wife and I went on a survey mission to investigate a nearby celestial anomaly.
When we got back I started a full playthrough to see how the recent changes felt and get a sense of how much more I want to add to Kepler before releasing it as an opt-in beta.
I'm still in the middle of the playthrough, but I'll have a better idea next week.
Other than that, things done in the past week:
New anomaly
Added indicator in mission log for critical missions
Various balance changes, fixes
Until next week! - Kevin
Weekly Update: April 5, 2024
Looking at my task tracker recently I realized it's been ten years since I started work on what would eventually become Starcom: Nexus, the precursor of Starcom: Unknown Space. Actually ten years ago to the day, I followed Unity's "space game tutorial" to figure out how to get a 2D spaceship moving on screen.
I've already written a very long postmortem on the process of creating that game, but I thought this would be a good occasion to look at the question "where does the time go?" Like specifically, having spent well over ten thousand hours developing these games, what am I doing all day?
Using data exported from the task tracker, I went through and randomly sampled blocks of time and categorized them to see what kinds of things I was spending time on, and how much.
I organized the data in two ways: features that players would recognize, and hats that I wear. By "hats" I mean what role/skillset would do this task in a mid-sized game company with dozens of employees. I'm guessing a bit on this one-- while I have worked on game projects with small to medium sized companies, it has always been in a fairly narrow role.
Features
[table] [tr] [th]All[/th] [th]Percent[/th] [th][/th] [/tr] [tr] [td]Gameplay[/td] [td]11.7%[/td] [td]General gameplay mechanics and core game logic not included elsewhere[/td] [/tr] [tr] [td]Combat[/td] [td]6.4%[/td] [td]Weapon design, balancing, damage handling, VFX[/td] [/tr] [tr] [td]Community[/td] [td]6.1%[/td] [td]Interacting with players, support, weekly updates like this one, etc[/td] [/tr] [tr] [td]Gameworld[/td] [td]5.5%[/td] [td]Game world specific mechanics: region placement, sector handoff[/td] [/tr] [tr] [td]Shipbuilding[/td] [td]5.5%[/td] [td]Shipbuilding logic[/td] [/tr] [tr] [td]Missions[/td] [td]5.4%[/td] [td]Mission design and creation[/td] [/tr] [tr] [td]Playtesting[/td] [td]5.1%[/td] [td]Playing the game myself to see what's broken, what feels wrong, etc[/td] [/tr] [tr] [td]Anomaly[/td] [td]4.8%[/td] [td]Creating anomalies[/td] [/tr] [tr] [td]UI[/td] [td]4.2%[/td] [td]UI design and programming[/td] [/tr] [tr] [td]AI[/td] [td]3.9%[/td] [td]AI design and programming[/td] [/tr] [tr] [td]Marketing[/td] [td]3.8%[/td] [td]Game promotion, trailer creation, youtuber outreach, etc[/td] [/tr] [tr] [td]Factions[/td] [td]3.7%[/td] [td]NPC design[/td] [/tr] [tr] [td]Music & Audio[/td] [td]2.7%[/td] [td]Music and Sound FX[/td] [/tr] [tr] [td]Planning & Production[/td] [td]2.6%[/td] [td]Deciding what to prioritize, misc stuff not covered elsewhere[/td] [/tr] [tr] [td]Bug fixes[/td] [td]2.5%[/td] [td]Investigating and fixing bugs outside of the normal dev loop[/td] [/tr] [tr] [td]Interaction Systems[/td] [td]2.4%[/td] [td]Anomalies, conversations and general station interactions[/td] [/tr] [tr] [td]Trade & Inventory[/td] [td]2.3%[/td] [td]Trade system, drops, resources and item system[/td] [/tr] [tr] [td]Map & Edgedar[/td] [td]2.2%[/td] [td]Map system and Edgedar (the icons around the side of the screen in the main view)[/td] [/tr] [tr] [td]Localization[/td] [td]2.1%[/td] [td]String symbol tables and translation[/td] [/tr] [tr] [td]Creator[/td] [td]2.1%[/td] [td]Content authoring tool[/td] [/tr] [tr] [td]Save & Load[/td] [td]1.8%[/td] [td]Save system[/td] [/tr] [tr] [td]Crew[/td] [td]1.7%[/td] [td]Crew management, skill check system[/td] [/tr] [tr] [td]Technologies[/td] [td]1.7%[/td] [td]Tech research tree and effects[/td] [/tr] [tr] [td]Planets[/td] [td]1.6%[/td] [td]Planet visuals[/td] [/tr] [tr] [td]Main Menu[/td] [td]1.5%[/td] [td]Parts of the game when you're not in the game[/td] [/tr] [tr] [td]Proc Gen[/td] [td]1.2%[/td] [td]Procedural sector and planet generation[/td] [/tr] [tr] [td]VFX[/td] [td]1.2%[/td] [td]General visual effects like nebulae, non-combat particle effects, etc[/td] [/tr] [tr] [td]Steam[/td] [td]1.0%[/td] [td]Build deployment, store page creation, etc[/td] [/tr] [tr] [td]Business[/td] [td]0.9%[/td] [td]Taxes, paying contractors-- the fun stuff that everyone gets into game dev for[/td] [/tr] [tr] [td]Story[/td] [td]0.8%[/td] [td]Narrative planning[/td] [/tr] [tr] [td]Regions[/td] [td]0.7%[/td] [td]Manual (non-procedural) region layout[/td] [/tr] [tr] [td]Optimization[/td] [td]0.4%[/td] [td]Performance profiling, optimization[/td] [/tr] [tr] [td]Analytics[/td] [td]0.2%[/td] [td]Player analytics review[/td] [/tr] [/table]
Hats
[table] [tr] [th]Hat[/th] [th]Percent[/th] [th][/th] [/tr] [tr] [td]Programmer[/td] [td]32.9%[/td] [td]Any coding/programming[/td] [/tr] [tr] [td]Game Designer[/td] [td]16.8%[/td] [td]Designing missions, balancing enemies, gameplay tweaking[/td] [/tr] [tr] [td]UI Designer[/td] [td]8.4%[/td] [td]Creation of all the UI systems, icons, layouts, excluding the programming[/td] [/tr] [tr] [td]VFX Designer[/td] [td]7.3%[/td] [td]Particle systems, shaders[/td] [/tr] [tr] [td]QA[/td] [td]7.1%[/td] [td]Playtesting, reviewing player F8 feedback[/td] [/tr] [tr] [td]Producer[/td] [td]6.5%[/td] [td]Planning, interaction with contractors[/td] [/tr] [tr] [td]Community Manager[/td] [td]5.8%[/td] [td]Responding to player emails & discussion forum posts[/td] [/tr] [tr] [td]2D Artist[/td] [td]3.6%[/td] [td]Anomaly images, item images[/td] [/tr] [tr] [td]Marketer/Video Editor[/td] [td]3.1%[/td] [td]Trailer creation, influencer outreach[/td] [/tr] [tr] [td]Writer[/td] [td]2.7%[/td] [td]Writing anomalies, dialogue[/td] [/tr] [tr] [td]3D Modeler[/td] [td]2.0%[/td] [td]Creating ship modules, other models, coordinating concept artist and modeler efforts[/td] [/tr] [tr] [td]Sound Designer/Music Director[/td] [td]1.5%[/td] [td]Creating game sounds, directions for composer[/td] [/tr] [tr] [td]Analytics[/td] [td]1.1%[/td] [td]Choosing metrics, analyzing anonymous player analytics[/td] [/tr] [tr] [td]Business[/td] [td]1.0%[/td] [td]Misc business stuff: taxes, paying contractors, renewing LLC, etc.[/td] [/tr] [/table]
This is just the time I spent. There have been several talented contractors who have composed the game's music, created the alien portraits, created 3D models for the modules, etc. It's also not super precise, because a) there are a lot of tasks that don't get tracked and b) this was a random sample. But I think it's ballpark correct.
In other news, I'm continuing to press on with work on Kepler. There's still a chunk of content I want to add, but in the next week or two I'll start thinking about timing for making available for opt-in.