Wow I’m behind on updates! I haven’t posted a dev blog for awhile but I have been working super hard on v0.2.0.
First, a quick bit on my versioning system. I use a the typical “Major.Minor.Revision” build number system. Masteroid is currently on major version 0 because it’s not feature complete. v1.0 will be the actual release of what I consider the full game to be (I have no idea when that will be). Minor is really feature sets. v0.1 was the launch version which I internally called the “Foundation” version because it had most of the foundation stuff in place to have a functional game. The last number is for revisions that are mostly about fixes and quality-of-life or stability improvements. The revision builds will typically not have much new gameplay or content. Version 0.2.0 internally is called the “Mission Release” because it adds faction missions. This has turned out to be a big deal, changing almost every facet of the game code to support a much deeper gameplay experience.
The first thing I started on for this build was improved UI for the station menus. The old menu had two tabs: weapons and ships. Players automatically trade in all cargo for cash as soon as they dock. This was a problem because stations have different payouts and trading cargo also affects your faction reputation. So step one was to rebuild the menu UI. Here’s what I did to accomplish that:
- Move old “Weapons” and “Ships” buttons into a tab-style interface
- Add new tab for Station Info menu
- Create faction icons and other menu icons
- Remove code that automatically sells cargo
- Create messaging and logic that tells player cargo value at this station
- Create button allowing player to sell their cargo
- Create messaging that tells the player about the faction that runs the station
- Added descriptions for every station to add “lore” to the game
- Testing, testing, testing
But that broke some other stuff. Station data was pretty simple before, it didn’t even have it’s own data model, Stations were just a point in space. The faction that controls the sector was assumed to control the station. But that might not be the case. There could even be multiple stations in a single sector in the future, controlled by competing factions. So…
- Create new station data model to keep track of a station’s properties
- Move things like resource payout, controlling faction and the position out of Sector data and into Station data
I also used to treat faction reputation the way GTA treats wanted level. Your actions build up reputation one way or another but when you die that reputation is cleared out. That doesn’t work if I want complex faction interactions that unlock missions over time (more like Elite Dangerous than GTA). So I also had to make faction reputation more robust. I created a Faction Status data concept…
- Rip out and refactor old system that just tracked points by faction name
- Rip out systems that award points for every point of damage dealt to a faction ship (old system built but never really used)
- Create new faction status data model to keep track of player’s progress with different factions
- Track player level (both positive and negative) with a faction
- Track XP towards next level
- Track faction XP reward for enemy kills and cargo trading
- Track faction XP penalty for friendly kills
- Added level names to add “lore”
- Create a logic to cascade player actions across faction reputation. For example, when the player kills a ship it will decrease their XP with that faction but increase XP with that faction’s enemies
- Created methods to award (or deduct) XP for kills and cargo trades
- Wired everything up to existing game events
- Testing, testing, testing
As I was doing this I am also trying to get the game out there so people know about it and somebody enjoys all of my hard work! I also found some problems with Game Analytics. I make a LOT of decisions about what to work on based on what players are focusing on in games. So…
- Create new game logo (first one was AWFUL, I made it the night before I pushed out the first release)
- Create Facebook page
- Create branded assets for Facebook, Itch.io page, etc
- Implement new logo in the game itself (old logo had a turret that tracked the cursor so this wasn’t just a sprite swap)
- Fix several analytics issues, including not firing events during debugging (a lot of my analytics were polluted by my own testing!)
- Testing, testing, testing (seeing a pattern here?)
It bugged me that stations fixed ships for free. It also bugged me that large ships have no real cost to them. In real life if you buy a sportscar, the ongoing insurance, maintenance and other costs are much higher than if you buy a small family car. I want ship choice to have more of an impact and the default decision to not just be “have the biggest ship”. Small ships need to have advantages that make them worth having late game! So…
- Ships no longer come back with full health after death
- Players now pay stations for repairs
- Stations charge different rates for repairs (this also adds flavor because stations in hot battle zones charge more for repairs because they are busier)
But this had another consequence: I wasn’t actually saving ship health. This was a bug nobody even reported. If you get damaged and warp to another sector…your ship warps in with full health! I moved ship health into the player save object and make sure I save and restore the ship health correctly.
All of this needed to be available and communicated in the Station Menu so this required multiple tweaks and redesigns over time as the menu grew to offer new options to the player
Notice anything strange? In all of the bullet points of work conducted above…I STILL hadn’t added actual missions – the whole point of this build. I kept encountering more and more things that would take away all of the meaning and purpose of missions if they weren’t fixed. As a side note, I haven’t even listed all of the bugs and performance stuff that I fixed along the way.
The good news is that I have made great progress on missions. Stay tuned for the next dev blog to see how that’s starting to look!
Commit bb4d84c.