Progress Update 2021-07-27:
The next version is finally here. Over the past months when I haven't been taking time off from the project I've been doing a lot of experimental stuff with automation -- which still isn't in a useful state. But, I've added a lot of other stuff along the way which I wanted to finally release so I can get back to smaller, more frequent updates. NOTE that this version comes with a new database that will overwrite your existing save game (after backing it up). I have no plans to do any further incompatible database updates, I just figured now would be a good time to refresh it since it's been awhile.
Here are the major changes for version 138.
Classic ModeThe first new feature I should mention is a new 'Classic Mode' checkbox in the Quasar4x > Settings window. This is disabled by default. Turning this mode on will revert the entire UI layout to resemble VB6 Aurora closely, basically how Quasar4x looked in version 136. This checkbox will give me the freedom to make a few changes to the UI that do not appear in VB6 aurora. For the rest of the features I list below, you can assume that anything I added that isn't in VB6 aurora can be hidden with the Classic Mode checkbox.
Star SwarmStar Swarm is now implemented and behaves virtually the same as it does in VB6, strange reproductive ways and all. I won't go into too much spoilery detail about them, but it should all be there. Note that they can be pretty rare.
New Fleet OrdersCurrent Location Added a new location type to the possible locations an order can be performed at: Current Location. This location is available for all orders that do not require a particular destination, such as Active Sensors On. In total there are 16 orders that can now be performed at the fleet's current location.
Join Fleet and Tractor ships The fleet will join the target friendly fleet and tractor as many ships as it can. For example, a you can tell a fleet of 5 tugs to join a fleet of 5 terraformers and link each terraformer to a tug.
Detach tugs Similar to Detach Survey ships, detaches all ships with an STS tractor into a fleet of their own
Request tow at.. The task group will indicate that it requires a tow from a ship with an STS Tractor. Once a tug fleet joins with this fleet, the Request Tow order is considered complete, and the next order in the queue is processed. This order does nothing on its own, but is important for some of the features listed below.
New Default OrdersFulfill nearest tow request The fleet will travel to the nearest fleet that is currently idling on a "Request tow at.." request and perform a Join Fleet and Tractor Ships action when it arrives.
Refuel stranded fleet Travel to the nearest fleet that has an order to move somewhere but cannot do so for the specific reason that it is out of fuel. Refuel the target fleet upon arrival.
Resupply nearest fleet with < 80% supplies Travel to the nearest fleet with <80% supplies and resupply it upon arrival.
Load fuel at harvester Like load fuel at colony, except it visits a harvester.
Load Infrastructure from nearest pop with a surplus The fleet visits a population in this system or nearby systems that has more than 200 infrastructure that it isn't using and loads it.
Deliver Infrastructure to nearest pop with a defecit Cargo fleets loaded with infrastructure will visit a pop in this system or nearby systems that have colony cost 3 or less and cannot grow without more infrastructure and unload infrastructure there.
New Conditional Order: Unload 90% fuel at capital When the condition is met, the fleet will travel to the capital and unload excess fuel there.
Non Repeating OrdersIf you Add Move while this box is checked, the move will appear with a "(no repeat)" in the Plotted Move queue which has two effects:
- When Cycle Moves is checked, orders flagged as non-repeating will be removed from the order queue rather than being cycled.
- When pressing the Repeat button, non-repeating orders will be excluded.
Auto Request Tow, Auto Detach TugsRequest tow when unable to move If the fleet has an order requiring it to move but is out of fuel or has no functioning engines, a towing request will be inserted at the top of its order queue.
In further detail: This triggers at the end of the conditional order phase in the sequence of play. This checkbox has no effect on fleets already containing a mix of tugs and non-tugs. A 'Request Tow at Current Location' order will be inserted at the top of its order queue, flagged as a Non Repeating Order so that it is removed once the request is completed. The request can be completed by a nearby fleet with the default order to 'Fulfill nearest towing request'.
This feature is useful for automatically handling emergencies where a fleet has run out of fuel or has lost all of its engines. It's also useful to reduce the amount of micromanagement necessary to tow stations to their destination. For example, suppose you've just constructed an asteroid miner with no engines. You can check this box, then tell the asteroid miner to mine a remote asteroid. An idle tug configured to fulfil tow requests will come along, join, and tractor the miner. This clears the 'Request Tow' order, and the next order is processed, which is to move to the target asteroid. This order can be completed since the fleet is now capable of moving.
Detach tugs when no longer neededImmediately performs a Detach Tugs order (unlinks and detaches all tugs into their own fleet) at the end of the conditional order
phase whenever this fleet has fuel and engines, OR whenever the fleet is not currently being ordered to move anywhere.
This is useful in combination with the checkbox above it. It saves the micromanagement of having to manually unlink and detach
tugs after towing is complete. Note that one more manual step is required, which is to re-add the 'Fulfil Nearest Tow Request" default order back to the towing fleet. I have plans to further automate this flow in a future update.
Policies TabAdded a new Policies tab to the F3 window which currently just has two policies you can enable for each population but more can be added later. You can have the population automatically resupply fleets that refuel or overhaul at its location, and/or automatically refuel fleets that resupply or overhaul.
New Game OptionsRuin Generation Chance Added the C# and 7.2 feature Ruin Generation Chance to the Create New Game and Game Details windows. Previously it was a static 20% chance on eligible worlds. Note that a world still has to meet all the other habitability and body type conditions for a ruin to be present.
Minimum and Maximum Distance for Starting NPRs Added this C# feature to the Create New Game and Game Details windows. However, my implementation may be different. In Quasar4x it is implemented as follows: Rather than the Player and NPRs being spawned in their own isolated systems and fate deciding when a pathway between them is generated, all worlds between the player and the NPR are generated at the start of the game, like spokes of a wheel. These worlds are kept hidden until they are discovered, and no indication is given whether a new world you discover was present at the start of the game and thus actually a link in the path to an NPR. To help keep the secret I hid the System ID on the System View (F9) window. The ID of a system can still be viewed by temporarily enabling classic mode.
Anyway, since the pathways are all generated at the start of a game, you can guarantee you will run into an NPR if you explore enough within the given distance from your home. Note that there is one important difference in my version from C#: I believe in C# the distances you provide are the distances in LY between known stars. In Q4X, the distances you provide are in AU, not LY, and it measures the physical distance a ship would have to travel if you issued it an order to fly from the center of Sol, through each system in the path from entry JP to exit JP, to reach the destination.
I generated several starting galaxies trying out different distances and found a 40 to 80 AU range to be a good range, so these are the values that are populated by default.
You can set maximum distance < minimum distance to disable the feature.
Conventional Start NPRsI've implemented the 'Generate only non-Trans-Newtonian races' checkbox on the Create New Game window. This checkbox behaves in accordance with the tooltip of the checkbox in VB6, but not in mechanics. In Q4x, truly conventional NPR empires are implemented; They will spawn with Conventional Industry rather than Factories, only the most barebones technologies, and everything else that comes with a Conventional Start empire. All the auto-design code has been updated to support missing technology that was previously assumed to be known, and any ships that cannot yet be generated due to missing tech will just be skipped until they can be designed. NPRs will convert conventional industry to TN facilities once it researches TN tech. That said, I would only recommend this be enabled for someone just learning the game since this will set NPR's decades back in tech and development.
New Production Overview windowI replaced the Production Overview window with my own version. (The original is available in classic mode.) The benefits are:
- adds shipyard expansion, ground unit training, and terraforming to the categories of production being tracked. More categories may be added later
- when viewing more than one category, data isn't limited to just the first 0.25 years
- can select which columns to show
- can show idle production, ie factories or shipyards not in use
- an info column that shows specifics about the task; Allocated Labs for research, Total Slipways / Available Slipways / Capacity per Slipway for shipyards, percentage of factory capacity allocated for Construction/Ordnance/Missiles, Attack Strength / Defense Strength for ground units in training, and current colony cost for Terraforming.
- sort by up to 5 columns. (by using the dropdowns or clicking on column headers)
- the other empires dropdown adds the ability to show all players (in sm mode) in addition just showing other allies
- Time remaining is relative (Days / Months / Years) rather than absolute dates (although absolute dates are a column option.
Ad-Hoc explorer ship for SMSimply right click in empty space and add an exploration ship. Component and ship designs are taken care of, regardless of whether tech is currently known. The design of the ship, (mostly arbitrary), is below.
SM Exploration class Exploration Ship 4 000 tons 99 Crew 3204.5 BP TCS 0.4 TH 1000 EM 450
12500 km/s JR 3-50 Armor 1-22 Shields 15-300 Sensors 375/375/0/0 Damage Control Rating 3 PPV 0
Maint Life 5.34 Years MSP 1508 AFR 42% IFR 0.5% 1YR 88 5YR 1326 Max Repair 900 MSP
Intended Deployment Time: 36 months Spare Berths 0
J5000(3-50) Military Jump Drive Max Ship Size 5000 tons Distance 50k km Squadron Size 3
500 EP Photonic Drive (2) Power 500 Fuel Use 1.59% Signature 500 Exp 5%
Fuel Capacity 500 000 Liters Range 1414.2 billion km (1309 days at full power)
Omega R300/360 Shields (1) Total Fuel Cost 15 Liters per hour (360 per day)
CIWS-1000 2 (1x16) Range 1000 km TS: 100000 km/s ROF 5 Base 50% To Hit
Active Search Sensor MR6750-R100 (1) GPS 90000 Range 6.75b km MCR 73.5k km Resolution 100
Active Search Sensor MR675-R1 (1) GPS 900 Range 675m km MCR 73.5m km Resolution 1
Thermal Sensor TH5-375 (1) Sensitivity 375 Detect Sig Strength 1000: 375m km
EM Detection Sensor EM5-375 (1) Sensitivity 375 Detect Sig Strength 1000: 375m km
Cloaking Device: Class cross-section reduced to 1% of normal
This design is classed as a Military Vessel for maintenance purposes
This is a feature which can certainly be expanded upon in the future.
Overhauled System GenI spent weeks revisiting and tweaking almost every line of code in system generation to bring system gen more in line with VB6 Aurora. For this process I wrote a lengthy script which analyzed over 3500 systems generated by Aurora in almost every way imaginable, then I adjusted Q4X to come as close as possible to similar statistics. The most important statistic was the distribution of colony costs, atmosphere composition, and NPR-habitable worlds, although every single element that leads up to these final numbers was looked at. It probably goes without saying, but I was literally questioning my own sanity after a couple weeks in, but it's done and I'm exhausted but happy with the outcome.
There were so many things adjusted that I can't list them all, but here were the noticeable changes. Note that all of the changes are *toward* aurora statistics, not away from. For example, there were a couple changes that statistically raise temperatures. This means that previously there were too many bodies being generated that were too cold to be habitable.
- The abundance modifier roll will be more likely to be middle-ground and less likely to be extremely low or high.
- I am no longer scaling orbital distances up when they are all close to the star. This will slightly raise overall tidal forces and temperatures.
- Added a 1 in 5 chance for a secondary star to have the 99% the mass and radius of the primary star. Previously, secondary stars were always significantly smaller. This will improve statistical chances of more "stuff" in systems.
- Fixed a major error in calculating what orbital distance is too close to a star. Bodies can now be much closer than before, which will improve temperatures.
- Rewrote the routine that determines which stars orbit which other stars, and at what orbital distance.
- Fixed bug that allowed asteroid belts to be too wide
- The total mass in asteroid belts should now be higher
- Added a small chance for lone asteroids anywhere in the system
- Added a small chance for "double planets" - terrestrial moons that orbit terrestrial planets and have similar properties to the planet
- Chance for comets to appear in a system is no longer dependent on the properties of the system
- Added chance for a moon to instead be a ring (RP purposes only, no in-game impact) if it is within the roche limit
- Temperature of bodies is now affected by solar infall from nearby stars other than the stars they orbit
- rewrote astmospheric gas composition generation
- fixed one or two major bugs, but I honestly cant remember what they were
Random factoid: I found that about in VB6 you should expect to see one NPR every 14 systems --
at 100% spawn chance. So the default setting of 30% is going to make it one NPR every 46 systems. Obviously with so many factors involved its going to vary wildly so you might explore less.. or many, many more systems, before running into them. The same is thus true for Q4X. With that in mind I'm probably going to set my NPR odds at 60/20 for my next run rather than the stock 30/10.
Pseudo known stars theme for non-known-stars gamesI've added a new theme for system names called Elite, for non-known-stars games, containing about 14K system names from the game Elite: Dangerous. This list of names contains many names of the known stars in the Milky Way like Proxima Centauri, Barnard's Star, and Sirius. But it also contains all of the flavor names they added to the game like Deciat, Thuban, Sental (I picked those names out from the list at random). I excluded the thousands of systems that have generic names like HIP 12345 and "Col Sec 123-41234 blah blah. So what remains is a very large list of real names mixed with real-sounding made up names to make it feel like you're exploring an alternate milky-way-like galaxy.
To go along with this theme I've changed system name themes to pick at random out of the list of system names, rather than in a fixed order every game, but the randomness is weighted so that names at the top of the list are more likely. Names in the new Elite theme are listed in order of distance from Sol in Elite: Dangerous.
Configurable Event InterruptsAdded a new Manage Interrupts button:
Which opens a new Manage Event Interrupts window:
Where you can configure which events cause interrupts.
Note that I still need to add a feature that lets you configure what NPR events cause interrupts. I just have to think about how to do it because you don't usually know what is causing the NPR interrupts.
Show Class Design FunctionShip class designs are assigned a function based on what components they include; this has always been the case in VB6 and Q4x. It's always been hidden from the player but it does play a role when you give (or surrender) a ship to an NPR. The class design window will now show what function an NPR would use the design for if you gave it to an NPR right now. The 'Sort Classes' radio buttons were changed to a dropdown to make room.
In the future I plan to greatly expand upon Class Function, letting players make use of it as well for various automation purposes.
AutomationI spent many, many weeks working on my 100% automation idea.. and I've only gotten it to the point where it can handle a single system. I may very well be abandoning the idea, in favor of lots of little QoL features that help reduce micromanagement. I had wanted automation in case I ever tried some multiplayer stuff, so a person could set up their automation settings, then go to sleep while their empire continued to grow in an online world. I think I'm changing my vision to where the player receives just enough tools to set up a formidable defense for their systems before going to bed, so no complex development takes place, just production queues and static automated fire against nearby hostiles. That's all just daydream stuff.
Back to what's actually done right now. I realized it will be very easy for the automation code to screw something up the player was doing, such as their ship and component designs and shipyards. It will also be a lot of work trying to support all the bugs and quirks that arise from automation code. I debated whether to include it at all, or make it a secret option you can only enable by editing a config file. In the end I decided to release it as-is, with a big ugly disclaimer.
Because it CAN be useful for experimental purposes, when you just need to get a player empire or three up and running for a test you want to do without caring about the details of how it works. The disclaimer is true though; I will flat out not be supporting any issues that arise with from this window, and it should not be used in a "for real" campaign.
I wont go into too much detail about every single option in every tab. The teams tab has a 'Diplomacy Training' checkbox which will automatically keep 5 diplomats that would otherwise be idle busy in a diplomacy team so they receive training. The Contracts tab has a checkbox which will automatically manage contracts for Mass Drivers, shuffling them around from body to body via contract as needed to get minerals sent to the capital. For now, this only works for home system. Fleet orders has a 'Detach Immobilized Ships' checkbox which will also set them to request tow for repair after detached. The fleet orders General checkbox handles the remaining micromanagement not handled by the new fleet orders and default orders listed above, but it does a lot of other stuff too. I need to split it out into multiple checkboxes. It also auto-manages Task Force training, moving ships out of the TF training fleet when done, and moving new rookies into the fleet. The commanders tab has a 'planetary governors' checkbox which should keep all your non-empty pops governed by somebody. The empire tab has a 'terraforming' checkbox that keeps all pops configured to add or remove appropriate gases to make them breathable. This is useful in conjunction with the terraforming default order.
There's a lot of other settings in there as well. Automation can be found in the Quasar4x dropdown menu. It comes disabled by default. To enable it, go to Quasar4x > Mods and check the Default AI and "Default Library boxes. (As an aside, I simplified the 'Enabled' column. Previously it was a customizable dropdown that let you enable the mod for specific conditions only, and it was a coding nightmare for me and the modder. Now its just an On/Off checkbox)
Automation code is kind of (but not really) externalized into the file /mods/default/ai.gd, but it is mostly just a whole bunch of calls to black box api functions, I haven't externalized much of the interesting logic.
(Part II follows..)