Progress Report #26: Lītigium In Forīs

Official Forums

Space Station 14 now has an official forum! You can login to it with your SS14 account.

The forum will mainly be used for ban appeals and other administrative stuff so it’s pretty barebones for now. If it gets enough activity we’ll add more general forums and stuff.

Please read the rules before posting.

Content

Physics Rework

Contributed by metalgearsloth and Acruid.

A huge thanks to metalgearsloth for slaving over a complete physics rework for SS14. If you want to see the technicalities of it he’s done a detailed write-up in the technical section but here’s a few examples to demonstrate the advantages of the rework.

Circle colliders for players (This means you won’t need to be pixel-perfect when going through airlocks and doorways).

Items can rotate when thrown and bounce.

Pushing is less jittery.

Explosion in zero-gravity.

Again, this physics update is huge and most of it won’t be noticed by players so send metalgearsloth and Acruid hugs and kisses.

New Chatbox

Contributed by chairbender and ike709

A myriad of improvements have been made to the chatbox:

  • It’s resizable now!
  • Rather than using message prefixes for channels, you now cycle channels with Tab or the channel’s hotkey.
  • Chat channels can now be filtered, allowing you to opt out of hearing whines of “i ded pls restrt” and “ick ock”.

Viewport Improvements

Contributed by 20kdc, Zumorica, and PJB3005

These improvements to the viewport will eliminate the advantage people with bigger monitors got. Essentially it scales the view of the game so that everybody can see exactly the same amount of tiles.

HUD Inventory and Themes

Contributed by Swept and ike709

The inventory popup window has been replaced with an on-HUD inventory inspired by Goonstation. The ID and storage slots are always visible, while the top row of the inventory is toggleable with I.

With the addition of the HUD inventory (and much bikeshedding) comes the addition of HUD themes, which currently only changes the inventory icons. Current themes include:

  • Default: A color-shifted version of Goon’s HUD icons
  • Classic: SS13’s classic Midnight HUD, for those who fear change
  • Modern: A modernized take that more closely matches the rest of SS14

Firey Stuff

Contributed by Zumorica

You can now spray yourself with flammable chemicals and ignite yourself using a welding tool or an igniter.

Materials

Contributed by Swept

In-game Changelog

Contributed by PJB3005

Added an in-game changelog, so you can view new features in realtime! The changelog button will notify you whenever there are unread changes.

Info Window - Rules/Tutorial

Contributed by Swept

All fun has been removed from the game and replaced with rules, which are viewable in the information window, accessed with F1.

These rules only apply to the official servers; community servers are welcome to moderate themselves however they see fit. Bans from official servers do not apply to community servers, nor vice-versa.

Slimepeople & Vox

Contributed by Zumorica and PJB3005

As a proof-of-concept for future codebases, slimepeople and vox have been added. However, these are currently unplayable and will remain so for the forseeable future. While we wish to support whatever kinds of species other servers want, we have no desire to include “human reskin” species on our servers that are not significantly different from a gameplay perspective.

Food

Contributed by Swept

All the food in the codebase was ripped out, reimplemented and reorganized. This added a ton more food content but also makes adding recipes much easier.

NOTE: As of this progress report, lots of recipes for this food are still unimplemented.

Ghost Roles

Contributed by Zumorica

Ghost roles have been added, allowing unrobust players to return as a mouse or a CentCom Official. For moderation purposes ghost roles are currently created solely by admins.

Station Ambience

Contributed by tmtmtl30

SS13’s background hum has been added to SS14. It can be disabled in the settings.

Lobby Music

Contributed by Swept and ike709

Our new mixtape just dropped, with the hottest license-compliant beats available. Here’s a list:

Map Changes

  • Added a library Contributed by ike709
  • Hardened chemistry with reinforced walls Contributed by Swept
  • Hardened the station exterior with reinforced walls Contributed by Swept
  • Added a bar backroom Contributed by BulletGrade

Rollerbeds

