1. StarMade
  2. News

StarMade News

Universe update discord dev dump - [1st of October - 10th]

Image is of Brimstone-L7 Advanced Salvager by DeepspaceMechanic.

This has been copied (with a couple of corrections) from the semi-daily updates posted by schema in our official Discord server, in the #universe-update-dev-news-dump channel. To receive universe update news as it happens, join our Discord channel here: Join the StarMade Discord Server!

We'll be posting more of these dumps over the next few days to get up to date with where we're at now. All update news is available for reading in our Discord server. This post is for those of you not in our Discord channel.


TL;DR

Between the dates of the 1st of October - 10th, the following was done:
  • New network protocol implemented, which provides much needed optimisations. Message handling is easier to synchronise, resulting in less errors from multi-threading. NIO implemented, which works on native memory as opposed to heap. This memory is much faster to access from native functions. Finally an interface-driven callback/listener system, resulting in far less unnecessary calls and more control over what called which listener.
  • Audio Engine, designed in a way to be highly customisable, easily implementable into our existing codebase and focuses on performance. Also, allowing playermade soundpacks to be created. The system we're using can also be extended for particle effects and maybe even modding! Much work on the audio engine was done during this time, with many events in the game now having audio events attached to them.

You can have a listen to our work in progress soundtrack here: https://soundcloud.com/danieltusjak/sets/starmade-demos-in-progress

1st of October

Currently working on the network protocol, replacing it with a new one I've been working on for quite a while. This cleans up a lot of things and provides much needed optimisations. The biggest aspect is that message handling will be easier to synchronise, which should result in less errors resulting from multi-threading. It also utilises more NIO (new input output), which works on native memory as opposed to heap. This memory is faster to access from native functions, like a socket reading to it.


At the same time I'm removing every Observer pattern in the code, which was deprecated in Java 11. I'm replacing it with an interface-driven callback/listener system. This results in far less unnecessary calls as well as much more control over what called which listener. I already wrote all of the network code for a separate framework, so all that needs to be done is to integrate it into StarMade.


2nd of October

All the above was completed after 14 hours. The refactoring was quite massive, 369 changed files with 5,733 additions and 7,207 deletions.


3rd of October

Ok, so after much thought, these are the requirements I want for our audio system:
  • Ease of use, one of the hardest things is to organise sounds in groups, so that you can assign a sound to multiple events of a similar type. For example, assigning one sound for all OK buttons. However, it should also have the freedom of being granular so that we can assign a sound for an individual action if needed.
  • Code clutter, putting out an event for audio should not take more than a line, and also auto manage itself into a meta state, so that audio can be assigned within a config and a tool.
  • Management: Tools for audio that handle the assignment, type and parameters of the sound.

After a lot of more complicated approaches, I've finally found a simple one that satisfies all of these requirements. Not only that, but it is reusable for other things as well.

I'm going to use a tag system in combination with a pre-processor. What that essentially means is that all audio events don't take more than a line of code. Simple broad grouping can be made with tags like GUI, OK, WEAPON, BEAM, CANNON etc, adding more as needed. Each tag also has a hierarchy weight so they can be sorted (GUI > OK).

This assignment will be done using annotations, prepping it for the pre-processor, which will then read the code.

The pre-processor will then auto-assign unique numerical IDs to each line that fires an audio event (maintaining and updating old already assigned ones, removing deleted ones, and adding new ones into a config database). In-game, all that line will do is fire the numerical ID, which means it takes minimal overhead.

What happens with the event is then decided by what is assigned in the config to that ID. The config will be read at startup, so all audio events have an endpoint.

The config can then be edited with in-game tools. Essentially you get a list of tag groups like this:

ID 2342: GUI, MAIN_MENU, CLOSE with some more context autogenerated from the preprocessor (class and package name of the event origin).

Audio is assigned to combinations of tags instead of individual events most of the time, even though individual overwrite is always possible.

The tool will also have a feature to display what events just fired. So if you do anything that still needs a sound attached, the tool will live display it. This should be the best and fastest way to give everything a sound with minimal organisational effort and minimal code clutter.

All the sound modification can be baked into the config too (eventual pitch, length, optimisation parameters) as well as attaching a position to a sound. It would just fire the sound with positional data as well as a control option START/UPDATE/STOP.


