It has been a few weeks since High Albedo v1.3 was released, and I haven't been wasting time. I have begun work on the framework for adding custom campaigns, and storylines, to the game. When this work is completed, it will be possible to embark on optional storylines that will have a dramatic impact on the game.
As of 1.3, the only missions you could get were random missions from the NPCs of various factions. You got these missions by hailing an NPC that is either neutral or friendly to you, and asking for a mission. These missions would involve blowing up a specific ship or space station, escorting the NPC for a little bit, or delivering a bulk shipment of a supply to a station. These missions were interesting in that they never spawned anything, so they had an impact on the dynamic universe.
As of 1.4, there will be optional storyline missions, called campaigns. These campaigns will only be doable once, and failing them will be permanent. This means that, once you accept a campaign, if something goes wrong and you fail the story ends but you can keep playing in the sandbox like before. Campaigns will be offered by specific NPCs that have names that are different than the normal population of their faction. These NPCs will be hailed to start the campaign. Once the campaign is over, whether you succeed or fail they will not offer it again.
Campaigns will be plot arcs that make big changes to the game, and will have a massive impact on your faction standings. I intend for the stories I write to have branches, so you can choose how you want to proceed and affect the outcome. Also, unlike certain other games, High Albedo will not deactivate the dynamic universe during the campaign. This means that the dynamic universe could affect the outcome!
In 1.4, there will only be one campaign so that the technical details of the system can be tested. Once the bugs are identified and fixed, the will be a 1.5 version that adds some more stories to do. If you were confused as to what to do in the sandbox, these stories will help you focus on a goal.
To be extendable, the campaign system needs to be able to load plain text scripts and parse them into missions. This is what I am currently working on. The scripts are node based, with an entry point node that is called at the start of the story. The node can then proceed to another node when a condition is met, and it is possible to specify a "success" and "failure" branch, allowing a story to fork based on the outcome of a stage of the mission. Campaign scripts can spawn ships and space stations, and make things temporarily immortal if needed. I am currently implementing the last of the triggers needed to make good missions, but I have already made significant progress.
[Node] name=Station Defense chapter=Pirates! objective=Defend Ageiran Shipyard 1 body=Pirates! Press D to undock and go defend the station! call0=CURRENT_STATION::makeMortal() call1=SPAWNSHIP::PirateAmbush::The Archers,Native Land,-4439.0,11587.0,Pirate Raider,Archer Pirate,PATROL call2=SPAWNSHIP::PirateAmbush::The Archers,Native Land,-4439.0,11700.0,Pirate Raider,Archer Pirate,PATROL advance=NONEALIVE::PirateAmbush next=Friendly Face [/Node] [Node] name=Friendly Face chapter=Run Away objective=Fly to 'Friendly Face' body=Ok, that was a little more dangerous than expected. Lets get out of here! advance=ENTERSYSTEM::Friendly Face next=CAMPAIGN_END [/Node]
You can see here the test script called "Flight School" which is where I am developing these nodes. I have already implemented enough types to do a simple story, but I need more nodes so I can make a more complex mission. Specifically, I need to be able to do escort missions.
A system for campaigns will be the major addition in 1.4, however there will also be some performance improvements. While doing some refactoring I discovered a loop that was being called too often, creating an accidental N-squared algorithm when it only needed to be linear. I have fixed this loop and there is a performance improvement. Frame rates are unchanged, but the real performance of the application, as measured by time per physics tick, is 10% faster!
I have also made tweaks to the jumpdrive, it now uses half as much fuel, and added new code to the fly to and follow autopilot functions so that, if the ship has a jumpdrive, it will jump to follow the target to another system. Finally, jumpholes find their partner at universe creation instead of when a ship uses it for the first time. This isn't really a noticeable fix, but it does make the code prettier.
I am always open to feedback, you are a pretty silent bunch but I know for a fact there are people playing this game. You can leave feedback here or email me at firstname.lastname@example.org .