StarMade News
Devblog 13th June 2017
Greetings, citizens ~
News
It’s with a heavy heart that we announce, Auburn is leaving the Schine team for new opportunities. He completed his project here and we are extremely proud of his work. We are currently working on its integration into the universe update coming later on.
What are we working on right now?
We are currently completely reworking the advanced build mode and other GUI functionality to work with a planned GUI scaling update in the future.
Advanced Build Mode
We’d like to go in-depth for one specific build tool that we are going to add. The Fill Tool.
The fill tool is one of the tools we are most excited about. It fulfils quite a few purposes that the community has been asking for and will help you update your ships in the future power update.
Once you engage the tool, it uses the camera position to determine where the fill area starts. When the user confirms the fill location, the game will use the highlighted block type to flood fill up to a number of blocks set by the user.
Each click on “fill” will then add a set amount of blocks (maximum amount per step determined by the server). It will keep track of the blocks already placed so it will reach even into the farthest ends of your ship. Alternatively, it can be used to make some cool spherical shapes on your ships.
The great thing about this tool is it isn’t only for filling empty blocks. It can also be used to fill over existing blocks. One way this will be useful as a “Paint” tool. You can select which block type to replace when filling. The default is the “Empty” type and it would work like described before as a normal fill tool. But you can also select “Grey Hull”, which would replace groups of touching grey hull blocks on your ship. It, of course, would replace special shapes like wedges or slabs with the right shape of the replacement type if possible (grey hull wedge -> red hull wedge with the same orientation).
Another tool we’re working on is the Line Tool. We will implement this in two stages. The first stage will be a simple version. Just like in “Create Docking” you will be able to select two points on the grid (the free point selection is something we will also add for other build tools). The helper will make a line between those points which can be used as a reference or to restrict building/removing just like any of the other build helpers.
Additional stages will add line thickness and additional line segments that can also be set to splines, which then would enable you to make curves.
Cargo Transfer
In our discussions about build mode item handling, we also remembered the inconvenient cargo handling that players have to go through, in case they want bidirectional cargo transfer between a station and a ship. The current system is too complicated and also doesn’t allow for item flows down a docking chain. Altering the feature will open a better way to transfer cargo.
The way we will do this is to add two new rail blocks: Rail-Unload and Rail-Load.
The visual difference will make it easy for players to see what the dock is before docking. All connected inventories to your docker block will either be loaded or unloaded to or from the entity you are docked to. These 2 rail blocks will be swappable through logic interaction just like the other ones.
To prevent exploitation, a ship can be set into four modes: “Always Allow Transfer”, “Deny Transfer”, “Always Ask”, and “Only ask for different faction”.
When your ship is set to “Always Ask” (default), whenever you dock to an Unload or Load-Rail, the pilot will get a dialogue asking him to confirm the transfer. If there is nobody to get the dialogue, the transfer will not start. Of course, the transfer can at all times be manually triggered on/off via a ship’s hotbar, and the mode can always be changed in the ship menu.
As for the next dev build, we should be able to release one at the end of this week, followed shortly after by a pre-release the next week if all goes well.
And as always, thank you for playing StarMade!
~ The Schine Team
Devblog 6th June 2017
Hello players,
The dev blog for this week features something more on the technical side. It covers a nice feature that will be very important in going forward.
Optimized Meshes
With the preview of last week, which is being able to draw any subset of blocks on any structure, we want to share another reason why we implemented this now. Not only is it already extremely useful for making existing GUI elements better and as said, adding new systems like active scanning, it also will be our basis for a new Level-of-Detail system. This system will increase drawing performance by drastically reducing the amounts of polygons at a distance.
For that, the meshes we had last week needed to be improved and optimized. Since these are one colored representations of a set of blocks, polygon reduction is extremely viable.
First of all, however, it needs to be explained why this method is not viable for all the mesh drawing, especially close. Reducing polygons means giving up information that is stored in those vertices. In our case that is texture information, the baked lighting, material, and a lot of other graphical meta information. Some of that can be compensated with techniques like deferred lighting, which would work yet does not scale well most of the time, and will force a lot of other optimizations to be removed. Also, the more detailed the mesh is with additional shapes, the less advantage the polygon reduction will provide.
That’s why combining both techniques will give us the best result. At a distance we can draw a minimal mesh that will speed up things dramatically. We can even make that multicolored with mixing multiple meshes on a fixed map of colors. Best of all, for close up, this still gives us the option of using deferred lighting eventually, but mixing it with existing lighting to have a smooth transition at a distance for maximal performance combined with the cool graphical experience of dynamic lighting.
Here is how it works:
As an example, we just take one side of the mesh. In production, this algorithm applies to all sides and all ‘depths’ (layers). Individually, however, we are looking at a 2D mesh.
This is the raw drawing, which each block representing a full square. As you can see, the amounts of vertices and polygons are pretty high, especially if only one texture would be used.
The algorithm itself at this stage records all vertices and its connections to other vertices, as well as diagonal vertices individually. Diagonals are handy to know that there was a filled out block at that position, and not just a one block gap.
The first step for the algorithm is to remove inner vertices. These can be easily identified by checking the amounts of diagonal vertices a vertex has. If the number is exactly 4. We can remove it. At the same time, we can remove unnecessary connections. This is a bit more complicated to explain. Essentially for each non-inner vertex, we check for each existing direction the two orthogonal neighbors in the same direction. If both exist, the connection is unnecessary.
A similar approach is used to remove the vertices that are not corners.
Now the mesh is as simple as it can be. However, to draw it, we need to define triangles. There are several methods to triangulate a mesh, and it is highly complex, especially doing it with concave polygons that can have multiple holes in it.
For our case, we can make the process a lot faster by using the fact that we are on a grid. A fact that is often overlooked in a lot of projects, but since starmade is primarily a voxel game, can be used as the source of countless optimizations.
Explaining the exact process of retriangulation would take way too long for this dev blog, but you can probably understand the overall process of inserting horizontal lines at key points to subdivide the mesh into rectangles.
From there, it is rather straight forward to get actually triangles that can be drawn.
Now we do this for all sides, and their layers, and we get a mesh that is highly optimized, and doesn’t have any strangely shaped triangles (extreme angles). This has the great advantage of being able to use well formed texture coordinates if needed.
As a final step (for the highlighting), the mesh is drawn into a frame buffer and rendered with an outline shader.
As announced, we have a dev build in the making which we will release when it’s ready for public testing.
Thank you for playing StarMade,
~ The Schine Team
StarMade - Devblog May 30th 2017
Greetings, citizens ~
Here’s another weekly dev blog!
What are we working on right now?
In the wake of the power update, we’ve identified a few features that overlap nicely with the new power system and other ideas we’ve had for quite some time.
One of these features is the ability to draw groups of blocks separately and apply various graphical effects to them. Among other uses, this will allow us to display the inner workings of ships quite nicely, e.g. highlighting a specific salvager/weapon array, a circuit, damaged blocks, etc. There are several existing uses for this, but it will be especially useful on future features, such as: scanning other ships, getting an overview of your reactors, highlighting potential issues therewith, etc. We’re aiming to do a release with this feature implemented in quite a few areas.
Here is a gif of the new system in use
We will be updating Advanced Build Mode with increased functionality. This will include the above highlighting, as well as new tools. This update will not only make reactor design much easier (and allow integration of their features), but it will also give players better building tools in general. Among these planned features is a fill tool, which will allow you to progressively fill any area, as well as tools to draw lines and possibly arcs.
Power Update
Thank you again for additional feedback. We went through most it, and we will be addressing more of your concerns later on where needed.
Major concerns
After reading all of the concerns and debates over the new power system, we can address two of our major concerns players had with the mechanics. The first is that players are limited to a single active reactor per ship, and the second is that only a single reactor would ever be active for a group of docked entities. We agree that some of these issues may be valid, but are not something we can easily solve in a balanced way.
We came to the conclusion that implementing a working multi-reactor system right now would compromise the whole reactor system as we do not know that system on its own works in-game.
That’s why we’ve decided that after implementing the base system (and after its initial balance passes) we will look into the concerns about the single-reactor issue again, to have a better overview on the possibilities in this system. Specifically, we will re-examine allowing docked entities to have their own active reactor, and possibly even allow multiple active reactors per entity to see if we can find a balanced, non-exploitable way to implement them without introducing countless rules and restrictions.
Even so, coming up with something to allow docked reactors only solves a small part of the bigger problem mentioned here: https://starmadedock.net/threads/starmade-devblog-may-22nd-2017.29057/
What’s next? / Conclusion
We definitely appreciate all of the feedback we’ve received thus far. It has gone a long way to help shape and solidify StarMade’s next steps. Given the work we’ve been doing, we are planning a pre-release build in a week or two. Be on the lookout for that build, and if you have questions on our release cycle, please refer to the following:
https://starmadedock.net/threads/starmade-release-cycle-news-posts.28895/
And as always, thank you for playing StarMade!
~ The Schine Team
StarMade - Devblog May 22nd 2017
Greetings, citizens ~
Here’s another weekly devblog.
What are we working on right now?
We are currently finishing off a redesign of the chunk request system which will make requesting chunks over multiple entities a lot more controllable. This means that chunks close to the player can be requested a lot faster resulting in a much better overall experience with loading times for objects (as e.g. asteroids that are far in the back get less priority over closer objects). Prioritisation did exist in the previous system, but it was more local to the entity.
Also, a few prototypes to test out if our plans for the reactors are viable implementation wise have been implemented. One example is a system which can create a convex hull (https://en.wikipedia.org/wiki/Convex_hull) of an arbitrary amount of blocks has been implemented. This system’s focus is to be as fast as possible and to provide a variable amount of precision to simplify complex structures. This is then not only usable to make the distance between stabilizers and main rector actually viable, it can also be used graphically to outline ship systems.
Furthermore, Terra has been working on a rather significant launcher update. See below for details!
Launcher update
While most of the work is done, the UI isn’t quite finished yet, so you’ll have to rely on imagination instead of screenshots for now. (Sorry about that!)
This update consists of two major changes:
Firstly, we’ve merged all of the settings popups into a single dialog. This both drastically improves ease-of-use, and gives us unlimited space to add more settings later, for example logging. (Implementing this required extensive changes throughout the codebase, so the thorough QA required for this will delay release somewhat.) We’ve retained the settings gear icons, but instead of opening their respective popups, they now act as shortcuts into the new settings dialog; this should help with transition. The architecture behind the consolidated options also allows us to implement more complicated and/or settings-dependent features, of which this release’s second feature is a good example:
The second is something that people have been requesting for ages: official support for multiple StarMade installs! Adding them is straightforward and easy, and you may have as many as you like. There’s also a dropdown on the main window that allows switching between them quickly. No more manually changing the path. No more version/branch mismatches. No more multiple launchers.
There have also been minor tweaks throughout; some visible, some not.
Power feedback
Thank you for the large amount of feedback on our new power proposal. So far it seems that we need to iron out some key issues and tweak the system here and there.
The major concerns so far seems to be:
-
Restrictive rules that contradict several goals (Simplicity, Logical):
-
1 active reactor per entity | 1 active reactor for entire ship
-
Minimum block count for chambers
-
-
Tech points are too abstract
-
Bad terminology for power related functionality such as Tech Points, Chambers, Skill trees, ...
These are definitely valid concerns. In the next few days we’ll work try to work on resolutions to as many issues as we can and try to improve the power system so that doesn’t have to compromise on build creativity that much yet also not open up for exploits.
As a side note, with the power proposal we are of course planning a responsive and informative GUI that will come with the system, which will indicate exactly how the system is functioning so that it’s easily understandable just from that without having to read one word of explanation.
Making things work with docked entities
Perhaps an interesting topic to talk about and why it’s not that easy to find a solution for it that still follows the goals we’ve set up.
With the current in-game power system, the main reason why people use docked reactors, is to bypass the softcap limit that is set per entity. It gives you more favorable power production per block by spreading it out over multiple entities. Anyone that doesn't do this, such as just sticking with a single big ship, will be at a severe disadvantage.
In this proposal, we have power reactor blocks scale in a linear fashion, there’s no way to get more power per block by splitting them over multiple entities…
But there's still something related to power that can be bypassed which is the minimum distance required between the reactors and stabilizers. That distance scales differently depending on reactor block count. It only influences the amount of volume your ship needs to get more power out of it but it comes down the same exploit but most likely just less severe.
There’s a possibility where the distance can scale linear just like the power blocks do, it depends on preliminary playtesting to figure that out.
If that was the case, docked reactors would already have a big chance of coming back.
There are also power related things we have to care about when talking about docked entities such as chambers, but you can simply disable those from working and it will be just fine from a ship perspective.
However, when investigating what exactly is wrong with this, we noticed that there are plenty of other inconsistencies when it comes to docked and undocked ships. Both examples could literally be the same ship yet as soon as you dock one of them, it becomes part of another ship and it loses a part of its systems and functionality.
The docked power allowing you to bypass the softcap is far from the only issue StarMade has with inheriting systems and functionality. It’s just the most severe one which is why it’s being focused on so much.
Just a few examples that we can bring up:
-
Only the main ship, the one at very bottom where everything is docked is too, can control movement.
-
Rail connections are weak points, if you combine 2 of the exact same entities with each other through a rail connection, and someone manages to destroy your rail. Your ship that you still control, suddenly lost half of its mass. As if the experimental feature “break off” was enabled.
-
No full 2-way inheriting.
-
Shields are inherited from the parent entity
-
Thrust and mass, are inherited from the child entities
-
Rail enhancers, rails only enhance their 1st level child entities <=> entities only care about the enhancers of their parent
-
Mass is inherited 1- way, the bottom ship will be the sum of its own mass, and the chains above it.
-
On top of all this, most of these systems use power, yet power either inherits only from the parent, and/or it uses its onboard power.
-
There are 2 distinct cases here:
Docked entities should be fully independent from their parent and children
This would be the safest option when it comes to exploits and amount of work to be done, it would also decrease complexity and make StarMade easier to learn. Yet it comes at the price of limiting creativity a lot and reduce the amount of advanced structures you can make later on. Modular ships would not be feasible with this system.
Docked entities should completely merge with them when it comes statistics.
This would be the best option gameplay wise, allowing as much creativity but also risk opening up the system for exploits. It could also be too complex for new players to get into this although that’s more of a progression problem than
As for some of the advantages of turrets versus fixed weaponry, we can always balance those through AI accuracy, swivel speed or some other system that does not add special rules to the inheriting of systems.
We’ll be looking at more feedback of course.
As always, thanks for playing StarMade!
~ The Schine Team
-
StarMade - Devblog May 15th 2017
Greetings citizens,
We have an update on the power update as well as an exciting announcement for you.
What are we working on right now?
One new thing is that in our internal builds fleets are now saving orders on logout and server start and restart. You can expect fleets to save orders in future dev builds. As previously mentioned, we have been constructing a comprehensive power document to share with the community. It is now being finalized along with a video to give an easily digestible overview of the entire proposal. These will be released simultaneously later this week.
Be sure to check our last news post [prev dev blog] for more specifics, since we are still discussing those internally.
New developer joining the team
For the past two and a half months we've been getting a new game developer familiarised with the code and how we work. Some of you will already be acquainted with him as an active community member, welcome to @nightrune (Sean Sill)!
Thanks for playing StarMade,
~ The Schine Team