Contributed by Topy

Rollerbeds have been added allowing better transport of injured station personnel.

More Smokeables

Contributed by Swept

You can now grow weed and cannabis and roll it into joints/cigarettes! There’s also a lot more cigarette types in vending machines.

Context Menu Improvements

Contributed by daniel-cr

The context menu has been improved, making large stacks of items easier to manage.

Votes

Contributed by PJB3005

Players can now vote to restart the round (i ded) or change the next round’s gamemode.

Better Admin Panel

Contributed by lzimann, DrSmugleaf and metalgearsloth

You can now kick, ban and teleport to players from the admin panel.

Health Overlay

Contributed by DrSmugleaf

A simple command which displays health-bars over players heads. Useful for testing and admins.

Vending Machine Advertisements

Contributed by Visne

Commercial vending machines will now advertise their products every once in a while.

Tiny things

  • Holiday system added. The game can now run special events on certain dates and give messages like “Merry Christmas”. Contributed by Zumorica
  • Gas leak event. Contributed by metalgearsloth
  • Patreon linking. Many SS13 servers allow donators to receive a fancy chat color in OOC, and now SS14 does too! Contributed by PJB3005
  • Inflatable walls. Contributed by ShadowCommander
  • Stacked sprites now can be visualized. Contributed by Ygg01
  • Additions to banning system like hardware ID bans. Contributed by PJB3005
  • Admin menu now can set temperature and add gases. Contributed by metalgearsloth
  • Airlock construction .Contributed by ShadowCommander
  • Extended gamemode. Contributed by Zumorica in less than 2:30 minutes
  • You can customize your eyes color now. Contributed by Rember
  • There is now a toilet on the station. Contributed by Macoron
  • Clown cannon. Contributed by Zumorica
  • Unified the server/client consoles. Contributed by Acruid
  • You now spill whatever is in your hand when falling. Contributed by Clyybber
  • Latejoins are now announced via radio. Contributed by ike709
  • Verb icons. Contributed by Swept
  • Ghosts can now spook players by flickering lights. Contributed by Macoron

Technical details

Fluent Localization

Contributed by RemieRichards

We replaced our localization system’s backing library, NGettext (a .NET gnu gettext port), with a .NET implementation of Project Fluent.

Project Fluent is Mozilla’s modern localization system, which allows for among other things, asymmetrical localization; Asymmetrical localization is important if we want to fully support languages with grammar that differs greatly from english.

Something like gettext simply swaps out a source message with a translated message, this isn’t very scalable outside of simplistic examples (“Hello” -> “こんにちは”). This can unfortunately lead to source grammar and source concepts leaking into target languages, which at best leads to unnatural translations and at worst complete gibberish.

One major consequence of this change is that all localized text is now stored outside of C# code, including the source language, english. This shouldn’t be a major obstacle as generally localization is a write-once affair and for ease of contribution localization can be temporarily skipped, simply passing through source text verbatim, while also displaying a warning in the game’s log so we know to come back to it later.

We’ve also got plans to build some roslyn analyzers to make working with localization even easier, with things to look forward to like automatic scanning for missing translations in a particular language (imagine english implements the message hello-world as “Hello World!”, but the french translation files have no entry for hello-world)

Check out our localization guide and have a play on project fluent’s interactive playground!

Physics rework

Contributed by metalgearsloth

Our previous physics iterations were notoriously unstable so we went to the effort of integrating Box2D into the engine (specifically basing it off of the Farseer dotnet port).

We’ve also taken pieces from Box2D itself and forks of Farseer (Velcro and Aether2D). The reason for this is to take the best pieces of each for the engine to suit SS14’s needs.

In the future we’ll also look at multi-threading critical parts for further performance increases.

It is by no means finished yet but the features currently include:

  • Circle colliders for players
  • Items now have collision without tanking server performance
  • Items can rotate when thrown and bounce
  • Weightlessness rubberbanding is fixed
  • Pushing is less jittery
  • Running along walls is slightly less jittery (more work to be continued)
  • Preliminary work for driving the station performantly