4 hours later

Alrighty. All GUI actions should have an audio event attached to them that should be tagged the right way (I'll make it so i can flag possibly wrong tagging later and change it to auto reflect back into code). Another big refactor (2,029 changed files with 6,306 additions and 9,051 deletions)


4th of October

Today was fixing bugs with the integration of the new network code. The network code is fully working now. Going to do some more audio work in the evening.


5th of October

Did some more work to audiofy the code, for weapons/modules. In the meta data there will also be options to layer audio depending on distance (explosions sound different from far away than close up)


6th of October

More "audiofying" of events. Some smaller new requirements popped up for that:

  • Remote events that only trigger on the server but the client received a more general event (e.g. activation gate). It will use the same system (server will not trigger normal sound events but handle sending of remote ones. Just required more info on where to send the event to (object id etc)
  • Sub-ID for events. Some events that require state changes (start, stop), need an extra ID to handle events (e.g. beams fired and stopped) automatically
  • Ship Ambience: some blocks will emit ambient sound (like reactors, factories, thrusters, etc). The same system is made to handle those, but an extra layer of management to automatically start/stop as well as update sound events for block collections (
After this, I'll implement the meta layer, and the preprocessor to assign the ids for fast processing, as well as the remote event handling

One nice thing is that this system can be reused for general event handling, e.g. particle systems and possibly modding.


7th of October

Just implementing the ambience manager still.


8th of October

Alright. A lot of things have audio events attached to it now, including metadata of keeping track of events that need to be started and stopped. Now I'll implement the pre-processor function that will read all the events in code and attaches an ID to it, as well as transferring it into a ID->Event config. After that the tool to attach an actual sound to an event can be made.


9th of October

During my research I found javaparser/javaparser which seems to be perfect for preprocessing. I've read the documentation and did a few examples during research.

It is a very powerful tool that essentially parses java code and puts it into a meta model.

So instead of having to parse each file line by line using regular expressions specifically for the function calls, which in this case would be a mess and quite error-prone, I'm using this library which does all the parsing for me.

It gives you a complete tree of your code, including symbol solving (metadata from imports), so you can just search for the specific function, extract all arguments, and modify the data, and output into code.

So what I'll be doing is looking for calls of "fireAudioEvent", which has multiple versions depending on complexity. The simplest ones are client global events for GUI audio, like clicking a OK button. In this case the arguments of this functions would just be the audio Tags AudioTag.GUI, AudioTag.BUTTON, AudioTag.OK etc. What the preprocessor would do is assign that event a unique ID, then it would put that ID and the tags into a config file. After that it would change the function fireAudioEvent to fireAudioEventID which only has that ID as an argument. Any future changes of Tags would be done in-editor which modifies the config file. That means the meta way to specify the function is just the entry point to classify the audio event initially. Any event can of course be easily reverted to its original state.


3 hours later


Alrighty. Got that working.

For a test class this would be the snippet in code:

...

fireAudioEvent(AudioTags.GUI, AudioTags.BUTTON, AudioTags.PRESS, AudioTags.HOVER);

...

as the simplest form of an audio event (a gui event that would fire when hovering over a button)

The parser catches that call and makes sure it is indeed that method being called by resolving the type (so essentially this wouldn't fail even if I had the same method name declared somewhere else).

It produces a new entry, which is then saved to the config as


1
1

BUTTON
GUI
PRESS
HOVER


ONE_TIME
false
false



(The output tag would be where all the data on what to do on that event goes)



At the same time the code id modified using the new ID:

...
fireAudioEventID(1);
...

So performance-wise, there is close to no overhead from the system itself since all it's going to do in-game is call a function with an ID.

For the editor in-game you will have a list of events fired available. So when you hover you would see this event with the ID 1 being fired, you would then click on that and either directly assign a sound individually or assign a sound to that set of Tags, which would then cover all hover sounds unless it's been overwritten by an individual assignment for that ID.

next up is implementing the more advanced calls that have context (sounds that need spatial information and/or context on what object it belongs to (e.g. an ambient sound that is emitted by a ship))


10th of October

Alrighty. Preprocessor is done and now we have a nice config file with 960 entries for audio events. Next will be the actual handling of audio events and the playing of sounds at the according times. 

Modding + QuickFire balance (dev build v0.202.0)

Greetings,

We've released a dev build that introduces two things:
  • Implemented QuickFire balancing project configs as default.

AND:
  • This build has been (mostly) unobfuscated, to reduce the barrier for our community to mod StarMade.

See image below for how to install the dev build.



In the next dev build, we will be fixing issues with beams and possibly changing shield mechanics to a customizable shield system (using rectangular dimensions instead of spheres. A bit like the ancient docking zones). This will enable ships to customize their shields a lot better.

Also, the build GUI will be cleaned up and simplified to reflect the config (a lot lighter since distance/bonus etc can be removed). Overall this will make building , in‌ ‌general, lot simpler.


Modding


In an effort to make modding more accessible, we've decided to take a few steps that don't take us a lot of time to implement, but have a massive impact.

What we've done so far:
  • As of dev build v0.202.0, StarMade is unobfuscated. (Apart from the new planets scheduled for release in the universe update.)
  • From the 8th of August till today, we were distributing unobfuscated builds to modders that requested it (this is no longer needed).
  • Opened a discord channel for modders to communicate what they need to make their projects easier/possible. We want to make sure there's a strong relationship between Schine and the modding community.
  • Invited members from our own modding community, as well as those from outside it to give their input on how we should go about supporting modding in StarMade.
  • Released our game's launcher under the MIT license on GitHub. We saw some of our community were trying to modify it to add mod support, so we thought why not release it. (Schine/StarMade-Launcher)
  • Granted git repo read access to the current lead ([USER]NZSmartie[/USER]) of a modding toolchain and API for StarMade, DistortSM. Also granted the same permissions to gabizou, a lead developer for Sponge (Sponge - Minecraft: Java Edition Modding API) who has expressed interest in helping StarMade modders.


A modding proposal based on the input we received from modders has been created by Zidane and Gabizou from the Minecraft Sponge Team. You can check that out here.

We plan to follow this document when implementing further modding support over the coming months.

Modpack considerations/proposals have been made by progwml6 and Benevolent27 here: modpack format

The input we've received has been keeping in mind the following:
  • We want to eliminate as many barriers as reasonably possible before our next major update (universe).
  • We want to focus most of our efforts on the universe update. However, suggestions that don't take a lot of time for us, but make modders lives a lot easier are fantastic.
  • Ideally, we can continue to add/modify things that would aid in mod development during/after the universe update.


If you're a modder and would like to give your input on modding in StarMade, we'd love to hear it over on our Discord #modders-dev channel here: Join the StarMade Discord Server!

Alternatively, you can email DukeofRealms here: [email protected]


Thanks to all the modders who helped us

We received a lot of useful feedback and input from modders, we'd like to thank those that helped us so far here:

The Fabric team (asie, sfPlayer1, Prospector, Grondag and modmuss50) who have given us very useful advice for modding, specifically with regards to mod-loaders. Also for accommodating changes to fabric-loader to help DistortSM, a StarMade fork of some of Fabric's projects. Also, thanks to asie for pointing us in the right direction and giving us solid advice to base our ideas for modding support off.

The Sponge team (Zidane, gabizou, progwml6, jamierocks/jmansfield, Katrix and Snowie). Zidane and gabizou for creating the StarMade modding proposal google doc, putting a lot of their own effort/input and collecting others' input from our Discord channel into the document. progwml6 for putting a lot of thought into the security and specifics for mod syncing and modpacks. Katrix and Snowie for sharing their expertise about mod repos, from their development of the Sponge mod repo (Ore).

Thanks to kashike, DemonWav, madmaxoft, darkhax and Clienthax for joining our Discord modding channel and giving their input on StarMade modding.

Thanks to Benevolent27, Alendon and TheDerpGamerX, members from our own modding community, who have provided invaluable feedback and are working on some awesome projects.

Special thanks to all the people below for enduring the endless number of questions and conversations about modding:
  • asie - tons of feedback about modding and considerations we should take about our policies.
  • jamierocks/jmansfield - above and beyond answering our questions and giving feedback, even in an hours long voice call! Went through an unobfuscated build, giving feedback and input.
  • gabizou - Gave a ton of input in Discord DMs and our Discord channel. Went through an unobfuscated build, giving feedback and input.
  • Zidane - Gave a ton of input in Discord DMs and our Discord channel. Started the mod proposal google doc, which is very comprehensive.
  • progwml6 - Gave a ton of input in Discord DMs and our Discord channel. Created the modpack google doc with Benevolent27, which goes into details that we never would've thought of.
  • jaredlll08 - Gave a ton of input in Discord DMs and our Discord channel.


Finally, NZSmartie for starting the DistortSM project, which aims to provide a working mod loader (which they've achieved) and a community created API. He's worked with us to help bring modding into StarMade, getting involved in many conversations. He's been a massive help to kickstarting a StarMade modding community.

I’ve tried to include everyone if I missed you, I’m very sorry, we’ll rectify it ASAP :)



QuickFire project

QuickFire is a community-run project to balance a wide range of systems/features in StarMade. This is done through our extensive configuration files.

For more details about the project, check out our news post about QuickFire from last week here: https://starmadedock.net/threads/cs-quickfire-initiative-rebalancing-starmade.31361/

Important details:
  • "Quickfire's configs will not work with vanilla ships. Power costs and proportions of systems and weapons are very different from vanilla, and desirable armor configurations in vanilla (i.e. very little, if any) are potentially very different from what may work well in Quickfire. Some chamber setups will need changes as well. Using this config means a full refit of systems on any existing ships & stations." - QF Team
  • The config is not completed. "Beware that with the current dev build config, small-ship combat is broken. Armor is simply too powerful at those scales against both beams and cannons. We have revamped the values, but until beams switch to the proper formula, we are not releasing the new config version." - QF Team
  • Community-run and always seeking feedback, suggestions, testers etc.
  • We've put their changes in a dev build because we want to bring exposure to the project, so they are able to get feedback and improve their config. So please give them your feedback in either their Discord server (Join the Starmade Quickfire Initiative Discord Server!) or forum thread (https://starmadedock.net/threads/the-quickfire-initiative-rebalancing-starmade.31326/).
  • QuickFire configs are always changing, as further testing and feedback are done. Values in this dev build will likely be different in a few days after this news post, a month from now it might be very different. To test the latest QF configs, join their server here: QuickfireSM.com:4242
  • The goal is to eventually implement well-received config changes the community has made, provided they reach a state where both our community and we are happy with them. This does not necessarily have to be the QF config changes; however, this is the most popular (and only) config pack so far. The QF team have put a lot of effort into their config, reaching out to many different members of our community. They've been testing and taking feedback to create balanced gameplay. Ultimately, we understand that not everyone will be able to come to a consensus on what the "best" settings will be. Whether this is adopted into our release branch depends on your feedback, so again, please give some :)


Check out our news post about QuickFire from last week here: https://starmadedock.net/threads/cs-quickfire-initiative-rebalancing-starmade.31361/

Important links:


Thanks to the QuickFire team and all those who have/will contribute to the project.

Ithirahad Ivrar'kiim : Lead Tester and Config. Forum thread manager, document writer, and generally unofficial chief keyboard jockey.
Scypio : Lead Tester and Config. Created several tools and utilities to make rapid config changes and publish information to the Discord, and does a lot of testing too.
SchnellBier : Lead promoter, he keeps this discord active and encourages constructive conversation.
Morphix : Founding member. Setup the QuickFire Discord Server.
Benevolent27 : Server and Bot admin and Consultant
Zoolimar : Primary Armor Mechanic and consultant.
ManhattenProject: Primary PVP consultant
IKindaCrashAlot : PVP consultant
Lord_Latterous : PVP consultant
alterintel : QuickFire Sponsor. He pays the bills and provides some technical know-how on the server-side.


Thanks for playing StarMade,

~ The Schine Team

CS: Quickfire Initiative: Rebalancing StarMade

This post is a Community Spotlight (CS), where we're bringing attention to cool community-driven projects for StarMade. We'll be posting some more of these in the near future.

Check out the "Discuss with the Devs" that happened in our official Discord last month here: https://starmadedock.net/threads/discuss-with-the-devs-july-18-2019-sis-shortform.31343/


---

Quickfire Team:

Quickfire is a community-run project to modify the game’s configuration files for a more balanced, fun, and interesting game experience. The QF team consists of members from every part of the StarMade community, including several veteran PvP specialists, creative builders with technical knowledge, and a long-time administrator of one of the most historically popular StarMade servers, as well as several other veteran StarMade players.


While the mechanical changes that can be made within configs are somewhat limited, we have done our best to correct the issues the community has been having with the current game and enhance combat gameplay. The Quickfire Initiative has also worked with Schine on refining certain game mechanics (e.g. armor stacking). We have, at the same time, made an effort to avoid undermining key design elements of the power and weapons updates (e.g. the chamber system and arrangement) when not absolutely necessary.

We have also played a key role in testing, tracking down, and confirming several critical bugs with weapons and systems, which were fixed in the most recent patches.


Quickfire has created a config package that includes everything from fine-tuned missile guidance to rebalanced chamber costs. Every system in the game has been looked over and re-tuned to address various balance issues brought up by the community and/or our team members.

We have also adjusted or modified all of the weapon combos, with the goal of creating greater diversity, viability, and utility for each where possible. Weapon changes include eliminating the troublesome cursor recoil mechanic from cannons, significantly improving acid damage application from beams (reducing the need for output spam), adjusting missile guidance, flight speed, and turn rate, and eliminating the extremely exploitable Death Beam.


Currently, we have addressed most of the issues and features that we intend to (aside from some minor tweaks), and have a configuration set available for testing. We are now in the phase of refinement and testing, and for this, we need the community! Feedback, suggestions, and thoughts on our settings for weapons, systems, and chambers are welcome, and will help us improve and refine the Quickfire Initiative’s configs and make StarMade a better experience for everyone. Our in-progress configuration set is available on a public Github (updated often), and we also have a public creative/test server running our configs, at QuickfireSM.com:4242.


You can find an overview of Quickfire’s changes in this document. A longer, more complete list of changes and the explanations behind them is available here.


If you have feedback, suggestions, questions, issues, or other comments about our config set, please post them in the project thread. You can also join the Quickfire Initiative Discord server.


---

Schine:

We'll be adding the Quickfire config changes in a dev build in the next week or so. Please make sure to try these changes out and give your feedback. This will help us (and the Quickfire team) to decide what changes we should or shouldn't adopt into the default configs. The purpose of the dev build and news post is to draw attention to the QF project to help us receive feedback. We will not officially adopt any changes into release until we feel a good solution for our community has been reached.

At the same time, we'll also begin to start making efforts to lower the barrier for modding. We've been working with modders from our own community as well as others to come up with a plan to make modding StarMade much easier, without taking a big chunk of dev time from the universe update. If you're interested in modding StarMade, head over to our official Discord (Join the StarMade Discord Server!) in the #modders-dev channel.

If you don't get a chance to test QF configs out before then, we'll be taking feedback with the Quickfire project when we officially adopt their changes and continue to address balance concerns.

Thanks for playing StarMade,

- The Schine Team

Small Status Update

Hello players,

sorry for the long time without an update. There was a lot of smaller technical stuff, as well as some research and other projects which made it hard to talk about specific things. What I can do, however, is give you a summary about the upcoming items we’ll be working on for the Universe update in the following months:
  • Graphics Engine Update
    • Switch to deferred rendering for dynamic lighting: Deferred rendering will greatly increase the quality of rendering as it allows for a lot more light sources than forward rendering. The nice thing about this is that it will be possible to use the prebaked information as part of the deferred rendering to simulate ambient occlusion. And since even deferred rendering has limits in terms of light amount (around 50-100 light sources), we can use the prebaked system in a LoD system being able to still show unlimited amount of lights without slowdown.
    • Optimizations:
      • An all new backwards LoD system that will decrease the number of polygons very significantly.
      • Fast treebased occlusion culling, so areas that wouldn’t be visible can be discarded before drawing.
  • Block container revamp
    • This is basically refactoring how block types, rotations, etc are handled. This will make it much easier to deal with bugs and to introduce new blocks.
  • Block Engine Update
    • The load system for sectors will be revamped. The goal is to preload data more efficiently, so that sector changes would be virtually unnoticable.
    • Saving and the block save structure will be revamped to be more efficient and safer (more guards against data loss/corruption, as well as features to prevent newer players from losing work due to a ship getting blown up (automatic versioned save feature on ships))
    • Moving all block data to direct memory, as well as possibly moving more expensive functions to native c++ code (lighting calculation, saving/loading)
  • Audio System
    • Research completed on best designs. System will make it possible to live edit sound effects ingame
  • Particle System
  • AI
    • AI Collision System
    • AI LoD (Collision sphere sweeping)
    • Crowd AI (AI positioning without fighting over space)
    • AI behavior layering (macro actions like getting to a position in the universe and micro like fighting against another ship)
    • AI mission system
    • AI behavior
  • Universe recreation
    • New structure
      • Hirachial Region System
      • Region ownership system
    • New NPC structure
      • overall NPC behavior
    • Place of Interest creation
    • Key area creation
    • Area specification
    • New stellar objects
    • New planet injection
    • Difficulty flow (for single player)
    • Event System
    • Void System
  • Population system
    • Low level NPC population
    • Population resources

I’ll be talking more about each item during and after it is implemented (some of which are already partly done)

Thanks you for playing StarMade,

- The Schine Team

StarMade V0.201.363: CONDITIONS, ACTIONS & FIXES

Hello players,

here is a small feature and fix update. There will be several of those along the universe update roadmap (roadmap blogpost on www.star-made.org). Durking the update, we'll be working ~1 week per month on fixes and small features (especially for the rule system), while spending the rest of the time on the universe update.

Universe update Roadmap News: On the universe update, we are currently in the middle of GUI scaling, and close to starting to implement the sound system.

This update features a lot of new conditions and actions. The system now supports rules of different types, depending on the target (players, factions, sectors, etc). Actions are transferable to other entities: e.g. if condition on a ship is true, you can execute a player action for all players on that ship.

Here is the full changelog:

UI


added minimize button to advanced build mode panels on the right

Rule System


  • Player Mod Faction Points
  • Player Set Faction Points
  • Entity Mod Faction Points
  • Entity Set Faction Points
  • DateTime fixes
  • Entity Weekly duration
  • FactionRules
  • FactionIsInRange
  • FactionAddFP
  • FactionSetFP
  • FactionHasMemberCount
  • FactionHasFpCount
  • Action Bridges
  • Entity -> Sector / Player / Faction
  • Sector -> Entities / Players / Factions
  • Player -> Sector / entered Entity / Faction
  • Faction -> Players
  • 'Entity system claimed by' condition
  • player warp to sector action
  • player set credits action
  • player mod credits action
  • player kick action
  • player ban action
  • player in sector cond
  • player say cond (regexp)
  • player send message action
  • player last joined condition
  • player kick out of ship action
  • player kill action
  • segment controller in sector range condition
  • all faction condition parameters now range
  • sector chmod condition
  • sector range condition
  • sector contains entity count condition
  • sector chmod action
  • sector admin command action
  • Added inverse conditions (condition group feature)
  • recurring actions
  • player: add credits over time
  • player: add blocks
  • player: add blocks over time

Fixes:


  • fixed missing integrity triggers
  • fixed beams not active on server when using logic to toggle them (logic salvage beam not working)
  • fixed linear reactor level calcs
  • fixed activatable modules not synching correctly (cloak drive)
  • fixed torch damaging stick shops
  • fixed error that would respawn Asteroids over and over if they were moved



Balance


  • blockBehaviorConfig now has global defense of blocks based on type (shield, armor, block) additionally to the previous individual block effect defense (which would be a mess to adjust)
  • Note: it's now possible to set defense value for all block types depending on if it's armor, normal or shield that is hit. The defense value is put against the offense value of the weapon. This now enables a balance where some weapons can be better/worse against shield/armor/normal
  • beams now use calculated armor values for damage reduction
  • Note: Beams now do damage calculations in a similat way as cannons in that the armor depth is calculated upon hitting a surface. The damage of the beam is reduced depending on armor thickness. Values have been added to config.
  • General Balance Note: The current config values for the new balance additions are currently experimental and in no way final



Thank you for playing StarMade,

- The schine team