We’ll be doing work to make the physics system more performant so it will continue to get faster over time.

This also allows us to remove a lot of cruft with controllers as previously velocity was being reset every frame so if you wanted a body to continually move you’d have to manually push it; now you can just apply an impulse once and the system will take care of it without requiring bookkeeping every time.

Serialization v3

Contributed by PaulRitter and DrSmugleaf

Our serialization system has been revamped to make it easier for developers to create new components and prototypes and add content to the game. Previously, each property needed at least one line of code (or at worst more than a dozen) to be written for them to be read from and written to YAML files. Now, the same can be done by writing [DataField("propertyId")] above each of them. Everything else is handled in the background automatically, and more performantly than before. This also enables us to lint our YAML files for errors, typos and invalid data, avoiding unnecessary bugs that were cumbersome to spot manually. It also makes a YAML/prototype editor possible if needed in the future, as you can easily access and validate each property used by a component, prototype, or any other kind of data definition.

Pseudo Airlock Prediction

Contributed by tmtmtl30

Essentially with prediction and airlocks you used to just teleport to the other side of an airlock when going through it. Now you just go through effortlessly and it looks great!

YAML Hot Reloading

Contributed by DrSmugleaf and InquisitivePenguin

Entities (stuff like walls, objects, players etc.) are composed of a set of components (stuff that defines if it’s a food, tool, etc.). Our entities/prototypes are defined in YAML while the components are coded in C#. With YAML hot-reloading, we can modify things in the files for anything that’s defined in YAML (Pretty much everything) and have it auto-update in game. Kinda like Garry’s Mod.

This is super cool and will cut down on development time even more, since before you’d have to rebuild and restart the server if you messed up one line of YAML.

In SS13 coding terms, this is like reloading an item dm file while the server is running and seeing the effects immediately.

RobustToolbox improvements for other games

Contributed by Zumorica

RobustToolbox, the game engine that SS14 uses, has been improved in a variety of areas to better support other games that may want to make use of it. For example, it now supports singleplayer games!

To aid development of new games, singleplayer and multiplayer templates have been created. Making use of these, we’ve created Robust Pong, an example online game for anyone looking to learn how to use the engine. You can even try it out yourself by connecting to it on the hub!

We want to make RobustToolbox a game engine that allows you to Build Your Own singleplayer or Networked Dream games, and as such we will continue improving it in order to bring it to higher standards.

Patrons

Thanks to Hunter James, Valinov, Nemmay, Jordan, Dan Griskardian, S.C., ‘-Y-, Jubal the Wizard, clyf, Kerb 755, Robin Rottstock, Altana, Wolfiten, Durp, Joshington Awesomahee, Eric VW, Evan Armstrong, Jan Doodt, Christopher Marmentini, Curtis Pearson, Mono, Star Lord, creadth, DramaBuns, KrystalDisc, Darren Brady, Zandario, vifs, Bobberunio, CPM311, ThatGuyGW, dean, Await Future, Daniel Thompson, Acvisy, Tomeno

Credits

The contributors since the last progress report were: 20kdc, Acruid, AJCM-git, BingoJohnson, bryce0110, BulletGrade, chairbender, Clyybber, collinlunn, daniel-cr, drongood12, DrSmugleaf, Elijahrane, Fortune117, GraniteSidewalk, ike709, Injazz, komunre, lzimann, Macoron, ManelNavola, MehimoNemo, metalgearsloth, mirrorcult, NIXC, Nukeuler123, PaulRitter, Peptide90, PJB3005, PJBot, Rember, RemieRichards, ShadowCommander, Silvertorch5, SweptWasTaken, TaralGit, tmtmtl30, UnderscoreX5, Visne, WlarusFromDaSpace, Ygg01, Zumorica

Many thanks to everybody who contributed. We couldn’t do this without you!

And Geoff