Frequently Asked Questions Links These are the official Space Wizards domains:
robusttoolbox.io, spacestation14.io, spacestation14.com, ss14.io
+Frequently Asked Questions - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Frequently Asked Questions Links These are the official Space Wizards domains:
robusttoolbox.io, spacestation14.io, spacestation14.com, ss14.io
Any other domain is not affiliated with us.
Space Station 14 Socials Development Official Servers The official servers are called “Wizard’s Den” on the launcher/hub.
If you’ve been banned in any of them, you may appeal your ban here .
If you’ve been banned in a third-party server, there’s nothing we can do.
You’ll have to appeal your ban with them.
Q: Is the game free? Yes, and it will always be. If you want to support us, check out our Patreon .
Q: Is It Cursed? Nah.
Q: Where can I download the Standalone version of the game? In our downloads page .
Q: Where can I sign up for the Steam Playtest? In our official Steam page .
diff --git a/about/index.html b/about/index.html
new file mode 100644
index 0000000..1c6f36f
--- /dev/null
+++ b/about/index.html
@@ -0,0 +1,8 @@
+
Abouts - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Tuesday June 9, 2020 Frequently Asked Questions Links These are the official Space Wizards domains:
+robusttoolbox.io, spacestation14.io, spacestation14.com, ss14.io Any other domain is not affiliated with us.
+Space Station 14 Downloads Steam Game Wiki Official Forums Socials Patreon (Finances) Lemmy Discord Mastodon Twitter Development GitHub Organization Game Repository Engine Repository Documentation RSIEdit Official Servers The official servers are called “Wizard’s Den” on the launcher/hub. If you’ve been banned in any of them, you may appeal your ban here.
Sunday May 17, 2020 You can contact us via: Discord Lemmy Forum Emailtelecommunications@spacestation14.com
Friday April 13, 2018 System Requirements Every Platform: Minimum 64-bit CPU & OS Memory: 2GB Ram Graphics: OpenGL 3.3 or greater Storage: 512MB disk space Recommended 64-bit CPU & OS Memory: 4GB Ram Graphics: OpenGL 3.3 or greater Storage: 1GB disk space Windows: Windows 10 1607 or above VC++ 2015 Redistributable Linux: OpenAL Freetype macOS: Monterey (12) or greater FAQ Is this malware? No. If you’re paranoid you can download the code yourself and build from source though.
Sunday June 25, 2017 What is Space Station 14? Space Station 14 is inspired by the cult classic SS13 and tells the story of an ordinary shift on a space station gone wrong. Immerse yourself into your role, tinker with detailed systems, and survive the chaos in this round-based multiplayer role playing game.
+Your custom character can spawn as one of dozens of crew and enemy jobs, ranging from engineer to captain, or even a traitor, each with its own unique gear.
\ No newline at end of file
diff --git a/about/index.xml b/about/index.xml
index 118b71e..54e5bbb 100644
--- a/about/index.xml
+++ b/about/index.xml
@@ -1,4 +1,4 @@
-Abouts on Space Station 14 https://spacestation14.io/about/Recent content in Abouts on Space Station 14 Hugo -- gohugo.io en-us Tue, 09 Jun 2020 00:00:00 +0000 Frequently Asked Questions https://spacestation14.io/about/faq/Tue, 09 Jun 2020 00:00:00 +0000 https://spacestation14.io/about/faq/ Frequently Asked Questions Links These are the official Space Wizards domains:
+Abouts on Space Station 14 https://spacestation14.com/about/Recent content in Abouts on Space Station 14 Hugo -- gohugo.io en-us Tue, 09 Jun 2020 00:00:00 +0000 Frequently Asked Questions https://spacestation14.com/about/faq/Tue, 09 Jun 2020 00:00:00 +0000 https://spacestation14.com/about/faq/ Frequently Asked Questions Links These are the official Space Wizards domains:
robusttoolbox.io, spacestation14.io, spacestation14.com, ss14.io Any other domain is not affiliated with us.
-Space Station 14 Downloads Steam Game Wiki Official Forums Socials Patreon (Finances) Lemmy Discord Mastodon Twitter Development GitHub Organization Game Repository Engine Repository Documentation RSIEdit Official Servers The official servers are called “Wizard’s Den” on the launcher/hub. If you’ve been banned in any of them, you may appeal your ban here. Contact https://spacestation14.io/about/contact/Sun, 17 May 2020 00:00:00 +0000 https://spacestation14.io/about/contact/ You can contact us via: Discord Lemmy Forum Emailtelecommunications@spacestation14.com Downloads https://spacestation14.io/about/nightlies/Fri, 13 Apr 2018 00:00:00 +0000 https://spacestation14.io/about/nightlies/ System Requirements Every Platform: Minimum 64-bit CPU & OS Memory: 2GB Ram Graphics: OpenGL 3.3 or greater Storage: 512MB disk space Recommended 64-bit CPU & OS Memory: 4GB Ram Graphics: OpenGL 3.3 or greater Storage: 1GB disk space Windows: Windows 10 1607 or above VC++ 2015 Redistributable Linux: OpenAL Freetype macOS: Monterey (12) or greater FAQ Is this malware? No. If you’re paranoid you can download the code yourself and build from source though. About Space Station 14 https://spacestation14.io/about/about/Sun, 25 Jun 2017 00:00:00 +0000 https://spacestation14.io/about/about/ What is Space Station 14? Space Station 14 is inspired by the cult classic SS13 and tells the story of an ordinary shift on a space station gone wrong. Immerse yourself into your role, tinker with detailed systems, and survive the chaos in this round-based multiplayer role playing game.
+Space Station 14 Downloads Steam Game Wiki Official Forums Socials Patreon (Finances) Lemmy Discord Mastodon Twitter Development GitHub Organization Game Repository Engine Repository Documentation RSIEdit Official Servers The official servers are called “Wizard’s Den” on the launcher/hub. If you’ve been banned in any of them, you may appeal your ban here. Contact https://spacestation14.com/about/contact/Sun, 17 May 2020 00:00:00 +0000 https://spacestation14.com/about/contact/ You can contact us via: Discord Lemmy Forum Emailtelecommunications@spacestation14.com Downloads https://spacestation14.com/about/nightlies/Fri, 13 Apr 2018 00:00:00 +0000 https://spacestation14.com/about/nightlies/ System Requirements Every Platform: Minimum 64-bit CPU & OS Memory: 2GB Ram Graphics: OpenGL 3.3 or greater Storage: 512MB disk space Recommended 64-bit CPU & OS Memory: 4GB Ram Graphics: OpenGL 3.3 or greater Storage: 1GB disk space Windows: Windows 10 1607 or above VC++ 2015 Redistributable Linux: OpenAL Freetype macOS: Monterey (12) or greater FAQ Is this malware? No. If you’re paranoid you can download the code yourself and build from source though. About Space Station 14 https://spacestation14.com/about/about/Sun, 25 Jun 2017 00:00:00 +0000 https://spacestation14.com/about/about/ What is Space Station 14? Space Station 14 is inspired by the cult classic SS13 and tells the story of an ordinary shift on a space station gone wrong. Immerse yourself into your role, tinker with detailed systems, and survive the chaos in this round-based multiplayer role playing game.
Your custom character can spawn as one of dozens of crew and enemy jobs, ranging from engineer to captain, or even a traitor, each with its own unique gear.
\ No newline at end of file
diff --git a/about/nightlies/index.html b/about/nightlies/index.html
index 0d25e5c..b164242 100644
--- a/about/nightlies/index.html
+++ b/about/nightlies/index.html
@@ -1,8 +1,10 @@
-Downloads - SS14
System requirements
+
Downloads - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
System Requirements Minimum 64-bit CPU & OS Memory: 2GB Ram Graphics: OpenGL 3.3 or greater Storage: 512MB disk space Recommended 64-bit CPU & OS Memory: 4GB Ram Graphics: OpenGL 3.3 or greater Storage: 1GB disk space Windows: Linux: macOS: FAQ Is this malware? No. If you’re paranoid you can download the code yourself and build from source though.
What about 32-bit support? 32-bit (x86) is not supported and never will be, period.
What about ARM? ARM is currently supported for Linux servers but nowhere else.
What about Windows 7 and Windows 8? Windows 7 and 8 are not supported and never will be, period.
\ No newline at end of file
diff --git a/about/page/1/index.html b/about/page/1/index.html
new file mode 100644
index 0000000..542084a
--- /dev/null
+++ b/about/page/1/index.html
@@ -0,0 +1,2 @@
+
https://spacestation14.com/about/
+
\ No newline at end of file
diff --git a/categories/index.html b/categories/index.html
new file mode 100644
index 0000000..9cf2b01
--- /dev/null
+++ b/categories/index.html
@@ -0,0 +1,5 @@
+
Categories - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
\ No newline at end of file
diff --git a/categories/index.xml b/categories/index.xml
new file mode 100644
index 0000000..c70e140
--- /dev/null
+++ b/categories/index.xml
@@ -0,0 +1 @@
+
Categories on Space Station 14 https://spacestation14.com/categories/Recent content in Categories on Space Station 14 Hugo -- gohugo.io en-us Sun, 31 Mar 2024 00:00:00 +0000 https://spacestation14.com/categories/update/Sun, 31 Mar 2024 00:00:00 +0000 https://spacestation14.com/categories/update/ Progress Report https://spacestation14.com/categories/progress-report/Mon, 06 Mar 2023 00:00:00 +0000 https://spacestation14.com/categories/progress-report/
\ No newline at end of file
diff --git a/categories/page/1/index.html b/categories/page/1/index.html
new file mode 100644
index 0000000..cd8d467
--- /dev/null
+++ b/categories/page/1/index.html
@@ -0,0 +1,2 @@
+
https://spacestation14.com/categories/
+
\ No newline at end of file
diff --git a/categories/progress-report/index.html b/categories/progress-report/index.html
new file mode 100644
index 0000000..859001c
--- /dev/null
+++ b/categories/progress-report/index.html
@@ -0,0 +1,5 @@
+
Progress Report - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Monday March 6, 2023 Remember when progress reports used to be released on time every month? Neither do we! PR39 covers November and December 2022.
Wednesday November 30, 2022 Oh yeah. We have a ton of huge changes like oldchat, machine upgrade improvements, playtime tracking, and more! We have some catching up to do, so this PR covers August through October 2022. As a consequence, we’ve gone insane skipped the Minor Changes.
Monday October 31, 2022 Better late than never, we’ll hopefully get back on track soon. (And if you’d like to help contribute, progress report writers are always welcome!)
Wednesday July 27, 2022 There’s so much new content that at least one Progress Report author has been driven mad! We’ve even surpassed /tg/station 13 by contributions per month.
Saturday June 25, 2022 Nuclear Operatives, magic, and more!
Wednesday May 25, 2022 Tons of improvements to the SS14 experience, and more!
Saturday April 30, 2022 There’s so many changes we couldn’t figure out how to cover them all!
Friday April 1, 2022 As promised in the last progress report, here’s the second half of our two-part special! This part covers February 2022.
Wednesday March 16, 2022 It’s been a minute since the last Progress Report, and there’s been so many changes that we had to break this one up into two parts! This part covers January 2022.
Monday January 17, 2022 Even with the winter holidays and a week-long feature freeze, December capped off a busy year for Space Station 14. In 2021, Space Station 14 had 2184 contributions, easily beating the 2020 contribution count of 1498.
\ No newline at end of file
diff --git a/categories/progress-report/index.xml b/categories/progress-report/index.xml
new file mode 100644
index 0000000..245d52b
--- /dev/null
+++ b/categories/progress-report/index.xml
@@ -0,0 +1,12 @@
+
Progress Report on Space Station 14 https://spacestation14.com/categories/progress-report/Recent content in Progress Report on Space Station 14 Hugo -- gohugo.io en-us Mon, 06 Mar 2023 00:00:00 +0000 Progress Report #39: Happy Holidelays https://spacestation14.com/post/23-03-06-progress-report-39/Mon, 06 Mar 2023 00:00:00 +0000 https://spacestation14.com/post/23-03-06-progress-report-39/ <p>Remember when progress reports used to be released on time every month? Neither do we! PR39 covers November and December 2022.</p> Progress Report #38: Oh Baby a Triple https://spacestation14.com/post/22-11-30-progress-report-38/Wed, 30 Nov 2022 00:00:00 +0000 https://spacestation14.com/post/22-11-30-progress-report-38/ <p>Oh yeah. We have a ton of huge changes like oldchat, machine upgrade improvements, playtime tracking, and more! We have some catching up to do, so this PR covers August through October 2022. As a consequence, we’ve <del>gone insane</del> skipped the Minor Changes.</p> Progress Report #37: Love, Geoff, and Robots https://spacestation14.com/post/22-10-31-progress-report-37/Mon, 31 Oct 2022 00:00:00 +0000 https://spacestation14.com/post/22-10-31-progress-report-37/ <p>Better late than never, we’ll hopefully get back on track soon. (And if you’d like to help contribute, progress report writers are always welcome!)</p> Progress Report #36: Too Much of a Good Thing https://spacestation14.com/post/22-07-27-progress-report-36/Wed, 27 Jul 2022 00:00:00 +0000 https://spacestation14.com/post/22-07-27-progress-report-36/ <p>There’s so much new content that at least one Progress Report author has been driven mad! We’ve even surpassed /tg/station 13 by contributions per month.</p> Progress Report #35: Going Nuclear https://spacestation14.com/post/22-06-25-progress-report-35/Sat, 25 Jun 2022 00:00:00 +0000 https://spacestation14.com/post/22-06-25-progress-report-35/ <p>Nuclear Operatives, magic, and more!</p> Progress Report #34: Manifest Destiny https://spacestation14.com/post/22-05-25-progress-report-34/Wed, 25 May 2022 00:00:00 +0000 https://spacestation14.com/post/22-05-25-progress-report-34/ <p>Tons of improvements to the SS14 experience, and more!</p> Progress Report #33: Delta Variant https://spacestation14.com/post/22-04-30-progress-report-33/Sat, 30 Apr 2022 00:00:00 +0000 https://spacestation14.com/post/22-04-30-progress-report-33/ <p>There’s so many changes we couldn’t figure out how to cover them all!</p> Progress Report #32: Geoff https://spacestation14.com/post/22-04-01-progress-report-32/Fri, 01 Apr 2022 00:00:00 +0000 https://spacestation14.com/post/22-04-01-progress-report-32/ <p>As promised in the last progress report, here’s the second half of our two-part special! This part covers February 2022.</p> Progress Report #31: Duck, Duck, Weh https://spacestation14.com/post/22-03-16-progress-report-31/Wed, 16 Mar 2022 00:00:00 +0000 https://spacestation14.com/post/22-03-16-progress-report-31/ <p>It’s been a minute since the last Progress Report, and there’s been so many changes that we had to break this one up into two parts! This part covers January 2022.</p> Progress Report #30: A Short Freeze for Winter https://spacestation14.com/post/22-01-11-progress-report-30/Mon, 17 Jan 2022 00:00:00 +0000 https://spacestation14.com/post/22-01-11-progress-report-30/ <p>Even with the winter holidays and a week-long feature freeze, December capped off a busy year for Space Station 14. In 2021, Space Station 14 had 2184 contributions, easily beating the 2020 contribution count of 1498.</p> Progress Report #29: A Lot To Unpack https://spacestation14.com/post/21-12-09-progress-report-29/Thu, 09 Dec 2021 00:00:00 +0000 https://spacestation14.com/post/21-12-09-progress-report-29/ <p>Space Station 14 underwent so many changes in November that we had to split them off into a separate progress report. From November 4th to December 4th, the Space Station 14 code base had 357 contributions made - easily beating the two month period covered by Progress Report 28.</p> Progress Report #28: Atmosia Rising https://spacestation14.com/post/21-11-24-progress-report-28/Wed, 24 Nov 2021 00:00:00 +0000 https://spacestation14.com/post/21-11-24-progress-report-28/ <p>The last couple of months have been a huge step forward for Space Station 14, with a total of 315 contributions made to the SS14 codebase between September 29th and November 3rd, and nearly 700 commits to SS14 and the RobustToolbox engine.</p> Progress Report #27: Transported to the Chess Dimension https://spacestation14.com/post/21-10-01-progress-report-27/Wed, 29 Sep 2021 00:00:00 +0000 https://spacestation14.com/post/21-10-01-progress-report-27/ Website Upgrade As you may have noticed, our official website has gotten a major facelift thanks to PJB. We also commissioned some nice new background art from AsPev as a replacement for our old one which was a little crusty. You can download a full resolution of it here.
+Updated Playtest Schedule We’re moving playtests to a consistent schedule due to their popularity and developers wanting more feedback from the community on the state of the game. Progress Report #26: Lītigium In Forīs https://spacestation14.com/post/21-05-07-progress-report-26/Fri, 07 May 2021 00:00:00 +0000 https://spacestation14.com/post/21-05-07-progress-report-26/ 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. Progress Report #25: Blowing Off Steam https://spacestation14.com/post/21-02-12-progress-report-25/Sun, 07 Feb 2021 00:00:00 +0000 https://spacestation14.com/post/21-02-12-progress-report-25/ Playtest We’re proud to announce that Space Station 14 is now available through the new Steam Playtest feature. Originally we were planning to do a full release through Early Access, but we felt that a more limited release was a better match for the current state of SS14 development.
+To gain access, simply visit the SS14 store page and click Request Access. You’ll be added to the pool of people who are waiting, which we randomly draw from when we feel we could use more players. Progress Report #24: Atmos Sim Remake Now Simulates Atmos https://spacestation14.com/post/20-10-16-progress-report-24/Fri, 16 Oct 2020 00:00:00 +0000 https://spacestation14.com/post/20-10-16-progress-report-24/ Barebones rounds! Throughout the years, we’ve put a lot of work into developing the engine and framework necessary for Space Station 14 to have playable content. Last year, we transitioned to developing player-facing features and gameplay in earnest, and we’ve made a lot of progress in that short timespan!
+SS14 now has playable, albeit barebones, rounds. As we add more features the number of complex interactions grows, and so does the need for testing the game with real players. Progress Report #23: We Didn't Want To Wait Until Atmos Was Done https://spacestation14.com/post/20-07-22-progress-report-23/Wed, 22 Jul 2020 00:00:00 +0000 https://spacestation14.com/post/20-07-22-progress-report-23/ <p>Sadly atmos is not done yet. A lot of other stuff is though!</p> Progress Report #22: Full Steam Ahead https://spacestation14.com/post/20-06-07-progress-report-22/Sun, 07 Jun 2020 00:00:00 +0000 https://spacestation14.com/post/20-06-07-progress-report-22/ <p>It has been 3 months since the last post, we have a lot to tell you!</p> Progress Report #21: Colonial Marines, lighting, features https://spacestation14.com/post/20-02-24-progress-report-21/Mon, 24 Feb 2020 00:00:00 +0000 https://spacestation14.com/post/20-02-24-progress-report-21/ <p>We have big news for everyone who enjoys slaying meat sacks as a xenomorph, futilely hiding in a locker as a survivor, or being eaten alive as a marine…</p> Progress Report #20: 2020 Resolution Failed https://spacestation14.com/post/20-01-24-progress-report-20/Fri, 24 Jan 2020 00:00:00 +0000 https://spacestation14.com/post/20-01-24-progress-report-20/ <p>Writing progress reports is hard. Usually it isn’t even writing the progress report itself, it’s making the content we’ve added presentable.</p> Progress Report #19: 2x The Wait, 4x The Content https://spacestation14.com/post/19-10-22-progress-report-19/Tue, 22 Oct 2019 00:00:00 +0000 https://spacestation14.com/post/19-10-22-progress-report-19/ <p>Kept you waiting, huh?</p> Progress Report #18: Speech Bubbles & Slightly Better Launcher https://spacestation14.com/post/19-08-24-progress-report-18/Wed, 28 Aug 2019 00:00:00 +0000 https://spacestation14.com/post/19-08-24-progress-report-18/ <p>Writing these into sections is hard, did you know that?</p> Progress Report #17: Main UI Plans https://spacestation14.com/post/19-07-24-progress-report-17/Wed, 24 Jul 2019 00:00:00 +0000 https://spacestation14.com/post/19-07-24-progress-report-17/ <p>One of the biggest things that scare people away from SS13 is, of course, the terrible user interface.
+So, let’s make sure that isn’t the case for SS14!</p> Progress Report #16: Outline, Use, Kaboom https://spacestation14.com/post/19-06-07-progress-report-16/Sun, 07 Jul 2019 00:00:00 +0000 https://spacestation14.com/post/19-06-07-progress-report-16/ <p>As it turns out, <em>re-imagining</em> SS13 is a bit harder than simply <em>re-making</em> it. Not that that deters us.</p> Progress Report #15: Bye Godot https://spacestation14.com/post/19-05-12-progress-report-15/Sun, 12 May 2019 00:00:00 +0000 https://spacestation14.com/post/19-05-12-progress-report-15/ <p>Godot is finally dead, but it will always be there in our hearts.</p> Progress Report #14: Content & More Server https://spacestation14.com/post/19-04-22-progress-report-14/Mon, 22 Apr 2019 00:00:00 +0000 https://spacestation14.com/post/19-04-22-progress-report-14/ <p>This time on SS14: neat features and neat server features.</p> Progress Report #13: Permanent Public Server. https://spacestation14.com/post/19-04-02-progress-report-13/Tue, 02 Apr 2019 00:00:00 +0000 https://spacestation14.com/post/19-04-02-progress-report-13/ <p>Working on a massive project like this can be quite daunting. “Remake SS13” is quite a clear goal but far from concrete. Having intermediate goals to work towards is important. So for now, my goal at least is to get a permanent public server running.</p> Progress Report #12: Suddenly, Progress! https://spacestation14.com/post/19-03-23-progress-report-12/Sat, 23 Mar 2019 00:00:00 +0000 https://spacestation14.com/post/19-03-23-progress-report-12/ <p>Didn’t think you’d already see a new progress report now, did you?
+And especially not such a packed one!</p> Progress Report #11: UI & Animations https://spacestation14.com/post/19-03-17-progress-report-11/Sun, 17 Mar 2019 00:00:00 +0000 https://spacestation14.com/post/19-03-17-progress-report-11/ <p>The GUI system is much more complete now, so most interfaces work now.
+I also decided to actually code something NEW instead of purely catching up to Godot.</p> Progress Report #10: Nothing To Say For Ourselves https://spacestation14.com/post/19-02-20-progress-report-10/Sat, 23 Feb 2019 00:00:00 +0000 https://spacestation14.com/post/19-02-20-progress-report-10/ <p>Yeah I honestly have nothing to say for myself. You have the right to laugh.</p> Progress Report #9: The One Where We Implemented New Features https://spacestation14.com/post/18-12-14-progress-report-9/Fri, 14 Dec 2018 00:00:00 +0000 https://spacestation14.com/post/18-12-14-progress-report-9/ <p>Yeah, we really don’t have anything to say here, outside of “look at all these features!”</p> Progress Report #8: Writing Some Content https://spacestation14.com/post/18-09-19-progress-report-8/Wed, 19 Sep 2018 00:00:00 +0000 https://spacestation14.com/post/18-09-19-progress-report-8/ <p>It’s pretty nice to get to a point where we can worry purely about content without having to juggle the engine around all the time. I think we’re getting close to the point of reaching that now.</p> Progress Report #7: Visual https://spacestation14.com/post/18-06-24-progress-report-7/Sun, 24 Jun 2018 00:00:00 +0000 https://spacestation14.com/post/18-06-24-progress-report-7/ <p>Fancy graphics and less fancy menus.</p> Progress Report #6: Never say 'few' https://spacestation14.com/post/18-04-13-progress-report-6/Fri, 13 Apr 2018 00:00:00 +0000 https://spacestation14.com/post/18-04-13-progress-report-6/ <p>The wait is over.</p> Progress Report #5: Waiting for Godot https://spacestation14.com/post/18-02-26-progress-report-5/Mon, 26 Feb 2018 00:00:00 +0000 https://spacestation14.com/post/18-02-26-progress-report-5/ <p>So when was the last progress report made? November right?</p>
+<p>Oh jeez.</p> Progress Report #4: Robust Content Framework https://spacestation14.com/post/17-08-17-progress-report-4/Thu, 17 Aug 2017 00:00:00 +0000 https://spacestation14.com/post/17-08-17-progress-report-4/ <p>It’s been a couple weeks since the last progress report, and lots has happened since then. Refactors, setting up the content repo, and more!</p> Progress Report #3: Ending the pre-alpha https://spacestation14.com/post/17-07-25-progress-report-3/Tue, 25 Jul 2017 00:00:00 +0000 https://spacestation14.com/post/17-07-25-progress-report-3/ <p>So stuff’s been quiet for the past 14 days. I can give you an annoying excuse or I can just accept that weekly progress reports aren’t working <em>yet</em>. As such <strong>progress reports will no longer be scheduled and done whenever we feel there’s something big to report</strong>, like today!</p> Progress report #2: Refactor Hell https://spacestation14.com/post/17-07-10-progress-report-2/Mon, 10 Jul 2017 00:00:00 +0000 https://spacestation14.com/post/17-07-10-progress-report-2/ <p>The progress report took a bit to get here, because I uploaded #1 two days too late, and not a lot of substance for a report happened between then and when #2 should’ve happened. Not the case anymore though, got plenty to write about this time!</p> Progress Report #1: Revive https://spacestation14.com/post/17-06-26-progress-report-1/Mon, 26 Jun 2017 00:00:00 +0000 https://spacestation14.com/post/17-06-26-progress-report-1/ <p>You’re reading this on the new website for SS14! After <a href="https://i.imgur.com/Q3cUg29.gif">lots of hard work with CSS</a>, the website is ready to recieve progress reports and other news.</p>
\ No newline at end of file
diff --git a/categories/progress-report/page/1/index.html b/categories/progress-report/page/1/index.html
new file mode 100644
index 0000000..45821f3
--- /dev/null
+++ b/categories/progress-report/page/1/index.html
@@ -0,0 +1,2 @@
+
https://spacestation14.com/categories/progress-report/
+
\ No newline at end of file
diff --git a/categories/progress-report/page/2/index.html b/categories/progress-report/page/2/index.html
new file mode 100644
index 0000000..6fea79c
--- /dev/null
+++ b/categories/progress-report/page/2/index.html
@@ -0,0 +1,12 @@
+
Progress Report - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Thursday December 9, 2021 Space Station 14 underwent so many changes in November that we had to split them off into a separate progress report. From November 4th to December 4th, the Space Station 14 code base had 357 contributions made - easily beating the two month period covered by Progress Report 28.
Wednesday November 24, 2021 The last couple of months have been a huge step forward for Space Station 14, with a total of 315 contributions made to the SS14 codebase between September 29th and November 3rd, and nearly 700 commits to SS14 and the RobustToolbox engine.
Wednesday September 29, 2021 Website Upgrade As you may have noticed, our official website has gotten a major facelift thanks to PJB. We also commissioned some nice new background art from AsPev as a replacement for our old one which was a little crusty. You can download a full resolution of it here.
+Updated Playtest Schedule We’re moving playtests to a consistent schedule due to their popularity and developers wanting more feedback from the community on the state of the game.
Friday May 7, 2021 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.
Sunday February 7, 2021 Playtest We’re proud to announce that Space Station 14 is now available through the new Steam Playtest feature. Originally we were planning to do a full release through Early Access, but we felt that a more limited release was a better match for the current state of SS14 development.
+To gain access, simply visit the SS14 store page and click Request Access. You’ll be added to the pool of people who are waiting, which we randomly draw from when we feel we could use more players.
Friday October 16, 2020 Barebones rounds! Throughout the years, we’ve put a lot of work into developing the engine and framework necessary for Space Station 14 to have playable content. Last year, we transitioned to developing player-facing features and gameplay in earnest, and we’ve made a lot of progress in that short timespan!
+SS14 now has playable, albeit barebones, rounds. As we add more features the number of complex interactions grows, and so does the need for testing the game with real players.
Wednesday July 22, 2020 Sadly atmos is not done yet. A lot of other stuff is though!
Sunday June 7, 2020 It has been 3 months since the last post, we have a lot to tell you!
Monday February 24, 2020 We have big news for everyone who enjoys slaying meat sacks as a xenomorph, futilely hiding in a locker as a survivor, or being eaten alive as a marine…
Friday January 24, 2020 Writing progress reports is hard. Usually it isn’t even writing the progress report itself, it’s making the content we’ve added presentable.
\ No newline at end of file
diff --git a/categories/progress-report/page/3/index.html b/categories/progress-report/page/3/index.html
new file mode 100644
index 0000000..7c5da0a
--- /dev/null
+++ b/categories/progress-report/page/3/index.html
@@ -0,0 +1,8 @@
+
Progress Report - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Tuesday October 22, 2019 Kept you waiting, huh?
Wednesday August 28, 2019 Writing these into sections is hard, did you know that?
Wednesday July 24, 2019 One of the biggest things that scare people away from SS13 is, of course, the terrible user interface.
+So, let’s make sure that isn’t the case for SS14!
Sunday July 7, 2019 As it turns out, re-imagining SS13 is a bit harder than simply re-making it. Not that that deters us.
Sunday May 12, 2019 Godot is finally dead, but it will always be there in our hearts.
Monday April 22, 2019 This time on SS14: neat features and neat server features.
Tuesday April 2, 2019 Working on a massive project like this can be quite daunting. “Remake SS13” is quite a clear goal but far from concrete. Having intermediate goals to work towards is important. So for now, my goal at least is to get a permanent public server running.
Saturday March 23, 2019 Didn’t think you’d already see a new progress report now, did you?
+And especially not such a packed one!
Sunday March 17, 2019 The GUI system is much more complete now, so most interfaces work now.
+I also decided to actually code something NEW instead of purely catching up to Godot.
Saturday February 23, 2019 Yeah I honestly have nothing to say for myself. You have the right to laugh.
\ No newline at end of file
diff --git a/categories/progress-report/page/4/index.html b/categories/progress-report/page/4/index.html
new file mode 100644
index 0000000..3f9acd9
--- /dev/null
+++ b/categories/progress-report/page/4/index.html
@@ -0,0 +1,5 @@
+
Progress Report - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Friday December 14, 2018 Yeah, we really don’t have anything to say here, outside of “look at all these features!”
Wednesday September 19, 2018 It’s pretty nice to get to a point where we can worry purely about content without having to juggle the engine around all the time. I think we’re getting close to the point of reaching that now.
Sunday June 24, 2018 Fancy graphics and less fancy menus.
Friday April 13, 2018 The wait is over.
Monday February 26, 2018 So when was the last progress report made? November right?
Oh jeez.
Thursday August 17, 2017 It’s been a couple weeks since the last progress report, and lots has happened since then. Refactors, setting up the content repo, and more!
Tuesday July 25, 2017 So stuff’s been quiet for the past 14 days. I can give you an annoying excuse or I can just accept that weekly progress reports aren’t working yet . As such progress reports will no longer be scheduled and done whenever we feel there’s something big to report , like today!
Monday July 10, 2017 The progress report took a bit to get here, because I uploaded #1 two days too late, and not a lot of substance for a report happened between then and when #2 should’ve happened. Not the case anymore though, got plenty to write about this time!
Monday June 26, 2017 You’re reading this on the new website for SS14! After lots of hard work with CSS , the website is ready to recieve progress reports and other news.
\ No newline at end of file
diff --git a/categories/update/index.html b/categories/update/index.html
new file mode 100644
index 0000000..57a0fd6
--- /dev/null
+++ b/categories/update/index.html
@@ -0,0 +1,5 @@
+
Space Station 14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Monday March 6, 2023 Remember when progress reports used to be released on time every month? Neither do we! PR39 covers November and December 2022.
Wednesday November 30, 2022 Oh yeah. We have a ton of huge changes like oldchat, machine upgrade improvements, playtime tracking, and more! We have some catching up to do, so this PR covers August through October 2022. As a consequence, we’ve gone insane skipped the Minor Changes.
Monday October 31, 2022 Better late than never, we’ll hopefully get back on track soon. (And if you’d like to help contribute, progress report writers are always welcome!)
Wednesday July 27, 2022 There’s so much new content that at least one Progress Report author has been driven mad! We’ve even surpassed /tg/station 13 by contributions per month.
Saturday June 25, 2022 Nuclear Operatives, magic, and more!
Wednesday May 25, 2022 Tons of improvements to the SS14 experience, and more!
Saturday April 30, 2022 There’s so many changes we couldn’t figure out how to cover them all!
\ No newline at end of file
diff --git a/categories/update/index.xml b/categories/update/index.xml
new file mode 100644
index 0000000..41ca25b
--- /dev/null
+++ b/categories/update/index.xml
@@ -0,0 +1,2 @@
+
Space Station 14 https://spacestation14.com/categories/update/Recent content on Space Station 14 Hugo -- gohugo.io en-us Sun, 31 Mar 2024 00:00:00 +0000 Update Vlog - 67 - (Cleaning Grenades, Explosion Changes, Rubber Bullet Removal) https://spacestation14.com/updates/24-03-31-liltenhead-67/Sun, 31 Mar 2024 00:00:00 +0000 https://spacestation14.com/updates/24-03-31-liltenhead-67/ Update Vlog - 66 - (Throwing Knives, Lone Ops Buff, Hacking Tweaks) https://spacestation14.com/updates/24-03-24-liltenhead-66/Sun, 24 Mar 2024 00:00:00 +0000 https://spacestation14.com/updates/24-03-24-liltenhead-66/ Update Vlog - 65 - Additions (IED Changes, Pipebomb, Plant Biomass Reclaimer) https://spacestation14.com/updates/24-03-18-liltenhead-65/Mon, 18 Mar 2024 00:00:00 +0000 https://spacestation14.com/updates/24-03-18-liltenhead-65/ Progress Report #39: Happy Holidelays https://spacestation14.com/post/23-03-06-progress-report-39/Mon, 06 Mar 2023 00:00:00 +0000 https://spacestation14.com/post/23-03-06-progress-report-39/ <p>Remember when progress reports used to be released on time every month? Neither do we! PR39 covers November and December 2022.</p> Progress Report #38: Oh Baby a Triple https://spacestation14.com/post/22-11-30-progress-report-38/Wed, 30 Nov 2022 00:00:00 +0000 https://spacestation14.com/post/22-11-30-progress-report-38/ <p>Oh yeah. We have a ton of huge changes like oldchat, machine upgrade improvements, playtime tracking, and more! We have some catching up to do, so this PR covers August through October 2022. As a consequence, we’ve <del>gone insane</del> skipped the Minor Changes.</p> Progress Report #37: Love, Geoff, and Robots https://spacestation14.com/post/22-10-31-progress-report-37/Mon, 31 Oct 2022 00:00:00 +0000 https://spacestation14.com/post/22-10-31-progress-report-37/ <p>Better late than never, we’ll hopefully get back on track soon. (And if you’d like to help contribute, progress report writers are always welcome!)</p> Progress Report #36: Too Much of a Good Thing https://spacestation14.com/post/22-07-27-progress-report-36/Wed, 27 Jul 2022 00:00:00 +0000 https://spacestation14.com/post/22-07-27-progress-report-36/ <p>There’s so much new content that at least one Progress Report author has been driven mad! We’ve even surpassed /tg/station 13 by contributions per month.</p> Progress Report #35: Going Nuclear https://spacestation14.com/post/22-06-25-progress-report-35/Sat, 25 Jun 2022 00:00:00 +0000 https://spacestation14.com/post/22-06-25-progress-report-35/ <p>Nuclear Operatives, magic, and more!</p> Progress Report #34: Manifest Destiny https://spacestation14.com/post/22-05-25-progress-report-34/Wed, 25 May 2022 00:00:00 +0000 https://spacestation14.com/post/22-05-25-progress-report-34/ <p>Tons of improvements to the SS14 experience, and more!</p> Progress Report #33: Delta Variant https://spacestation14.com/post/22-04-30-progress-report-33/Sat, 30 Apr 2022 00:00:00 +0000 https://spacestation14.com/post/22-04-30-progress-report-33/ <p>There’s so many changes we couldn’t figure out how to cover them all!</p> Progress Report #32: Geoff https://spacestation14.com/post/22-04-01-progress-report-32/Fri, 01 Apr 2022 00:00:00 +0000 https://spacestation14.com/post/22-04-01-progress-report-32/ <p>As promised in the last progress report, here’s the second half of our two-part special! This part covers February 2022.</p> Progress Report #31: Duck, Duck, Weh https://spacestation14.com/post/22-03-16-progress-report-31/Wed, 16 Mar 2022 00:00:00 +0000 https://spacestation14.com/post/22-03-16-progress-report-31/ <p>It’s been a minute since the last Progress Report, and there’s been so many changes that we had to break this one up into two parts! This part covers January 2022.</p> Progress Report #30: A Short Freeze for Winter https://spacestation14.com/post/22-01-11-progress-report-30/Mon, 17 Jan 2022 00:00:00 +0000 https://spacestation14.com/post/22-01-11-progress-report-30/ <p>Even with the winter holidays and a week-long feature freeze, December capped off a busy year for Space Station 14. In 2021, Space Station 14 had 2184 contributions, easily beating the 2020 contribution count of 1498.</p> Progress Report #29: A Lot To Unpack https://spacestation14.com/post/21-12-09-progress-report-29/Thu, 09 Dec 2021 00:00:00 +0000 https://spacestation14.com/post/21-12-09-progress-report-29/ <p>Space Station 14 underwent so many changes in November that we had to split them off into a separate progress report. From November 4th to December 4th, the Space Station 14 code base had 357 contributions made - easily beating the two month period covered by Progress Report 28.</p> Progress Report #28: Atmosia Rising https://spacestation14.com/post/21-11-24-progress-report-28/Wed, 24 Nov 2021 00:00:00 +0000 https://spacestation14.com/post/21-11-24-progress-report-28/ <p>The last couple of months have been a huge step forward for Space Station 14, with a total of 315 contributions made to the SS14 codebase between September 29th and November 3rd, and nearly 700 commits to SS14 and the RobustToolbox engine.</p> Progress Report #27: Transported to the Chess Dimension https://spacestation14.com/post/21-10-01-progress-report-27/Wed, 29 Sep 2021 00:00:00 +0000 https://spacestation14.com/post/21-10-01-progress-report-27/ Website Upgrade As you may have noticed, our official website has gotten a major facelift thanks to PJB. We also commissioned some nice new background art from AsPev as a replacement for our old one which was a little crusty. You can download a full resolution of it here.
+Updated Playtest Schedule We’re moving playtests to a consistent schedule due to their popularity and developers wanting more feedback from the community on the state of the game.
\ No newline at end of file
diff --git a/categories/update/page/1/index.html b/categories/update/page/1/index.html
new file mode 100644
index 0000000..db4b8d1
--- /dev/null
+++ b/categories/update/page/1/index.html
@@ -0,0 +1,2 @@
+
https://spacestation14.com/categories/update/
+
\ No newline at end of file
diff --git a/categories/update/page/2/index.html b/categories/update/page/2/index.html
new file mode 100644
index 0000000..342fb5b
--- /dev/null
+++ b/categories/update/page/2/index.html
@@ -0,0 +1,6 @@
+
Space Station 14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Friday April 1, 2022 As promised in the last progress report, here’s the second half of our two-part special! This part covers February 2022.
Wednesday March 16, 2022 It’s been a minute since the last Progress Report, and there’s been so many changes that we had to break this one up into two parts! This part covers January 2022.
Monday January 17, 2022 Even with the winter holidays and a week-long feature freeze, December capped off a busy year for Space Station 14. In 2021, Space Station 14 had 2184 contributions, easily beating the 2020 contribution count of 1498.
Thursday December 9, 2021 Space Station 14 underwent so many changes in November that we had to split them off into a separate progress report. From November 4th to December 4th, the Space Station 14 code base had 357 contributions made - easily beating the two month period covered by Progress Report 28.
Wednesday November 24, 2021 The last couple of months have been a huge step forward for Space Station 14, with a total of 315 contributions made to the SS14 codebase between September 29th and November 3rd, and nearly 700 commits to SS14 and the RobustToolbox engine.
Wednesday September 29, 2021 Website Upgrade As you may have noticed, our official website has gotten a major facelift thanks to PJB. We also commissioned some nice new background art from AsPev as a replacement for our old one which was a little crusty. You can download a full resolution of it here.
+Updated Playtest Schedule We’re moving playtests to a consistent schedule due to their popularity and developers wanting more feedback from the community on the state of the game.
\ No newline at end of file
diff --git a/css/all.min.css b/css/all.min.css
index 4315e6e..287bde4 100644
--- a/css/all.min.css
+++ b/css/all.min.css
@@ -1,4 +1,4 @@
-/*!* Font Awesome Free 5.15.3 by @fontawesome - https://fontawesome.com
-* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)*/.fa,.fas,.far,.fal,.fad,.fab{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fas.fa-pull-left,.far.fa-pull-left,.fal.fa-pull-left,.fab.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fas.fa-pull-right,.far.fa-pull-right,.fal.fa-pull-right,.fab.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes fa-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scale(-1,1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";transform:scale(1,-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";transform:scale(-1,-1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-flip-both{filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-bacteria:before{content:"\e059"}.fa-bacterium:before{content:"\e05a"}.fa-bahai:before{content:"\f666"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-box-tissue:before{content:"\e05b"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buy-n-large:before{content:"\f8a6"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caravan:before{content:"\f8ff"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudflare:before{content:"\e07d"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-alt:before{content:"\f422"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-cotton-bureau:before{content:"\f89e"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dailymotion:before{content:"\e052"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-deezer:before{content:"\e077"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-disease:before{content:"\f7fa"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edge-legacy:before{content:"\e078"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-alt:before{content:"\f424"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-faucet:before{content:"\e005"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-firefox-browser:before{content:"\e007"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-pay:before{content:"\e079"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guilded:before{content:"\e07e"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-holding-water:before{content:"\f4c1"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-sparkles:before{content:"\e05d"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-hands-wash:before{content:"\e05e"}.fa-handshake:before{content:"\f2b5"}.fa-handshake-alt-slash:before{content:"\e05f"}.fa-handshake-slash:before{content:"\e060"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-hat-wizard:before{content:"\f6e8"}.fa-hdd:before{content:"\f0a0"}.fa-head-side-cough:before{content:"\e061"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-head-side-mask:before{content:"\e063"}.fa-head-side-virus:before{content:"\e064"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hive:before{content:"\e07f"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hospital-user:before{content:"\f80d"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-house-user:before{content:"\e065"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-ideal:before{content:"\e013"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-innosoft:before{content:"\e080"}.fa-instagram:before{content:"\f16d"}.fa-instagram-square:before{content:"\e055"}.fa-instalod:before{content:"\e081"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-house:before{content:"\e066"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lungs:before{content:"\f604"}.fa-lungs-virus:before{content:"\e067"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-mdb:before{content:"\f8ca"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microblog:before{content:"\e01a"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mixer:before{content:"\e056"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse:before{content:"\f8cc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-octopus-deploy:before{content:"\e082"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-orcid:before{content:"\f8d2"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-arrows:before{content:"\e068"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-perbyte:before{content:"\e083"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-square:before{content:"\e01e"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-plane-slash:before{content:"\e069"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pump-medical:before{content:"\e06a"}.fa-pump-soap:before{content:"\e06b"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-record-vinyl:before{content:"\f8d9"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-rust:before{content:"\e07a"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-shield-virus:before{content:"\e06c"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopify:before{content:"\e057"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sink:before{content:"\e06d"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-soap:before{content:"\e06e"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-stopwatch-20:before{content:"\e06f"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-store-alt-slash:before{content:"\e070"}.fa-store-slash:before{content:"\e071"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swift:before{content:"\f8e1"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-tiktok:before{content:"\e07b"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-trailer:before{content:"\e041"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbraco:before{content:"\f8e8"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-uncharted:before{content:"\e084"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-unity:before{content:"\e049"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-unsplash:before{content:"\e07c"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-users-slash:before{content:"\e073"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-vest:before{content:"\e085"}.fa-vest-patches:before{content:"\e086"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-virus:before{content:"\e074"}.fa-virus-slash:before{content:"\e075"}.fa-viruses:before{content:"\e076"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-watchman-monitoring:before{content:"\e087"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wodu:before{content:"\e088"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}/*!* Font Awesome Free 5.15.3 by @fontawesome - https://fontawesome.com
-* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)*/@font-face{font-family:'font awesome 5 free';font-style:normal;font-weight:900;font-display:block;src:url(/fonts/fontawesome/fa-solid-900.eot);src:url(/fonts/fontawesome/fa-solid-900.eot?#iefix)format("embedded-opentype"),url(/fonts/fontawesome/fa-solid-900.woff2)format("woff2"),url(/fonts/fontawesome/fa-solid-900.woff)format("woff"),url(/fonts/fontawesome/fa-solid-900.ttf)format("truetype"),url(/fonts/fontawesome/fa-solid-900.svg#fontawesome)format("svg")}.fa,.fas{font-family:'font awesome 5 free';font-weight:900}/*!* Font Awesome Free 5.15.3 by @fontawesome - https://fontawesome.com
-* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)*/@font-face{font-family:'font awesome 5 brands';font-style:normal;font-weight:400;font-display:block;src:url(/fonts/fontawesome/fa-brands-400.eot);src:url(/fonts/fontawesome/fa-brands-400.eot?#iefix)format("embedded-opentype"),url(/fonts/fontawesome/fa-brands-400.woff2)format("woff2"),url(/fonts/fontawesome/fa-brands-400.woff)format("woff"),url(/fonts/fontawesome/fa-brands-400.ttf)format("truetype"),url(/fonts/fontawesome/fa-brands-400.svg#fontawesome)format("svg")}.fab{font-family:'font awesome 5 brands';font-weight:400}.angle-rect{--angle-rect-clip-size:16px;-webkit-clip-path:polygon(0 0,calc(100% - var(--angle-rect-clip-size)) 0,100% var(--angle-rect-clip-size),100% 100%,var(--angle-rect-clip-size) 100%,0 calc(100% - var(--angle-rect-clip-size)));clip-path:polygon(0 0,calc(100% - var(--angle-rect-clip-size)) 0,100% var(--angle-rect-clip-size),100% 100%,var(--angle-rect-clip-size) 100%,0 calc(100% - var(--angle-rect-clip-size)))}.angle-rect.open-tr{-webkit-clip-path:polygon(0 0,100% 0,100% 100%,var(--angle-rect-clip-size) 100%,0 calc(100% - var(--angle-rect-clip-size)));clip-path:polygon(0 0,100% 0,100% 100%,var(--angle-rect-clip-size) 100%,0 calc(100% - var(--angle-rect-clip-size)))}.angle-rect.open-bl{-webkit-clip-path:polygon(0 0,calc(100% - var(--angle-rect-clip-size)) 0,100% var(--angle-rect-clip-size),100% 100%,0 100%);clip-path:polygon(0 0,calc(100% - var(--angle-rect-clip-size)) 0,100% var(--angle-rect-clip-size),100% 100%,0 100%)}.angle-rect.open-tr.open-bl{-webkit-clip-path:polygon(0 0,100% 0,100% 100%,0 100%);clip-path:polygon(0 0,100% 0,100% 100%,0 100%)}@media screen and (max-width:577px){.angle-rect.optional{-webkit-clip-path:none;clip-path:none}}.page-item:first-child .page-link{-webkit-clip-path:polygon(0 0,100% 0,100% 100%,8px 100%,0 calc(100% - 8px));clip-path:polygon(0 0,100% 0,100% 100%,8px 100%,0 calc(100% - 8px))}.page-item:last-child .page-link{-webkit-clip-path:polygon(0 0,calc(100% - 8px) 0,100% 8px,100% 100%,0 100%);clip-path:polygon(0 0,calc(100% - 8px) 0,100% 8px,100% 100%,0 100%)}.page-item{margin-left:3px;margin-right:3px}ul.pagination{margin-bottom:0}.fancybutton{color:#fff;text-decoration:none;display:inline-block;padding:10px 20px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;--button-color:#464966;text-align:center;overflow:hidden;background-color:var(--button-color);transition:background-color .05s;-webkit-clip-path:polygon(0 0,calc(100% - 12px) 0,100% 12px,100% 100%,12px 100%,0 calc(100% - 12px));clip-path:polygon(0 0,calc(100% - 12px) 0,100% 12px,100% 100%,12px 100%,0 calc(100% - 12px))}.fancybutton:hover{--button-color:#575B7F;text-decoration:none;color:#fff}.fancybutton:active{--button-color:#3D6845}:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-font-sans-serif:system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--bs-font-monospace:SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0))}*,*::before,*::after{box-sizing:border-box}@media(prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-font-sans-serif);font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1,.h1{font-size:calc(1.375rem + 1.5vw)}@media(min-width:1200px){h1,.h1{font-size:2.5rem}}h2,.h2{font-size:calc(1.325rem + .9vw)}@media(min-width:1200px){h2,.h2{font-size:2rem}}h3,.h3{font-size:calc(1.3rem + .6vw)}@media(min-width:1200px){h3,.h3{font-size:1.75rem}}h4,.h4{font-size:calc(1.275rem + .3vw)}@media(min-width:1200px){h4,.h4{font-size:1.5rem}}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-bs-original-title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small,.small{font-size:.875em}mark,.mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--bs-font-monospace);font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media(min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::-webkit-file-upload-button{font:inherit}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media(min-width:1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media(min-width:1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media(min-width:1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media(min-width:1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media(min-width:1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media(min-width:1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:#6c757d}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{width:100%;padding-right:var(--bs-gutter-x,.75rem);padding-left:var(--bs-gutter-x,.75rem);margin-right:auto;margin-left:auto}@media(min-width:576px){.container-sm,.container{max-width:540px}}@media(min-width:768px){.container-md,.container-sm,.container{max-width:720px}}@media(min-width:992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media(min-width:1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media(min-width:1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(var(--bs-gutter-y) * -1);margin-right:calc(var(--bs-gutter-x) * -.5);margin-left:calc(var(--bs-gutter-x) * -.5)}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{flex:1 0}.row-cols-auto>*{flex:none;width:auto}.row-cols-1>*{flex:none;width:100%}.row-cols-2>*{flex:none;width:50%}.row-cols-3>*{flex:none;width:33.33333333%}.row-cols-4>*{flex:none;width:25%}.row-cols-5>*{flex:none;width:20%}.row-cols-6>*{flex:none;width:16.66666667%}@media(min-width:576px){.col-sm{flex:1 0}.row-cols-sm-auto>*{flex:none;width:auto}.row-cols-sm-1>*{flex:none;width:100%}.row-cols-sm-2>*{flex:none;width:50%}.row-cols-sm-3>*{flex:none;width:33.33333333%}.row-cols-sm-4>*{flex:none;width:25%}.row-cols-sm-5>*{flex:none;width:20%}.row-cols-sm-6>*{flex:none;width:16.66666667%}}@media(min-width:768px){.col-md{flex:1 0}.row-cols-md-auto>*{flex:none;width:auto}.row-cols-md-1>*{flex:none;width:100%}.row-cols-md-2>*{flex:none;width:50%}.row-cols-md-3>*{flex:none;width:33.33333333%}.row-cols-md-4>*{flex:none;width:25%}.row-cols-md-5>*{flex:none;width:20%}.row-cols-md-6>*{flex:none;width:16.66666667%}}@media(min-width:992px){.col-lg{flex:1 0}.row-cols-lg-auto>*{flex:none;width:auto}.row-cols-lg-1>*{flex:none;width:100%}.row-cols-lg-2>*{flex:none;width:50%}.row-cols-lg-3>*{flex:none;width:33.33333333%}.row-cols-lg-4>*{flex:none;width:25%}.row-cols-lg-5>*{flex:none;width:20%}.row-cols-lg-6>*{flex:none;width:16.66666667%}}@media(min-width:1200px){.col-xl{flex:1 0}.row-cols-xl-auto>*{flex:none;width:auto}.row-cols-xl-1>*{flex:none;width:100%}.row-cols-xl-2>*{flex:none;width:50%}.row-cols-xl-3>*{flex:none;width:33.33333333%}.row-cols-xl-4>*{flex:none;width:25%}.row-cols-xl-5>*{flex:none;width:20%}.row-cols-xl-6>*{flex:none;width:16.66666667%}}@media(min-width:1400px){.col-xxl{flex:1 0}.row-cols-xxl-auto>*{flex:none;width:auto}.row-cols-xxl-1>*{flex:none;width:100%}.row-cols-xxl-2>*{flex:none;width:50%}.row-cols-xxl-3>*{flex:none;width:33.33333333%}.row-cols-xxl-4>*{flex:none;width:25%}.row-cols-xxl-5>*{flex:none;width:20%}.row-cols-xxl-6>*{flex:none;width:16.66666667%}}.col-auto{flex:none;width:auto}.col-1{flex:none;width:8.33333333%}.col-2{flex:none;width:16.66666667%}.col-3{flex:none;width:25%}.col-4{flex:none;width:33.33333333%}.col-5{flex:none;width:41.66666667%}.col-6{flex:none;width:50%}.col-7{flex:none;width:58.33333333%}.col-8{flex:none;width:66.66666667%}.col-9{flex:none;width:75%}.col-10{flex:none;width:83.33333333%}.col-11{flex:none;width:91.66666667%}.col-12{flex:none;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media(min-width:576px){.col-sm-auto{flex:none;width:auto}.col-sm-1{flex:none;width:8.33333333%}.col-sm-2{flex:none;width:16.66666667%}.col-sm-3{flex:none;width:25%}.col-sm-4{flex:none;width:33.33333333%}.col-sm-5{flex:none;width:41.66666667%}.col-sm-6{flex:none;width:50%}.col-sm-7{flex:none;width:58.33333333%}.col-sm-8{flex:none;width:66.66666667%}.col-sm-9{flex:none;width:75%}.col-sm-10{flex:none;width:83.33333333%}.col-sm-11{flex:none;width:91.66666667%}.col-sm-12{flex:none;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media(min-width:768px){.col-md-auto{flex:none;width:auto}.col-md-1{flex:none;width:8.33333333%}.col-md-2{flex:none;width:16.66666667%}.col-md-3{flex:none;width:25%}.col-md-4{flex:none;width:33.33333333%}.col-md-5{flex:none;width:41.66666667%}.col-md-6{flex:none;width:50%}.col-md-7{flex:none;width:58.33333333%}.col-md-8{flex:none;width:66.66666667%}.col-md-9{flex:none;width:75%}.col-md-10{flex:none;width:83.33333333%}.col-md-11{flex:none;width:91.66666667%}.col-md-12{flex:none;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media(min-width:992px){.col-lg-auto{flex:none;width:auto}.col-lg-1{flex:none;width:8.33333333%}.col-lg-2{flex:none;width:16.66666667%}.col-lg-3{flex:none;width:25%}.col-lg-4{flex:none;width:33.33333333%}.col-lg-5{flex:none;width:41.66666667%}.col-lg-6{flex:none;width:50%}.col-lg-7{flex:none;width:58.33333333%}.col-lg-8{flex:none;width:66.66666667%}.col-lg-9{flex:none;width:75%}.col-lg-10{flex:none;width:83.33333333%}.col-lg-11{flex:none;width:91.66666667%}.col-lg-12{flex:none;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media(min-width:1200px){.col-xl-auto{flex:none;width:auto}.col-xl-1{flex:none;width:8.33333333%}.col-xl-2{flex:none;width:16.66666667%}.col-xl-3{flex:none;width:25%}.col-xl-4{flex:none;width:33.33333333%}.col-xl-5{flex:none;width:41.66666667%}.col-xl-6{flex:none;width:50%}.col-xl-7{flex:none;width:58.33333333%}.col-xl-8{flex:none;width:66.66666667%}.col-xl-9{flex:none;width:75%}.col-xl-10{flex:none;width:83.33333333%}.col-xl-11{flex:none;width:91.66666667%}.col-xl-12{flex:none;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media(min-width:1400px){.col-xxl-auto{flex:none;width:auto}.col-xxl-1{flex:none;width:8.33333333%}.col-xxl-2{flex:none;width:16.66666667%}.col-xxl-3{flex:none;width:25%}.col-xxl-4{flex:none;width:33.33333333%}.col-xxl-5{flex:none;width:41.66666667%}.col-xxl-6{flex:none;width:50%}.col-xxl-7{flex:none;width:58.33333333%}.col-xxl-8{flex:none;width:66.66666667%}.col-xxl-9{flex:none;width:75%}.col-xxl-10{flex:none;width:83.33333333%}.col-xxl-11{flex:none;width:91.66666667%}.col-xxl-12{flex:none;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.btn{display:inline-block;font-weight:400;line-height:1.5;color:#212529;text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529}.btn-check:focus+.btn,.btn:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{pointer-events:none;opacity:.65}.btn-primary{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-primary:hover{color:#fff;background-color:#0b5ed7;border-color:#0a58ca}.btn-check:focus+.btn-primary,.btn-primary:focus{color:#fff;background-color:#0b5ed7;border-color:#0a58ca;box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-check:checked+.btn-primary,.btn-check:active+.btn-primary,.btn-primary:active,.btn-primary.active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0a58ca;border-color:#0a53be}.btn-check:checked+.btn-primary:focus,.btn-check:active+.btn-primary:focus,.btn-primary:active:focus,.btn-primary.active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-primary:disabled,.btn-primary.disabled{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5c636a;border-color:#565e64}.btn-check:focus+.btn-secondary,.btn-secondary:focus{color:#fff;background-color:#5c636a;border-color:#565e64;box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-check:checked+.btn-secondary,.btn-check:active+.btn-secondary,.btn-secondary:active,.btn-secondary.active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#565e64;border-color:#51585e}.btn-check:checked+.btn-secondary:focus,.btn-check:active+.btn-secondary:focus,.btn-secondary:active:focus,.btn-secondary.active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-secondary:disabled,.btn-secondary.disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-success{color:#fff;background-color:#198754;border-color:#198754}.btn-success:hover{color:#fff;background-color:#157347;border-color:#146c43}.btn-check:focus+.btn-success,.btn-success:focus{color:#fff;background-color:#157347;border-color:#146c43;box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-check:checked+.btn-success,.btn-check:active+.btn-success,.btn-success:active,.btn-success.active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#146c43;border-color:#13653f}.btn-check:checked+.btn-success:focus,.btn-check:active+.btn-success:focus,.btn-success:active:focus,.btn-success.active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-success:disabled,.btn-success.disabled{color:#fff;background-color:#198754;border-color:#198754}.btn-info{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-info:hover{color:#000;background-color:#31d2f2;border-color:#25cff2}.btn-check:focus+.btn-info,.btn-info:focus{color:#000;background-color:#31d2f2;border-color:#25cff2;box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-check:checked+.btn-info,.btn-check:active+.btn-info,.btn-info:active,.btn-info.active,.show>.btn-info.dropdown-toggle{color:#000;background-color:#3dd5f3;border-color:#25cff2}.btn-check:checked+.btn-info:focus,.btn-check:active+.btn-info:focus,.btn-info:active:focus,.btn-info.active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-info:disabled,.btn-info.disabled{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-warning{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#000;background-color:#ffca2c;border-color:#ffc720}.btn-check:focus+.btn-warning,.btn-warning:focus{color:#000;background-color:#ffca2c;border-color:#ffc720;box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-check:checked+.btn-warning,.btn-check:active+.btn-warning,.btn-warning:active,.btn-warning.active,.show>.btn-warning.dropdown-toggle{color:#000;background-color:#ffcd39;border-color:#ffc720}.btn-check:checked+.btn-warning:focus,.btn-check:active+.btn-warning:focus,.btn-warning:active:focus,.btn-warning.active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-warning:disabled,.btn-warning.disabled{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#bb2d3b;border-color:#b02a37}.btn-check:focus+.btn-danger,.btn-danger:focus{color:#fff;background-color:#bb2d3b;border-color:#b02a37;box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-check:checked+.btn-danger,.btn-check:active+.btn-danger,.btn-danger:active,.btn-danger.active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#b02a37;border-color:#a52834}.btn-check:checked+.btn-danger:focus,.btn-check:active+.btn-danger:focus,.btn-danger:active:focus,.btn-danger.active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-danger:disabled,.btn-danger.disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-light{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:focus+.btn-light,.btn-light:focus{color:#000;background-color:#f9fafb;border-color:#f9fafb;box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-check:checked+.btn-light,.btn-check:active+.btn-light,.btn-light:active,.btn-light.active,.show>.btn-light.dropdown-toggle{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:checked+.btn-light:focus,.btn-check:active+.btn-light:focus,.btn-light:active:focus,.btn-light.active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-light:disabled,.btn-light.disabled{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-dark{color:#fff;background-color:#212529;border-color:#212529}.btn-dark:hover{color:#fff;background-color:#1c1f23;border-color:#1a1e21}.btn-check:focus+.btn-dark,.btn-dark:focus{color:#fff;background-color:#1c1f23;border-color:#1a1e21;box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-check:checked+.btn-dark,.btn-check:active+.btn-dark,.btn-dark:active,.btn-dark.active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1a1e21;border-color:#191c1f}.btn-check:checked+.btn-dark:focus,.btn-check:active+.btn-dark:focus,.btn-dark:active:focus,.btn-dark.active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-dark:disabled,.btn-dark.disabled{color:#fff;background-color:#212529;border-color:#212529}.btn-outline-primary{color:#0d6efd;border-color:#0d6efd}.btn-outline-primary:hover{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:focus+.btn-outline-primary,.btn-outline-primary:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-check:checked+.btn-outline-primary,.btn-check:active+.btn-outline-primary,.btn-outline-primary:active,.btn-outline-primary.active,.btn-outline-primary.dropdown-toggle.show{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:checked+.btn-outline-primary:focus,.btn-check:active+.btn-outline-primary:focus,.btn-outline-primary:active:focus,.btn-outline-primary.active:focus,.btn-outline-primary.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-outline-primary:disabled,.btn-outline-primary.disabled{color:#0d6efd;background-color:transparent}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:focus+.btn-outline-secondary,.btn-outline-secondary:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-check:checked+.btn-outline-secondary,.btn-check:active+.btn-outline-secondary,.btn-outline-secondary:active,.btn-outline-secondary.active,.btn-outline-secondary.dropdown-toggle.show{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:checked+.btn-outline-secondary:focus,.btn-check:active+.btn-outline-secondary:focus,.btn-outline-secondary:active:focus,.btn-outline-secondary.active:focus,.btn-outline-secondary.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-outline-secondary:disabled,.btn-outline-secondary.disabled{color:#6c757d;background-color:transparent}.btn-outline-success{color:#198754;border-color:#198754}.btn-outline-success:hover{color:#fff;background-color:#198754;border-color:#198754}.btn-check:focus+.btn-outline-success,.btn-outline-success:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-check:checked+.btn-outline-success,.btn-check:active+.btn-outline-success,.btn-outline-success:active,.btn-outline-success.active,.btn-outline-success.dropdown-toggle.show{color:#fff;background-color:#198754;border-color:#198754}.btn-check:checked+.btn-outline-success:focus,.btn-check:active+.btn-outline-success:focus,.btn-outline-success:active:focus,.btn-outline-success.active:focus,.btn-outline-success.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-outline-success:disabled,.btn-outline-success.disabled{color:#198754;background-color:transparent}.btn-outline-info{color:#0dcaf0;border-color:#0dcaf0}.btn-outline-info:hover{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:focus+.btn-outline-info,.btn-outline-info:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-check:checked+.btn-outline-info,.btn-check:active+.btn-outline-info,.btn-outline-info:active,.btn-outline-info.active,.btn-outline-info.dropdown-toggle.show{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:checked+.btn-outline-info:focus,.btn-check:active+.btn-outline-info:focus,.btn-outline-info:active:focus,.btn-outline-info.active:focus,.btn-outline-info.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-outline-info:disabled,.btn-outline-info.disabled{color:#0dcaf0;background-color:transparent}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:focus+.btn-outline-warning,.btn-outline-warning:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-check:checked+.btn-outline-warning,.btn-check:active+.btn-outline-warning,.btn-outline-warning:active,.btn-outline-warning.active,.btn-outline-warning.dropdown-toggle.show{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:checked+.btn-outline-warning:focus,.btn-check:active+.btn-outline-warning:focus,.btn-outline-warning:active:focus,.btn-outline-warning.active:focus,.btn-outline-warning.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-outline-warning:disabled,.btn-outline-warning.disabled{color:#ffc107;background-color:transparent}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:focus+.btn-outline-danger,.btn-outline-danger:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-check:checked+.btn-outline-danger,.btn-check:active+.btn-outline-danger,.btn-outline-danger:active,.btn-outline-danger.active,.btn-outline-danger.dropdown-toggle.show{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:checked+.btn-outline-danger:focus,.btn-check:active+.btn-outline-danger:focus,.btn-outline-danger:active:focus,.btn-outline-danger.active:focus,.btn-outline-danger.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-outline-danger:disabled,.btn-outline-danger.disabled{color:#dc3545;background-color:transparent}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:focus+.btn-outline-light,.btn-outline-light:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-check:checked+.btn-outline-light,.btn-check:active+.btn-outline-light,.btn-outline-light:active,.btn-outline-light.active,.btn-outline-light.dropdown-toggle.show{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:checked+.btn-outline-light:focus,.btn-check:active+.btn-outline-light:focus,.btn-outline-light:active:focus,.btn-outline-light.active:focus,.btn-outline-light.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-outline-light:disabled,.btn-outline-light.disabled{color:#f8f9fa;background-color:transparent}.btn-outline-dark{color:#212529;border-color:#212529}.btn-outline-dark:hover{color:#fff;background-color:#212529;border-color:#212529}.btn-check:focus+.btn-outline-dark,.btn-outline-dark:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-check:checked+.btn-outline-dark,.btn-check:active+.btn-outline-dark,.btn-outline-dark:active,.btn-outline-dark.active,.btn-outline-dark.dropdown-toggle.show{color:#fff;background-color:#212529;border-color:#212529}.btn-check:checked+.btn-outline-dark:focus,.btn-check:active+.btn-outline-dark:focus,.btn-outline-dark:active:focus,.btn-outline-dark.active:focus,.btn-outline-dark.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-outline-dark:disabled,.btn-outline-dark.disabled{color:#212529;background-color:transparent}.btn-link{font-weight:400;color:#0d6efd;text-decoration:underline}.btn-link:hover{color:#0a58ca}.btn-link:disabled,.btn-link.disabled{color:#6c757d}.btn-lg{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.btn-sm{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.fade{transition:opacity .15s linear}@media(prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media(prefers-reduced-motion:reduce){.collapsing{transition:none}}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem;color:#0d6efd;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media(prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:hover,.nav-link:focus{color:#0a58ca}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-link{margin-bottom:-1px;background:0 0;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{border-color:#e9ecef #e9ecef #dee2e6;isolation:isolate}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{background:0 0;border:0;border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#0d6efd}.nav-fill>.nav-link,.nav-fill .nav-item{flex:auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding-top:.5rem;padding-bottom:.5rem}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;text-decoration:none;white-space:nowrap}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem;transition:box-shadow .15s ease-in-out}@media(prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 .25rem}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-repeat:no-repeat;background-position:50%;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height,75vh);overflow-y:auto}@media(min-width:576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media(min-width:768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media(min-width:992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media(min-width:1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}@media(min-width:1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:hover,.navbar-light .navbar-brand:focus{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.55)}.navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .nav-link:focus{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-nav .nav-link.active{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.55);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.55)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:hover,.navbar-light .navbar-text a:focus{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:hover,.navbar-dark .navbar-brand:focus{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.55)}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .nav-link.active{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.55);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.55)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:hover,.navbar-dark .navbar-text a:focus{color:#fff}.pagination{display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;color:#fff;text-decoration:none;background-color:#464966;border:0 solid #dee2e6;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:#fff;background-color:#575b7f;border-color:#dee2e6}.page-link:focus{z-index:3;color:#0a58ca;background-color:#e9ecef;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.page-item:not(:first-child) .page-link{margin-left:-1px}.page-item.active .page-link{z-index:3;color:#fff;background-color:#3e6c45;border-color:#0d6efd}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;background-color:#30313c;border-color:#dee2e6}.page-link{padding:.375rem .75rem}.page-item .page-link{border-radius:0}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem}.pagination-lg .page-item .page-link{border-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem}.pagination-sm .page-item .page-link{border-radius:.2rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{transform:translate(-50%,-50%)!important}.translate-middle-x{transform:translateX(-50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:1px solid #dee2e6!important}.border-0{border:0!important}.border-top{border-top:1px solid #dee2e6!important}.border-top-0{border-top:0!important}.border-end{border-right:1px solid #dee2e6!important}.border-end-0{border-right:0!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-bottom-0{border-bottom:0!important}.border-start{border-left:1px solid #dee2e6!important}.border-start-0{border-left:0!important}.border-primary{border-color:#0d6efd!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#198754!important}.border-info{border-color:#0dcaf0!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#212529!important}.border-white{border-color:#fff!important}.border-1{border-width:1px!important}.border-2{border-width:2px!important}.border-3{border-width:3px!important}.border-4{border-width:4px!important}.border-5{border-width:5px!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-light{font-weight:300!important}.fw-lighter{font-weight:lighter!important}.fw-normal{font-weight:400!important}.fw-bold{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-primary{color:#0d6efd!important}.text-secondary{color:#6c757d!important}.text-success{color:#198754!important}.text-info{color:#0dcaf0!important}.text-warning{color:#ffc107!important}.text-danger{color:#dc3545!important}.text-light{color:#f8f9fa!important}.text-dark{color:#212529!important}.text-white{color:#fff!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-reset{color:inherit!important}.bg-primary{background-color:#0d6efd!important}.bg-secondary{background-color:#6c757d!important}.bg-success{background-color:#198754!important}.bg-info{background-color:#0dcaf0!important}.bg-warning{background-color:#ffc107!important}.bg-danger{background-color:#dc3545!important}.bg-light{background-color:#f8f9fa!important}.bg-dark{background-color:#212529!important}.bg-body{background-color:#fff!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:.25rem!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:.2rem!important}.rounded-2{border-radius:.25rem!important}.rounded-3{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-end{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-start{border-bottom-left-radius:.25rem!important;border-top-left-radius:.25rem!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media(min-width:576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media(min-width:768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media(min-width:992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media(min-width:1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media(min-width:1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}@media(min-width:1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}}.highlight{padding-left:30px;border:2px solid rgba(0,0,0,.8);background-color:rgba(0,0,0,.5);font-size:15px}code{font-family:fira code,source code pro,monospace;font-weight:500}.highlight{--comment:#608b4e;--string:#a31515;--keyword:#569cd6;--method:#dcdcaa;--classname:#4ec9b0;--number:#b5cea8}.highlight .hll{background-color:#ffc}.highlight .c{color:var(--comment)}.highlight .err{border:1px solid red}.highlight .k{color:var(--keyword)}.highlight .ch{color:var(--comment)}.highlight .cm{color:var(--comment)}.highlight .cp{color:var(--keyword)}.highlight .cpf{color:var(--comment)}.highlight .c1{color:var(--comment)}.highlight .cs{color:var(--comment)}.highlight .ge{font-style:italic}.highlight .gh{font-weight:700}.highlight .gp{font-weight:700}.highlight .gs{font-weight:700}.highlight .gu{font-weight:700}.highlight .kc{color:var(--keyword)}.highlight .kd{color:var(--keyword)}.highlight .kn{color:var(--keyword)}.highlight .kp{color:var(--keyword)}.highlight .kr{color:var(--keyword)}.highlight .kt{color:var(--keyword)}.highlight .s{color:var(--string)}.highlight .m{color:var(--number)}.highlight .nc{color:var(--classname)}.highlight .nn{color:var(--classname)}.highlight .ow{color:#66f}.highlight .sa{color:var(--string)}.highlight .sb{color:var(--string)}.highlight .sc{color:var(--string)}.highlight .dl{color:var(--string)}.highlight .sd{color:var(--string)}.highlight .s2{color:var(--string)}.highlight .se{color:var(--string)}.highlight .sh{color:var(--string)}.highlight .si{color:var(--string)}.highlight .sx{color:var(--string)}.highlight .sr{color:var(--string)}.highlight .s1{color:var(--string)}.highlight .ss{color:var(--string)}.highlight .nf{color:var(--method)}.download-image-container{flex-flow:wrap;display:flex;justify-content:center;margin:0}.download-image{display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;width:150px;margin:0 50px;padding:10px 0 30px}.download-image img{width:150px;height:150px}.download-name{margin-top:30px}.download-link{display:flex;margin:20px 0}#download-sublinks{display:flex;justify-content:center}#download-sublinks>*{flex-basis:200px;text-align:center}#footer-wrap{margin-top:auto}.bottom-links{background-image:url(/images/main/stripeback.svg);line-height:200%;display:flex;justify-content:center}.bottom-links li{margin:0}.bottom-links,.bottom-links a{color:#9c9c9c;transition:color .1s ease-in-out}.bottom-links a:hover{color:#ddd}.bottom-links a:active{color:#fff}.bottom-links ul>li{display:inline-block;margin:0 8px}.bottom-links .github,.bottom-links .steam,.bottom-links .email{margin-bottom:6px}.bottom-links .discord,.bottom-links .rss,.bottom-links .patreon{margin-bottom:4px}.bottom-links .IRC{margin-bottom:9px}.bottom-links .reddit{padding-right:1px;margin-bottom:3px}.bottom-links .email{position:relative;left:5px}#upper-links-container,#media-img,#media-video{flex-flow:row wrap;display:flex;justify-content:space-evenly}#logo-tall{display:none;min-height:101px}#header{background-color:#212126;overflow:hidden;min-height:60px;margin-bottom:20px;position:relative;font-family:montserrat,sans-serif}.navbar{width:100%}.navlinks{margin-left:auto;align-self:center;font-weight:600}#subname{color:grey;transform:skew(-11.775deg,-3.925deg)translate(0,-15px);display:block}.navlink{font-size:20pt;color:#c8c8c8;text-decoration:none;margin-left:20px;text-align:center}@media screen and (max-width:550px){#logo-tall{display:block}#logo-long{display:none}}@media screen and (max-width:330px){#header{flex-wrap:wrap}}header>a{-webkit-text-decoration:dashed;text-decoration:dashed}.navlinks a:hover{text-decoration:none;color:lightslategray}.upper-links,#media-img img,#media-video video{flex-flow:row wrap;display:flex;justify-content:center}#upper-links-container a{font-size:20px;color:#d3d3d3;display:flex;align-items:center}#upper-links-container>div{margin:30px 0 20px}.upper-link-text{display:inline-block;margin-left:2px}#gallery-thumbs{display:flex;justify-content:space-around;flex-wrap:wrap}.gallery-thumb{margin:2px;cursor:pointer;max-width:100px;position:relative}.gallery-thumb.active{box-shadow:0 0 8px 2px #2d5ca3;transition:box-shadow .1s ease-out}.gallery-img{grid-column:a;grid-row:a;width:100%;height:auto;transition:opacity .25s linear;opacity:0;margin:auto;display:flex;justify-content:center}.gallery-img.active{opacity:1}.gallery-img img{box-shadow:0 0 20px 2px rgba(0,0,0,.5);position:static}#gallery-desc{padding-left:5px;padding-top:5px}#gallery-img-wrap{display:grid;width:100%;min-width:200px;position:relative;margin-bottom:10px;grid-template-columns:[a] 1fr;grid-template-rows:[a] 1fr}#center-logo-container{position:relative}#center-logo-background{content:"";background:url(/images/home/center-bg.jpg);background-size:cover;background-position:50%;width:100%;height:100%;position:absolute;z-index:-1;overflow:hidden;left:0}#center-logo-logo{padding:10px;align-self:center}#center-logo-desc{display:flex;flex-direction:column;text-shadow:#000 0 0 2px;padding:10px}#center-download-link{text-align:center;font-size:1.3rem;align-self:center;text-shadow:none;font-family:montserrat,sans-serif}#center-download-subtext{font-size:.85em;color:dimgray;text-align:center;text-shadow:#000 0 0 1px;font-weight:500}#logos-container>*{margin:15px 0}#news-column{flex:70%}#logos-column{flex:30%}#home-posts .summary{margin-bottom:1rem;flex-direction:row-reverse}body{background:#25252a;background:url(/images/main/background.jpg)#000;background-size:cover;background-attachment:fixed;color:#c8c8c8;font-family:roboto,sans-serif;height:100%;margin:0;font-variant-ligatures:normal;line-height:normal}html{height:100%}body{display:flex;flex-direction:column}@media(max-width:575.98px){body{background:url(/images/main/background-small.jpg)#000;background-size:cover;background-attachment:fixed}}.section-shadow{filter:drop-shadow(-1px 6px 3px rgba(20,0,0,.5))}.section-bg{background-color:#212126}.section-bg h1,.section-bg .h1{margin-top:-6px}@media screen and (max-width:576px){.section-shadow{filter:none}}#TableOfContents:before{content:"Contents";text-align:center;font-weight:700;font-size:20px;padding:10px;display:block}#TableOfContents{display:table-row;font-size:13px;padding:2em;width:30em}#TableOfContents ul{display:table;list-style-type:none;counter-reset:item;padding-left:1em;margin:0;padding:0}#TableOfContents li{display:table-row;counter-increment:item}#TableOfContents li:before{content:counters(item,".")". ";display:table-cell;text-align:right;padding-right:.6em}#TableOfContents li:after{content:'';display:block;padding-bottom:.2em}#TableOfContents li li:after{padding-bottom:0}#TableOfContents li li:before{content:counters(item,".")" "}#media-img,#media-video{margin:40px 0}#media-img div,#media-video div{flex-flow:row wrap;display:flex;margin:0 0 0 40px}.video-container video,#media-img img{width:335px;margin:10px}.video-container{display:flex;flex-wrap:wrap}.video-title{text-align:center;font-size:14px;position:relative;top:10px}#media-toc{display:flex;flex-flow:row wrap;justify-content:center;padding:210px 0}#media-toc div{margin:0 100px;padding:50px 0}.media-toc-item a{color:#f5f5f5;font-size:50px}@font-face{font-family:fira code;src:url(/fonts/fira_code/eot/FiraCode-Light.eot);src:url(/fonts/fira_code/eot/FiraCode-Light.eot)format("embedded-opentype"),url(/fonts/fira_code/woff2/FiraCode-Light.woff2)format("woff2"),url(/fonts/fira_code/woff/FiraCode-Light.woff)format("woff"),url(/fonts/fira_code/ttf/FiraCode-Light.ttf)format("truetype");font-weight:300;font-style:normal}@font-face{font-family:fira code;src:url(/fonts/fira_code/eot/FiraCode-Regular.eot);src:url(/fonts/fira_code/eot/FiraCode-Regular.eot)format("embedded-opentype"),url(/fonts/fira_code/woff2/FiraCode-Regular.woff2)format("woff2"),url(/fonts/fira_code/woff/FiraCode-Regular.woff)format("woff"),url(/fonts/fira_code/ttf/FiraCode-Regular.ttf)format("truetype");font-weight:400;font-style:normal}@font-face{font-family:fira code;src:url(/fonts/fira_code/eot/FiraCode-Medium.eot);src:url(/fonts/fira_code/eot/FiraCode-Medium.eot)format("embedded-opentype"),url(/fonts/fira_code/woff2/FiraCode-Medium.woff2)format("woff2"),url(/fonts/fira_code/woff/FiraCode-Medium.woff)format("woff"),url(/fonts/fira_code/ttf/FiraCode-Medium.ttf)format("truetype");font-weight:500;font-style:normal}@font-face{font-family:fira code;src:url(/fonts/fira_code/eot/FiraCode-Bold.eot);src:url(/fonts/fira_code/eot/FiraCode-Bold.eot)format("embedded-opentype"),url(/fonts/fira_code/woff2/FiraCode-Bold.woff2)format("woff2"),url(/fonts/fira_code/woff/FiraCode-Bold.woff)format("woff"),url(/fonts/fira_code/ttf/FiraCode-Bold.ttf)format("truetype");font-weight:700;font-style:normal}@font-face{font-family:montserrat;src:url(/fonts/montserrat/Montserrat-Bold.woff2)format("woff2"),url(/fonts/montserrat/Montserrat-Bold.woff)format("woff");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:roboto;src:url(/fonts/roboto/Roboto-Regular.woff2)format("woff2"),url(/fonts/roboto/Roboto-Regular.woff)format("woff");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:roboto;src:url(/fonts/roboto/Roboto-Medium.woff2)format("woff2"),url(/fonts/roboto/Roboto-Medium.woff)format("woff");font-weight:500;font-style:normal;font-display:swap}h1,.h1{font-family:montserrat,sans-serif}h3,.h3{font-size:1.5rem}small,.small{color:grey}hr{min-height:2px;margin:25px 0;height:1px;border:0;background:#525252}.articleheader{margin-bottom:0}.articlemeta{color:dimgrey;font-size:12pt;display:inline-block;padding-bottom:7px}a{color:#96aaff}a:link{text-decoration:none}div#recentpostswrapper h1,div#recentpostswrapper .h1{margin-bottom:0}li.disabled,li.disabled>a{color:dimgray}img,video{max-width:100%;max-height:100%}.contact{text-align:center}hr.nomargin{margin:0}.article-thumb{--angle-rect-clip-size:8px;max-height:100px;align-self:start}article#main-article img,article#main-article video{display:block;margin:0 auto;margin-bottom:1rem}
\ No newline at end of file
+body{--color-section-bg:#212126;--color-panel-bg:#16161a;--color-server-entry-bg:#1f1f29}/*!* Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com
+* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)*/.fa,.fas,.far,.fal,.fad,.fab{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fas.fa-pull-left,.far.fa-pull-left,.fal.fa-pull-left,.fab.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fas.fa-pull-right,.far.fa-pull-right,.fal.fa-pull-right,.fab.fa-pull-right{margin-left:.3em}.fa-spin{animation:fa-spin 2s infinite linear}.fa-pulse{animation:fa-spin 1s infinite steps(8)}@keyframes fa-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scale(-1,1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";transform:scale(1,-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";transform:scale(-1,-1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-flip-both{filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-bacteria:before{content:"\e059"}.fa-bacterium:before{content:"\e05a"}.fa-bahai:before{content:"\f666"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-box-tissue:before{content:"\e05b"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buy-n-large:before{content:"\f8a6"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caravan:before{content:"\f8ff"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudflare:before{content:"\e07d"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-alt:before{content:"\f422"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-cotton-bureau:before{content:"\f89e"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dailymotion:before{content:"\e052"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-deezer:before{content:"\e077"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-disease:before{content:"\f7fa"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edge-legacy:before{content:"\e078"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-alt:before{content:"\f424"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-faucet:before{content:"\e005"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-firefox-browser:before{content:"\e007"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-pay:before{content:"\e079"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guilded:before{content:"\e07e"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-holding-water:before{content:"\f4c1"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-sparkles:before{content:"\e05d"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-hands-wash:before{content:"\e05e"}.fa-handshake:before{content:"\f2b5"}.fa-handshake-alt-slash:before{content:"\e05f"}.fa-handshake-slash:before{content:"\e060"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-hat-wizard:before{content:"\f6e8"}.fa-hdd:before{content:"\f0a0"}.fa-head-side-cough:before{content:"\e061"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-head-side-mask:before{content:"\e063"}.fa-head-side-virus:before{content:"\e064"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hive:before{content:"\e07f"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hospital-user:before{content:"\f80d"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-house-user:before{content:"\e065"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-ideal:before{content:"\e013"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-innosoft:before{content:"\e080"}.fa-instagram:before{content:"\f16d"}.fa-instagram-square:before{content:"\e055"}.fa-instalod:before{content:"\e081"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-house:before{content:"\e066"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lungs:before{content:"\f604"}.fa-lungs-virus:before{content:"\e067"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-mdb:before{content:"\f8ca"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microblog:before{content:"\e01a"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mixer:before{content:"\e056"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse:before{content:"\f8cc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-octopus-deploy:before{content:"\e082"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-orcid:before{content:"\f8d2"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-arrows:before{content:"\e068"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-perbyte:before{content:"\e083"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-square:before{content:"\e01e"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-plane-slash:before{content:"\e069"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pump-medical:before{content:"\e06a"}.fa-pump-soap:before{content:"\e06b"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-record-vinyl:before{content:"\f8d9"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-rust:before{content:"\e07a"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-shield-virus:before{content:"\e06c"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopify:before{content:"\e057"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sink:before{content:"\e06d"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-soap:before{content:"\e06e"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-stopwatch-20:before{content:"\e06f"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-store-alt-slash:before{content:"\e070"}.fa-store-slash:before{content:"\e071"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swift:before{content:"\f8e1"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-tiktok:before{content:"\e07b"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-trailer:before{content:"\e041"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbraco:before{content:"\f8e8"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-uncharted:before{content:"\e084"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-unity:before{content:"\e049"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-unsplash:before{content:"\e07c"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-users-slash:before{content:"\e073"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-vest:before{content:"\e085"}.fa-vest-patches:before{content:"\e086"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-virus:before{content:"\e074"}.fa-virus-slash:before{content:"\e075"}.fa-viruses:before{content:"\e076"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-watchman-monitoring:before{content:"\e087"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wodu:before{content:"\e088"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}/*!* Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com
+* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)*/@font-face{font-family:'font awesome 5 free';font-style:normal;font-weight:900;font-display:block;src:url(/fonts/fontawesome/fa-solid-900.eot);src:url(/fonts/fontawesome/fa-solid-900.eot?#iefix)format("embedded-opentype"),url(/fonts/fontawesome/fa-solid-900.woff2)format("woff2"),url(/fonts/fontawesome/fa-solid-900.woff)format("woff"),url(/fonts/fontawesome/fa-solid-900.ttf)format("truetype"),url(/fonts/fontawesome/fa-solid-900.svg#fontawesome)format("svg")}.fa,.fas{font-family:'font awesome 5 free';font-weight:900}/*!* Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com
+* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)*/@font-face{font-family:'font awesome 5 brands';font-style:normal;font-weight:400;font-display:block;src:url(/fonts/fontawesome/fa-brands-400.eot);src:url(/fonts/fontawesome/fa-brands-400.eot?#iefix)format("embedded-opentype"),url(/fonts/fontawesome/fa-brands-400.woff2)format("woff2"),url(/fonts/fontawesome/fa-brands-400.woff)format("woff"),url(/fonts/fontawesome/fa-brands-400.ttf)format("truetype"),url(/fonts/fontawesome/fa-brands-400.svg#fontawesome)format("svg")}.fab{font-family:'font awesome 5 brands';font-weight:400}.angle-rect{--angle-rect-clip-size:16px;-webkit-clip-path:polygon(0 0,calc(100% - var(--angle-rect-clip-size)) 0,100% var(--angle-rect-clip-size),100% 100%,var(--angle-rect-clip-size) 100%,0 calc(100% - var(--angle-rect-clip-size)));clip-path:polygon(0 0,calc(100% - var(--angle-rect-clip-size)) 0,100% var(--angle-rect-clip-size),100% 100%,var(--angle-rect-clip-size) 100%,0 calc(100% - var(--angle-rect-clip-size)))}.angle-rect.open-tr{-webkit-clip-path:polygon(0 0,100% 0,100% 100%,var(--angle-rect-clip-size) 100%,0 calc(100% - var(--angle-rect-clip-size)));clip-path:polygon(0 0,100% 0,100% 100%,var(--angle-rect-clip-size) 100%,0 calc(100% - var(--angle-rect-clip-size)))}.angle-rect.open-bl{-webkit-clip-path:polygon(0 0,calc(100% - var(--angle-rect-clip-size)) 0,100% var(--angle-rect-clip-size),100% 100%,0 100%);clip-path:polygon(0 0,calc(100% - var(--angle-rect-clip-size)) 0,100% var(--angle-rect-clip-size),100% 100%,0 100%)}.angle-rect.open-tr.open-bl{-webkit-clip-path:polygon(0 0,100% 0,100% 100%,0 100%);clip-path:polygon(0 0,100% 0,100% 100%,0 100%)}@media screen and (max-width:577px){.angle-rect.optional{-webkit-clip-path:none;clip-path:none}}.page-item:first-child .page-link{-webkit-clip-path:polygon(0 0,100% 0,100% 100%,8px 100%,0 calc(100% - 8px));clip-path:polygon(0 0,100% 0,100% 100%,8px 100%,0 calc(100% - 8px))}.page-item:last-child .page-link{-webkit-clip-path:polygon(0 0,calc(100% - 8px) 0,100% 8px,100% 100%,0 100%);clip-path:polygon(0 0,calc(100% - 8px) 0,100% 8px,100% 100%,0 100%)}.page-item{margin-left:3px;margin-right:3px}ul.pagination{margin-bottom:0}.fancybutton{color:#fff;text-decoration:none;display:inline-block;padding:10px 20px;-webkit-user-select:none;-moz-user-select:none;user-select:none;--button-color:#464966;text-align:center;overflow:hidden;background-color:var(--button-color);transition:background-color .05s;-webkit-clip-path:polygon(0 0,calc(100% - 12px) 0,100% 12px,100% 100%,12px 100%,0 calc(100% - 12px));clip-path:polygon(0 0,calc(100% - 12px) 0,100% 12px,100% 100%,12px 100%,0 calc(100% - 12px))}.fancybutton:hover{--button-color:#575B7F;text-decoration:none;color:#fff}.fancybutton:active{--button-color:#3D6845}:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-font-sans-serif:system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--bs-font-monospace:SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0))}*,*::before,*::after{box-sizing:border-box}@media(prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-font-sans-serif);font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1,.h1{font-size:calc(1.375rem + 1.5vw)}@media(min-width:1200px){h1,.h1{font-size:2.5rem}}h2,.h2{font-size:calc(1.325rem + .9vw)}@media(min-width:1200px){h2,.h2{font-size:2rem}}h3,.h3{font-size:calc(1.3rem + .6vw)}@media(min-width:1200px){h3,.h3{font-size:1.75rem}}h4,.h4{font-size:calc(1.275rem + .3vw)}@media(min-width:1200px){h4,.h4{font-size:1.5rem}}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-bs-original-title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small,.small{font-size:.875em}mark,.mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--bs-font-monospace);font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media(min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media(min-width:1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media(min-width:1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media(min-width:1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media(min-width:1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media(min-width:1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media(min-width:1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:#6c757d}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{width:100%;padding-right:var(--bs-gutter-x,.75rem);padding-left:var(--bs-gutter-x,.75rem);margin-right:auto;margin-left:auto}@media(min-width:576px){.container-sm,.container{max-width:540px}}@media(min-width:768px){.container-md,.container-sm,.container{max-width:720px}}@media(min-width:992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media(min-width:1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media(min-width:1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(var(--bs-gutter-y) * -1);margin-right:calc(var(--bs-gutter-x) * -.5);margin-left:calc(var(--bs-gutter-x) * -.5)}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{flex:1 0}.row-cols-auto>*{flex:none;width:auto}.row-cols-1>*{flex:none;width:100%}.row-cols-2>*{flex:none;width:50%}.row-cols-3>*{flex:none;width:33.33333333%}.row-cols-4>*{flex:none;width:25%}.row-cols-5>*{flex:none;width:20%}.row-cols-6>*{flex:none;width:16.66666667%}@media(min-width:576px){.col-sm{flex:1 0}.row-cols-sm-auto>*{flex:none;width:auto}.row-cols-sm-1>*{flex:none;width:100%}.row-cols-sm-2>*{flex:none;width:50%}.row-cols-sm-3>*{flex:none;width:33.33333333%}.row-cols-sm-4>*{flex:none;width:25%}.row-cols-sm-5>*{flex:none;width:20%}.row-cols-sm-6>*{flex:none;width:16.66666667%}}@media(min-width:768px){.col-md{flex:1 0}.row-cols-md-auto>*{flex:none;width:auto}.row-cols-md-1>*{flex:none;width:100%}.row-cols-md-2>*{flex:none;width:50%}.row-cols-md-3>*{flex:none;width:33.33333333%}.row-cols-md-4>*{flex:none;width:25%}.row-cols-md-5>*{flex:none;width:20%}.row-cols-md-6>*{flex:none;width:16.66666667%}}@media(min-width:992px){.col-lg{flex:1 0}.row-cols-lg-auto>*{flex:none;width:auto}.row-cols-lg-1>*{flex:none;width:100%}.row-cols-lg-2>*{flex:none;width:50%}.row-cols-lg-3>*{flex:none;width:33.33333333%}.row-cols-lg-4>*{flex:none;width:25%}.row-cols-lg-5>*{flex:none;width:20%}.row-cols-lg-6>*{flex:none;width:16.66666667%}}@media(min-width:1200px){.col-xl{flex:1 0}.row-cols-xl-auto>*{flex:none;width:auto}.row-cols-xl-1>*{flex:none;width:100%}.row-cols-xl-2>*{flex:none;width:50%}.row-cols-xl-3>*{flex:none;width:33.33333333%}.row-cols-xl-4>*{flex:none;width:25%}.row-cols-xl-5>*{flex:none;width:20%}.row-cols-xl-6>*{flex:none;width:16.66666667%}}@media(min-width:1400px){.col-xxl{flex:1 0}.row-cols-xxl-auto>*{flex:none;width:auto}.row-cols-xxl-1>*{flex:none;width:100%}.row-cols-xxl-2>*{flex:none;width:50%}.row-cols-xxl-3>*{flex:none;width:33.33333333%}.row-cols-xxl-4>*{flex:none;width:25%}.row-cols-xxl-5>*{flex:none;width:20%}.row-cols-xxl-6>*{flex:none;width:16.66666667%}}.col-auto{flex:none;width:auto}.col-1{flex:none;width:8.33333333%}.col-2{flex:none;width:16.66666667%}.col-3{flex:none;width:25%}.col-4{flex:none;width:33.33333333%}.col-5{flex:none;width:41.66666667%}.col-6{flex:none;width:50%}.col-7{flex:none;width:58.33333333%}.col-8{flex:none;width:66.66666667%}.col-9{flex:none;width:75%}.col-10{flex:none;width:83.33333333%}.col-11{flex:none;width:91.66666667%}.col-12{flex:none;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media(min-width:576px){.col-sm-auto{flex:none;width:auto}.col-sm-1{flex:none;width:8.33333333%}.col-sm-2{flex:none;width:16.66666667%}.col-sm-3{flex:none;width:25%}.col-sm-4{flex:none;width:33.33333333%}.col-sm-5{flex:none;width:41.66666667%}.col-sm-6{flex:none;width:50%}.col-sm-7{flex:none;width:58.33333333%}.col-sm-8{flex:none;width:66.66666667%}.col-sm-9{flex:none;width:75%}.col-sm-10{flex:none;width:83.33333333%}.col-sm-11{flex:none;width:91.66666667%}.col-sm-12{flex:none;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media(min-width:768px){.col-md-auto{flex:none;width:auto}.col-md-1{flex:none;width:8.33333333%}.col-md-2{flex:none;width:16.66666667%}.col-md-3{flex:none;width:25%}.col-md-4{flex:none;width:33.33333333%}.col-md-5{flex:none;width:41.66666667%}.col-md-6{flex:none;width:50%}.col-md-7{flex:none;width:58.33333333%}.col-md-8{flex:none;width:66.66666667%}.col-md-9{flex:none;width:75%}.col-md-10{flex:none;width:83.33333333%}.col-md-11{flex:none;width:91.66666667%}.col-md-12{flex:none;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media(min-width:992px){.col-lg-auto{flex:none;width:auto}.col-lg-1{flex:none;width:8.33333333%}.col-lg-2{flex:none;width:16.66666667%}.col-lg-3{flex:none;width:25%}.col-lg-4{flex:none;width:33.33333333%}.col-lg-5{flex:none;width:41.66666667%}.col-lg-6{flex:none;width:50%}.col-lg-7{flex:none;width:58.33333333%}.col-lg-8{flex:none;width:66.66666667%}.col-lg-9{flex:none;width:75%}.col-lg-10{flex:none;width:83.33333333%}.col-lg-11{flex:none;width:91.66666667%}.col-lg-12{flex:none;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media(min-width:1200px){.col-xl-auto{flex:none;width:auto}.col-xl-1{flex:none;width:8.33333333%}.col-xl-2{flex:none;width:16.66666667%}.col-xl-3{flex:none;width:25%}.col-xl-4{flex:none;width:33.33333333%}.col-xl-5{flex:none;width:41.66666667%}.col-xl-6{flex:none;width:50%}.col-xl-7{flex:none;width:58.33333333%}.col-xl-8{flex:none;width:66.66666667%}.col-xl-9{flex:none;width:75%}.col-xl-10{flex:none;width:83.33333333%}.col-xl-11{flex:none;width:91.66666667%}.col-xl-12{flex:none;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media(min-width:1400px){.col-xxl-auto{flex:none;width:auto}.col-xxl-1{flex:none;width:8.33333333%}.col-xxl-2{flex:none;width:16.66666667%}.col-xxl-3{flex:none;width:25%}.col-xxl-4{flex:none;width:33.33333333%}.col-xxl-5{flex:none;width:41.66666667%}.col-xxl-6{flex:none;width:50%}.col-xxl-7{flex:none;width:58.33333333%}.col-xxl-8{flex:none;width:66.66666667%}.col-xxl-9{flex:none;width:75%}.col-xxl-10{flex:none;width:83.33333333%}.col-xxl-11{flex:none;width:91.66666667%}.col-xxl-12{flex:none;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.btn{display:inline-block;font-weight:400;line-height:1.5;color:#212529;text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529}.btn-check:focus+.btn,.btn:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{pointer-events:none;opacity:.65}.btn-primary{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-primary:hover{color:#fff;background-color:#0b5ed7;border-color:#0a58ca}.btn-check:focus+.btn-primary,.btn-primary:focus{color:#fff;background-color:#0b5ed7;border-color:#0a58ca;box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-check:checked+.btn-primary,.btn-check:active+.btn-primary,.btn-primary:active,.btn-primary.active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0a58ca;border-color:#0a53be}.btn-check:checked+.btn-primary:focus,.btn-check:active+.btn-primary:focus,.btn-primary:active:focus,.btn-primary.active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-primary:disabled,.btn-primary.disabled{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5c636a;border-color:#565e64}.btn-check:focus+.btn-secondary,.btn-secondary:focus{color:#fff;background-color:#5c636a;border-color:#565e64;box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-check:checked+.btn-secondary,.btn-check:active+.btn-secondary,.btn-secondary:active,.btn-secondary.active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#565e64;border-color:#51585e}.btn-check:checked+.btn-secondary:focus,.btn-check:active+.btn-secondary:focus,.btn-secondary:active:focus,.btn-secondary.active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-secondary:disabled,.btn-secondary.disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-success{color:#fff;background-color:#198754;border-color:#198754}.btn-success:hover{color:#fff;background-color:#157347;border-color:#146c43}.btn-check:focus+.btn-success,.btn-success:focus{color:#fff;background-color:#157347;border-color:#146c43;box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-check:checked+.btn-success,.btn-check:active+.btn-success,.btn-success:active,.btn-success.active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#146c43;border-color:#13653f}.btn-check:checked+.btn-success:focus,.btn-check:active+.btn-success:focus,.btn-success:active:focus,.btn-success.active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-success:disabled,.btn-success.disabled{color:#fff;background-color:#198754;border-color:#198754}.btn-info{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-info:hover{color:#000;background-color:#31d2f2;border-color:#25cff2}.btn-check:focus+.btn-info,.btn-info:focus{color:#000;background-color:#31d2f2;border-color:#25cff2;box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-check:checked+.btn-info,.btn-check:active+.btn-info,.btn-info:active,.btn-info.active,.show>.btn-info.dropdown-toggle{color:#000;background-color:#3dd5f3;border-color:#25cff2}.btn-check:checked+.btn-info:focus,.btn-check:active+.btn-info:focus,.btn-info:active:focus,.btn-info.active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-info:disabled,.btn-info.disabled{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-warning{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#000;background-color:#ffca2c;border-color:#ffc720}.btn-check:focus+.btn-warning,.btn-warning:focus{color:#000;background-color:#ffca2c;border-color:#ffc720;box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-check:checked+.btn-warning,.btn-check:active+.btn-warning,.btn-warning:active,.btn-warning.active,.show>.btn-warning.dropdown-toggle{color:#000;background-color:#ffcd39;border-color:#ffc720}.btn-check:checked+.btn-warning:focus,.btn-check:active+.btn-warning:focus,.btn-warning:active:focus,.btn-warning.active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-warning:disabled,.btn-warning.disabled{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#bb2d3b;border-color:#b02a37}.btn-check:focus+.btn-danger,.btn-danger:focus{color:#fff;background-color:#bb2d3b;border-color:#b02a37;box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-check:checked+.btn-danger,.btn-check:active+.btn-danger,.btn-danger:active,.btn-danger.active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#b02a37;border-color:#a52834}.btn-check:checked+.btn-danger:focus,.btn-check:active+.btn-danger:focus,.btn-danger:active:focus,.btn-danger.active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-danger:disabled,.btn-danger.disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-light{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:focus+.btn-light,.btn-light:focus{color:#000;background-color:#f9fafb;border-color:#f9fafb;box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-check:checked+.btn-light,.btn-check:active+.btn-light,.btn-light:active,.btn-light.active,.show>.btn-light.dropdown-toggle{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:checked+.btn-light:focus,.btn-check:active+.btn-light:focus,.btn-light:active:focus,.btn-light.active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-light:disabled,.btn-light.disabled{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-dark{color:#fff;background-color:#212529;border-color:#212529}.btn-dark:hover{color:#fff;background-color:#1c1f23;border-color:#1a1e21}.btn-check:focus+.btn-dark,.btn-dark:focus{color:#fff;background-color:#1c1f23;border-color:#1a1e21;box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-check:checked+.btn-dark,.btn-check:active+.btn-dark,.btn-dark:active,.btn-dark.active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1a1e21;border-color:#191c1f}.btn-check:checked+.btn-dark:focus,.btn-check:active+.btn-dark:focus,.btn-dark:active:focus,.btn-dark.active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-dark:disabled,.btn-dark.disabled{color:#fff;background-color:#212529;border-color:#212529}.btn-outline-primary{color:#0d6efd;border-color:#0d6efd}.btn-outline-primary:hover{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:focus+.btn-outline-primary,.btn-outline-primary:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-check:checked+.btn-outline-primary,.btn-check:active+.btn-outline-primary,.btn-outline-primary:active,.btn-outline-primary.active,.btn-outline-primary.dropdown-toggle.show{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:checked+.btn-outline-primary:focus,.btn-check:active+.btn-outline-primary:focus,.btn-outline-primary:active:focus,.btn-outline-primary.active:focus,.btn-outline-primary.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-outline-primary:disabled,.btn-outline-primary.disabled{color:#0d6efd;background-color:transparent}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:focus+.btn-outline-secondary,.btn-outline-secondary:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-check:checked+.btn-outline-secondary,.btn-check:active+.btn-outline-secondary,.btn-outline-secondary:active,.btn-outline-secondary.active,.btn-outline-secondary.dropdown-toggle.show{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:checked+.btn-outline-secondary:focus,.btn-check:active+.btn-outline-secondary:focus,.btn-outline-secondary:active:focus,.btn-outline-secondary.active:focus,.btn-outline-secondary.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-outline-secondary:disabled,.btn-outline-secondary.disabled{color:#6c757d;background-color:transparent}.btn-outline-success{color:#198754;border-color:#198754}.btn-outline-success:hover{color:#fff;background-color:#198754;border-color:#198754}.btn-check:focus+.btn-outline-success,.btn-outline-success:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-check:checked+.btn-outline-success,.btn-check:active+.btn-outline-success,.btn-outline-success:active,.btn-outline-success.active,.btn-outline-success.dropdown-toggle.show{color:#fff;background-color:#198754;border-color:#198754}.btn-check:checked+.btn-outline-success:focus,.btn-check:active+.btn-outline-success:focus,.btn-outline-success:active:focus,.btn-outline-success.active:focus,.btn-outline-success.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-outline-success:disabled,.btn-outline-success.disabled{color:#198754;background-color:transparent}.btn-outline-info{color:#0dcaf0;border-color:#0dcaf0}.btn-outline-info:hover{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:focus+.btn-outline-info,.btn-outline-info:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-check:checked+.btn-outline-info,.btn-check:active+.btn-outline-info,.btn-outline-info:active,.btn-outline-info.active,.btn-outline-info.dropdown-toggle.show{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:checked+.btn-outline-info:focus,.btn-check:active+.btn-outline-info:focus,.btn-outline-info:active:focus,.btn-outline-info.active:focus,.btn-outline-info.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-outline-info:disabled,.btn-outline-info.disabled{color:#0dcaf0;background-color:transparent}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:focus+.btn-outline-warning,.btn-outline-warning:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-check:checked+.btn-outline-warning,.btn-check:active+.btn-outline-warning,.btn-outline-warning:active,.btn-outline-warning.active,.btn-outline-warning.dropdown-toggle.show{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:checked+.btn-outline-warning:focus,.btn-check:active+.btn-outline-warning:focus,.btn-outline-warning:active:focus,.btn-outline-warning.active:focus,.btn-outline-warning.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-outline-warning:disabled,.btn-outline-warning.disabled{color:#ffc107;background-color:transparent}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:focus+.btn-outline-danger,.btn-outline-danger:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-check:checked+.btn-outline-danger,.btn-check:active+.btn-outline-danger,.btn-outline-danger:active,.btn-outline-danger.active,.btn-outline-danger.dropdown-toggle.show{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:checked+.btn-outline-danger:focus,.btn-check:active+.btn-outline-danger:focus,.btn-outline-danger:active:focus,.btn-outline-danger.active:focus,.btn-outline-danger.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-outline-danger:disabled,.btn-outline-danger.disabled{color:#dc3545;background-color:transparent}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:focus+.btn-outline-light,.btn-outline-light:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-check:checked+.btn-outline-light,.btn-check:active+.btn-outline-light,.btn-outline-light:active,.btn-outline-light.active,.btn-outline-light.dropdown-toggle.show{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:checked+.btn-outline-light:focus,.btn-check:active+.btn-outline-light:focus,.btn-outline-light:active:focus,.btn-outline-light.active:focus,.btn-outline-light.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-outline-light:disabled,.btn-outline-light.disabled{color:#f8f9fa;background-color:transparent}.btn-outline-dark{color:#212529;border-color:#212529}.btn-outline-dark:hover{color:#fff;background-color:#212529;border-color:#212529}.btn-check:focus+.btn-outline-dark,.btn-outline-dark:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-check:checked+.btn-outline-dark,.btn-check:active+.btn-outline-dark,.btn-outline-dark:active,.btn-outline-dark.active,.btn-outline-dark.dropdown-toggle.show{color:#fff;background-color:#212529;border-color:#212529}.btn-check:checked+.btn-outline-dark:focus,.btn-check:active+.btn-outline-dark:focus,.btn-outline-dark:active:focus,.btn-outline-dark.active:focus,.btn-outline-dark.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-outline-dark:disabled,.btn-outline-dark.disabled{color:#212529;background-color:transparent}.btn-link{font-weight:400;color:#0d6efd;text-decoration:underline}.btn-link:hover{color:#0a58ca}.btn-link:disabled,.btn-link.disabled{color:#6c757d}.btn-lg{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.btn-sm{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.fade{transition:opacity .15s linear}@media(prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media(prefers-reduced-motion:reduce){.collapsing{transition:none}}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem;color:#0d6efd;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media(prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:hover,.nav-link:focus{color:#0a58ca}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-link{margin-bottom:-1px;background:0 0;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{border-color:#e9ecef #e9ecef #dee2e6;isolation:isolate}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{background:0 0;border:0;border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#0d6efd}.nav-fill>.nav-link,.nav-fill .nav-item{flex:auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding-top:.5rem;padding-bottom:.5rem}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;text-decoration:none;white-space:nowrap}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem;transition:box-shadow .15s ease-in-out}@media(prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 .25rem}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-repeat:no-repeat;background-position:50%;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height,75vh);overflow-y:auto}@media(min-width:576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media(min-width:768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media(min-width:992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media(min-width:1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}@media(min-width:1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:hover,.navbar-light .navbar-brand:focus{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.55)}.navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .nav-link:focus{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-nav .nav-link.active{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.55);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.55)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:hover,.navbar-light .navbar-text a:focus{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:hover,.navbar-dark .navbar-brand:focus{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.55)}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .nav-link.active{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.55);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.55)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:hover,.navbar-dark .navbar-text a:focus{color:#fff}.pagination{display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;color:#fff;text-decoration:none;background-color:#464966;border:0 solid #dee2e6;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:#fff;background-color:#575b7f;border-color:#dee2e6}.page-link:focus{z-index:3;color:#0a58ca;background-color:#e9ecef;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.page-item:not(:first-child) .page-link{margin-left:-1px}.page-item.active .page-link{z-index:3;color:#fff;background-color:#3e6c45;border-color:#0d6efd}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;background-color:#30313c;border-color:#dee2e6}.page-link{padding:.375rem .75rem}.page-item .page-link{border-radius:0}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem}.pagination-lg .page-item .page-link{border-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem}.pagination-sm .page-item .page-link{border-radius:.2rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{transform:translate(-50%,-50%)!important}.translate-middle-x{transform:translateX(-50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:1px solid #dee2e6!important}.border-0{border:0!important}.border-top{border-top:1px solid #dee2e6!important}.border-top-0{border-top:0!important}.border-end{border-right:1px solid #dee2e6!important}.border-end-0{border-right:0!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-bottom-0{border-bottom:0!important}.border-start{border-left:1px solid #dee2e6!important}.border-start-0{border-left:0!important}.border-primary{border-color:#0d6efd!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#198754!important}.border-info{border-color:#0dcaf0!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#212529!important}.border-white{border-color:#fff!important}.border-1{border-width:1px!important}.border-2{border-width:2px!important}.border-3{border-width:3px!important}.border-4{border-width:4px!important}.border-5{border-width:5px!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-light{font-weight:300!important}.fw-lighter{font-weight:lighter!important}.fw-normal{font-weight:400!important}.fw-bold{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-primary{color:#0d6efd!important}.text-secondary{color:#6c757d!important}.text-success{color:#198754!important}.text-info{color:#0dcaf0!important}.text-warning{color:#ffc107!important}.text-danger{color:#dc3545!important}.text-light{color:#f8f9fa!important}.text-dark{color:#212529!important}.text-white{color:#fff!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-reset{color:inherit!important}.bg-primary{background-color:#0d6efd!important}.bg-secondary{background-color:#6c757d!important}.bg-success{background-color:#198754!important}.bg-info{background-color:#0dcaf0!important}.bg-warning{background-color:#ffc107!important}.bg-danger{background-color:#dc3545!important}.bg-light{background-color:#f8f9fa!important}.bg-dark{background-color:#212529!important}.bg-body{background-color:#fff!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:.25rem!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:.2rem!important}.rounded-2{border-radius:.25rem!important}.rounded-3{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-end{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-start{border-bottom-left-radius:.25rem!important;border-top-left-radius:.25rem!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media(min-width:576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media(min-width:768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media(min-width:992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media(min-width:1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media(min-width:1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}@media(min-width:1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}}.highlight{padding-left:30px;border:2px solid rgba(0,0,0,.8);background-color:rgba(0,0,0,.5);font-size:15px}code{font-family:fira code,source code pro,monospace;font-weight:500}.highlight{--comment:#608b4e;--string:#a31515;--keyword:#569cd6;--method:#dcdcaa;--classname:#4ec9b0;--number:#b5cea8}.highlight .hll{background-color:#ffc}.highlight .c{color:var(--comment)}.highlight .err{border:1px solid red}.highlight .k{color:var(--keyword)}.highlight .ch{color:var(--comment)}.highlight .cm{color:var(--comment)}.highlight .cp{color:var(--keyword)}.highlight .cpf{color:var(--comment)}.highlight .c1{color:var(--comment)}.highlight .cs{color:var(--comment)}.highlight .ge{font-style:italic}.highlight .gh{font-weight:700}.highlight .gp{font-weight:700}.highlight .gs{font-weight:700}.highlight .gu{font-weight:700}.highlight .kc{color:var(--keyword)}.highlight .kd{color:var(--keyword)}.highlight .kn{color:var(--keyword)}.highlight .kp{color:var(--keyword)}.highlight .kr{color:var(--keyword)}.highlight .kt{color:var(--keyword)}.highlight .s{color:var(--string)}.highlight .m{color:var(--number)}.highlight .nc{color:var(--classname)}.highlight .nn{color:var(--classname)}.highlight .ow{color:#66f}.highlight .sa{color:var(--string)}.highlight .sb{color:var(--string)}.highlight .sc{color:var(--string)}.highlight .dl{color:var(--string)}.highlight .sd{color:var(--string)}.highlight .s2{color:var(--string)}.highlight .se{color:var(--string)}.highlight .sh{color:var(--string)}.highlight .si{color:var(--string)}.highlight .sx{color:var(--string)}.highlight .sr{color:var(--string)}.highlight .s1{color:var(--string)}.highlight .ss{color:var(--string)}.highlight .nf{color:var(--method)}.download-image-container{flex-flow:wrap;display:flex;justify-content:center;margin:0}.download-image{display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;width:150px;margin:0 50px;padding:10px 0 30px}.download-image img{width:150px;height:150px}.download-name{margin-top:30px}.download-link{display:flex;margin:20px 0}#download-sublinks{display:flex;justify-content:center}#download-sublinks>*{flex-basis:200px;text-align:center}#footer-wrap{margin-top:auto}.bottom-links{background-image:url(/images/main/stripeback.svg);line-height:200%;display:flex;justify-content:center}.bottom-links li{margin:0}.bottom-links,.bottom-links a{color:#9c9c9c;transition:color .1s ease-in-out}.bottom-links a:hover{color:#ddd}.bottom-links a:active{color:#fff}.bottom-links ul>li{display:inline-block;margin:0 8px}.bottom-links .github,.bottom-links .steam,.bottom-links .email{margin-bottom:6px}.bottom-links .discord,.bottom-links .rss,.bottom-links .patreon{margin-bottom:4px}.bottom-links .IRC{margin-bottom:9px}.bottom-links .reddit{padding-right:1px;margin-bottom:3px}.bottom-links .email{position:relative;left:5px}#upper-links-container,#media-img,#media-video{flex-flow:row wrap;display:flex;justify-content:space-evenly}#logo-tall{display:none;min-height:101px}#header{background-color:#212126;overflow:hidden;min-height:60px;margin-bottom:20px;position:relative;font-family:montserrat,sans-serif}.navbar{width:100%}.navlinks{margin-left:auto;align-self:center;font-weight:600}#subname{color:grey;transform:skew(-11.775deg,-3.925deg)translate(0,-15px);display:block}.navlink{font-size:20pt;color:#c8c8c8;text-decoration:none;margin-left:20px;text-align:center}@media screen and (max-width:550px){#logo-tall{display:block}#logo-long{display:none}}@media screen and (max-width:330px){#header{flex-wrap:wrap}}header>a{-webkit-text-decoration:dashed;text-decoration:dashed}.navlinks a:hover{text-decoration:none;color:lightslategray}.upper-links,#media-img img,#media-video video{flex-flow:row wrap;display:flex;justify-content:center}#upper-links-container a{font-size:20px;color:#d3d3d3;display:flex;align-items:center}#upper-links-container>div{margin:30px 0 20px}.upper-link-text{display:inline-block;margin-left:2px}#gallery-thumbs{display:flex;justify-content:space-around;flex-wrap:wrap}.gallery-thumb{margin:2px;cursor:pointer;max-width:100px;position:relative}.gallery-thumb.active{box-shadow:0 0 8px 2px #2d5ca3;transition:box-shadow .1s ease-out}.gallery-img{grid-column:a;grid-row:a;width:100%;height:auto;transition:opacity .25s linear;opacity:0;margin:auto;display:flex;justify-content:center}.gallery-img.active{opacity:1}.gallery-img img{box-shadow:0 0 20px 2px rgba(0,0,0,.5);position:static}#gallery-desc{padding-left:5px;padding-top:5px;display:flex;flex-direction:column}#gallery-img-wrap{display:grid;width:100%;min-width:200px;position:relative;margin-bottom:10px;grid-template-columns:[a] 1fr;grid-template-rows:[a] 1fr}.home-button-list{display:flex;align-items:center;flex-grow:1;justify-content:space-between}#center-logo-container{position:relative}#center-logo-background{content:"";background:url(/images/home/center-bg.jpg);background-size:cover;background-position:50%;width:100%;height:100%;position:absolute;z-index:-1;overflow:hidden;left:0}#center-logo-logo{padding:10px;align-self:center;filter:drop-shadow(3px 3px 3px rgba(20,0,0,.5))}#center-logo-desc{display:flex;flex-direction:column;text-shadow:#000 0 0 2px;padding:10px}#center-download-link{text-align:center;font-size:1.3rem;align-self:center;text-shadow:none;font-family:montserrat,sans-serif}#center-download-subtext{font-size:.85em;color:dimgray;text-align:center;text-shadow:#000 0 0 1px;font-weight:500}#logos-container>*{margin:15px 0}#news-column{flex:70%}#logos-column{flex:30%}#home-posts .summary{margin-bottom:1rem;flex-direction:row-reverse}body{background:#25252a;background:url(/images/main/background.jpg)#000;background-size:cover;background-attachment:fixed;color:#c8c8c8;font-family:roboto,sans-serif;height:100%;margin:0;font-variant-ligatures:normal;line-height:normal}html{height:100%}body{display:flex;flex-direction:column}@media(max-width:575.98px){body{background:url(/images/main/background-small.jpg)#000;background-size:cover;background-attachment:fixed}}.section-shadow{filter:drop-shadow(-1px 6px 3px rgba(20,0,0,.5))}.section-bg{background-color:var(--color-section-bg)}.section-bg h1,.section-bg .h1{margin-top:-6px}@media screen and (max-width:576px){.section-shadow{filter:none}}#TableOfContents:before{content:"Contents";text-align:center;font-weight:700;font-size:20px;padding:10px;display:block}#TableOfContents{display:table-row;font-size:13px;padding:2em;width:30em}#TableOfContents ul{display:table;list-style-type:none;counter-reset:item;padding-left:1em;margin:0;padding:0}#TableOfContents li{display:table-row;counter-increment:item}#TableOfContents li:before{content:counters(item,".")". ";display:table-cell;text-align:right;padding-right:.6em}#TableOfContents li:after{content:'';display:block;padding-bottom:.2em}#TableOfContents li li:after{padding-bottom:0}#TableOfContents li li:before{content:counters(item,".")" "}#media-img,#media-video{margin:40px 0}#media-img div,#media-video div{flex-flow:row wrap;display:flex;margin:0 0 0 40px}.video-container video,#media-img img{width:335px;margin:10px}.video-container{display:flex;flex-wrap:wrap}.video-title{text-align:center;font-size:14px;position:relative;top:10px}#media-toc{display:flex;flex-flow:row wrap;justify-content:center;padding:210px 0}#media-toc div{margin:0 100px;padding:50px 0}.media-toc-item a{color:#f5f5f5;font-size:50px}.server-list-short{--angle-rect-clip-size:8px;-webkit-clip-path:polygon(0 0,calc(100% - var(--angle-rect-clip-size)) 0,100% var(--angle-rect-clip-size),100% 100%,var(--angle-rect-clip-size) 100%,0 calc(100% - var(--angle-rect-clip-size)));clip-path:polygon(0 0,calc(100% - var(--angle-rect-clip-size)) 0,100% var(--angle-rect-clip-size),100% 100%,var(--angle-rect-clip-size) 100%,0 calc(100% - var(--angle-rect-clip-size)));background-color:var(--color-panel-bg);margin-bottom:.33333333rem}.server-list-contents{display:flex;flex-direction:column;padding:.33333333rem}.server-entry{--angle-rect-clip-size:8px;background-color:var(--color-server-entry-bg);padding:.33333333rem;margin-bottom:.33333333rem}.server-entry:first-child{-webkit-clip-path:polygon(0 0,calc(100% - var(--angle-rect-clip-size)) 0,100% var(--angle-rect-clip-size),100% 100%,0 100%);clip-path:polygon(0 0,calc(100% - var(--angle-rect-clip-size)) 0,100% var(--angle-rect-clip-size),100% 100%,0 100%)}.server-entry:last-child{-webkit-clip-path:polygon(0 0,100% 0,100% 100%,var(--angle-rect-clip-size) 100%,0 calc(100% - var(--angle-rect-clip-size)));clip-path:polygon(0 0,100% 0,100% 100%,var(--angle-rect-clip-size) 100%,0 calc(100% - var(--angle-rect-clip-size)));margin-bottom:0}.server-entry-info-labels{margin:.25rem 0;display:flex;flex-direction:column}.server-entry-info-label{margin-right:.5rem}.server-entry-info-label-value{font-weight:600}.server-entry-title{height:30px;display:flex;flex-direction:row;margin-bottom:4px}.server-entry-icon{margin-right:5px}.server-list-loading{min-height:400px;display:flex;flex-direction:column;align-items:center;justify-content:center;font-size:2rem}.server-entry-name{font-size:1.5rem}.server-entry-address{color:#aaa}.home-servers-explainer{font-size:.9rem;font-style:italic}@font-face{font-family:fira code;src:url(/fonts/fira_code/eot/FiraCode-Light.eot);src:url(/fonts/fira_code/eot/FiraCode-Light.eot)format("embedded-opentype"),url(/fonts/fira_code/woff2/FiraCode-Light.woff2)format("woff2"),url(/fonts/fira_code/woff/FiraCode-Light.woff)format("woff"),url(/fonts/fira_code/ttf/FiraCode-Light.ttf)format("truetype");font-weight:300;font-style:normal}@font-face{font-family:fira code;src:url(/fonts/fira_code/eot/FiraCode-Regular.eot);src:url(/fonts/fira_code/eot/FiraCode-Regular.eot)format("embedded-opentype"),url(/fonts/fira_code/woff2/FiraCode-Regular.woff2)format("woff2"),url(/fonts/fira_code/woff/FiraCode-Regular.woff)format("woff"),url(/fonts/fira_code/ttf/FiraCode-Regular.ttf)format("truetype");font-weight:400;font-style:normal}@font-face{font-family:fira code;src:url(/fonts/fira_code/eot/FiraCode-Medium.eot);src:url(/fonts/fira_code/eot/FiraCode-Medium.eot)format("embedded-opentype"),url(/fonts/fira_code/woff2/FiraCode-Medium.woff2)format("woff2"),url(/fonts/fira_code/woff/FiraCode-Medium.woff)format("woff"),url(/fonts/fira_code/ttf/FiraCode-Medium.ttf)format("truetype");font-weight:500;font-style:normal}@font-face{font-family:fira code;src:url(/fonts/fira_code/eot/FiraCode-Bold.eot);src:url(/fonts/fira_code/eot/FiraCode-Bold.eot)format("embedded-opentype"),url(/fonts/fira_code/woff2/FiraCode-Bold.woff2)format("woff2"),url(/fonts/fira_code/woff/FiraCode-Bold.woff)format("woff"),url(/fonts/fira_code/ttf/FiraCode-Bold.ttf)format("truetype");font-weight:700;font-style:normal}@font-face{font-family:montserrat;src:url(/fonts/montserrat/Montserrat-Bold.woff2)format("woff2"),url(/fonts/montserrat/Montserrat-Bold.woff)format("woff");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:roboto;src:url(/fonts/roboto/Roboto-Regular.woff2)format("woff2"),url(/fonts/roboto/Roboto-Regular.woff)format("woff");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:roboto;src:url(/fonts/roboto/Roboto-Medium.woff2)format("woff2"),url(/fonts/roboto/Roboto-Medium.woff)format("woff");font-weight:500;font-style:normal;font-display:swap}h1,.h1{font-family:montserrat,sans-serif}h3,.h3{font-size:1.5rem}small,.small{color:grey}hr{min-height:2px;margin:25px 0;height:1px;border:0;background:#525252}.articleheader{margin-bottom:0}.articlemeta{color:dimgrey;font-size:12pt;display:inline-block;padding-bottom:7px}a{color:#96aaff}a:link{text-decoration:none}div#recentpostswrapper h1,div#recentpostswrapper .h1{margin-bottom:0}li.disabled,li.disabled>a{color:dimgray}img,video{max-width:100%;max-height:100%}.contact{text-align:center}hr.nomargin{margin:0}.article-thumb{--angle-rect-clip-size:8px;max-height:100px;align-self:start}article#main-article img,article#main-article video{display:block;margin:0 auto;margin-bottom:1rem}
\ No newline at end of file
diff --git a/fonts/fontawesome/fa-brands-400.eot b/fonts/fontawesome/fa-brands-400.eot
index d05ea58..cba6c6c 100644
Binary files a/fonts/fontawesome/fa-brands-400.eot and b/fonts/fontawesome/fa-brands-400.eot differ
diff --git a/fonts/fontawesome/fa-brands-400.svg b/fonts/fontawesome/fa-brands-400.svg
index 4e48a46..b9881a4 100644
--- a/fonts/fontawesome/fa-brands-400.svg
+++ b/fonts/fontawesome/fa-brands-400.svg
@@ -2,11 +2,11 @@
-Created by FontForge 20201107 at Tue Mar 16 10:15:04 2021
+Created by FontForge 20201107 at Wed Aug 4 12:25:29 2021
By Robert Madole
Copyright (c) Font Awesome
-
+
-
+d="M400 416c26.4922 0 48 -21.5078 48 -48v-352c0 -26.4922 -21.5078 -48 -48 -48h-352c-26.4922 0 -48 21.5078 -48 48v352c0 26.4922 21.5078 48 48 48h352zM336 136v160c-31.5996 -11.2002 -41.2002 -16 -59.7998 -16c-31.4004 0 -43.4004 16 -74.6006 16
+c-25.3994 0 -37.3994 -10.4004 -57.5996 -14.4004v6.40039c0 8.83105 -7.16895 16 -16 16s-16 -7.16895 -16 -16v-192c0 -8.83105 7.16895 -16 16 -16s16 7.16895 16 16v153.6c20.2002 4 32.2002 14.4004 57.5996 14.4004c31.4004 0 43.2002 -16 74.6006 -16
+c10.2002 0 17.7998 1.40039 27.7998 4.59961v-96c-10 -3.19922 -17.5996 -4.59961 -27.7998 -4.59961c-31.4004 0 -43.4004 16 -74.6006 16c-8.91309 -0.0322266 -17.5195 -1.44336 -25.5996 -4v-32c7.86035 2.58398 16.2559 4.00195 24.9756 4.00195
+c0.208008 0 0.416016 0 0.624023 -0.00195312c31.4004 0 43.2002 -16 74.6006 -16c18.5996 0 28.2002 4.7998 59.7998 16z" />
+d="M400 416c26.4922 0 48 -21.5078 48 -48v-352c0 -26.4922 -21.5078 -48 -48 -48h-352c-26.4922 0 -48 21.5078 -48 48v352c0 26.4922 21.5078 48 48 48h352zM416 16v352c0 8.83105 -7.16895 16 -16 16h-352c-8.83105 0 -16 -7.16895 -16 -16v-352
+c0 -8.83105 7.16895 -16 16 -16h352c8.83105 0 16 7.16895 16 16zM201.6 296c31.2002 0 43.2002 -16 74.6006 -16c18.5996 0 28.2002 4.7998 59.7998 16v-160c-31.5996 -11.2002 -41.2002 -16 -59.7998 -16c-31.4004 0 -43.2002 16 -74.6006 16
+c-0.208008 0.00195312 -0.415039 -0.0175781 -0.623047 -0.0175781c-8.7207 0 -17.1162 -1.39844 -24.9766 -3.98242v32c8.08008 2.55664 16.6865 3.96777 25.5996 4c31.2002 0 43.2002 -16 74.6006 -16c10.2002 0 17.7998 1.40039 27.7998 4.59961v96
+c-10 -3.19922 -17.5996 -4.59961 -27.7998 -4.59961c-31.4004 0 -43.2002 16 -74.6006 16c-25.3994 0 -37.3994 -10.4004 -57.5996 -14.4004v-153.6c0 -8.83105 -7.16895 -16 -16 -16s-16 7.16895 -16 16v192c0 8.83105 7.16895 16 16 16s16 -7.16895 16 -16v-6.40039
+c20.2002 4 32.2002 14.4004 57.5996 14.4004z" />
d="M87 -33.7998v73.5996h73.7002v-73.5996h-73.7002zM25.4004 101.4h61.5996v-61.6006h-61.5996v61.6006zM491.6 271.1c53.2002 -170.3 -73 -327.1 -235.6 -327.1v95.7998h0.299805v0.299805c101.7 0.200195 180.5 101 141.4 208
c-14.2998 39.6006 -46.1006 71.4004 -85.7998 85.7002c-107.101 38.7998 -208.101 -39.8994 -208.101 -141.7h-95.7998c0 162.2 156.9 288.7 327 235.601c74.2002 -23.2998 133.6 -82.4004 156.6 -156.601zM256.3 40.0996h-0.299805v-0.299805h-95.2998v95.6006h95.5996
v-95.3008z" />
-
+
@@ -2461,10 +2455,11 @@ c13.7002 9.39941 16.4004 24.3994 9.10059 31.3994c-7.2002 6.90039 -28.2002 -7 -29
c12.5996 33.0996 -3.59961 45.5 -3.59961 45.5s-23.4004 12.9004 -33.3008 -20.2002c-9.89941 -33.0996 -6.39941 -44.8994 -6.39941 -44.8994s30.7002 -13.4004 43.2998 19.5996zM442.1 188.1c0 0 15.7002 -1.09961 26.4004 14.2002s1.2998 25.5 1.2998 25.5
s-8.59961 11.1006 -19.5996 -9.09961c-11.1006 -20.1006 -8.10059 -30.6006 -8.10059 -30.6006z" />
+d="M448 400v-336c-63 -23 -82 -32 -119 -32c-63 0 -87 32 -150 32c-20 0 -36 -4 -51 -8v64c15 4 31 8 51 8c63 0 87 -32 150 -32c20 0 35 3 55 9v208c-20 -6 -35 -9 -55 -9c-63 0 -87 32 -150 32c-51 0 -75 -21 -115 -29v-307
+c0.00195312 -0.136719 0.00292969 -0.273438 0.00292969 -0.410156c0 -17.4404 -14.1602 -31.5996 -31.6006 -31.5996c-0.136719 0 -0.265625 0.0078125 -0.402344 0.00976562c-0.136719 -0.00195312 -0.273438 -0.00292969 -0.410156 -0.00292969
+c-17.4404 0 -31.5996 14.1602 -31.5996 31.6006c0 0.136719 0.0078125 0.265625 0.00976562 0.402344v384c-0.00195312 0.136719 -0.00292969 0.273438 -0.00292969 0.410156c0 17.4404 14.1602 31.5996 31.6006 31.5996
+c0.136719 0 0.265625 -0.0078125 0.402344 -0.00976562c0.136719 0.00195312 0.273438 0.00292969 0.410156 0.00292969c17.4404 0 31.5996 -14.1602 31.5996 -31.6006c0 -0.136719 -0.0078125 -0.265625 -0.00976562 -0.402344v-13c40 8 64 29 115 29c63 0 87 -32 150 -32
+c37 0 56 9 119 32z" />
+d="M14 352.208c0 52.9043 42.8877 95.792 95.793 95.792h164.368c52.9053 0 95.793 -42.8877 95.793 -95.792c0 -33.5 -17.1963 -62.9844 -43.2432 -80.1055c26.0469 -17.1211 43.2432 -46.6045 43.2432 -80.1045c0 -52.9053 -42.8877 -95.793 -95.793 -95.793h-2.08008
+c-24.8018 0 -47.4033 9.42578 -64.415 24.8906v-88.2627c0 -53.6104 -44.0088 -96.833 -97.3574 -96.833c-52.7725 0 -96.3086 42.7568 -96.3086 95.793c0 33.498 17.1943 62.9805 43.2393 80.1016c-26.0449 17.1221 -43.2393 46.6055 -43.2393 80.1035
+c0 33.5 17.1963 62.9834 43.2422 80.1045c-26.0459 17.1211 -43.2422 46.6055 -43.2422 80.1055zM176.288 256.413h-66.4951c-35.5762 0 -64.415 -28.8398 -64.415 -64.415c0 -35.4385 28.6172 -64.1924 64.0029 -64.4141
+c0.136719 0.000976562 0.274414 0.000976562 0.412109 0.000976562h66.4951v128.828zM207.666 191.998c0 -35.5752 28.8389 -64.415 64.415 -64.415h2.08008c35.5762 0 64.415 28.8398 64.415 64.415s-28.8389 64.415 -64.415 64.415h-2.08008
+c-35.5762 0 -64.415 -28.8398 -64.415 -64.415zM109.793 96.2051c-0.137695 0 -0.275391 0.000976562 -0.412109 0.000976562c-35.3857 -0.220703 -64.0029 -28.9746 -64.0029 -64.4131c0 -35.4453 29.2246 -64.415 64.9307 -64.415
+c36.2822 0 65.9795 29.4365 65.9795 65.4551v63.3721h-66.4951zM109.793 416.622c-35.5762 0 -64.415 -28.8398 -64.415 -64.4141c0 -35.5762 28.8389 -64.415 64.415 -64.415h66.4951v128.829h-66.4951zM207.666 287.793h66.4951c35.5762 0 64.415 28.8389 64.415 64.415
+c0 35.5742 -28.8389 64.4141 -64.415 64.4141h-66.4951v-128.829z" />
-
+
-Created by FontForge 20201107 at Tue Mar 16 10:15:04 2021
+Created by FontForge 20201107 at Wed Aug 4 12:25:29 2021
By Robert Madole
Copyright (c) Font Awesome
-
+
-Created by FontForge 20201107 at Tue Mar 16 10:15:04 2021
+Created by FontForge 20201107 at Wed Aug 4 12:25:29 2021
By Robert Madole
Copyright (c) Font Awesome
-
+
Space Station 14: Multiplayer Disaster Simulator - SS14
Disasters, enemies, and incompetence conspire to make each shift aboard the station a unique and hellish experience. Sign up today to explore intricate game mechanics and enjoy limitless player interaction!
Download now! Nanotrasen Inc. is not responsible for injury, death, or worse
Space Station 14 tells the story of an ordinary shift on a space station gone wrong. Immerse yourself into your role, tinker with detailed systems, and survive the chaos in this round-based multiplayer role playing game.
Your custom character can spawn as one of dozens of crew and enemy jobs, ranging from engineer to captain, or even a traitor, each with its own unique gear. Your duties guide you through rich interactions with complex mechanics, whether you're managing your inventory, setting up the reactor, or flushing yourself down the disposal tubes.
As disaster, incompetence, and sabotage strike the station, the tension rises - opening up emergent situations that force you to make hard choices. Will you patch up the medical bay after an asteroid punches a hole in it, or fight for control when the captain gets murdered by revolutionaries? Do you break out an unjustly imprisoned clown, or sit back at the bar and serve drinks without a care in the world?
The story of the station's collapse is in the hands of its players, and each round is an intense, immersive experience that will leave you wanting more.
SS14 is a remake of the cult classic Space Station 13 . The game is under active development and completely open source . Anybody can contribute, even you!
Updates Monday March 6, 2023 Remember when progress reports used to be released on time every month? Neither do we! PR39 covers November and December 2022.
Wednesday November 30, 2022 Oh yeah. We have a ton of huge changes like oldchat, machine upgrade improvements, playtime tracking, and more! We have some catching up to do, so this PR covers August through October 2022. As a consequence, we’ve gone insane skipped the Minor Changes.
Monday October 31, 2022 Better late than never, we’ll hopefully get back on track soon. (And if you’d like to help contribute, progress report writers are always welcome!)
See all posts
+
Space Station 14: Multiplayer Disaster Simulator - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Disasters, enemies, and incompetence conspire to make each shift aboard the station a unique and hellish experience. Sign up today to explore intricate game mechanics and enjoy limitless player interaction!
Download now! Nanotrasen Inc. is not responsible for injury, death, or worse
Space Station 14 tells the story of an ordinary shift on a space station gone wrong. Immerse yourself into your role, tinker with detailed systems, and survive the chaos in this round-based multiplayer role playing game.
Your custom character can spawn as one of dozens of crew and enemy jobs, ranging from engineer to captain, or even a traitor, each with its own unique gear. Your duties guide you through rich interactions with complex mechanics, whether you're managing your inventory, setting up the reactor, or flushing yourself down the disposal tubes.
As disaster, incompetence, and sabotage strike the station, the tension rises - opening up emergent situations that force you to make hard choices. Will you patch up the medical bay after an asteroid punches a hole in it, or fight for control when the captain gets murdered by revolutionaries? Do you break out an unjustly imprisoned clown, or sit back at the bar and serve drinks without a care in the world?
The story of the station's collapse is in the hands of its players, and each round is an intense, immersive experience that will leave you wanting more.
SS14 is a remake of the cult classic Space Station 13 . The game is under active development and completely open source . Anybody can contribute, even you!
\ No newline at end of file
+
News Monday March 6, 2023 Remember when progress reports used to be released on time every month? Neither do we! PR39 covers November and December 2022.
Wednesday November 30, 2022 Oh yeah. We have a ton of huge changes like oldchat, machine upgrade improvements, playtime tracking, and more! We have some catching up to do, so this PR covers August through October 2022. As a consequence, we’ve gone insane skipped the Minor Changes.
Monday October 31, 2022 Better late than never, we’ll hopefully get back on track soon. (And if you’d like to help contribute, progress report writers are always welcome!)
See all news
\ No newline at end of file
diff --git a/index.xml b/index.xml
index f34c7d4..a9db3d9 100644
--- a/index.xml
+++ b/index.xml
@@ -1,8 +1,15 @@
-
Space Station 14: Multiplayer Disaster Simulator on Space Station 14 https://spacestation14.io/Recent content in Space Station 14: Multiplayer Disaster Simulator on Space Station 14 Hugo -- gohugo.io en-us Mon, 06 Mar 2023 00:00:00 +0000 Progress Report #39: Happy Holidelays https://spacestation14.io/post/23-03-06-progress-report-39/Mon, 06 Mar 2023 00:00:00 +0000 https://spacestation14.io/post/23-03-06-progress-report-39/ <p>Remember when progress reports used to be released on time every month? Neither do we! PR39 covers November and December 2022.</p> Progress Report #38: Oh Baby a Triple https://spacestation14.io/post/22-11-30-progress-report-38/Wed, 30 Nov 2022 00:00:00 +0000 https://spacestation14.io/post/22-11-30-progress-report-38/ <p>Oh yeah. We have a ton of huge changes like oldchat, machine upgrade improvements, playtime tracking, and more! We have some catching up to do, so this PR covers August through October 2022. As a consequence, we’ve <del>gone insane</del> skipped the Minor Changes.</p> Progress Report #37: Love, Geoff, and Robots https://spacestation14.io/post/22-10-31-progress-report-37/Mon, 31 Oct 2022 00:00:00 +0000 https://spacestation14.io/post/22-10-31-progress-report-37/ <p>Better late than never, we’ll hopefully get back on track soon. (And if you’d like to help contribute, progress report writers are always welcome!)</p> Progress Report #36: Too Much of a Good Thing https://spacestation14.io/post/22-07-27-progress-report-36/Wed, 27 Jul 2022 00:00:00 +0000 https://spacestation14.io/post/22-07-27-progress-report-36/ <p>There’s so much new content that at least one Progress Report author has been driven mad! We’ve even surpassed /tg/station 13 by contributions per month.</p> Progress Report #35: Going Nuclear https://spacestation14.io/post/22-06-25-progress-report-35/Sat, 25 Jun 2022 00:00:00 +0000 https://spacestation14.io/post/22-06-25-progress-report-35/ <p>Nuclear Operatives, magic, and more!</p> Progress Report #34: Manifest Destiny https://spacestation14.io/post/22-05-25-progress-report-34/Wed, 25 May 2022 00:00:00 +0000 https://spacestation14.io/post/22-05-25-progress-report-34/ <p>Tons of improvements to the SS14 experience, and more!</p> Progress Report #33: Delta Variant https://spacestation14.io/post/22-04-30-progress-report-33/Sat, 30 Apr 2022 00:00:00 +0000 https://spacestation14.io/post/22-04-30-progress-report-33/ <p>There’s so many changes we couldn’t figure out how to cover them all!</p> Progress Report #32: Geoff https://spacestation14.io/post/22-04-01-progress-report-32/Fri, 01 Apr 2022 00:00:00 +0000 https://spacestation14.io/post/22-04-01-progress-report-32/ <p>As promised in the last progress report, here’s the second half of our two-part special! This part covers February 2022.</p> Progress Report #31: Duck, Duck, Weh https://spacestation14.io/post/22-03-16-progress-report-31/Wed, 16 Mar 2022 00:00:00 +0000 https://spacestation14.io/post/22-03-16-progress-report-31/ <p>It’s been a minute since the last Progress Report, and there’s been so many changes that we had to break this one up into two parts! This part covers January 2022.</p> Progress Report #30: A Short Freeze for Winter https://spacestation14.io/post/22-01-11-progress-report-30/Mon, 17 Jan 2022 00:00:00 +0000 https://spacestation14.io/post/22-01-11-progress-report-30/ <p>Even with the winter holidays and a week-long feature freeze, December capped off a busy year for Space Station 14. In 2021, Space Station 14 had 2184 contributions, easily beating the 2020 contribution count of 1498.</p> Progress Report #29: A Lot To Unpack https://spacestation14.io/post/21-12-09-progress-report-29/Thu, 09 Dec 2021 00:00:00 +0000 https://spacestation14.io/post/21-12-09-progress-report-29/ <p>Space Station 14 underwent so many changes in November that we had to split them off into a separate progress report. From November 4th to December 4th, the Space Station 14 code base had 357 contributions made - easily beating the two month period covered by Progress Report 28.</p> Progress Report #28: Atmosia Rising https://spacestation14.io/post/21-11-24-progress-report-28/Wed, 24 Nov 2021 00:00:00 +0000 https://spacestation14.io/post/21-11-24-progress-report-28/ <p>The last couple of months have been a huge step forward for Space Station 14, with a total of 315 contributions made to the SS14 codebase between September 29th and November 3rd, and nearly 700 commits to SS14 and the RobustToolbox engine.</p> Progress Report #27: Transported to the Chess Dimension https://spacestation14.io/post/21-10-01-progress-report-27/Wed, 29 Sep 2021 00:00:00 +0000 https://spacestation14.io/post/21-10-01-progress-report-27/ Progress Report #26: Lītigium In Forīs https://spacestation14.io/post/21-05-07-progress-report-26/Fri, 07 May 2021 00:00:00 +0000 https://spacestation14.io/post/21-05-07-progress-report-26/ Progress Report #25: Blowing Off Steam https://spacestation14.io/post/21-02-12-progress-report-25/Sun, 07 Feb 2021 00:00:00 +0000 https://spacestation14.io/post/21-02-12-progress-report-25/ Progress Report #24: Atmos Sim Remake Now Simulates Atmos https://spacestation14.io/post/20-10-16-progress-report-24/Fri, 16 Oct 2020 00:00:00 +0000 https://spacestation14.io/post/20-10-16-progress-report-24/ Progress Report #23: We Didn't Want To Wait Until Atmos Was Done https://spacestation14.io/post/20-07-22-progress-report-23/Wed, 22 Jul 2020 00:00:00 +0000 https://spacestation14.io/post/20-07-22-progress-report-23/ <p>Sadly atmos is not done yet. A lot of other stuff is though!</p> Frequently Asked Questions https://spacestation14.io/about/faq/Tue, 09 Jun 2020 00:00:00 +0000 https://spacestation14.io/about/faq/ Frequently Asked Questions Links These are the official Space Wizards domains:
+Space Station 14: Multiplayer Disaster Simulator on Space Station 14 https://spacestation14.com/Recent content in Space Station 14: Multiplayer Disaster Simulator on Space Station 14 Hugo -- gohugo.io en-us Sun, 31 Mar 2024 00:00:00 +0000 Update Vlog - 67 - (Cleaning Grenades, Explosion Changes, Rubber Bullet Removal) https://spacestation14.com/updates/24-03-31-liltenhead-67/Sun, 31 Mar 2024 00:00:00 +0000 https://spacestation14.com/updates/24-03-31-liltenhead-67/ Update Vlog - 66 - (Throwing Knives, Lone Ops Buff, Hacking Tweaks) https://spacestation14.com/updates/24-03-24-liltenhead-66/Sun, 24 Mar 2024 00:00:00 +0000 https://spacestation14.com/updates/24-03-24-liltenhead-66/ Update Vlog - 65 - Additions (IED Changes, Pipebomb, Plant Biomass Reclaimer) https://spacestation14.com/updates/24-03-18-liltenhead-65/Mon, 18 Mar 2024 00:00:00 +0000 https://spacestation14.com/updates/24-03-18-liltenhead-65/ Progress Report #39: Happy Holidelays https://spacestation14.com/post/23-03-06-progress-report-39/Mon, 06 Mar 2023 00:00:00 +0000 https://spacestation14.com/post/23-03-06-progress-report-39/ <p>Remember when progress reports used to be released on time every month? Neither do we! PR39 covers November and December 2022.</p> Progress Report #38: Oh Baby a Triple https://spacestation14.com/post/22-11-30-progress-report-38/Wed, 30 Nov 2022 00:00:00 +0000 https://spacestation14.com/post/22-11-30-progress-report-38/ <p>Oh yeah. We have a ton of huge changes like oldchat, machine upgrade improvements, playtime tracking, and more! We have some catching up to do, so this PR covers August through October 2022. As a consequence, we’ve <del>gone insane</del> skipped the Minor Changes.</p> Progress Report #37: Love, Geoff, and Robots https://spacestation14.com/post/22-10-31-progress-report-37/Mon, 31 Oct 2022 00:00:00 +0000 https://spacestation14.com/post/22-10-31-progress-report-37/ <p>Better late than never, we’ll hopefully get back on track soon. (And if you’d like to help contribute, progress report writers are always welcome!)</p> Progress Report #36: Too Much of a Good Thing https://spacestation14.com/post/22-07-27-progress-report-36/Wed, 27 Jul 2022 00:00:00 +0000 https://spacestation14.com/post/22-07-27-progress-report-36/ <p>There’s so much new content that at least one Progress Report author has been driven mad! We’ve even surpassed /tg/station 13 by contributions per month.</p> Progress Report #35: Going Nuclear https://spacestation14.com/post/22-06-25-progress-report-35/Sat, 25 Jun 2022 00:00:00 +0000 https://spacestation14.com/post/22-06-25-progress-report-35/ <p>Nuclear Operatives, magic, and more!</p> Progress Report #34: Manifest Destiny https://spacestation14.com/post/22-05-25-progress-report-34/Wed, 25 May 2022 00:00:00 +0000 https://spacestation14.com/post/22-05-25-progress-report-34/ <p>Tons of improvements to the SS14 experience, and more!</p> Progress Report #33: Delta Variant https://spacestation14.com/post/22-04-30-progress-report-33/Sat, 30 Apr 2022 00:00:00 +0000 https://spacestation14.com/post/22-04-30-progress-report-33/ <p>There’s so many changes we couldn’t figure out how to cover them all!</p> Progress Report #32: Geoff https://spacestation14.com/post/22-04-01-progress-report-32/Fri, 01 Apr 2022 00:00:00 +0000 https://spacestation14.com/post/22-04-01-progress-report-32/ <p>As promised in the last progress report, here’s the second half of our two-part special! This part covers February 2022.</p> Progress Report #31: Duck, Duck, Weh https://spacestation14.com/post/22-03-16-progress-report-31/Wed, 16 Mar 2022 00:00:00 +0000 https://spacestation14.com/post/22-03-16-progress-report-31/ <p>It’s been a minute since the last Progress Report, and there’s been so many changes that we had to break this one up into two parts! This part covers January 2022.</p> Progress Report #30: A Short Freeze for Winter https://spacestation14.com/post/22-01-11-progress-report-30/Mon, 17 Jan 2022 00:00:00 +0000 https://spacestation14.com/post/22-01-11-progress-report-30/ <p>Even with the winter holidays and a week-long feature freeze, December capped off a busy year for Space Station 14. In 2021, Space Station 14 had 2184 contributions, easily beating the 2020 contribution count of 1498.</p> Progress Report #29: A Lot To Unpack https://spacestation14.com/post/21-12-09-progress-report-29/Thu, 09 Dec 2021 00:00:00 +0000 https://spacestation14.com/post/21-12-09-progress-report-29/ <p>Space Station 14 underwent so many changes in November that we had to split them off into a separate progress report. From November 4th to December 4th, the Space Station 14 code base had 357 contributions made - easily beating the two month period covered by Progress Report 28.</p> Progress Report #28: Atmosia Rising https://spacestation14.com/post/21-11-24-progress-report-28/Wed, 24 Nov 2021 00:00:00 +0000 https://spacestation14.com/post/21-11-24-progress-report-28/ <p>The last couple of months have been a huge step forward for Space Station 14, with a total of 315 contributions made to the SS14 codebase between September 29th and November 3rd, and nearly 700 commits to SS14 and the RobustToolbox engine.</p> Progress Report #27: Transported to the Chess Dimension https://spacestation14.com/post/21-10-01-progress-report-27/Wed, 29 Sep 2021 00:00:00 +0000 https://spacestation14.com/post/21-10-01-progress-report-27/ Website Upgrade As you may have noticed, our official website has gotten a major facelift thanks to PJB. We also commissioned some nice new background art from AsPev as a replacement for our old one which was a little crusty. You can download a full resolution of it here.
+Updated Playtest Schedule We’re moving playtests to a consistent schedule due to their popularity and developers wanting more feedback from the community on the state of the game. Progress Report #26: Lītigium In Forīs https://spacestation14.com/post/21-05-07-progress-report-26/Fri, 07 May 2021 00:00:00 +0000 https://spacestation14.com/post/21-05-07-progress-report-26/ 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. Progress Report #25: Blowing Off Steam https://spacestation14.com/post/21-02-12-progress-report-25/Sun, 07 Feb 2021 00:00:00 +0000 https://spacestation14.com/post/21-02-12-progress-report-25/ Playtest We’re proud to announce that Space Station 14 is now available through the new Steam Playtest feature. Originally we were planning to do a full release through Early Access, but we felt that a more limited release was a better match for the current state of SS14 development.
+To gain access, simply visit the SS14 store page and click Request Access. You’ll be added to the pool of people who are waiting, which we randomly draw from when we feel we could use more players. Progress Report #24: Atmos Sim Remake Now Simulates Atmos https://spacestation14.com/post/20-10-16-progress-report-24/Fri, 16 Oct 2020 00:00:00 +0000 https://spacestation14.com/post/20-10-16-progress-report-24/ Barebones rounds! Throughout the years, we’ve put a lot of work into developing the engine and framework necessary for Space Station 14 to have playable content. Last year, we transitioned to developing player-facing features and gameplay in earnest, and we’ve made a lot of progress in that short timespan!
+SS14 now has playable, albeit barebones, rounds. As we add more features the number of complex interactions grows, and so does the need for testing the game with real players. Progress Report #23: We Didn't Want To Wait Until Atmos Was Done https://spacestation14.com/post/20-07-22-progress-report-23/Wed, 22 Jul 2020 00:00:00 +0000 https://spacestation14.com/post/20-07-22-progress-report-23/ <p>Sadly atmos is not done yet. A lot of other stuff is though!</p> Frequently Asked Questions https://spacestation14.com/about/faq/Tue, 09 Jun 2020 00:00:00 +0000 https://spacestation14.com/about/faq/ Frequently Asked Questions Links These are the official Space Wizards domains:
robusttoolbox.io, spacestation14.io, spacestation14.com, ss14.io Any other domain is not affiliated with us.
-Space Station 14 Downloads Steam Game Wiki Official Forums Socials Patreon (Finances) Lemmy Discord Mastodon Twitter Development GitHub Organization Game Repository Engine Repository Documentation RSIEdit Official Servers The official servers are called “Wizard’s Den” on the launcher/hub. If you’ve been banned in any of them, you may appeal your ban here. Progress Report #22: Full Steam Ahead https://spacestation14.io/post/20-06-07-progress-report-22/Sun, 07 Jun 2020 00:00:00 +0000 https://spacestation14.io/post/20-06-07-progress-report-22/ <p>It has been 3 months since the last post, we have a lot to tell you!</p> Contact https://spacestation14.io/about/contact/Sun, 17 May 2020 00:00:00 +0000 https://spacestation14.io/about/contact/ You can contact us via: Discord Lemmy Forum Emailtelecommunications@spacestation14.com Progress Report #21: Colonial Marines, lighting, features https://spacestation14.io/post/20-02-24-progress-report-21/Mon, 24 Feb 2020 00:00:00 +0000 https://spacestation14.io/post/20-02-24-progress-report-21/ <p>We have big news for everyone who enjoys slaying meat sacks as a xenomorph, futilely hiding in a locker as a survivor, or being eaten alive as a marine…</p> Progress Report #20: 2020 Resolution Failed https://spacestation14.io/post/20-01-24-progress-report-20/Fri, 24 Jan 2020 00:00:00 +0000 https://spacestation14.io/post/20-01-24-progress-report-20/ <p>Writing progress reports is hard. Usually it isn’t even writing the progress report itself, it’s making the content we’ve added presentable.</p> Progress Report #19: 2x The Wait, 4x The Content https://spacestation14.io/post/19-10-22-progress-report-19/Tue, 22 Oct 2019 00:00:00 +0000 https://spacestation14.io/post/19-10-22-progress-report-19/ <p>Kept you waiting, huh?</p> Progress Report #18: Speech Bubbles & Slightly Better Launcher https://spacestation14.io/post/19-08-24-progress-report-18/Wed, 28 Aug 2019 00:00:00 +0000 https://spacestation14.io/post/19-08-24-progress-report-18/ <p>Writing these into sections is hard, did you know that?</p> Progress Report #17: Main UI Plans https://spacestation14.io/post/19-07-24-progress-report-17/Wed, 24 Jul 2019 00:00:00 +0000 https://spacestation14.io/post/19-07-24-progress-report-17/ <p>One of the biggest things that scare people away from SS13 is, of course, the terrible user interface.
-So, let’s make sure that isn’t the case for SS14!</p> Progress Report #16: Outline, Use, Kaboom https://spacestation14.io/post/19-06-07-progress-report-16/Sun, 07 Jul 2019 00:00:00 +0000 https://spacestation14.io/post/19-06-07-progress-report-16/ <p>As it turns out, <em>re-imagining</em> SS13 is a bit harder than simply <em>re-making</em> it. Not that that deters us.</p> Progress Report #15: Bye Godot https://spacestation14.io/post/19-05-12-progress-report-15/Sun, 12 May 2019 00:00:00 +0000 https://spacestation14.io/post/19-05-12-progress-report-15/ <p>Godot is finally dead, but it will always be there in our hearts.</p> Progress Report #14: Content & More Server https://spacestation14.io/post/19-04-22-progress-report-14/Mon, 22 Apr 2019 00:00:00 +0000 https://spacestation14.io/post/19-04-22-progress-report-14/ <p>This time on SS14: neat features and neat server features.</p> Progress Report #13: Permanent Public Server. https://spacestation14.io/post/19-04-02-progress-report-13/Tue, 02 Apr 2019 00:00:00 +0000 https://spacestation14.io/post/19-04-02-progress-report-13/ <p>Working on a massive project like this can be quite daunting. “Remake SS13” is quite a clear goal but far from concrete. Having intermediate goals to work towards is important. So for now, my goal at least is to get a permanent public server running.</p> Progress Report #12: Suddenly, Progress! https://spacestation14.io/post/19-03-23-progress-report-12/Sat, 23 Mar 2019 00:00:00 +0000 https://spacestation14.io/post/19-03-23-progress-report-12/ <p>Didn’t think you’d already see a new progress report now, did you?
-And especially not such a packed one!</p> Progress Report #11: UI & Animations https://spacestation14.io/post/19-03-17-progress-report-11/Sun, 17 Mar 2019 00:00:00 +0000 https://spacestation14.io/post/19-03-17-progress-report-11/ <p>The GUI system is much more complete now, so most interfaces work now.
-I also decided to actually code something NEW instead of purely catching up to Godot.</p> Progress Report #10: Nothing To Say For Ourselves https://spacestation14.io/post/19-02-20-progress-report-10/Sat, 23 Feb 2019 00:00:00 +0000 https://spacestation14.io/post/19-02-20-progress-report-10/ <p>Yeah I honestly have nothing to say for myself. You have the right to laugh.</p> Progress Report #9: The One Where We Implemented New Features https://spacestation14.io/post/18-12-14-progress-report-9/Fri, 14 Dec 2018 00:00:00 +0000 https://spacestation14.io/post/18-12-14-progress-report-9/ <p>Yeah, we really don’t have anything to say here, outside of “look at all these features!”</p> Progress Report #8: Writing Some Content https://spacestation14.io/post/18-09-19-progress-report-8/Wed, 19 Sep 2018 00:00:00 +0000 https://spacestation14.io/post/18-09-19-progress-report-8/ <p>It’s pretty nice to get to a point where we can worry purely about content without having to juggle the engine around all the time. I think we’re getting close to the point of reaching that now.</p> Progress Report #7: Visual https://spacestation14.io/post/18-06-24-progress-report-7/Sun, 24 Jun 2018 00:00:00 +0000 https://spacestation14.io/post/18-06-24-progress-report-7/ <p>Fancy graphics and less fancy menus.</p> Downloads https://spacestation14.io/about/nightlies/Fri, 13 Apr 2018 00:00:00 +0000 https://spacestation14.io/about/nightlies/ System Requirements Every Platform: Minimum 64-bit CPU & OS Memory: 2GB Ram Graphics: OpenGL 3.3 or greater Storage: 512MB disk space Recommended 64-bit CPU & OS Memory: 4GB Ram Graphics: OpenGL 3.3 or greater Storage: 1GB disk space Windows: Windows 10 1607 or above VC++ 2015 Redistributable Linux: OpenAL Freetype macOS: Monterey (12) or greater FAQ Is this malware? No. If you’re paranoid you can download the code yourself and build from source though. Progress Report #6: Never say 'few' https://spacestation14.io/post/18-04-13-progress-report-6/Fri, 13 Apr 2018 00:00:00 +0000 https://spacestation14.io/post/18-04-13-progress-report-6/ <p>The wait is over.</p> Progress Report #5: Waiting for Godot https://spacestation14.io/post/18-02-26-progress-report-5/Mon, 26 Feb 2018 00:00:00 +0000 https://spacestation14.io/post/18-02-26-progress-report-5/ <p>So when was the last progress report made? November right?</p>
-<p>Oh jeez.</p> Nightly Builds Up (Properly!) https://spacestation14.io/post/17-10-25-nightly-builds-up-properly/Wed, 25 Oct 2017 00:00:00 +0000 https://spacestation14.io/post/17-10-25-nightly-builds-up-properly/ <p><a href="https://ss14.silvertorch5.io/jenkins/job/SS14%20Content%20Build/">Get your Windows, MacOS and Linux builds here!</a></p> Nightly Builds Up! https://spacestation14.io/post/17-10-21-nightly-builds-up-sorta/Sat, 21 Oct 2017 00:00:00 +0000 https://spacestation14.io/post/17-10-21-nightly-builds-up-sorta/ <p><a href="https://ss14.silvertorch5.io/jenkins/job/SS14%20Content%20Build/">Nightly Windows & Linux builds here!</a></p> Progress Report #4: Robust Content Framework https://spacestation14.io/post/17-08-17-progress-report-4/Thu, 17 Aug 2017 00:00:00 +0000 https://spacestation14.io/post/17-08-17-progress-report-4/ <p>It’s been a couple weeks since the last progress report, and lots has happened since then. Refactors, setting up the content repo, and more!</p> Progress Report #3: Ending the pre-alpha https://spacestation14.io/post/17-07-25-progress-report-3/Tue, 25 Jul 2017 00:00:00 +0000 https://spacestation14.io/post/17-07-25-progress-report-3/ <p>So stuff’s been quiet for the past 14 days. I can give you an annoying excuse or I can just accept that weekly progress reports aren’t working <em>yet</em>. As such <strong>progress reports will no longer be scheduled and done whenever we feel there’s something big to report</strong>, like today!</p> Progress report #2: Refactor Hell https://spacestation14.io/post/17-07-10-progress-report-2/Mon, 10 Jul 2017 00:00:00 +0000 https://spacestation14.io/post/17-07-10-progress-report-2/ <p>The progress report took a bit to get here, because I uploaded #1 two days too late, and not a lot of substance for a report happened between then and when #2 should’ve happened. Not the case anymore though, got plenty to write about this time!</p> Progress Report #1: Revive https://spacestation14.io/post/17-06-26-progress-report-1/Mon, 26 Jun 2017 00:00:00 +0000 https://spacestation14.io/post/17-06-26-progress-report-1/ <p>You’re reading this on the new website for SS14! After <a href="https://i.imgur.com/Q3cUg29.gif">lots of hard work with CSS</a>, the website is ready to recieve progress reports and other news.</p> About Space Station 14 https://spacestation14.io/about/about/Sun, 25 Jun 2017 00:00:00 +0000 https://spacestation14.io/about/about/ What is Space Station 14? Space Station 14 is inspired by the cult classic SS13 and tells the story of an ordinary shift on a space station gone wrong. Immerse yourself into your role, tinker with detailed systems, and survive the chaos in this round-based multiplayer role playing game.
+Space Station 14 Downloads Steam Game Wiki Official Forums Socials Patreon (Finances) Lemmy Discord Mastodon Twitter Development GitHub Organization Game Repository Engine Repository Documentation RSIEdit Official Servers The official servers are called “Wizard’s Den” on the launcher/hub. If you’ve been banned in any of them, you may appeal your ban here. Progress Report #22: Full Steam Ahead https://spacestation14.com/post/20-06-07-progress-report-22/Sun, 07 Jun 2020 00:00:00 +0000 https://spacestation14.com/post/20-06-07-progress-report-22/ <p>It has been 3 months since the last post, we have a lot to tell you!</p> Contact https://spacestation14.com/about/contact/Sun, 17 May 2020 00:00:00 +0000 https://spacestation14.com/about/contact/ You can contact us via: Discord Lemmy Forum Emailtelecommunications@spacestation14.com Progress Report #21: Colonial Marines, lighting, features https://spacestation14.com/post/20-02-24-progress-report-21/Mon, 24 Feb 2020 00:00:00 +0000 https://spacestation14.com/post/20-02-24-progress-report-21/ <p>We have big news for everyone who enjoys slaying meat sacks as a xenomorph, futilely hiding in a locker as a survivor, or being eaten alive as a marine…</p> Progress Report #20: 2020 Resolution Failed https://spacestation14.com/post/20-01-24-progress-report-20/Fri, 24 Jan 2020 00:00:00 +0000 https://spacestation14.com/post/20-01-24-progress-report-20/ <p>Writing progress reports is hard. Usually it isn’t even writing the progress report itself, it’s making the content we’ve added presentable.</p> Progress Report #19: 2x The Wait, 4x The Content https://spacestation14.com/post/19-10-22-progress-report-19/Tue, 22 Oct 2019 00:00:00 +0000 https://spacestation14.com/post/19-10-22-progress-report-19/ <p>Kept you waiting, huh?</p> Progress Report #18: Speech Bubbles & Slightly Better Launcher https://spacestation14.com/post/19-08-24-progress-report-18/Wed, 28 Aug 2019 00:00:00 +0000 https://spacestation14.com/post/19-08-24-progress-report-18/ <p>Writing these into sections is hard, did you know that?</p> Progress Report #17: Main UI Plans https://spacestation14.com/post/19-07-24-progress-report-17/Wed, 24 Jul 2019 00:00:00 +0000 https://spacestation14.com/post/19-07-24-progress-report-17/ <p>One of the biggest things that scare people away from SS13 is, of course, the terrible user interface.
+So, let’s make sure that isn’t the case for SS14!</p> Progress Report #16: Outline, Use, Kaboom https://spacestation14.com/post/19-06-07-progress-report-16/Sun, 07 Jul 2019 00:00:00 +0000 https://spacestation14.com/post/19-06-07-progress-report-16/ <p>As it turns out, <em>re-imagining</em> SS13 is a bit harder than simply <em>re-making</em> it. Not that that deters us.</p> Progress Report #15: Bye Godot https://spacestation14.com/post/19-05-12-progress-report-15/Sun, 12 May 2019 00:00:00 +0000 https://spacestation14.com/post/19-05-12-progress-report-15/ <p>Godot is finally dead, but it will always be there in our hearts.</p> Progress Report #14: Content & More Server https://spacestation14.com/post/19-04-22-progress-report-14/Mon, 22 Apr 2019 00:00:00 +0000 https://spacestation14.com/post/19-04-22-progress-report-14/ <p>This time on SS14: neat features and neat server features.</p> Progress Report #13: Permanent Public Server. https://spacestation14.com/post/19-04-02-progress-report-13/Tue, 02 Apr 2019 00:00:00 +0000 https://spacestation14.com/post/19-04-02-progress-report-13/ <p>Working on a massive project like this can be quite daunting. “Remake SS13” is quite a clear goal but far from concrete. Having intermediate goals to work towards is important. So for now, my goal at least is to get a permanent public server running.</p> Progress Report #12: Suddenly, Progress! https://spacestation14.com/post/19-03-23-progress-report-12/Sat, 23 Mar 2019 00:00:00 +0000 https://spacestation14.com/post/19-03-23-progress-report-12/ <p>Didn’t think you’d already see a new progress report now, did you?
+And especially not such a packed one!</p> Progress Report #11: UI & Animations https://spacestation14.com/post/19-03-17-progress-report-11/Sun, 17 Mar 2019 00:00:00 +0000 https://spacestation14.com/post/19-03-17-progress-report-11/ <p>The GUI system is much more complete now, so most interfaces work now.
+I also decided to actually code something NEW instead of purely catching up to Godot.</p> Progress Report #10: Nothing To Say For Ourselves https://spacestation14.com/post/19-02-20-progress-report-10/Sat, 23 Feb 2019 00:00:00 +0000 https://spacestation14.com/post/19-02-20-progress-report-10/ <p>Yeah I honestly have nothing to say for myself. You have the right to laugh.</p> Progress Report #9: The One Where We Implemented New Features https://spacestation14.com/post/18-12-14-progress-report-9/Fri, 14 Dec 2018 00:00:00 +0000 https://spacestation14.com/post/18-12-14-progress-report-9/ <p>Yeah, we really don’t have anything to say here, outside of “look at all these features!”</p> Progress Report #8: Writing Some Content https://spacestation14.com/post/18-09-19-progress-report-8/Wed, 19 Sep 2018 00:00:00 +0000 https://spacestation14.com/post/18-09-19-progress-report-8/ <p>It’s pretty nice to get to a point where we can worry purely about content without having to juggle the engine around all the time. I think we’re getting close to the point of reaching that now.</p> Progress Report #7: Visual https://spacestation14.com/post/18-06-24-progress-report-7/Sun, 24 Jun 2018 00:00:00 +0000 https://spacestation14.com/post/18-06-24-progress-report-7/ <p>Fancy graphics and less fancy menus.</p> Downloads https://spacestation14.com/about/nightlies/Fri, 13 Apr 2018 00:00:00 +0000 https://spacestation14.com/about/nightlies/ System Requirements Every Platform: Minimum 64-bit CPU & OS Memory: 2GB Ram Graphics: OpenGL 3.3 or greater Storage: 512MB disk space Recommended 64-bit CPU & OS Memory: 4GB Ram Graphics: OpenGL 3.3 or greater Storage: 1GB disk space Windows: Windows 10 1607 or above VC++ 2015 Redistributable Linux: OpenAL Freetype macOS: Monterey (12) or greater FAQ Is this malware? No. If you’re paranoid you can download the code yourself and build from source though. Progress Report #6: Never say 'few' https://spacestation14.com/post/18-04-13-progress-report-6/Fri, 13 Apr 2018 00:00:00 +0000 https://spacestation14.com/post/18-04-13-progress-report-6/ <p>The wait is over.</p> Progress Report #5: Waiting for Godot https://spacestation14.com/post/18-02-26-progress-report-5/Mon, 26 Feb 2018 00:00:00 +0000 https://spacestation14.com/post/18-02-26-progress-report-5/ <p>So when was the last progress report made? November right?</p>
+<p>Oh jeez.</p> Nightly Builds Up (Properly!) https://spacestation14.com/post/17-10-25-nightly-builds-up-properly/Wed, 25 Oct 2017 00:00:00 +0000 https://spacestation14.com/post/17-10-25-nightly-builds-up-properly/ <p><a href="https://ss14.silvertorch5.io/jenkins/job/SS14%20Content%20Build/">Get your Windows, MacOS and Linux builds here!</a></p> Nightly Builds Up! https://spacestation14.com/post/17-10-21-nightly-builds-up-sorta/Sat, 21 Oct 2017 00:00:00 +0000 https://spacestation14.com/post/17-10-21-nightly-builds-up-sorta/ <p><a href="https://ss14.silvertorch5.io/jenkins/job/SS14%20Content%20Build/">Nightly Windows & Linux builds here!</a></p> Progress Report #4: Robust Content Framework https://spacestation14.com/post/17-08-17-progress-report-4/Thu, 17 Aug 2017 00:00:00 +0000 https://spacestation14.com/post/17-08-17-progress-report-4/ <p>It’s been a couple weeks since the last progress report, and lots has happened since then. Refactors, setting up the content repo, and more!</p> Progress Report #3: Ending the pre-alpha https://spacestation14.com/post/17-07-25-progress-report-3/Tue, 25 Jul 2017 00:00:00 +0000 https://spacestation14.com/post/17-07-25-progress-report-3/ <p>So stuff’s been quiet for the past 14 days. I can give you an annoying excuse or I can just accept that weekly progress reports aren’t working <em>yet</em>. As such <strong>progress reports will no longer be scheduled and done whenever we feel there’s something big to report</strong>, like today!</p> Progress report #2: Refactor Hell https://spacestation14.com/post/17-07-10-progress-report-2/Mon, 10 Jul 2017 00:00:00 +0000 https://spacestation14.com/post/17-07-10-progress-report-2/ <p>The progress report took a bit to get here, because I uploaded #1 two days too late, and not a lot of substance for a report happened between then and when #2 should’ve happened. Not the case anymore though, got plenty to write about this time!</p> Progress Report #1: Revive https://spacestation14.com/post/17-06-26-progress-report-1/Mon, 26 Jun 2017 00:00:00 +0000 https://spacestation14.com/post/17-06-26-progress-report-1/ <p>You’re reading this on the new website for SS14! After <a href="https://i.imgur.com/Q3cUg29.gif">lots of hard work with CSS</a>, the website is ready to recieve progress reports and other news.</p> About Space Station 14 https://spacestation14.com/about/about/Sun, 25 Jun 2017 00:00:00 +0000 https://spacestation14.com/about/about/ What is Space Station 14? Space Station 14 is inspired by the cult classic SS13 and tells the story of an ordinary shift on a space station gone wrong. Immerse yourself into your role, tinker with detailed systems, and survive the chaos in this round-based multiplayer role playing game.
Your custom character can spawn as one of dozens of crew and enemy jobs, ranging from engineer to captain, or even a traitor, each with its own unique gear.
\ No newline at end of file
diff --git a/js/home.js b/js/home.js
new file mode 100644
index 0000000..b88e7b2
--- /dev/null
+++ b/js/home.js
@@ -0,0 +1,111 @@
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+};
+import { createApp } from "./vue/petite-vue.es.js";
+import { whenReady } from "./util.js";
+import { getServerList } from "./hub_api.js";
+let SELECTED_GALLERY_IMG;
+let SELECTED_THUMB;
+let GALLERY_IMGS = {};
+let GALLERY_THUMBS = {};
+function setupGallery() {
+ let imgs = document.querySelectorAll(".gallery-img");
+ for (var i = 0; i < imgs.length; i++) {
+ let img = imgs[i];
+ let imgId = img.dataset.galleryId;
+ GALLERY_IMGS[imgId] = img;
+ if (img.classList.contains("active")) {
+ SELECTED_GALLERY_IMG = img;
+ }
+ }
+ let thumbs = document.querySelectorAll(".gallery-thumb");
+ for (var i = 0; i < thumbs.length; i++) {
+ let thumb = thumbs[i];
+ let imgId = thumb.dataset.galleryId;
+ GALLERY_THUMBS[imgId] = thumb;
+ if (GALLERY_IMGS[imgId] == SELECTED_GALLERY_IMG) {
+ thumb.classList.add("active");
+ SELECTED_THUMB = thumb;
+ }
+ thumb.addEventListener("click", event => {
+ switchToImage(imgId);
+ });
+ }
+}
+function switchToImage(imgId) {
+ let selected = SELECTED_GALLERY_IMG;
+ let selectedThumb = SELECTED_THUMB;
+ let newSelected = GALLERY_IMGS[imgId];
+ let newSelectedThumb = GALLERY_THUMBS[imgId];
+ selected.classList.remove("active");
+ newSelected.classList.add("active");
+ selectedThumb.classList.remove("active");
+ newSelectedThumb.classList.add("active");
+ SELECTED_GALLERY_IMG = newSelected;
+ SELECTED_THUMB = newSelectedThumb;
+}
+function serverEntry(entry) {
+ return {
+ $template: "#server-entry-template",
+ entry: entry,
+ get statusData() {
+ return entry.statusData;
+ },
+ get address() {
+ return entry.address;
+ },
+ get roundStartedAgo() {
+ if (entry.statusData.round_start_time == null) {
+ return null;
+ }
+ let roundStart = Date.parse(entry.statusData.round_start_time);
+ let now = Date.now();
+ let diffMinutes = (now - roundStart) / 60000;
+ let diffFormatted = diffMinutes.toLocaleString("en-US", { maximumFractionDigits: 0 });
+ return `${diffFormatted} minute${diffFormatted == "1" ? "" : "s"}`;
+ }
+ };
+}
+const HomePageServerListSize = 5;
+const HomePageLanguageTag = "lang:en";
+function isServerListValid(server) {
+ var _a;
+ let tags = server.inferredTags.concat((_a = server.statusData.tags) !== null && _a !== void 0 ? _a : []);
+ for (let tag of tags) {
+ if (tag.startsWith(HomePageLanguageTag))
+ return true;
+ }
+ return false;
+}
+function shortServerList() {
+ return {
+ servers: [],
+ loading: true,
+ mounted() {
+ return __awaiter(this, void 0, void 0, function* () {
+ let servers = yield getServerList();
+ servers = servers.filter(isServerListValid);
+ servers.sort((a, b) => b.statusData.players - a.statusData.players);
+ servers = servers.slice(0, HomePageServerListSize);
+ this.servers = servers;
+ this.loading = false;
+ });
+ }
+ };
+}
+function setupServerList() {
+ createApp({
+ serverEntry,
+ shortServerList
+ }).mount("#home-servers");
+}
+whenReady(() => {
+ setupGallery();
+ setupServerList();
+});
diff --git a/js/hub_api.js b/js/hub_api.js
new file mode 100644
index 0000000..70927ef
--- /dev/null
+++ b/js/hub_api.js
@@ -0,0 +1,19 @@
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+};
+import { ensureOk } from "./util.js";
+const HubApiUrl = "https://central.spacestation14.io/hub/";
+export function getServerList() {
+ return __awaiter(this, void 0, void 0, function* () {
+ let response = yield fetch(`${HubApiUrl}api/servers`);
+ ensureOk(response);
+ let data = yield response.json();
+ return data;
+ });
+}
diff --git a/js/main.js b/js/main.js
new file mode 100644
index 0000000..618f710
--- /dev/null
+++ b/js/main.js
@@ -0,0 +1,35 @@
+import { whenReady } from "./util.js";
+function onLoaded() {
+ setupVideoIntersectionObserver();
+}
+function setupVideoIntersectionObserver() {
+ if (!('IntersectionObserver' in window)) {
+ return;
+ }
+ let observer = new IntersectionObserver(intersectionCallback);
+ let videos = document.querySelectorAll("video");
+ for (let i = 0; i < videos.length; i++) {
+ let video = videos[i];
+ if (video.paused && !video.autoplay) {
+ video.attributes["was-paused"] = true;
+ }
+ observer.observe(video);
+ }
+}
+function intersectionCallback(entries, observer) {
+ for (const entry of entries) {
+ let element = entry.target;
+ if (entry.isIntersecting) {
+ if (!element.attributes["was-paused"]) {
+ element.play();
+ }
+ }
+ else {
+ if (element.paused && !element.autoplay) {
+ element.attributes["was-paused"] = true;
+ }
+ element.pause();
+ }
+ }
+}
+whenReady(onLoaded);
diff --git a/js/main.min.js b/js/main.min.js
deleted file mode 100644
index 655b1ef..0000000
--- a/js/main.min.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";var SELECTED_GALLERY_IMG,SELECTED_THUMB,GALLERY_IMGS,GALLERY_THUMBS;function pick(a){return a[Math.floor(Math.random()*a.length)]}function onLoaded(){setupVideoIntersectionObserver(),setupGallery()}GALLERY_IMGS={},GALLERY_THUMBS={};function setupGallery(){for(var c=document.querySelectorAll(".gallery-img"),a=0,b,d,e,f;at in e?tt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var $=(e,t,n)=>(nt(e,typeof t!="symbol"?t+"":t,n),n);function st(e,t){const n=Object.create(null),s=e.split(",");for(let r=0;r!!n[r.toLowerCase()]:r=>!!n[r]}function de(e){if(y(e)){const t={};for(let n=0;n{if(n){const s=n.split(ot);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function me(e){let t="";if(N(e))t=e;else if(y(e))for(let n=0;nI(n,t))}const lt=Object.assign,ft=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},at=Object.prototype.hasOwnProperty,U=(e,t)=>at.call(e,t),y=Array.isArray,Y=e=>ye(e)==="[object Map]",ge=e=>e instanceof Date,N=e=>typeof e=="string",Q=e=>typeof e=="symbol",S=e=>e!==null&&typeof e=="object",ut=Object.prototype.toString,ye=e=>ut.call(e),pt=e=>ye(e).slice(8,-1),X=e=>N(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,be=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},ht=/-(\w)/g,dt=be(e=>e.replace(ht,(t,n)=>n?n.toUpperCase():"")),mt=/\B([A-Z])/g,xe=be(e=>e.replace(mt,"-$1").toLowerCase()),gt=(e,t)=>!Object.is(e,t),ve=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let yt;function we(e,t){t=t||yt,t&&t.active&&t.effects.push(e)}const _e=e=>{const t=new Set(e);return t.w=0,t.n=0,t},Ee=e=>(e.w&O)>0,$e=e=>(e.n&O)>0,bt=({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let n=0;for(let s=0;s0?z[t-1]:void 0}}stop(){this.active&&(Oe(this),this.onStop&&this.onStop(),this.active=!1)}}function Oe(e){const{deps:t}=e;if(t.length){for(let n=0;n{(f==="length"||f>=s)&&o.push(l)});else switch(n!==void 0&&o.push(c.get(n)),t){case"add":y(e)?X(n)&&o.push(c.get("length")):(o.push(c.get(W)),Y(e)&&o.push(c.get(Se)));break;case"delete":y(e)||(o.push(c.get(W)),Y(e)&&o.push(c.get(Se)));break;case"set":Y(e)&&o.push(c.get(W));break}if(o.length===1)o[0]&&Te(o[0]);else{const l=[];for(const f of o)f&&l.push(...f);Te(_e(l))}}function Te(e,t){for(const n of y(e)?e:[...e])(n!==C||n.allowRecurse)&&(n.scheduler?n.scheduler():n.run())}const kt=st("__proto__,__v_isRef,__isVue"),Ae=new Set(Object.getOwnPropertyNames(Symbol).map(e=>Symbol[e]).filter(Q)),Tt=Me(),At=Me(!0),Re=Rt();function Rt(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const s=j(this);for(let i=0,c=this.length;i{e[t]=function(...n){Et();const s=j(this)[t].apply(this,n);return ke(),s}}),e}function Me(e=!1,t=!1){return function(s,r,i){if(r==="__v_isReactive")return!e;if(r==="__v_isReadonly")return e;if(r==="__v_raw"&&i===(e?t?zt:je:t?Bt:Ce).get(s))return s;const c=y(s);if(!e&&c&&U(Re,r))return Reflect.get(Re,r,i);const o=Reflect.get(s,r,i);return(Q(r)?Ae.has(r):kt(r))||(e||F(s,"get",r),t)?o:re(o)?!c||!X(r)?o.value:o:S(o)?e?Ht(o):D(o):o}}const Mt=Ct();function Ct(e=!1){return function(n,s,r,i){let c=n[s];if(!e&&!Lt(r)&&(r=j(r),c=j(c),!y(n)&&re(c)&&!re(r)))return c.value=r,!0;const o=y(n)&&X(s)?Number(s)Wt.then(e),Ie=e=>{q.includes(e)||q.push(e),oe||(oe=!0,V(Ft))},Ft=()=>{for(const e of q)e();q.length=0,oe=!1},qt=/^(spellcheck|draggable|form|list|type)$/,ie=({el:e,get:t,effect:n,arg:s,modifiers:r})=>{let i;s==="class"&&(e._class=e.className),n(()=>{let c=t();if(s)(r==null?void 0:r.camel)&&(s=dt(s)),ce(e,s,c,i);else{for(const o in c)ce(e,o,c[o],i&&i[o]);for(const o in i)(!c||!(o in c))&&ce(e,o,null)}i=c})},ce=(e,t,n,s)=>{if(t==="class")e.setAttribute("class",me(e._class?[e._class,n]:n)||"");else if(t==="style"){n=de(n);const{style:r}=e;if(!n)e.removeAttribute("style");else if(N(n))n!==s&&(r.cssText=n);else{for(const i in n)le(r,i,n[i]);if(s&&!N(s))for(const i in s)n[i]==null&&le(r,i,"")}}else!(e instanceof SVGElement)&&t in e&&!qt.test(t)?(e[t]=n,t==="value"&&(e._value=n)):t==="true-value"?e._trueValue=n:t==="false-value"?e._falseValue=n:n!=null?e.setAttribute(t,n):e.removeAttribute(t)},Ne=/\s*!important$/,le=(e,t,n)=>{y(n)?n.forEach(s=>le(e,t,s)):t.startsWith("--")?e.setProperty(t,n):Ne.test(n)?e.setProperty(xe(t),n.replace(Ne,""),"important"):e[t]=n},k=(e,t)=>{const n=e.getAttribute(t);return n!=null&&e.removeAttribute(t),n},T=(e,t,n,s)=>{e.addEventListener(t,n,s)},Jt=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,Zt=["ctrl","shift","alt","meta"],Gt={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Zt.some(n=>e[`${n}Key`]&&!t[n])},Ke=({el:e,get:t,exp:n,arg:s,modifiers:r})=>{if(!s)return;let i=Jt.test(n)?t(`(e => ${n}(e))`):t(`($event => { ${n} })`);if(s==="vue:mounted"){V(i);return}else if(s==="vue:unmounted")return()=>i();if(r){s==="click"&&(r.right&&(s="contextmenu"),r.middle&&(s="mouseup"));const c=i;i=o=>{if(!("key"in o&&!(xe(o.key)in r))){for(const l in r){const f=Gt[l];if(f&&f(o,r))return}return c(o)}}}T(e,s,i,r)},Ut=({el:e,get:t,effect:n})=>{const s=e.style.display;n(()=>{e.style.display=t()?s:"none"})},Be=({el:e,get:t,effect:n})=>{n(()=>{e.textContent=ze(t())})},ze=e=>e==null?"":S(e)?JSON.stringify(e,null,2):String(e),Yt=({el:e,get:t,effect:n})=>{n(()=>{e.innerHTML=t()})},Qt=({el:e,exp:t,get:n,effect:s,modifiers:r})=>{const i=e.type,c=n(`(val) => { ${t} = val }`),{trim:o,number:l=i==="number"}=r||{};if(e.tagName==="SELECT"){const f=e;T(e,"change",()=>{const a=Array.prototype.filter.call(f.options,u=>u.selected).map(u=>l?ve(A(u)):A(u));c(f.multiple?a:a[0])}),s(()=>{const a=n(),u=f.multiple;for(let p=0,x=f.options.length;p-1:b.selected=a.has(v);else if(I(A(b),a)){f.selectedIndex!==p&&(f.selectedIndex=p);return}}!u&&f.selectedIndex!==-1&&(f.selectedIndex=-1)})}else if(i==="checkbox"){T(e,"change",()=>{const a=n(),u=e.checked;if(y(a)){const p=A(e),x=G(a,p),b=x!==-1;if(u&&!b)c(a.concat(p));else if(!u&&b){const v=[...a];v.splice(x,1),c(v)}}else c(De(e,u))});let f;s(()=>{const a=n();y(a)?e.checked=G(a,A(e))>-1:a!==f&&(e.checked=I(a,De(e,!0))),f=a})}else if(i==="radio"){T(e,"change",()=>{c(A(e))});let f;s(()=>{const a=n();a!==f&&(e.checked=I(a,A(e)))})}else{const f=a=>o?a.trim():l?ve(a):a;T(e,"compositionstart",Xt),T(e,"compositionend",en),T(e,(r==null?void 0:r.lazy)?"change":"input",()=>{e.composing||c(f(e.value))}),o&&T(e,"change",()=>{e.value=e.value.trim()}),s(()=>{if(e.composing)return;const a=e.value,u=n();document.activeElement===e&&f(a)===u||a!==u&&(e.value=u)})}},A=e=>"_value"in e?e._value:e.value,De=(e,t)=>{const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t},Xt=e=>{e.target.composing=!0},en=e=>{const t=e.target;t.composing&&(t.composing=!1,tn(t,"input"))},tn=(e,t)=>{const n=document.createEvent("HTMLEvents");n.initEvent(t,!0,!0),e.dispatchEvent(n)},Ve=Object.create(null),H=(e,t,n)=>He(e,`return(${t})`,n),He=(e,t,n)=>{const s=Ve[t]||(Ve[t]=nn(t));try{return s(e,n)}catch(r){console.error(r)}},nn=e=>{try{return new Function("$data","$el",`with($data){${e}}`)}catch(t){return console.error(`${t.message} in expression: ${e}`),()=>{}}},sn=({el:e,ctx:t,exp:n,effect:s})=>{V(()=>s(()=>He(t.scope,n,e)))},rn={bind:ie,on:Ke,show:Ut,text:Be,html:Yt,model:Qt,effect:sn},on=(e,t,n)=>{const s=e.parentElement,r=new Comment("v-if");s.insertBefore(r,e);const i=[{exp:t,el:e}];let c,o;for(;(c=e.nextElementSibling)&&(o=null,k(c,"v-else")===""||(o=k(c,"v-else-if")));)s.removeChild(c),i.push({exp:o,el:c});const l=e.nextSibling;s.removeChild(e);let f,a=-1;const u=()=>{f&&(s.insertBefore(r,f.el),f.remove(),f=void 0)};return n.effect(()=>{for(let p=0;p{const s=t.match(cn);if(!s)return;const r=e.nextSibling,i=e.parentElement,c=new Text("");i.insertBefore(c,e),i.removeChild(e);const o=s[2].trim();let l=s[1].trim().replace(ln,"").trim(),f,a=!1,u,p,x="key",b=e.getAttribute(x)||e.getAttribute(x=":key")||e.getAttribute(x="v-bind:key");b&&(e.removeAttribute(x),x==="key"&&(b=JSON.stringify(b)));let v;(v=l.match(Le))&&(l=l.replace(Le,"").trim(),u=v[1].trim(),v[2]&&(p=v[2].trim())),(v=l.match(fn))&&(f=v[1].split(",").map(m=>m.trim()),a=l[0]==="[");let pe=!1,R,L,J;const et=m=>{const w=new Map,h=[];if(y(m))for(let d=0;d{const g={};f?f.forEach((M,E)=>g[M]=w[a?E:M]):g[l]=w,d?(u&&(g[u]=d),p&&(g[p]=h)):u&&(g[u]=h);const P=Ge(n,g),_=b?H(P.scope,b):h;return m.set(_,h),P.key=_,P},he=(m,w)=>{const h=new ue(e,m);return h.key=m.key,h.insert(i,w),h};return n.effect(()=>{const m=H(n.scope,o),w=J;if([L,J]=et(m),!pe)R=L.map(h=>he(h,c)),pe=!0;else{for(let _=0;_{let r;return s(()=>{const i=n();t[i]=e,r&&i!==r&&delete t[r],r=i}),()=>{r&&delete t[r]}},un=/^(?:v-|:|@)/,pn=/\.([\w-]+)/g;let fe=!1;const Fe=(e,t)=>{const n=e.nodeType;if(n===1){const s=e;if(s.hasAttribute("v-pre"))return;k(s,"v-cloak");let r;if(r=k(s,"v-if"))return on(s,r,t);if(r=k(s,"v-for"))return an(s,r,t);if((r=k(s,"v-scope"))||r===""){const o=r?H(t.scope,r):{};t=Ge(t,o),o.$template&&hn(s,o.$template)}const i=k(s,"v-once")!=null;i&&(fe=!0),(r=k(s,"ref"))&&ae(s,We,`"${r}"`,t),qe(s,t);const c=[];for(const{name:o,value:l}of[...s.attributes])un.test(o)&&o!=="v-cloak"&&(o==="v-model"?c.unshift([o,l]):o[0]==="@"||/^v-on\b/.test(o)?c.push([o,l]):Je(s,o,l,t));for(const[o,l]of c)Je(s,o,l,t);i&&(fe=!1)}else if(n===3){const s=e.data;if(s.includes(t.delimiters[0])){let r=[],i=0,c;for(;c=t.delimitersRE.exec(s);){const o=s.slice(i,c.index);o&&r.push(JSON.stringify(o)),r.push(`$s(${c[1]})`),i=c.index+c[0].length}i{let n=e.firstChild;for(;n;)n=Fe(n,t)||n.nextSibling},Je=(e,t,n,s)=>{let r,i,c;if(t=t.replace(pn,(o,l)=>((c||(c={}))[l]=!0,"")),t[0]===":")r=ie,i=t.slice(1);else if(t[0]==="@")r=Ke,i=t.slice(1);else{const o=t.indexOf(":"),l=o>0?t.slice(2,o):t.slice(2);r=rn[l]||s.dirs[l],i=o>0?t.slice(o+1):void 0}r&&(r===ie&&i==="ref"&&(r=We),ae(e,r,n,s,i,c),e.removeAttribute(t))},ae=(e,t,n,s,r,i)=>{const c=t({el:e,get:(o=n)=>H(s.scope,o,e),effect:s.effect,ctx:s,exp:n,arg:r,modifiers:i});c&&s.cleanups.push(c)},hn=(e,t)=>{if(t[0]==="#"){const n=document.querySelector(t);e.appendChild(n.content.cloneNode(!0));return}e.innerHTML=t},Ze=e=>{const t={delimiters:["{{","}}"],delimitersRE:/\{\{([^]+?)\}\}/g,...e,scope:e?e.scope:D({}),dirs:e?e.dirs:{},effects:[],blocks:[],cleanups:[],effect:n=>{if(fe)return Ie(n),n;const s=wt(n,{scheduler:()=>Ie(s)});return t.effects.push(s),s}};return t},Ge=(e,t={})=>{const n=e.scope,s=Object.create(n);Object.defineProperties(s,Object.getOwnPropertyDescriptors(t)),s.$refs=Object.create(n.$refs);const r=D(new Proxy(s,{set(i,c,o,l){return l===r&&!i.hasOwnProperty(c)?Reflect.set(n,c,o):Reflect.set(i,c,o,l)}}));return Ue(r),{...e,scope:r}},Ue=e=>{for(const t of Object.keys(e))typeof e[t]=="function"&&(e[t]=e[t].bind(e))};class ue{constructor(t,n,s=!1){$(this,"template");$(this,"ctx");$(this,"key");$(this,"parentCtx");$(this,"isFragment");$(this,"start");$(this,"end");this.isFragment=t instanceof HTMLTemplateElement,s?this.template=t:this.isFragment?this.template=t.content.cloneNode(!0):this.template=t.cloneNode(!0),s?this.ctx=n:(this.parentCtx=n,n.blocks.push(this),this.ctx=Ze(n)),Fe(this.template,this.ctx)}get el(){return this.start||this.template}insert(t,n=null){if(this.isFragment)if(this.start){let s=this.start,r;for(;s&&(r=s.nextSibling,t.insertBefore(s,n),s!==this.end);)s=r}else this.start=new Text(""),this.end=new Text(""),t.insertBefore(this.end,n),t.insertBefore(this.start,this.end),t.insertBefore(this.template,this.end);else t.insertBefore(this.template,n)}remove(){if(this.parentCtx&&ft(this.parentCtx.blocks,this),this.start){const t=this.start.parentNode;let n=this.start,s;for(;n&&(s=n.nextSibling,t.removeChild(n),n!==this.end);)n=s}else this.template.parentNode.removeChild(this.template);this.teardown()}teardown(){this.ctx.blocks.forEach(t=>{t.teardown()}),this.ctx.effects.forEach(_t),this.ctx.cleanups.forEach(t=>t())}}const Ye=e=>e.replace(/[-.*+?^${}()|[\]\/\\]/g,"\\$&"),Qe=e=>{const t=Ze();if(e&&(t.scope=D(e),Ue(t.scope),e.$delimiters)){const[s,r]=t.delimiters=e.$delimiters;t.delimitersRE=new RegExp(Ye(s)+"([^]+?)"+Ye(r),"g")}t.scope.$s=ze,t.scope.$nextTick=V,t.scope.$refs=Object.create(null);let n;return{directive(s,r){return r?(t.dirs[s]=r,this):t.dirs[s]},mount(s){if(typeof s=="string"&&(s=document.querySelector(s),!s))return;s=s||document.documentElement;let r;return s.hasAttribute("v-scope")?r=[s]:r=[...s.querySelectorAll("[v-scope]")].filter(i=>!i.matches("[v-scope] [v-scope]")),r.length||(r=[s]),n=r.map(i=>new ue(i,t,!0)),this},unmount(){n.forEach(s=>s.teardown())}}},Xe=document.currentScript;Xe&&Xe.hasAttribute("init")&&Qe().mount();export{Qe as createApp,V as nextTick,D as reactive};
diff --git a/page/1/index.html b/page/1/index.html
index aa3a295..febb6a2 100644
--- a/page/1/index.html
+++ b/page/1/index.html
@@ -1 +1,2 @@
-https://spacestation14.io/
\ No newline at end of file
+https://spacestation14.com/
+
\ No newline at end of file
diff --git a/page/2/index.html b/page/2/index.html
index b0a22d0..13a235d 100644
--- a/page/2/index.html
+++ b/page/2/index.html
@@ -1,10 +1,12 @@
-Space Station 14: Multiplayer Disaster Simulator - SS14
Disasters, enemies, and incompetence conspire to make each shift aboard the station a unique and hellish experience. Sign up today to explore intricate game mechanics and enjoy limitless player interaction!
Download now! Nanotrasen Inc. is not responsible for injury, death, or worse
Space Station 14 tells the story of an ordinary shift on a space station gone wrong. Immerse yourself into your role, tinker with detailed systems, and survive the chaos in this round-based multiplayer role playing game.
Your custom character can spawn as one of dozens of crew and enemy jobs, ranging from engineer to captain, or even a traitor, each with its own unique gear. Your duties guide you through rich interactions with complex mechanics, whether you're managing your inventory, setting up the reactor, or flushing yourself down the disposal tubes.
As disaster, incompetence, and sabotage strike the station, the tension rises - opening up emergent situations that force you to make hard choices. Will you patch up the medical bay after an asteroid punches a hole in it, or fight for control when the captain gets murdered by revolutionaries? Do you break out an unjustly imprisoned clown, or sit back at the bar and serve drinks without a care in the world?
The story of the station's collapse is in the hands of its players, and each round is an intense, immersive experience that will leave you wanting more.
SS14 is a remake of the cult classic Space Station 13 . The game is under active development and completely open source . Anybody can contribute, even you!
Updates Monday March 6, 2023 Remember when progress reports used to be released on time every month? Neither do we! PR39 covers November and December 2022.
Wednesday November 30, 2022 Oh yeah. We have a ton of huge changes like oldchat, machine upgrade improvements, playtime tracking, and more! We have some catching up to do, so this PR covers August through October 2022. As a consequence, we’ve gone insane skipped the Minor Changes.
Monday October 31, 2022 Better late than never, we’ll hopefully get back on track soon. (And if you’d like to help contribute, progress report writers are always welcome!)
See all posts
+
Space Station 14: Multiplayer Disaster Simulator - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Disasters, enemies, and incompetence conspire to make each shift aboard the station a unique and hellish experience. Sign up today to explore intricate game mechanics and enjoy limitless player interaction!
Download now! Nanotrasen Inc. is not responsible for injury, death, or worse
Space Station 14 tells the story of an ordinary shift on a space station gone wrong. Immerse yourself into your role, tinker with detailed systems, and survive the chaos in this round-based multiplayer role playing game.
Your custom character can spawn as one of dozens of crew and enemy jobs, ranging from engineer to captain, or even a traitor, each with its own unique gear. Your duties guide you through rich interactions with complex mechanics, whether you're managing your inventory, setting up the reactor, or flushing yourself down the disposal tubes.
As disaster, incompetence, and sabotage strike the station, the tension rises - opening up emergent situations that force you to make hard choices. Will you patch up the medical bay after an asteroid punches a hole in it, or fight for control when the captain gets murdered by revolutionaries? Do you break out an unjustly imprisoned clown, or sit back at the bar and serve drinks without a care in the world?
The story of the station's collapse is in the hands of its players, and each round is an intense, immersive experience that will leave you wanting more.
SS14 is a remake of the cult classic Space Station 13 . The game is under active development and completely open source . Anybody can contribute, even you!
\ No newline at end of file
+
News Monday March 6, 2023 Remember when progress reports used to be released on time every month? Neither do we! PR39 covers November and December 2022.
Wednesday November 30, 2022 Oh yeah. We have a ton of huge changes like oldchat, machine upgrade improvements, playtime tracking, and more! We have some catching up to do, so this PR covers August through October 2022. As a consequence, we’ve gone insane skipped the Minor Changes.
Monday October 31, 2022 Better late than never, we’ll hopefully get back on track soon. (And if you’d like to help contribute, progress report writers are always welcome!)
See all news
\ No newline at end of file
diff --git a/page/3/index.html b/page/3/index.html
index b0a22d0..13a235d 100644
--- a/page/3/index.html
+++ b/page/3/index.html
@@ -1,10 +1,12 @@
-
Space Station 14: Multiplayer Disaster Simulator - SS14
Disasters, enemies, and incompetence conspire to make each shift aboard the station a unique and hellish experience. Sign up today to explore intricate game mechanics and enjoy limitless player interaction!
Download now! Nanotrasen Inc. is not responsible for injury, death, or worse
Space Station 14 tells the story of an ordinary shift on a space station gone wrong. Immerse yourself into your role, tinker with detailed systems, and survive the chaos in this round-based multiplayer role playing game.
Your custom character can spawn as one of dozens of crew and enemy jobs, ranging from engineer to captain, or even a traitor, each with its own unique gear. Your duties guide you through rich interactions with complex mechanics, whether you're managing your inventory, setting up the reactor, or flushing yourself down the disposal tubes.
As disaster, incompetence, and sabotage strike the station, the tension rises - opening up emergent situations that force you to make hard choices. Will you patch up the medical bay after an asteroid punches a hole in it, or fight for control when the captain gets murdered by revolutionaries? Do you break out an unjustly imprisoned clown, or sit back at the bar and serve drinks without a care in the world?
The story of the station's collapse is in the hands of its players, and each round is an intense, immersive experience that will leave you wanting more.
SS14 is a remake of the cult classic Space Station 13 . The game is under active development and completely open source . Anybody can contribute, even you!
Updates Monday March 6, 2023 Remember when progress reports used to be released on time every month? Neither do we! PR39 covers November and December 2022.
Wednesday November 30, 2022 Oh yeah. We have a ton of huge changes like oldchat, machine upgrade improvements, playtime tracking, and more! We have some catching up to do, so this PR covers August through October 2022. As a consequence, we’ve gone insane skipped the Minor Changes.
Monday October 31, 2022 Better late than never, we’ll hopefully get back on track soon. (And if you’d like to help contribute, progress report writers are always welcome!)
See all posts
+
Space Station 14: Multiplayer Disaster Simulator - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Disasters, enemies, and incompetence conspire to make each shift aboard the station a unique and hellish experience. Sign up today to explore intricate game mechanics and enjoy limitless player interaction!
Download now! Nanotrasen Inc. is not responsible for injury, death, or worse
Space Station 14 tells the story of an ordinary shift on a space station gone wrong. Immerse yourself into your role, tinker with detailed systems, and survive the chaos in this round-based multiplayer role playing game.
Your custom character can spawn as one of dozens of crew and enemy jobs, ranging from engineer to captain, or even a traitor, each with its own unique gear. Your duties guide you through rich interactions with complex mechanics, whether you're managing your inventory, setting up the reactor, or flushing yourself down the disposal tubes.
As disaster, incompetence, and sabotage strike the station, the tension rises - opening up emergent situations that force you to make hard choices. Will you patch up the medical bay after an asteroid punches a hole in it, or fight for control when the captain gets murdered by revolutionaries? Do you break out an unjustly imprisoned clown, or sit back at the bar and serve drinks without a care in the world?
The story of the station's collapse is in the hands of its players, and each round is an intense, immersive experience that will leave you wanting more.
SS14 is a remake of the cult classic Space Station 13 . The game is under active development and completely open source . Anybody can contribute, even you!
\ No newline at end of file
+
News Monday March 6, 2023 Remember when progress reports used to be released on time every month? Neither do we! PR39 covers November and December 2022.
Wednesday November 30, 2022 Oh yeah. We have a ton of huge changes like oldchat, machine upgrade improvements, playtime tracking, and more! We have some catching up to do, so this PR covers August through October 2022. As a consequence, we’ve gone insane skipped the Minor Changes.
Monday October 31, 2022 Better late than never, we’ll hopefully get back on track soon. (And if you’d like to help contribute, progress report writers are always welcome!)
See all news
\ No newline at end of file
diff --git a/page/4/index.html b/page/4/index.html
index b0a22d0..13a235d 100644
--- a/page/4/index.html
+++ b/page/4/index.html
@@ -1,10 +1,12 @@
-
Space Station 14: Multiplayer Disaster Simulator - SS14
Disasters, enemies, and incompetence conspire to make each shift aboard the station a unique and hellish experience. Sign up today to explore intricate game mechanics and enjoy limitless player interaction!
Download now! Nanotrasen Inc. is not responsible for injury, death, or worse
Space Station 14 tells the story of an ordinary shift on a space station gone wrong. Immerse yourself into your role, tinker with detailed systems, and survive the chaos in this round-based multiplayer role playing game.
Your custom character can spawn as one of dozens of crew and enemy jobs, ranging from engineer to captain, or even a traitor, each with its own unique gear. Your duties guide you through rich interactions with complex mechanics, whether you're managing your inventory, setting up the reactor, or flushing yourself down the disposal tubes.
As disaster, incompetence, and sabotage strike the station, the tension rises - opening up emergent situations that force you to make hard choices. Will you patch up the medical bay after an asteroid punches a hole in it, or fight for control when the captain gets murdered by revolutionaries? Do you break out an unjustly imprisoned clown, or sit back at the bar and serve drinks without a care in the world?
The story of the station's collapse is in the hands of its players, and each round is an intense, immersive experience that will leave you wanting more.
SS14 is a remake of the cult classic Space Station 13 . The game is under active development and completely open source . Anybody can contribute, even you!
Updates Monday March 6, 2023 Remember when progress reports used to be released on time every month? Neither do we! PR39 covers November and December 2022.
Wednesday November 30, 2022 Oh yeah. We have a ton of huge changes like oldchat, machine upgrade improvements, playtime tracking, and more! We have some catching up to do, so this PR covers August through October 2022. As a consequence, we’ve gone insane skipped the Minor Changes.
Monday October 31, 2022 Better late than never, we’ll hopefully get back on track soon. (And if you’d like to help contribute, progress report writers are always welcome!)
See all posts
+
Space Station 14: Multiplayer Disaster Simulator - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Disasters, enemies, and incompetence conspire to make each shift aboard the station a unique and hellish experience. Sign up today to explore intricate game mechanics and enjoy limitless player interaction!
Download now! Nanotrasen Inc. is not responsible for injury, death, or worse
Space Station 14 tells the story of an ordinary shift on a space station gone wrong. Immerse yourself into your role, tinker with detailed systems, and survive the chaos in this round-based multiplayer role playing game.
Your custom character can spawn as one of dozens of crew and enemy jobs, ranging from engineer to captain, or even a traitor, each with its own unique gear. Your duties guide you through rich interactions with complex mechanics, whether you're managing your inventory, setting up the reactor, or flushing yourself down the disposal tubes.
As disaster, incompetence, and sabotage strike the station, the tension rises - opening up emergent situations that force you to make hard choices. Will you patch up the medical bay after an asteroid punches a hole in it, or fight for control when the captain gets murdered by revolutionaries? Do you break out an unjustly imprisoned clown, or sit back at the bar and serve drinks without a care in the world?
The story of the station's collapse is in the hands of its players, and each round is an intense, immersive experience that will leave you wanting more.
SS14 is a remake of the cult classic Space Station 13 . The game is under active development and completely open source . Anybody can contribute, even you!
\ No newline at end of file
+
News Monday March 6, 2023 Remember when progress reports used to be released on time every month? Neither do we! PR39 covers November and December 2022.
Wednesday November 30, 2022 Oh yeah. We have a ton of huge changes like oldchat, machine upgrade improvements, playtime tracking, and more! We have some catching up to do, so this PR covers August through October 2022. As a consequence, we’ve gone insane skipped the Minor Changes.
Monday October 31, 2022 Better late than never, we’ll hopefully get back on track soon. (And if you’d like to help contribute, progress report writers are always welcome!)
See all news
\ No newline at end of file
diff --git a/page/5/index.html b/page/5/index.html
index b0a22d0..13a235d 100644
--- a/page/5/index.html
+++ b/page/5/index.html
@@ -1,10 +1,12 @@
-
Space Station 14: Multiplayer Disaster Simulator - SS14
Disasters, enemies, and incompetence conspire to make each shift aboard the station a unique and hellish experience. Sign up today to explore intricate game mechanics and enjoy limitless player interaction!
Download now! Nanotrasen Inc. is not responsible for injury, death, or worse
Space Station 14 tells the story of an ordinary shift on a space station gone wrong. Immerse yourself into your role, tinker with detailed systems, and survive the chaos in this round-based multiplayer role playing game.
Your custom character can spawn as one of dozens of crew and enemy jobs, ranging from engineer to captain, or even a traitor, each with its own unique gear. Your duties guide you through rich interactions with complex mechanics, whether you're managing your inventory, setting up the reactor, or flushing yourself down the disposal tubes.
As disaster, incompetence, and sabotage strike the station, the tension rises - opening up emergent situations that force you to make hard choices. Will you patch up the medical bay after an asteroid punches a hole in it, or fight for control when the captain gets murdered by revolutionaries? Do you break out an unjustly imprisoned clown, or sit back at the bar and serve drinks without a care in the world?
The story of the station's collapse is in the hands of its players, and each round is an intense, immersive experience that will leave you wanting more.
SS14 is a remake of the cult classic Space Station 13 . The game is under active development and completely open source . Anybody can contribute, even you!
Updates Monday March 6, 2023 Remember when progress reports used to be released on time every month? Neither do we! PR39 covers November and December 2022.
Wednesday November 30, 2022 Oh yeah. We have a ton of huge changes like oldchat, machine upgrade improvements, playtime tracking, and more! We have some catching up to do, so this PR covers August through October 2022. As a consequence, we’ve gone insane skipped the Minor Changes.
Monday October 31, 2022 Better late than never, we’ll hopefully get back on track soon. (And if you’d like to help contribute, progress report writers are always welcome!)
See all posts
+
Space Station 14: Multiplayer Disaster Simulator - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Disasters, enemies, and incompetence conspire to make each shift aboard the station a unique and hellish experience. Sign up today to explore intricate game mechanics and enjoy limitless player interaction!
Download now! Nanotrasen Inc. is not responsible for injury, death, or worse
Space Station 14 tells the story of an ordinary shift on a space station gone wrong. Immerse yourself into your role, tinker with detailed systems, and survive the chaos in this round-based multiplayer role playing game.
Your custom character can spawn as one of dozens of crew and enemy jobs, ranging from engineer to captain, or even a traitor, each with its own unique gear. Your duties guide you through rich interactions with complex mechanics, whether you're managing your inventory, setting up the reactor, or flushing yourself down the disposal tubes.
As disaster, incompetence, and sabotage strike the station, the tension rises - opening up emergent situations that force you to make hard choices. Will you patch up the medical bay after an asteroid punches a hole in it, or fight for control when the captain gets murdered by revolutionaries? Do you break out an unjustly imprisoned clown, or sit back at the bar and serve drinks without a care in the world?
The story of the station's collapse is in the hands of its players, and each round is an intense, immersive experience that will leave you wanting more.
SS14 is a remake of the cult classic Space Station 13 . The game is under active development and completely open source . Anybody can contribute, even you!
\ No newline at end of file
+
News Monday March 6, 2023 Remember when progress reports used to be released on time every month? Neither do we! PR39 covers November and December 2022.
Wednesday November 30, 2022 Oh yeah. We have a ton of huge changes like oldchat, machine upgrade improvements, playtime tracking, and more! We have some catching up to do, so this PR covers August through October 2022. As a consequence, we’ve gone insane skipped the Minor Changes.
Monday October 31, 2022 Better late than never, we’ll hopefully get back on track soon. (And if you’d like to help contribute, progress report writers are always welcome!)
See all news
\ No newline at end of file
diff --git a/post/17-06-26-progress-report-1/index.html b/post/17-06-26-progress-report-1/index.html
index 4b35f43..68aa891 100644
--- a/post/17-06-26-progress-report-1/index.html
+++ b/post/17-06-26-progress-report-1/index.html
@@ -1,3 +1,5 @@
-
Progress Report #1: Revive - SS14
Progress Report #1: Revive Contributed by PJB3005 Monday June 26, 2017 You’re reading this on the new website for SS14! After lots of hard work with CSS , the website is ready to recieve progress reports and other news.
The website is hosted entirely from GitHub pages, which means it’s fast, reliable and secure, with zero cost to us (except for designing and writing it). It’s completely static server side, and generated with Hugo , an excellent tool for making static sites like this. Adding a page is as simple as making a new markdown file with title, and date and building it. Easy as that!
The code for the website can be found here . Which is also where commits will go for new blog posts.
Progress! Now, since this is the first blog post on the site, I want to give a quick run down of the status of SS14 since the last progress report made in March by Silvertorch5 on /r/ss14 .
The project has been revived pretty heavily. We’ve already refactored everything over a couple times by now. There’s a whole bunch of new developers (including me!) and we’re ready to take this remake on head first.
We’re retargeting the main repo to be a more “bare engine” sort of deal. There will not be a lot of content in it (excluding debug content). All of this content will be loaded from an external set of files that can be loaded on a per server basis, thus ensuring that players only need one client for every server. We’ve made a repo for a “base” set of content that other repos can branch off here . In general most of the work is focused on getting this functional so we can start hitting clowns with toolboxes.
Lots of assorted refactors that touch the entire project have been made to allow us to pave the way for a more easy development environment, content and main engine. The repo was pretty bad organizational a few weeks ago, but a couple large refactors later and it’s already lots more manageable, and we can actually start putting in serious work now.
For example, previously the project was a giant mess that didn’t even conform to the same programming paradigms, this:
SS14.Client
SS14.Client.Graphics
SS14.Client.Services
SS14.Client.GameObjects
SS14.Client.Interfaces
SS14.Server
SS14.Server.Services
SS14.Server.GameObjects
SS14.Server.Interfaces
SS14.Shared
SS14.Shared.GameObjects
SS14.Shared.IoC
This was a giant mess in more ways than I can explain with that small list. Now it looks like this:
SS14.Client
SS14.Client.Graphics
, but Silver is in the process of removing this one too.SS14.Server
SS14.Shared
Hooray for clean up!
And that’s just the biggest elephant in the room! We’re fixing systems, discussing design targets, documented the code that’s undocumented. We’re working on setting up a proper project management board to allow us to easily delegate tasks and go “here’s a list of things we can work on right now. Pick something you like!”. This is still a bit off, but when it’s done it’ll be in the next progress report I guarantee you. This project management board will be extremely helpful to allow us to make these progress reports more easily in the future, too!
So for more stuff to report:
Sood has been working on IPv6 networking and updating the years out of date version of Lidgren.Network in our code. Sadly Lidgren isn’t being updated anymore, but it’s still highly reliable. We are talking about moving to an alternative, LiteNetLib, as a very long term goal, because of obvious maintenance issues with Lidgren (IPv6 support is through an unmerged old PR on the Lidgren repo.) Sood helped redo all the EOLs to be LF (UNIX). I now have the most line changes of any single person on the repo and I don’t deserve it. Silvertorch5 continues working on RobustEngine, the name we debubbed for the rendering engine that will be powering the client. As much as it is demotivating, SFML was a giant terrible mistake, a BYOND level mistake, but giving up isn’t the solution, shit happens. A fancy splash screen, a joint project between me, Silver and PsyKzz. [Check it out](/images/post/pr_1/splash" >}} All around performance improvements. Tons of general bug fixes for things that get in the way even when you’re developing the engine. Set up automatic code anlysis to catch bugs and yell at us. Better support for non-Windows operating systems all around. Acruid is moving the config system to TOML, a proper config file format, instead of XML. On the front end “developer experience” side of things, we’ve decided on a new YAML prototyping system for entities. Code will still be in C# (but dynamically loaded). The result is it’ll still be extremely fast, type safe, and easy to develop on both client and server. See this file for an example of what it looks like now. However picking a fine line between these and other PRs is kind of hard, so if you want to see every PR merged recently, here you go .
I can assure you: SS14 is not dead. And we’re gonna finish this.
\ No newline at end of file
+
Progress Report #1: Revive - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Progress Report #1: Revive Contributed by PJB3005 Monday June 26, 2017 You’re reading this on the new website for SS14! After lots of hard work with CSS , the website is ready to recieve progress reports and other news.
The website is hosted entirely from GitHub pages, which means it’s fast, reliable and secure, with zero cost to us (except for designing and writing it). It’s completely static server side, and generated with Hugo , an excellent tool for making static sites like this. Adding a page is as simple as making a new markdown file with title, and date and building it. Easy as that!
The code for the website can be found here . Which is also where commits will go for new blog posts.
Progress! Now, since this is the first blog post on the site, I want to give a quick run down of the status of SS14 since the last progress report made in March by Silvertorch5 on /r/ss14 .
The project has been revived pretty heavily. We’ve already refactored everything over a couple times by now. There’s a whole bunch of new developers (including me!) and we’re ready to take this remake on head first.
We’re retargeting the main repo to be a more “bare engine” sort of deal. There will not be a lot of content in it (excluding debug content). All of this content will be loaded from an external set of files that can be loaded on a per server basis, thus ensuring that players only need one client for every server. We’ve made a repo for a “base” set of content that other repos can branch off here . In general most of the work is focused on getting this functional so we can start hitting clowns with toolboxes.
Lots of assorted refactors that touch the entire project have been made to allow us to pave the way for a more easy development environment, content and main engine. The repo was pretty bad organizational a few weeks ago, but a couple large refactors later and it’s already lots more manageable, and we can actually start putting in serious work now.
For example, previously the project was a giant mess that didn’t even conform to the same programming paradigms, this:
SS14.Client
SS14.Client.Graphics
SS14.Client.Services
SS14.Client.GameObjects
SS14.Client.Interfaces
SS14.Server
SS14.Server.Services
SS14.Server.GameObjects
SS14.Server.Interfaces
SS14.Shared
SS14.Shared.GameObjects
SS14.Shared.IoC
This was a giant mess in more ways than I can explain with that small list. Now it looks like this:
SS14.Client
SS14.Client.Graphics
, but Silver is in the process of removing this one too.SS14.Server
SS14.Shared
Hooray for clean up!
And that’s just the biggest elephant in the room! We’re fixing systems, discussing design targets, documented the code that’s undocumented. We’re working on setting up a proper project management board to allow us to easily delegate tasks and go “here’s a list of things we can work on right now. Pick something you like!”. This is still a bit off, but when it’s done it’ll be in the next progress report I guarantee you. This project management board will be extremely helpful to allow us to make these progress reports more easily in the future, too!
So for more stuff to report:
Sood has been working on IPv6 networking and updating the years out of date version of Lidgren.Network in our code. Sadly Lidgren isn’t being updated anymore, but it’s still highly reliable. We are talking about moving to an alternative, LiteNetLib, as a very long term goal, because of obvious maintenance issues with Lidgren (IPv6 support is through an unmerged old PR on the Lidgren repo.) Sood helped redo all the EOLs to be LF (UNIX). I now have the most line changes of any single person on the repo and I don’t deserve it. Silvertorch5 continues working on RobustEngine, the name we debubbed for the rendering engine that will be powering the client. As much as it is demotivating, SFML was a giant terrible mistake, a BYOND level mistake, but giving up isn’t the solution, shit happens. A fancy splash screen, a joint project between me, Silver and PsyKzz. [Check it out](/images/post/pr_1/splash" >}} All around performance improvements. Tons of general bug fixes for things that get in the way even when you’re developing the engine. Set up automatic code anlysis to catch bugs and yell at us. Better support for non-Windows operating systems all around. Acruid is moving the config system to TOML, a proper config file format, instead of XML. On the front end “developer experience” side of things, we’ve decided on a new YAML prototyping system for entities. Code will still be in C# (but dynamically loaded). The result is it’ll still be extremely fast, type safe, and easy to develop on both client and server. See this file for an example of what it looks like now. However picking a fine line between these and other PRs is kind of hard, so if you want to see every PR merged recently, here you go .
I can assure you: SS14 is not dead. And we’re gonna finish this.
\ No newline at end of file
diff --git a/post/17-07-10-progress-report-2/index.html b/post/17-07-10-progress-report-2/index.html
index 13ad4d2..9f5d976 100644
--- a/post/17-07-10-progress-report-2/index.html
+++ b/post/17-07-10-progress-report-2/index.html
@@ -1,3 +1,5 @@
-
Progress report #2: Refactor Hell - SS14
Progress report #2: Refactor Hell Contributed by PJB3005 Monday July 10, 2017 The progress report took a bit to get here, because I uploaded #1 two days too late, and not a lot of substance for a report happened between then and when #2 should’ve happened. Not the case anymore though, got plenty to write about this time!
Not all work on a project like SS14 is direct coding. Sure it’s the most important, but we still have to organize the project, make contributions easy, write these reports and discuss how we’re gonna do things lest we turn into BYOND.
Organization On the organizational side of things, I’ve organized the Waffle board . I’ll explain how it works and how we’re using it:
The board is organized into a few columns. Each column can have issues on GitHub in it. That’s the general gist of it. The system we’re using is simple. We have 5 columns:
Backlog: for new issues that cannot be worked on, yet. Design and Discussion: for things that we’re discussing before going “this is ready to be implemented”. Ready: issues that can be worked on, but nobody is yet. Generally if you’re wondering “how can I help”, you can pick an issue from this list and work on it. Be sure to tell us when you do so we can assign it as … Work in Progress: All issues that somebody is working on are moved here. Done: things that are done. We keep this list around so we can review what was done since last progress report, and then flush it when the report is written. Hopefully this’ll make it more clear what we’re working on, and if you ever need something to work on we have a “what can I work on” column right there. It also makes my job (or maybe somebody else’s) with the progress reports much easier.
Discussions I’m not expecting most of you to watch GitHub closely, so I’m gonna make a summary of some important discussions that were had or are going on and you might want to chip into. Don’t be shy! Constructive criticism’s always welcome!
#248
: Establishing a good API for content . Being able to write content on at least a simple level is the big target for us to enter the “alpha” phase. We’re working on establishing a good API for things, such as common functions and types that are needed to write game logic.#261
: Tooling scripting language & build dependency . Being a complicated project makes it hard to just go “download project and hit compile”. We need scripts and alike to automate some build tasks. We nominated Python 3 for this seeing it’s cross platform and not exactly hard to install.#254
: Client / server replication . BYOND’s a thin client which is nice because being able to ignore netcode is nice. Problem is it’s also impratical because then you get a poorly responsive game like SS13. We need a well designed way to interact with the network that’s not too difficult or punishing.#256
: Our own DMI format . BYOND’s DMI format is surprisingly comfortable. It’s also proprietary and designed by a monkey, so is our own take on the concept a good idea?The Alpha Target The current target for alpha is as follows: a decent base we can build content on, like interaction, combat and other such basic SS13 features . We’ve set the end of July as the target for this. For this we’ve made a tracking milestone on GitHub here . A short list of a few important things we need to do for this:
Code Progress And finally we get to the most important bit of the report, what we actually did. I can bore you enough with what we want to do, but dreams aren’t exactly useful if we can’t put the work in. But we’re trying to prove we can. Nothing exciting yet though, just refactor hell .
#204
: Lidgren update, IPv6 . The age old version of the networking library we were using has been updated and we now have IPv6 support!We’ve refactored IoC another couple times, in steps. We’re at the point where I feel it’s pretty good for keeping the place organized. IoC is the very core of our project and it’s allowing us to organize everything. #253
: Unified config . The config system has been reworked entirely and changed to use TOML, a config file format that can be described as “a better INI”.#269
: Network System . Acruid’s been reworking the networking system, abstracting the network messages to make it so that the parsing and reading of network packets is in one place. This makes things much less error prone and easier to work with.Silver has been continuing work on RobustEngine. He gave himself a target for the end of the month for when we should be able to integrate it, which is nice. #271
: Fixes the license . Not sure whether we should be proud or not of the infamous goofball trying to shitpost on our repo already.That’s all for this week. Stay tuned for next week at which point we’ll probably have the content repo at least semi functional.
\ No newline at end of file
+
Progress report #2: Refactor Hell - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Progress report #2: Refactor Hell Contributed by PJB3005 Monday July 10, 2017 The progress report took a bit to get here, because I uploaded #1 two days too late, and not a lot of substance for a report happened between then and when #2 should’ve happened. Not the case anymore though, got plenty to write about this time!
Not all work on a project like SS14 is direct coding. Sure it’s the most important, but we still have to organize the project, make contributions easy, write these reports and discuss how we’re gonna do things lest we turn into BYOND.
Organization On the organizational side of things, I’ve organized the Waffle board . I’ll explain how it works and how we’re using it:
The board is organized into a few columns. Each column can have issues on GitHub in it. That’s the general gist of it. The system we’re using is simple. We have 5 columns:
Backlog: for new issues that cannot be worked on, yet. Design and Discussion: for things that we’re discussing before going “this is ready to be implemented”. Ready: issues that can be worked on, but nobody is yet. Generally if you’re wondering “how can I help”, you can pick an issue from this list and work on it. Be sure to tell us when you do so we can assign it as … Work in Progress: All issues that somebody is working on are moved here. Done: things that are done. We keep this list around so we can review what was done since last progress report, and then flush it when the report is written. Hopefully this’ll make it more clear what we’re working on, and if you ever need something to work on we have a “what can I work on” column right there. It also makes my job (or maybe somebody else’s) with the progress reports much easier.
Discussions I’m not expecting most of you to watch GitHub closely, so I’m gonna make a summary of some important discussions that were had or are going on and you might want to chip into. Don’t be shy! Constructive criticism’s always welcome!
#248
: Establishing a good API for content . Being able to write content on at least a simple level is the big target for us to enter the “alpha” phase. We’re working on establishing a good API for things, such as common functions and types that are needed to write game logic.#261
: Tooling scripting language & build dependency . Being a complicated project makes it hard to just go “download project and hit compile”. We need scripts and alike to automate some build tasks. We nominated Python 3 for this seeing it’s cross platform and not exactly hard to install.#254
: Client / server replication . BYOND’s a thin client which is nice because being able to ignore netcode is nice. Problem is it’s also impratical because then you get a poorly responsive game like SS13. We need a well designed way to interact with the network that’s not too difficult or punishing.#256
: Our own DMI format . BYOND’s DMI format is surprisingly comfortable. It’s also proprietary and designed by a monkey, so is our own take on the concept a good idea?The Alpha Target The current target for alpha is as follows: a decent base we can build content on, like interaction, combat and other such basic SS13 features . We’ve set the end of July as the target for this. For this we’ve made a tracking milestone on GitHub here . A short list of a few important things we need to do for this:
Code Progress And finally we get to the most important bit of the report, what we actually did. I can bore you enough with what we want to do, but dreams aren’t exactly useful if we can’t put the work in. But we’re trying to prove we can. Nothing exciting yet though, just refactor hell .
#204
: Lidgren update, IPv6 . The age old version of the networking library we were using has been updated and we now have IPv6 support!We’ve refactored IoC another couple times, in steps. We’re at the point where I feel it’s pretty good for keeping the place organized. IoC is the very core of our project and it’s allowing us to organize everything. #253
: Unified config . The config system has been reworked entirely and changed to use TOML, a config file format that can be described as “a better INI”.#269
: Network System . Acruid’s been reworking the networking system, abstracting the network messages to make it so that the parsing and reading of network packets is in one place. This makes things much less error prone and easier to work with.Silver has been continuing work on RobustEngine. He gave himself a target for the end of the month for when we should be able to integrate it, which is nice. #271
: Fixes the license . Not sure whether we should be proud or not of the infamous goofball trying to shitpost on our repo already.That’s all for this week. Stay tuned for next week at which point we’ll probably have the content repo at least semi functional.
\ No newline at end of file
diff --git a/post/17-07-25-progress-report-3/index.html b/post/17-07-25-progress-report-3/index.html
index c351f1e..97e59f1 100644
--- a/post/17-07-25-progress-report-3/index.html
+++ b/post/17-07-25-progress-report-3/index.html
@@ -1,6 +1,8 @@
-
Progress Report #3: Ending the pre-alpha - SS14
Progress Report #3: Ending the pre-alpha Contributed by PJB3005 Tuesday July 25, 2017 So stuff’s been quiet for the past 14 days. I can give you an annoying excuse or I can just accept that weekly progress reports aren’t working yet . As such progress reports will no longer be scheduled and done whenever we feel there’s something big to report , like today!
Pressuring ourselves to show progress is hard, especially when you’re taking ages on giant refactors that are boring but necessary.
So what actually happened for progress?
The end of pre-alpha The ComponentFamily
system was killed yesterday, this was the one final refactor that had to be done before we could get rolling on making a content assembly.
+
Progress Report #3: Ending the pre-alpha - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Progress Report #3: Ending the pre-alpha Contributed by PJB3005 Tuesday July 25, 2017 So stuff’s been quiet for the past 14 days. I can give you an annoying excuse or I can just accept that weekly progress reports aren’t working yet . As such progress reports will no longer be scheduled and done whenever we feel there’s something big to report , like today!
Pressuring ourselves to show progress is hard, especially when you’re taking ages on giant refactors that are boring but necessary.
So what actually happened for progress?
The end of pre-alpha The ComponentFamily
system was killed yesterday, this was the one final refactor that had to be done before we could get rolling on making a content assembly.
The system was used to reference components in an entity. Each “type” of component had its family, and two components with colliding family cannot be on an entity at the same time.
The primary problem was that you can’t extend an enum as far as I know, so it flat out prevented things from adding more components. It also made the entire components API a pain to use.
Both of those issues are from the past now.
We also removed most remaining “game” components like health systems. These will be moved to the content assembly once that’s up and running. This refactor ended up cutting out around 8,000 lines of code.
As for the systems loading the content assembly: Acruid’s working on that and he already reworked part of the resource manager so we can bundle things easily. Once this refactor is done the flood gate should be open to content, and the next few reports should be a lot more interesting to say the least.
And as always work on everything else has been continuing.
\ No newline at end of file
diff --git a/post/17-08-17-progress-report-4/index.html b/post/17-08-17-progress-report-4/index.html
index fe700f5..0a6ad50 100644
--- a/post/17-08-17-progress-report-4/index.html
+++ b/post/17-08-17-progress-report-4/index.html
@@ -1,56 +1,58 @@
-
Progress Report #4: Robust Content Framework - SS14
Progress Report #4: Robust Content Framework Contributed by PJB3005 Thursday August 17, 2017 It’s been a couple weeks since the last progress report, and lots has happened since then. Refactors, setting up the content repo, and more!
So here’s a fun bit of trivia, when we started the project to revive SS14, the project was at 45,000 lines of code. That was the middle of May. We’re now a few months later, and the we’re at 37,000 lines! Here’s a chart if you want to see it for yourself.
The original developers did not have a very modular idea for the project. Everything in one big project and writing the game and engine as one. A workable approach to game development for most projects. Sadly, SS13 is not one of
+
Progress Report #4: Robust Content Framework - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Progress Report #4: Robust Content Framework Contributed by PJB3005 Thursday August 17, 2017 It’s been a couple weeks since the last progress report, and lots has happened since then. Refactors, setting up the content repo, and more!
So here’s a fun bit of trivia, when we started the project to revive SS14, the project was at 45,000 lines of code. That was the middle of May. We’re now a few months later, and the we’re at 37,000 lines! Here’s a chart if you want to see it for yourself.
The original developers did not have a very modular idea for the project. Everything in one big project and writing the game and engine as one. A workable approach to game development for most projects. Sadly, SS13 is not one of
those, and we realized that.
The problem is something you might even forget about when you just play SS13 on a single server, or even multiple ones! Every server is different, and this is thanks to BYOND. You just hit connect and you don’t care what the server is doing on their end, as long as you can beat up the clown with the server’s most unique stylish weapons. The client has to download nothing but sprites, sounds and some other stuff, and the server handles everything. This has its pros and its cons. It ensures you’re never spreading viruses, makes it possible for Bay, Goon, TG, etc… to all be very different, and makes it easy to program your favorite new meme of an item. on the other hand, good luck doing advanced mouse movement responsively over a 100ms connection, things like lighting are server side and are too damn heavy, and so on.
We’re trying to get the best of both worlds here. The ease of programming simple things and keeping codebases possible, while keeping it simple and secure for the end user. No having to install different clients for specific servers.
-How do we pull this off? Glad you asked!
The Content Repo Ever since we “inherited” the project, this has been in the back of our heads . The plan is to have the base SS14 repo (space-wizards/space-station-14
) be the “engine”. This is the common program that most players and server hosts will be installing. Event loop, rendering, collision, asset management, entity management, the basic things you want no matter what. Along with that goes a second repo, the “content” repo: space-wizards/space-station-14-content
. What is in this repo? Well… a couple // TODO:
entry points, a test prototype and a few python scripts. Exciting!
Everything inside the content repo is something a codebase can change. Most stuff will eventually go in here, even fundamental things like item code, power and atmospherics! The content repo is, just like the main engine, written in C#, but due to the nature of .NET, other languages from Python to [F#](http://i.imgur.com/HqH8ktx" >}} and theoretically most things on this list should be possible, provided the codebase in question is up for rewriting everything.
The content repo is compiled into a .NET assembly (a block of code the game can load). This assembly gets loaded into the server on startup and client on connect, and as such you can swap server without having 20 clients installed.
So the past few months, a lot of code that’s more “game” level like gamemodes, jobs, items, … has been removed. That’s a lot of the cut lines, the rest being tons of unrelated duplicate and dead code that was no good anyways. If we happen to need any of this old code we can just check the Git history, although most of it was pretty crappy to begin with so I doubt we’ll miss it. Probably easier to write it from scratch.
We’ve gone through a lot of effort to make this work, from asset loading to IoC refactors, and it’s paying out, because it works :
What you are seeing here (other than my mouse cursor, apologies) is the first example of the content repo in use. It’s a crude “disco ball”, the color just changing with a hue shift over time. The code was terrible because I was in a hurry and there were various limitations in the engine that I’ve since fixed (couldn’t even load sprites from content, joy!), but here’s a more cleaned up version of the code. Note that the engine isn’t there yet , there’s still a bunch of refactors ahead, but this is generally what we want to have:
YAML entity prototype:
# This is an entity prototype.
- - type : entity
- id : discoball
- name : Disco Ball
- # Declare which C# class the entity will be.
- # This contains the logic in the next snippet.
- class : Content.Client.Prototypes.DiscoBall
- # Declare components: what the entity can do.
- components :
- - type : Transform
- - type : Clickable
- - type : Sprite
- sprites :
- - discoball
-
- # This entity has a light.
- # The color is changed by the C# code.
- - type : PointLight
-
And for the C# code:
using OpenTK ;
-using SS14.Client.GameObjects ;
-using SS14.Shared.GameObjects ;
-
-namespace Content.Client.Prototypes
-{
- public class DiscoBall : Entity
- {
- private float hue ;
- private PointLightComponent light ;
-
- public override void Initialize ()
- {
- // Fetch our light ahead of time to improve performance and make the code more readable.
- light = GetComponent < PointLightComponent >();
- }
-
- public override void Update ( float frameTime )
- {
- hue += frameTime / 10 ;
- if ( hue > 1 )
- {
- hue -= 1 ;
- }
-
- var color = Color4 . FromHsl ( new Vector4 ( hue , 0.5 , 0.5 , 1.0 ));
- light . SetColor ( color );
- }
- }
-}
-
Yes, it’s a little verbose, but it’s for the better. And if you want to go back and use Python instead, you can!
In the next few days we’ll probably start writing some simple content like maybe power in there, as it should be mostly possible already. We’ll finally get onto some exciting stuff that isn’t just “look what we refactored this week!”
Oh and by the way, servers like Goon and CM do not have to fear. We’ll do the best we can to ensure that the content repo server side can remain closed source. So have at it with that solarium!
2D or not 2D So as you may know from the old project, SS14 uses prerendered 3D sprites for humans.
+How do we pull this off? Glad you asked!
The Content Repo Ever since we “inherited” the project, this has been in the back of our heads . The plan is to have the base SS14 repo (space-wizards/space-station-14
) be the “engine”. This is the common program that most players and server hosts will be installing. Event loop, rendering, collision, asset management, entity management, the basic things you want no matter what. Along with that goes a second repo, the “content” repo: space-wizards/space-station-14-content
. What is in this repo? Well… a couple // TODO:
entry points, a test prototype and a few python scripts. Exciting!
Everything inside the content repo is something a codebase can change. Most stuff will eventually go in here, even fundamental things like item code, power and atmospherics! The content repo is, just like the main engine, written in C#, but due to the nature of .NET, other languages from Python to [F#](http://i.imgur.com/HqH8ktx" >}} and theoretically most things on this list should be possible, provided the codebase in question is up for rewriting everything.
The content repo is compiled into a .NET assembly (a block of code the game can load). This assembly gets loaded into the server on startup and client on connect, and as such you can swap server without having 20 clients installed.
So the past few months, a lot of code that’s more “game” level like gamemodes, jobs, items, … has been removed. That’s a lot of the cut lines, the rest being tons of unrelated duplicate and dead code that was no good anyways. If we happen to need any of this old code we can just check the Git history, although most of it was pretty crappy to begin with so I doubt we’ll miss it. Probably easier to write it from scratch.
We’ve gone through a lot of effort to make this work, from asset loading to IoC refactors, and it’s paying out, because it works :
What you are seeing here (other than my mouse cursor, apologies) is the first example of the content repo in use. It’s a crude “disco ball”, the color just changing with a hue shift over time. The code was terrible because I was in a hurry and there were various limitations in the engine that I’ve since fixed (couldn’t even load sprites from content, joy!), but here’s a more cleaned up version of the code. Note that the engine isn’t there yet , there’s still a bunch of refactors ahead, but this is generally what we want to have:
YAML entity prototype:
# This is an entity prototype.
+ - type : entity
+ id : discoball
+ name : Disco Ball
+ # Declare which C# class the entity will be.
+ # This contains the logic in the next snippet.
+ class : Content.Client.Prototypes.DiscoBall
+ # Declare components: what the entity can do.
+ components :
+ - type : Transform
+ - type : Clickable
+ - type : Sprite
+ sprites :
+ - discoball
+
+ # This entity has a light.
+ # The color is changed by the C# code.
+ - type : PointLight
+
And for the C# code:
using OpenTK ;
+using SS14.Client.GameObjects ;
+using SS14.Shared.GameObjects ;
+
+ namespace Content.Client.Prototypes
+{
+ public class DiscoBall : Entity
+ {
+ private float hue ;
+ private PointLightComponent light ;
+
+ public override void Initialize ()
+ {
+ // Fetch our light ahead of time to improve performance and make the code more readable.
+ light = GetComponent < PointLightComponent >();
+ }
+
+ public override void Update ( float frameTime )
+ {
+ hue += frameTime / 10 ;
+ if ( hue > 1 )
+ {
+ hue -= 1 ;
+ }
+
+ var color = Color4 . FromHsl ( new Vector4 ( hue , 0.5 , 0.5 , 1.0 ));
+ light . SetColor ( color );
+ }
+ }
+ }
+
Yes, it’s a little verbose, but it’s for the better. And if you want to go back and use Python instead, you can!
In the next few days we’ll probably start writing some simple content like maybe power in there, as it should be mostly possible already. We’ll finally get onto some exciting stuff that isn’t just “look what we refactored this week!”
Oh and by the way, servers like Goon and CM do not have to fear. We’ll do the best we can to ensure that the content repo server side can remain closed source. So have at it with that solarium!
2D or not 2D So as you may know from the old project, SS14 uses prerendered 3D sprites for humans.
This means that we have a 3D model, but the client never touches it.
The model gets rendered with all the items, clothes, etc… and saved as images into the resource pack.
All these images are loaded together. The theoretical result being that it’s much less demanding on the client because it’s still a 2D sprite, but we can make animations and such easily!
Except it’s not so simple.
diff --git a/post/17-10-21-nightly-builds-up-sorta/index.html b/post/17-10-21-nightly-builds-up-sorta/index.html
index d0ada68..22a045b 100644
--- a/post/17-10-21-nightly-builds-up-sorta/index.html
+++ b/post/17-10-21-nightly-builds-up-sorta/index.html
@@ -1,3 +1,5 @@
-
Nightly Builds Up! - SS14
\ No newline at end of file
+
Nightly Builds Up! - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
\ No newline at end of file
diff --git a/post/17-10-25-nightly-builds-up-properly/index.html b/post/17-10-25-nightly-builds-up-properly/index.html
index c05ae51..0c986cb 100644
--- a/post/17-10-25-nightly-builds-up-properly/index.html
+++ b/post/17-10-25-nightly-builds-up-properly/index.html
@@ -1,6 +1,8 @@
-
Nightly Builds Up (Properly!) - SS14
Nightly Builds Up (Properly!) Contributed by PJB3005 Wednesday October 25, 2017
Get your Windows, MacOS and Linux builds here!
UPDATE (2018/04/13): This page is now out of date, see the new page for instructions.
Thanks to the last post, me and silver got together again to set up a proper build system, using Jenkins.
+
Nightly Builds Up (Properly!) - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Nightly Builds Up (Properly!) Contributed by PJB3005 Wednesday October 25, 2017
Get your Windows, MacOS and Linux builds here!
UPDATE (2018/04/13): This page is now out of date, see the new page for instructions.
Thanks to the last post, me and silver got together again to set up a proper build system, using Jenkins.
This means the builds automatically update and they’re fancy and stuff.
In the last post I gave basically 0 explanation as to how to get the things running though.
So let’s write about that!
First, you’ll want to download the server and client binaries for your system.
Unzip them somewhere sane.
For Windows, it’s very easy. Just run both SS14.Client.exe
and SS14.Server.exe
directly and hit connect.
diff --git a/post/18-02-26-progress-report-5/index.html b/post/18-02-26-progress-report-5/index.html
index 828a596..e9cbc57 100644
--- a/post/18-02-26-progress-report-5/index.html
+++ b/post/18-02-26-progress-report-5/index.html
@@ -1,3 +1,5 @@
-
Progress Report #5: Waiting for Godot - SS14
Progress Report #5: Waiting for Godot Contributed by PJB3005 Monday February 26, 2018 So when was the last progress report made? November right?
Oh jeez.
So depending on whether or not you read our Discord, you either think SS14 is dead or Waiting for Godot . Luckily (?), we’re the latter!
Godot You may have heard of this open source game engine called Godot semi-recently. It’s a 100% free and open source engine that’s got quite a lot going for itself. Until recently they’ve been on 2.1, and while the engine was quite capable for 2D games (so I’ve heard) it was poorly documented, quite clunky and the 3D support was poor at best.
So their community of developers has been hard at work to make Godot 3, which improves the engine a ton . Actually I’m pretty sure ton doesn’t do it justice. Personally I first heard about the engine at all 6 months ago, due to this video:
VIDEO Just a month ago, Godot 3.0 left beta .
One really big feature (of many) in Godot 3 is support for C# through Mono. If you didn’t know what the Waiting for Godot memes were yet, you can see where this is going.
Waiting for Godot. So due to our decision to support 3D and 2D in SS13, we obviously would’ve needed to write our own OpenGL 3D renderer. This is of course very difficult and only Silver seemed to even have remotely the knowledge to do it. Hell Acruid wrote a textbook example 3D renderer and it didn’t work correctly on my iMac (I blame Apple for this).
So then when that certain video caught my eye claiming Mono support, oh boy.
At the very end of October, Godot 3 Alpha 2 was released with experimental C# support. At the beginning of December I started the godot
branch on GitHub to get the client running in Godot. I was debating how much we wanted to use Godot before this, but settled on using it for rendering, audio, input and GUI (Godot has an excellent GUI system).
3 months later, and we’re still waiting. Personally that’s because I’ve been quite busy due to IRL reasons recently. There is very little work left before we can finally kill the SFML branch at this point. Really I just need to set up automatic builds and fix the content hands GUI.
But hey let’s talk about the progress on the Godot branch!
As you can see: it works.
We are currently using Godot’s own GUI system. It’s completely wrapped using tons of code, but it’s one hell of a lot better than maintaining the old hacky GUI system. Screenshot!
I haven’t made any efforts to theme the GUI system much yet, so it’s mostly Godot’s own default GUI theme. Still better than the old mess:
Performance is much better than the SFML branch too. Though uh… on macOS it’s still highly lacking when lights are involved. This seems to be completely the fault of Apple’s ancient awful OpenGL drivers. Godot 3 uses GLES3.0 for rendering (although a GLES2.0 renderer is coming in Godot 3.1 to solve this, especially due to Android). Apple’s best supported OpenGL version is 4.1 (and it’s poor support at that), which is 8 years old now. It’s even worse in 3D, where Godot pretty much seems to choke the GPU and make the entire system slow from just rendering a single cube. Thanks Apple.
(Side note: just a few hours before writing this, Vulkan now runs on macOS thanks to MoltenVK being open sourced , and Godot’s renderer seems to be getting rewritten to Vulkan. There is hope for playing 2/3D spessmens on macOS.)
Also, I spent a few hours working with Godot’s 3D system to try importing the models from SS3D into Godot, and once I had a clue what I was doing I managed to get it at least imported at a basic level. this isn’t SS14 it’s just a test project, there’s no code for 3D in SS14 yet :
So yes. Godot is promising!
Power to the refactors So did Godot mean everything was put on hold and SS14 is dead? Nope! I’ve been working on Godot in a separate branch, so Acruid and Cluster continued of working on the rest of the game.
Cluster did a lot of work on the content repo. There’s a power network system with supply and demand. There’s no way to correctly visualize this yet, but that’s to come. There’s also an interaction system , and clicking wires with wirecutters is a simple interaction example that works. Woo!
Acruid has been working more engine-side. There’s now a proper transform parenting system ! This works pretty much the same as in say Unity or Godot, where an entity’s position is relative to the position of its parent. Practical examples of this would be making a shuttle’s grid an entity. This makes all entities parented to it be implicitly moved when the shuttle does, with little hassle or bugs.
Doesn’t stop there! We have mostly-fully fledged map saving ! It supports both saving an entire map (think of a map as a z-level in SS13), or storing individual grids of the map (station itself, the shuttle, etc…).
New logo So a while ago, we contacted Supernorn (the artist of the original Space Station 13 Remake project before it got open sourced) about the game’s logo source, and he gave us the original vector source files for it. Thanks! We applied duct tape for hilarity’s sake, and currently it looks like this in-game:
Injazz decided to bust out Inkscape and change the logo up. The colour is actually the blue from the Godot logo! (Remie’s idea), Here’s the new design:
\ No newline at end of file
+
Progress Report #5: Waiting for Godot - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Progress Report #5: Waiting for Godot Contributed by PJB3005 Monday February 26, 2018 So when was the last progress report made? November right?
Oh jeez.
So depending on whether or not you read our Discord, you either think SS14 is dead or Waiting for Godot . Luckily (?), we’re the latter!
Godot You may have heard of this open source game engine called Godot semi-recently. It’s a 100% free and open source engine that’s got quite a lot going for itself. Until recently they’ve been on 2.1, and while the engine was quite capable for 2D games (so I’ve heard) it was poorly documented, quite clunky and the 3D support was poor at best.
So their community of developers has been hard at work to make Godot 3, which improves the engine a ton . Actually I’m pretty sure ton doesn’t do it justice. Personally I first heard about the engine at all 6 months ago, due to this video:
VIDEO Just a month ago, Godot 3.0 left beta .
One really big feature (of many) in Godot 3 is support for C# through Mono. If you didn’t know what the Waiting for Godot memes were yet, you can see where this is going.
Waiting for Godot. So due to our decision to support 3D and 2D in SS13, we obviously would’ve needed to write our own OpenGL 3D renderer. This is of course very difficult and only Silver seemed to even have remotely the knowledge to do it. Hell Acruid wrote a textbook example 3D renderer and it didn’t work correctly on my iMac (I blame Apple for this).
So then when that certain video caught my eye claiming Mono support, oh boy.
At the very end of October, Godot 3 Alpha 2 was released with experimental C# support. At the beginning of December I started the godot
branch on GitHub to get the client running in Godot. I was debating how much we wanted to use Godot before this, but settled on using it for rendering, audio, input and GUI (Godot has an excellent GUI system).
3 months later, and we’re still waiting. Personally that’s because I’ve been quite busy due to IRL reasons recently. There is very little work left before we can finally kill the SFML branch at this point. Really I just need to set up automatic builds and fix the content hands GUI.
But hey let’s talk about the progress on the Godot branch!
As you can see: it works.
We are currently using Godot’s own GUI system. It’s completely wrapped using tons of code, but it’s one hell of a lot better than maintaining the old hacky GUI system. Screenshot!
I haven’t made any efforts to theme the GUI system much yet, so it’s mostly Godot’s own default GUI theme. Still better than the old mess:
Performance is much better than the SFML branch too. Though uh… on macOS it’s still highly lacking when lights are involved. This seems to be completely the fault of Apple’s ancient awful OpenGL drivers. Godot 3 uses GLES3.0 for rendering (although a GLES2.0 renderer is coming in Godot 3.1 to solve this, especially due to Android). Apple’s best supported OpenGL version is 4.1 (and it’s poor support at that), which is 8 years old now. It’s even worse in 3D, where Godot pretty much seems to choke the GPU and make the entire system slow from just rendering a single cube. Thanks Apple.
(Side note: just a few hours before writing this, Vulkan now runs on macOS thanks to MoltenVK being open sourced , and Godot’s renderer seems to be getting rewritten to Vulkan. There is hope for playing 2/3D spessmens on macOS.)
Also, I spent a few hours working with Godot’s 3D system to try importing the models from SS3D into Godot, and once I had a clue what I was doing I managed to get it at least imported at a basic level. this isn’t SS14 it’s just a test project, there’s no code for 3D in SS14 yet :
So yes. Godot is promising!
Power to the refactors So did Godot mean everything was put on hold and SS14 is dead? Nope! I’ve been working on Godot in a separate branch, so Acruid and Cluster continued of working on the rest of the game.
Cluster did a lot of work on the content repo. There’s a power network system with supply and demand. There’s no way to correctly visualize this yet, but that’s to come. There’s also an interaction system , and clicking wires with wirecutters is a simple interaction example that works. Woo!
Acruid has been working more engine-side. There’s now a proper transform parenting system ! This works pretty much the same as in say Unity or Godot, where an entity’s position is relative to the position of its parent. Practical examples of this would be making a shuttle’s grid an entity. This makes all entities parented to it be implicitly moved when the shuttle does, with little hassle or bugs.
Doesn’t stop there! We have mostly-fully fledged map saving ! It supports both saving an entire map (think of a map as a z-level in SS13), or storing individual grids of the map (station itself, the shuttle, etc…).
New logo So a while ago, we contacted Supernorn (the artist of the original Space Station 13 Remake project before it got open sourced) about the game’s logo source, and he gave us the original vector source files for it. Thanks! We applied duct tape for hilarity’s sake, and currently it looks like this in-game:
Injazz decided to bust out Inkscape and change the logo up. The colour is actually the blue from the Godot logo! (Remie’s idea), Here’s the new design:
\ No newline at end of file
diff --git a/post/18-04-13-progress-report-6/index.html b/post/18-04-13-progress-report-6/index.html
index 087cc86..99b07e4 100644
--- a/post/18-04-13-progress-report-6/index.html
+++ b/post/18-04-13-progress-report-6/index.html
@@ -1,3 +1,5 @@
-
Progress Report #6: Never say 'few' - SS14
Progress Report #6: Never say 'few' Contributed by PJB3005 Friday April 13, 2018 The wait is over.
Godot’s in So yes, Godot is in. I merged it 6 days ago .
Woo!
You can try the new builds with Godot by downloading the latest nightlies. See The this article for instructions .
But what does this bring?
The new stuff First of all, Godot brougth all the changes mentioned in the previous progress report. You can read about those here .
Cluster has added weapons to the content repo. Right now the tools act like melee weapons, there’s a projectile weapon and a laser weapon. It’s basic stuff right now. Sadly, melee weapons don’t have any visualization yet, but guns do:
(Yes we’re aware the bullets aren’t rotated)
Something else you might have heard is that we now have an audio system! . Before this PR there was literally 0 audio code in the game.
To render the laser beams, Cluster coded an effects system to draw things without entity . I had to re-do the rendering code thanks to Godot, but it was easy because Godot’s canvas renderer is quite powerful. The laser beams are actually rendered without lighting applied, which is one of many effects we will make much use of later.
\ No newline at end of file
+
Progress Report #6: Never say 'few' - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Progress Report #6: Never say 'few' Contributed by PJB3005 Friday April 13, 2018 The wait is over.
Godot’s in So yes, Godot is in. I merged it 6 days ago .
Woo!
You can try the new builds with Godot by downloading the latest nightlies. See The this article for instructions .
But what does this bring?
The new stuff First of all, Godot brougth all the changes mentioned in the previous progress report. You can read about those here .
Cluster has added weapons to the content repo. Right now the tools act like melee weapons, there’s a projectile weapon and a laser weapon. It’s basic stuff right now. Sadly, melee weapons don’t have any visualization yet, but guns do:
(Yes we’re aware the bullets aren’t rotated)
Something else you might have heard is that we now have an audio system! . Before this PR there was literally 0 audio code in the game.
To render the laser beams, Cluster coded an effects system to draw things without entity . I had to re-do the rendering code thanks to Godot, but it was easy because Godot’s canvas renderer is quite powerful. The laser beams are actually rendered without lighting applied, which is one of many effects we will make much use of later.
\ No newline at end of file
diff --git a/post/18-06-24-progress-report-7/index.html b/post/18-06-24-progress-report-7/index.html
index 2ddcd22..6095200 100644
--- a/post/18-06-24-progress-report-7/index.html
+++ b/post/18-06-24-progress-report-7/index.html
@@ -1,4 +1,6 @@
-
Progress Report #7: Visual - SS14
Progress Report #7: Visual Contributed by PJB3005 Sunday June 24, 2018 Fancy graphics and less fancy menus.
The Sprite Component Refactor (PJB) So when you want an entity to render on the map, you need a component that gives it a sprite. You’d think this is pretty simple, but this is how many sprite component variants there were in the main engine:
SpriteComponent
AnimatedSpriteComponent
WearableAnimatedSpriteComponent
ItemSpriteComponent
MobSpriteComponent
This was such an absolute mess. Nothing made sense and everything just used WearableAnimatedSpriteComponent
because it was easiest to put into a prototype, although the animations system never worked.
I’m sure all of this worked at some point, but horrendously poorly, and awfully thought out. Because item code and such isn’t in the main engine anymore (thank god), That leaves us with two component that actually matter: SpriteComponent
and AnimatedSpriteComponent
. You’ll note that in say BYOND, there’s no distinction, so these should just be merged.
The APIs were also horrible, and they couldn’t be controlled from the server, which was also a major pain point.
I killed off all except SpriteComponent
already in the Godot refactor, because they were too painful to maintain. No, there was no loss of features.
So, what does the new system do?
Sprites are made of multiple layers. Same deal as overlays in BYOND. Layers can even have custom scaling and rotation.Animation Support. Pretty self explanatory really.Shader support! Each layer of a sprite component can have its own shader applied, which means you can do some fun stuff!Shaders So you might’ve heard the word “shader” used as a fancy way to say dude fancy graphics. Which yes, is one of the many things they’re used for. BYOND never really supported this, only giving you specific presets like color matrices and 512’s simple filters. Luckily, Godot was not desiged at the turn of the millenium, so we can write our own fancy graphics!
The first example is allowing specific layers to be exempt from lighting. This is an amazing graphical detail, which makes things like computers look incredible:
This effect is nigh-impossible to do correctly in BYOND. SS13 codebases like Paradise have attempted this, but due to layering you’ll always get issues when somebody moves on top of the computer. There may be some hacky way to get it to work perfectly, but it’d be so much effort I’m not bothering to try it.
This was actually already an idea of the original remake crew, a whole 6 years ago. So I’m glad to finally see it in action properly.
Now…
dude fancy graphics.
Outlines (PJB) In SS13, clicking on an object is pixel perfect. There are many problems with this:
Pixel hunting when trying to pick up thin/small objects like wire coils. People picking smaller borg sprites so hitting them is harder. Sadly, BYOND can’t do better. Thanks BYOND.
In SS14, we decided to not use this system. Objects have a click bounding box, and it works quite well, room for improvement of course, but still. To properly visualize what you’ll click on, the object you’d click on is now highlighted:
An Actual Map (PJB) Ever since we started adding stuff to content, nobody is directly developing against the standalone engine anymore. This is absolutely fine. What’s annoying was that the map was still on the engine, so we couldn’t use content things on it. After fixing the placement code to allow me to make a new grid and other shenanigans, I made an entirely new map and put it on the repo. It has a bunch of things like items and a simplistic power grid.
Yes, the lights shut off automatically when the power grid dies.
Welcome to stationstation.yml
Linux & Mac Builds Up (PJB) I finally went and got Linux and macOS builds to work again. The Linux builds are actually tested this time around. Get ‘em here.
Inventories (Clusterfack) Cluster reworked the inventory system and it now has some basic GUI and stuff like slots. Definitely not winning any awards but we gotta start somewhere.
Power (Clusterfack + PJB) We have a power system now! It took an iteration or two, but we’re quite happy where it’s at now. We got batteries, consumers, APCs, generators, … The system is intelligent about power usage, and Watts/Joules are correctly defined.
A big difference from SS13’s system is that energy drain is handled by the power network, not the invidual machines. You see, in SS13, each machine told the powernet “hey I took 200 energy (no, there’s no unit specified, Bay probably did by now but not traditionally) this tick”. First of all, this was prone as hell to race conditions and network drain is completely unpredictabble. Secondly, “an amount of energy” isn’t even how energy works. Realistically, when a machine turns on it increases its power usage for that duration. For giant power hogs like a teleporter, you’d have giant capacitor banks and superconducting wire capable of discharging their energy in a fraction of a second to power some sci-fi machinery.
Visualization for the power system exists, but it’s not great. Lights turn on and off, the rest you’ll have to check through a debug tool.
Entity Netcode Optimizations (PJB) So the “main” netcode for entities is made up of two parts: game state and messages.
+
Progress Report #7: Visual - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Progress Report #7: Visual Contributed by PJB3005 Sunday June 24, 2018 Fancy graphics and less fancy menus.
The Sprite Component Refactor (PJB) So when you want an entity to render on the map, you need a component that gives it a sprite. You’d think this is pretty simple, but this is how many sprite component variants there were in the main engine:
SpriteComponent
AnimatedSpriteComponent
WearableAnimatedSpriteComponent
ItemSpriteComponent
MobSpriteComponent
This was such an absolute mess. Nothing made sense and everything just used WearableAnimatedSpriteComponent
because it was easiest to put into a prototype, although the animations system never worked.
I’m sure all of this worked at some point, but horrendously poorly, and awfully thought out. Because item code and such isn’t in the main engine anymore (thank god), That leaves us with two component that actually matter: SpriteComponent
and AnimatedSpriteComponent
. You’ll note that in say BYOND, there’s no distinction, so these should just be merged.
The APIs were also horrible, and they couldn’t be controlled from the server, which was also a major pain point.
I killed off all except SpriteComponent
already in the Godot refactor, because they were too painful to maintain. No, there was no loss of features.
So, what does the new system do?
Sprites are made of multiple layers. Same deal as overlays in BYOND. Layers can even have custom scaling and rotation.Animation Support. Pretty self explanatory really.Shader support! Each layer of a sprite component can have its own shader applied, which means you can do some fun stuff!Shaders So you might’ve heard the word “shader” used as a fancy way to say dude fancy graphics. Which yes, is one of the many things they’re used for. BYOND never really supported this, only giving you specific presets like color matrices and 512’s simple filters. Luckily, Godot was not desiged at the turn of the millenium, so we can write our own fancy graphics!
The first example is allowing specific layers to be exempt from lighting. This is an amazing graphical detail, which makes things like computers look incredible:
This effect is nigh-impossible to do correctly in BYOND. SS13 codebases like Paradise have attempted this, but due to layering you’ll always get issues when somebody moves on top of the computer. There may be some hacky way to get it to work perfectly, but it’d be so much effort I’m not bothering to try it.
This was actually already an idea of the original remake crew, a whole 6 years ago. So I’m glad to finally see it in action properly.
Now…
dude fancy graphics.
Outlines (PJB) In SS13, clicking on an object is pixel perfect. There are many problems with this:
Pixel hunting when trying to pick up thin/small objects like wire coils. People picking smaller borg sprites so hitting them is harder. Sadly, BYOND can’t do better. Thanks BYOND.
In SS14, we decided to not use this system. Objects have a click bounding box, and it works quite well, room for improvement of course, but still. To properly visualize what you’ll click on, the object you’d click on is now highlighted:
An Actual Map (PJB) Ever since we started adding stuff to content, nobody is directly developing against the standalone engine anymore. This is absolutely fine. What’s annoying was that the map was still on the engine, so we couldn’t use content things on it. After fixing the placement code to allow me to make a new grid and other shenanigans, I made an entirely new map and put it on the repo. It has a bunch of things like items and a simplistic power grid.
Yes, the lights shut off automatically when the power grid dies.
Welcome to stationstation.yml
Linux & Mac Builds Up (PJB) I finally went and got Linux and macOS builds to work again. The Linux builds are actually tested this time around. Get ’em here.
Inventories (Clusterfack) Cluster reworked the inventory system and it now has some basic GUI and stuff like slots. Definitely not winning any awards but we gotta start somewhere.
Power (Clusterfack + PJB) We have a power system now! It took an iteration or two, but we’re quite happy where it’s at now. We got batteries, consumers, APCs, generators, … The system is intelligent about power usage, and Watts/Joules are correctly defined.
A big difference from SS13’s system is that energy drain is handled by the power network, not the invidual machines. You see, in SS13, each machine told the powernet “hey I took 200 energy (no, there’s no unit specified, Bay probably did by now but not traditionally) this tick”. First of all, this was prone as hell to race conditions and network drain is completely unpredictabble. Secondly, “an amount of energy” isn’t even how energy works. Realistically, when a machine turns on it increases its power usage for that duration. For giant power hogs like a teleporter, you’d have giant capacitor banks and superconducting wire capable of discharging their energy in a fraction of a second to power some sci-fi machinery.
Visualization for the power system exists, but it’s not great. Lights turn on and off, the rest you’ll have to check through a debug tool.
Entity Netcode Optimizations (PJB) So the “main” netcode for entities is made up of two parts: game state and messages.
Messages are simple: they’re one-off messages sent between server and client, potentially related to an entity. Stuff like the client saying “I want to switch my hand to left”.
Then there’s game state. Stuff like the positions of every object, their sprite, etc… Stuff like this needs to be permanent, because if somebody connects mid round, they need to still know everything.
How was this done before? Dear god.
So first of all, we rounded up every entity and every network component on said component. Yes. Every entity. We then asked them to give us back an object containing all their state (position, sprite, etc…) that the client needs. We collected all of those into a giant blob, and serialized it to binary. So basically, this binary blob could be deserialized back into an object to get the state again. So, we sent this to the client..? Right?
Nope! It’s 50 kB of data and that times 60 (netcode runs at 60 Hz) would be 3 god damn MB/s. That’s way too much. So we need to compress this! Quite simple! We know that the client has the last iteration, so we just used a C# port of a binary diffing algorithm ! Genius!
Oh great my CPU is on fire now.
So yes, the previous netcode was extremely slow and inefficient. It worked but the performance was so bad I couldn’t even get a smooth 60 FPS on my 4.2 GHz quad core Windows PC. On my iMac I was lucky to hit 45.
To temporarily bandage it, my idea was to use P/Invoke instead of a C# library for the diffing. After struggling for 5 minutes to get the C code to even compile, I ported the diffing algorithm to Rust , because screw C. Honestly the port to C was a better idea in the long run anyways, because I had to write a bunch of wrapper code, including bzip2 (which I’d also have to get compiling..) Native languages like Rust or C don’t have a garbage collector and are just much faster, so this helped relieve some stress.
It was still pretty awful though, so I finally went and changed the diffing system . We now are actually aware when an entity needs to be updated on the client. The result? Client CPU usage on my mac was halved. Server CPU usage dropped by a factor of 6. Movement also feels significantly smoother now.
There are still many things to do. Client bubbling, bandwidth optimizations, client side prediction, …
But hey, I’m happy for now:
And this was the server:
A Thing (Clusterfack)
\ No newline at end of file
diff --git a/post/18-09-19-progress-report-8/index.html b/post/18-09-19-progress-report-8/index.html
index 431024b..151d93c 100644
--- a/post/18-09-19-progress-report-8/index.html
+++ b/post/18-09-19-progress-report-8/index.html
@@ -1,5 +1,7 @@
-
Progress Report #8: Writing Some Content - SS14
Progress Report #8: Writing Some Content Contributed by PJB3005 Wednesday September 19, 2018 It’s pretty nice to get to a point where we can worry purely about content without having to juggle the engine around all the time. I think we’re getting close to the point of reaching that now.
Making Things Look Nice When you’re knee deep in engine development, there’s no a lot of point to pulling in sprites from SS13. Wall sprites wouldn’t have mattered because wall sprites were always hidden behind shadow occluders. No point pulling clothes when you can’t put them on.
Actually going “I want to implement this, and do it well” is always a good challenge to code new engine and content features necessary to get just that inch closer to something playable.
Let’s compare. Here’s a screenshot from the last progress report a few months ago.
And here’s a screenshot from right now.
Something that’s probably gonna very quickly catch your eyes is the APC and SMES sprites. They (and a bunch of others) are taken from the codebase CEV-Eris . You might not have heard of them yet, but god damn their Multi-Z ship looks amazing. The map layout is amazing and they just nailed the immersion. Check them out!
The APCs and SMES are fully animated and the indicator lights work properly. They look absolutely amazing because they ignore the lighting layer. They’re also laid out purely client side. The server sends over some data like the charge % of the SMES, but the client is fully in charge of actually selecting sprite layers and such. Being able to take the load off the server for trivial things like this is great. The system for separating this data is also decently modular, so making a hybrid SMES + APC deal with its own sprite should be very doable. Definitely more doable than in SS13.
You’ll also note that the walls are properly smoothwalled and shadows work properly now. Again, this is done purely client side!
You might be wondering if that client side code is difficult to develop for and adds significant mental overhead. I’m probably kinda biased because I’m decently experienced, but I’d say the client/server distinction isn’t that difficult to work with. Growing pains of just the engine in general are probably much more significantl. The thing is you still can do purely server sided code, but when you can offload those stupid smoothwall calculations to the client, it’s nice to just go for it.
Oh also I zoomed in the client 2x so things aren’t tiny like before.
APC UIs There’s many practical UX problems with SS13’s focus on separate UIs. A lot of the reasoning behind them is due to BYOND being bad. For example, when you’re operating a pump in atmospherics, do you really need a separate window for an on/off switch and pressure limiter? Especially having that window appear in the center of the screen, thus invoking lots of mouse movement?
That said, they’re still pretty necessary for many things. You can’t get around it with many of the complex UIs SS13 has. Also they’re definitely very easy to implement, and we gotta walk before we can run. As such I decided to implement the APC interface.
Well, it’s definitely not gonna win any design awards. Hell I even forgot to write out a window title and was too lazy to recompile the game to add one for the screenshot. Oh well.
It being ugly as all heck does bring me into the next point though…
UI Theme Prompted by the APC looking actually atrocious, I set out to make a basic UI theme that isn’t just the stock Godot gradients.
It’s not yet finished and not even close to reaching usage in the repo, but I do think my existing work is pretty nice.
Equipment & inhands In the last progress report I mentioned that Cluster coded an inventory system. There was not a lot of point to it though when it does literally nothing.
Well look no further, because you can now actually see the clothing you put on and the items you pick up*!
Again, lots of sprites on there taken from CEV-Eris, seriously check them out.
*: Provided some SS13 spriter actually made the inhands and I bothered to import the DMI states. This is not a reliable occurence.
So one of the side effects of not using a game engine (Godot is for rendering) is that you get none of the tools made for you. Having a map editor done without hassle is definitely nice to start I will admit.
Have you ever tried to design something with the admin tools of SS13, mid round? It’s an absolutely painful experience. Ideally you’d have all the power of the map editor but you have to deal with half finished hacks like build mode.
Hang on, hold that thought.
What if we just didn’t make a separate map editor. In reality, you’d just be building maps in the regular game, as an admin ghost or whatever, and saving them. We have all the infrastructure already there, and all of it can be re-purposed later down the line for admin tools and such! I mean sure we’re NIH-ing a map editor and our current method of editing maps is even worse than Dream Maker but it’s not like we have anything we need a map for anyways.
This was kinda the thought I came to while working on APCs. I wanted to cut their click bounding box so they wouldn’t take the full tile (they used to), but I had no good way to preview those changes. Initially I wanted to make some stupid one-off tool, but then it dawned on me. We need VV.
VV is the second most powerful tool admins have at their disposal (the #1 is undeniably SDQL. Period.)
+
Progress Report #8: Writing Some Content - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Progress Report #8: Writing Some Content Contributed by PJB3005 Wednesday September 19, 2018 It’s pretty nice to get to a point where we can worry purely about content without having to juggle the engine around all the time. I think we’re getting close to the point of reaching that now.
Making Things Look Nice When you’re knee deep in engine development, there’s no a lot of point to pulling in sprites from SS13. Wall sprites wouldn’t have mattered because wall sprites were always hidden behind shadow occluders. No point pulling clothes when you can’t put them on.
Actually going “I want to implement this, and do it well” is always a good challenge to code new engine and content features necessary to get just that inch closer to something playable.
Let’s compare. Here’s a screenshot from the last progress report a few months ago.
And here’s a screenshot from right now.
Something that’s probably gonna very quickly catch your eyes is the APC and SMES sprites. They (and a bunch of others) are taken from the codebase CEV-Eris . You might not have heard of them yet, but god damn their Multi-Z ship looks amazing. The map layout is amazing and they just nailed the immersion. Check them out!
The APCs and SMES are fully animated and the indicator lights work properly. They look absolutely amazing because they ignore the lighting layer. They’re also laid out purely client side. The server sends over some data like the charge % of the SMES, but the client is fully in charge of actually selecting sprite layers and such. Being able to take the load off the server for trivial things like this is great. The system for separating this data is also decently modular, so making a hybrid SMES + APC deal with its own sprite should be very doable. Definitely more doable than in SS13.
You’ll also note that the walls are properly smoothwalled and shadows work properly now. Again, this is done purely client side!
You might be wondering if that client side code is difficult to develop for and adds significant mental overhead. I’m probably kinda biased because I’m decently experienced, but I’d say the client/server distinction isn’t that difficult to work with. Growing pains of just the engine in general are probably much more significantl. The thing is you still can do purely server sided code, but when you can offload those stupid smoothwall calculations to the client, it’s nice to just go for it.
Oh also I zoomed in the client 2x so things aren’t tiny like before.
APC UIs There’s many practical UX problems with SS13’s focus on separate UIs. A lot of the reasoning behind them is due to BYOND being bad. For example, when you’re operating a pump in atmospherics, do you really need a separate window for an on/off switch and pressure limiter? Especially having that window appear in the center of the screen, thus invoking lots of mouse movement?
That said, they’re still pretty necessary for many things. You can’t get around it with many of the complex UIs SS13 has. Also they’re definitely very easy to implement, and we gotta walk before we can run. As such I decided to implement the APC interface.
Well, it’s definitely not gonna win any design awards. Hell I even forgot to write out a window title and was too lazy to recompile the game to add one for the screenshot. Oh well.
It being ugly as all heck does bring me into the next point though…
UI Theme Prompted by the APC looking actually atrocious, I set out to make a basic UI theme that isn’t just the stock Godot gradients.
It’s not yet finished and not even close to reaching usage in the repo, but I do think my existing work is pretty nice.
Equipment & inhands In the last progress report I mentioned that Cluster coded an inventory system. There was not a lot of point to it though when it does literally nothing.
Well look no further, because you can now actually see the clothing you put on and the items you pick up*!
Again, lots of sprites on there taken from CEV-Eris, seriously check them out.
*: Provided some SS13 spriter actually made the inhands and I bothered to import the DMI states. This is not a reliable occurence.
So one of the side effects of not using a game engine (Godot is for rendering) is that you get none of the tools made for you. Having a map editor done without hassle is definitely nice to start I will admit.
Have you ever tried to design something with the admin tools of SS13, mid round? It’s an absolutely painful experience. Ideally you’d have all the power of the map editor but you have to deal with half finished hacks like build mode.
Hang on, hold that thought.
What if we just didn’t make a separate map editor. In reality, you’d just be building maps in the regular game, as an admin ghost or whatever, and saving them. We have all the infrastructure already there, and all of it can be re-purposed later down the line for admin tools and such! I mean sure we’re NIH-ing a map editor and our current method of editing maps is even worse than Dream Maker but it’s not like we have anything we need a map for anyways.
This was kinda the thought I came to while working on APCs. I wanted to cut their click bounding box so they wouldn’t take the full tile (they used to), but I had no good way to preview those changes. Initially I wanted to make some stupid one-off tool, but then it dawned on me. We need VV.
VV is the second most powerful tool admins have at their disposal (the #1 is undeniably SDQL. Period.)
It allows you to view & modify all the variables of an object and mess with them until you crash the server.
It took a lot of architecturing to get the code to not be terrible and be decently extensible, but I’m pretty damn happy with how it turned out:
There are of course many rough edges to refine about it, but it has already proven to be a great tool for development.
It works server & client side (you can edit remote objects). Also that preview of my mob updates live. Neat huh.
Construction & Info Accessibility Kind of fitting into the above, construction is still a royal pain as a player in SS13. Have you ever tried to build your own station? It takes actual hours to get anything done, especially if you want to make the bloody thing look good and have functional piping & power. It’s just slow as hell to build something.
Another annoying thing is that it can be very annoying for new players to figure out just how to build something. Sure for walls and such “click on the material stack to show your options” is decently simple. You see “wall girder” and.. what now? We all know you have to hit it with metal again, but that’s still something we all had to look up on the wiki at least once. This kinda info can and should be accessible easily to new & old players in the game itself. How many of us have just slapped tools into something to find the next tool because we didn’t know what it was? Should I go into the worst case scenarios like how to build a bloody stun prod or whatever before TG’s crafting menu?
So we’re building on TG’s crafting menu and taking it to the next level. Sitting around and having recipes in a menu is… pretty dull. Crafting times are an easy way to balance things but also excruciatingly boring. Slap crafting had its charm and it was infinitely more involved than the systems of old.
So we decided to combine both. All construction recipes are centralized in an organized window:
But you still have to slapcraft your way to victory. We just make the steps extremely obvious. For things like walls which have to be placed, it actually lets you place client-side wall ghosts first, so you can plan out everything.
In the future we’ll probably experiment with live tooltips showing you just what step you need, so it’s not just limited to the interface. Of course, baby steps.
But seriously, we want to make this game accessible to people. When people say the interface is atrocious they’re sadly right, and it’s such a shame because SS13 has so much potential. We believe it’s possible to make this game extremely accessible to anybody interested in anything but 2D games, and we damn well are gonna try our hardest.
Persistent Logins We’ve long decided that we will never rely on a third party service like Steam to handle logins. Of course, the game will probably still end up on Steam eventually, but you’ll always be able to download a non-steam version too. We’ll probably end up having a centralized authentication server run by us or a future member of the community.
Well nobody’s gonna bother hosting such an authentication server yet, and it’d definitely be a pain to work with when you need to debug something on a local computer. At the same time we still want to be able to log in and out of the same body right now, so we need some way to keep track of clients.
What we decided on is to, right now, just have the client be able to submit any username to the server. The server can still re-assign it to allow you to login multiple times with the same username (very useful for development!). It works quite well and paves the road quite nicely to a centralized authentication system, which would still be username based.
So yes, you actually can log in and out and keep the same body. We even track data like a simplistic form of minds now. If you’re not familiar, minds in SS13 are a representation of your IC “knowledge”. Used primarily to track whether you’re still an antag, because you stay antag through being cloned, borged, unborged, and turned into a cat beast.
Quick Note About Nightly Builds The builds server is currently down due to hard drive failiure. Don’t worry we’ve got backups. Sorry about that though.
\ No newline at end of file
diff --git a/post/18-12-14-progress-report-9/index.html b/post/18-12-14-progress-report-9/index.html
index 7098d34..c94010a 100644
--- a/post/18-12-14-progress-report-9/index.html
+++ b/post/18-12-14-progress-report-9/index.html
@@ -1,3 +1,5 @@
-
Progress Report #9: The One Where We Implemented New Features - SS14
Progress Report #9: The One Where We Implemented New Features Contributed by PJB3005, Digitalis, Clusterfack & Acruid Friday December 14, 2018 Yeah, we really don’t have anything to say here, outside of “look at all these features!”
Work on Mobcode As any SS13 coder can tell you, ourselves included, mob code is a bloody mess. The best thing we can do to avoid creating the same mess in our project is write modular, configurable mob components.
Mob code’s general component design has now been solidified, and we are making real progress on it. While we did previously have a component to store damage taken by weaponry, it didn’t have any behavior implemented with it. This month, Clusterfack implemented the first of many mob specific components .
This newly implemented “species” component is meant to implement fundamental health states. In contrast to SS13’s code, the species component is implemented in a modular way that can be used for any mob type and easily support adding new types of health states. At the basic level, it provides us with the conscious, critical, and dead health states that all SS13 forks have traditionally used.
As you can see above, Clusterfack also provided us with the work to finally make a character window that combines information from multiple components for display to the user. Right now, it can be opened and closed with the “c” hotkey. This has made it trivial for us to later create additional components that have user interfaces shown to the character.
The Future Now that new character interfaces can easily be added to the character window, work has begun on additional mob based components for this month.
The initial plan includes creating a new “status effect” component. This component will visually represent the status effects that are currently being applied to a character, along with specific information about those status effects when any one of them is hovered over. At a basic level, this component includes status effects such as being stunned or weakened, and gives out information about which of them is being applied to you, and for how long (if applicable). This system is also planned to encompass SS13’s extremely confusing “resist” system, by allowing you to resist out of individual status effects by clicking on them in the UI. Ever been on fire and cuffed, and then unable to stop, drop & roll because resist tries to uncuff first? This solves that.
Verbs Chances are, the first thing that goes through your head when you hear the word “verb” is “ugh”, especially if you’re an experienced SS13 coder. For those of you who don’t know, in BYOND, verbs are the actions you see in the right click menu and the ugly panel above the chat, such as “Pick up” or “Eject”. You’ll have a hard time finding someone who actually likes the way they’re implemented in BYOND: there are tons of issues with them from a user interaction standpoint and a code standpoint.
Thankfully, none of these issues with verbs are in their concept or unfixable. SS13 can’t fix them because it’s chained to BYOND, but we’re not. Hell, in BYOND a lot of the right click lag is caused by verbs you don’t have. We have no idea how this works either.
Our implementation of verbs so far is still minimal, ugly, and looks pretty much like SS13’s does. And yes, we’re keeping the regular right click menu.
Some servers, like TG, have recently added radial menus, which are a great addition that works around some of verbs' flaws in SS13. Hell, PJB even pioneered them 2 years ago ! While they solve some of the glaring issues with BYOND’s verbs implementation, they come with some of their own: they require artwork to make, have no consistent or obvious ordering, are really suited more towards analog joysticks on consoles, get really problematic when saturated with a lot of buttons, and so on. We might still see them in SS14 eventually. Not as a right click replacement, but as interfaces for objects that don’t deserve a window (like the linked video).
With more effort that has not yet been done, classic right click menus will be perfect. We have to solve numerous challenges that SS13 hasn’t even considered, but we can and will do it.
Consider one popular use case of right click menus: I want to eject the ID from my PDA. To do this, I have to cumbersomely go through the right click menu. SS13’s workaround is to provide modifier-key shortcuts to these common actions, such as alt-clicking on the PDA to eject your ID. This is nice and all, but it’s only useful if you actually know the shortcut in the first place. I’m too lazy to check TG at the moment, but I know that, historically, these shortcuts have been inconsistent and very poorly documented, if at all.
So what if, instead, alt-click is simply bound to a verb, and then you can see an icon indicating “this is bound to alt-click!” in the right click menu? You right click the PDA once, clearly see that you can alt click instead, and just naturally train yourself to use alt click later. Eventually, we could even make these shortcuts rebindable, and so on…! You may also realize that literally every GUI application ever does this, so.. yay for innovation.
Other object interactions, like “eject cell” for flashlights, have different text when the flashlight is already empty, and the verb is greyed out. By the way, we coded power cells and flashlights as an example of the verb system. Don’t let your flashlight run out!
Of course, later on, verbs will become much more flexible. For example, things like the on-HUD action buttons such as “toggle jetpack” would be integrated into the verb system too.
Notifications & Chat Usage If you look at the screenshots we’ve shown so far, you’ll notice that our chat box is tiny compared to SS13. Granted, none of us have actually touched the chat in ages, and we haven’t put any thought into it yet outside of the technical backend.
In any case, we want to reduce the focus on the chat box. In SS13, tons of basic feedback goes into the chat with no consideration for whether it’s actually appropriate there. I doubt I’m the only one who has trouble keeping an eye on chat throughout the round, because it’s so often filled with useless messages. Sure, we all want feedback that we finished screwing in a window, but this shouldn’t go into the chatbox, which is so far away from where your eyesight is usually trained. Some other messages also have their problems with filling up the chatbox, like attack logs. It’s definitely hella convenient to have a permanent, flawless history to resolve whether Han shot first, but relying on our poor human memories is much more fun. Not to mention that having to read a chat window to see who’s attacking who is just terrible. In SS14, chat will be primarily chatter, though we’ll probably still have speech bubbles above peoples' heads when they talk.
So then how will we provide feedback for object interactions that isn’t in the way, but is still obvious to the player? While reading Factorio’s 261st FFF , I saw exactly what needed to be done, and stole their idea of temporary hovering messages (scroll down to “Generic usability improvements”). Thanks, Factorio!
We can also provide audio feedback. While SS13 does this to some extent, it’s not very reliable. Audio feedback is good, let’s use it! He says, unable to find any good audio samples .
Parallax ![Parallax is in](/images/post/pr_9/parallax" >}}
The Lobby & Rounds We now have a lobby and round system!
Lobbies and round systems are necessary if we want to actually host a game server and playtest properly, so.. we have them now.
The first necessary step was to tear out and move around a bunch of engine crud. The engine had some leftover parts of the an old, barely functional lobby system, which were disabled for simplicity reasons when porting to Godot, but they weren’t worth very much anyway. It complicated & slowed down the connection handshake if anything. All the round and lobby code has since been moved to be handled purely by content.
Implementing a basic content-side game ticker is also easy. If you’re unaware, the game ticker keeps track of important state like “are we in the game, has the round ended, what’s the game mode”, etc… which was easy to implement. Not that we we have anything resembling game modes yet though, but still we can theoretically restart the round now and reset the map without restarting the server.
Designing the lobby UI though? Now that sure was something. SS13’s lobby isn’t exactly amazing, and we have the opportunity to turn it on its head, so we took it.
While a bare bones lobby is already implemented in code, it’s mostly just the chat box and a ready button. So we’ll show you the concept drawing instead.
![Lobby Concept Art](/images/post/pr_9/lobby-concept" >}}
Most things in that image should be self-explanatory. OOC at the bottom left, server name nicely visible at the top… I decided to reserve a small outer border for a parallax background image, to make things look pretty. There’s no massive meme lobby image, but there is a server info panel that servers will have a lot of fun customizing. Ideally, people would be able to see news and such in there too, like new changelog entries, announcements, polls, etc… We haven’t bothered to fill in character creation itself yet, but we did reserve room for it.
You might’ve noticed the arrows in the middle of the image: the idea is that, by pressing some buttons, you’ll be able to swap character creation and the server info menu. This way, there will be plenty of space for servers to show news and their own home-grown memes, but you still have a preview of your selected character slot while waiting for the round to start. And then when you want space for character creation again, you can easily swap back.
Fun With Guns Guns were lame. Less-so now that they’re fully automatic. Or, well, at least the SMG is. Still nothing resembling ammunition or magazines though. Should be really easy to code though. Contributions welcome!
Throwing The ability to throw items out of your hand has now been added to the game, thanks to Acruid. The items are treated as physical objects and will collide with players and walls. Thrown items will damage objects they come into contact with, based of of the force of their collision. This means that a fast, heavy moving object like an iron ingot will do more damage to a player than a small object like a headset.
Currently there is no concept of gravity on the station, which means that thrown items will continue to drift forever as if they are in open space. This will be changed once grid physics are improved and a gravity generator is added to the game. Also, as demonstrated in the video, items can currently open and pass through automatic doors. We are still deciding if this is going to stay in the game or not, and are open to suggestions about what you think.
World Storage SS13 definitely has an unique approach to lockers. When you open them everything tumbles out onto the floor, when you close them they suck everything back into themselves like a vortex. It’s definitely a simple approach, and kinda necessary when you want to make interaction with the contents easy in the context of BYOND’s limitations.
Our idea is to merge the code for backpacks and such with that for lockers. So you have to explicitly take items out with a menu. We believe it won’t be clunky when eventually implemented well. All the open state sprites are still gonna stay though. Just like in Minecraft or whatever you’ll be able to see when a locker is opened by somebody:
IPv6 Networking Support Just a minor thing: the netcode now transparently supports IPv6. Yay! If you don’t know what that means then whatever. If you do then you’ll realize that it really does not matter. It was fun to implement though.
\ No newline at end of file
+
Progress Report #9: The One Where We Implemented New Features - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Progress Report #9: The One Where We Implemented New Features Contributed by PJB3005, Digitalis, Clusterfack & Acruid Friday December 14, 2018 Yeah, we really don’t have anything to say here, outside of “look at all these features!”
Work on Mobcode As any SS13 coder can tell you, ourselves included, mob code is a bloody mess. The best thing we can do to avoid creating the same mess in our project is write modular, configurable mob components.
Mob code’s general component design has now been solidified, and we are making real progress on it. While we did previously have a component to store damage taken by weaponry, it didn’t have any behavior implemented with it. This month, Clusterfack implemented the first of many mob specific components .
This newly implemented “species” component is meant to implement fundamental health states. In contrast to SS13’s code, the species component is implemented in a modular way that can be used for any mob type and easily support adding new types of health states. At the basic level, it provides us with the conscious, critical, and dead health states that all SS13 forks have traditionally used.
As you can see above, Clusterfack also provided us with the work to finally make a character window that combines information from multiple components for display to the user. Right now, it can be opened and closed with the “c” hotkey. This has made it trivial for us to later create additional components that have user interfaces shown to the character.
The Future Now that new character interfaces can easily be added to the character window, work has begun on additional mob based components for this month.
The initial plan includes creating a new “status effect” component. This component will visually represent the status effects that are currently being applied to a character, along with specific information about those status effects when any one of them is hovered over. At a basic level, this component includes status effects such as being stunned or weakened, and gives out information about which of them is being applied to you, and for how long (if applicable). This system is also planned to encompass SS13’s extremely confusing “resist” system, by allowing you to resist out of individual status effects by clicking on them in the UI. Ever been on fire and cuffed, and then unable to stop, drop & roll because resist tries to uncuff first? This solves that.
Verbs Chances are, the first thing that goes through your head when you hear the word “verb” is “ugh”, especially if you’re an experienced SS13 coder. For those of you who don’t know, in BYOND, verbs are the actions you see in the right click menu and the ugly panel above the chat, such as “Pick up” or “Eject”. You’ll have a hard time finding someone who actually likes the way they’re implemented in BYOND: there are tons of issues with them from a user interaction standpoint and a code standpoint.
Thankfully, none of these issues with verbs are in their concept or unfixable. SS13 can’t fix them because it’s chained to BYOND, but we’re not. Hell, in BYOND a lot of the right click lag is caused by verbs you don’t have. We have no idea how this works either.
Our implementation of verbs so far is still minimal, ugly, and looks pretty much like SS13’s does. And yes, we’re keeping the regular right click menu.
Some servers, like TG, have recently added radial menus, which are a great addition that works around some of verbs’ flaws in SS13. Hell, PJB even pioneered them 2 years ago ! While they solve some of the glaring issues with BYOND’s verbs implementation, they come with some of their own: they require artwork to make, have no consistent or obvious ordering, are really suited more towards analog joysticks on consoles, get really problematic when saturated with a lot of buttons, and so on. We might still see them in SS14 eventually. Not as a right click replacement, but as interfaces for objects that don’t deserve a window (like the linked video).
With more effort that has not yet been done, classic right click menus will be perfect. We have to solve numerous challenges that SS13 hasn’t even considered, but we can and will do it.
Consider one popular use case of right click menus: I want to eject the ID from my PDA. To do this, I have to cumbersomely go through the right click menu. SS13’s workaround is to provide modifier-key shortcuts to these common actions, such as alt-clicking on the PDA to eject your ID. This is nice and all, but it’s only useful if you actually know the shortcut in the first place. I’m too lazy to check TG at the moment, but I know that, historically, these shortcuts have been inconsistent and very poorly documented, if at all.
So what if, instead, alt-click is simply bound to a verb, and then you can see an icon indicating “this is bound to alt-click!” in the right click menu? You right click the PDA once, clearly see that you can alt click instead, and just naturally train yourself to use alt click later. Eventually, we could even make these shortcuts rebindable, and so on…! You may also realize that literally every GUI application ever does this, so.. yay for innovation.
Other object interactions, like “eject cell” for flashlights, have different text when the flashlight is already empty, and the verb is greyed out. By the way, we coded power cells and flashlights as an example of the verb system. Don’t let your flashlight run out!
Of course, later on, verbs will become much more flexible. For example, things like the on-HUD action buttons such as “toggle jetpack” would be integrated into the verb system too.
Notifications & Chat Usage If you look at the screenshots we’ve shown so far, you’ll notice that our chat box is tiny compared to SS13. Granted, none of us have actually touched the chat in ages, and we haven’t put any thought into it yet outside of the technical backend.
In any case, we want to reduce the focus on the chat box. In SS13, tons of basic feedback goes into the chat with no consideration for whether it’s actually appropriate there. I doubt I’m the only one who has trouble keeping an eye on chat throughout the round, because it’s so often filled with useless messages. Sure, we all want feedback that we finished screwing in a window, but this shouldn’t go into the chatbox, which is so far away from where your eyesight is usually trained. Some other messages also have their problems with filling up the chatbox, like attack logs. It’s definitely hella convenient to have a permanent, flawless history to resolve whether Han shot first, but relying on our poor human memories is much more fun. Not to mention that having to read a chat window to see who’s attacking who is just terrible. In SS14, chat will be primarily chatter, though we’ll probably still have speech bubbles above peoples’ heads when they talk.
So then how will we provide feedback for object interactions that isn’t in the way, but is still obvious to the player? While reading Factorio’s 261st FFF , I saw exactly what needed to be done, and stole their idea of temporary hovering messages (scroll down to “Generic usability improvements”). Thanks, Factorio!
We can also provide audio feedback. While SS13 does this to some extent, it’s not very reliable. Audio feedback is good, let’s use it! He says, unable to find any good audio samples .
Parallax ![Parallax is in](/images/post/pr_9/parallax" >}}
The Lobby & Rounds We now have a lobby and round system!
Lobbies and round systems are necessary if we want to actually host a game server and playtest properly, so.. we have them now.
The first necessary step was to tear out and move around a bunch of engine crud. The engine had some leftover parts of the an old, barely functional lobby system, which were disabled for simplicity reasons when porting to Godot, but they weren’t worth very much anyway. It complicated & slowed down the connection handshake if anything. All the round and lobby code has since been moved to be handled purely by content.
Implementing a basic content-side game ticker is also easy. If you’re unaware, the game ticker keeps track of important state like “are we in the game, has the round ended, what’s the game mode”, etc… which was easy to implement. Not that we we have anything resembling game modes yet though, but still we can theoretically restart the round now and reset the map without restarting the server.
Designing the lobby UI though? Now that sure was something. SS13’s lobby isn’t exactly amazing, and we have the opportunity to turn it on its head, so we took it.
While a bare bones lobby is already implemented in code, it’s mostly just the chat box and a ready button. So we’ll show you the concept drawing instead.
![Lobby Concept Art](/images/post/pr_9/lobby-concept" >}}
Most things in that image should be self-explanatory. OOC at the bottom left, server name nicely visible at the top… I decided to reserve a small outer border for a parallax background image, to make things look pretty. There’s no massive meme lobby image, but there is a server info panel that servers will have a lot of fun customizing. Ideally, people would be able to see news and such in there too, like new changelog entries, announcements, polls, etc… We haven’t bothered to fill in character creation itself yet, but we did reserve room for it.
You might’ve noticed the arrows in the middle of the image: the idea is that, by pressing some buttons, you’ll be able to swap character creation and the server info menu. This way, there will be plenty of space for servers to show news and their own home-grown memes, but you still have a preview of your selected character slot while waiting for the round to start. And then when you want space for character creation again, you can easily swap back.
Fun With Guns Guns were lame. Less-so now that they’re fully automatic. Or, well, at least the SMG is. Still nothing resembling ammunition or magazines though. Should be really easy to code though. Contributions welcome!
Throwing The ability to throw items out of your hand has now been added to the game, thanks to Acruid. The items are treated as physical objects and will collide with players and walls. Thrown items will damage objects they come into contact with, based of of the force of their collision. This means that a fast, heavy moving object like an iron ingot will do more damage to a player than a small object like a headset.
Currently there is no concept of gravity on the station, which means that thrown items will continue to drift forever as if they are in open space. This will be changed once grid physics are improved and a gravity generator is added to the game. Also, as demonstrated in the video, items can currently open and pass through automatic doors. We are still deciding if this is going to stay in the game or not, and are open to suggestions about what you think.
World Storage SS13 definitely has an unique approach to lockers. When you open them everything tumbles out onto the floor, when you close them they suck everything back into themselves like a vortex. It’s definitely a simple approach, and kinda necessary when you want to make interaction with the contents easy in the context of BYOND’s limitations.
Our idea is to merge the code for backpacks and such with that for lockers. So you have to explicitly take items out with a menu. We believe it won’t be clunky when eventually implemented well. All the open state sprites are still gonna stay though. Just like in Minecraft or whatever you’ll be able to see when a locker is opened by somebody:
IPv6 Networking Support Just a minor thing: the netcode now transparently supports IPv6. Yay! If you don’t know what that means then whatever. If you do then you’ll realize that it really does not matter. It was fun to implement though.
\ No newline at end of file
diff --git a/post/19-02-20-progress-report-10/index.html b/post/19-02-20-progress-report-10/index.html
index 291d57b..7abcb55 100644
--- a/post/19-02-20-progress-report-10/index.html
+++ b/post/19-02-20-progress-report-10/index.html
@@ -1,4 +1,6 @@
-
Progress Report #10: Nothing To Say For Ourselves - SS14
Progress Report #10: Nothing To Say For Ourselves Contributed by PJB3005 Saturday February 23, 2019 Yeah I honestly have nothing to say for myself. You have the right to laugh.
Another Rendering Engine Change Hahahah. Yep it’s happening. We’re creating another rendering engine. Laugh all you want, you have the right to and I can’t blame you at this point, but I’m still going through with this and do believe this is the best way forward. To be clear, right now the code still works on Godot, the new renderer is optional.
So… you may wonder… why?
Godot does have nice features and it’s definitely convenient to work with, but it’s getting more painful to work with by the day:
Crashes. Lots. At this point Godot keeps crashing constantly. I can’t run the client for 5 minutes or it dies. I’ve attempted to look into this myself but it’s all over the place. A lot of these crashes (but not all) are related to Mono though so I won’t hold it against Godot since it is marked as unstable. Painful to work with. Like any game engine, Godot wants you to do things its way. We’re only using Godot as rendering, sound and GUI engine, so we want to do things our way. There’s a problem here. Most of this was worked around with hacks and can be fixed with more hacks, but these hacks get to the point of “time to distribute custom Godot binaries”, which is a complete pain. Not to mention that I’m really not experienced with C++. Performance. Holy crap Godot’s performance is atrocious. I don’t want to go complete hostile here, but that’s just how it is. Read on: So to render a sprite on the screen, you generally need to draw two textured triangles (a “quad”) in a rectangle shape. Pretty simple stuff right.
+
Progress Report #10: Nothing To Say For Ourselves - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Progress Report #10: Nothing To Say For Ourselves Contributed by PJB3005 Saturday February 23, 2019 Yeah I honestly have nothing to say for myself. You have the right to laugh.
Another Rendering Engine Change Hahahah. Yep it’s happening. We’re creating another rendering engine. Laugh all you want, you have the right to and I can’t blame you at this point, but I’m still going through with this and do believe this is the best way forward. To be clear, right now the code still works on Godot, the new renderer is optional.
So… you may wonder… why?
Godot does have nice features and it’s definitely convenient to work with, but it’s getting more painful to work with by the day:
Crashes. Lots. At this point Godot keeps crashing constantly. I can’t run the client for 5 minutes or it dies. I’ve attempted to look into this myself but it’s all over the place. A lot of these crashes (but not all) are related to Mono though so I won’t hold it against Godot since it is marked as unstable. Painful to work with. Like any game engine, Godot wants you to do things its way. We’re only using Godot as rendering, sound and GUI engine, so we want to do things our way. There’s a problem here. Most of this was worked around with hacks and can be fixed with more hacks, but these hacks get to the point of “time to distribute custom Godot binaries”, which is a complete pain. Not to mention that I’m really not experienced with C++. Performance. Holy crap Godot’s performance is atrocious. I don’t want to go complete hostile here, but that’s just how it is. Read on: So to render a sprite on the screen, you generally need to draw two textured triangles (a “quad”) in a rectangle shape. Pretty simple stuff right.
Now as it turns out, if you’ve got a few thousand objects to render, GPU drivers really don’t like it when you tell them to render those one by one. So basically any 2D game uses a technique called “sprite batching”, where the renderer does its best to make big “batches” of quads and render them all at once. Big performance improvements here.
Godot doesn’t do this.
This is honestly mind boggling, and it shows . This isn’t some “oh a minor improvement”, it’s 100% standard in 2D renderers and a significant difference. Yes I’ve done profiling, I’m not talking out of my ass. There are some discussions about this on GitHub, it mostly boils down to “3.1 GLES2 WILL do batching” and presumably the 3.2 Vulkan renderer won’t be terrible either, but even on the latest beta GLES2 performance is even worse than GLES3, and we shouldn’t need Vulkan as that completely screws older hardware.
There are other issues here, like Godot using forward rendering for lights, very poor data structure choices, etc…
For reference, I get barely 30 FPS on my laptop’s integrated GPU (Intel UHD Graphics 630 on Linux, i7-8750H, not some ancient Sandy Bridge one) with Godot and lighting on, and we’re not even rendering that much things yet. This is not acceptable, period. We could put effort into making our game more optimized for the renderer (by manually doing sprite batching), but that just becomes a giant mess of avoiding slow paths and reverse engineering the renderer. At that point it’s better to make our own… so we are.
Was Godot a mistake? This is a tough question. One of the reasons we originally picked Godot in the first place is that none of us really were able to make an OpenGL renderer work properly. Even worse is that I was on an Apple computer at the time, and Apple has notoriously bad OpenGL drivers. We tried to get a cookie cutter example 3D renderer to work. It didn’t. Even worse is that back then MoltenVK wasn’t even open source so even if we wanted to go “screw old hardware let’s go Vulkan”, we couldn’t because of Apple. Nowadays I have a good Linux laptop which means developing with OpenGL is actually sane . I’ve been using RenderDoc a lot to debug and such and I probably would’ve lost my sanity trying to write this renderer without it. RenderDoc does not work on macOS.
If you’re wondering how we solved the “Apple has terrible OpenGL support problem” today. We didn’t. The difference is now it isn’t directly holding back development. Maybe we’ll put effort into making sure it works on macOS later, which will be agony, but at the moment I’m going with “your mistake for buying from the walled garden company”. Theoretically the current renderer should work on macOS provided there’s no driver bugs. Theoretically. Maybe eventually we’ll write a Vulkan renderer too and that’ll work on macOS sanely with MoltenVK. Theoretically.
So would I say Godot was a bad choice? No. We did get a lot of stuff done on it, but I feel like we’re gonna run into more unsolvable problems if we continue with it as our only option.
What about 3D? Godot will still be supported as a backend for the time being, so 3D has nothing to fear. I’m not comfortable writing a 3D renderer in OpenGL because there’s a LOT more to it.
What about UI? We are using Godot’s UI system at the moment. I will say that Godot’s UI system is quite good, though I don’t have much perspective with other UI systems. I basically re-implemented it on the non-Godot version and it’s been smooth sailing.
Not using Godot’s UI also opens the door for tons of new fun things. For example Godot’s UI theming is pretty weak. I implemented a new theming system using CSS (yes, CSS!) and I’m implementing the new UI theme teased before in Progress Report 8. We’re also looking into High DPI support, which Godot seemed to have pretty poor support for.
Furthermore, we should be able to re-implement our custom UI system on top of Godot when I feel like putting the effort in.
Introducing Clyde Clyde is the name we (read: I) decided on for the new renderer. Currently targeting OpenGL 4.1 and heavily work in progress and bodged together. Targeting OpenGL 3.3 is probably doable (in fact I don’t think we’re using anything )
As it turns out, you can get quite far by drawing purely quads.
I mean, it works really. Performance is also already significantly better than Godot. I get about 2.5x FPS on iGPU comparing with unlit Godot. And there’s already a lot of room for optimizations that I’m too lazy to make currently.
Of course I still have to implement things like lighting, but hey, it’s getting there.
![Here’s a screenshot of Clyde](/images/post/pr_10/clyde_screenshot" >}}
\ No newline at end of file
diff --git a/post/19-03-17-progress-report-11/index.html b/post/19-03-17-progress-report-11/index.html
index d6f44c0..f7bb552 100644
--- a/post/19-03-17-progress-report-11/index.html
+++ b/post/19-03-17-progress-report-11/index.html
@@ -1,4 +1,6 @@
-
Progress Report #11: UI & Animations - SS14
Progress Report #11: UI & Animations Contributed by PJB3005 Sunday March 17, 2019 The GUI system is much more complete now, so most interfaces work now.
+
Progress Report #11: UI & Animations - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Progress Report #11: UI & Animations Contributed by PJB3005 Sunday March 17, 2019 The GUI system is much more complete now, so most interfaces work now.
I also decided to actually code something NEW instead of purely catching up to Godot.
I originally planned to start doing more regular progress reports, but that kinda fell apart when a certain 0.17 of a certain game was released a few weeks ago. Oops. Still though 21 days is better than before.
So we have new stuff.
GUI implementation. I implemented a significant amount of GUI code. Most of the previous GUI code also worked without hassle. Just check the screenshot.
Animations! So just yesterday I decided to get rid of those ugly as hell doors on the map. Pulling in the airlock sprites from eris is pretty easy. Now what wasn’t as easy was making the doors have open and close animations.
Really it was just a case of “there was no code for this, one day later there is”. It was relatively easy to implement animations, and the animation system should be decently flexible.
Twitch Streams I decided to start streaming SS14 development on Twitch, because why the hell not really.
You can find my Twitch channel right here . I have absolutely no schedule or anything and it basically comes down to me going “eh I’ll be coding for the next few hours” and hitting start streaming on OBS, so I’m not gonna announce when I’m streaming on Discord or anything either.
\ No newline at end of file
diff --git a/post/19-03-23-progress-report-12/index.html b/post/19-03-23-progress-report-12/index.html
index ffd2fdd..ea71fdc 100644
--- a/post/19-03-23-progress-report-12/index.html
+++ b/post/19-03-23-progress-report-12/index.html
@@ -1,5 +1,7 @@
-
Progress Report #12: Suddenly, Progress! - SS14
Progress Report #12: Suddenly, Progress! Contributed by PJB3005 Saturday March 23, 2019 Didn’t think you’d already see a new progress report now, did you?
+
Progress Report #12: Suddenly, Progress! - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Progress Report #12: Suddenly, Progress! Contributed by PJB3005 Saturday March 23, 2019 Didn’t think you’d already see a new progress report now, did you?
And especially not such a packed one!
Indeed, a lot of things got done this week. I also want to thank the new contributors we got and those that are hanging out on Discord/IRC. Contributions are welcome and mean a lot to me!
Shaders Work In Clyde Another step towards making Clyde more feature complete, it can now load shaders! This means a couple things render correctly now.
One… interesting problem is that there really isn’t a good existing format for shaders like this. And uh, I of course would like to keep things simple development wise and not have to implement a complete GLSL parser. So we just parse the necessary data like shader parameters and copy the code straight into the final shaders sent to the OpenGL driver. Works surprisingly well!
Bwoink Sound works! This was quite easy to implement. It’s implemented through OpenAL, so we don’t have to implement any of the math related to spatial audio, and it sounds quite nice. Heck it can theoretically use audio hardware if you’re one of those rich kids who has dedicated sound cards in 2019.
Mono Or Stereo? Quick quiz. I’m gonna embed two audio files. Which of these is the correct sound as played in SS13 on BYOND?
A:
B:
Well I obviously wouldn’t be making this quiz if the result wasn’t counter intuitive. “A” here is crowbar.ogg
straight from TGStation’s GitHub as I am writing this. “B” is what you actually hear in game.
As it turns out, many audio files in SS13 are stereo, meaning there’s a left and right audio channel. “B” is what you get when you merge the two audio channels into one (I did this with ffmpeg -i crowbar.ogg -ac 1 crowbar_mono.ogg
, for what it’s worth). OpenAL has a limitation that it can’t play back stereo audio positionally, and I assume BYOND has the same one, except BYOND just merges the file into mono internally before playback.
So when you play the audio file directly in say VLC or your browser, it sounds completely wrong. If you play it in BYOND or manually merge the channels into one, it sounds fine. Odd.
Anyways, I had to merge the audio channels on all these files, which reduces file size on some, but increases it on others… and I have no idea why. Lossy codecs are fun.
Lighting! Clyde now draws lights, so it doesn’t look as horrendously ugly. Shadow casting is not implemented however, which is the actually difficult part. But hey, looks better than the full bright we had before.
Medkits (Contributed by Zumorica) So we’ve had a couple medkits lying around on the tables of the test map for a while now. If you tried to interact with them though, you’ll notice that they just completely didn’t work. They weren’t even items that could be picked up. Oh well.
Well not anymore, it’s shoddy but you can pick them up and heal people with them! Same goes for a new roll of gauze and some ointment.
Light Tubes (Contributed by Zumorica) You can now take lights out of light fixtures with the power of hands (make sure to put on gloves). Support for colored lights also included. It’s a minor thing but hey.
Guns Guns are fancy now. They need ammo now, absolutely spew those casings all over the floor around you, and have some pretty nice sound effects and recoil. They even store a bullet in the chamber separately for that extra realism.
-Theoretically implementing guns with different caliber, different ammo types, yada yada should all be possible, though I have yet to (but it should be pretty easy to for a new contributor, nudge nudge)
I was gonna post a video here but the screen recorder I’m using broke and I’m too lazy to reconfigure OBS so… Try it yourself!
Nightly Builds Back Up. Try SS14 out today here!
I finally re-installed Jenkins on the builds server and got the builds producing again. Woo! You can try out SS14 for yourself now (and still be disappointed).
\ No newline at end of file
+Theoretically implementing guns with different caliber, different ammo types, yada yada should all be possible, though I have yet to (but it should be pretty easy to for a new contributor, nudge nudge)
I was gonna post a video here but the screen recorder I’m using broke and I’m too lazy to reconfigure OBS so… Try it yourself!
Nightly Builds Back Up. Try SS14 out today here!
I finally re-installed Jenkins on the builds server and got the builds producing again. Woo! You can try out SS14 for yourself now (and still be disappointed).
\ No newline at end of file
diff --git a/post/19-04-02-progress-report-13/index.html b/post/19-04-02-progress-report-13/index.html
index 6105983..d8957a4 100644
--- a/post/19-04-02-progress-report-13/index.html
+++ b/post/19-04-02-progress-report-13/index.html
@@ -1,4 +1,6 @@
-
Progress Report #13: Permanent Public Server. - SS14
Progress Report #13: Permanent Public Server. Contributed by PJB3005 Tuesday April 2, 2019 Working on a massive project like this can be quite daunting. “Remake SS13” is quite a clear goal but far from concrete. Having intermediate goals to work towards is important. So for now, my goal at least is to get a permanent public server running.
Permanent Public Server The goal is simple. Get a public SS14 server running somewhere. Make it easy to connect to. Anybody can join at any time. Server auto updates and hopefully isn’t too clunky about it either.
And I am pleased to say that the server is running permanently at server.spacestation14.io
, right now! I will say though that it’s very bare bones and absolutely not fit yet for messing around much yet, so don’t get your hopes up that you can have a fun team deathmatch right now.
I will go over some things done to make this work and things to work on from here.
Bare-bones Launcher If you were to try SS14 previously you had to juggle zip files, launch client and server and all that and throw it all away when updating. Quite honestly even I was getting sick of it after the third time. Not to mention how painful it would be when you need to auto update along with the server. Yuck.
So I wrote a bare bones launcher. More info at the nightlies page . But basically it’s just a dead simple console app to auto update the client and launch it. Not much else there.
In the future we will probably want to give it a fancy user interface and all that, and eventually it’d probably manage launching the client. But for now it’s good enough to start the client and connect to the public server. Also cross platform good looking user interfaces are a royal pain to write, especially if you’re not using C++ to use Qt.
The launcher has been tested on Linux and Windows. It has also been tested on macOS and shown to be broken. It’s a good sign when the macOS launch system gives you “unknown internal error” when trying to launch the client. Thanks Apple.
Main Menu Improvements The main menu is kind of a temporary thing, since ideally the launcher would handle everything related to connecting. There’d be no need for a main menu to enter the server address into.
But as mentioned above, a proper launcher is still very far out. So we’re kinda stuck with it for now. Won’t stop us from making improvements to it, if ugly.
First of all, you can now specify your username before connecting, in the main menu. So now when connecting to the public server you won’t connect to the body of another player 5 hours before you, named “JoeGenero” with increasing numbers at the end.
There is now also a highly convenient button to connect to the public server right there in the main menu, so you won’t even have to type the server address in.
TODO: Switching Between Sandbox/Game Having the public server is nice. Of course, unlike a server you run on your own machine, not everybody is admin on the public server. Right now this doesn’t matter too much but if we want people to use the public server for messing around to try SS14, then it’s highly inadequate. If you die then… well… guess you’ll have to refer to the “run your own server” instructions.
Ideally we would have the server in a sandbox mode OR a regular game mode, actual admins being able to switch between the two. Players can mess around with most admin powers like VV in one, or they get to duke it out with normal gameplay in the other.
TODO: Authentication For now, the server allows you to use any username and automatically solves conflicts by appending numbers to it if necessary. Ideally we would have an authentication system to prove people’s identity so that people have consistent usernames, but it’s a relatively big can of worms to implement.
As for how admins work, we have them enter a password in the console right now.
TODO: Lay Out Control Scheme We’ve had a few people try out the game before I’m writing this progress report and there’s a lot of people who can’t figure out the control scheme we laid out. And I can’t blame them. Half our control scheme is “literally no thought has been put in” and the other is “good reason but still different from SS13 and we need this explained somewhere”, so if you do try the game right now you’ll be VERY confused at being unable to open backpacks. I promise it’s possible though.
The Map Keeps Looking Better Oh yeah, that’s not even all of it anymore. It doesn’t fit in a single screen now.
Once again was mapped entirely with in game tools (though I have to admit the experience could still be much better).
+
Progress Report #13: Permanent Public Server. - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Progress Report #13: Permanent Public Server. Contributed by PJB3005 Tuesday April 2, 2019 Working on a massive project like this can be quite daunting. “Remake SS13” is quite a clear goal but far from concrete. Having intermediate goals to work towards is important. So for now, my goal at least is to get a permanent public server running.
Permanent Public Server The goal is simple. Get a public SS14 server running somewhere. Make it easy to connect to. Anybody can join at any time. Server auto updates and hopefully isn’t too clunky about it either.
And I am pleased to say that the server is running permanently at server.spacestation14.io
, right now! I will say though that it’s very bare bones and absolutely not fit yet for messing around much yet, so don’t get your hopes up that you can have a fun team deathmatch right now.
I will go over some things done to make this work and things to work on from here.
Bare-bones Launcher If you were to try SS14 previously you had to juggle zip files, launch client and server and all that and throw it all away when updating. Quite honestly even I was getting sick of it after the third time. Not to mention how painful it would be when you need to auto update along with the server. Yuck.
So I wrote a bare bones launcher. More info at the nightlies page . But basically it’s just a dead simple console app to auto update the client and launch it. Not much else there.
In the future we will probably want to give it a fancy user interface and all that, and eventually it’d probably manage launching the client. But for now it’s good enough to start the client and connect to the public server. Also cross platform good looking user interfaces are a royal pain to write, especially if you’re not using C++ to use Qt.
The launcher has been tested on Linux and Windows. It has also been tested on macOS and shown to be broken. It’s a good sign when the macOS launch system gives you “unknown internal error” when trying to launch the client. Thanks Apple.
Main Menu Improvements The main menu is kind of a temporary thing, since ideally the launcher would handle everything related to connecting. There’d be no need for a main menu to enter the server address into.
But as mentioned above, a proper launcher is still very far out. So we’re kinda stuck with it for now. Won’t stop us from making improvements to it, if ugly.
First of all, you can now specify your username before connecting, in the main menu. So now when connecting to the public server you won’t connect to the body of another player 5 hours before you, named “JoeGenero” with increasing numbers at the end.
There is now also a highly convenient button to connect to the public server right there in the main menu, so you won’t even have to type the server address in.
TODO: Switching Between Sandbox/Game Having the public server is nice. Of course, unlike a server you run on your own machine, not everybody is admin on the public server. Right now this doesn’t matter too much but if we want people to use the public server for messing around to try SS14, then it’s highly inadequate. If you die then… well… guess you’ll have to refer to the “run your own server” instructions.
Ideally we would have the server in a sandbox mode OR a regular game mode, actual admins being able to switch between the two. Players can mess around with most admin powers like VV in one, or they get to duke it out with normal gameplay in the other.
TODO: Authentication For now, the server allows you to use any username and automatically solves conflicts by appending numbers to it if necessary. Ideally we would have an authentication system to prove people’s identity so that people have consistent usernames, but it’s a relatively big can of worms to implement.
As for how admins work, we have them enter a password in the console right now.
TODO: Lay Out Control Scheme We’ve had a few people try out the game before I’m writing this progress report and there’s a lot of people who can’t figure out the control scheme we laid out. And I can’t blame them. Half our control scheme is “literally no thought has been put in” and the other is “good reason but still different from SS13 and we need this explained somewhere”, so if you do try the game right now you’ll be VERY confused at being unable to open backpacks. I promise it’s possible though.
The Map Keeps Looking Better Oh yeah, that’s not even all of it anymore. It doesn’t fit in a single screen now.
Once again was mapped entirely with in game tools (though I have to admit the experience could still be much better).
It could use a lot more details and content. Contributions welcome as always!
Project Rename So due to historical reasons, the engine was named Space Station 14, and the content (AKA, the actual code most people would expect) was named Space Station 14 Content . Now people kept downloading the wrong repo and all that so we renamed the projects on GitHub to avoid confusion. The engine is now called RobustToolbox and the main content repo is called Space Station 14.
Also silver did this rename without telling anybody he was going to do it RIGHT NOW and fixing all the build scripts and whatever was a fun experience.
\ No newline at end of file
diff --git a/post/19-04-22-progress-report-14/index.html b/post/19-04-22-progress-report-14/index.html
index 0025934..c8939e1 100644
--- a/post/19-04-22-progress-report-14/index.html
+++ b/post/19-04-22-progress-report-14/index.html
@@ -1,3 +1,5 @@
-
Progress Report #14: Content & More Server - SS14
Progress Report #14: Content & More Server Contributed by PJB3005 Monday April 22, 2019 This time on SS14: neat features and neat server features.
Locker Stuff (contributed by PrPleGoo) Pushing things in SS13 sucks. That’s why we’re making it better.
Also you can now go into lockers.
We already did have lockers implemented, but they acted more like chests in other games like Minecraft than what you were used to in SS13. While the idea is neat, we did decide to go back to the old SS13 ways, since they’re actually quite a neat bit of emergent behavior.
I might’ve already mentioned this before in these reports, but we want to remove the need for the chat window for most things. We do still want a chat log of course, but you shouldn’t need to look at the chat for most things.
Examining things is annoying. You click on something and the result is halfway across your monitor. God forbid having fast moving chat. Another problem is that it’s often poorly structured. So for a lot of things it’s flavor text, for a bunch of others it’s VERY useful information that’s hard to dig up from the text dump.
We can smack two birds with one stone here. I’ll just show you the screenshot:
So first of all, examining is now done with a tooltip instead of dumping it into your chat log. This keeps the info right where your eyes already are. Second of all, information such as fuel is now sanely formatted so it’s easy to tell at a glance. For reference, the examine message on TG is “It contains 50 units of fuel out of 50.” I’d say our brief and colored “Fuel: 49/50” is much better.
To address some concerns people might have:
We probably will eventually make it semi-transparent, though that’s surprisingly involved to implement correctly so I held off on that for now. Somebody also raised the concern about no longer having a log. We will probably still provide an examine log in some tab on the chat box later, but again, only as a log , not as the only way of examining things. That said, I personally feel that the idea of not having any sort of permanent log could be quite an interesting concept to explore, but perhaps it’s too exotic for now. You can now hear the gentle sound of your fat feet on the floor.
They’re definitely not very loud (not that they should be!) so you might have to turn your volume up a little to hear them.
Discord-OOC Chat Relay So I rewrote the chat system we use to be more flexible. At the moment there aren’t a lot of visible changes, but it did make chat easier to expand on.
One nice advantage of not being handicapped to a language that can’t even do HTTP sanely is that interacting with the server via other things like the Discord bot is much easier. Something I’ve always thought would be neat would be linking OOC to a Discord channel. After all, no real reason to separate the two, is there?
The #server
channel on Discord is now connected to OOC on the public server!
I also plan to get round status messages in here (like “the round has started”) but we’re not quite there yet.
Light Tubes (Contributed by Zumorica) You can now actually take lights from light tubes and put them back in. A little thing, but still neat.
Discord Rich Presence Support (Contributed by occune) We got Discord Rich presence now, so people can fancily see that you’re playing SS14 now.
Clearly part of our viral marketing strategy.
Also for those people worried about privacy or whatever: it is very easy to disable with a quick config file change. Most of us use Discord so I have no problem with adding support for it, but we do understand that people might want to turn it off for privacy concerns.
\ No newline at end of file
+
Progress Report #14: Content & More Server - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Progress Report #14: Content & More Server Contributed by PJB3005 Monday April 22, 2019 This time on SS14: neat features and neat server features.
Locker Stuff (contributed by PrPleGoo) Pushing things in SS13 sucks. That’s why we’re making it better.
Also you can now go into lockers.
We already did have lockers implemented, but they acted more like chests in other games like Minecraft than what you were used to in SS13. While the idea is neat, we did decide to go back to the old SS13 ways, since they’re actually quite a neat bit of emergent behavior.
I might’ve already mentioned this before in these reports, but we want to remove the need for the chat window for most things. We do still want a chat log of course, but you shouldn’t need to look at the chat for most things.
Examining things is annoying. You click on something and the result is halfway across your monitor. God forbid having fast moving chat. Another problem is that it’s often poorly structured. So for a lot of things it’s flavor text, for a bunch of others it’s VERY useful information that’s hard to dig up from the text dump.
We can smack two birds with one stone here. I’ll just show you the screenshot:
So first of all, examining is now done with a tooltip instead of dumping it into your chat log. This keeps the info right where your eyes already are. Second of all, information such as fuel is now sanely formatted so it’s easy to tell at a glance. For reference, the examine message on TG is “It contains 50 units of fuel out of 50.” I’d say our brief and colored “Fuel: 49/50” is much better.
To address some concerns people might have:
We probably will eventually make it semi-transparent, though that’s surprisingly involved to implement correctly so I held off on that for now. Somebody also raised the concern about no longer having a log. We will probably still provide an examine log in some tab on the chat box later, but again, only as a log , not as the only way of examining things. That said, I personally feel that the idea of not having any sort of permanent log could be quite an interesting concept to explore, but perhaps it’s too exotic for now. You can now hear the gentle sound of your fat feet on the floor.
They’re definitely not very loud (not that they should be!) so you might have to turn your volume up a little to hear them.
Discord-OOC Chat Relay So I rewrote the chat system we use to be more flexible. At the moment there aren’t a lot of visible changes, but it did make chat easier to expand on.
One nice advantage of not being handicapped to a language that can’t even do HTTP sanely is that interacting with the server via other things like the Discord bot is much easier. Something I’ve always thought would be neat would be linking OOC to a Discord channel. After all, no real reason to separate the two, is there?
The #server
channel on Discord is now connected to OOC on the public server!
I also plan to get round status messages in here (like “the round has started”) but we’re not quite there yet.
Light Tubes (Contributed by Zumorica) You can now actually take lights from light tubes and put them back in. A little thing, but still neat.
Discord Rich Presence Support (Contributed by occune) We got Discord Rich presence now, so people can fancily see that you’re playing SS14 now.
Clearly part of our viral marketing strategy.
Also for those people worried about privacy or whatever: it is very easy to disable with a quick config file change. Most of us use Discord so I have no problem with adding support for it, but we do understand that people might want to turn it off for privacy concerns.
\ No newline at end of file
diff --git a/post/19-05-12-progress-report-15/index.html b/post/19-05-12-progress-report-15/index.html
index df2d2c9..b619369 100644
--- a/post/19-05-12-progress-report-15/index.html
+++ b/post/19-05-12-progress-report-15/index.html
@@ -1,4 +1,6 @@
-
Progress Report #15: Bye Godot - SS14
Progress Report #15: Bye Godot Contributed by PJB3005 Sunday May 12, 2019 Godot is finally dead, but it will always be there in our hearts.
Godot Is Dead I have bitten the bullet and officially killed off support for launching the game via Godot.
+
Progress Report #15: Bye Godot - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Progress Report #15: Bye Godot Contributed by PJB3005 Sunday May 12, 2019 Godot is finally dead, but it will always be there in our hearts.
Godot Is Dead I have bitten the bullet and officially killed off support for launching the game via Godot.
“Supporting” Godot was getting more and more painful by the day, because the further I got to making changes to things such as the UI system, the more Godot got in the way .
I would basically have had to completely throw out a lot of current Godot code and switch to implementing a flexible renderer on top of Godot’s inflexible one to keep supporting it. This was not happening. It’s the same reason I wrote Clyde in the first place: Godot didn’t provide what we need and we’d basically be implementing our own renderer, on top of a worse one.
Anyways, this brings some quite nice improvements, and makes future changes much easier.
Lathes (Contributed by Zumorica) We have an autolathe now, it can build stuff. Quite simple really. While the UI could use some improvement, it’s definitely a start.
UI Scaling As you may or may not know, nowadays people have these fancy 4K screens, which have quite a lot of pixels. The result is that you can’t just simply go and say “this margin should be 4 pixels wide”. Sure that might be fine on a 1080p screen, but try that on a 4k screen and the size is way off.
This is of course why UI systems should support correct scaling. Just display all the UI 2x or more as large on a 4K display.
As you may or may not have been able to guess.. Godot doesn’t do a good job of this. The UI system doesn’t provide an obvious way to do this. While the editor does support fractional scaling, it’s implemented as a quite bad hack and has some annoying layout inconsistencies. So not being tied to Godot means we can implement this properly! .
The system works quite well now. We could still use some higher resolution UI textures, but that’s another problem.
A problem I didn’t tackle yet is scaling of the game itself. This is annoying because fractional scaling looks really bad . That said, I actually found that BYOND of all things (!) has a really nice upscaling algorithm for this. Sure having integer nearest-neighbor is always better than fractional, but BYOND’s upscaling algorithm looks really good either way, so it’s not all bad.
Localization BYOND’s support for other anything except ASCII is basically nonexistant. Which is fine if you speak English, but I’m sure the Russian community hates it with a passion. Did you know that BYOND reserves 0xFF for control codes? Yeah, with Windows-1251 (the encoding Russians have to use with BYOND) this is the я, now I don’t know how to speak Russian but I’m pretty sure they need that letter.
Even if that were fixed, it’s still extremely painful to actually translate the game. There is no way to actually translate it sanely.
So as you can guess, we’re putting effort into making sure the game can be localized with relative ease. The first of this is already in.
(I’m using Dutch because I know Dutch and needed something to test the code, I’m not gonna develop Ruimte Station 14)
A couple notes about this though. We do not intend for it to be possible to connect to an English server with your client set to Russian, and then be able to see everything except like chat in Russian. It would be too much effort to implement, and since SS13 is already a VERY text heavy game with chat, so I don’t think it’s a big loss.
For this reason we’re not actively gonna look for ways to get translations contributed yet. There actually have to be other servers to use these translations, so their communities can work on the translations. Of course that doesn’t mean I’m against upstreaming them, but still.
This is the part of our EEE plan to get the entire Russian community to join us.
Launcher Supports macOS! I got the launcher to work on macOS, so all the people using it should have a painless experience launching the latest client now. Check the downloads page for more info
\ No newline at end of file
diff --git a/post/19-06-07-progress-report-16/index.html b/post/19-06-07-progress-report-16/index.html
index eca54f7..8618618 100644
--- a/post/19-06-07-progress-report-16/index.html
+++ b/post/19-06-07-progress-report-16/index.html
@@ -1,3 +1,5 @@
-
Progress Report #16: Outline, Use, Kaboom - SS14
Progress Report #16: Outline, Use, Kaboom Contributed by PJB3005 Sunday July 7, 2019 As it turns out, re-imagining SS13 is a bit harder than simply re-making it. Not that that deters us.
Kaboom (Contributed by Injazz)
Yeah it could use some polish. Baby steps though.
Interaction Rework The primary method of interacting with the game world is clicking via your hand. We all know how this works and I will say is quite intuitive. That doesn’t mean however it cannot be improved upon.
One of the biggest nuisances I personally have with SS13 is that having your hands full basically makes it impossible to do many things like just opening computer interfaces. This usually results in you having to akwardly drop things just to open a computer interface. Of course SS13 only cares about this when opening the interface and ignores the items in your hand actually using it.
This is a massive paper cut. I want to be able to use computers, open lockers, etc… without having to drop things in my hand. Now yes, you could argue that “you can’t use a computer while you’re holding toolboxes”. You would be right, but I definitely could use a computer while holding a screwdriver. Any further detail into this just feels like simulating things that aren’t actually fun . Also I can totally look at a computer screen with toolboxes in my hand. Not so much the case for SS13.
The gist is that we assigned the E
key to act as a permanent “interact with empty hand” button. So if you want to use a computer, you can just hit E instead of having to drop whatever you’re holding. This should hopefully cut out a lot of finnicky item manipulation and make the game just a bit more streamlined.
Outlines! Yep, it actually cover the whole entity now!
If you went and actually tried to download SS14 (you should!), you’ll probably have noticed that outlines for the entity under your mouse were.. pretty broken.
Drawing these outlines is actually a lot more annoying than it may look at first sight. The outline has to consider the entire entity, not just be ran layer-by-layer (which is what was happening before). Graphics APIs only really allow you to draw layer by layer though. This is a solved problem of course, just draw the entity into its own framebuffer and then apply the outline to that . While I cannot speak for an engine like Unity, I can already tell you there is just no sane way to implement this in Godot without many hacks. I’m quite glad we dropped Godot, because it was relatively simple to implement this in our own renderer.
Outlines are looking pretty fancy now. They’re not perfect (could use some better contrast in light areas), but now that’s just some GLSL shader code away, instead of massive renderer reworks. If somebody’s feeling brave, it should be quite easy to improve!
\ No newline at end of file
+
Progress Report #16: Outline, Use, Kaboom - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Progress Report #16: Outline, Use, Kaboom Contributed by PJB3005 Sunday July 7, 2019 As it turns out, re-imagining SS13 is a bit harder than simply re-making it. Not that that deters us.
Kaboom (Contributed by Injazz)
Yeah it could use some polish. Baby steps though.
Interaction Rework The primary method of interacting with the game world is clicking via your hand. We all know how this works and I will say is quite intuitive. That doesn’t mean however it cannot be improved upon.
One of the biggest nuisances I personally have with SS13 is that having your hands full basically makes it impossible to do many things like just opening computer interfaces. This usually results in you having to akwardly drop things just to open a computer interface. Of course SS13 only cares about this when opening the interface and ignores the items in your hand actually using it.
This is a massive paper cut. I want to be able to use computers, open lockers, etc… without having to drop things in my hand. Now yes, you could argue that “you can’t use a computer while you’re holding toolboxes”. You would be right, but I definitely could use a computer while holding a screwdriver. Any further detail into this just feels like simulating things that aren’t actually fun . Also I can totally look at a computer screen with toolboxes in my hand. Not so much the case for SS13.
The gist is that we assigned the E
key to act as a permanent “interact with empty hand” button. So if you want to use a computer, you can just hit E instead of having to drop whatever you’re holding. This should hopefully cut out a lot of finnicky item manipulation and make the game just a bit more streamlined.
Outlines! Yep, it actually cover the whole entity now!
If you went and actually tried to download SS14 (you should!), you’ll probably have noticed that outlines for the entity under your mouse were.. pretty broken.
Drawing these outlines is actually a lot more annoying than it may look at first sight. The outline has to consider the entire entity, not just be ran layer-by-layer (which is what was happening before). Graphics APIs only really allow you to draw layer by layer though. This is a solved problem of course, just draw the entity into its own framebuffer and then apply the outline to that . While I cannot speak for an engine like Unity, I can already tell you there is just no sane way to implement this in Godot without many hacks. I’m quite glad we dropped Godot, because it was relatively simple to implement this in our own renderer.
Outlines are looking pretty fancy now. They’re not perfect (could use some better contrast in light areas), but now that’s just some GLSL shader code away, instead of massive renderer reworks. If somebody’s feeling brave, it should be quite easy to improve!
\ No newline at end of file
diff --git a/post/19-07-24-progress-report-17/index.html b/post/19-07-24-progress-report-17/index.html
index 9dffe58..fcc8625 100644
--- a/post/19-07-24-progress-report-17/index.html
+++ b/post/19-07-24-progress-report-17/index.html
@@ -1,4 +1,6 @@
-
Progress Report #17: Main UI Plans - SS14
Progress Report #17: Main UI Plans Contributed by PJB3005 Wednesday July 24, 2019 One of the biggest things that scare people away from SS13 is, of course, the terrible user interface.
+
Progress Report #17: Main UI Plans - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Progress Report #17: Main UI Plans Contributed by PJB3005 Wednesday July 24, 2019 One of the biggest things that scare people away from SS13 is, of course, the terrible user interface.
So, let’s make sure that isn’t the case for SS14!
UI Mockup This is the rough UI mockup Injazz made for us. Obviously, it’s still quite rough. We’ll probably make chat a bit bigger for example, but it’s still roughly what we’re aiming for. There’s also a lot of rough art that we definitely won’t keep (the inventory icons you can see are definitely NOT final, for example).
The buttons in the top left are for windows you can open all the time, like your inventory, character menu, crafting, etc… Key binds are listed right there or you can just use the mouse. It’s clear and simple.
The status effects in the bottom right will list most, well, status effects. Everything from hungry to blindness. Once again goes towards making it more clear what the hell is going on.
This will also be where things like “resist” will be listed. Instead of just having a single vague “resist” button, you’ll be able to click to resist specific things like cuffs, or to stop, drop & roll.
And obviously we need a better quick bar. Ideally this would be merged with stuff like toolbelts too, so you can access all your tools easily.
Actually in game How much of it is actually implemented in game? This much:
We’re just using SS13’s UI icons for now to avoid drawing new ones.
\ No newline at end of file
diff --git a/post/19-08-24-progress-report-18/index.html b/post/19-08-24-progress-report-18/index.html
index 4ed3628..9d5eacc 100644
--- a/post/19-08-24-progress-report-18/index.html
+++ b/post/19-08-24-progress-report-18/index.html
@@ -1,3 +1,5 @@
-
Progress Report #18: Speech Bubbles & Slightly Better Launcher - SS14
Progress Report #18: Speech Bubbles & Slightly Better Launcher Contributed by PJB3005 Wednesday August 28, 2019 Writing these into sections is hard, did you know that?
Speech Bubbles
Oh yeah, the PR for this added exactly 6,969 lines . Nice.
Graphical Launcher Cross platform GUI sucks.
So the old launcher was obviously pretty crappy if you tried it before. It was a simple console app because, as mentioned, cross platform GUI sucks. Not having any sort of progress indicator or error handling is bad. Eventually we will also be using the launcher as a server list and way to log in. So I decided to try to get this launcher have at least a progress bar or something. Oh boy. Cross platform GUI sucks .
We have some requirements for the launcher:
It should still be written in C#, to not make contributing to it too hard. It should be light weight . No damn bloated Electron apps here. Ideally the same look across platforms, namely whatever unified look we decide on for the website etc too. This basically left us with two existing options: Qml.NET and Avalonia UI . I built prototypes in both to try them out.
Qml.NET was painful to work with (QML sucks) and I could not for the life of me figure out a sane way to package Qt, so I just had to drop it.
Avalonia was still quite painful (lack of documentation, poor error reporting, etc…) but it was workable at the end of the day. I ran into a bunch of trouble due to conflicting dependencies when trying to use it with Mono though, so I also had to drop it, for now at least.
So wait, what did I use? None other than Robust Lite ! So yes the current launcher is literally just the game client with all the non-UI code disabled. It’s not at all a well behaved GUI app so this really will not be the future of the launcher. My current plan is to switch to Avalonia when we properly land .NET Core support. Oh, yeah, we’re getting .NET Core support!
.NET Core support Find out how to get 35% extra FPS with this one weird trick!
If you know a bit about .NET you’ve probably heard about .NET Core. Basically Microsoft made their own open-source & cross platform .NET runtime. It’s matured a lot since it came out a few years ago, and I’d say it’s finally suitable to run the game on.
Some advantages of .NET Core are:
Better tooling, especially on Linux/macOS. WAY better performance. It’s gonna get all the fancy new features like C# 8. Until .NET Core 3, it was missing a few features we depended on. With .NET Core 3 they’re supported, so I got the game to run on it. Did I mention it runs so much better?
Ideally we’ll switch to .NET Core entirely once it’s 100% stable. It’ll make it easier to package the game and such too.
\ No newline at end of file
+
Progress Report #18: Speech Bubbles & Slightly Better Launcher - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Progress Report #18: Speech Bubbles & Slightly Better Launcher Contributed by PJB3005 Wednesday August 28, 2019 Writing these into sections is hard, did you know that?
Speech Bubbles
Oh yeah, the PR for this added exactly 6,969 lines . Nice.
Graphical Launcher Cross platform GUI sucks.
So the old launcher was obviously pretty crappy if you tried it before. It was a simple console app because, as mentioned, cross platform GUI sucks. Not having any sort of progress indicator or error handling is bad. Eventually we will also be using the launcher as a server list and way to log in. So I decided to try to get this launcher have at least a progress bar or something. Oh boy. Cross platform GUI sucks .
We have some requirements for the launcher:
It should still be written in C#, to not make contributing to it too hard. It should be light weight . No damn bloated Electron apps here. Ideally the same look across platforms, namely whatever unified look we decide on for the website etc too. This basically left us with two existing options: Qml.NET and Avalonia UI . I built prototypes in both to try them out.
Qml.NET was painful to work with (QML sucks) and I could not for the life of me figure out a sane way to package Qt, so I just had to drop it.
Avalonia was still quite painful (lack of documentation, poor error reporting, etc…) but it was workable at the end of the day. I ran into a bunch of trouble due to conflicting dependencies when trying to use it with Mono though, so I also had to drop it, for now at least.
So wait, what did I use? None other than Robust Lite ! So yes the current launcher is literally just the game client with all the non-UI code disabled. It’s not at all a well behaved GUI app so this really will not be the future of the launcher. My current plan is to switch to Avalonia when we properly land .NET Core support. Oh, yeah, we’re getting .NET Core support!
.NET Core support Find out how to get 35% extra FPS with this one weird trick!
If you know a bit about .NET you’ve probably heard about .NET Core. Basically Microsoft made their own open-source & cross platform .NET runtime. It’s matured a lot since it came out a few years ago, and I’d say it’s finally suitable to run the game on.
Some advantages of .NET Core are:
Better tooling, especially on Linux/macOS. WAY better performance. It’s gonna get all the fancy new features like C# 8. Until .NET Core 3, it was missing a few features we depended on. With .NET Core 3 they’re supported, so I got the game to run on it. Did I mention it runs so much better?
Ideally we’ll switch to .NET Core entirely once it’s 100% stable. It’ll make it easier to package the game and such too.
\ No newline at end of file
diff --git a/post/19-10-22-progress-report-19/index.html b/post/19-10-22-progress-report-19/index.html
index f96d21a..28e9bcf 100644
--- a/post/19-10-22-progress-report-19/index.html
+++ b/post/19-10-22-progress-report-19/index.html
@@ -1,15 +1,17 @@
-
Progress Report #19: 2x The Wait, 4x The Content - SS14
Progress Report #19: 2x The Wait, 4x The Content Contributed by PJB3005 Tuesday October 22, 2019 Kept you waiting, huh?
Yeah it probably would’ve been better to actually release a progress report in september. This one is absolutely huge now. Oops.
Combat Work Attack Animations So the flashiest thing: we have semi functional melee combat now!
A core part of making a combat system fun is making sure the animations work well. Feedback to every party involved is incredibly important to make sense of what is going on in a fight, and to make the experience more enjoyable.
I wanted to make sure the animations were short but still quite clear. Personally I’m not a fan of those slow hovering sprite animations you see on some servers. When you land a hit, it should be immediately obvious to you and everybody around you.
You may also notice that we’re definitely not using “you have to click on the sprite” combat like in BYOND. As much as I think this is a great meme, it just kinda sucked, and I think we can do better.
Combat Mode (AKA, Intents v2) Intents are a core mechanic of SS13 combat. They’re also basically not a mechanic outside of combat.
-Really, the most significant thing intents do is change the behavior for unarmed interactions. There are some odd interactions here and there but due to how rare they are, you never expect them and only learn about them when somebody tells you or you accidentally hit yourself.
Our idea is this: There are only two intents , namely combat mode or not.
Outside combat mode you can do anything you normally can, use tools, hug people, etc… You should not be able to directly do violent interactions outside combat mode. No more hitting yourself with your crowbar while prying up floors!
Inside combat mode, all your interactions are somehow violent. Every item is a weapon in some capacity.
Yeah I need to get around to updating the styling info on that targeting doll.
One consequence of how combat mode is currently implemented is that you can’t even pick up items. There are also issues like hitting specific objects. Fancy arcing weapons is cool and all but if you just want to smash a light on the wall it doesn’t work nicely.
Ideally, there would be a separate way to do “targeted” attacks that act more like BYOND SS13 combat. There’s a few possibilities, such as wide arcing combat needing to be “charged up” for a split second. The other option is to make it a separate keybind like ctrl+click. Let me know what you think here .
For now, toggling combat mode is bound to the “1” key on your number row. This was after it was bound to tab and I got annoyed by constantly triggering it when alt tabbing. I’m still not sure that’s a great place for it, since we probably want to use the number row for action buttons later, so suggestions welcome .
Hacking & Access (Contributed by DamianX)
Both hacking and access is in! Our plans are to keep the systems mostly the same as in SS13.
Hacking in SS13 is a really simple system and it strikes a great balance between “it’s not too hard to do” and “it’s inconvenient enough to make you want to get a proper ID”. We don’t see much to change here except maybe in the interface and such.
Access is in the same boat, here. I’ve read suggestions about having access be like controlled by a central server, but really, the beauty is in the simplicity here.
We didn’t make any of the airlocks on the map require access yet (because we haven’t bothered) but the system is there. We also have an ID card computer!
Right now, the hacking interface is taken straight from SS13. Me (PJB) and Injazz designed a better one, but it hasn’t been implemented yet.
This design is not exactly final, as it doesn’t match the new theme we came up with. Read on about that.
Redesigned UI Theme So the old UI theme was kind of ugly and generic. So I decided to fix that.
This interface specifically is not properly implemented yet, but the lobby is!
My priorities when designing this theme were like this:
Function Looking cool Immersion With the third point, I mean making the interfaces make logical sense in the context of the game. For example it’s not unlikely NT would just use cheap, ugly & functional LCD panels for the APC, making the UI pixelated and probably like 16 color or whatever.
Personally, I think these kinds of designs go in hard against the first point. For something as simple as the APC the problem might not be too severe, but when you get into more complex interfaces like the air alarm, which would surely use the same kind of LCD, you’re gonna be in for a world of pain.
This does not rule out interfaces like the hacking interface mockup shown earlier, but it does rule out stuff like “ugly 16 color pixelated displays”. The hacking interface is something where, through heavy stylization & layout, we get something that still feels sort of immersive (you can see obvious connections to the PCB and such) while not reducing usability.
Basic Chemistry (Contributed by moneyl & Acruid) You can mix reagents, and cause explosions! Not much else though.
Yeah, reagent metabolism isn’t yet, or syringes, or drinking, you get the gist.
Importing sprites from SS13. You might think it’s easy to import sprites from SS13. We even have a tool for it.
We extensively make things that are logically “lit” on entities such as computer screens ignore the lighting layer. You’ve probably noticed this in earlier screenshots and such. This looks great! The problem is that half the sprites I get to import into SS14 literally weren’t designed for this, so there’s a TON of manually cutting up sprites into extra layers to get everything to look better than ever.
Many SS13 sprites also don’t seem to have explicit depowered variants of their sprites, and when they do they usually don’t go far enough. Take the Eris airlock sprites we’ve been using for example. There are lights on the keypad and on the top of the door that change color when opening or flicking the deny animation. It makes sense to me that these are actually lights that are always powered, so we made them explicitly ignore lighting. There’s no version of the airlock sprite that has this light completely greyed out though! Luckily making these version isn’t hard with some saturation/lightness adjustment in an image editor, but it’s still something that “needs” doing.
The end results, however, are worth it:
Very Basic Research (Contributed by Zumorica) As always, the interface could use some work, and some of the exact mechanics could use some thought.
But hey, progress is being made.
Oh yeah, this is just a fraction of them. It’s getting to the point now where the entity spawn panel hangs for a bit when first opened because it has to load all the textures at once. We should probably organize that a bit more.
Map Extensions When we add new features, we like to put them on the map. As such, I mapped a basic science & medical department. Moneyl also mapped a tool storage/construction kinda room to the left of engineering.
Filling these places up can be a challenge with our lack of implement props, but I’m sure we’ll improve the situation over time.
Writing fancy examine tooltips used to be pretty annoying. They also weren’t localizable correctly because it was just such a pain to write them. I put some effort into improving the workflow here by writing a simplistic BBCode-like parser.
What it used to look like:
message . AddText ( "A dice with " );
-message . PushColor ( new Color ( 1F , 0.75F , 0.75F ));
-message . AddText ( _ sides . ToString ());
-message . Pop ();
-message . AddText ( " sides.\nIt has landed on a " );
-message . PushColor ( new Color ( 1F , 1F , 1F ));
-message . AddText ( _ currentSide . ToString ());
-message . Pop ();
-message . AddText ( "." );
-
What it looks like now:
message . AddMarkup ( loc . GetString ( "A dice with [color=lightgray]{0}[/color] sides.\n" +
- "It has landed on a [color=white]{1}[/color]." , _ sides , _ currentSide ));
-
Obviously, quite a bit easier to work with, especially if you’re a Russian trying to translate the game.
Some Fancy UI Animations
Fancy animations like this make UIs way nicer to use, so I figured I’d implement some.
Yes, these are better animations than some of the programs I use daily. Go figure.
Being in a proper programming language, we can do a lot more fun stuff than something like BYOND. This is known.
One feature this allows is directly accepting input from attached MIDI devices like musical keyboards, so you can perform live in front of your audience at the bar.
Because we can use system sound fonts, a lot of instruments can be supported out of the box, without significantly bloating the size of the game:
Yes, this is apparently how we’re painting the bikeshed. But hey, it’s a fun feature and people can choose to contribute whatever they want.
This also means that now we have an API for streaming in audio samples, which paves the way to other features like text-to-speech or voice chat, if other servers want to implement those. We currently have no plans to implement these kinds of things ourselves, but the possibility is open for anybody wishing to contribute or fork the code.
(Look, I personally also think text to speech is a cool idea but I’m afraid that if I dare touch TTS engines I’ll get PTSD from trying to get them to work sanely & cross platform, fluidsynth for MIDI was awful enough)
A Note On MacOS Support. You may have heard some noise on the internet about Apple hardening requirements to make software for macOS, and many indie game developers considering dropping macOS support. We are also getting burned here. While I’m not gonna drop macOS support officially any time soon, running the game may be harder and harder on macOS. This is not our fault, blame Apple for continually reinforcing their stupid walled garden.
The short version is, Apple is gonna make it impossible for us to publish the game for macOS without paying them $100 a year.
We are not paying Apple $100 a year. We can publish Windows and Linux versions with zero hassle from any operating system. Apple wants us to pay them for the privilege of developing for their platform. And also to do it on macOS, on their overpriced Apple hardware, with their tooling.
Also, since I’ve seen some game devs complain about the 32 bit support drop: We literally don’t care about that, we weren’t supporting 32 bit in the first place.
\ No newline at end of file
+
Progress Report #19: 2x The Wait, 4x The Content - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Progress Report #19: 2x The Wait, 4x The Content Contributed by PJB3005 Tuesday October 22, 2019 Kept you waiting, huh?
Yeah it probably would’ve been better to actually release a progress report in september. This one is absolutely huge now. Oops.
Combat Work Attack Animations So the flashiest thing: we have semi functional melee combat now!
A core part of making a combat system fun is making sure the animations work well. Feedback to every party involved is incredibly important to make sense of what is going on in a fight, and to make the experience more enjoyable.
I wanted to make sure the animations were short but still quite clear. Personally I’m not a fan of those slow hovering sprite animations you see on some servers. When you land a hit, it should be immediately obvious to you and everybody around you.
You may also notice that we’re definitely not using “you have to click on the sprite” combat like in BYOND. As much as I think this is a great meme, it just kinda sucked, and I think we can do better.
Combat Mode (AKA, Intents v2) Intents are a core mechanic of SS13 combat. They’re also basically not a mechanic outside of combat.
+Really, the most significant thing intents do is change the behavior for unarmed interactions. There are some odd interactions here and there but due to how rare they are, you never expect them and only learn about them when somebody tells you or you accidentally hit yourself.
Our idea is this: There are only two intents , namely combat mode or not.
Outside combat mode you can do anything you normally can, use tools, hug people, etc… You should not be able to directly do violent interactions outside combat mode. No more hitting yourself with your crowbar while prying up floors!
Inside combat mode, all your interactions are somehow violent. Every item is a weapon in some capacity.
Yeah I need to get around to updating the styling info on that targeting doll.
One consequence of how combat mode is currently implemented is that you can’t even pick up items. There are also issues like hitting specific objects. Fancy arcing weapons is cool and all but if you just want to smash a light on the wall it doesn’t work nicely.
Ideally, there would be a separate way to do “targeted” attacks that act more like BYOND SS13 combat. There’s a few possibilities, such as wide arcing combat needing to be “charged up” for a split second. The other option is to make it a separate keybind like ctrl+click. Let me know what you think here .
For now, toggling combat mode is bound to the “1” key on your number row. This was after it was bound to tab and I got annoyed by constantly triggering it when alt tabbing. I’m still not sure that’s a great place for it, since we probably want to use the number row for action buttons later, so suggestions welcome .
Hacking & Access (Contributed by DamianX)
Both hacking and access is in! Our plans are to keep the systems mostly the same as in SS13.
Hacking in SS13 is a really simple system and it strikes a great balance between “it’s not too hard to do” and “it’s inconvenient enough to make you want to get a proper ID”. We don’t see much to change here except maybe in the interface and such.
Access is in the same boat, here. I’ve read suggestions about having access be like controlled by a central server, but really, the beauty is in the simplicity here.
We didn’t make any of the airlocks on the map require access yet (because we haven’t bothered) but the system is there. We also have an ID card computer!
Right now, the hacking interface is taken straight from SS13. Me (PJB) and Injazz designed a better one, but it hasn’t been implemented yet.
This design is not exactly final, as it doesn’t match the new theme we came up with. Read on about that.
Redesigned UI Theme So the old UI theme was kind of ugly and generic. So I decided to fix that.
This interface specifically is not properly implemented yet, but the lobby is!
My priorities when designing this theme were like this:
Function Looking cool Immersion With the third point, I mean making the interfaces make logical sense in the context of the game. For example it’s not unlikely NT would just use cheap, ugly & functional LCD panels for the APC, making the UI pixelated and probably like 16 color or whatever.
Personally, I think these kinds of designs go in hard against the first point. For something as simple as the APC the problem might not be too severe, but when you get into more complex interfaces like the air alarm, which would surely use the same kind of LCD, you’re gonna be in for a world of pain.
This does not rule out interfaces like the hacking interface mockup shown earlier, but it does rule out stuff like “ugly 16 color pixelated displays”. The hacking interface is something where, through heavy stylization & layout, we get something that still feels sort of immersive (you can see obvious connections to the PCB and such) while not reducing usability.
Basic Chemistry (Contributed by moneyl & Acruid) You can mix reagents, and cause explosions! Not much else though.
Yeah, reagent metabolism isn’t yet, or syringes, or drinking, you get the gist.
Importing sprites from SS13. You might think it’s easy to import sprites from SS13. We even have a tool for it.
We extensively make things that are logically “lit” on entities such as computer screens ignore the lighting layer. You’ve probably noticed this in earlier screenshots and such. This looks great! The problem is that half the sprites I get to import into SS14 literally weren’t designed for this, so there’s a TON of manually cutting up sprites into extra layers to get everything to look better than ever.
Many SS13 sprites also don’t seem to have explicit depowered variants of their sprites, and when they do they usually don’t go far enough. Take the Eris airlock sprites we’ve been using for example. There are lights on the keypad and on the top of the door that change color when opening or flicking the deny animation. It makes sense to me that these are actually lights that are always powered, so we made them explicitly ignore lighting. There’s no version of the airlock sprite that has this light completely greyed out though! Luckily making these version isn’t hard with some saturation/lightness adjustment in an image editor, but it’s still something that “needs” doing.
The end results, however, are worth it:
Very Basic Research (Contributed by Zumorica) As always, the interface could use some work, and some of the exact mechanics could use some thought.
But hey, progress is being made.
Oh yeah, this is just a fraction of them. It’s getting to the point now where the entity spawn panel hangs for a bit when first opened because it has to load all the textures at once. We should probably organize that a bit more.
Map Extensions When we add new features, we like to put them on the map. As such, I mapped a basic science & medical department. Moneyl also mapped a tool storage/construction kinda room to the left of engineering.
Filling these places up can be a challenge with our lack of implement props, but I’m sure we’ll improve the situation over time.
Writing fancy examine tooltips used to be pretty annoying. They also weren’t localizable correctly because it was just such a pain to write them. I put some effort into improving the workflow here by writing a simplistic BBCode-like parser.
What it used to look like:
message . AddText ( "A dice with " );
+message . PushColor ( new Color ( 1F , 0.75F , 0.75F ));
+message . AddText ( _sides . ToString ());
+message . Pop ();
+message . AddText ( " sides.\nIt has landed on a " );
+message . PushColor ( new Color ( 1F , 1F , 1F ));
+message . AddText ( _currentSide . ToString ());
+message . Pop ();
+message . AddText ( "." );
+
What it looks like now:
message . AddMarkup ( loc . GetString ( "A dice with [color=lightgray]{0}[/color] sides.\n" +
+ "It has landed on a [color=white]{1}[/color]." , _sides , _currentSide ));
+
Obviously, quite a bit easier to work with, especially if you’re a Russian trying to translate the game.
Some Fancy UI Animations
Fancy animations like this make UIs way nicer to use, so I figured I’d implement some.
Yes, these are better animations than some of the programs I use daily. Go figure.
Being in a proper programming language, we can do a lot more fun stuff than something like BYOND. This is known.
One feature this allows is directly accepting input from attached MIDI devices like musical keyboards, so you can perform live in front of your audience at the bar.
Because we can use system sound fonts, a lot of instruments can be supported out of the box, without significantly bloating the size of the game:
Yes, this is apparently how we’re painting the bikeshed. But hey, it’s a fun feature and people can choose to contribute whatever they want.
This also means that now we have an API for streaming in audio samples, which paves the way to other features like text-to-speech or voice chat, if other servers want to implement those. We currently have no plans to implement these kinds of things ourselves, but the possibility is open for anybody wishing to contribute or fork the code.
(Look, I personally also think text to speech is a cool idea but I’m afraid that if I dare touch TTS engines I’ll get PTSD from trying to get them to work sanely & cross platform, fluidsynth for MIDI was awful enough)
A Note On MacOS Support. You may have heard some noise on the internet about Apple hardening requirements to make software for macOS, and many indie game developers considering dropping macOS support. We are also getting burned here. While I’m not gonna drop macOS support officially any time soon, running the game may be harder and harder on macOS. This is not our fault, blame Apple for continually reinforcing their stupid walled garden.
The short version is, Apple is gonna make it impossible for us to publish the game for macOS without paying them $100 a year.
We are not paying Apple $100 a year. We can publish Windows and Linux versions with zero hassle from any operating system. Apple wants us to pay them for the privilege of developing for their platform. And also to do it on macOS, on their overpriced Apple hardware, with their tooling.
Also, since I’ve seen some game devs complain about the 32 bit support drop: We literally don’t care about that, we weren’t supporting 32 bit in the first place.
\ No newline at end of file
diff --git a/post/20-01-24-progress-report-20/index.html b/post/20-01-24-progress-report-20/index.html
index 05d666c..06e1baf 100644
--- a/post/20-01-24-progress-report-20/index.html
+++ b/post/20-01-24-progress-report-20/index.html
@@ -1,3 +1,5 @@
-
Progress Report #20: 2020 Resolution Failed - SS14
Progress Report #20: 2020 Resolution Failed Contributed by PJB3005 Friday January 24, 2020 Writing progress reports is hard. Usually it isn’t even writing the progress report itself, it’s making the content we’ve added presentable.
So I started writing this progress report with the intent of getting it published around christmas. That then turned to “finish it around new year, with the new year’s resolution being actually getting something done on time”. Failed that too.
Obviously we still have a ton of great work from various contributors done in the last 3 months. Why did it take 3 months? Because I keep getting distracted with coding things while writing the progress report! Cue another couple days of coding something / cleaning something up when I said on Discord I would “write the progress report”.
I really want to get this progress report out the door now so as a result, a lot of things will be way less polished than usual . For example normally I’d go and edit the map to add all the new features added… at this point if I did I’d consider it a failure on my part, because that means this progress report would be even more delayed.
Anyways uh, onto the progress.
Contributions welcome! If you’ve been thinking about contributing, now is an amazing time to start! There’s a lot of stuff to polish up / add and we’d be glad to have you! . A lot of these tasks are relatively simple so, I’ve made a bunch of new issues on GitHub tagged with the Junior Job label , if you want something to work on. I’ll make sure to include you in the next progress report!
Item status The Hot New Unique Feature™️ coming to SS14 this progress report is Item Status:
Tooltips so you can instantly tell important status information about what you’re holding!
So simple textual tooltips were the initial idea. Then I got a bit creative …
Then I just went all out.
Unmute the above for sound
Also it displays the chambered bullets separately, so we can use this in the future to show things like “is the current shell spent” for shotguns. No more unecessarily cycling shells because you’re unsure the current one is fired or loaded!
If you’re wondering, this is what it looks like for guns with significantly more ammo:
Yes I’m aware the realistic bullet shapes don’t actually match the shape in the interface. Spriting is hard. But hey if you’d like that, we’ll be happy to have your contributions!
Ideally, most items in the game that aren’t as simple as a crowbar would have this kind of status tooltip. They’re relatively simple to add and make the UI just that tid bit better.
Cooldown status Similar to the above, you can now see the cooldown on melee weapons (and the bike horn)!
Player preferences, slots, jobs (contributed by DamianX & ZelteHonor) UI under construction, bear with us.
DamianX has been hard at work implementing player preferences. Most of this work is now done! Not all appearance options are available yet but the most important ones like hair are available.
Jobs were implemented by ZelteHonor and have been integrated as well.
UI under construction, bear with us.
We got the standard high/medium/low/never priority system you’re probably familiar with. For the time being we cut out many jobs like Detective, Atmospheric Technician, etc… that won’t get much content in the foreseeable future. It allows us to focus on less things so that we can maybe have a real round going sooner. Obviously we do intend to bring all these jobs back when we’ve got more content.
For the technical details, preferences are currently stored in SQLite via Entity Framework. Adding new preferences should be fairly trivial even if you don’t know anything about SQL. We do intend to make the public server eventually use something like PostgreSQL instead, but SQLite is more than good enough for now.
New launcher We finally have a launcher that isn’t a poorly hacked together pile of duct tape. It’s got a server list, account management, and so on.
The new launcher is written in Avalonia, so it should be decently performant and not make your GPU run while minimized (like the old one). All in all I’m quite pleased with Avalonia for cross platform GUI now that I’ve used it some more.
Icon & logo switch I really wanted to get rid of the old logo. I mean this one:
There were a few problems with it:
Basically impossible to actually recognize when it’s at a small size like 32x32 like in your browser’s tab bar. Too much small text for a small window icon and such. The image was drawn by somebody at the amazing size of drumroll please 135x135. This makes it completely impossible to sanely upscale/downscale to common sizes like 128x, 256x, etc as commonly used in desktop environments. We would’ve had to re-draw it in vectors anyways. I just didn’t like it. ¯\_(ツ)_/¯ There was, of course, another logo we were using in a few places. Which you might’ve seen if you launched the game before:
This logo was based on the logo used by the original SS13 remake (spacestation13.com ) and “duct taped up” by Silver. I really did love this one because it looked both hilarious and unironically good. It still had the issue of “only had it in an akwardly sized PNG form” though and that tape wouldn’t vectorise well.
Took a bit of work but I modified the original’s vector art to change the 13 into a 14:
I also made a more “flat” form of the logo that is laid out slightly more horizontally, as to not waste too much vertical space in the launcher and website. You’ve already seen it twice because it’s in the above launcher screenshot and at the top of this page now, but oh well:
There was still one issue remaining though, what do we do with the icon ? With this I mean the small icon you have as window icon and in your task bar and such.
So initially I tried to use the same circle-based icon as present in the original remake’s vector files, which looked like this:
Honestly though, nobody was really warm on it but I also could’t think of a better alternative.
Luckily, unusualcrow came up with the current icon, and it looks great:
This is the icon we will be using from now on for stuff like window icons, the websites favicon (in your tab bar) and so on.
Outlines change color when in range This is a pretty minor change. You can now see based on the outline whether you’re in interaction range!
Because SS14 is no longer tile based, it may not always be perfectly clear whether you can pick something up at a certain range. This should help solve any doubts you have.
Just like last time, more sprites have been imported from Eris and such.
Still just a fraction of them in that screenshot. The spawn panel no longer hangs when opening though!
Don’t starve!
Basic cargo system (Contributed by ShadowCommander) We didn’t actually map a cargo shuttle yet, so the things you order just appear on top of the computer right now. Oh well.
Windows! These beautiful window sprites are one of the best things about Eris' perspective wall sprites, in my opinion. I’m glad to have them correctly rendered now.
To autoplay video or not to autoplay video. I’m exprimenting with having some of the videos in the progress report autoplay (obviously muted). The problem is that this causes quite a disparity with videos that do have audio. Especially ones where the primary thing being shown isn’t audio but having audio is still quite nice while watching them.
For now, I decided to autoplay videos without audio. If audio is relevant in the clip I’ll make it possible to unmute and note it. Videos that are all about audio will keep not being autoplay (of course).
Let me know if you have any serious opinions here / think this is confusing.
Planning for a Steam release We’re looking at signing up for Steam and getting the game on there. Steam provides many advantages for both us (developers) and you (players):
Convenience. No need to register a separate account, install is trivial, everything’s in your Steam library.Automatic updates of the launcher. Changing the launcher is inevitable and annoying. We do have a method for telling the current launcher “you are outdated, refuse to work” but you still have to manually download a new one. Setting up automatic updating mechanisms on all platforms is an annoying pain so if we don’t have to do it that’d be great.Using Steam’s CDN for distribution (of the launcher). Means faster installation for you and us not having to pay for bandwidth.Bypassing “security” features like code signing on platforms like Windows and macOS. As mentioned in the last progress report, Apple is dead set on making it impossible for us to distribute sanely-runnable binaries without paying them. On Windows this isn’t as bad but there’s still potential pain points. Steam solves this because games are trusted. No need to have admin privileges to install the game (as soon as Steam is installed). Ensuring consistent runtime environments. You might’ve seen the “requires VC++ 2015 Redist” line under the Windows download. Steam would allow us to get rid of things like that. Way less hassle for us to guarantee it works for you. This does require a bit of effort and organization:
$100 fee for Steam Direct. Not the biggest deal in the world, I was planning to just foot the bill from my pocket. Otherwise there are no direct monetary costs. Figuring out legal information like who “owns” the Steamworks account, and also tax information and such. I was planning on just registering myself as the owner but there is also the option of doing an LLC which might be best for various reasons. I haven’t quite decided yet so this is the big blocker. Need to actually make a Steam page that looks decent. I do hope we can at least get initial Steamworks registration done by the time the next progress report is out, however. (After you “onboard” with Steamworks it still takes a month or so to actually get a functional store page open, oh well, can’t blame em.)
Edit: I do want to point out that you will always be able to run the game without Steam. Obviously it’ll be more convenient for most people to use Steam, but if you don’t want to use it you won’t have to.
The technical details The move to .NET Core As described in Progress Report #18 , we wanted to move to .NET Core. This provides better performance, more consistant tooling, and newer language/runtime features. Good stuff.
This move is now completed. The game no longer runs on legacy Framework, it’s Core all the way. We’re already taking advantage of some of the new features for both performance and convenience.
The launcher ships a complete .NET Core 3 Runtime now, on all platforms. This does make it a bit large, but oh well. This means Linux/macOS players no longer need to install Mono to get the game to run, Windows players should see no change.
This also meant windowing is now handled by GLFW (compared to the old OpenTK 3 implementation). This should allow us to do some things like FINALLY re-implement OS mouse cursors and such.
It also means we can use C# 8 now which is already proving to be quite nice (god bless default interface methods).
Make sprite animations direction-independent The custom sprite format we use (it’s just a bunch of PNGs + a JSON file) allows for different amounts of animation frames for each direction. This is in contrary to BYOND where an icon state has to have a single amount of animations. This is of course convenient for spriters. Not so much for coders.
We already had a constraint that the total length of the animation has to be equal across all directions. This is to solve the problem of “what do you do with an in-progress animation when you turn an entity”. Honestly none of the solutions are as pretty as “add another constraint”.
There was still the problem that actually playing animations on an entity required knowing that entity’s orientation relative to the camera . Playing back animations requires a bit of state, namely frame index + animation time, so if this data is direction specific… we won’t be able to show an entity at different orientiations on the same frame.
This caused bug c#474, Bullet casings rotate in your hand with your player rotation , and furthermore would make it impossible to have things like showing views of the game (from say cameras) shown.
The way I solved it was to “fold” the animation delays across all directions into a single set of animation delays . If the delays don’t match between direction you can duplicate states and calculate the delays correctly so the visual end result is the same.
Because this makes animations independent of the actual direction being faced, we can now show entities at different orientations! It should now be totally possible to do something like show the view camera inside a UI window without glitches.
Grid entities (Contributed by Acruid) Grids are things like the station, the shuttle, etc… If it’s made out of tiles and people can stand on it it’s a grid.
These were always “separate” things in the engine from all other entities. This resulted in quite a bit of snowflaky code and inflexibility all over the place.
This is now gone and they’re full blown entities. This allowed us to do stuff like this practically overnight:
As you can clearly tell I did not put too much effort into recording this. But hey, this is the “thanks for getting this far” reward for people who read the entire progress report. So thank you!
\ No newline at end of file
+
Progress Report #20: 2020 Resolution Failed - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Progress Report #20: 2020 Resolution Failed Contributed by PJB3005 Friday January 24, 2020 Writing progress reports is hard. Usually it isn’t even writing the progress report itself, it’s making the content we’ve added presentable.
So I started writing this progress report with the intent of getting it published around christmas. That then turned to “finish it around new year, with the new year’s resolution being actually getting something done on time”. Failed that too.
Obviously we still have a ton of great work from various contributors done in the last 3 months. Why did it take 3 months? Because I keep getting distracted with coding things while writing the progress report! Cue another couple days of coding something / cleaning something up when I said on Discord I would “write the progress report”.
I really want to get this progress report out the door now so as a result, a lot of things will be way less polished than usual . For example normally I’d go and edit the map to add all the new features added… at this point if I did I’d consider it a failure on my part, because that means this progress report would be even more delayed.
Anyways uh, onto the progress.
Contributions welcome! If you’ve been thinking about contributing, now is an amazing time to start! There’s a lot of stuff to polish up / add and we’d be glad to have you! . A lot of these tasks are relatively simple so, I’ve made a bunch of new issues on GitHub tagged with the Junior Job label , if you want something to work on. I’ll make sure to include you in the next progress report!
Item status The Hot New Unique Feature™️ coming to SS14 this progress report is Item Status:
Tooltips so you can instantly tell important status information about what you’re holding!
So simple textual tooltips were the initial idea. Then I got a bit creative …
Then I just went all out.
Unmute the above for sound
Also it displays the chambered bullets separately, so we can use this in the future to show things like “is the current shell spent” for shotguns. No more unecessarily cycling shells because you’re unsure the current one is fired or loaded!
If you’re wondering, this is what it looks like for guns with significantly more ammo:
Yes I’m aware the realistic bullet shapes don’t actually match the shape in the interface. Spriting is hard. But hey if you’d like that, we’ll be happy to have your contributions!
Ideally, most items in the game that aren’t as simple as a crowbar would have this kind of status tooltip. They’re relatively simple to add and make the UI just that tid bit better.
Cooldown status Similar to the above, you can now see the cooldown on melee weapons (and the bike horn)!
Player preferences, slots, jobs (contributed by DamianX & ZelteHonor) UI under construction, bear with us.
DamianX has been hard at work implementing player preferences. Most of this work is now done! Not all appearance options are available yet but the most important ones like hair are available.
Jobs were implemented by ZelteHonor and have been integrated as well.
UI under construction, bear with us.
We got the standard high/medium/low/never priority system you’re probably familiar with. For the time being we cut out many jobs like Detective, Atmospheric Technician, etc… that won’t get much content in the foreseeable future. It allows us to focus on less things so that we can maybe have a real round going sooner. Obviously we do intend to bring all these jobs back when we’ve got more content.
For the technical details, preferences are currently stored in SQLite via Entity Framework. Adding new preferences should be fairly trivial even if you don’t know anything about SQL. We do intend to make the public server eventually use something like PostgreSQL instead, but SQLite is more than good enough for now.
New launcher We finally have a launcher that isn’t a poorly hacked together pile of duct tape. It’s got a server list, account management, and so on.
The new launcher is written in Avalonia, so it should be decently performant and not make your GPU run while minimized (like the old one). All in all I’m quite pleased with Avalonia for cross platform GUI now that I’ve used it some more.
Icon & logo switch I really wanted to get rid of the old logo. I mean this one:
There were a few problems with it:
Basically impossible to actually recognize when it’s at a small size like 32x32 like in your browser’s tab bar. Too much small text for a small window icon and such. The image was drawn by somebody at the amazing size of drumroll please 135x135. This makes it completely impossible to sanely upscale/downscale to common sizes like 128x, 256x, etc as commonly used in desktop environments. We would’ve had to re-draw it in vectors anyways. I just didn’t like it. ¯\_(ツ)_/¯ There was, of course, another logo we were using in a few places. Which you might’ve seen if you launched the game before:
This logo was based on the logo used by the original SS13 remake (spacestation13.com ) and “duct taped up” by Silver. I really did love this one because it looked both hilarious and unironically good. It still had the issue of “only had it in an akwardly sized PNG form” though and that tape wouldn’t vectorise well.
Took a bit of work but I modified the original’s vector art to change the 13 into a 14:
I also made a more “flat” form of the logo that is laid out slightly more horizontally, as to not waste too much vertical space in the launcher and website. You’ve already seen it twice because it’s in the above launcher screenshot and at the top of this page now, but oh well:
There was still one issue remaining though, what do we do with the icon ? With this I mean the small icon you have as window icon and in your task bar and such.
So initially I tried to use the same circle-based icon as present in the original remake’s vector files, which looked like this:
Honestly though, nobody was really warm on it but I also could’t think of a better alternative.
Luckily, unusualcrow came up with the current icon, and it looks great:
This is the icon we will be using from now on for stuff like window icons, the websites favicon (in your tab bar) and so on.
Outlines change color when in range This is a pretty minor change. You can now see based on the outline whether you’re in interaction range!
Because SS14 is no longer tile based, it may not always be perfectly clear whether you can pick something up at a certain range. This should help solve any doubts you have.
Just like last time, more sprites have been imported from Eris and such.
Still just a fraction of them in that screenshot. The spawn panel no longer hangs when opening though!
Don’t starve!
Basic cargo system (Contributed by ShadowCommander) We didn’t actually map a cargo shuttle yet, so the things you order just appear on top of the computer right now. Oh well.
Windows! These beautiful window sprites are one of the best things about Eris’ perspective wall sprites, in my opinion. I’m glad to have them correctly rendered now.
To autoplay video or not to autoplay video. I’m exprimenting with having some of the videos in the progress report autoplay (obviously muted). The problem is that this causes quite a disparity with videos that do have audio. Especially ones where the primary thing being shown isn’t audio but having audio is still quite nice while watching them.
For now, I decided to autoplay videos without audio. If audio is relevant in the clip I’ll make it possible to unmute and note it. Videos that are all about audio will keep not being autoplay (of course).
Let me know if you have any serious opinions here / think this is confusing.
Planning for a Steam release We’re looking at signing up for Steam and getting the game on there. Steam provides many advantages for both us (developers) and you (players):
Convenience. No need to register a separate account, install is trivial, everything’s in your Steam library.Automatic updates of the launcher. Changing the launcher is inevitable and annoying. We do have a method for telling the current launcher “you are outdated, refuse to work” but you still have to manually download a new one. Setting up automatic updating mechanisms on all platforms is an annoying pain so if we don’t have to do it that’d be great.Using Steam’s CDN for distribution (of the launcher). Means faster installation for you and us not having to pay for bandwidth.Bypassing “security” features like code signing on platforms like Windows and macOS. As mentioned in the last progress report, Apple is dead set on making it impossible for us to distribute sanely-runnable binaries without paying them. On Windows this isn’t as bad but there’s still potential pain points. Steam solves this because games are trusted. No need to have admin privileges to install the game (as soon as Steam is installed). Ensuring consistent runtime environments. You might’ve seen the “requires VC++ 2015 Redist” line under the Windows download. Steam would allow us to get rid of things like that. Way less hassle for us to guarantee it works for you. This does require a bit of effort and organization:
$100 fee for Steam Direct. Not the biggest deal in the world, I was planning to just foot the bill from my pocket. Otherwise there are no direct monetary costs. Figuring out legal information like who “owns” the Steamworks account, and also tax information and such. I was planning on just registering myself as the owner but there is also the option of doing an LLC which might be best for various reasons. I haven’t quite decided yet so this is the big blocker. Need to actually make a Steam page that looks decent. I do hope we can at least get initial Steamworks registration done by the time the next progress report is out, however. (After you “onboard” with Steamworks it still takes a month or so to actually get a functional store page open, oh well, can’t blame em.)
Edit: I do want to point out that you will always be able to run the game without Steam. Obviously it’ll be more convenient for most people to use Steam, but if you don’t want to use it you won’t have to.
The technical details The move to .NET Core As described in Progress Report #18 , we wanted to move to .NET Core. This provides better performance, more consistant tooling, and newer language/runtime features. Good stuff.
This move is now completed. The game no longer runs on legacy Framework, it’s Core all the way. We’re already taking advantage of some of the new features for both performance and convenience.
The launcher ships a complete .NET Core 3 Runtime now, on all platforms. This does make it a bit large, but oh well. This means Linux/macOS players no longer need to install Mono to get the game to run, Windows players should see no change.
This also meant windowing is now handled by GLFW (compared to the old OpenTK 3 implementation). This should allow us to do some things like FINALLY re-implement OS mouse cursors and such.
It also means we can use C# 8 now which is already proving to be quite nice (god bless default interface methods).
Make sprite animations direction-independent The custom sprite format we use (it’s just a bunch of PNGs + a JSON file) allows for different amounts of animation frames for each direction. This is in contrary to BYOND where an icon state has to have a single amount of animations. This is of course convenient for spriters. Not so much for coders.
We already had a constraint that the total length of the animation has to be equal across all directions. This is to solve the problem of “what do you do with an in-progress animation when you turn an entity”. Honestly none of the solutions are as pretty as “add another constraint”.
There was still the problem that actually playing animations on an entity required knowing that entity’s orientation relative to the camera . Playing back animations requires a bit of state, namely frame index + animation time, so if this data is direction specific… we won’t be able to show an entity at different orientiations on the same frame.
This caused bug c#474, Bullet casings rotate in your hand with your player rotation , and furthermore would make it impossible to have things like showing views of the game (from say cameras) shown.
The way I solved it was to “fold” the animation delays across all directions into a single set of animation delays . If the delays don’t match between direction you can duplicate states and calculate the delays correctly so the visual end result is the same.
Because this makes animations independent of the actual direction being faced, we can now show entities at different orientations! It should now be totally possible to do something like show the view camera inside a UI window without glitches.
Grid entities (Contributed by Acruid) Grids are things like the station, the shuttle, etc… If it’s made out of tiles and people can stand on it it’s a grid.
These were always “separate” things in the engine from all other entities. This resulted in quite a bit of snowflaky code and inflexibility all over the place.
This is now gone and they’re full blown entities. This allowed us to do stuff like this practically overnight:
As you can clearly tell I did not put too much effort into recording this. But hey, this is the “thanks for getting this far” reward for people who read the entire progress report. So thank you!
\ No newline at end of file
diff --git a/post/20-02-24-progress-report-21/index.html b/post/20-02-24-progress-report-21/index.html
index d79e141..f781e4f 100644
--- a/post/20-02-24-progress-report-21/index.html
+++ b/post/20-02-24-progress-report-21/index.html
@@ -1,4 +1,6 @@
-
Progress Report #21: Colonial Marines, lighting, features - SS14
Progress Report #21: Colonial Marines, lighting, features Contributed by Many people on Discord Monday February 24, 2020 We have big news for everyone who enjoys slaying meat sacks as a xenomorph, futilely hiding in a locker as a survivor, or being eaten alive as a marine…
Summary The Colonial Marines SS13 server dev team is planning on transitioning their codebase to the SS14 engine! They ran a stress-test on an SS14 server, and their results surpassed many expectations. They’re planning another test very soon, and some of their devs are already up to speed and contributing to the project.
-CM has the largest playerbase in SS13, with an average server population of 200 players. Their announcements have made our discord nearly double in size, and we’re getting much more contributions as a result.
We’ve also had great progress in many fields like: Realistic shadows and FOV, chemical reactions, explosions shockwaves, jobs and more.
Finally, we’ve also been accepted by Steam (we’ll still keep the game free and accessible outside of Steam) and now have a new, publicly viewable wiki on HackMD (Note: documentation has since moved to our own site. ).
Colonial Marines stress-test On February 8th, Colonial Marines ran a stress test of the game with their community, with a mere 3 days warning. We knew it wasn’t going to go great. Despite that, it still went way better than we expected (Not a single crash!)
As soon as we got the warning, we scrambled to quickly patch various areas of the game to avoid complete disaster. For example, it wasn’t possible to disable placement until like 1 hour before the test, so someone could absolutely have spawned in 10k “#1 mug” items with the block placement tool and just hang the game.
PJB’s highlights of the CM Test were the following:
People coped with the lack of guns by running straight to engineering and throwing cable coils at each other. Throwing uses only one item in a stack, and throw force isn’t based on the item itself yet, so people spammed throws with stacks of items as improvised machine guns. We had hilarious fun spawning in a few guns in a crowd of marines and watching them all gravitate to them at 10 fps like moths to lights. The most heartening result of the test was CM running a poll on their Discord on how much to focus on developing CM-SS14 (now open source) , and these were the results:
I don’t know if CM is intent on 100% following up on option 4, but either way we’re honored to be chosen and look forward to working together. Regardless, we’ve definitely worked on optimizing the code to hopefully have the next stress test not run as poorly.
Read further for the “technical” end of the CM stress test.
Shadows & FOV
We have shadow casting and field of vision now! While I do think there is a lot that could be improved, like soft shadow edges, I’m still quite pleased with the results.
For the technical people in the crowd, I made a writeup on how the lighting system works .
Explosions throw stuff (contributed by Injazz)
Jobs have been filled out (contributed by ike709) All the jobs have basic equipment defined now!
TG ID cards (contributed by AJCM) ID Cards from TG have been ported. Every job has its own ID card sprite now. Cool!
Tutorial has a new coat of paint. (contributed by Moneyl) The tutorial has been given a fresh coat of paint. All of the controls are now nicely formatted for easy reference.
I also followed up on this by properly fetching the keyboard names of things based on your keyboard layout: the controls now actually make sense if you’re not on a US QWERTY keyboard, like DVORAK:
Chemistry improvements (contributed by Moneyl)
Moneyl has been continuing work on chemistry. You can now pour stuff between beakers, and syringes and the blood stream have been implemented. No metabolization reactions have been defined yet, though.
The combat mode control issue has been solved If you’ve read the previous progress reports you’re probably familiar with combat mode. It’s our replacement for intents and it’s “in combat mode or not”.
The problem we had is that many interactions are something you want to do both inside and outside combat mode. For example, picking up the gun the guy that was dropped by the guy you just disarmed.
We weren’t quite sure how to handle these though. Since clicking in combat mode is “attack”, what if you try to attack somebody who is standing on a pile of paper and you accidentally pick up the paper? It’s not great and I figured we could do better.
The solution is as follows. Inside combat mode, you have to hold your mouse for a split second before you can do “full arc” attacks like we’ve shown off two progress reports ago. Otherwise, for single clicks, the behavior is more similar to SS13 (hit people, shoot people, but also pick stuff up/use tools where applicable).
At the moment this small period of left click is visualized by your cursor turning into a red toolbox. Yes that’s the closest thing I could think of to symbolize true violence in SS13 short of drawing a proper crosshair or something.
I’m also pleased to say that internally the game still tracks separate keybinds for these actions. So if you’re an advanced player with a 10 button mouse you could have one mouse button bound to “full swing attack” and the other to the more SS13-like behavior.
Just to be clear, this isn’t some sort of “you have to charge up your attack” balancing thing like in other games. It’s purely a way to solve the controls issue.
Click to rotate (contributed by SpaceManiac)
A simple but nice feature of SS13, now back in SS14.
Bonus points: you can actually use this while holding guns. Just make sure you’re not in combat mode!
Pen & Paper (contributed by Zth–)
It’s basic, but it works. Rendering rich text is hard, ok?
Introducing HackMD as a public dev wiki Note : Documentation has since moved to our own site.
You can now view the Space Station 14 Dev Wiki ! You will find various bikeshedding gameplay discussions, technical design and documentation, contribution guides, incomplete/nonsense pages, and much more!
It’s relieved a lot of our previous frustrations with documentation. We’d been using discord, google docs, and github issues to organize information, but there were too many disadvantages to doing so:
Discord is great for brainstorming and live discussions between developers, but all of the content gets scattered across many messages, lost, or outright forgotten. A lot of time was wasted because of how hard it was to access the information buried in previous discussions. Google Docs had some promise, but you can’t edit without a google account, leading to revealing your own name, and it really doesn’t scale well as a “wiki”. GitHub Issues and the GitHub Wiki also had similar flaws of not being live editable, cooperative, or easy to organize. It’s like Google Docs, but with Markdown, a navigation pane, easy history view and backups, access control, and much more. Basically, we can have multiple SS14 contributors collaboratively live-edit the same page of documentation at the same time, attach that new page to our “wiki”, and download a backup of the entire wiki, with almost no inconvenience.
I’m actually writing this progress report on it right now! What’s even more convenient is that both HackMD and the SS14 website use Markdown , so I don’t need to change any of the formatting to post this article. When I tried Google Docs to allow people to check my work, I had to manually re-apply all of the markup to post it, which was too much of a chore.
Using HackMD has been such a resounding success so far that we’re even deprecating the GitHub Wikis in favor of it! It’s just that much more convenient.
Also, we’re not sponsored by HackMD or anything - they’re some Chinese company that probably somehow manages to harvest your organs when you use them, but thankfully there are slightly less-featured open-source, self-hosted alternatives that we can use if anything goes wrong.
Steam update We’ve been accepted into Steam!
Now, before you panic, there are absolutely no plans to make the game Steam-exclusive. We will always support downloading and playing the game without a Steam account. The main reasons for us to get on Steam have been covered in the previous progress report . TL;DR, it’s more convenient for both us and you.
Anyway, we’ve just been accepted, so we don’t yet have a public store page. We still have to get a bunch of art together, string together a description, get it all reviewed by Valve, etc… but you can expect an Early Access store page to be public soon, and being able to download the game via Steam in a few weeks after that.
CM stress test: the technical problems There were a lot of problems, of course. Apparently Lidgren, our networking layer, has its own maximum connection count variable set in NetPeerConfiguration
. We didn’t realize this, so there was an implicit 32 player cap. We had to recompile the server mid-test to patch it. Whoops.
Then, the server started slowing down to a crawl as more people came online. We quickly figured out the problem: a copy-paste mistake in NetManager
that made it always reliably send very large game states, which flooded Lidgren’s queue and slowed everything down. We didn’t really notice this kinda bug in local testing because, well, magic perfect localhost connection. This one was pretty easy to track down when we got profiling info.
As we mentioned before, we asked CM to trace the game server while the test was going on, so that we’d know what to profile. Sadly, the profile CM gave us got corrupted, but we still managed to get good profiling info from our own public server, which had a decent player count of its own due to being easily visible in the launcher.
Launcher distribution was also a pain in the ass. We ship the .NET Core runtime that we use with the launcher, so that you don’t have to install anything else. This requires us to have a dummy batch script, which launches the launcher, pointed at the correct DOTNET_ROOT
. Simple enough, right?
Here’s some of the issues we ran into with the launcher:
The launcher doesn’t work if extracted onto the Desktop, but works fine in other locations (???). The batch script sometimes just won’t do anything. The fix is to run bin/SS14.Launcher.exe
directly. Predictably, this fails unless you already have .NET core installed, but for some reason it magically makes the batch script work! (???) And, of course, the classic anti-virus overreaction: it hasn’t seen your program before, so obviously it must be malware! We did manage to smooth some of these issues out by replacing the batch script with a tiny .exe
to do the bootstrapping. Still, god damn is it a pain. Steam will hopefully solve all of this.
Netcode optimizations Until the CM stress test, we didn’t do much optimizing of the netcode. It works fine over localhost, by virtue of localhost being a magic perfect connection.
Most of the network performance issues in the CM stress test were amplified by the poorly optimized bandwidth usage of the netcode.
e#978 by me reduced the amount of redundant data sent on initial entity creation significantly. This helps a lot with initial load times.
e#983 by Tyler-IN implements PVS, also known as bubbling. The idea is that we only send updates for entities close to your player, so that somebody moving around on the other end of the station doesn’t cost additional network bandwidth. It’s still a bit buggy but it’s a very necessary optimization.
Tyler-IN was also working on a more efficient serializer than we’re currently using, along with various other improvements like better string table handling. I also believe Acruid was experimenting with taking advantage of bit packing. Both changes will easily cut down bandwidth usage even more when they’re done and well integrated.
Another big thing we should work on is making it possible for the game server to reasonably run at a lower framerate than the client via good interpolation and such. SS13 is not that latency prone compared to, say, CS:GO, so running the game at a framerate of like 20 ticks per second server side should be totally feasible, and significantly reduce server CPU load.
e#951 and e#955 ported a proper broad-phase collision handler from Box2D. This is an amazing performance improvement over the old system (that was spending like 30% of client CPU time inside the “which entity is under mouse” code). I’m glad we managed to get this in just before the CM stress test because if not it’d have been an even worse disaster.
Considering a “Robust Film Maker” Making these skits and clips for the progress reports / Reddit is kind of annoying right now. I have to run multiple clients, keep one recording and do stuff with the other, hide the UI, etc…
The “clown is dead” one above could be much better, by having it be an actual video. Juggling 6 clients to time the messages correctly is near impossible. I edited the code real quick to make speech bubbles last 2 minutes, so I could manually posses all of the humans and make them say something, which is why it’s a static image and the continuity can be kinda hard to figure out.
Also, I had to manually respawn like 15 times and change the job in my character preferences to get all the jobs spawned in. Then the server crashed midway through, because it’s the unstable debug build, and I had to do it all over again .
Let me know if there is any interest in a “Robust Film Maker” that can be used to make skits like these? It’d definitely be convenient for me writing the progress report but I can probably get by doing a bunch of hacky code scripting to make them if I feel like it. If other people are interested in this kinda stuff I could maybe try to spend a little bit more effort on it.
Contributors this month We’ve seen a lot of new contributors join the project since the last progress report and the CM stress test. We’re absolutely grateful for the fresh help!
Because getting every minor bug fix and such into the progress report can be kinda hard, I just want to list off all the contributors we’ve had this month (GitHub usernames):
4dplanner, acvzy, Acruid, AJCM-git, DamianX, ike709, Injazz, Moneyl, PJB3005, ProfanedBane, py01, Quantomicus, Qustinnus, renodubois, ShadowCommander, SpaceManiac, Tyler-IN, Unusualcrow, Zth–, Zumorica
And of course special thanks to many of the people hanging out on Discord and GitHub providing feedback, bug reports and other things. Kinda hard to track though.
\ No newline at end of file
+
Progress Report #21: Colonial Marines, lighting, features - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Progress Report #21: Colonial Marines, lighting, features Contributed by Many people on Discord Monday February 24, 2020 We have big news for everyone who enjoys slaying meat sacks as a xenomorph, futilely hiding in a locker as a survivor, or being eaten alive as a marine…
Summary The Colonial Marines SS13 server dev team is planning on transitioning their codebase to the SS14 engine! They ran a stress-test on an SS14 server, and their results surpassed many expectations. They’re planning another test very soon, and some of their devs are already up to speed and contributing to the project.
+CM has the largest playerbase in SS13, with an average server population of 200 players. Their announcements have made our discord nearly double in size, and we’re getting much more contributions as a result.
We’ve also had great progress in many fields like: Realistic shadows and FOV, chemical reactions, explosions shockwaves, jobs and more.
Finally, we’ve also been accepted by Steam (we’ll still keep the game free and accessible outside of Steam) and now have a new, publicly viewable wiki on HackMD (Note: documentation has since moved to our own site. ).
Colonial Marines stress-test On February 8th, Colonial Marines ran a stress test of the game with their community, with a mere 3 days warning. We knew it wasn’t going to go great. Despite that, it still went way better than we expected (Not a single crash!)
As soon as we got the warning, we scrambled to quickly patch various areas of the game to avoid complete disaster. For example, it wasn’t possible to disable placement until like 1 hour before the test, so someone could absolutely have spawned in 10k “#1 mug” items with the block placement tool and just hang the game.
PJB’s highlights of the CM Test were the following:
People coped with the lack of guns by running straight to engineering and throwing cable coils at each other. Throwing uses only one item in a stack, and throw force isn’t based on the item itself yet, so people spammed throws with stacks of items as improvised machine guns. We had hilarious fun spawning in a few guns in a crowd of marines and watching them all gravitate to them at 10 fps like moths to lights. The most heartening result of the test was CM running a poll on their Discord on how much to focus on developing CM-SS14 (now open source) , and these were the results:
I don’t know if CM is intent on 100% following up on option 4, but either way we’re honored to be chosen and look forward to working together. Regardless, we’ve definitely worked on optimizing the code to hopefully have the next stress test not run as poorly.
Read further for the “technical” end of the CM stress test.
Shadows & FOV
We have shadow casting and field of vision now! While I do think there is a lot that could be improved, like soft shadow edges, I’m still quite pleased with the results.
For the technical people in the crowd, I made a writeup on how the lighting system works .
Explosions throw stuff (contributed by Injazz)
Jobs have been filled out (contributed by ike709) All the jobs have basic equipment defined now!
TG ID cards (contributed by AJCM) ID Cards from TG have been ported. Every job has its own ID card sprite now. Cool!
Tutorial has a new coat of paint. (contributed by Moneyl) The tutorial has been given a fresh coat of paint. All of the controls are now nicely formatted for easy reference.
I also followed up on this by properly fetching the keyboard names of things based on your keyboard layout: the controls now actually make sense if you’re not on a US QWERTY keyboard, like DVORAK:
Chemistry improvements (contributed by Moneyl)
Moneyl has been continuing work on chemistry. You can now pour stuff between beakers, and syringes and the blood stream have been implemented. No metabolization reactions have been defined yet, though.
The combat mode control issue has been solved If you’ve read the previous progress reports you’re probably familiar with combat mode. It’s our replacement for intents and it’s “in combat mode or not”.
The problem we had is that many interactions are something you want to do both inside and outside combat mode. For example, picking up the gun the guy that was dropped by the guy you just disarmed.
We weren’t quite sure how to handle these though. Since clicking in combat mode is “attack”, what if you try to attack somebody who is standing on a pile of paper and you accidentally pick up the paper? It’s not great and I figured we could do better.
The solution is as follows. Inside combat mode, you have to hold your mouse for a split second before you can do “full arc” attacks like we’ve shown off two progress reports ago. Otherwise, for single clicks, the behavior is more similar to SS13 (hit people, shoot people, but also pick stuff up/use tools where applicable).
At the moment this small period of left click is visualized by your cursor turning into a red toolbox. Yes that’s the closest thing I could think of to symbolize true violence in SS13 short of drawing a proper crosshair or something.
I’m also pleased to say that internally the game still tracks separate keybinds for these actions. So if you’re an advanced player with a 10 button mouse you could have one mouse button bound to “full swing attack” and the other to the more SS13-like behavior.
Just to be clear, this isn’t some sort of “you have to charge up your attack” balancing thing like in other games. It’s purely a way to solve the controls issue.
Click to rotate (contributed by SpaceManiac)
A simple but nice feature of SS13, now back in SS14.
Bonus points: you can actually use this while holding guns. Just make sure you’re not in combat mode!
Pen & Paper (contributed by Zth–)
It’s basic, but it works. Rendering rich text is hard, ok?
Introducing HackMD as a public dev wiki Note : Documentation has since moved to our own site.
You can now view the Space Station 14 Dev Wiki ! You will find various bikeshedding gameplay discussions, technical design and documentation, contribution guides, incomplete/nonsense pages, and much more!
It’s relieved a lot of our previous frustrations with documentation. We’d been using discord, google docs, and github issues to organize information, but there were too many disadvantages to doing so:
Discord is great for brainstorming and live discussions between developers, but all of the content gets scattered across many messages, lost, or outright forgotten. A lot of time was wasted because of how hard it was to access the information buried in previous discussions. Google Docs had some promise, but you can’t edit without a google account, leading to revealing your own name, and it really doesn’t scale well as a “wiki”. GitHub Issues and the GitHub Wiki also had similar flaws of not being live editable, cooperative, or easy to organize. It’s like Google Docs, but with Markdown, a navigation pane, easy history view and backups, access control, and much more. Basically, we can have multiple SS14 contributors collaboratively live-edit the same page of documentation at the same time, attach that new page to our “wiki”, and download a backup of the entire wiki, with almost no inconvenience.
I’m actually writing this progress report on it right now! What’s even more convenient is that both HackMD and the SS14 website use Markdown , so I don’t need to change any of the formatting to post this article. When I tried Google Docs to allow people to check my work, I had to manually re-apply all of the markup to post it, which was too much of a chore.
Using HackMD has been such a resounding success so far that we’re even deprecating the GitHub Wikis in favor of it! It’s just that much more convenient.
Also, we’re not sponsored by HackMD or anything - they’re some Chinese company that probably somehow manages to harvest your organs when you use them, but thankfully there are slightly less-featured open-source, self-hosted alternatives that we can use if anything goes wrong.
Steam update We’ve been accepted into Steam!
Now, before you panic, there are absolutely no plans to make the game Steam-exclusive. We will always support downloading and playing the game without a Steam account. The main reasons for us to get on Steam have been covered in the previous progress report . TL;DR, it’s more convenient for both us and you.
Anyway, we’ve just been accepted, so we don’t yet have a public store page. We still have to get a bunch of art together, string together a description, get it all reviewed by Valve, etc… but you can expect an Early Access store page to be public soon, and being able to download the game via Steam in a few weeks after that.
CM stress test: the technical problems There were a lot of problems, of course. Apparently Lidgren, our networking layer, has its own maximum connection count variable set in NetPeerConfiguration
. We didn’t realize this, so there was an implicit 32 player cap. We had to recompile the server mid-test to patch it. Whoops.
Then, the server started slowing down to a crawl as more people came online. We quickly figured out the problem: a copy-paste mistake in NetManager
that made it always reliably send very large game states, which flooded Lidgren’s queue and slowed everything down. We didn’t really notice this kinda bug in local testing because, well, magic perfect localhost connection. This one was pretty easy to track down when we got profiling info.
As we mentioned before, we asked CM to trace the game server while the test was going on, so that we’d know what to profile. Sadly, the profile CM gave us got corrupted, but we still managed to get good profiling info from our own public server, which had a decent player count of its own due to being easily visible in the launcher.
Launcher distribution was also a pain in the ass. We ship the .NET Core runtime that we use with the launcher, so that you don’t have to install anything else. This requires us to have a dummy batch script, which launches the launcher, pointed at the correct DOTNET_ROOT
. Simple enough, right?
Here’s some of the issues we ran into with the launcher:
The launcher doesn’t work if extracted onto the Desktop, but works fine in other locations (???). The batch script sometimes just won’t do anything. The fix is to run bin/SS14.Launcher.exe
directly. Predictably, this fails unless you already have .NET core installed, but for some reason it magically makes the batch script work! (???) And, of course, the classic anti-virus overreaction: it hasn’t seen your program before, so obviously it must be malware! We did manage to smooth some of these issues out by replacing the batch script with a tiny .exe
to do the bootstrapping. Still, god damn is it a pain. Steam will hopefully solve all of this.
Netcode optimizations Until the CM stress test, we didn’t do much optimizing of the netcode. It works fine over localhost, by virtue of localhost being a magic perfect connection.
Most of the network performance issues in the CM stress test were amplified by the poorly optimized bandwidth usage of the netcode.
e#978 by me reduced the amount of redundant data sent on initial entity creation significantly. This helps a lot with initial load times.
e#983 by Tyler-IN implements PVS, also known as bubbling. The idea is that we only send updates for entities close to your player, so that somebody moving around on the other end of the station doesn’t cost additional network bandwidth. It’s still a bit buggy but it’s a very necessary optimization.
Tyler-IN was also working on a more efficient serializer than we’re currently using, along with various other improvements like better string table handling. I also believe Acruid was experimenting with taking advantage of bit packing. Both changes will easily cut down bandwidth usage even more when they’re done and well integrated.
Another big thing we should work on is making it possible for the game server to reasonably run at a lower framerate than the client via good interpolation and such. SS13 is not that latency prone compared to, say, CS:GO, so running the game at a framerate of like 20 ticks per second server side should be totally feasible, and significantly reduce server CPU load.
e#951 and e#955 ported a proper broad-phase collision handler from Box2D. This is an amazing performance improvement over the old system (that was spending like 30% of client CPU time inside the “which entity is under mouse” code). I’m glad we managed to get this in just before the CM stress test because if not it’d have been an even worse disaster.
Considering a “Robust Film Maker” Making these skits and clips for the progress reports / Reddit is kind of annoying right now. I have to run multiple clients, keep one recording and do stuff with the other, hide the UI, etc…
The “clown is dead” one above could be much better, by having it be an actual video. Juggling 6 clients to time the messages correctly is near impossible. I edited the code real quick to make speech bubbles last 2 minutes, so I could manually posses all of the humans and make them say something, which is why it’s a static image and the continuity can be kinda hard to figure out.
Also, I had to manually respawn like 15 times and change the job in my character preferences to get all the jobs spawned in. Then the server crashed midway through, because it’s the unstable debug build, and I had to do it all over again .
Let me know if there is any interest in a “Robust Film Maker” that can be used to make skits like these? It’d definitely be convenient for me writing the progress report but I can probably get by doing a bunch of hacky code scripting to make them if I feel like it. If other people are interested in this kinda stuff I could maybe try to spend a little bit more effort on it.
Contributors this month We’ve seen a lot of new contributors join the project since the last progress report and the CM stress test. We’re absolutely grateful for the fresh help!
Because getting every minor bug fix and such into the progress report can be kinda hard, I just want to list off all the contributors we’ve had this month (GitHub usernames):
4dplanner, acvzy, Acruid, AJCM-git, DamianX, ike709, Injazz, Moneyl, PJB3005, ProfanedBane, py01, Quantomicus, Qustinnus, renodubois, ShadowCommander, SpaceManiac, Tyler-IN, Unusualcrow, Zth–, Zumorica
And of course special thanks to many of the people hanging out on Discord and GitHub providing feedback, bug reports and other things. Kinda hard to track though.
\ No newline at end of file
diff --git a/post/20-06-07-progress-report-22/index.html b/post/20-06-07-progress-report-22/index.html
index 5e5f677..76892b4 100644
--- a/post/20-06-07-progress-report-22/index.html
+++ b/post/20-06-07-progress-report-22/index.html
@@ -1,6 +1,8 @@
-
Progress Report #22: Full Steam Ahead - SS14
Progress Report #22: Full Steam Ahead Contributed by Many people on Discord Sunday June 7, 2020 It has been 3 months since the last post, we have a lot to tell you!
Space Station 14 is on Steam! It’s finally here. I can’t express how much seeing that Steam store page pleases us.
It’s quite baffling how difficult it was for us to write the descriptions on the store page. It took us multiple rewrites and a lot of discussion to get to the descriptions we have now, and I’d say they’re basically perfect.
There’s not much more to say about the Steam store page though, but here’s a quick Q&A in case you have any, well, questions:
Will I need to use Steam to play SS14? Nope! We will always keep supporting standalone versions of the game. While we do recommend you to use Steam for various reasons (auto updates, faster downloads, more convenient to install, no AV software problems), the option is fully up to you.Will SS14 be free on Steam? Yes, 100%!Will the Steam release support multiple codebases? We will try our best. While there is a chance that Steam’s review team turns it down due to technical reasons, this is very unlikely due to our architecture being sanely sandboxed and such.Why didn’t you mention SS13 on the store page? We tried to get partnered with Discord in the past for that sweet vanity URL and such. The problem is that Discord thought we were some silly fan game of SS13 and refused. We didn’t want to risk anything of the sort with the Steam release so decided to play it safe for now. We may amend the description later to add it when we have people actually playing the game, though.Why can’t I download it yet? When we wrote the previous progress report we said that you would be able to download the game immediately from Steam. After thinking about it a bit we decided to postpone the actual public Steam release until the game is “playable”, i.e. you can have a full round of spessmens in it. Obviously the game will not be finished by then (it’s tagged as Early Access for a reason) but we do intend for it to be playable.We also commisioned some art for the Steam release, especially for the library. Because you can’t see the library art unless you, well, have a beta testing key, we decided to post it here for you all to see:
Credits to wasteroforange for the amazing art, she knocked it completely out of the park compared to our initial ideas for the art.
We’re on Patreon! Become a Patron!
Along with the Steam release, we also have a Patreon now!
We intend for the money coming from Patreon to mostly go to practical costs like hosting, artwork, and other such things that we can’t just code in our free time. We’ll have to see what to do with any leftover money. Bounties are one option, although none of us really are warm on the idea of having to manage those.
Some ground rules:
We will be completely transparent about where every single penny goes. People that get to decide on bounties do not get to claim them, if/when we do them. In And Out
Showing off some of the new content in this progress report, in a nice clip.
New Content Proper map in-dev - Saltern Contributed by PJB3005, AJCM-git
We are working on a proper map that we intend to be suitable for full games. We decided to keep the map relatively small for now, figuring that we would have relatively low player count. This also means many departments like hydroponics do not exist, since we don’t currently consider them to be a big priority gameplay wise.
The map is called Saltern, which we picked after a lot of careful consideration (Discord message link) .
Development of the map was initially started because we needed a scene to take screenshots for the Steam store page. We figured we’d need a semi-logical place to take the screenshots and didn’t have a map yet, so we just started making one!
Basic Gamemodes Contributed by Zumorica
We have added a new gamemode to the game, Suspicion on the Space Station, or SSS for short. This gamemode is similar to the infamous Trouble in Terrorist Town. We decided to work on this as a placeholder for a proper gamemode until we have more systems fleshed out, because real SS13 traitor gameplay isn’t all that interesting if the crew has nothing to do but look for you.
Physics Rewrite & Gravity Contributed by InquisitivePenguin
We’ve rewritten a large part of our physics engine! Expect more realism and smoother performance. The new engine correctly uses impulses and forces to do calculations, which opens the door to future systems like pulling which were not practical to implement with the old physics engine.
There is now also proper gravity, with fully breakable gravity generator and pushing off walls in zero-g.
Stuns Contributed by Zumorica
You can now stun those darn greytiders as a security officer with your trusty stunbaton!
+
Progress Report #22: Full Steam Ahead - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Progress Report #22: Full Steam Ahead Contributed by Many people on Discord Sunday June 7, 2020 It has been 3 months since the last post, we have a lot to tell you!
Space Station 14 is on Steam! It’s finally here. I can’t express how much seeing that Steam store page pleases us.
It’s quite baffling how difficult it was for us to write the descriptions on the store page. It took us multiple rewrites and a lot of discussion to get to the descriptions we have now, and I’d say they’re basically perfect.
There’s not much more to say about the Steam store page though, but here’s a quick Q&A in case you have any, well, questions:
Will I need to use Steam to play SS14? Nope! We will always keep supporting standalone versions of the game. While we do recommend you to use Steam for various reasons (auto updates, faster downloads, more convenient to install, no AV software problems), the option is fully up to you.Will SS14 be free on Steam? Yes, 100%!Will the Steam release support multiple codebases? We will try our best. While there is a chance that Steam’s review team turns it down due to technical reasons, this is very unlikely due to our architecture being sanely sandboxed and such.Why didn’t you mention SS13 on the store page? We tried to get partnered with Discord in the past for that sweet vanity URL and such. The problem is that Discord thought we were some silly fan game of SS13 and refused. We didn’t want to risk anything of the sort with the Steam release so decided to play it safe for now. We may amend the description later to add it when we have people actually playing the game, though.Why can’t I download it yet? When we wrote the previous progress report we said that you would be able to download the game immediately from Steam. After thinking about it a bit we decided to postpone the actual public Steam release until the game is “playable”, i.e. you can have a full round of spessmens in it. Obviously the game will not be finished by then (it’s tagged as Early Access for a reason) but we do intend for it to be playable.We also commisioned some art for the Steam release, especially for the library. Because you can’t see the library art unless you, well, have a beta testing key, we decided to post it here for you all to see:
Credits to wasteroforange for the amazing art, she knocked it completely out of the park compared to our initial ideas for the art.
We’re on Patreon! Become a Patron!
Along with the Steam release, we also have a Patreon now!
We intend for the money coming from Patreon to mostly go to practical costs like hosting, artwork, and other such things that we can’t just code in our free time. We’ll have to see what to do with any leftover money. Bounties are one option, although none of us really are warm on the idea of having to manage those.
Some ground rules:
We will be completely transparent about where every single penny goes. People that get to decide on bounties do not get to claim them, if/when we do them. In And Out
Showing off some of the new content in this progress report, in a nice clip.
New Content Proper map in-dev - Saltern Contributed by PJB3005, AJCM-git
We are working on a proper map that we intend to be suitable for full games. We decided to keep the map relatively small for now, figuring that we would have relatively low player count. This also means many departments like hydroponics do not exist, since we don’t currently consider them to be a big priority gameplay wise.
The map is called Saltern, which we picked after a lot of careful consideration (Discord message link) .
Development of the map was initially started because we needed a scene to take screenshots for the Steam store page. We figured we’d need a semi-logical place to take the screenshots and didn’t have a map yet, so we just started making one!
Basic Gamemodes Contributed by Zumorica
We have added a new gamemode to the game, Suspicion on the Space Station, or SSS for short. This gamemode is similar to the infamous Trouble in Terrorist Town. We decided to work on this as a placeholder for a proper gamemode until we have more systems fleshed out, because real SS13 traitor gameplay isn’t all that interesting if the crew has nothing to do but look for you.
Physics Rewrite & Gravity Contributed by InquisitivePenguin
We’ve rewritten a large part of our physics engine! Expect more realism and smoother performance. The new engine correctly uses impulses and forces to do calculations, which opens the door to future systems like pulling which were not practical to implement with the old physics engine.
There is now also proper gravity, with fully breakable gravity generator and pushing off walls in zero-g.
Stuns Contributed by Zumorica
You can now stun those darn greytiders as a security officer with your trusty stunbaton!
When you get stunned, you can see how much time you’ll be stunned for on the right.
Solar Panels Code contributed by 20kdc with suggestions by RemieRichards, ComicIronic, and PJB3005. Sprites imported from CEV-Eris.
The current state of the station uses magical generators. They’re definitely nice for testing, but they’re also quite cheat-y. Luckily, SS13 does have a relatively easy-to-implement power source that isn’t much in the way of a station liability: Solar panels.
There isn’t much fancy to say about these, but the UI for the controller uses textfields rather than the relative +/- used by SS13.
Additionally, to the right there’s a view of the position of the panel and sun.
There are still some improvements to be made, like proper solar trackers, but those are waiting on a rewrite of the power system to allow better connectivity of this stuff.
Wire Hacking Interface Contributed by PJB3005
The new wire hacking interface has been completed. We previewed a mockup of this interface many months ago in PR #19, but it’s finally done and in-game. It looks amazing and I’m very proud of it.
Contributed by PJB3005, Zumorica
The right-click menu is something that every SS13 player hates. In general, it’s extremely sluggish to use but also often the only option. This is not a trait specific to right-click menus; the problem lies solely with the inability to customize them to fit SS13 better. We are convinced that the classic right-click menu is far superior than trends such as radial menus, if implemented well (of course).
We now have a new & improved right-click menu that should be an absolute joy to use, and definitely so compared to BYOND. The previous one we had was an absolute placeholder, this one not anymore.
There is of course more than meets the eye. You can now directly do various actions like clicking, activating, or examining the objects listed in the right-click menu by just pressing the same button in the entity list! This is incredibly useful and it basically merges the best of both worlds of the right-click menu and alt-click menu that many SS13 codebases have.
Ghosts Contributed by Zumorica
Ghosts have been finally added to the game, including the classic deadchat! You can even return to your body under certain conditions.
Spess Bartending Action Contributed by Injazz
You can now create drinks with fancy sprites just by pouring right stuff with right proportions into drinking glass! Just like in SS13!
And now we’re planning to port way better bartending (my personal opinion) - from Goon!
Kitchen Dept presents: Microwave Contributed by Memory
There is now a microwave, and we are incredibly pleased with the sound it makes.
Audio Occlusion Contributed by Clyybber
Instruments and MIDI Team project by Zumorica, PJB, Q, and probably others
Ever wanted to connect your keyboard to the computer and play soothing music to your fellow crew members? Well, now you can! We have finally finished adding instruments with MIDI support! Whether you want to play a MIDI file or use a physical (or virtual) MIDI keyboard, instruments allow you to play your own music. Your dream of performing a delicate piano recital to the entire crew can now come true! It even supports pitch bending and control change !
VIDEO Furthermore, thanks to using a full blown synthesizer for MIDI, you can create and add custom instruments, such as the classic gilded bike horn.
VIDEO You may also recall that we teased this feature many months ago. It has now finally been deemed stable enough for general play.
Enviromental suicides Contributed by Izimann
Emote improvements Contributed by Hugal31
A small quality-of-life improvement: emotes now show with the rest of the speech. The mime will surely appreciate.
Better Cooldown Animations Contributed by Tomeno
The cooldown animation on items has been improved. It’s silky smooth now and has a much cooler donut shape.
Smart Equip Shortcuts Contributed by Hugal31
You can now press Shift+E and Shift+B to snart equip stuff to and from your belt/backpack respectively. When your hand is full it’ll put the item in, if it’s empty it’ll pull out the last item you put in. This makes it was easier to “drop” tools into your belt, and it makes backpacks very useful as a quick place to stash something to free your hands temporarily.
Equip Error Messages Contributed by Hugal31
In our neverending quest to make the game more approachable for new players, it now tells you why things don’t fit in inventory slots.
Contributed by Zumorica
Tools have been refactored to make them much more modular. Thanks to this, you’ll be able to have tools that can act as a screwdriver and wrench at the same time, or have multi-tools that can switch between different tool “behaviors”. The Jaws of Life and Powered Hand Drill have also been added to the game, with fancy tooltips!
Combat Mode Controls, Now Way Simpler In the previous progress report, we were talking about how we “fixed” combat mode controls by making it so that you have to hold your mouse for a tiny bit to do a full “swinging” attack.
Since then somebody on Discord suggested just using spacebar instead and… yeah it’s just spacebar now. No holding stuff. Spacebar is a swing attack if you’re in combat mode. Simple huh.
When designing the combat mode controls I didn’t want to use a key on the keyboard because there was no immediate room around WASD to put such an important combat button. That’s probably what got me to completely rule out the keyboard, and it’s probably why I fixated on using the mouse, and the resulting “hold mouse down” scheme.
Sometimes all it takes is somebody else with a completely different mindset to get you to realize the simple solution, huh…
Limbs, Organs, and Big Plans Contributed by GlassEclipse
The backend for the body system has been added, and it is more robust than ever! In SS13, many things were hardcoded - humans couldn’t have vox lungs nor robotic arms fused onto their bodies. With this new system, that is no more.
diff --git a/post/20-07-22-progress-report-23/index.html b/post/20-07-22-progress-report-23/index.html
index 4929c43..e131cc8 100644
--- a/post/20-07-22-progress-report-23/index.html
+++ b/post/20-07-22-progress-report-23/index.html
@@ -1,3 +1,5 @@
-
Progress Report #23: We Didn't Want To Wait Until Atmos Was Done - SS14
Progress Report #23: We Didn't Want To Wait Until Atmos Was Done Contributed by Many people on Discord Wednesday July 22, 2020 Sadly atmos is not done yet. A lot of other stuff is though!
New hardware, new server We’d like to thank all our generous patrons for enabling us to acquire better hardware for our servers. If you would like to support Space Station 14, consider contributing to our Patreon .
The collected money has been used to rent a much more powerful dedicated box for our new server, EU West 2 .
We’re still looking into hosting in the US and moving our infrastructure over; suggestions appreciated.
Movement Prediction AKA Lag-B-Gone Contributed by PJB
Movement prediction is now in. That means you will experience 0 lag when moving around the station, even if the server is on the other side of the planet. This even works with lower server tickrates thanks to sub-tick input handling.
While I will post a video here, the impact of this feature doesn’t communicate that well over one. Join one of our servers and experience it yourself. It’s glorious.
It still needs a lot of work, of course. If you try to move through doors you will notice some jumping due to how the system works. These issues will be ironed out over time but some effort is needed to move the code to shared and have it fully supporting reconciliation (the doors use timer callbacks right now which are completely incompatible with netcode…)
In the future, far more interactions, ranging from stuff like inventory manipulation to most machines, would ideally be predicted. This will be work but it’s very possible, especially with more experience working with the systems.
The architecture we’re using for the prediction system is the same one as described in the previous progress report .
New content! Unarmed Combat Contributed by ShadowCommander
You can now punch people. What more is there to say?
Click-dragging Contributed by chairbender
The framework for click-dragging has been implemented. Currently, it is only used for dumping a container and buckling. More behaviors will of course be added over time.
One of the core problems with clickdragging in SS13 is that it’s both finnicky (pixel hunting…) and unclear what you can drag where . Of course, we aim to solve both of these issues. As you can see from the video, all objects you can drag onto are highlit now. For “figuring out that it can be dragged at all” we do have some plans but they’re not concrete yet (hint: it involves the right-click menu).
Buckling Contributed by DrSmugleaf
You can now buckle yourself to a chair.
Please refrain from noclipping out of reality with them, thanks.
Weapons Rework Contributed by metalgearsloth
A large amount of weapon types, weapons, ammo types, and ammo have been added.
Power Rework Contributed by collinlunn
Power has been reworked from the ground up, and functions a bit differently compared to SS13. The biggest difference between this new system and SS13 is that APCs are not wireless anymore . Don’t worry, we have our reasons and will make sure it doesn’t become a clunky mess.
Wireless APCs are problematic as they depend on “areas”. If you’re not aware, in SS13 the station is manually divided into “areas” at map creation time, and these areas subdivide the station for APC power, fire/air alarms, etc… This is an annoying inconsistency for gameplay because players often can not interact directly or nicely with these areas.
Our idea is that every room is filled with “LV” wires that define “the room”. The room name (e.g. “Robotics”) on the APC defines the room name every machine is in. This same cable network would be used for stuff such as vent control via air alarm, etc…
Obviously, we recognize that manually laying a cable to every individual powered device would be extremely tedious. In actuality the LV wires act similar to Rimworld’s power cables: machines can still connect to them “remotely” from a couple tiles' range, and we’ll draw a tiny sub-floor cable to indicate the connection.
We also intend to make every aspect of laying cables as smooth and hassle free as possible to solve any minor nuisances that might result from this, though that’s for the future.
Outside of the “earth shattering gameplay redesigns”, we intend to give the power grid a slightly nicer hierarchial grid of HV -> MV -> LV aswell. Who doesn’t love seeing 5 different cable/pipelines running through maintenance?
The power rework has a well-grounded framework so future stuff like separate data networks and extra cable types should be an absolute breeze to add to the game.
Construction/Deconstruction Improvements Contributed by Acruid
Construction and deconstruction have been overhauled, and are being continually improved. Most things don’t have unique deconstruction steps yet, but that’ll be easy to change.
Antag and Latejoin Preferences Contributed by ike709
Like in SS13, players can now set their preferences for all of the different antags. Players can also choose a job when they join a round that has already begun.
Slips, banana peels, and soap Contributed by Zumorica
The Clown now has everything they need to annoy entertain the crew with lame hilarious pranks.
Janitor Gameplay Contributed by metalgearsloth, DrSmugleaf, ike709
Puddles, trash, the mop. The janitor will feel right at home!
ChemMaster 4000 and pills Contributed by ike709
Added the ChemMaster 4000. Chemists will now be able to separate a beaker’s contents and produce pills and bottles. Their reagents will be metabolized, which paves the way for medicine, poison, drugs, and more goodies.
New Utility AIs Contributed by metalgearsloth
Last time we talked about the WIP utility AIs, now the system is done and we implemented some as examples, like xenomorphs and mimics.
Flash Contributed by TheDracheX
Security has a new method of subduing criminal scum: Flashes.
RCD Contributed by Kmc2000
Added the RCD. It can only build walls at the moment because it was added before deconstruction, but that’ll be fixed soon.
Neck slot, cloaks and bedsheets Contributed by Swept
The neck slot has been added, as well as cloaks.
Airlocks Bolts & Wires Contributed by exp111
Airlock bolts and a few other wires like safety and AutoClose have been implemented. Don’t get crushed!
Fancier Cooldown Circles Contributed by Tomeno, Zumorica
The item cooldowns are now even fancier than before, changing color during their progress and flashing white when they’re done.
They also apply to status effects at the right of the screen now, so you get a nice visual indicator of how long your stun lasts.
Improved Click Detection Contributed by PJB3005
Click detection on objects in the world has been significantly improved by basing it off the texture of the object. This is similar to how BYOND does things, but we’d be fools to copy it blindly. Everybody is familiar with the absolute pain of clicking on things like cable coils in SS13. So we have two solutions for this problem:
Actual sampling of pixels has a bit of a wider range, so you can be a pixel or two off and still click on the object. Additional click-box overrides are provided for certain entities to make picking them up less finicky. Cable coils are an example of this. In-Game Credits Want to get immortalized in a shitty 2D spacemans game? Join SS14 today, your name will be piled on with the rest of the contributors in our new credits window!
Maybe you’ll even be the one to contribute a proper fill layout option for RichTextLabel
so that list looks less awful.
Minor things Fuel tanks explode now when interacted with a lit welding tool. Contributed by Jackw2As.
Admins have their own chat channel. Contributed by ike709.
Headbutt sound when you try to open an airlock without hands Contributed by DrSmugleaf
Toys, carvings and fluff items Contributed by Swept
Future content Right now we have many important features in the works like atmospherics, disposals, authentication, the action hotbar, pulling, pointing and more all coming soon(TM).
Here’s a teaser:
Technical details. Grafana and Stats Contributed by Redline & PJB3005
The server now supports logging various metrics that can be turned into some very fancy graphs:
P.S.: I hate Docker.
Clyde Refactors Contributed by PJB
Work is undergoing to make it possible for the renderer to display multiple viewports at the same time. What does this allow us to do? See for yourself:
Credits The contributors since the last progress report were: Acruid, aeosynth, AJCM-git, bhespiritu, Bright0, chairbender, Clyybber, collinlunn, ComicIronic, DamianX, DeanHU, DrSmugleaf, exp111, F77F, GlassEclipse, Hugal31, ike709, InquisitivePenguin, Izimann, Jackw2As, Kmc2000, MemeProof, metalgearsloth, meuser, PJB3005, RemieRichards, remove32, ScumbagDog, ShadowCommander, SoulSloth, SweptWasTaken, Tomeno, Tyler-IN, Visne, zamp, Zumorica.
Many thanks to everybody who contributed. We couldn’t do this without you!
\ No newline at end of file
+
Progress Report #23: We Didn't Want To Wait Until Atmos Was Done - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Progress Report #23: We Didn't Want To Wait Until Atmos Was Done Contributed by Many people on Discord Wednesday July 22, 2020 Sadly atmos is not done yet. A lot of other stuff is though!
New hardware, new server We’d like to thank all our generous patrons for enabling us to acquire better hardware for our servers. If you would like to support Space Station 14, consider contributing to our Patreon .
The collected money has been used to rent a much more powerful dedicated box for our new server, EU West 2 .
We’re still looking into hosting in the US and moving our infrastructure over; suggestions appreciated.
Movement Prediction AKA Lag-B-Gone Contributed by PJB
Movement prediction is now in. That means you will experience 0 lag when moving around the station, even if the server is on the other side of the planet. This even works with lower server tickrates thanks to sub-tick input handling.
While I will post a video here, the impact of this feature doesn’t communicate that well over one. Join one of our servers and experience it yourself. It’s glorious.
It still needs a lot of work, of course. If you try to move through doors you will notice some jumping due to how the system works. These issues will be ironed out over time but some effort is needed to move the code to shared and have it fully supporting reconciliation (the doors use timer callbacks right now which are completely incompatible with netcode…)
In the future, far more interactions, ranging from stuff like inventory manipulation to most machines, would ideally be predicted. This will be work but it’s very possible, especially with more experience working with the systems.
The architecture we’re using for the prediction system is the same one as described in the previous progress report .
New content! Unarmed Combat Contributed by ShadowCommander
You can now punch people. What more is there to say?
Click-dragging Contributed by chairbender
The framework for click-dragging has been implemented. Currently, it is only used for dumping a container and buckling. More behaviors will of course be added over time.
One of the core problems with clickdragging in SS13 is that it’s both finnicky (pixel hunting…) and unclear what you can drag where . Of course, we aim to solve both of these issues. As you can see from the video, all objects you can drag onto are highlit now. For “figuring out that it can be dragged at all” we do have some plans but they’re not concrete yet (hint: it involves the right-click menu).
Buckling Contributed by DrSmugleaf
You can now buckle yourself to a chair.
Please refrain from noclipping out of reality with them, thanks.
Weapons Rework Contributed by metalgearsloth
A large amount of weapon types, weapons, ammo types, and ammo have been added.
Power Rework Contributed by collinlunn
Power has been reworked from the ground up, and functions a bit differently compared to SS13. The biggest difference between this new system and SS13 is that APCs are not wireless anymore . Don’t worry, we have our reasons and will make sure it doesn’t become a clunky mess.
Wireless APCs are problematic as they depend on “areas”. If you’re not aware, in SS13 the station is manually divided into “areas” at map creation time, and these areas subdivide the station for APC power, fire/air alarms, etc… This is an annoying inconsistency for gameplay because players often can not interact directly or nicely with these areas.
Our idea is that every room is filled with “LV” wires that define “the room”. The room name (e.g. “Robotics”) on the APC defines the room name every machine is in. This same cable network would be used for stuff such as vent control via air alarm, etc…
Obviously, we recognize that manually laying a cable to every individual powered device would be extremely tedious. In actuality the LV wires act similar to Rimworld’s power cables: machines can still connect to them “remotely” from a couple tiles’ range, and we’ll draw a tiny sub-floor cable to indicate the connection.
We also intend to make every aspect of laying cables as smooth and hassle free as possible to solve any minor nuisances that might result from this, though that’s for the future.
Outside of the “earth shattering gameplay redesigns”, we intend to give the power grid a slightly nicer hierarchial grid of HV -> MV -> LV aswell. Who doesn’t love seeing 5 different cable/pipelines running through maintenance?
The power rework has a well-grounded framework so future stuff like separate data networks and extra cable types should be an absolute breeze to add to the game.
Construction/Deconstruction Improvements Contributed by Acruid
Construction and deconstruction have been overhauled, and are being continually improved. Most things don’t have unique deconstruction steps yet, but that’ll be easy to change.
Antag and Latejoin Preferences Contributed by ike709
Like in SS13, players can now set their preferences for all of the different antags. Players can also choose a job when they join a round that has already begun.
Slips, banana peels, and soap Contributed by Zumorica
The Clown now has everything they need to annoy entertain the crew with lame hilarious pranks.
Janitor Gameplay Contributed by metalgearsloth, DrSmugleaf, ike709
Puddles, trash, the mop. The janitor will feel right at home!
ChemMaster 4000 and pills Contributed by ike709
Added the ChemMaster 4000. Chemists will now be able to separate a beaker’s contents and produce pills and bottles. Their reagents will be metabolized, which paves the way for medicine, poison, drugs, and more goodies.
New Utility AIs Contributed by metalgearsloth
Last time we talked about the WIP utility AIs, now the system is done and we implemented some as examples, like xenomorphs and mimics.
Flash Contributed by TheDracheX
Security has a new method of subduing criminal scum: Flashes.
RCD Contributed by Kmc2000
Added the RCD. It can only build walls at the moment because it was added before deconstruction, but that’ll be fixed soon.
Neck slot, cloaks and bedsheets Contributed by Swept
The neck slot has been added, as well as cloaks.
Airlocks Bolts & Wires Contributed by exp111
Airlock bolts and a few other wires like safety and AutoClose have been implemented. Don’t get crushed!
Fancier Cooldown Circles Contributed by Tomeno, Zumorica
The item cooldowns are now even fancier than before, changing color during their progress and flashing white when they’re done.
They also apply to status effects at the right of the screen now, so you get a nice visual indicator of how long your stun lasts.
Improved Click Detection Contributed by PJB3005
Click detection on objects in the world has been significantly improved by basing it off the texture of the object. This is similar to how BYOND does things, but we’d be fools to copy it blindly. Everybody is familiar with the absolute pain of clicking on things like cable coils in SS13. So we have two solutions for this problem:
Actual sampling of pixels has a bit of a wider range, so you can be a pixel or two off and still click on the object. Additional click-box overrides are provided for certain entities to make picking them up less finicky. Cable coils are an example of this. In-Game Credits Want to get immortalized in a shitty 2D spacemans game? Join SS14 today, your name will be piled on with the rest of the contributors in our new credits window!
Maybe you’ll even be the one to contribute a proper fill layout option for RichTextLabel
so that list looks less awful.
Minor things Fuel tanks explode now when interacted with a lit welding tool. Contributed by Jackw2As.
Admins have their own chat channel. Contributed by ike709.
Headbutt sound when you try to open an airlock without hands Contributed by DrSmugleaf
Toys, carvings and fluff items Contributed by Swept
Future content Right now we have many important features in the works like atmospherics, disposals, authentication, the action hotbar, pulling, pointing and more all coming soon(TM).
Here’s a teaser:
Technical details. Grafana and Stats Contributed by Redline & PJB3005
The server now supports logging various metrics that can be turned into some very fancy graphs:
P.S.: I hate Docker.
Clyde Refactors Contributed by PJB
Work is undergoing to make it possible for the renderer to display multiple viewports at the same time. What does this allow us to do? See for yourself:
Credits The contributors since the last progress report were: Acruid, aeosynth, AJCM-git, bhespiritu, Bright0, chairbender, Clyybber, collinlunn, ComicIronic, DamianX, DeanHU, DrSmugleaf, exp111, F77F, GlassEclipse, Hugal31, ike709, InquisitivePenguin, Izimann, Jackw2As, Kmc2000, MemeProof, metalgearsloth, meuser, PJB3005, RemieRichards, remove32, ScumbagDog, ShadowCommander, SoulSloth, SweptWasTaken, Tomeno, Tyler-IN, Visne, zamp, Zumorica.
Many thanks to everybody who contributed. We couldn’t do this without you!
\ No newline at end of file
diff --git a/post/20-10-16-progress-report-24/index.html b/post/20-10-16-progress-report-24/index.html
index 91b0b43..dbb1236 100644
--- a/post/20-10-16-progress-report-24/index.html
+++ b/post/20-10-16-progress-report-24/index.html
@@ -1,3 +1,5 @@
-
Progress Report #24: Atmos Sim Remake Now Simulates Atmos - SS14
Progress Report #24: Atmos Sim Remake Now Simulates Atmos Contributed by Many people on Discord Friday October 16, 2020 Barebones rounds! Throughout the years, we’ve put a lot of work into developing the engine and framework necessary for Space Station 14 to have playable content. Last year, we transitioned to developing player-facing features and gameplay in earnest, and we’ve made a lot of progress in that short timespan!
SS14 now has playable, albeit barebones , rounds. As we add more features the number of complex interactions grows, and so does the need for testing the game with real players. Help us by joining our Discord to get the Tester role, and we’ll notify you whenever we put a bunch of people together for a playtest!
Clarification about the Steam release We’re all excited for SS14’s upcoming Steam release , and we’re grateful for the community’s enthusiasm, but we also want to temper some unrealistic expectations. SS14 isn’t finished, and won’t be any time soon. We’re launching on Steam mainly as a way to make it easier to discover, download, and play the game. The Steam release doesn’t mean the game’s done, or that it has most of the features you’d expect in a remake. Don’t forget that we’re only releasing into Early Access .
So while SS14 is already “playable” , we don’t expect or encourage players to jump from SS13 to SS14 yet , nor do we expect our servers to be populated outside of playtesting events. And if you’d like to help playtest, ask for the Tester role over on our discord.
Anyway, let’s see the new features we’ve added!
New content! Atmospherics Contributed by Zumorica
The atmospherics simulator remake finally has atmospherics! It’s inspired by monstermos , and we’re calling it zumos , in honor of its developer, Zumorica. It performs much better than SS13’s LINDA and ZAS atmospherics systems - you can burn down the entire station without grinding gameplay to a halt.
Here’s a non-exhaustive highlight reel of what SS14’s atmos currently entails (contributed by Zumorica unless otherwise noted):
Explosive decompression, gas spreading/mixing, and space wind. Pressure damage and spacesuits. A variety of gasses with different effects and reactions (tritium fires, anyone?). Fire, fire damage, and heat conduction through walls. Firelocks. They also prevent decompression. Gas analyzer. exp111 Pipenet, pipes, and pumps. collinlunn Breathing. DrSmugleaf Oxygen tanks and masks. Credath Fire extinguishers and cabinets. SoulSloth and Zumorica Antimatter engine Contributed by ancientpower
While it still needs some polish, the classic building block engine is now in the game as the second power source (after solars). Just like in SS13 it can be expanded indefinitely to produce more power. It even comes with fancy lighting effects!
Pulling Contributed by InquisitivePenguin and DrSmugleaf
You can now pull objects and players, just like in SS13.
Pointing Contributed by DrSmugleaf
You can now direct other players' attention by pointing at things.
Mob improvements Contributed by DrSmugleaf and GlassEclipse
We laid the groundwork for a more comprehensive medical system, with mob code receiving an extensive variety of improvements. Three of the biggest changes are mob presets, body parts, and mechanisms: mob presets make it easy to add nonhuman species, body parts are their own entities that players can perform surgery on, and mechanisms represent organs or other devices within the body, each of which has its own custom behaviour.
More hands Contributed by DrSmugleaf
Mobs can have more than two hands.
More construction improvements Contributed by Zumorica
We completely reworked the backend system for construction. This makes it much easier for contributors to add construction steps to things, as well as making construction steps more versatile and providing more detailed feedback to players.
Climbing Contributed by nüke
You can now click and drag yourself (or others) onto a table or other climbable object. Tables will never be the same.
Contributed by Zumorica
You can now strip items from other players. The current UI is a placeholder, but a new inventory-like UI is currently a work-in-progress. Combined with the newly added handcuffs, Security can now keep the greytide in check!
Handcuffs Contributed by nüke
We added handcuffs and makeshift cable cuffs to the game. To handcuff someone, you and the target both need to stand still with no interruptions for a short while. It takes less time to cuff stunned players, and you’re gonna need extra cuffs for people with more than two arms.
Station events Contributed by metalgearsloth
Random events can now occur on the station, or be triggered by admins directly. At the moment only a powergrid failure, bolts-down event, and radiation storm have been implemented though the system is in place to easily add more.
Disposals and conveyors Contributed by DrSmugleaf and juliangiebel
You can now dump trash as a janitor and provide the clown with expedient transit out of the captain’s office using the disposals system. We also have conveyor belts!
Contributed by exp111
Our admins have been itching to inflict abuse on innocent players, and we’re fulfilling their darkest wishes with this button pressing UI. The visuals aren’t final, but we can’t say the same about the tyrannical bans that the admins will inflict.
do_after Contributed by metalgearsloth
You know the task bar from SS13 that appears when you’re cuffing someone, or vaulting a table, or welding a door shut? Known as “do_after” from SS13 code, it’s an important part of many upcoming features involving interruptable tasks, and we finally got around to implementing it in SS14.
Machine linking Contributed by ShadowCommander
Machines can now be easily linked together. A practical example of this would be linking conveyors to a conveyor switch.
Cloning Contributed by SoulSloth
If you thought death was going to let you escape a round of SS14, you’ll have to try harder, as our new cloning machines will drag you back to life against your wishes.
Handheld radio and headsets Contributed by Bright0
A basic (and non-final) implementation of telecomms has been added, with both handheld radios and headsets. Currently, Common is the only channel.
Accent system Contributed by exp111
Speech can now be automatically modified for things like slurred speech while drunk, lizardpeople hissing, etc.
Spray bottles Contributed by exp111 and Zumorica
The Clown Janitor now has another tool in their arsenal, and can now spray things with chemicals.
Lantern, flashlight improvement, emergency lights Contributed by SoulSloth and juliangiebel
The lantern has been added, featuring a soft yellow glow. Flashlights will now flicker when their battery is going out. Emergency lights will now be activated when the station loses power.
Glowsticks and flares Contributed by nüke
Glowsticks and flares have been added. Glowsticks last a long time with a weaker glow, while flares last a shorter duration but are much brighter. As a bonus, it’s now easier for contributors to define lighting effects for items.
Signs and plaques Contributed by Swept
Signs have been added to the Saltern directing you to the various departments.
RCD improvements Contributed by ike709
The RCD now has feature parity with SS13, minus the radial menu. Walls, floors, and airlocks can now all be created or destroyed by the RCD. Try not to immediately vent the station.
Cream pies Contributed by Zumorica
The Clown can now assault entertain crewmembers by throwing pies at them.
Particle Accelerator Contributed by unusualcrow and PaulRitter
A fully constructable particle accelerator.
Crayons Contributed by exp111
Bringing the classic acts of vandalism (and sometimes even art) to SS14! Now with a proper UI and pixel-based placement.
Space-Villain-Game Contributed by PaulRitter
A simple game to kill time in the bar.
Nanotrasen Block Game™ Contributed by PaulRitter
Nanotrasen Block Game™ is a wacky new game for employees to play during their break. There are separate leaderboards for the current round and all-time*. Challenge your compatriots and become the best NBG player in the star system.
*Persistent highscores are not currently guaranteed to persist due to potential database changes.
More furniture Contributed by SweptWasTaken
Tiny things Closed soda cans spill if you throw them around too much. DrSmugleaf Cursed lockers that teleport you to other lockers on the station. Zumorica Examine window feedback for a construction’s next step and for when things are powered. Kmc2000 and exp111 Slipping moves you forward some tiles now. DrSmugleaf AI mobs now have simple visual health states like critical and dead. metalgearsloth Item status for all weapons. exp111 SSS gamemode improvements, like a HUD button that displays your role and allies, all airlock access, an overhead label to mark your fellow traitors… DrSmugleaf, Visne and more? You can weld doors now. metalgearsloth Memory leek. Swept Ghost teleporting. NuclearWinter You can now use mouse-click for melee attacks. Zumorica The lobby now shows which players are ready. exp111 Inventory slots show if current held item fits. StrawberryMoses Ported additional Security outfits. StrawberryMoses More simple mobs. Ian, space carp, etc. Swept Added factions to AI mobs. metalgearsloth Examining a container with reagent(s) in it will now have colored text that has a physical description of the substance. nüke Technical details Authentication Contributed by PJB
We now have a proper system for user accounts and authentication for those user accounts. Everything is basically working, except that we’re still waiting on Silver to get back to us about noreply emails so that we can send out email confirmations to allow you to actually register accounts.
Because of this, no auth server is currently up and the official game servers are still on “auth-optional” mode for the time being.
Authentication also brought along various other improvements like proper bans (both IP range and user ID) and proper encrypted game server connections (when you’re authenticated properly).
And no, we’re not sending your password to the game servers like BYOND does.
Nobody tell Mojang I stole was heavily inspired by the authentication sequence used by Minecraft.
OpenGL ES2 Support Contributed by 20kdc
The game can now run targeting OpenGL ES2 as graphics API, optionally via ANGLE on Windows. This basically means that it’ll run on literally any potato laptop made in the last decade and a half, probably.
Future content Lord Singuloth Yes, it can eat a hole through the station.
Disposal mailing
Credits The contributors since the last progress report were: 20kdc, Acruid, AJCM-git, ALMv1, AlphaQwerty, ancientpower, Bright0, clement-or, collinlunn, creadth, DrSmugleaf, DTanxxx, exp111, FirinMaLazors, ike709, j-giebel, janekvap, juliangiebel, Kmc2000, lajolico, MemeProof, metalgearsloth, nuke-makes-games, Nukeuler123, PaulRitter, peptron1, PJB3005, Qustinnus, Rember, RomanNovo, sentient-ai, ShadowCommander, SoulSloth, StrawberryMoses, SweptWasTaken, TheCze, unusualcrow, Visne, Zumorica .
Many thanks to everybody who contributed. We couldn’t do this without you!
\ No newline at end of file
+
Progress Report #24: Atmos Sim Remake Now Simulates Atmos - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Progress Report #24: Atmos Sim Remake Now Simulates Atmos Contributed by Many people on Discord Friday October 16, 2020 Barebones rounds! Throughout the years, we’ve put a lot of work into developing the engine and framework necessary for Space Station 14 to have playable content. Last year, we transitioned to developing player-facing features and gameplay in earnest, and we’ve made a lot of progress in that short timespan!
SS14 now has playable, albeit barebones , rounds. As we add more features the number of complex interactions grows, and so does the need for testing the game with real players. Help us by joining our Discord to get the Tester role, and we’ll notify you whenever we put a bunch of people together for a playtest!
Clarification about the Steam release We’re all excited for SS14’s upcoming Steam release , and we’re grateful for the community’s enthusiasm, but we also want to temper some unrealistic expectations. SS14 isn’t finished, and won’t be any time soon. We’re launching on Steam mainly as a way to make it easier to discover, download, and play the game. The Steam release doesn’t mean the game’s done, or that it has most of the features you’d expect in a remake. Don’t forget that we’re only releasing into Early Access .
So while SS14 is already “playable” , we don’t expect or encourage players to jump from SS13 to SS14 yet , nor do we expect our servers to be populated outside of playtesting events. And if you’d like to help playtest, ask for the Tester role over on our discord.
Anyway, let’s see the new features we’ve added!
New content! Atmospherics Contributed by Zumorica
The atmospherics simulator remake finally has atmospherics! It’s inspired by monstermos , and we’re calling it zumos , in honor of its developer, Zumorica. It performs much better than SS13’s LINDA and ZAS atmospherics systems - you can burn down the entire station without grinding gameplay to a halt.
Here’s a non-exhaustive highlight reel of what SS14’s atmos currently entails (contributed by Zumorica unless otherwise noted):
Explosive decompression, gas spreading/mixing, and space wind. Pressure damage and spacesuits. A variety of gasses with different effects and reactions (tritium fires, anyone?). Fire, fire damage, and heat conduction through walls. Firelocks. They also prevent decompression. Gas analyzer. exp111 Pipenet, pipes, and pumps. collinlunn Breathing. DrSmugleaf Oxygen tanks and masks. Credath Fire extinguishers and cabinets. SoulSloth and Zumorica Antimatter engine Contributed by ancientpower
While it still needs some polish, the classic building block engine is now in the game as the second power source (after solars). Just like in SS13 it can be expanded indefinitely to produce more power. It even comes with fancy lighting effects!
Pulling Contributed by InquisitivePenguin and DrSmugleaf
You can now pull objects and players, just like in SS13.
Pointing Contributed by DrSmugleaf
You can now direct other players’ attention by pointing at things.
Mob improvements Contributed by DrSmugleaf and GlassEclipse
We laid the groundwork for a more comprehensive medical system, with mob code receiving an extensive variety of improvements. Three of the biggest changes are mob presets, body parts, and mechanisms: mob presets make it easy to add nonhuman species, body parts are their own entities that players can perform surgery on, and mechanisms represent organs or other devices within the body, each of which has its own custom behaviour.
More hands Contributed by DrSmugleaf
Mobs can have more than two hands.
More construction improvements Contributed by Zumorica
We completely reworked the backend system for construction. This makes it much easier for contributors to add construction steps to things, as well as making construction steps more versatile and providing more detailed feedback to players.
Climbing Contributed by nüke
You can now click and drag yourself (or others) onto a table or other climbable object. Tables will never be the same.
Contributed by Zumorica
You can now strip items from other players. The current UI is a placeholder, but a new inventory-like UI is currently a work-in-progress. Combined with the newly added handcuffs, Security can now keep the greytide in check!
Handcuffs Contributed by nüke
We added handcuffs and makeshift cable cuffs to the game. To handcuff someone, you and the target both need to stand still with no interruptions for a short while. It takes less time to cuff stunned players, and you’re gonna need extra cuffs for people with more than two arms.
Station events Contributed by metalgearsloth
Random events can now occur on the station, or be triggered by admins directly. At the moment only a powergrid failure, bolts-down event, and radiation storm have been implemented though the system is in place to easily add more.
Disposals and conveyors Contributed by DrSmugleaf and juliangiebel
You can now dump trash as a janitor and provide the clown with expedient transit out of the captain’s office using the disposals system. We also have conveyor belts!
Contributed by exp111
Our admins have been itching to inflict abuse on innocent players, and we’re fulfilling their darkest wishes with this button pressing UI. The visuals aren’t final, but we can’t say the same about the tyrannical bans that the admins will inflict.
do_after Contributed by metalgearsloth
You know the task bar from SS13 that appears when you’re cuffing someone, or vaulting a table, or welding a door shut? Known as “do_after” from SS13 code, it’s an important part of many upcoming features involving interruptable tasks, and we finally got around to implementing it in SS14.
Machine linking Contributed by ShadowCommander
Machines can now be easily linked together. A practical example of this would be linking conveyors to a conveyor switch.
Cloning Contributed by SoulSloth
If you thought death was going to let you escape a round of SS14, you’ll have to try harder, as our new cloning machines will drag you back to life against your wishes.
Handheld radio and headsets Contributed by Bright0
A basic (and non-final) implementation of telecomms has been added, with both handheld radios and headsets. Currently, Common is the only channel.
Accent system Contributed by exp111
Speech can now be automatically modified for things like slurred speech while drunk, lizardpeople hissing, etc.
Spray bottles Contributed by exp111 and Zumorica
The Clown Janitor now has another tool in their arsenal, and can now spray things with chemicals.
Lantern, flashlight improvement, emergency lights Contributed by SoulSloth and juliangiebel
The lantern has been added, featuring a soft yellow glow. Flashlights will now flicker when their battery is going out. Emergency lights will now be activated when the station loses power.
Glowsticks and flares Contributed by nüke
Glowsticks and flares have been added. Glowsticks last a long time with a weaker glow, while flares last a shorter duration but are much brighter. As a bonus, it’s now easier for contributors to define lighting effects for items.
Signs and plaques Contributed by Swept
Signs have been added to the Saltern directing you to the various departments.
RCD improvements Contributed by ike709
The RCD now has feature parity with SS13, minus the radial menu. Walls, floors, and airlocks can now all be created or destroyed by the RCD. Try not to immediately vent the station.
Cream pies Contributed by Zumorica
The Clown can now assault entertain crewmembers by throwing pies at them.
Particle Accelerator Contributed by unusualcrow and PaulRitter
A fully constructable particle accelerator.
Crayons Contributed by exp111
Bringing the classic acts of vandalism (and sometimes even art) to SS14! Now with a proper UI and pixel-based placement.
Space-Villain-Game Contributed by PaulRitter
A simple game to kill time in the bar.
Nanotrasen Block Game™ Contributed by PaulRitter
Nanotrasen Block Game™ is a wacky new game for employees to play during their break. There are separate leaderboards for the current round and all-time*. Challenge your compatriots and become the best NBG player in the star system.
*Persistent highscores are not currently guaranteed to persist due to potential database changes.
More furniture Contributed by SweptWasTaken
Tiny things Closed soda cans spill if you throw them around too much. DrSmugleaf Cursed lockers that teleport you to other lockers on the station. Zumorica Examine window feedback for a construction’s next step and for when things are powered. Kmc2000 and exp111 Slipping moves you forward some tiles now. DrSmugleaf AI mobs now have simple visual health states like critical and dead. metalgearsloth Item status for all weapons. exp111 SSS gamemode improvements, like a HUD button that displays your role and allies, all airlock access, an overhead label to mark your fellow traitors… DrSmugleaf, Visne and more? You can weld doors now. metalgearsloth Memory leek. Swept Ghost teleporting. NuclearWinter You can now use mouse-click for melee attacks. Zumorica The lobby now shows which players are ready. exp111 Inventory slots show if current held item fits. StrawberryMoses Ported additional Security outfits. StrawberryMoses More simple mobs. Ian, space carp, etc. Swept Added factions to AI mobs. metalgearsloth Examining a container with reagent(s) in it will now have colored text that has a physical description of the substance. nüke Technical details Authentication Contributed by PJB
We now have a proper system for user accounts and authentication for those user accounts. Everything is basically working, except that we’re still waiting on Silver to get back to us about noreply emails so that we can send out email confirmations to allow you to actually register accounts.
Because of this, no auth server is currently up and the official game servers are still on “auth-optional” mode for the time being.
Authentication also brought along various other improvements like proper bans (both IP range and user ID) and proper encrypted game server connections (when you’re authenticated properly).
And no, we’re not sending your password to the game servers like BYOND does.
Nobody tell Mojang I stole was heavily inspired by the authentication sequence used by Minecraft.
OpenGL ES2 Support Contributed by 20kdc
The game can now run targeting OpenGL ES2 as graphics API, optionally via ANGLE on Windows. This basically means that it’ll run on literally any potato laptop made in the last decade and a half, probably.
Future content Lord Singuloth Yes, it can eat a hole through the station.
Disposal mailing
Credits The contributors since the last progress report were: 20kdc, Acruid, AJCM-git, ALMv1, AlphaQwerty, ancientpower, Bright0, clement-or, collinlunn, creadth, DrSmugleaf, DTanxxx, exp111, FirinMaLazors, ike709, j-giebel, janekvap, juliangiebel, Kmc2000, lajolico, MemeProof, metalgearsloth, nuke-makes-games, Nukeuler123, PaulRitter, peptron1, PJB3005, Qustinnus, Rember, RomanNovo, sentient-ai, ShadowCommander, SoulSloth, StrawberryMoses, SweptWasTaken, TheCze, unusualcrow, Visne, Zumorica .
Many thanks to everybody who contributed. We couldn’t do this without you!
\ No newline at end of file
diff --git a/post/21-02-12-progress-report-25/index.html b/post/21-02-12-progress-report-25/index.html
index d1fec8e..6787aa0 100644
--- a/post/21-02-12-progress-report-25/index.html
+++ b/post/21-02-12-progress-report-25/index.html
@@ -1,3 +1,5 @@
-
Progress Report #25: Blowing Off Steam - SS14
Progress Report #25: Blowing Off Steam Contributed by Many people on Discord Sunday February 7, 2021 Playtest We’re proud to announce that Space Station 14 is now available through the new Steam Playtest feature. Originally we were planning to do a full release through Early Access, but we felt that a more limited release was a better match for the current state of SS14 development.
To gain access, simply visit the SS14 store page and click Request Access. You’ll be added to the pool of people who are waiting, which we randomly draw from when we feel we could use more players.
If you don’t receive access immediately, just be patient! More users will be added over time.
We don’t currently have a set date for a wider Early Access release, it depends on how well the playtests go and how quickly more content is added.
Much work went into last minute preparations to get ready for Steam; combined with exams, the devs all playing Factorio, and the holidays, this progress report is relatively light. But we still have some new treats!
Of course, you can always download the non-Steam build from our downloads page . Obviously it’ll never be as convenient as Steam, but the option is always available.
Progress! Botany Contributed by Zumorica
Botany is in! This includes trays, seeds, planting, harvesting, nutriments, weeds, pests, and plenty more! Botanists can finally supply the station with drugs food, making the station even more self-sufficient. As a bonus, adding new plants is trivial and doesn’t require writing any C# code.
UI improvements Action Hotbar Contributed by chairbender, building on earlier work by ShadowCommander
We now have an actions hotbar! The idea is this hotbar will be used for all common actions you may need quick access to, from toggling your helmet light to wizard spells.
The layout of the hotbar can be re-arranged if you feel so inclined. There are some minor things that have to be added like allowing you to save layouts between round, but for the most part it’s very solid already.
Alerts System and UI Contibuted by chairbender
What was previously known as “status effects” has been expanded into a more general “alerts” system, which allows contributors to easily define and modify the alert icons and tooltips.
Minor UI Things Improved top menu buttons Contributed by chairbender Improved Inventory / Hand Slots UI Contributed by chairbender Improved job preference menu Contributed by Rockdtben & DrSmugleaf Traitor Gamemode & Objectives Contributed by PaulRitter
Added a general framework for antagonist objectives, and a basic implementation of the traitor gamemode. Traitors get objectives at roundstart and complete them over the course of the round, which can only end via a shuttle call. On roundend, all players will see who the traitors were, what objectives they had, and whether they completed their objectives.
Implemented objectives so far are:
Steal the Captain’s ID Die a glorious death Survive Kill a random person Traitor Deathmatch Gamemode Contributed by 20kdc, with PDA redemption machine sprite by Tomeno
Expanding upon the new traitor mode, this gamemode is essentially a free-for-all, but with traitor uplinks for everyone to spice things up.
Contributed by Exp111
The admin menu was mentioned in the last progress report but it’s gotten some new features added.
Magboots Contributed by PJB
You now have magboots. They help you avoid getting thrown around the place by airflow.
Gas tanks and Internals Contributed by Creadth and Zumorica
You can now avoid dying in vacuums. At least from the oxygen loss.
Gas Canisters Contributed by clement-or, help from 20kdc and ike709
Gas canisters now exist, ripe for plasma flooding.
Mortician’s Menagerie (All the crematorium stuff) *Contributed by RemieRichards
The Traitor’s murderbone victims targets won’t be left littering the halls, because the morgue is now fully equipped with functioning morgue trays, body bags, and a crematorium.
Trash Bags & Pickup Animations Contributed by RemieRichards
Now you can pick up trash and steal any other valuables on the ground, in style!
Eris Power Cells Contributed by brndd
Ports Eris-style power cells. They come in three distinct sizes, S, M and L, each size having more charge than the last and fitting into different kinds of devices.
LORD SINGULOTH Contributed by unusualcrow, PaulRitter, and PJB
We teased it last time, and now it’s here! The singularity returns as the latest and arguably greatest engine, with the particle accelerator, containment field, and radiation collectors already implemented. It is capable of going through the station like a hot knife through butter, so beware of sabotage!
All hail Lord Singuloth!
Gibbing Contributed by Zumorica
Humans can now be gibbed into a pool of blood, organs, and other fleshy goop.
Upgradeable Machines Contributed by Zumorica
Similar to SS13, there is now a general framework for upgradable parts in machines.
Disarming Contributed by Zumorica
Tiders can now liberate harmbatons from Security Officers! Disarming has been added as an action to the new action hotbar.
Cigarettes and Matches Contributed by Ygg01
You can now roleplay as a hardboiled, chainsmoking noir detective.
Cargo Telepad Contributed by GraniteSidewalk
Although shuttles loom on the horizon after the upcoming physics rework is finished, we thought it’d be nice to add a placeholder to Cargonia. Incoming cargo crates will now be beamed to a tele-pad adjacent to the computer, rather than just appearing out of thin air.
Smoke and foam chemical reactions Contributed by Radrark
Chemical reactions can now result in smoke or foam, just like in SS13.
Instrument Improvements Contributed by Zumorica
The instrument UI now has a slider that can be used to rewind or fast-forward the playback of the MIDI song you’re playing. Also, other players' instruments should sound better now.
Tiny things Containment field emitters emit soft light now. Contributed by 20kdc Wall lights are now buildable. Contributed by Macoron Light bulbs are now destructible. Contributed by ZeWaka Kitchen knife and sliceable foods. Contributed by mirrorcult Rounds have time limits now. Contributed by DrSmuglive Disposal units flush air now. Contributed by DrSmuglead Cow tools have been added. Contributed by PaulRitter Now the options menu has a slider for master volume. Contributed by ManelNavola PDA now has a pen. Contributed by exp111 Added suicide for Crematorium and Recycler. Contributed by ManelNavola Pulling and grabbing merged (pulling takes up a hand now). Contributed by DrSmuglaught Flashlights for hard hats and hardsuits. Contributed by Macoron Live preview for the character creator. Contributed by metalgearsloth More belts and welders. Contributed by SweptWasTaken Replaced the cev-eris maint airlocks. Contributed by SweptWasTaken Many crates have been filled. Contributed by SweptWasTaken Many lockers have been filled. Contributed by DmitriyRubetskoy Lockers now enforce access restrictions. Contributed by brndd Context Menu improvements. Contributed by daniel-cr Window breaking is now prettier and makes a sound. Contributed by brndd & Macoron You can now feel hypospray-supplied tiny pricks. Contributed by PJB You can now rig power cells to explode by injecting phoron. Contributed by PJB Technical stuff Mapping Merge Driver Contributed by 20kdc & DrSmugleaf
We now have a merge driver to automatically resolve conflicts in map edits. This should make it easier to work on map files concurrently.
XamlUI Contributed by PaulRitter
We have laid the basic ground work for allowing UIs to be defined in XAML. Compiling XAML files to IL and generating necessary code behind is now possible, thanks to XamlIL and other various bits of code from Avalonia UI .
Sandboxing Contributed by PJB
When you connect to a server, the launcher has to download code from that server to be able to execute the game. That code is now sandboxed so you can’t just get malware by connecting to sketchy servers anymore.
Sandboxing is currently implemented by verifying the IL of all loaded assemblies and checking all referenced members against a massive whitelist.
Patrons Thanks to Acvisy, Altana, Anthony Fleck, arthropods, Await Future, Bobberunio, Christopher Marmentini, clyf, creadth, Crocs Enthusiast ., Curtis Pearson, Daniel Thompson, Darren Brady, dean, DramaBuns, Durp, Eric VW, Evan Armstrong, Jan Doodt, Joshington Awesomahee, Kerb 755, KrystalDisc, Kyle Hipke, Mathieu Déom, merklaw, MonkeePawl, Mono, NetGlitch, Nico Thate, queednyeb, Robert Reed, Robin Rottstock, Star Lord, ThatGuyGW, Third, Tomeno, vifs, Wolfiten, Zandario
Credits The contributors since the last progress report were: 20kdc, Acruid, AJCM-git, BananaFlambe, bhespiritu, brndd, chairbender, Clyybber, ColdAutumnRain, collinlunn, DamianX, daniel-cr, DmitriyRubetskoy, DmitriyZodiak, DrSmugleaf, DTanxxx, exp111, Git-Nivrak, GraniteSidewalk, ike709, JohnGinnane, juliangiebel, kira-er, komunre, LetterN, lzimann, Macoron, ManelNavola, Markek1, metalgearsloth, mirrorcult, moonheart08, namespace-Memory, Nukeuler123, PaulRitter, PJB3005, Radrark, RedlineTriad, Rember, RemieRichards, Rich-Dunne, rneuser, Rockdtben, SaphireLattice, ShadowCommander, SweptWasTaken, Tarlan2, tmtmtl30, Tomeno, Ygg01, ZeWaka, zionnBE, Zumorica
Many thanks to everybody who contributed. We couldn’t do this without you!
\ No newline at end of file
+
Progress Report #25: Blowing Off Steam - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Progress Report #25: Blowing Off Steam Contributed by Many people on Discord Sunday February 7, 2021 Playtest We’re proud to announce that Space Station 14 is now available through the new Steam Playtest feature. Originally we were planning to do a full release through Early Access, but we felt that a more limited release was a better match for the current state of SS14 development.
To gain access, simply visit the SS14 store page and click Request Access. You’ll be added to the pool of people who are waiting, which we randomly draw from when we feel we could use more players.
If you don’t receive access immediately, just be patient! More users will be added over time.
We don’t currently have a set date for a wider Early Access release, it depends on how well the playtests go and how quickly more content is added.
Much work went into last minute preparations to get ready for Steam; combined with exams, the devs all playing Factorio, and the holidays, this progress report is relatively light. But we still have some new treats!
Of course, you can always download the non-Steam build from our downloads page . Obviously it’ll never be as convenient as Steam, but the option is always available.
Progress! Botany Contributed by Zumorica
Botany is in! This includes trays, seeds, planting, harvesting, nutriments, weeds, pests, and plenty more! Botanists can finally supply the station with drugs food, making the station even more self-sufficient. As a bonus, adding new plants is trivial and doesn’t require writing any C# code.
UI improvements Action Hotbar Contributed by chairbender, building on earlier work by ShadowCommander
We now have an actions hotbar! The idea is this hotbar will be used for all common actions you may need quick access to, from toggling your helmet light to wizard spells.
The layout of the hotbar can be re-arranged if you feel so inclined. There are some minor things that have to be added like allowing you to save layouts between round, but for the most part it’s very solid already.
Alerts System and UI Contibuted by chairbender
What was previously known as “status effects” has been expanded into a more general “alerts” system, which allows contributors to easily define and modify the alert icons and tooltips.
Minor UI Things Improved top menu buttons Contributed by chairbender Improved Inventory / Hand Slots UI Contributed by chairbender Improved job preference menu Contributed by Rockdtben & DrSmugleaf Traitor Gamemode & Objectives Contributed by PaulRitter
Added a general framework for antagonist objectives, and a basic implementation of the traitor gamemode. Traitors get objectives at roundstart and complete them over the course of the round, which can only end via a shuttle call. On roundend, all players will see who the traitors were, what objectives they had, and whether they completed their objectives.
Implemented objectives so far are:
Steal the Captain’s ID Die a glorious death Survive Kill a random person Traitor Deathmatch Gamemode Contributed by 20kdc, with PDA redemption machine sprite by Tomeno
Expanding upon the new traitor mode, this gamemode is essentially a free-for-all, but with traitor uplinks for everyone to spice things up.
Contributed by Exp111
The admin menu was mentioned in the last progress report but it’s gotten some new features added.
Magboots Contributed by PJB
You now have magboots. They help you avoid getting thrown around the place by airflow.
Gas tanks and Internals Contributed by Creadth and Zumorica
You can now avoid dying in vacuums. At least from the oxygen loss.
Gas Canisters Contributed by clement-or, help from 20kdc and ike709
Gas canisters now exist, ripe for plasma flooding.
Mortician’s Menagerie (All the crematorium stuff) *Contributed by RemieRichards
The Traitor’s murderbone victims targets won’t be left littering the halls, because the morgue is now fully equipped with functioning morgue trays, body bags, and a crematorium.
Trash Bags & Pickup Animations Contributed by RemieRichards
Now you can pick up trash and steal any other valuables on the ground, in style!
Eris Power Cells Contributed by brndd
Ports Eris-style power cells. They come in three distinct sizes, S, M and L, each size having more charge than the last and fitting into different kinds of devices.
LORD SINGULOTH Contributed by unusualcrow, PaulRitter, and PJB
We teased it last time, and now it’s here! The singularity returns as the latest and arguably greatest engine, with the particle accelerator, containment field, and radiation collectors already implemented. It is capable of going through the station like a hot knife through butter, so beware of sabotage!
All hail Lord Singuloth!
Gibbing Contributed by Zumorica
Humans can now be gibbed into a pool of blood, organs, and other fleshy goop.
Upgradeable Machines Contributed by Zumorica
Similar to SS13, there is now a general framework for upgradable parts in machines.
Disarming Contributed by Zumorica
Tiders can now liberate harmbatons from Security Officers! Disarming has been added as an action to the new action hotbar.
Cigarettes and Matches Contributed by Ygg01
You can now roleplay as a hardboiled, chainsmoking noir detective.
Cargo Telepad Contributed by GraniteSidewalk
Although shuttles loom on the horizon after the upcoming physics rework is finished, we thought it’d be nice to add a placeholder to Cargonia. Incoming cargo crates will now be beamed to a tele-pad adjacent to the computer, rather than just appearing out of thin air.
Smoke and foam chemical reactions Contributed by Radrark
Chemical reactions can now result in smoke or foam, just like in SS13.
Instrument Improvements Contributed by Zumorica
The instrument UI now has a slider that can be used to rewind or fast-forward the playback of the MIDI song you’re playing. Also, other players’ instruments should sound better now.
Tiny things Containment field emitters emit soft light now. Contributed by 20kdc Wall lights are now buildable. Contributed by Macoron Light bulbs are now destructible. Contributed by ZeWaka Kitchen knife and sliceable foods. Contributed by mirrorcult Rounds have time limits now. Contributed by DrSmuglive Disposal units flush air now. Contributed by DrSmuglead Cow tools have been added. Contributed by PaulRitter Now the options menu has a slider for master volume. Contributed by ManelNavola PDA now has a pen. Contributed by exp111 Added suicide for Crematorium and Recycler. Contributed by ManelNavola Pulling and grabbing merged (pulling takes up a hand now). Contributed by DrSmuglaught Flashlights for hard hats and hardsuits. Contributed by Macoron Live preview for the character creator. Contributed by metalgearsloth More belts and welders. Contributed by SweptWasTaken Replaced the cev-eris maint airlocks. Contributed by SweptWasTaken Many crates have been filled. Contributed by SweptWasTaken Many lockers have been filled. Contributed by DmitriyRubetskoy Lockers now enforce access restrictions. Contributed by brndd Context Menu improvements. Contributed by daniel-cr Window breaking is now prettier and makes a sound. Contributed by brndd & Macoron You can now feel hypospray-supplied tiny pricks. Contributed by PJB You can now rig power cells to explode by injecting phoron. Contributed by PJB Technical stuff Mapping Merge Driver Contributed by 20kdc & DrSmugleaf
We now have a merge driver to automatically resolve conflicts in map edits. This should make it easier to work on map files concurrently.
XamlUI Contributed by PaulRitter
We have laid the basic ground work for allowing UIs to be defined in XAML. Compiling XAML files to IL and generating necessary code behind is now possible, thanks to XamlIL and other various bits of code from Avalonia UI .
Sandboxing Contributed by PJB
When you connect to a server, the launcher has to download code from that server to be able to execute the game. That code is now sandboxed so you can’t just get malware by connecting to sketchy servers anymore.
Sandboxing is currently implemented by verifying the IL of all loaded assemblies and checking all referenced members against a massive whitelist.
Patrons Thanks to Acvisy, Altana, Anthony Fleck, arthropods, Await Future, Bobberunio, Christopher Marmentini, clyf, creadth, Crocs Enthusiast ., Curtis Pearson, Daniel Thompson, Darren Brady, dean, DramaBuns, Durp, Eric VW, Evan Armstrong, Jan Doodt, Joshington Awesomahee, Kerb 755, KrystalDisc, Kyle Hipke, Mathieu Déom, merklaw, MonkeePawl, Mono, NetGlitch, Nico Thate, queednyeb, Robert Reed, Robin Rottstock, Star Lord, ThatGuyGW, Third, Tomeno, vifs, Wolfiten, Zandario
Credits The contributors since the last progress report were: 20kdc, Acruid, AJCM-git, BananaFlambe, bhespiritu, brndd, chairbender, Clyybber, ColdAutumnRain, collinlunn, DamianX, daniel-cr, DmitriyRubetskoy, DmitriyZodiak, DrSmugleaf, DTanxxx, exp111, Git-Nivrak, GraniteSidewalk, ike709, JohnGinnane, juliangiebel, kira-er, komunre, LetterN, lzimann, Macoron, ManelNavola, Markek1, metalgearsloth, mirrorcult, moonheart08, namespace-Memory, Nukeuler123, PaulRitter, PJB3005, Radrark, RedlineTriad, Rember, RemieRichards, Rich-Dunne, rneuser, Rockdtben, SaphireLattice, ShadowCommander, SweptWasTaken, Tarlan2, tmtmtl30, Tomeno, Ygg01, ZeWaka, zionnBE, Zumorica
Many thanks to everybody who contributed. We couldn’t do this without you!
\ No newline at end of file
diff --git a/post/21-05-07-progress-report-26/index.html b/post/21-05-07-progress-report-26/index.html
index 295872e..ec15e8d 100644
--- a/post/21-05-07-progress-report-26/index.html
+++ b/post/21-05-07-progress-report-26/index.html
@@ -1,6 +1,8 @@
-
Progress Report #26: Lītigium In Forīs - SS14
Progress Report #26: Lītigium In Forīs Contributed by Many people on Discord Friday May 7, 2021 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.
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 .
+
Progress Report #26: Lītigium In Forīs - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Progress Report #26: Lītigium In Forīs Contributed by Many people on Discord Friday May 7, 2021 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.
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.
diff --git a/post/21-10-01-progress-report-27/index.html b/post/21-10-01-progress-report-27/index.html
index f7f62c0..d9450f0 100644
--- a/post/21-10-01-progress-report-27/index.html
+++ b/post/21-10-01-progress-report-27/index.html
@@ -1,10 +1,12 @@
-
Progress Report #27: Transported to the Chess Dimension - SS14
Progress Report #27: Transported to the Chess Dimension Contributed by Space Wizards Wednesday September 29, 2021 Website Upgrade As you may have noticed, our official website has gotten a major facelift thanks to PJB. We also commissioned some nice new background art from AsPev as a replacement for our old one which was a little crusty. You can download a full resolution of it here .
Updated Playtest Schedule We’re moving playtests to a consistent schedule due to their popularity and developers wanting more feedback from the community on the state of the game. If you currently have access to Space Station 14 on Steam and aren’t in our Discord server we HIGHLY RECOMMEND you join as it’s the best place to stay informed about updates on the project.
Two times a month on Fridays, with separate tests for US and EU timezones on those days.
For EU it will be at 2PM UTC
-For US it will be at 10PM UTC
(That means since we had a playtest on October 1st the next playtest will be on October 15th).
If you’d like to be notified when we playtest join our Discord and click the message in #rules-info to be pinged when we run tests.
New Developer Docs Previously, we used to host all development-related documentation (technical documents, tutorials, vague and questional design dumps) on HackMD.
HackMD had some nice attributes like live editing and being simple to use, however it lacked in other areas like access management and navigation. Because of this, we have decided to start moving away from HackMD.
We evaluated a few options but eventually decided on self-hosted Wiki.js as a platform for our docs. It’s not the best but it’s the best option we could find.
The new documentation site is up at https://docs.spacestation14.io . We are still in the process of moving articles over and making everything look nice, but so far we’re quite pleased.
To be clear: these are developer docs. We’re not planning to have a wiki for actual game content yet . We’d like to try an in-game help system of some form first, but nothing is set in stone yet on that regard.
Content Pneumatic Cannons Contributed by mirrorcult
Load [INSERT ITEM]. Shoot [INSERT ITEM] at people. Profit?
Board Games Contributed by Visne and Zumorica
Bored by the lack of content? Why not sit down and play a nice relaxing game of Chess! This feature is highly extensible and should be thought of like a 2D Tabletop Simulator inside of Space Station 14.
Zumorica further improved upon Visne’s code making it easy to add different tabletop games, adding the game of parchís in the process!
Alt-Clicking Contributed by ElectroSR
Alt+E, Alt+Z and Alt+Left-Mouse keybindings can trigger alternative interactions on entities. Some existing context-menu actions are now considered “alternative interactions”, for example ejecting IDs/beakers/magazines or locking & unlocking lockers can be done via these new keybindings.
Wielding Contributed by mirrorcult
You can now wield (two-hand) some weapons like the fire-axe which will increase the damage per swing. The fire-axe has also received a buff against windows and wooden objects.
Ambient sounds Contributed by metalgearsloth, Swept
Ambient sounds can now play from objects around the station for improved immersion. APCs hum, vending machines whirr, and so on.
Vending Machine Ads Contributed by Moses, Visne and Zumorica
Clothing Storage Visualizers! Contributed by Ygg01 and Swept
Certain items when placed in belts show a sprite on the belt icon itself.
A lot of belts have gotten sprites for this feature, as well as the botany belt being added to give botanists a helping hand.
UI for setting solution transfer amount Contributed by mirrorcult
Entities likes beakers and bottles now have a verb that opens a UI which allows you to set the transfer amount.
Examineable Batteries Contributed by 20kdc
When examining batteries you can see their specific charge value.
Windoors Contributed by mirrorcult
NanoTrasen has finally found space in the budget to install windoors around the station, increasing security and safety!
Shuttles Contributed by metalgearsloth, Acruid, and 20kdc
The first iteration of shuttle driving has made it into the game. Currently it allows you to drive them around in a strafing manner, with rotation planned once the technical blockers have been overcome in the coming months.
Their design is still subject to change over time as we nail down how we want them to work in Space Station 14.
Shuttles have been a major source of development focus and have contributed to lots of updates to our physics system. They’ll be a feature in our next progress report.
Ducky Slippers Contributed by Swept
Map Changes Contributed by Timrod, 20kdc, Seth, Swept, mirrorcult etc.
In addition to fixes and maintaining of Saltern, contributors made some significant changes.
Timrod took advantage of the windoors mirrorcult added and implemented them around Saltern. He also remapped Chemistry and Security.
Mirrorcult did some tweaking to the station’s lighting to make them fit more in line with the color temperature of fluorescents vs incandescents
Seth made maintenance a little more interesting by adding two new sections to explore.
Technical Shuttles again Before we explain why shuttles were hard we need to explain some terminology up front:
Entities - These are objects in-game such as a crowbar, a wall, a mob, etc. Maps - These are what other engines would call “Worlds” or similarly “Z-Levels”. These are just discrete planes that stretch to infinity and the only way to go from one to another is via teleportation. For SS14 you’d typically only have 1 active at a time. To implement shuttles into SS14 there were 3 main challenges that needed to be overcome:
When moving the shuttle we need to make sure that every entity on the shuttle doesn’t need its positions updated. We need to make sure that anything that collides with a shuttle correctly does collision When the shuttle moves it needs to apply collision correctly with anything it drives over. 2 + 3 won’t make sense until we explain the challenge in implementing 1 and how the solution gives rise to problems 2 + 3.
+
Progress Report #27: Transported to the Chess Dimension - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Progress Report #27: Transported to the Chess Dimension Contributed by Space Wizards Wednesday September 29, 2021 Website Upgrade As you may have noticed, our official website has gotten a major facelift thanks to PJB. We also commissioned some nice new background art from AsPev as a replacement for our old one which was a little crusty. You can download a full resolution of it here .
Updated Playtest Schedule We’re moving playtests to a consistent schedule due to their popularity and developers wanting more feedback from the community on the state of the game. If you currently have access to Space Station 14 on Steam and aren’t in our Discord server we HIGHLY RECOMMEND you join as it’s the best place to stay informed about updates on the project.
Two times a month on Fridays, with separate tests for US and EU timezones on those days.
For EU it will be at 2PM UTC
+For US it will be at 10PM UTC
(That means since we had a playtest on October 1st the next playtest will be on October 15th).
If you’d like to be notified when we playtest join our Discord and click the message in #rules-info to be pinged when we run tests.
New Developer Docs Previously, we used to host all development-related documentation (technical documents, tutorials, vague and questional design dumps) on HackMD.
HackMD had some nice attributes like live editing and being simple to use, however it lacked in other areas like access management and navigation. Because of this, we have decided to start moving away from HackMD.
We evaluated a few options but eventually decided on self-hosted Wiki.js as a platform for our docs. It’s not the best but it’s the best option we could find.
The new documentation site is up at https://docs.spacestation14.io . We are still in the process of moving articles over and making everything look nice, but so far we’re quite pleased.
To be clear: these are developer docs. We’re not planning to have a wiki for actual game content yet . We’d like to try an in-game help system of some form first, but nothing is set in stone yet on that regard.
Content Pneumatic Cannons Contributed by mirrorcult
Load [INSERT ITEM]. Shoot [INSERT ITEM] at people. Profit?
Board Games Contributed by Visne and Zumorica
Bored by the lack of content? Why not sit down and play a nice relaxing game of Chess! This feature is highly extensible and should be thought of like a 2D Tabletop Simulator inside of Space Station 14.
Zumorica further improved upon Visne’s code making it easy to add different tabletop games, adding the game of parchís in the process!
Alt-Clicking Contributed by ElectroSR
Alt+E, Alt+Z and Alt+Left-Mouse keybindings can trigger alternative interactions on entities. Some existing context-menu actions are now considered “alternative interactions”, for example ejecting IDs/beakers/magazines or locking & unlocking lockers can be done via these new keybindings.
Wielding Contributed by mirrorcult
You can now wield (two-hand) some weapons like the fire-axe which will increase the damage per swing. The fire-axe has also received a buff against windows and wooden objects.
Ambient sounds Contributed by metalgearsloth, Swept
Ambient sounds can now play from objects around the station for improved immersion. APCs hum, vending machines whirr, and so on.
Vending Machine Ads Contributed by Moses, Visne and Zumorica
Clothing Storage Visualizers! Contributed by Ygg01 and Swept
Certain items when placed in belts show a sprite on the belt icon itself.
A lot of belts have gotten sprites for this feature, as well as the botany belt being added to give botanists a helping hand.
UI for setting solution transfer amount Contributed by mirrorcult
Entities likes beakers and bottles now have a verb that opens a UI which allows you to set the transfer amount.
Examineable Batteries Contributed by 20kdc
When examining batteries you can see their specific charge value.
Windoors Contributed by mirrorcult
NanoTrasen has finally found space in the budget to install windoors around the station, increasing security and safety!
Shuttles Contributed by metalgearsloth, Acruid, and 20kdc
The first iteration of shuttle driving has made it into the game. Currently it allows you to drive them around in a strafing manner, with rotation planned once the technical blockers have been overcome in the coming months.
Their design is still subject to change over time as we nail down how we want them to work in Space Station 14.
Shuttles have been a major source of development focus and have contributed to lots of updates to our physics system. They’ll be a feature in our next progress report.
Ducky Slippers Contributed by Swept
Map Changes Contributed by Timrod, 20kdc, Seth, Swept, mirrorcult etc.
In addition to fixes and maintaining of Saltern, contributors made some significant changes.
Timrod took advantage of the windoors mirrorcult added and implemented them around Saltern. He also remapped Chemistry and Security.
Mirrorcult did some tweaking to the station’s lighting to make them fit more in line with the color temperature of fluorescents vs incandescents
Seth made maintenance a little more interesting by adding two new sections to explore.
Technical Shuttles again Before we explain why shuttles were hard we need to explain some terminology up front:
Entities - These are objects in-game such as a crowbar, a wall, a mob, etc. Maps - These are what other engines would call “Worlds” or similarly “Z-Levels”. These are just discrete planes that stretch to infinity and the only way to go from one to another is via teleportation. For SS14 you’d typically only have 1 active at a time. To implement shuttles into SS14 there were 3 main challenges that needed to be overcome:
When moving the shuttle we need to make sure that every entity on the shuttle doesn’t need its positions updated. We need to make sure that anything that collides with a shuttle correctly does collision When the shuttle moves it needs to apply collision correctly with anything it drives over. 2 + 3 won’t make sense until we explain the challenge in implementing 1 and how the solution gives rise to problems 2 + 3.
We have several internal data structures that store entity positions for fast queries, such as:
What sprites intersect the viewport? What physics bodies am I colliding with? What lights intersect this point? Previously, these were all stored relative to the map , which meant that whenever a shuttle moved every single entity on it also needed to be updated in our data structures. On our small station called Saltern we have over 5,000 entities on it so this was prohibitively expensive and would severely limit any server that wanted to have multiple moving ships.
The solution to this is store all of these entities relative to the shuttle , and then store the shuttle relative to the map .
This means that whenever the shuttle moves we only have to update the shuttle on the map. However, this gives rise to problems 2 + 3.
To explain further:
Say we have an entity on the map travelling towards a shuttle. As it is on the map it is only checking collisions on the map. Even if it intersects with the shuttle it’s still not checking collision for any entities on the shuttle’s data structure, because it’s still on the map.
The solution to this is that whenever the entity moves we check all data structures it may potentially be intersecting, and then check collisions individually on each one. This is slower than if every entity were on the same data map but makes shuttle updates very easy.
This solves problem 2.
-Problem 3 applies in reverse: Whenever a shuttle moves, we look for any entities we may be intersecting and then check these for collisions.
Since that was a bit of a word salad here’s some videos of shuttles in various stages of development.
Power System Rewrite (Pow3r) Most of the power system has been rewritten.
All power supplying objects now have a built-in ramping system. If a large amount of extra power is suddenly needed, engines and batteries on the grid need a bit of time to “ramp up” to match.
Power is passed through batteries immediately. This means that APCs are basically on standby until engine power or such cuts out. When the engine cuts out, heavy electrical grids will be underpowered for a second or two until backup batteries can spin up to fill the gap.
Other Contributions Significant network bubbling performance improvements which should greatly increase the number of players we can have on a server. Contributed by Acruid
More context menu icons and two new actions (open inventory & eject items from disposal unit). Contributed by ElectroSR Global ghost hearing. Contributed by ShadowCommander Battery charge indicator for substations and APCs. Contributed by 20kdc You can now cycle channels while typing. Contributed by Clyybber Claymore. Contributed by TaralGit Security Barriers Contributed by Macoron New technologies and balanced/added recipes for the lathes. Contributed by Seth Integer scaling option. Turn it off to get rid of black bars at the cost of less crisp scaling Contributed by Visne Crayon and Toolbelt sprites now dynamically show their contents. Contributed by Ygg01 Simple spells for pie and item spawning. Contributed by CrudeWax Contributed by scaly-chimp Scaly-chimp broke bad and added meth so aspiring chemists can recreate scenes from the hit TV show Big Bang Theory. Several simple medicines and chemistry improvements. Fixed y-sorting so it uses the bottom of the sprite and not the center. Physics multi-threading. Some engineering items now play sounds when landing. Meteor event. Throwing now feels more realistic as it comes to a sudden stop at the end of the throw. Lerping has been fixed and pulling lerping has been implemented. In English: Movement feels much better. Contributed by T-Stalker Examine now shows what people have in their hands. Vox plushie. Contributed by Zumorica Gas tanks can be inserted into canisters. Unique station announcement when Captain comes on deck. Smoking actually makes you inhale nicotine/THC reagents and you can snuff them out. Dual-Port air vent. Contributed by Swept Crematorium makes a sound during cremation and burns quicker. Adds and updates a ton of inhands for items across the codebase. Updated Botany tool sprites. Announcements now play the announcement sound. Admin ghosts can interact with stuff. Centcom Official ghost role. Jumpskirt for Captain. Thrown bags of flours and tomatoes will now splat and spill their contents. Patrons Thanks to Blaise M., Jack Rose, The Hateful Flesh, Prof. Omii, mksky, Alex Tempest, Rat Fungus, Will M., spinnermaster, Valinov, Dan Griskardian, S.C., “'-Y-”, Jubal the Wizard, clyf, Kerb 755, Robin Rottstock, Altana, Durp, Joshington Awesomahee, Eric VW, Evan Armstrong, Enzoman12, Mono, Ethan Keller, DramaBuns, KrystalDisc, Darren Brady, Zandario, Anthony Fleck, vifs_vestige, Bobberunio, CPM311, ThatGuyGW, Farewell Fire, Await Future, Daniel Thompson, and Tomeno.
Credits The contributors since the last progress report were: 20kdc, Acruid, AJCM-git, boiled-water-tsar, clyfordv, ColdAutumnRain, DrSmugleaf, ElectroJr, Fiftyllama, Fogapod, GalacticChimp, ike709, Jaskanbe, Macoron, metalgearsloth, michaelcooke, mirrorcult, PaulRitter, PJB3005, plinyvic, scaly-chimp, scrato, SethLafuente, ShadowCommander, Silvertorch5, Swept, TimrodDX, Visne, Ygg01 and Zumorica.
Many thanks to everybody who contributed. We couldn’t do this without you!
\ No newline at end of file
+Problem 3 applies in reverse: Whenever a shuttle moves, we look for any entities we may be intersecting and then check these for collisions.
Since that was a bit of a word salad here’s some videos of shuttles in various stages of development.
Power System Rewrite (Pow3r) Most of the power system has been rewritten.
All power supplying objects now have a built-in ramping system. If a large amount of extra power is suddenly needed, engines and batteries on the grid need a bit of time to “ramp up” to match.
Power is passed through batteries immediately. This means that APCs are basically on standby until engine power or such cuts out. When the engine cuts out, heavy electrical grids will be underpowered for a second or two until backup batteries can spin up to fill the gap.
Other Contributions Significant network bubbling performance improvements which should greatly increase the number of players we can have on a server. Contributed by Acruid
More context menu icons and two new actions (open inventory & eject items from disposal unit). Contributed by ElectroSR Global ghost hearing. Contributed by ShadowCommander Battery charge indicator for substations and APCs. Contributed by 20kdc You can now cycle channels while typing. Contributed by Clyybber Claymore. Contributed by TaralGit Security Barriers Contributed by Macoron New technologies and balanced/added recipes for the lathes. Contributed by Seth Integer scaling option. Turn it off to get rid of black bars at the cost of less crisp scaling Contributed by Visne Crayon and Toolbelt sprites now dynamically show their contents. Contributed by Ygg01 Simple spells for pie and item spawning. Contributed by CrudeWax Contributed by scaly-chimp Scaly-chimp broke bad and added meth so aspiring chemists can recreate scenes from the hit TV show Big Bang Theory. Several simple medicines and chemistry improvements. Fixed y-sorting so it uses the bottom of the sprite and not the center. Physics multi-threading. Some engineering items now play sounds when landing. Meteor event. Throwing now feels more realistic as it comes to a sudden stop at the end of the throw. Lerping has been fixed and pulling lerping has been implemented. In English: Movement feels much better. Contributed by T-Stalker Examine now shows what people have in their hands. Vox plushie. Contributed by Zumorica Gas tanks can be inserted into canisters. Unique station announcement when Captain comes on deck. Smoking actually makes you inhale nicotine/THC reagents and you can snuff them out. Dual-Port air vent. Contributed by Swept Crematorium makes a sound during cremation and burns quicker. Adds and updates a ton of inhands for items across the codebase. Updated Botany tool sprites. Announcements now play the announcement sound. Admin ghosts can interact with stuff. Centcom Official ghost role. Jumpskirt for Captain. Thrown bags of flours and tomatoes will now splat and spill their contents. Patrons Thanks to Blaise M., Jack Rose, The Hateful Flesh, Prof. Omii, mksky, Alex Tempest, Rat Fungus, Will M., spinnermaster, Valinov, Dan Griskardian, S.C., “’-Y-”, Jubal the Wizard, clyf, Kerb 755, Robin Rottstock, Altana, Durp, Joshington Awesomahee, Eric VW, Evan Armstrong, Enzoman12, Mono, Ethan Keller, DramaBuns, KrystalDisc, Darren Brady, Zandario, Anthony Fleck, vifs_vestige, Bobberunio, CPM311, ThatGuyGW, Farewell Fire, Await Future, Daniel Thompson, and Tomeno.
Credits The contributors since the last progress report were: 20kdc, Acruid, AJCM-git, boiled-water-tsar, clyfordv, ColdAutumnRain, DrSmugleaf, ElectroJr, Fiftyllama, Fogapod, GalacticChimp, ike709, Jaskanbe, Macoron, metalgearsloth, michaelcooke, mirrorcult, PaulRitter, PJB3005, plinyvic, scaly-chimp, scrato, SethLafuente, ShadowCommander, Silvertorch5, Swept, TimrodDX, Visne, Ygg01 and Zumorica.
Many thanks to everybody who contributed. We couldn’t do this without you!
\ No newline at end of file
diff --git a/post/21-11-24-progress-report-28/index.html b/post/21-11-24-progress-report-28/index.html
index 319c5a2..7076e08 100644
--- a/post/21-11-24-progress-report-28/index.html
+++ b/post/21-11-24-progress-report-28/index.html
@@ -1,8 +1,10 @@
-
Progress Report #28: Atmosia Rising - SS14
Progress Report #28: Atmosia Rising Contributed by Timrod Wednesday November 24, 2021 The last couple of months have been a huge step forward for Space Station 14, with a total of 315 contributions made to the SS14 codebase between September 29th and November 3rd, and nearly 700 commits to SS14 and the RobustToolbox engine.
During the last bi-weekly playtests, the servers were filled by an average of over 30 players, reaching peak counts of 60! To better distribute players across our servers, we put in a player cap.
This month, we’ve got everything from gun/trumpet hybrids and pneumatic cannons to small things.. like a complete overhaul of the game’s sprite base and massive engine changes to allow for better shuttle movement. This report’s contributions include:
Content /tg/ Resprite Contributed by Swept
No, it’s not just the mystery juice Chemistry’s been force-feeding you: Space Station 14 has switched sprite bases from CEV-Eris to /tg/, including walls, airlocks, tables and more. Saltern has been updated to this new, flatter look. Any reports of lights mysteriously appearing in walls are probably the mystery juice.
Grilles Contributed by Zumorica
Returning with the changeover to the /tg/ spritebase are grilles, everyone’s favorite easily-destroyed lattice of metal rods. Grilles can be found under windows all over Saltern, or in the hallways if the assistants get their hands on metal rods.
-
Atmos pipes Contributed by Zumorica and moony
moony undertook the Herculean task of mapping in Atmos on Saltern, using the pipes and vents contributed by Zumorica. moony also contributed a system for coloring pipes when mapping to allow Engineering to more efficiently light the station on fire. Life expectancies aboard Space Station 14 have never been lower.
Solars Contributed by 20kdc
20kdc fixed up the station’s solars and mapped them in on Saltern, giving the station a clean new power source and the Chief Engineer another thing to yell about over the radio.
Damage Visualizers Contributed by vulppine
vulppine added damage visualizers, so that Security can tell for sure when someone is dead and is therefore safe to arrest for the crime of being dead.
Improvised Pneumatic Cannons Contributed by mirrorcult
Built from a gas tank, some pipes, a wire, and a pneumatic cannon, everyone’s favorite school science project is now available to craft after finally being added to the codebase since the last progress report. Just keep them away from the Clown.
Armor Contributed by mirrorcult
Armor found throughout the station now actually reduces incoming damage, giving Security a bit more time to react before being overwhelmed by the grey tide.
-
Electrocution, Stuttering, and Jittering Contributed by Zumorica
Wires now shock anyone who touches them without insulated gloves. They can also be placed under grilles to electrify them. Nanotrasen reminds you that they do not condone the use of electrified grilles as the walls of so-called “rage cage” style fighting arenas.
In addition, Zumorica added stuttering and jittering, so anyone passing by will be able to tell from the convulsions that you just touched a high-voltage wire and are not, in fact, dead.
Adminhelp Interface Contributed by 20kdc
20kdc built a basic adminhelp interface, complete with the bwoink noise, for reporting issues aboard the station that require the intervention of a server admin. Speaking of which…
Bar Content Contributed by Daemon
Deciding that the station did not yet have enough ways to get drunk, Daemon added some new drinks and went back to fix existing ones. In unrelated news, Fourteen Loko is now legal to consume and serve after being banned galaxy-wide.
Bluespace Artillery Contributed by moony
Centcom’s Bluespace Artillery has been re-armed.
Pinpointers Contributed by Macoron
Macoron added in the Pinpointer, giving the Captain an exciting new way to ignore the location of the nuclear disk.
-
Contributed by 20kdc and Efruit
Efruit made a basic interface for reading power with multitools, which was finalized and implemented by 20kdc. Multitools can now tell you where all that power is going, and when the station’s power grid is violating the laws of physics.
Shutters and Blast Doors Contributed by Mirrorcult
Mirrorcult added shutters and blast doors, coming soon to a superheated burn room near you.
-
Gunpet Contributed by Mirrorcult
Mirrorcult also added the Gunpet. I think that’s really all we need to say here.
Personal AIs Contributed by 20kdc
20kdc brings back an SS13 favorite in the form of the pAI, your silicon friend who is like a regular AI, but without the ability to open doors on command or use their army of heavily-armed cyborgs to purge the station.
Shuttle Rotation Contributed by metalgearsloth
metalgearsloth added a full rotation system for shuttles, allowing anyone with access to a shuttle console the ability to give the entire crew motion sickness.
APC Device Networks and Light Switches Contributed by juliangiebel
Julian added a method for linking devices through the APC power cables connected to them, and then implemented the first linked device in the form of light switches that toggle all lights connected to an APC. No longer will the Mime have to smash all the lights on the station to achieve total darkness and construct a mime nest.
-
Reinforced Plasma Windows Contributed by SethLafuente
Seth added reinforced plasma glass windows to keep the toxins in the burn room instead of all over the station.
Engine Updates and Backend Changes Contributed by ElectroJr* ElectroJr updated the verbs menu to the Entity-Component-System (ECS) standard, allowing assistants to break into Engineering with more efficient and readable code.
RSI Diff Bot Contributed by Mirrorcult
Mirrorcult created and ported a bot to detect changes to RSI files used for sprites. While not something most users will see, it’s a major change for contributors looking to add or modify sprites.
Construction Graph Language 2 Contributed by Zumorica
Zumorica updated the way SS14 handles crafting and construction, expanding the type of actions construction can ask for beyond “Use this tool” or “Insert this material” and making construction steps that weren’t previously shown in the menu (such as inserting machine parts) show up properly in the construction recipe.
Badmin Query Language Contributed by moony
Moony added BQL, or Badmin Query Language. It’s like SQL, except you can use it to turn all the station’s walls into bananas.. or electrified grilles.
Warning Fixes and XAML UI Contributed by Visne
Visne contributed a ton of stuff behind the scenes, including fixing 300 compiler warnings and changing many of the pop-up UIs (including paper, the Gravity Generator, APCs and the research console) into XAML.
A Whole Bunch of Refactors and Code Quality fixes Contributed by metalgearsloth
metalgearsloth fixed a number of important things on the back-end, including making grid bounds more accurate and fixing grid collisions. No longer will your custom-made shuttle phase right through the station instead of ramming into it at full speed.
Also contributed were a number of process optimizations to reduce server allocations.
Notable Bug Fixes Gender Restoration Fixed by vulppine
vulppine fixed a bug that stole the station’s genders. No longer will crew members be referred to as an “it”, unless the Captain raids Botany’s secret stash again.
Name and Job Restrictions Fixed by metalgearsloth and ike709
ike709 restricted character names to alphanumeric characters, while metalgearsloth added length restrictions to both names and jobs to prevent players from changing their job title to the entire text of Moby Dick . Now, you’ll just have to stick to being called Ishmael.
Rotation and Sound Position Fixes Fixed by ShadowCommander and Paul Ritter
In space, no one can hear you honk. At least, they could - until ShadowCommander and Paul fixed sound positions so that every sound being made on the station wasn’t being broadcast into deep space.
Admin Locker Capture Fixed by Zumorica
Zumorica fixed a bug that allowed players to capture an admin ghost inside a locker, though really.. if the admin got captured in the first place, do they deserve to get out?
As if powering a remake of Space Station 13 wasn’t enough, the RobustToolbox engine is also being used to power OpenDream, a new project that aims to be a free and open-source alternative to BYOND itself. BYOND is very dated as an engine, and OpenDream aims to improve many aspects of it such as performance, new features, and so on. Even if SS14 exists, being able to run and maintain existing SS13 codebases off-BYOND is always important for reasons such as preservation and nostalgia.
OpenDream uses the RobustToolbox engine as a starting point, including its existing networking, UI and rendering code and will integrate the SS14 launcher and account system - allowing players to connect to OpenDream-hosted SS13 servers using the same launcher they already use for SS14. RobustToolbox is particularly well-suited for the task because it has already integrated features inspired from Space Station 13 and other BYOND games.
OpenDream aims to eventually improve and extend BYOND itself. This means that eventually, games making use of OpenDream’s new features will not be able to run on BYOND itself. It also does not aim to allow you to connect to OpenDream server with the official BYOND client or vice versa. In the future, SS13 servers will be able to make the switch to OpenDream.
You can find the Discord server for OpenDream here .
Credits Contributors Since Last Progress Report 20kdc, Alex Evgrashin, Bingo Johnson, CrudeWax, DrSmugleaf, Efruit, Fortune117, Galactic Chimp, JasperJRoth, ElectroSr, Mid-randalf, PJB, Paul Ritter, PetMudstone, Saphire, SethLafuente, ShadowCommander, StStevens, Swept, Timrod, Visne, Watermelon914, Ygg01, Daemon, Zumorica, ike709, juliangiebel, metalgearsloth, mirrorcult, moony, vulppine
Patrons Alex Tempest, Altana, Anthony Fleck, Await Future, Blaise M., Bobberunio, Citizen Battle, clyf, CPM311, Dan Griskardian, Daniel Thompson, Darren Brady, Daskata, DramaBuns, Durp, Eric VW, Ethan Keller, Evan Armstrong, Farewell Fire, Florian, Jack Rose, Joshington Awesomahee, Kerb 755, KrystalDisc, Michael Land, Mono, Robin Rottstock, S.C., spinnermaster, ThatGuyGW, The Hateful Flesh, Tomeno, Valinov, vifs_vestige, Viridian, Will M.
\ No newline at end of file
+
Progress Report #28: Atmosia Rising - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Progress Report #28: Atmosia Rising Contributed by Timrod Wednesday November 24, 2021 The last couple of months have been a huge step forward for Space Station 14, with a total of 315 contributions made to the SS14 codebase between September 29th and November 3rd, and nearly 700 commits to SS14 and the RobustToolbox engine.
During the last bi-weekly playtests, the servers were filled by an average of over 30 players, reaching peak counts of 60! To better distribute players across our servers, we put in a player cap.
This month, we’ve got everything from gun/trumpet hybrids and pneumatic cannons to small things.. like a complete overhaul of the game’s sprite base and massive engine changes to allow for better shuttle movement. This report’s contributions include:
Content /tg/ Resprite Contributed by Swept
No, it’s not just the mystery juice Chemistry’s been force-feeding you: Space Station 14 has switched sprite bases from CEV-Eris to /tg/, including walls, airlocks, tables and more. Saltern has been updated to this new, flatter look. Any reports of lights mysteriously appearing in walls are probably the mystery juice.
Grilles Contributed by Zumorica
Returning with the changeover to the /tg/ spritebase are grilles, everyone’s favorite easily-destroyed lattice of metal rods. Grilles can be found under windows all over Saltern, or in the hallways if the assistants get their hands on metal rods.
+Atmos pipes Contributed by Zumorica and moony
moony undertook the Herculean task of mapping in Atmos on Saltern, using the pipes and vents contributed by Zumorica. moony also contributed a system for coloring pipes when mapping to allow Engineering to more efficiently light the station on fire. Life expectancies aboard Space Station 14 have never been lower.
Solars Contributed by 20kdc
20kdc fixed up the station’s solars and mapped them in on Saltern, giving the station a clean new power source and the Chief Engineer another thing to yell about over the radio.
Damage Visualizers Contributed by vulppine
vulppine added damage visualizers, so that Security can tell for sure when someone is dead and is therefore safe to arrest for the crime of being dead.
Improvised Pneumatic Cannons Contributed by mirrorcult
Built from a gas tank, some pipes, a wire, and a pneumatic cannon, everyone’s favorite school science project is now available to craft after finally being added to the codebase since the last progress report. Just keep them away from the Clown.
Armor Contributed by mirrorcult
Armor found throughout the station now actually reduces incoming damage, giving Security a bit more time to react before being overwhelmed by the grey tide.
+Electrocution, Stuttering, and Jittering Contributed by Zumorica
Wires now shock anyone who touches them without insulated gloves. They can also be placed under grilles to electrify them. Nanotrasen reminds you that they do not condone the use of electrified grilles as the walls of so-called “rage cage” style fighting arenas.
In addition, Zumorica added stuttering and jittering, so anyone passing by will be able to tell from the convulsions that you just touched a high-voltage wire and are not, in fact, dead.
Adminhelp Interface Contributed by 20kdc
20kdc built a basic adminhelp interface, complete with the bwoink noise, for reporting issues aboard the station that require the intervention of a server admin. Speaking of which…
Bar Content Contributed by Daemon
Deciding that the station did not yet have enough ways to get drunk, Daemon added some new drinks and went back to fix existing ones. In unrelated news, Fourteen Loko is now legal to consume and serve after being banned galaxy-wide.
Bluespace Artillery Contributed by moony
Centcom’s Bluespace Artillery has been re-armed.
Pinpointers Contributed by Macoron
Macoron added in the Pinpointer, giving the Captain an exciting new way to ignore the location of the nuclear disk.
+Contributed by 20kdc and Efruit
Efruit made a basic interface for reading power with multitools, which was finalized and implemented by 20kdc. Multitools can now tell you where all that power is going, and when the station’s power grid is violating the laws of physics.
Shutters and Blast Doors Contributed by Mirrorcult
Mirrorcult added shutters and blast doors, coming soon to a superheated burn room near you.
+Gunpet Contributed by Mirrorcult
Mirrorcult also added the Gunpet. I think that’s really all we need to say here.
Personal AIs Contributed by 20kdc
20kdc brings back an SS13 favorite in the form of the pAI, your silicon friend who is like a regular AI, but without the ability to open doors on command or use their army of heavily-armed cyborgs to purge the station.
Shuttle Rotation Contributed by metalgearsloth
metalgearsloth added a full rotation system for shuttles, allowing anyone with access to a shuttle console the ability to give the entire crew motion sickness.
APC Device Networks and Light Switches Contributed by juliangiebel
Julian added a method for linking devices through the APC power cables connected to them, and then implemented the first linked device in the form of light switches that toggle all lights connected to an APC. No longer will the Mime have to smash all the lights on the station to achieve total darkness and construct a mime nest.
+Reinforced Plasma Windows Contributed by SethLafuente
Seth added reinforced plasma glass windows to keep the toxins in the burn room instead of all over the station.
Engine Updates and Backend Changes Contributed by ElectroJr* ElectroJr updated the verbs menu to the Entity-Component-System (ECS) standard, allowing assistants to break into Engineering with more efficient and readable code.
RSI Diff Bot Contributed by Mirrorcult
Mirrorcult created and ported a bot to detect changes to RSI files used for sprites. While not something most users will see, it’s a major change for contributors looking to add or modify sprites.
Construction Graph Language 2 Contributed by Zumorica
Zumorica updated the way SS14 handles crafting and construction, expanding the type of actions construction can ask for beyond “Use this tool” or “Insert this material” and making construction steps that weren’t previously shown in the menu (such as inserting machine parts) show up properly in the construction recipe.
Badmin Query Language Contributed by moony
Moony added BQL, or Badmin Query Language. It’s like SQL, except you can use it to turn all the station’s walls into bananas.. or electrified grilles.
Warning Fixes and XAML UI Contributed by Visne
Visne contributed a ton of stuff behind the scenes, including fixing 300 compiler warnings and changing many of the pop-up UIs (including paper, the Gravity Generator, APCs and the research console) into XAML.
A Whole Bunch of Refactors and Code Quality fixes Contributed by metalgearsloth
metalgearsloth fixed a number of important things on the back-end, including making grid bounds more accurate and fixing grid collisions. No longer will your custom-made shuttle phase right through the station instead of ramming into it at full speed.
Also contributed were a number of process optimizations to reduce server allocations.
Notable Bug Fixes Gender Restoration Fixed by vulppine
vulppine fixed a bug that stole the station’s genders. No longer will crew members be referred to as an “it”, unless the Captain raids Botany’s secret stash again.
Name and Job Restrictions Fixed by metalgearsloth and ike709
ike709 restricted character names to alphanumeric characters, while metalgearsloth added length restrictions to both names and jobs to prevent players from changing their job title to the entire text of Moby Dick . Now, you’ll just have to stick to being called Ishmael.
Rotation and Sound Position Fixes Fixed by ShadowCommander and Paul Ritter
In space, no one can hear you honk. At least, they could - until ShadowCommander and Paul fixed sound positions so that every sound being made on the station wasn’t being broadcast into deep space.
Admin Locker Capture Fixed by Zumorica
Zumorica fixed a bug that allowed players to capture an admin ghost inside a locker, though really.. if the admin got captured in the first place, do they deserve to get out?
As if powering a remake of Space Station 13 wasn’t enough, the RobustToolbox engine is also being used to power OpenDream, a new project that aims to be a free and open-source alternative to BYOND itself. BYOND is very dated as an engine, and OpenDream aims to improve many aspects of it such as performance, new features, and so on. Even if SS14 exists, being able to run and maintain existing SS13 codebases off-BYOND is always important for reasons such as preservation and nostalgia.
OpenDream uses the RobustToolbox engine as a starting point, including its existing networking, UI and rendering code and will integrate the SS14 launcher and account system - allowing players to connect to OpenDream-hosted SS13 servers using the same launcher they already use for SS14. RobustToolbox is particularly well-suited for the task because it has already integrated features inspired from Space Station 13 and other BYOND games.
OpenDream aims to eventually improve and extend BYOND itself. This means that eventually, games making use of OpenDream’s new features will not be able to run on BYOND itself. It also does not aim to allow you to connect to OpenDream server with the official BYOND client or vice versa. In the future, SS13 servers will be able to make the switch to OpenDream.
You can find the Discord server for OpenDream here .
Credits Contributors Since Last Progress Report 20kdc, Alex Evgrashin, Bingo Johnson, CrudeWax, DrSmugleaf, Efruit, Fortune117, Galactic Chimp, JasperJRoth, ElectroSr, Mid-randalf, PJB, Paul Ritter, PetMudstone, Saphire, SethLafuente, ShadowCommander, StStevens, Swept, Timrod, Visne, Watermelon914, Ygg01, Daemon, Zumorica, ike709, juliangiebel, metalgearsloth, mirrorcult, moony, vulppine
Patrons Alex Tempest, Altana, Anthony Fleck, Await Future, Blaise M., Bobberunio, Citizen Battle, clyf, CPM311, Dan Griskardian, Daniel Thompson, Darren Brady, Daskata, DramaBuns, Durp, Eric VW, Ethan Keller, Evan Armstrong, Farewell Fire, Florian, Jack Rose, Joshington Awesomahee, Kerb 755, KrystalDisc, Michael Land, Mono, Robin Rottstock, S.C., spinnermaster, ThatGuyGW, The Hateful Flesh, Tomeno, Valinov, vifs_vestige, Viridian, Will M.
\ No newline at end of file
diff --git a/post/21-12-09-progress-report-29/index.html b/post/21-12-09-progress-report-29/index.html
index d292ffb..1c8f35d 100644
--- a/post/21-12-09-progress-report-29/index.html
+++ b/post/21-12-09-progress-report-29/index.html
@@ -1,5 +1,7 @@
-
Progress Report #29: A Lot To Unpack - SS14
Progress Report #29: A Lot To Unpack Contributed by Timrod Thursday December 9, 2021 Space Station 14 underwent so many changes in November that we had to split them off into a separate progress report. From November 4th to December 4th, the Space Station 14 code base had 357 contributions made - easily beating the two month period covered by Progress Report 28.
This progress report features two new playable maps: Packed Station and Knightship, along with the return of the Chaplain, Chemist, and Warden. Also featured are liquid carpets, liquid bees, milkable cows, and new ways to make shuttles move.
The past month has also been huge for the player base, with thousands of new players being accepted into the Steam playtest each week. The game reached a new peak of over 100 players on at once, and continues to be populated every day.
Maps Packed Station Contributed by Timrod, Solbusaur, 20kdc and Efruit
The station that the /vg/ wiki describes as “Like eating poison ivy” is back! Designed to support SS14’s growing player base, Packed Station is a nearly completely accurate port of the map as seen on /vg/’s SS13 codebase with some new features - like a full Atmos department (codenamed “The Hand of Atmosia”) designed by Solbusaur and an SS14-compliant wiring system by Efruit. 20kdc added support for the Traitor Deathmatch gamemode and filled the hallways with trash. There may be another surprise somewhere - but you’ll have to explore it to find out.
Packed Station supports up to 50 players, and can be voted for once the server is over 15 players. It also supports three returning jobs not seen on Saltern - the Quartermaster, Chaplain, and Warden.
Knightship Contributed by 20kdc
20kdc invoked the 25th-century minimalist movement in creating Knightship, a tiny, efficient ship-style station designed for up to 8 players where most jobs are done by the Heads of Staff - but are they really the head of anything when they’re the only person in their department?
Syndicate Puddle-Jumper Contributed by 20kdc
Having determined that Nanotrasen’s station captains have been lulled into a false sense of security, the Syndicate has launched their first shuttle for carrying heavily-armed nuclear ops teams to the station. Now might not be a bad time to get the Nuclear Authentication Disk back from the Clown…
Content Chemical carpets Contributed by mirrorcult
Mirrorcult proves once again that common sense has no place in a chemistry lab, adding in the ability to grind jumpsuits in a blender in order to create liquid carpet that can be sprayed or dumped onto floors to instantly carpet them. Interior design will never be the same.
Directional Windows Contributed by mirrorcult
Directional Windows (also known as “thindows”) are a core element of most SS13 maps, used to divide rooms without the need for full walls. They’re also the number one source of anxiety among mappers, who live in constant fear that they forgot one somewhere. Thanks to mirrorcult, maps ported from SS13 can feel a little more like SS13.
-
Nuke Contributed by Macoron
Macoron added a core element for the Nuclear Emergency game mode: the nuclear bomb. Located in the vault on Packed Station (and in most SS13-derived stations) and in the Nuke Op shuttle, these are capable of destroying the entire station.. provided you didn’t forget the code.
Shuttle thrusters Contributed by metalgearsloth
The space magic that allowed entire stations to fly without any apparent source of propulsion has waned, and metalgearsloth instead added thrusters that can be attached to a station or shuttle to, well… thrust. They can be ordered from cargo and are extremely deadly if you stand on the wrong end.
Animal mechanics Contributed by FoLoKe
FoLoKe reworked animals in SS14, allowing for a lot of basic interactions that didn’t previously exist - such as feeding them or putting them on tables. As a result, you’ll no longer need to ask “Does that monkey have a gun?” because yes, it does. This also allows the vicious and highly lethal space carp to survive their natural habitat.
Cow milking Contributed by FoLoKe
For ages, the Chef has asked a single question: “How do I get milk?” FoLoKe answered that by allowing the Chef (or anyone with a bucket) to milk cows that have been properly fed. The Chef has responded thus far by ignoring the milk entirely and butchering every cow Nanotrasen has sent them.
Shuttle docking Contributed by metalgearsloth
metalgearsloth added a system for shuttle docking using docking airlocks, a vast improvement on the previous docking method of blowing a hole in the station big enough to drive a shuttle into. Any shuttle equipped with one or more docking airlocks will now be able to lock on to the station.
Station Events and Space Kudzu Contributed by moony
Moony re-enabled automatic station events, which have a chance of occurring each round. These range from deadly radiation pulses to the station being hit by meteors.
In an unrelated note, Centcom is reporting that the highly annoying and extremely fast-growing Space Kudzu has once again reappeared in local space. Centcom recommends the use of flame-based weaponry like welders, along with liberal application of the “wide attack” button, to combat this new menace.
Centcom would also like to remind you that “the station is being eaten by a horrible plant” is not on the list of valid reasons for handing out the nuclear codes.
Radiationstorm shader & sfx Contributed by Efruit
It’s a known fact that radiation storms in space do not look like flat green circles, something that Efruit fixed by implementing a new (and much more visually impressive) shader for bursts of radiation, as well as a new set of sound effects to match.
Nettles Contributed by Rane
Since their introduction to Space Station 14, the Botanists have had a difficult time finding ways to cause chaos. Enter the humble nettle plant, which can be used as a weapon to deal toxin damage or ground up into a liquid poison and slipped into a drink for a more subtle approach.
Blockgame ghosts Contributed by Tomeno
Hardcore Nanotrasen Block Game players cheered this month as drop ghosts were added to Nanotrasen Block Game, thanks to Tomeno. Finally, Space Station 14 can be what it was always meant to be: a competitive block dropping puzzle game. What, you thought the atmospheric simulation was the game?
pAis play music Contributed by Hubismal
Hubismal enabled the music player on Personal AI devices, allowing them to voice their general discontent with humanity through a chiptune synthesizer, as opposed to merely vocalizing it to everyone within earshot.
Chemist job Contributed by Rane
Rane added the Chemist job, with doors and access to match. Now you can be sure that the person running around force-feeding everyone poison is board-certified.
-
Cargo crates & bureaucracy Contributed by ElectroJr
Deciding that Cargo didn’t have enough crates to waste the station’s budget on, ElectroJr gave them the ability to order pizza and handcrafted cigarette parts, while also locking down the cargo console to ensure that no one can stop the cargo techs from flooding disposals with their empty pizza boxes. Cargo also now has access to manifests with each crate, so there’s even a paper trail of how much pizza cargo has ordered.
Map voting Contributed by mirrorcult and moony
With the advent of Packed Station came a need for a way to select a map. Enter the Map Select Vote, which mirrorcult added to allow everyone the pleasure of dying to vacuum on the beta version of Packed Station that had no firelocks… assuming they didn’t die to the numerous plasma fires.
moony later made map choices dependent on server population, ensuring that a 50-player server cannot vote for Knightship.
Contributed by mirrorcult
Mirrorcult overhauled the way metabolism works by splitting up chemicals into categories and having each organ process certain groups of chemicals - this also allows for different species to react to the same chemical in different ways. Regrettably, this means the Head of Personnel can no longer feed Ian entirely with chocolate bars from the vending machines.
Job refactor Contributed by moony
moony changed the way Centcom hands out jobs, retiring the dartboard in HR that was used previously. Each station map now has its own job list based on what the station supports - as an example, Packed Station has a Chaplain slot while Saltern and Knightship do not. This also allows Centcom to have more than one station in space at the same time, with each having its own crew.
Epinephrine and Autoinjectors Contributed by mirrorcult
The starting equipment for everyone on the station has gotten a bit heavier thanks to Mirrorcult, who added epinephrine autoinjectors to the survival box all players start with. These can be used to revive people who have gone into critical health… or to poison people with a highly lethal overdose. Epinephrine has also been added to the list of chemicals Chemistry can make, giving the chemists something new to leave lying around on the floor in pill form.
Bee chemical & Electrocution chemical Contributed by moony
You really can liquefy just about anything - as moony proved by adding in liquid bees and liquid electricity. These shocking new developments can be made in Chemistry with the right equipment and the right ingredients.. but should you?
Acids and Napalm Contributed by mirrorcult
Mirrorcult implemented a bunch of new ways for Chemistry to blow itself up and set everything on fire, including polytrinic acid, napalm, phlogiston and CLF3. Medical will probably want to keep that cloner close by - just not so close that it gets blown up or melted.
Admin logs Contributed by DrSmugleaf
DrSmugleaf added a logging system for admin use, which can track everything from damage to interacting with items. Centcom now knows when that Assistant steals the Head of Security’s shoes, when someone eats all of the Chef’s pizza, and when Security “forgets” to turn their stun baton off combat mode.
Decals Contributed by PaulRitter
Paul also added a system for decals, which are used to make the station’s walls and floors look more visually distinct and are a map designer’s best friend. The first decals to be implemented are crayon drawings, which are now part of the floor rather than an object that sits on top of it.
Technical Update to .NET 6 and C# 10 Contributed by DrSmugleaf and PJB
RobustToolbox and Space Station 14 were updated this month to use .NET 6 and C# 10, the latest release of both standards. While this change mostly affects contributors (who will have to update to a development environment that supports these standards if they haven’t already) it also comes with some small performance boosts out of the box.
Test pooling Contributed by DrSmugleaf
DrSmugleaf pooled a bunch of tests Github uses when testing code contributions, reducing the time they take by 57% to an average of just 90 seconds. For contributors, this means less time taken between each code commit. For players, this instead means that coders can speedrun a patch that fills every inventory slot with banana peels even faster.
RSIEdit Contributed by DrSmugleaf
“It looks like ass” - DrSmugleaf
RSIEdit is a development tool for creating Robust Station Image (RSI) files, which contain all of the sprites used in SS14 - as well as their animation states, rotations, and relevant license information. While it doesn’t support sprite editing, it does allow contributors to directly import sprites from the DMI files used by BYOND to store sprite data.
Automatic client zipping Contributed by 20kdc
20kdc added automatic compression for parts of SS14’s source code, making it easier than ever to host an SS14 fork.
PVS Refactor Contributed by PaulRitter
Paul optimized and cleaned up the code governing the Potentially Visible Set (PVS, for short) system, which dictates what you can see in-game. This ensures that you’ll only see what’s around you, and not the horrible atrocities being committed by the chef behind closed doors.
Credits Contributors Since Last Progress Report 713 commits, authored by:
20kdc, AJCM-git, Acruid, Alex Evgrashin, AndresE55, Antoine Chavasse, Azzy, Clyybber, DrSmugleaf, EFR, Rane, Ephememory, Flipp Syder, FoLoKe, Hoolny, ElectroSr, Matt, Mith-randalf, Moony, Nikita Brancatisano, Pancake, Paul Ritter, Peptide90, Pieter-Jan Briers, ShadowCommander, Spartak, Swept, T-Stalker, TaralGit, TemporalOroboros, TimrodDX, Tomeno, Visne, Daemon, ZorenZal, cheesePizza2, hubismal, iczero, ike709, metalgearsloth, mirrorcult, moonheart08, pointer-to-null, shaeone, wrexbe, xRiriq, Zumorica
Patrons Alex Tempest, Altana, Anthony Fleck, Await Future, Blaise M., Bobberunio, Chase Trotter, Citizen Battle, clyf, CPM311, Daniel Thompson, Darren Brady, Daskata, DramaBuns, Durp, Eric VW, Ethan Keller, Evan Armstrong, Farewell Fire, Florian, Kerb 755, KrystalDisc, Mono, Nicholas Hillblom, Robin Rottstock, S.C., spinnermaster, ThatGuyGW, The Hateful Flesh, Tomeno, Valinov, vifs_vestige, Viridian, Will M., Zandario
\ No newline at end of file
+
Progress Report #29: A Lot To Unpack - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Progress Report #29: A Lot To Unpack Contributed by Timrod Thursday December 9, 2021 Space Station 14 underwent so many changes in November that we had to split them off into a separate progress report. From November 4th to December 4th, the Space Station 14 code base had 357 contributions made - easily beating the two month period covered by Progress Report 28.
This progress report features two new playable maps: Packed Station and Knightship, along with the return of the Chaplain, Chemist, and Warden. Also featured are liquid carpets, liquid bees, milkable cows, and new ways to make shuttles move.
The past month has also been huge for the player base, with thousands of new players being accepted into the Steam playtest each week. The game reached a new peak of over 100 players on at once, and continues to be populated every day.
Maps Packed Station Contributed by Timrod, Solbusaur, 20kdc and Efruit
The station that the /vg/ wiki describes as “Like eating poison ivy” is back! Designed to support SS14’s growing player base, Packed Station is a nearly completely accurate port of the map as seen on /vg/’s SS13 codebase with some new features - like a full Atmos department (codenamed “The Hand of Atmosia”) designed by Solbusaur and an SS14-compliant wiring system by Efruit. 20kdc added support for the Traitor Deathmatch gamemode and filled the hallways with trash. There may be another surprise somewhere - but you’ll have to explore it to find out.
Packed Station supports up to 50 players, and can be voted for once the server is over 15 players. It also supports three returning jobs not seen on Saltern - the Quartermaster, Chaplain, and Warden.
Knightship Contributed by 20kdc
20kdc invoked the 25th-century minimalist movement in creating Knightship, a tiny, efficient ship-style station designed for up to 8 players where most jobs are done by the Heads of Staff - but are they really the head of anything when they’re the only person in their department?
Syndicate Puddle-Jumper Contributed by 20kdc
Having determined that Nanotrasen’s station captains have been lulled into a false sense of security, the Syndicate has launched their first shuttle for carrying heavily-armed nuclear ops teams to the station. Now might not be a bad time to get the Nuclear Authentication Disk back from the Clown…
Content Chemical carpets Contributed by mirrorcult
Mirrorcult proves once again that common sense has no place in a chemistry lab, adding in the ability to grind jumpsuits in a blender in order to create liquid carpet that can be sprayed or dumped onto floors to instantly carpet them. Interior design will never be the same.
Directional Windows Contributed by mirrorcult
Directional Windows (also known as “thindows”) are a core element of most SS13 maps, used to divide rooms without the need for full walls. They’re also the number one source of anxiety among mappers, who live in constant fear that they forgot one somewhere. Thanks to mirrorcult, maps ported from SS13 can feel a little more like SS13.
+Nuke Contributed by Macoron
Macoron added a core element for the Nuclear Emergency game mode: the nuclear bomb. Located in the vault on Packed Station (and in most SS13-derived stations) and in the Nuke Op shuttle, these are capable of destroying the entire station.. provided you didn’t forget the code.
Shuttle thrusters Contributed by metalgearsloth
The space magic that allowed entire stations to fly without any apparent source of propulsion has waned, and metalgearsloth instead added thrusters that can be attached to a station or shuttle to, well… thrust. They can be ordered from cargo and are extremely deadly if you stand on the wrong end.
Animal mechanics Contributed by FoLoKe
FoLoKe reworked animals in SS14, allowing for a lot of basic interactions that didn’t previously exist - such as feeding them or putting them on tables. As a result, you’ll no longer need to ask “Does that monkey have a gun?” because yes, it does. This also allows the vicious and highly lethal space carp to survive their natural habitat.
Cow milking Contributed by FoLoKe
For ages, the Chef has asked a single question: “How do I get milk?” FoLoKe answered that by allowing the Chef (or anyone with a bucket) to milk cows that have been properly fed. The Chef has responded thus far by ignoring the milk entirely and butchering every cow Nanotrasen has sent them.
Shuttle docking Contributed by metalgearsloth
metalgearsloth added a system for shuttle docking using docking airlocks, a vast improvement on the previous docking method of blowing a hole in the station big enough to drive a shuttle into. Any shuttle equipped with one or more docking airlocks will now be able to lock on to the station.
Station Events and Space Kudzu Contributed by moony
Moony re-enabled automatic station events, which have a chance of occurring each round. These range from deadly radiation pulses to the station being hit by meteors.
In an unrelated note, Centcom is reporting that the highly annoying and extremely fast-growing Space Kudzu has once again reappeared in local space. Centcom recommends the use of flame-based weaponry like welders, along with liberal application of the “wide attack” button, to combat this new menace.
Centcom would also like to remind you that “the station is being eaten by a horrible plant” is not on the list of valid reasons for handing out the nuclear codes.
Radiationstorm shader & sfx Contributed by Efruit
It’s a known fact that radiation storms in space do not look like flat green circles, something that Efruit fixed by implementing a new (and much more visually impressive) shader for bursts of radiation, as well as a new set of sound effects to match.
Nettles Contributed by Rane
Since their introduction to Space Station 14, the Botanists have had a difficult time finding ways to cause chaos. Enter the humble nettle plant, which can be used as a weapon to deal toxin damage or ground up into a liquid poison and slipped into a drink for a more subtle approach.
Blockgame ghosts Contributed by Tomeno
Hardcore Nanotrasen Block Game players cheered this month as drop ghosts were added to Nanotrasen Block Game, thanks to Tomeno. Finally, Space Station 14 can be what it was always meant to be: a competitive block dropping puzzle game. What, you thought the atmospheric simulation was the game?
pAis play music Contributed by Hubismal
Hubismal enabled the music player on Personal AI devices, allowing them to voice their general discontent with humanity through a chiptune synthesizer, as opposed to merely vocalizing it to everyone within earshot.
Chemist job Contributed by Rane
Rane added the Chemist job, with doors and access to match. Now you can be sure that the person running around force-feeding everyone poison is board-certified.
+Cargo crates & bureaucracy Contributed by ElectroJr
Deciding that Cargo didn’t have enough crates to waste the station’s budget on, ElectroJr gave them the ability to order pizza and handcrafted cigarette parts, while also locking down the cargo console to ensure that no one can stop the cargo techs from flooding disposals with their empty pizza boxes. Cargo also now has access to manifests with each crate, so there’s even a paper trail of how much pizza cargo has ordered.
Map voting Contributed by mirrorcult and moony
With the advent of Packed Station came a need for a way to select a map. Enter the Map Select Vote, which mirrorcult added to allow everyone the pleasure of dying to vacuum on the beta version of Packed Station that had no firelocks… assuming they didn’t die to the numerous plasma fires.
moony later made map choices dependent on server population, ensuring that a 50-player server cannot vote for Knightship.
Contributed by mirrorcult
Mirrorcult overhauled the way metabolism works by splitting up chemicals into categories and having each organ process certain groups of chemicals - this also allows for different species to react to the same chemical in different ways. Regrettably, this means the Head of Personnel can no longer feed Ian entirely with chocolate bars from the vending machines.
Job refactor Contributed by moony
moony changed the way Centcom hands out jobs, retiring the dartboard in HR that was used previously. Each station map now has its own job list based on what the station supports - as an example, Packed Station has a Chaplain slot while Saltern and Knightship do not. This also allows Centcom to have more than one station in space at the same time, with each having its own crew.
Epinephrine and Autoinjectors Contributed by mirrorcult
The starting equipment for everyone on the station has gotten a bit heavier thanks to Mirrorcult, who added epinephrine autoinjectors to the survival box all players start with. These can be used to revive people who have gone into critical health… or to poison people with a highly lethal overdose. Epinephrine has also been added to the list of chemicals Chemistry can make, giving the chemists something new to leave lying around on the floor in pill form.
Bee chemical & Electrocution chemical Contributed by moony
You really can liquefy just about anything - as moony proved by adding in liquid bees and liquid electricity. These shocking new developments can be made in Chemistry with the right equipment and the right ingredients.. but should you?
Acids and Napalm Contributed by mirrorcult
Mirrorcult implemented a bunch of new ways for Chemistry to blow itself up and set everything on fire, including polytrinic acid, napalm, phlogiston and CLF3. Medical will probably want to keep that cloner close by - just not so close that it gets blown up or melted.
Admin logs Contributed by DrSmugleaf
DrSmugleaf added a logging system for admin use, which can track everything from damage to interacting with items. Centcom now knows when that Assistant steals the Head of Security’s shoes, when someone eats all of the Chef’s pizza, and when Security “forgets” to turn their stun baton off combat mode.
Decals Contributed by PaulRitter
Paul also added a system for decals, which are used to make the station’s walls and floors look more visually distinct and are a map designer’s best friend. The first decals to be implemented are crayon drawings, which are now part of the floor rather than an object that sits on top of it.
Technical Update to .NET 6 and C# 10 Contributed by DrSmugleaf and PJB
RobustToolbox and Space Station 14 were updated this month to use .NET 6 and C# 10, the latest release of both standards. While this change mostly affects contributors (who will have to update to a development environment that supports these standards if they haven’t already) it also comes with some small performance boosts out of the box.
Test pooling Contributed by DrSmugleaf
DrSmugleaf pooled a bunch of tests Github uses when testing code contributions, reducing the time they take by 57% to an average of just 90 seconds. For contributors, this means less time taken between each code commit. For players, this instead means that coders can speedrun a patch that fills every inventory slot with banana peels even faster.
RSIEdit Contributed by DrSmugleaf
“It looks like ass” - DrSmugleaf
RSIEdit is a development tool for creating Robust Station Image (RSI) files, which contain all of the sprites used in SS14 - as well as their animation states, rotations, and relevant license information. While it doesn’t support sprite editing, it does allow contributors to directly import sprites from the DMI files used by BYOND to store sprite data.
Automatic client zipping Contributed by 20kdc
20kdc added automatic compression for parts of SS14’s source code, making it easier than ever to host an SS14 fork.
PVS Refactor Contributed by PaulRitter
Paul optimized and cleaned up the code governing the Potentially Visible Set (PVS, for short) system, which dictates what you can see in-game. This ensures that you’ll only see what’s around you, and not the horrible atrocities being committed by the chef behind closed doors.
Credits Contributors Since Last Progress Report 713 commits, authored by:
20kdc, AJCM-git, Acruid, Alex Evgrashin, AndresE55, Antoine Chavasse, Azzy, Clyybber, DrSmugleaf, EFR, Rane, Ephememory, Flipp Syder, FoLoKe, Hoolny, ElectroSr, Matt, Mith-randalf, Moony, Nikita Brancatisano, Pancake, Paul Ritter, Peptide90, Pieter-Jan Briers, ShadowCommander, Spartak, Swept, T-Stalker, TaralGit, TemporalOroboros, TimrodDX, Tomeno, Visne, Daemon, ZorenZal, cheesePizza2, hubismal, iczero, ike709, metalgearsloth, mirrorcult, moonheart08, pointer-to-null, shaeone, wrexbe, xRiriq, Zumorica
Patrons Alex Tempest, Altana, Anthony Fleck, Await Future, Blaise M., Bobberunio, Chase Trotter, Citizen Battle, clyf, CPM311, Daniel Thompson, Darren Brady, Daskata, DramaBuns, Durp, Eric VW, Ethan Keller, Evan Armstrong, Farewell Fire, Florian, Kerb 755, KrystalDisc, Mono, Nicholas Hillblom, Robin Rottstock, S.C., spinnermaster, ThatGuyGW, The Hateful Flesh, Tomeno, Valinov, vifs_vestige, Viridian, Will M., Zandario
\ No newline at end of file
diff --git a/post/22-01-11-progress-report-30/index.html b/post/22-01-11-progress-report-30/index.html
index be72557..72daacd 100644
--- a/post/22-01-11-progress-report-30/index.html
+++ b/post/22-01-11-progress-report-30/index.html
@@ -1,7 +1,9 @@
-
Progress Report #30: A Short Freeze for Winter - SS14
Progress Report #30: A Short Freeze for Winter Contributed by Timrod Monday January 17, 2022 Even with the winter holidays and a week-long feature freeze, December capped off a busy year for Space Station 14. In 2021, Space Station 14 had 2184 contributions, easily beating the 2020 contribution count of 1498.
Content Featurefreeze December was marked by a week-long feature freeze in order to implement a massive engine change with the goal of increasing long-term performance and cleaning up the engine code.
Christmas-Packedstation Contributed by Timrod
Packed Station got into the holiday spirit this year with a special holiday version featuring trees, presents and snow. It ran from December 24th to December 26th, and will hopefully return next year with all of the new additions made in 2022. In case you weren’t there, the highlights included Atmos getting coal under their tree and Security getting a new toilet.
-
Salvage Contributed by 20kdc, wrexbe, moony and Phantom-Lily
20kdc and wrexbe added the first implementation of the Salvage department, which is currently part of Cargo on both Saltern and Packed Station. Using the salvage magnet located in Cargo, players can grab wreckage to explore - provided they’re quick enough to get in and out before the magnet loses its grip.
moony and Phantom-Lily contributed wrecks for players to explore, including a bombed-out AI satellite and a ruined space bar.
-
Rollerbeds Contributed by Topy and metalgearsloth
Topy and metalgearsloth added three new types of roller beds, which can fold into a carry-able state for easy storage and extend their wheels when a patient is put on them. Medbay personnel now have a much easier time moving all those corpses that keep piling up in their lobby to somewhere that they won’t be as noticeable.
Posters Contributed by ACJM
In another big win for mappers, AJCM added a large variety of posters to cover walls and make the station look slightly less grey. Posters have already been placed on Packed Station and will no doubt be used in maps to come.
Suit Sensor and Crew Monitoring Contributed by Macoron
The crew of Space Station 14 are now able to ignore the CMO complaining about suit sensors at the start of every round, thanks to Macoron adding both the sensors and the crew monitoring console they report to.
Suit sensors exist in most jumpsuits and can be set to broadcast varying amounts of information about the wearer’s health and location to a crew monitoring console, which the doctors in Medbay will probably ignore.
Guardians (Holoparasites) Contributed by metalgearsloth and CrudeWax
metalgearsloth and CrudeWax added Guardians to the list of items available in traitor PDAs. Guardians are holographic entities that reside in their user’s head and can be summoned at will to punch even the most robust of security into submission. Their only weakness lies in the fact that they are you, and you are them - while Guardians are highly resistant to damage, they split any damage they take with their user.
-
Accents Contributed by Pancake
After repeated outbreaks of talking killer monkeys aboard the station, Pancake cracked down by implementing accents that filter chat for anyone playing as an animal. Hopefully, this will also cut down on reports by Atmos technicians of Ian telling them to light Atmos on fire.
Ultravasculine, a New Advanced Antitoxin Contributed by Rane
Rane added Ultravasculine, a chemical made from histamine and plasma that rapidly removes toxin damage at the cost of a small amount of brute damage. Watch out, though: overdoses may prove fatal.
Zipties Contributed by Mithrandalf
Deciding that Security doesn’t already go through enough handcuffs, Mithrandalf added zipties - single-use handcuffs that can be used to secure a prisoner in a brig cell without the prisoner being able to use them against Security. They can be ordered from Cargo.
Kangaroos Contributed by metalgearsloth
metalgearsloth determined that the station didn’t fill its yearly marsupial quota, and added kangaroos to the game - giving the admins yet another animal to fill the station with.
Lighters Contributed by Mithrandalf
Mithrandalf added yet another way for hapless Engineers to “accidentally” light the station on fire by placing lighters in the station’s cigarette vending machines.
Orb Contributed by Pancake
Pancake added an orb for pondering. It can also be used as a puzzle solution in a pinch.
Backgammon Contributed by Fishfish458
Fishfish458 added SS14’s third board game in the form of Backgammon, which joins Chess and Parchis in a new board games crate in Cargo. SS14 can now add “Competitive Backgammon Simulator” to its list of achievements.
T-Ray Scanners Contributed by vulppine
The days of Engineering running up and down the halls prying up floor tiles to figure out why half the station is suddenly unpowered are over, thanks to the handheld T-Ray scanners added by vulppine.
Railings Contributed by StanberyTrask
StanberyTrask added railings, a favorite of both workplace safety enthusiasts and mappers looking for something to fill that 18-tile-wide hallway running through the center of their custom station map. Of course, no amount of railings will ever make certain parts of the station safe…
-
Technical Open Access Hub If you’ve opened SS14’s launcher in the past couple of weeks, you might’ve noticed a bunch of new servers on the server browser. That’s because SS14’s server hub is now open to unofficial servers, including two new Russian-language servers and a multilingual server in the UK. Anyone interested in opening their own server can learn how to do so here:
https://docs.spacestation14.io/en/getting-started/hosting
Mid-Game Prototype Loading Contributed by moony
moony added a way for admins to load new items into the game on the fly, allowing for horrible things like banana peels that create new banana peels any time anyone slips on them or kudzu that spawns monkeys instead of kudzu.
Gamemodes Refactor Contributed by Zumorica
Zumorica overhauled the code for game modes. While there aren’t any immediate changes to the game modes that already exist, this makes it easier to create new ones and allows for a few new functions that didn’t already exist, like creating dynamic game modes.
Conditional Maps Contributed by moony
It’s a well-known fact that all games are legally required to have holiday events, and moony helped ensure Space Station 14’s compliance by adding the ability for the game to load different maps based on certain conditions - such as the winter holiday version of Packed Station that ran from December 24th to December 26th.
Ahelp Relay Contributed by PaulRitter
Paul created a relay that automatically sends admin help requests to Discord, allowing the admin team to read them even when they’re not in game themselves and reducing the amount of times people had to ping the admins on Discord for help.
Credits Contributors Since Last Progress Report 552 commits, authored by: AJCM-git, Acruid, Alex Evgrashin, Bingo Johnson, Caj Jones, Charlese2, CrudeWax, DrSmugleaf, EFR, Fishfish458, Flipp Syder, FoLoKe, Insineer, JustinTime, Júlio César Ueti, Leon Friedrich, Mariner102, Matz05, MeltedPixel, Mith-randalf, Moony, Morbo, Neith, Pancake, Paul Ritter, Peptide90, Pieter-Jan Briers, Rane, ShadowCommander, Schiene, Stanbery Trask, T-Stalker, TaralGit, TemporalOroboros, TimrodDX, Venomii, Vera Aguilera Puerto, Wrexbe, ZorenZal, buletsponge, localcc, metalgearsloth, mirrorcult, pointer-to-null, shaeone, wrexbe, zlodo
Patrons A Yaj, Alex Tempest, Altana, Anthony Fleck, AquaDraco, Austin Nelson, Await Future, Blaise M., Bobberunio, Callum Tubrett, Christoph, Citizen Battle, clyf, Collin R Terrell, Cormos Lemming, CPM311, Daniel Thompson, Darren Brady, Daskata, DramaBuns, Durp, Eric VW, Ethan Keller, Evan Armstrong, Farewell Fire, Florian, Frege Beach, grhmhome, Hydration, Jack Rose, John Edward Hamilton Barchard, Joshington Awesomahee, Kerb 755, KrystalDisc, Miniwoffer, Mono, Nicholas Hillblom, NorthwoodTodd, Robin Rottstock, Ross Hawkins, S.C., Spiffyfishface, spinnermaster, ThatGuyGW, The Hateful Flesh, Tomeno, Valinov, vifs_vestige, Viridian, Voltinho, Will M., Wrexbe, Zandario
\ No newline at end of file
+
Progress Report #30: A Short Freeze for Winter - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Progress Report #30: A Short Freeze for Winter Contributed by Timrod Monday January 17, 2022 Even with the winter holidays and a week-long feature freeze, December capped off a busy year for Space Station 14. In 2021, Space Station 14 had 2184 contributions, easily beating the 2020 contribution count of 1498.
Content Featurefreeze December was marked by a week-long feature freeze in order to implement a massive engine change with the goal of increasing long-term performance and cleaning up the engine code.
Christmas-Packedstation Contributed by Timrod
Packed Station got into the holiday spirit this year with a special holiday version featuring trees, presents and snow. It ran from December 24th to December 26th, and will hopefully return next year with all of the new additions made in 2022. In case you weren’t there, the highlights included Atmos getting coal under their tree and Security getting a new toilet.
+Salvage Contributed by 20kdc, wrexbe, moony and Phantom-Lily
20kdc and wrexbe added the first implementation of the Salvage department, which is currently part of Cargo on both Saltern and Packed Station. Using the salvage magnet located in Cargo, players can grab wreckage to explore - provided they’re quick enough to get in and out before the magnet loses its grip.
moony and Phantom-Lily contributed wrecks for players to explore, including a bombed-out AI satellite and a ruined space bar.
+Rollerbeds Contributed by Topy and metalgearsloth
Topy and metalgearsloth added three new types of roller beds, which can fold into a carry-able state for easy storage and extend their wheels when a patient is put on them. Medbay personnel now have a much easier time moving all those corpses that keep piling up in their lobby to somewhere that they won’t be as noticeable.
Posters Contributed by ACJM
In another big win for mappers, AJCM added a large variety of posters to cover walls and make the station look slightly less grey. Posters have already been placed on Packed Station and will no doubt be used in maps to come.
Suit Sensor and Crew Monitoring Contributed by Macoron
The crew of Space Station 14 are now able to ignore the CMO complaining about suit sensors at the start of every round, thanks to Macoron adding both the sensors and the crew monitoring console they report to.
Suit sensors exist in most jumpsuits and can be set to broadcast varying amounts of information about the wearer’s health and location to a crew monitoring console, which the doctors in Medbay will probably ignore.
Guardians (Holoparasites) Contributed by metalgearsloth and CrudeWax
metalgearsloth and CrudeWax added Guardians to the list of items available in traitor PDAs. Guardians are holographic entities that reside in their user’s head and can be summoned at will to punch even the most robust of security into submission. Their only weakness lies in the fact that they are you, and you are them - while Guardians are highly resistant to damage, they split any damage they take with their user.
+Accents Contributed by Pancake
After repeated outbreaks of talking killer monkeys aboard the station, Pancake cracked down by implementing accents that filter chat for anyone playing as an animal. Hopefully, this will also cut down on reports by Atmos technicians of Ian telling them to light Atmos on fire.
Ultravasculine, a New Advanced Antitoxin Contributed by Rane
Rane added Ultravasculine, a chemical made from histamine and plasma that rapidly removes toxin damage at the cost of a small amount of brute damage. Watch out, though: overdoses may prove fatal.
Zipties Contributed by Mithrandalf
Deciding that Security doesn’t already go through enough handcuffs, Mithrandalf added zipties - single-use handcuffs that can be used to secure a prisoner in a brig cell without the prisoner being able to use them against Security. They can be ordered from Cargo.
Kangaroos Contributed by metalgearsloth
metalgearsloth determined that the station didn’t fill its yearly marsupial quota, and added kangaroos to the game - giving the admins yet another animal to fill the station with.
Lighters Contributed by Mithrandalf
Mithrandalf added yet another way for hapless Engineers to “accidentally” light the station on fire by placing lighters in the station’s cigarette vending machines.
Orb Contributed by Pancake
Pancake added an orb for pondering. It can also be used as a puzzle solution in a pinch.
Backgammon Contributed by Fishfish458
Fishfish458 added SS14’s third board game in the form of Backgammon, which joins Chess and Parchis in a new board games crate in Cargo. SS14 can now add “Competitive Backgammon Simulator” to its list of achievements.
T-Ray Scanners Contributed by vulppine
The days of Engineering running up and down the halls prying up floor tiles to figure out why half the station is suddenly unpowered are over, thanks to the handheld T-Ray scanners added by vulppine.
Railings Contributed by StanberyTrask
StanberyTrask added railings, a favorite of both workplace safety enthusiasts and mappers looking for something to fill that 18-tile-wide hallway running through the center of their custom station map. Of course, no amount of railings will ever make certain parts of the station safe…
+
Technical Open Access Hub If you’ve opened SS14’s launcher in the past couple of weeks, you might’ve noticed a bunch of new servers on the server browser. That’s because SS14’s server hub is now open to unofficial servers, including two new Russian-language servers and a multilingual server in the UK. Anyone interested in opening their own server can learn how to do so here:
https://docs.spacestation14.io/en/getting-started/hosting
Mid-Game Prototype Loading Contributed by moony
moony added a way for admins to load new items into the game on the fly, allowing for horrible things like banana peels that create new banana peels any time anyone slips on them or kudzu that spawns monkeys instead of kudzu.
Gamemodes Refactor Contributed by Zumorica
Zumorica overhauled the code for game modes. While there aren’t any immediate changes to the game modes that already exist, this makes it easier to create new ones and allows for a few new functions that didn’t already exist, like creating dynamic game modes.
Conditional Maps Contributed by moony
It’s a well-known fact that all games are legally required to have holiday events, and moony helped ensure Space Station 14’s compliance by adding the ability for the game to load different maps based on certain conditions - such as the winter holiday version of Packed Station that ran from December 24th to December 26th.
Ahelp Relay Contributed by PaulRitter
Paul created a relay that automatically sends admin help requests to Discord, allowing the admin team to read them even when they’re not in game themselves and reducing the amount of times people had to ping the admins on Discord for help.
Credits Contributors Since Last Progress Report 552 commits, authored by: AJCM-git, Acruid, Alex Evgrashin, Bingo Johnson, Caj Jones, Charlese2, CrudeWax, DrSmugleaf, EFR, Fishfish458, Flipp Syder, FoLoKe, Insineer, JustinTime, Júlio César Ueti, Leon Friedrich, Mariner102, Matz05, MeltedPixel, Mith-randalf, Moony, Morbo, Neith, Pancake, Paul Ritter, Peptide90, Pieter-Jan Briers, Rane, ShadowCommander, Schiene, Stanbery Trask, T-Stalker, TaralGit, TemporalOroboros, TimrodDX, Venomii, Vera Aguilera Puerto, Wrexbe, ZorenZal, buletsponge, localcc, metalgearsloth, mirrorcult, pointer-to-null, shaeone, wrexbe, zlodo
Patrons A Yaj, Alex Tempest, Altana, Anthony Fleck, AquaDraco, Austin Nelson, Await Future, Blaise M., Bobberunio, Callum Tubrett, Christoph, Citizen Battle, clyf, Collin R Terrell, Cormos Lemming, CPM311, Daniel Thompson, Darren Brady, Daskata, DramaBuns, Durp, Eric VW, Ethan Keller, Evan Armstrong, Farewell Fire, Florian, Frege Beach, grhmhome, Hydration, Jack Rose, John Edward Hamilton Barchard, Joshington Awesomahee, Kerb 755, KrystalDisc, Miniwoffer, Mono, Nicholas Hillblom, NorthwoodTodd, Robin Rottstock, Ross Hawkins, S.C., Spiffyfishface, spinnermaster, ThatGuyGW, The Hateful Flesh, Tomeno, Valinov, vifs_vestige, Viridian, Voltinho, Will M., Wrexbe, Zandario
\ No newline at end of file
diff --git a/post/22-03-16-progress-report-31/index.html b/post/22-03-16-progress-report-31/index.html
index 992a2a6..e3eef35 100644
--- a/post/22-03-16-progress-report-31/index.html
+++ b/post/22-03-16-progress-report-31/index.html
@@ -1,3 +1,5 @@
-
Progress Report #31: Duck, Duck, Weh - SS14
Progress Report #31: Duck, Duck, Weh Contributed by ike709 Wednesday March 16, 2022 It’s been a minute since the last Progress Report, and there’s been so many changes that we had to break this one up into two parts! This part covers January 2022.
Content Two-Parter There’s been a long list of contributions since the last progress report, so this edition just covers January 2022. The February 2022 edition will follow in a week or so.
Game Wiki Space Station 14 now has a wiki ! It’s a one-stop shop for everything you need to know in order to get that greentext, and anyone with a Space Station 14 account is able to contribute.
Automated Wiki Pages Contributed by moony and weaversam8
What good is a wiki if everything is outdated? Thanks to the hard work of these contributors, the groundwork has been laid for automatically updating wiki pages whenever changes are made to the game!
The Guide to Chemistry already implements this new system and will auto-update whenever reagents or recipes are changed/added/removed.
Species Contributed by moony
Moony has added support for a variety of new playable species, selectable from the character editor.
SS14 currently includes the following non-human races:
Slimepeople - One of xenobiology’s greatest accomplishments. Dwarves - Rock and stone! Lizards - Everyone’s favorite SS13 janitor has made the jump to SS14. Not currently selectable until they’re fully finished. The options, mechanics, and roundstart availability are all subject to change.
Checkers Contributed by Capnsockless
Capnsockless has added checkers to SS14’s ever-expanding list of board games, so be sure to swing by Cargo and ask nicely for a board game crate!
Xenoarchaeology Artifacts Contributed by Macoron
To spice things up on salvage maps, Macoron has added xenoarchaeology artifacts inspired by Baystation. These artifacts have random effects that you need to figure out how to activate. Seek fortune and glory, or blow yourself up trying.
Rootbeer, Ice Cream, & Rootbeer Floats Contributed by Plasmaguy
Nanotrasen has decided to reward its hardworking employees with a special treat! Swing by the bar for some newly stocked 100% Real Icecream* or a rootbeer float made with the highest quality rootbeer available (on the station)!
*Real Icecream™ is a registered trademark of Nanotrasen Inc. Individuals who have suffered a heart attack or have heart disease should not consume Real Icecream™
Lawyer & Librarian Contributed by Peptide90
A foul evil has been detected aboard Space Station 14, it must be stopped before— Oh wait, it’s just the lawyer. Better refresh yourselves on Space Law.
You can now also find the librarian hiding amongst the station’s repository of knowledge and low-quality smut.
Weh! Contributed by DogZeroX
Weh!
Energy Swords Contributed by Mirino97
Swish, swish, stab. It’s a sword, dude, not a fighter jet.
Duck! Contributed by Daemon and Mithrandalf
The animal, not the act of ducking. Cargo can now order a whole crate full of ducks, just make sure you keep them away from the chef.
Mass Scanner Contributed by moony and mirrorcult
Space Station 14 supports multiple maps/stations/ships floating around through space, so the mass scanner has been added to detect anything in nearby space. This will mainly be useful for future gamemodes (ship vs. ship, anyone?).
Fire Extinguisher Refactor Contributed by mirrorcult
Fire extinguishes have been refactored and they can now spray people properly with any reagent, or be refilled from any reagent container.
Watch out for homemade flamethrowers!
Misc. Changes Glass tables can now shatter. Contributed by mirrorcult Players now move slower. Contributed by the maintainer team Disposals pipes can now be constructed. Contributed by DubiousDoggo Uplinks can now buy Syndicate Smokes. Contributed by Rane Technical Multi-grid Stations & Multi-station Maps Contributed by mirrorcult
Space Station 14 now supports having multiple stations or stations comprised of multiple grids. Gamemodes can also specify what number and combination of maps to load, opening the door for interesting new gamemodes like Station Versus Station.
Server Whitelist Contributed by mirrorcult
Server hosts can now enable a whitelist using the whitelist.enabled
cvar. Only players added with the command whitelistadd <username>
will be able to join, and they can be removed with whitelistremove <username>
.
If you want to enable it mid-round, you can use the kicknonwhitelisted
command to give every unwanted player the boot.
Map Renderer Contributed by DrSmugleaf, moony, and mirrorcult
Content.MapRenderer
has been added as a new project that can take a map file and render it as an image. It’s extremely useful for development, updating the wiki, and more.
Credits Contributors Since Last Progress Report 354 commits, authored by: metalgearsloth, Peptide90, Rane, Pancake, ShadowCommander, Moony, Lamrr, mirrorcult, wrexbe, Pieter-Jan Briers, Vera Aguilera Puerto, LittleBuilderJane, Alex Evgrashin, Michael Phillips, Morbo, Sam Weaver, Daemon, Delete69, ElectroJr, DubiousDoggo, Júlio César Ueti, Paul, ScalyChimp, BubblegumBlue, Charlese2, DrSmugleaf, E F R, Fishfish458, T-Stalker, Zymem, Aaron Mell, Acruid, Clyybber, Demetre Beroshvili, Flipp Syder, Julian Giebel, JustinTime, Matz05, Neith, Plasmaguy, TaralGit, Willhelm53, WlarusFromDaSpace, Ygg01, bloodrizer, keronshb, pointer-to-null, router, sewerpig
Patrons Phillip Inman, Zakanater 19, Jex N, Peter “Azmond” Newhouse, Seija, Tom Cruize, Corpus Inc., Hamcha, Oxyclean114, JustanAnus, NorthwoodTodd, Collin R Terrell, Cormos Lemming, grhmhome, Spiffyfishface, Callum Tubrett, Hydration, John Edward Hamilton Barchard, Wrexbe, Frege Beach, Austin Nelson, AquaDraco, Miniwoffer, hh, Nicholas Hillblom, Florian, Viridian, Daskata, Blaise M., Jack Rose, The Hateful Flesh, Will M., spinnermaster, Koyki, Valinov, Dan Griskardian, Robin Rottstock, Altana, Durp, Joshington Awesomahee, Eric VW, Evan Armstrong, Mono, Ethan Keller, DramaBuns, KrystalDisc, Darren Brady, Zandario, Anthony Fleck, vifs_vestige, Bobberunio, CPM311, ThatGuyGW, Farewell Fire, Daniel Thompson, Tomeno
\ No newline at end of file
+
Progress Report #31: Duck, Duck, Weh - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Progress Report #31: Duck, Duck, Weh Contributed by ike709 Wednesday March 16, 2022 It’s been a minute since the last Progress Report, and there’s been so many changes that we had to break this one up into two parts! This part covers January 2022.
Content Two-Parter There’s been a long list of contributions since the last progress report, so this edition just covers January 2022. The February 2022 edition will follow in a week or so.
Game Wiki Space Station 14 now has a wiki ! It’s a one-stop shop for everything you need to know in order to get that greentext, and anyone with a Space Station 14 account is able to contribute.
Automated Wiki Pages Contributed by moony and weaversam8
What good is a wiki if everything is outdated? Thanks to the hard work of these contributors, the groundwork has been laid for automatically updating wiki pages whenever changes are made to the game!
The Guide to Chemistry already implements this new system and will auto-update whenever reagents or recipes are changed/added/removed.
Species Contributed by moony
Moony has added support for a variety of new playable species, selectable from the character editor.
SS14 currently includes the following non-human races:
Slimepeople - One of xenobiology’s greatest accomplishments. Dwarves - Rock and stone! Lizards - Everyone’s favorite SS13 janitor has made the jump to SS14. Not currently selectable until they’re fully finished. The options, mechanics, and roundstart availability are all subject to change.
Checkers Contributed by Capnsockless
Capnsockless has added checkers to SS14’s ever-expanding list of board games, so be sure to swing by Cargo and ask nicely for a board game crate!
Xenoarchaeology Artifacts Contributed by Macoron
To spice things up on salvage maps, Macoron has added xenoarchaeology artifacts inspired by Baystation. These artifacts have random effects that you need to figure out how to activate. Seek fortune and glory, or blow yourself up trying.
Rootbeer, Ice Cream, & Rootbeer Floats Contributed by Plasmaguy
Nanotrasen has decided to reward its hardworking employees with a special treat! Swing by the bar for some newly stocked 100% Real Icecream* or a rootbeer float made with the highest quality rootbeer available (on the station)!
*Real Icecream™ is a registered trademark of Nanotrasen Inc. Individuals who have suffered a heart attack or have heart disease should not consume Real Icecream™
Lawyer & Librarian Contributed by Peptide90
A foul evil has been detected aboard Space Station 14, it must be stopped before— Oh wait, it’s just the lawyer. Better refresh yourselves on Space Law.
You can now also find the librarian hiding amongst the station’s repository of knowledge and low-quality smut.
Weh! Contributed by DogZeroX
Weh!
Energy Swords Contributed by Mirino97
Swish, swish, stab. It’s a sword, dude, not a fighter jet.
Duck! Contributed by Daemon and Mithrandalf
The animal, not the act of ducking. Cargo can now order a whole crate full of ducks, just make sure you keep them away from the chef.
Mass Scanner Contributed by moony and mirrorcult
Space Station 14 supports multiple maps/stations/ships floating around through space, so the mass scanner has been added to detect anything in nearby space. This will mainly be useful for future gamemodes (ship vs. ship, anyone?).
Fire Extinguisher Refactor Contributed by mirrorcult
Fire extinguishes have been refactored and they can now spray people properly with any reagent, or be refilled from any reagent container.
Watch out for homemade flamethrowers!
Misc. Changes Glass tables can now shatter. Contributed by mirrorcult Players now move slower. Contributed by the maintainer team Disposals pipes can now be constructed. Contributed by DubiousDoggo Uplinks can now buy Syndicate Smokes. Contributed by Rane Technical Multi-grid Stations & Multi-station Maps Contributed by mirrorcult
Space Station 14 now supports having multiple stations or stations comprised of multiple grids. Gamemodes can also specify what number and combination of maps to load, opening the door for interesting new gamemodes like Station Versus Station.
Server Whitelist Contributed by mirrorcult
Server hosts can now enable a whitelist using the whitelist.enabled
cvar. Only players added with the command whitelistadd <username>
will be able to join, and they can be removed with whitelistremove <username>
.
If you want to enable it mid-round, you can use the kicknonwhitelisted
command to give every unwanted player the boot.
Map Renderer Contributed by DrSmugleaf, moony, and mirrorcult
Content.MapRenderer
has been added as a new project that can take a map file and render it as an image. It’s extremely useful for development, updating the wiki, and more.
Credits Contributors Since Last Progress Report 354 commits, authored by: metalgearsloth, Peptide90, Rane, Pancake, ShadowCommander, Moony, Lamrr, mirrorcult, wrexbe, Pieter-Jan Briers, Vera Aguilera Puerto, LittleBuilderJane, Alex Evgrashin, Michael Phillips, Morbo, Sam Weaver, Daemon, Delete69, ElectroJr, DubiousDoggo, Júlio César Ueti, Paul, ScalyChimp, BubblegumBlue, Charlese2, DrSmugleaf, E F R, Fishfish458, T-Stalker, Zymem, Aaron Mell, Acruid, Clyybber, Demetre Beroshvili, Flipp Syder, Julian Giebel, JustinTime, Matz05, Neith, Plasmaguy, TaralGit, Willhelm53, WlarusFromDaSpace, Ygg01, bloodrizer, keronshb, pointer-to-null, router, sewerpig
Patrons Phillip Inman, Zakanater 19, Jex N, Peter “Azmond” Newhouse, Seija, Tom Cruize, Corpus Inc., Hamcha, Oxyclean114, JustanAnus, NorthwoodTodd, Collin R Terrell, Cormos Lemming, grhmhome, Spiffyfishface, Callum Tubrett, Hydration, John Edward Hamilton Barchard, Wrexbe, Frege Beach, Austin Nelson, AquaDraco, Miniwoffer, hh, Nicholas Hillblom, Florian, Viridian, Daskata, Blaise M., Jack Rose, The Hateful Flesh, Will M., spinnermaster, Koyki, Valinov, Dan Griskardian, Robin Rottstock, Altana, Durp, Joshington Awesomahee, Eric VW, Evan Armstrong, Mono, Ethan Keller, DramaBuns, KrystalDisc, Darren Brady, Zandario, Anthony Fleck, vifs_vestige, Bobberunio, CPM311, ThatGuyGW, Farewell Fire, Daniel Thompson, Tomeno
\ No newline at end of file
diff --git a/post/22-04-01-progress-report-32/index.html b/post/22-04-01-progress-report-32/index.html
index 21e13cf..d390803 100644
--- a/post/22-04-01-progress-report-32/index.html
+++ b/post/22-04-01-progress-report-32/index.html
@@ -1,3 +1,5 @@
-
Progress Report #32: Geoff - SS14
Progress Report #32: Geoff Contributed by DrSmugleaf, ike709, & Timrod Friday April 1, 2022 As promised in the last progress report, here’s the second half of our two-part special! This part covers February 2022.
New Maps This progress report sees the addition of not one, not two, but three entirely new maps:
Bagel Station by Emisse Moose Station by Emisse NSS Pillar by Peptide90 Bagel Station Contributed by Emisse
Eagle-eyed readers might notice that we teased this map in the last Progress Report. Bagel is a comfy midpop station.
Moose Station Contributed by Emisse
Moose Station is a low population station smaller than Packed but a bit larger than Saltern. Set on an asteroid base, this station is dingy and dirty.
NSS Pillar Contributed by Peptide90
NSS Pillar goes for a wide and thin station rather than something sprawling with arms. It supports a mid/large population.
Content Two-Parter In case you missed the previous progress report , this is the second part of a two-part special to bring the progress reports up-to-date with the laundry list of changes recently. This progress report covers February 2022.
Drones & Drone Hats Contributed by Rane and mirrorcult
Rane added yet another workplace hazard in the form of drones, a new ghost role that spawns with a variety of tools and materials for construction. Drones can maintain or create as they please - provided they don’t violate their one rule of not interfering with station personnel.
mirrorcult later added the ability for drones to wear hats, paving the way for Space Station 14 to become the premier space-themed hat simulator.
Beautiful Botany Buffs Contributed by Rane
Rane has added several new plants for aspiring Botanists: poppies, aloe, lingzhi, ambrosia vulgaris, galaxythistle, and fly amanita. All of them have various medicinal or chemical effects.
Additionally, most healthy foods now contain some vitamins and/or protein, which can heal you slightly.
Blood & Bleeding Contributed by mirrorcult and Rane
During recent medical examinations, Central Command determined an alarming fact: the average spaceman did not, in fact, have blood and were instead running on a combination of grain alcohol and Space-Up™.
mirrorcult has rectified this problem by restoring the crew’s blood, which will now flow copiously when taking brute damage and can lead to further damage from blood loss. Rane also applied this to xenos and drones, who will bleed acid and oil respectively.
Butchering Improvements Contributed by mirrorcult
The Chef and other psychopaths can now butcher small animals using only a knife or other sharp object, and to make matters worse whenever a mob is gibbed it will now spill all of its blood and other reagents all over the floor.
Role Bans Contributed by ShadowCommander
Naughty clowns and grossly incompetent heads of staff can now face the consequences of their actions; role bans have been added. For the unaware, role bans are like regular server bans but they only ban you from playing as a particular station job. Think about that the next time you let everyone loot the armory!
Possums, Raccoons, & Ferrets Contributed by Willhelm53
Possums, ferrets, and trash pandas have been smuggled to SS14 from Goonstation. The Janitor’s new best friends are even pettable, though some of them may enjoy it more than others…
Microwave Rework Contributed by mirrorcult
Wzhzhzh
Fun fact, that onomatopoeia is the name of the bit of code in both SS13 and SS14 that handles microwaving things. Speaking of microwaving things, the microwave has been refactored and now has several new interactions:
Microwaves now actually heat entities and their reagent solutions. Ramen now needs to be properly heated in a microwave. Don’t put anything metal or plastic in the microwave. DON’T PUT BATTERIES IN THE MICROWAVE. Another fun thing for you to discover on your own.
Emags Contributed by Rane
Rane added the favorite tool of every traitor and nuclear operative in space: the Cryptographic Sequencer, also known as an Electromagnetic Card (or “Emag”). This tool permanently breaks open any lock it is used on, and may have some… interesting effects when applied to other machines and equipment. Find them at your nearest Syndicate uplink today!
Ghost Orbiting Contributed by mirrorcult
Ghosts can now orbit things that they find interesting, and whenever that thing moves the ghosts will move with it. Spend the rest of the round haunting your killer, or the clown that stole your shoes.
Examine Enhancements Contributed by mirrorcult
mirrorcult has really spruced up examining things. Different information can now be categorized, for example if you examine a wire you can now get a detailed breakdown of the powernet by selecting the Power category. These categories also have buttons that you can directly click from object tooltips, so you can skip going through the right-click menus.
More Station Events Contributed by moony
Two new station events have been added by moony: SS13’s classic vent clog event, and a breaker flip event which turns off a few random APCs. Engineers will have a little more work to do keeping the station running smoothly.
Portable Flashers Contributed by scaly-chimp
Security can now troll the crew lock down an area by deploying a portable flasher. Powergamers had better find some sunglasses!
Syndicate Mothership Contributed by LittleBuilderJane
The first version of a Syndicate ship has been added by LittleBuilderJane. The Syndicate Mothership will be a staging point for fluke ops elite Nuclear Operatives sometime soon™.
More Xenoarchaeology Effects Contributed by Macoron
The last progress report introduced us to the new xenoarchaeology artifacts, and now Macoron has gone and added even more potential effects. The new artifact effects include changing the area’s temperature, emitting radiation pulses, and creating a random gas. Be careful!
Musician Contributed by HoofedEar
A new job has been added which isn’t typically found on Space Station 13: The Musician. The Musician is a new civilian job that spawns with a few instruments to bring entertainment to the crew and showcase SS14’s superior musical capabilities.
Respiration Rework Contributed by mirrorcult
Deep breaths everyone, respiration has been completely refactored. Harmful gasses are now harmful to breathe, inhaled gasses are now converted to their respective reagents and metabolized, and it now takes you a moment to fully recover from suffocating. The refactor also improves the code quality and lays the groundwork for more medical changes to come.
Door Remotes Contributed by WlarusFromDaSpace
Have you ever wanted to open the Armory when all you meant to do was change the TV channel? Well with the new door remotes, now you can! Door remotes come in several flavors, and Heads of Staff can find the one for their department in their locker. Don’t leave that thing lying around.
Slimeperson Tweaks Contributed by mirrorcult
Slimepeople have had some changes to further differentiate them from humans. Here’s the highlights:
Slimepeople no longer breathe, but take extra pressure damage. Slimepeople are hurt by water, but acids are fine. Slimepeople are now resistant to poison and blunt damage, but weak to slashing, piercing, and cold damage. Stationstation Salvage Contributed by metalgearsloth
Stationstation, which the oldest community members may recall, was the original map for testing Space Station 14. It now makes a glorious return as a salvage map, enabling you to smash some SS14 history into pieces and harvest it for valuable resources. I’m sure there’s a metaphor for capitalism somewhere in that statement, now get back to work!
Misc. Changes Atmos pipes are placeable. Contributed by DubiousDoggo Fixed small amounts of liquid making massive spills. Contributed by Ygg01 PDAs now have ringtones, which you can customize. Contributed by TheDarkElites March 9th is now celebrated. Contrbuted by mirrorcult Added cup ramen. Contributed by Fishfish458 Animals and holoparasites are now pettable. Contributed by Willhelm53 Circuit boards are now made in the new Circuit Imprinter. Contributed by Rane Admins can now freeze players. Contributed by mirrorcult Technical Actions Rework & Mapping Actions Contributed by ElectroSR
ElectroSR really did a number on how actions work internally. It’s hard to really show that to you, dear reader, but he followed it up with the ability to add mapping shortcuts to the actions hotbar, which is certainly going to make life a lot easier for mappers. There’s even a preset of useful actions, available via the /loadmapacts
command.
Decal Placer Contributed by mirrorcult
Mappers now have another new tool in their arsenal, the Decal Placer. It’s a handy little menu for adding tile decals with the ability to easily change the color, rotation, and whether or not the decal can be cleaned up.
PVS Refactor Contributed by Paul
We have managed to hit 110 players in a live round without any server slowdown, thanks in large part to recent performance improvements in how we send game states to the client. Our goal is to be able to reach 300 players on a large station without any lag!
This system is also in charge of only sending nearby entities to each player in order to avoid cheating; said entities are collectively known as the player’s Potentially Visible Set or PVS for short.
Credits Contributors Since Last Progress Report 667 commits, authored by: Acruid, AJCM-git, BasedUser, Delete69, DogZeroX, DubiousDoggo, ElectroSR, Rane, elthundercloud, Emisse, Ephememory, Fishfish458, HoofedEar, hubismal, ike709, lajolico, Lamrr, LittleBuilderJane, Macoron, MaxNox7, metalgearsloth, mirrorcult, Mith-randalf, moony, Morb0, Pangogie, PaulRitter, Peptide90, PJB3005, scaly-chimp, SethLafuente, ShadowCommander, SplinterGP, SweptWasTaken, TheDarkElites, TimrodDX, UristMcContributor, Veritius, weaversam8, Willhelm53, WlarusFromDaSpace, wrexbe, Ygg01, Zumorica, Zymem
Patrons Phillip Inman, Zakanater 19, Jex N, Peter “Azmond” Newhouse, Seija, Tom Cruize, Corpus Inc., Hamcha, Oxyclean114, JustanAnus, NorthwoodTodd, Collin R Terrell, Cormos Lemming, grhmhome, Spiffyfishface, Callum Tubrett, Hydration, John Edward Hamilton Barchard, Wrexbe, Frege Beach, Austin Nelson, AquaDraco, Miniwoffer, hh, Nicholas Hillblom, Florian, Viridian, Daskata, Blaise M., Jack Rose, The Hateful Flesh, Will M., spinnermaster, Koyki, Valinov, Dan Griskardian, Robin Rottstock, Altana, Durp, Joshington Awesomahee, Eric VW, Evan Armstrong, Mono, Ethan Keller, DramaBuns, KrystalDisc, Darren Brady, Zandario, Anthony Fleck, vifs_vestige, Bobberunio, CPM311, ThatGuyGW, Farewell Fire, Daniel Thompson, Tomeno
\ No newline at end of file
+
Progress Report #32: Geoff - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Progress Report #32: Geoff Contributed by DrSmugleaf, ike709, & Timrod Friday April 1, 2022 As promised in the last progress report, here’s the second half of our two-part special! This part covers February 2022.
New Maps This progress report sees the addition of not one, not two, but three entirely new maps:
Bagel Station by Emisse Moose Station by Emisse NSS Pillar by Peptide90 Bagel Station Contributed by Emisse
Eagle-eyed readers might notice that we teased this map in the last Progress Report. Bagel is a comfy midpop station.
Moose Station Contributed by Emisse
Moose Station is a low population station smaller than Packed but a bit larger than Saltern. Set on an asteroid base, this station is dingy and dirty.
NSS Pillar Contributed by Peptide90
NSS Pillar goes for a wide and thin station rather than something sprawling with arms. It supports a mid/large population.
Content Two-Parter In case you missed the previous progress report , this is the second part of a two-part special to bring the progress reports up-to-date with the laundry list of changes recently. This progress report covers February 2022.
Drones & Drone Hats Contributed by Rane and mirrorcult
Rane added yet another workplace hazard in the form of drones, a new ghost role that spawns with a variety of tools and materials for construction. Drones can maintain or create as they please - provided they don’t violate their one rule of not interfering with station personnel.
mirrorcult later added the ability for drones to wear hats, paving the way for Space Station 14 to become the premier space-themed hat simulator.
Beautiful Botany Buffs Contributed by Rane
Rane has added several new plants for aspiring Botanists: poppies, aloe, lingzhi, ambrosia vulgaris, galaxythistle, and fly amanita. All of them have various medicinal or chemical effects.
Additionally, most healthy foods now contain some vitamins and/or protein, which can heal you slightly.
Blood & Bleeding Contributed by mirrorcult and Rane
During recent medical examinations, Central Command determined an alarming fact: the average spaceman did not, in fact, have blood and were instead running on a combination of grain alcohol and Space-Up™.
mirrorcult has rectified this problem by restoring the crew’s blood, which will now flow copiously when taking brute damage and can lead to further damage from blood loss. Rane also applied this to xenos and drones, who will bleed acid and oil respectively.
Butchering Improvements Contributed by mirrorcult
The Chef and other psychopaths can now butcher small animals using only a knife or other sharp object, and to make matters worse whenever a mob is gibbed it will now spill all of its blood and other reagents all over the floor.
Role Bans Contributed by ShadowCommander
Naughty clowns and grossly incompetent heads of staff can now face the consequences of their actions; role bans have been added. For the unaware, role bans are like regular server bans but they only ban you from playing as a particular station job. Think about that the next time you let everyone loot the armory!
Possums, Raccoons, & Ferrets Contributed by Willhelm53
Possums, ferrets, and trash pandas have been smuggled to SS14 from Goonstation. The Janitor’s new best friends are even pettable, though some of them may enjoy it more than others…
Microwave Rework Contributed by mirrorcult
Wzhzhzh
Fun fact, that onomatopoeia is the name of the bit of code in both SS13 and SS14 that handles microwaving things. Speaking of microwaving things, the microwave has been refactored and now has several new interactions:
Microwaves now actually heat entities and their reagent solutions. Ramen now needs to be properly heated in a microwave. Don’t put anything metal or plastic in the microwave. DON’T PUT BATTERIES IN THE MICROWAVE. Another fun thing for you to discover on your own.
Emags Contributed by Rane
Rane added the favorite tool of every traitor and nuclear operative in space: the Cryptographic Sequencer, also known as an Electromagnetic Card (or “Emag”). This tool permanently breaks open any lock it is used on, and may have some… interesting effects when applied to other machines and equipment. Find them at your nearest Syndicate uplink today!
Ghost Orbiting Contributed by mirrorcult
Ghosts can now orbit things that they find interesting, and whenever that thing moves the ghosts will move with it. Spend the rest of the round haunting your killer, or the clown that stole your shoes.
Examine Enhancements Contributed by mirrorcult
mirrorcult has really spruced up examining things. Different information can now be categorized, for example if you examine a wire you can now get a detailed breakdown of the powernet by selecting the Power category. These categories also have buttons that you can directly click from object tooltips, so you can skip going through the right-click menus.
More Station Events Contributed by moony
Two new station events have been added by moony: SS13’s classic vent clog event, and a breaker flip event which turns off a few random APCs. Engineers will have a little more work to do keeping the station running smoothly.
Portable Flashers Contributed by scaly-chimp
Security can now troll the crew lock down an area by deploying a portable flasher. Powergamers had better find some sunglasses!
Syndicate Mothership Contributed by LittleBuilderJane
The first version of a Syndicate ship has been added by LittleBuilderJane. The Syndicate Mothership will be a staging point for fluke ops elite Nuclear Operatives sometime soon™.
More Xenoarchaeology Effects Contributed by Macoron
The last progress report introduced us to the new xenoarchaeology artifacts, and now Macoron has gone and added even more potential effects. The new artifact effects include changing the area’s temperature, emitting radiation pulses, and creating a random gas. Be careful!
Musician Contributed by HoofedEar
A new job has been added which isn’t typically found on Space Station 13: The Musician. The Musician is a new civilian job that spawns with a few instruments to bring entertainment to the crew and showcase SS14’s superior musical capabilities.
Respiration Rework Contributed by mirrorcult
Deep breaths everyone, respiration has been completely refactored. Harmful gasses are now harmful to breathe, inhaled gasses are now converted to their respective reagents and metabolized, and it now takes you a moment to fully recover from suffocating. The refactor also improves the code quality and lays the groundwork for more medical changes to come.
Door Remotes Contributed by WlarusFromDaSpace
Have you ever wanted to open the Armory when all you meant to do was change the TV channel? Well with the new door remotes, now you can! Door remotes come in several flavors, and Heads of Staff can find the one for their department in their locker. Don’t leave that thing lying around.
Slimeperson Tweaks Contributed by mirrorcult
Slimepeople have had some changes to further differentiate them from humans. Here’s the highlights:
Slimepeople no longer breathe, but take extra pressure damage. Slimepeople are hurt by water, but acids are fine. Slimepeople are now resistant to poison and blunt damage, but weak to slashing, piercing, and cold damage. Stationstation Salvage Contributed by metalgearsloth
Stationstation, which the oldest community members may recall, was the original map for testing Space Station 14. It now makes a glorious return as a salvage map, enabling you to smash some SS14 history into pieces and harvest it for valuable resources. I’m sure there’s a metaphor for capitalism somewhere in that statement, now get back to work!
Misc. Changes Atmos pipes are placeable. Contributed by DubiousDoggo Fixed small amounts of liquid making massive spills. Contributed by Ygg01 PDAs now have ringtones, which you can customize. Contributed by TheDarkElites March 9th is now celebrated. Contrbuted by mirrorcult Added cup ramen. Contributed by Fishfish458 Animals and holoparasites are now pettable. Contributed by Willhelm53 Circuit boards are now made in the new Circuit Imprinter. Contributed by Rane Admins can now freeze players. Contributed by mirrorcult Technical Actions Rework & Mapping Actions Contributed by ElectroSR
ElectroSR really did a number on how actions work internally. It’s hard to really show that to you, dear reader, but he followed it up with the ability to add mapping shortcuts to the actions hotbar, which is certainly going to make life a lot easier for mappers. There’s even a preset of useful actions, available via the /loadmapacts
command.
Decal Placer Contributed by mirrorcult
Mappers now have another new tool in their arsenal, the Decal Placer. It’s a handy little menu for adding tile decals with the ability to easily change the color, rotation, and whether or not the decal can be cleaned up.
PVS Refactor Contributed by Paul
We have managed to hit 110 players in a live round without any server slowdown, thanks in large part to recent performance improvements in how we send game states to the client. Our goal is to be able to reach 300 players on a large station without any lag!
This system is also in charge of only sending nearby entities to each player in order to avoid cheating; said entities are collectively known as the player’s Potentially Visible Set or PVS for short.
Credits Contributors Since Last Progress Report 667 commits, authored by: Acruid, AJCM-git, BasedUser, Delete69, DogZeroX, DubiousDoggo, ElectroSR, Rane, elthundercloud, Emisse, Ephememory, Fishfish458, HoofedEar, hubismal, ike709, lajolico, Lamrr, LittleBuilderJane, Macoron, MaxNox7, metalgearsloth, mirrorcult, Mith-randalf, moony, Morb0, Pangogie, PaulRitter, Peptide90, PJB3005, scaly-chimp, SethLafuente, ShadowCommander, SplinterGP, SweptWasTaken, TheDarkElites, TimrodDX, UristMcContributor, Veritius, weaversam8, Willhelm53, WlarusFromDaSpace, wrexbe, Ygg01, Zumorica, Zymem
Patrons Phillip Inman, Zakanater 19, Jex N, Peter “Azmond” Newhouse, Seija, Tom Cruize, Corpus Inc., Hamcha, Oxyclean114, JustanAnus, NorthwoodTodd, Collin R Terrell, Cormos Lemming, grhmhome, Spiffyfishface, Callum Tubrett, Hydration, John Edward Hamilton Barchard, Wrexbe, Frege Beach, Austin Nelson, AquaDraco, Miniwoffer, hh, Nicholas Hillblom, Florian, Viridian, Daskata, Blaise M., Jack Rose, The Hateful Flesh, Will M., spinnermaster, Koyki, Valinov, Dan Griskardian, Robin Rottstock, Altana, Durp, Joshington Awesomahee, Eric VW, Evan Armstrong, Mono, Ethan Keller, DramaBuns, KrystalDisc, Darren Brady, Zandario, Anthony Fleck, vifs_vestige, Bobberunio, CPM311, ThatGuyGW, Farewell Fire, Daniel Thompson, Tomeno
\ No newline at end of file
diff --git a/post/22-04-30-progress-report-33/index.html b/post/22-04-30-progress-report-33/index.html
index 20e571e..16e418c 100644
--- a/post/22-04-30-progress-report-33/index.html
+++ b/post/22-04-30-progress-report-33/index.html
@@ -1,3 +1,5 @@
-
Progress Report #33: Delta Variant - SS14
Progress Report #33: Delta Variant Contributed by DrSmugleaf, ike709, and Timrod Saturday April 30, 2022 There’s so many changes we couldn’t figure out how to cover them all!
Progress Report Tweaks We’ve had a hell of time trying to figure out what to do about the huge number of features, fixes, and tweaks that happened in March. As a result we’re going to be experimenting with some formatting changes over the course of the next few Progress Reports to determine the best way of presenting the large quantity of information.
Content April Stress Test On April 9th we hosted a stress test with as many players as possible to see how well the server could handle it, peaking at 250 players! Normally April events would go in the April progress report, but we’re including it here while it’s hopefully still fresh in all of the participants' minds.
Space Station 14 was able to run with 200 players without any server slowdown. The stress test peaked at ~250 players and we predict that it could have surpassed ~350 without slowdown. However, although the server can handle it, we noticed some networking issues that can cause rubberbanding with this many players. The probable cause has been identified and efforts to fix it are underway.
For a highlight reel of the chaos caused by 250 players, you can watch the YouTube video here .
See here for a more technical breakdown of performance There are two parts to how the game processes things: A unit of time called a “tick” during which the game simulates everything, and the “ticks per second (TPS)” which is the rate at which ticks occur. For example, 30 TPS means that one second is divided into 30 ticks of equal length and the game will attempt to update 30 times per second. More ticks per second means less time for each tick, and if the game isn’t finished running the code by the time the tick ends then the game will lag. On the flip side, a higher TPS means the game will feel more responsive. Choosing the right TPS is a balancing act, and the upper limit mainly depends on how performant the game is.
Space Station 14 was able to run at our usual 30 TPS with over 200 players largely without issue. After lowering it to 20 TPS, which is what most SS13 servers use, the stress test peaked at ~250 players and continued to perform fine (aka everything was able to run during the allotted ticks).
tl;dr SS14 can definitely handle over 250 players and can probably handle over 350 players before the server starts to lag. Unless you do something wild like give everyone mechs with rocket launchers. Not too shabby, in my opinion.
Explosion Refactor Contributed by ElectroSR
Explosions have been completely refactored to be more visually and technically impressive. There’s also a new UI for admins to create explosions and it comes with a very fancy preview of what will be annihilated.
Modular Grenades Contributed by ElectroSR and Fortune117
Fortune117 and ElectroSR added every Chemist’s favorite tool - the modular grenade, which allows anyone with a screwdriver and some basic parts to create a grenade filled with anything from deadly acid smoke to healing chemicals.
Map Rotation Contributed by moony
For those who haven’t been keeping track, SS14 currently supports nine different maps. To stop everyone from voting for the same map every round, moony has added map rotation. Map votes have been disabled and instead the server will cycle through the less recently played maps.
Clothing Additions Contributed by Emisse
Emisse has given you aspiring fashion models a plethora of new clothing options and accessories.
There’s so many that we’re just going to list them:
Formal clothing for the Captain and HoS Atmospheric Technician firesuit Cloaks for admins and miners Mantles, an alternative to cloaks Medals, available in the lockers of the Captain and HoP Lawyer badge, available in LawDrobes Nuke Ops jumpsuits and Changeling armor Winter coats, available in applicable clothing vendors and the uniform printer Diseases Contributed by Rane
Rane has done a ton of work to add all of the core systems, mechanics, and content for diseases. Now the unwashed masses can run around coughing and sneezing on each other to their heart’s content, giving you the chance to experience a pandemic without having to go outside!
There’s also a new plague doctor outfit courtesy of KaiShibaa.
Multi-layer Clothing Contributed by ElectroSR
During the last progress report cycle, ElectroSR added the ability for clothing sprites to have several layers, which enables more robust customization and visual effects. Flashlights and hardsuits now utilize this feature, and you can see it in action below:
Ghost Role Changes Contributed by DogZero, mirrorcult, HoofedEar
Some ghost roles have been added and tweaked:
DogZeroX added the Onestar mech, an admin-spawned mech that can annihilate most things in its path. HoofedEar made some tweaks to drones: One of their hands has been switched for a new Omnitool, in addition to other changes to their toolkit. mirrorcult made it possible for mice to squeak, run under doors, and go under tables. Have fun leading the janitor on a wild chase through maintenance.
More Mapping Objects Contributed by metalgearsloth, Delete69, DogZeroX, moony, Peptide90, mirrorcult
This month saw a significant increase in the number of objects available to mappers, including shuttle walls for the arrivals and escape shuttle as well as a number of trees and other flora ported over from /tg/. Also included are new signs and new decorations, including dressers and television sets.
Here’s a very non-exhaustive look:
More Animals & Grenade Penguins Contributed by Emisse, Snowni, mirrorcult, EmoGarbage404, Carou02
The station now has a number of new and returning pets, thanks to a team of contributors who ported most of the existing animals from the /tg/ codebase - including foxes, ferrets, raccoons, opossums, dogs, and the new Syndicate Grenade Penguin. I hope no one has allergies.
Lobby Refactor & More Songs Contributed by Jezithyr, WTCWR68
Jezithyr has completely rewritten the lobby UI and it now looks entirely different. As a bonus, it now supports lobby art! Two pieces of lobby art were made by Veritius.
Further improving the lobby experience, WTCWR68 has added four new lobby songs including two classics from SS13.
Ambience Enhancements Contributed by moony
Sitting in complete silence while surrounded by heavy machinery is a bit immersion-breaking, so moony went and added ambient sounds to lots of things.
These machines have new sound effects:
Atmospherics machinery Hydroponics trays R&D servers Atmospherics pipes Electrical wires
Traitor Additions Contributed by areitpog, EmoGarbage404, CrudeWax
The Syndicate has found that corgi meat is a hot new commodity on the intergalactic black market, and may task their operatives with procuring some. To aid traitors in this nigh-impossible task, several changes have been made to the equipment available in Syndicate Uplinks.
The Syndicate have given their covert agents a new tool in the form of the Hypopen, a pen that doubles as a hypodermic syringe and can be used to discreetly administer drugs to unsuspecting station personnel. Additional chemical bottles can be purchased from a Syndicate Uplink that will stun injected victims.
Holoparasites have been significantly improved, and are now immune to most firearms and tasers.
Lizards Contributed by metalgearsloth, Daemon, Macoron, DogZeroX, moony
We’ve shown them off before, but the classic SS13 lizards are now officially playable in SS14 thanks to a bunch of work & fixes by several contributors. Lizard visuals and their unique accent are taken primarily from /tg/station 13.
New Plushies Contributed by DogZeroX and Daemon
Four adorable new plushies have been added: RGBee, Ratvar, Rouny, and a space lizard.
New Admin Features & Custom Resource Uploads Contributed by Zumorica
Admins now have a variety of new tools to abuse players enhance the round, and a few minor changes have been made to the server rules. Here’s the highlights:
Admins can now play sounds to every player or specific players. Admins can now upload custom resources to the server, like new sprites.
Auto UI Scaling Contributed by Jezithyr
Resizing the game window will now automatically scale the UIs. It can go as small as 520x520 pixels!
Mapping This progress report sees the addition of 3 new maps. There’s also a pile of updates to all the other maps, but we don’t have the time or space to cover them all here. As always, the most up-to-date images for maps can be found on our wiki .
Delta Station Contributed by Timrod
Delta Station, one of the largest maps in SS13, has been ported to SS14. It’s so large that it’s bigger than any other two SS14 maps combined. This incarnation is a mixture of /tg/’s map, Citadel’s map, and a few unique changes to better fit SS14 mechanics like a remapped security department and removal of the AI satellite.
Marathon Station Contributed by Emisse
Marathon Station has been added as a heavily-modified and rechristened port of SS13’s Pubby Station. Hopefully the handful of Pubby fans will feel right at home, once they figure out where some of the departments went.
Split Station Contributed by Peptide90
To show you the power of SS14, Peptide sawed this boat station in half!
Split Station is, as the name implies, split into two separate asteroids with a couple hallways connecting them. I sure hope nobody disconnects them and flies off with half of the station (which you can actually do)!
New Salvage Maps Contributed by mirrorcult and retequizzle
Several new salvage maps have been added for all of your lootin' and shootin' needs. Make sure you’re on the lookout for some new hostile mobs in the area courtesy of EmoGarbage404.
Here’s a look at one of the new salvage maps:
Minor Changes Due to length constraints, not everything can get a dedicated section in the progress report and instead will be found listed here.
New Features Several structures now rotate with the grid they’re on. Contributed by InquisitivePenguin Some clothing can now be torn into cloth, which can now be crafted into gauze. Contributed by mirrorcult Certain station announcements now have unique colors. Contributed by HoofedEar Trash bags now visually enlarge as you fill them. Contributed by Macoron Added Uniform Printers, a machine for making jumpsuits. Contributed by Rane You can now wear a guitar on your back. Contributed by lapatison Botany plant sizes now scale with potency. Contributed by mirrorcult Gas analyzers now work on pipes. Contributed by Partmedia Added health analyzers. Doctor PDAs also function as a slower health analyzer. Contributed by Fishfish458 and Rane Crafting a stackable item will attempt to merge it with the stack in your hand. Contributed by ElectroSR Stack merging is now predicted, making it easier to pick up several individual items. Contributed by ElectroSR Fixes, Tweaks, and Balancing Flashlights now last 3.75x longer, flares now last 3x longer. Contributed by Fishfish458 Hardsuits no longer make you as slow and hardsuit helmets are no longer sufficient protection in a vacuum on their own. Contributed by mirrorcult Crayons are now deleted when used up. Contributed by actually-reb Xenos are now space-proof. Contributed by DogZeroX Greatly reduced insulated gloves drop rate in maintenance, added budget gloves in its place. Contributed by Emisse Several tweaks to shuttle movement to make them feel nicer to fly. Contributed by Radrark Fixed some issues with audio playing twice or popups appearing twice. Contributed by ElectroSR Fixed popups moving with the player. Contributed by DrSmugleaf Fixed buckling on rotated grids. Contributed by metalgearsloth Fixed flickering in the character editor. Contributed by elthundercloud Fixed scrubbers all sharing the same list of gases to scrub. Contributed by vulppine Fixed violating the laws of classical mechanics via pulling. Contributed by metalgearsloth Technical Explosion Refactor Contributed by ElectroSR
The old explosion code has been completely replaced. Previously, explosions worked by using a simple raycast to check for obstructions and then dealt damage to exposed entities based on their distance to the epicenter. Not only was this actually quite slow for large explosions, it also meant that any explosion would only ever destroy a single layer of walls.
The new explosion code uses a grid-based algorithm that iteratively looks for neighboring tiles to add to the explosion. Airtight entities (i.e., walls) effectively delay the flood-fill in some directions, with a delay proportional to their health. The end result is that explosion can now properly penetrate multiple layers of walls, with each layer appropriately reducing the damage dealt to the next one. Additionally, the area that gets affected by an explosion is shaped by airtight obstacles. Explosions can now go around corners, and will deal more damage and travel further in confined areas.
The most convoluted part of the new explosion code is the need to support multiple rotated & translated shuttles and stations. It is challenging to have grid-based explosions that properly propagate onto and off of these grids, while also being blocked by airtight entities on those grids, and there are still some edge cases were explosions can skip past walls. Another challenge was ensuring that all the code is fast enough to allow for real-time nuking of the station. The biggest bottleneck is currently due to entity spawning and deletion, but there is also some physics slowdown due to having thousands of entities launched into space. Currently a station-destroying explosion still causes very noticeable stuttering, but there is still plenty of room for improvement.
Credits Contributors Since Last Progress Report 439 commits, authored by: Alex Evgrashin, Carou02, Chris V, CrudeWax, Daemon, Delete69, DrSmugleaf, ElectroSr, Emisse, EmoGarbage404, Fishfish458, Flipp Syder, Jack Fox, Jane Lewis, Jezithyr, Julian Giebel, Kai Shiba, Kevin Zheng, Leeroy, Mith-randalf, Moony, Morbo, Pancake, Paul, Peptide90, Pieter-Jan Briers, Radrark, Rane, ScalyChimp, ShadowCommander, Silver, Snowni, T-Stalker, TaralGit, TimrodDX, Veritius, WTCWR68, Willhelm53, Zoldorf, actually-reb, areit, ike709, lapatison, metalgearsloth, mirrorcult, ninruB, retequizzle, router, wrexbe, Zumorica
Patrons Altana, Anthony Chicko, Anthony Fleck, AquaDraco, Austin Nelson, Blaise M., Callum Tubrett, Collin R Terrell, Cormos Lemming, CPM311, Dan Griskardian, Daniel Thompson, Darren Brady, Daskata, DramaBuns, Durp, Eric VW, Ethan Keller, Evan Armstrong, Farewell Fire, Florian, Frege Beach, grhmhome, Hamcha, hh, Jack Rose, James Andrew Peoples Jr, Jex N, Joel, John Edward Hamilton Barchard, Joshington Awesomahee, JustanAnus, Koyki, Kris Piper, KrystalDisc, Miniwoffer, Mono, Nicholas Hillblom, Oxyclean114, Peter “Azmond” Newhouse, Phillip Inman, Rafał Kowalewski, Robin Rottstock, Seija, Serathis, Shayne Haugen, Spiffyfishface, spinnermaster, Taylor, ThatGuyGW, The Hateful Flesh, Tom Cruize, Tomeno, Valinov, vifs_vestige, Viridian, Will M., Wrexbe, Zakanater 19, Zandario
\ No newline at end of file
+
Progress Report #33: Delta Variant - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Progress Report #33: Delta Variant Contributed by DrSmugleaf, ike709, and Timrod Saturday April 30, 2022 There’s so many changes we couldn’t figure out how to cover them all!
Progress Report Tweaks We’ve had a hell of time trying to figure out what to do about the huge number of features, fixes, and tweaks that happened in March. As a result we’re going to be experimenting with some formatting changes over the course of the next few Progress Reports to determine the best way of presenting the large quantity of information.
Content April Stress Test On April 9th we hosted a stress test with as many players as possible to see how well the server could handle it, peaking at 250 players! Normally April events would go in the April progress report, but we’re including it here while it’s hopefully still fresh in all of the participants’ minds.
Space Station 14 was able to run with 200 players without any server slowdown. The stress test peaked at ~250 players and we predict that it could have surpassed ~350 without slowdown. However, although the server can handle it, we noticed some networking issues that can cause rubberbanding with this many players. The probable cause has been identified and efforts to fix it are underway.
For a highlight reel of the chaos caused by 250 players, you can watch the YouTube video here .
See here for a more technical breakdown of performance There are two parts to how the game processes things: A unit of time called a “tick” during which the game simulates everything, and the “ticks per second (TPS)” which is the rate at which ticks occur. For example, 30 TPS means that one second is divided into 30 ticks of equal length and the game will attempt to update 30 times per second. More ticks per second means less time for each tick, and if the game isn’t finished running the code by the time the tick ends then the game will lag. On the flip side, a higher TPS means the game will feel more responsive. Choosing the right TPS is a balancing act, and the upper limit mainly depends on how performant the game is.
Space Station 14 was able to run at our usual 30 TPS with over 200 players largely without issue. After lowering it to 20 TPS, which is what most SS13 servers use, the stress test peaked at ~250 players and continued to perform fine (aka everything was able to run during the allotted ticks).
tl;dr SS14 can definitely handle over 250 players and can probably handle over 350 players before the server starts to lag. Unless you do something wild like give everyone mechs with rocket launchers. Not too shabby, in my opinion.
Explosion Refactor Contributed by ElectroSR
Explosions have been completely refactored to be more visually and technically impressive. There’s also a new UI for admins to create explosions and it comes with a very fancy preview of what will be annihilated.
Modular Grenades Contributed by ElectroSR and Fortune117
Fortune117 and ElectroSR added every Chemist’s favorite tool - the modular grenade, which allows anyone with a screwdriver and some basic parts to create a grenade filled with anything from deadly acid smoke to healing chemicals.
Map Rotation Contributed by moony
For those who haven’t been keeping track, SS14 currently supports nine different maps. To stop everyone from voting for the same map every round, moony has added map rotation. Map votes have been disabled and instead the server will cycle through the less recently played maps.
Clothing Additions Contributed by Emisse
Emisse has given you aspiring fashion models a plethora of new clothing options and accessories.
There’s so many that we’re just going to list them:
Formal clothing for the Captain and HoS Atmospheric Technician firesuit Cloaks for admins and miners Mantles, an alternative to cloaks Medals, available in the lockers of the Captain and HoP Lawyer badge, available in LawDrobes Nuke Ops jumpsuits and Changeling armor Winter coats, available in applicable clothing vendors and the uniform printer Diseases Contributed by Rane
Rane has done a ton of work to add all of the core systems, mechanics, and content for diseases. Now the unwashed masses can run around coughing and sneezing on each other to their heart’s content, giving you the chance to experience a pandemic without having to go outside!
There’s also a new plague doctor outfit courtesy of KaiShibaa.
Multi-layer Clothing Contributed by ElectroSR
During the last progress report cycle, ElectroSR added the ability for clothing sprites to have several layers, which enables more robust customization and visual effects. Flashlights and hardsuits now utilize this feature, and you can see it in action below:
Ghost Role Changes Contributed by DogZero, mirrorcult, HoofedEar
Some ghost roles have been added and tweaked:
DogZeroX added the Onestar mech, an admin-spawned mech that can annihilate most things in its path. HoofedEar made some tweaks to drones: One of their hands has been switched for a new Omnitool, in addition to other changes to their toolkit. mirrorcult made it possible for mice to squeak, run under doors, and go under tables. Have fun leading the janitor on a wild chase through maintenance.
More Mapping Objects Contributed by metalgearsloth, Delete69, DogZeroX, moony, Peptide90, mirrorcult
This month saw a significant increase in the number of objects available to mappers, including shuttle walls for the arrivals and escape shuttle as well as a number of trees and other flora ported over from /tg/. Also included are new signs and new decorations, including dressers and television sets.
Here’s a very non-exhaustive look:
More Animals & Grenade Penguins Contributed by Emisse, Snowni, mirrorcult, EmoGarbage404, Carou02
The station now has a number of new and returning pets, thanks to a team of contributors who ported most of the existing animals from the /tg/ codebase - including foxes, ferrets, raccoons, opossums, dogs, and the new Syndicate Grenade Penguin. I hope no one has allergies.
Lobby Refactor & More Songs Contributed by Jezithyr, WTCWR68
Jezithyr has completely rewritten the lobby UI and it now looks entirely different. As a bonus, it now supports lobby art! Two pieces of lobby art were made by Veritius.
Further improving the lobby experience, WTCWR68 has added four new lobby songs including two classics from SS13.
Ambience Enhancements Contributed by moony
Sitting in complete silence while surrounded by heavy machinery is a bit immersion-breaking, so moony went and added ambient sounds to lots of things.
These machines have new sound effects:
Atmospherics machinery Hydroponics trays R&D servers Atmospherics pipes Electrical wires
Traitor Additions Contributed by areitpog, EmoGarbage404, CrudeWax
The Syndicate has found that corgi meat is a hot new commodity on the intergalactic black market, and may task their operatives with procuring some. To aid traitors in this nigh-impossible task, several changes have been made to the equipment available in Syndicate Uplinks.
The Syndicate have given their covert agents a new tool in the form of the Hypopen, a pen that doubles as a hypodermic syringe and can be used to discreetly administer drugs to unsuspecting station personnel. Additional chemical bottles can be purchased from a Syndicate Uplink that will stun injected victims.
Holoparasites have been significantly improved, and are now immune to most firearms and tasers.
Lizards Contributed by metalgearsloth, Daemon, Macoron, DogZeroX, moony
We’ve shown them off before, but the classic SS13 lizards are now officially playable in SS14 thanks to a bunch of work & fixes by several contributors. Lizard visuals and their unique accent are taken primarily from /tg/station 13.
New Plushies Contributed by DogZeroX and Daemon
Four adorable new plushies have been added: RGBee, Ratvar, Rouny, and a space lizard.
New Admin Features & Custom Resource Uploads Contributed by Zumorica
Admins now have a variety of new tools to abuse players enhance the round, and a few minor changes have been made to the server rules. Here’s the highlights:
Admins can now play sounds to every player or specific players. Admins can now upload custom resources to the server, like new sprites.
Auto UI Scaling Contributed by Jezithyr
Resizing the game window will now automatically scale the UIs. It can go as small as 520x520 pixels!
Mapping This progress report sees the addition of 3 new maps. There’s also a pile of updates to all the other maps, but we don’t have the time or space to cover them all here. As always, the most up-to-date images for maps can be found on our wiki .
Delta Station Contributed by Timrod
Delta Station, one of the largest maps in SS13, has been ported to SS14. It’s so large that it’s bigger than any other two SS14 maps combined. This incarnation is a mixture of /tg/’s map, Citadel’s map, and a few unique changes to better fit SS14 mechanics like a remapped security department and removal of the AI satellite.
Marathon Station Contributed by Emisse
Marathon Station has been added as a heavily-modified and rechristened port of SS13’s Pubby Station. Hopefully the handful of Pubby fans will feel right at home, once they figure out where some of the departments went.
Split Station Contributed by Peptide90
To show you the power of SS14, Peptide sawed this boat station in half!
Split Station is, as the name implies, split into two separate asteroids with a couple hallways connecting them. I sure hope nobody disconnects them and flies off with half of the station (which you can actually do)!
New Salvage Maps Contributed by mirrorcult and retequizzle
Several new salvage maps have been added for all of your lootin’ and shootin’ needs. Make sure you’re on the lookout for some new hostile mobs in the area courtesy of EmoGarbage404.
Here’s a look at one of the new salvage maps:
Minor Changes Due to length constraints, not everything can get a dedicated section in the progress report and instead will be found listed here.
New Features Several structures now rotate with the grid they’re on. Contributed by InquisitivePenguin Some clothing can now be torn into cloth, which can now be crafted into gauze. Contributed by mirrorcult Certain station announcements now have unique colors. Contributed by HoofedEar Trash bags now visually enlarge as you fill them. Contributed by Macoron Added Uniform Printers, a machine for making jumpsuits. Contributed by Rane You can now wear a guitar on your back. Contributed by lapatison Botany plant sizes now scale with potency. Contributed by mirrorcult Gas analyzers now work on pipes. Contributed by Partmedia Added health analyzers. Doctor PDAs also function as a slower health analyzer. Contributed by Fishfish458 and Rane Crafting a stackable item will attempt to merge it with the stack in your hand. Contributed by ElectroSR Stack merging is now predicted, making it easier to pick up several individual items. Contributed by ElectroSR Fixes, Tweaks, and Balancing Flashlights now last 3.75x longer, flares now last 3x longer. Contributed by Fishfish458 Hardsuits no longer make you as slow and hardsuit helmets are no longer sufficient protection in a vacuum on their own. Contributed by mirrorcult Crayons are now deleted when used up. Contributed by actually-reb Xenos are now space-proof. Contributed by DogZeroX Greatly reduced insulated gloves drop rate in maintenance, added budget gloves in its place. Contributed by Emisse Several tweaks to shuttle movement to make them feel nicer to fly. Contributed by Radrark Fixed some issues with audio playing twice or popups appearing twice. Contributed by ElectroSR Fixed popups moving with the player. Contributed by DrSmugleaf Fixed buckling on rotated grids. Contributed by metalgearsloth Fixed flickering in the character editor. Contributed by elthundercloud Fixed scrubbers all sharing the same list of gases to scrub. Contributed by vulppine Fixed violating the laws of classical mechanics via pulling. Contributed by metalgearsloth Technical Explosion Refactor Contributed by ElectroSR
The old explosion code has been completely replaced. Previously, explosions worked by using a simple raycast to check for obstructions and then dealt damage to exposed entities based on their distance to the epicenter. Not only was this actually quite slow for large explosions, it also meant that any explosion would only ever destroy a single layer of walls.
The new explosion code uses a grid-based algorithm that iteratively looks for neighboring tiles to add to the explosion. Airtight entities (i.e., walls) effectively delay the flood-fill in some directions, with a delay proportional to their health. The end result is that explosion can now properly penetrate multiple layers of walls, with each layer appropriately reducing the damage dealt to the next one. Additionally, the area that gets affected by an explosion is shaped by airtight obstacles. Explosions can now go around corners, and will deal more damage and travel further in confined areas.
The most convoluted part of the new explosion code is the need to support multiple rotated & translated shuttles and stations. It is challenging to have grid-based explosions that properly propagate onto and off of these grids, while also being blocked by airtight entities on those grids, and there are still some edge cases were explosions can skip past walls. Another challenge was ensuring that all the code is fast enough to allow for real-time nuking of the station. The biggest bottleneck is currently due to entity spawning and deletion, but there is also some physics slowdown due to having thousands of entities launched into space. Currently a station-destroying explosion still causes very noticeable stuttering, but there is still plenty of room for improvement.
Credits Contributors Since Last Progress Report 439 commits, authored by: Alex Evgrashin, Carou02, Chris V, CrudeWax, Daemon, Delete69, DrSmugleaf, ElectroSr, Emisse, EmoGarbage404, Fishfish458, Flipp Syder, Jack Fox, Jane Lewis, Jezithyr, Julian Giebel, Kai Shiba, Kevin Zheng, Leeroy, Mith-randalf, Moony, Morbo, Pancake, Paul, Peptide90, Pieter-Jan Briers, Radrark, Rane, ScalyChimp, ShadowCommander, Silver, Snowni, T-Stalker, TaralGit, TimrodDX, Veritius, WTCWR68, Willhelm53, Zoldorf, actually-reb, areit, ike709, lapatison, metalgearsloth, mirrorcult, ninruB, retequizzle, router, wrexbe, Zumorica
Patrons Altana, Anthony Chicko, Anthony Fleck, AquaDraco, Austin Nelson, Blaise M., Callum Tubrett, Collin R Terrell, Cormos Lemming, CPM311, Dan Griskardian, Daniel Thompson, Darren Brady, Daskata, DramaBuns, Durp, Eric VW, Ethan Keller, Evan Armstrong, Farewell Fire, Florian, Frege Beach, grhmhome, Hamcha, hh, Jack Rose, James Andrew Peoples Jr, Jex N, Joel, John Edward Hamilton Barchard, Joshington Awesomahee, JustanAnus, Koyki, Kris Piper, KrystalDisc, Miniwoffer, Mono, Nicholas Hillblom, Oxyclean114, Peter “Azmond” Newhouse, Phillip Inman, Rafał Kowalewski, Robin Rottstock, Seija, Serathis, Shayne Haugen, Spiffyfishface, spinnermaster, Taylor, ThatGuyGW, The Hateful Flesh, Tom Cruize, Tomeno, Valinov, vifs_vestige, Viridian, Will M., Wrexbe, Zakanater 19, Zandario
\ No newline at end of file
diff --git a/post/22-05-25-progress-report-34/index.html b/post/22-05-25-progress-report-34/index.html
index 4bf7af9..c552d10 100644
--- a/post/22-05-25-progress-report-34/index.html
+++ b/post/22-05-25-progress-report-34/index.html
@@ -1,7 +1,9 @@
-
Progress Report #34: Manifest Destiny - SS14
Progress Report #34: Manifest Destiny Contributed by DrSmugleaf, ike709, and Timrod Wednesday May 25, 2022 Tons of improvements to the SS14 experience, and more!
Content Delta Updates Contributed by PJB
The launcher is now capable of only downloading new or changed files whenever a server updates. This means you won’t have to sit through a 55 MB (at the time of writing) update whenever a single tiny feature gets added. The size of our game content has grown dramatically in the last couple months as more and more content keeps coming in, and with it the download times got much worse for everybody. I apologize to anybody with poor internet for not getting this done sooner.
Additionally, downloaded assets will now be shared between servers regardless of the code they’re running. So if two different servers use the same floor sprites, for example, you’ll only download them once. It just works. More details are available in the Technical section.
Zstd Game State Compression Contributed by PJB
PJB also added Zstd compression to game states, which is a complicated way of saying that the game should generally use less bandwidth now. Technically-inclined users can find more details in the Technical section.
Machine Linking Improvements Contributed by DubiousDoggo & ElectroSR
Linking machines on the station has never been easier, thanks to a new change that allows anyone with a multitool to apply a default link to blast doors, shutters, and anything else capable of linking. This will no doubt save the greyshirts trying to pop open the blast doors to EVA storage several clicks.
Artifact Container Contributed by Macoron
The eggheads over in R&D have come up with a cure for premature activation… of xenoarcheology artifacts, that is.
The new Artifact Container will safely contain any artifacts the salvage crew come across, thus enabling safe transportation to a more suitable testing environment.
Grid Splitting Contributed by metalgearsloth
Every station, shuttle, asteroid, et cetera can now be broken up into multiple unique grids. For example, if an asteroid smashed all the way through a shuttle mid-transit, you’d see the two halves fly off in different directions as the portion with the engines strapped to it continues accelerating. More technical details can be found in the Technical section, but here’s a more direct visual aid:
Using the power of admin tools, I sawed this station in half!
Salvage Mining & Ore Processing Contributed by HoofedEar
The salvage crews have made a shocking discovery: All of those asteroid rocks are full of valuable minerals! We’re providing the station with a new Ore Processor to smelt all of it into usable materials.
Syndicate Operative Outfit Contributed by Daemon
Syndicate agents have a few new wardrobe choices, including the traditional black turtleneck worn by nuclear operatives and a pair of red magboots to really nail that operator look.
C4 & Remote Explosives Contributed by Macoron, Snowni, and Rane
Syndicate agents now have access to compound C4, a highly damaging plastic explosive capable of taking out almost anything it’s attached to, including walls and airlocks. It can be detonated using an included timer, or remotely through the use of a signal trigger and remote signaler. Just remember, the explosion is limited to a single tile, so don’t expect a big bang.
Agent ID Cards Contributed by Rane
The second new tool from the Syndicate this month is the Agent ID Card, which can have its name and job set by the user - in addition to its ability to steal access from any ID card it touches.
Pulling Improvements Contributed by metalgearsloth, ElectroSR, & ProfanedBane
A plethora of improvements have been made to pulling, both to fix bugs like handcuffed players being able to escape being pulled and also a general reduction in jankiness.
Additionally, it is now possible to pull objects around corners:
Chaplain Familiars Contributed by Rane
Nullrods are so SS13. Here at Space Station 14, the Chaplain has better gimmicks tools to save the eternal souls of the crew. The Chaplain can now summon a ghost-controlled Familiar, which is a bit like a pet but more ephemeral. Don’t worry though, they can return a few minutes after dying.
Improved Singularity Shader Contributed by ElectroSR
Lord Singuloth has gotten another facelift with several improvements to the shader:
Singularities no longer have a sudden pop-in Multiple singularities can be on-screen at once Tweaked the visuals a bit
Emaggable Vending Machines Contributed by Rane
The Syndicate have released an update to the cryptographic sequencer: It can now emag Nanotrasen vending machines to unlock new, restricted contents.
Currently only the PietyVend takes advantage of this; it offers occult items to any Chaplains that have… fallen from grace.
Station Map Posters Contributed by Emisse
Most existing stations now have map posters, which give a tiny overview of the station’s general layout. They can be found in various places on supported stations. The colors represent departments, such as red for security and blue for medical.
Atmospheric Technician Contributed by Emisse
Space Station 14 has a new job from SS13 this month in the form of the Atmospheric Technician, an engineer dedicated to working with the maze of pipes and gas pumps that make up the station’s atmospheric system.
Merge ID Accesses Contributed by 20kdc
In a recent survey, frustration among Heads of Personnel has been down across the board after a change to the way access works. Doors and windoors now check all of the spots an ID could be in before denying you access - meaning that the Head of Personnel can now open the windoor to their desk and hand an ID card across without having to drop it on the floor first.
Vehicles Contributed by Rane, & Veritius
A shipment of vehicles have arrived at the station, and security has already received several reports of traffic violations. Stop running over the Clown before we have a lawsuit on our hands.
Here’s a list of every vehicle you can find or order so far:
ATVs Janicart Secways Syndicate Segways
Mime Powers Contributed by Rane
The Mime now sports the uncanny and somewhat disturbing ability to create a temporary invisible wall, blocking the passage of objects and station personnel as well as a regular wall.
However, like all superheroes, the Mime must have a weakness. The Mime now starts with a vow of silence and loses their wall ability if the vow is broken.
Beds, Stasis Beds, and Beyond Contributed by Rane
A new study shows that a bit of bedrest can do wonders for a crewmember’s health, and medical beds are even better. Additionally, science can research new stasis beds that will greatly slow down the metabolism of any occupants. Now you can make your bad trip last even longer!
Zombies Contributed by EmoGarbage404
BRAAAAAAAAAAAAAAINS…
Admin Notes Contributed by DrSmugleaf
Admin notes are the latest tool from SS13 in our anti-greytide arsenal, allowing admins to record players' heinous deeds on their permanent record. Be careful, just because you don’t get banned doesn’t mean your actions aren’t being noted!
Salvage Mob Ghost Roles Contributed by mirrorcult
Ghosts now have even more things to keep them occupied. They can take control of (almost) all hostile mobs found throughout the various salvage maps and ruin the day of some unsuspecting crewmember.
Drains Contributed by Rane
After countless OSHA complaints, Rane has added drains to help clean up spills in certain oft-slippery parts of the station. Chefs, rejoice!
New Hardsuits, Toggleable Helmets, & Armor Rebalance Contributed by Emisse & ElectroSR
The Materials Science Division™ have tweaked the armor of most armored clothing. They’ve also developed a new integrated hardsuit helmet and removed the need to carry a helmet around with you.
Finally, they have some new hardware for Paramedics and the salvage crew:
Mapping NT Barratry Contributed by EmoGarbage404
The NT Barratry has been added as a medium-sized station with a grungy and destroyed aesthetic. Engineers and Janitors should have plenty of things to keep themselves occupied fixing up this old rust bucket.
Atlas Ship Contributed by Emisse
Atlas is a new low-pop map inspired by the Goonstation map of the same name, but with some changes to make it more viable in SS14.
Admin Pirate Ship Contributed by Emisse
Yarr, a pirate ship for admins to abuse use for their your amusement. Now we just need to figure out how to make people walk the plank in space.
Minor Changes Due to length constraints, not everything can get a dedicated section in the progress report and instead will be found listed here. This list is non-exhaustive but covers the most blatant player-facing changes.
New Features Changed the default game mode from suspicion to traitor. Contributed by Zumorica Added stamps, for paperwork enthusiasts. Contributed by Fishfish458 & Veritius Added an airlock painter. Contributed by Soupstraw Added three new brass instruments. Contributed by EmoGarbage404 Added hugging. Contributed by Mirino97 Added the midipanic
command. It will clear all MIDI sounds if they somehow broke. Contributed by Zumorica Added the round ID to lobby info & round end summary. Contributed by ShadowCommander Added suit storage for air tanks. Contributed by Daemon Added a number identifier to all non-player mobs. Contributed by Peptide90 Pills can now be grinded to identify the chemical contents. Contributed by UKNOWH Modular grenades can now be crafted into flashbangs. Contributed by UKNOWH You can now cuff yourself. Contributed by freeman2651 Hypopens now fit into PDA pen slots. Contributed by KaiShibaa Added crafting recipes for spike racks, signal switches, and buttons. Contributed by Peptide90 Added rainbow crayons. Contributed by vulppine Fixes, Tweaks, and Balancing Welding masks are now flash immune. Contributed by juliangiebel Doors now close on immovable entities like tables. Contributed by ShadowCommander Fixed not needing both a pressure suit & helmet to survive hazardous pressure. Contributed by ElectroSR Stun batons now need more frequent recharging. Contributed by Leander-0 Added extra steps to reinforced window deconstruction. Contributed by Mirino97 Fixed grenade penguin AI & buffed explosion damage. Contributed by EmoGarbage404 Dead people can no longer suicide again. Contributed by keronshb Fixed emags working on bolted/unpowered doors. Contributed by Rane Emags no longer work on ID consoles. Contributed by Rane Rebalanced the uplink’s explosives. Contributed by Rane Space carp no longer destroy reinforced windows. Contributed by mirrorcult Fixed using multiple salvage magnets. Contributed by moony Increased the dead zone for click dragging. Contributed by ElectroSR Flying animals no longer slip. Contributed by Saakra Fixed minibombs to be a small but powerful explosion again. Contributed by ElectroSR Fixed removing tile decals (tile paint). Contributed by metalgearsloth Fixed some salvage maploading issues. Contributed by moony Energy sword light color now updates with blade color changes. Contributed by ElectroSR Fixed hardsuit lights and helmets. Contributed by ElectroSR Fixed SMES & Substation construction. Contributed by Zumorica Improved (un)anchoring prediction. Contributed by ElectroSR Fixed the RGBee. Contributed by ElectroSR Added no-slip to advanced magboots. Contributed by Emisse Fixed magboot prediction. Contributed by ElectroSR Fixed disarm. Contributed by ElectroSR Fixed seeds not spawning. Contributed by mirrorcult Fixed several issues with the explosion refactor. Contributed by ElectroSR Fixed various grammatical issues. Contributed by Veritius Duffle bags now carry more but slow you down slightly. Contributed by Emisse Area-of-Effect reactions no longer occur in space. Contributed by ElectroSR Guns are now more accurate on the first shot, but tap-firing is worse. Contributed by Rane Fixed bees being able to disarm. Contributed by Mirino97 Wall deconstruction welding time is 5x longer. Contributed by Rane Xenos & carp no longer slip. Contributed by Veritius & keronshb Buffed suspicious toolbox contents. Contributed by Emisse Fixed not being able to pry windoors. Contributed by Macoron Fixed various synthesizer, MIDI, and instrument-related bugs. Contributed by Zumorica Fixed the singularity shader in compatibility mode. Contributed by ElectroSR Added a delay to using signal transmitters. Contributed by ElectroSR Fixed some map loading issues. Contributed by moony Buffed flare duration. Contributed by Fishfish458 Fixed banners not having an interaction outline. Contributed by DogZeroX Rebalanced weapon weights, firesuits, and hardsuits. Contributed by Emisse Several crash fixes and performance optimizations. Contributed by several people Technical Delta Updates (Technical) Contributed by PJB
Delta updates has taken quite a lot of on-and-off pondering and work to reach the current state. To begin, an overview of how the previous updating system worked:
All the client contents are combined into a simple zip file when the game is built. This zip is hashed (SHA-256) and this hash, together with data such as download URL, “Fork ID” and “Fork Version” is included with the server build. The server reports this information to the launcher via its HTTP API when you try to connect to it. The launcher downloads the zip to disk (if it doesn’t have it yet), verifies the hash, and then runs the engine with this zip file mounted to run the actual game. The game server can optionally serve the zip itself to ease hosting in some cases, which is known as “Automated Client Zipping” (ACZ).
The upside is that this system is quite simple. The engine can mount zip files natively, it’s “just a single file to download”, zip files are common and easy to work with, etc…
-The downside is that the tiniest file change requires redownloading the whole 55 MB zip file again. Not everybody has a great internet connection. Oof.
Step one when tackling this problem was to get rid of zip files. We effectively used the SHA-256 hash of the zip as a way to identify the contents of the game server. While this is cryptographically secure, it is hard to work with: if you wanted to make a delta updating system, you’d need to exactly reproduce the zip file bytes, not just the contents inside it… So then hash said contents directly instead! The actual identity of the server contents are now represented via a manifest. The manifest looks like this:
Robust Content Manifest 1
+Progress Report #34: Manifest Destiny - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Progress Report #34: Manifest Destiny Contributed by DrSmugleaf, ike709, and Timrod Wednesday May 25, 2022 Tons of improvements to the SS14 experience, and more!
Content Delta Updates Contributed by PJB
The launcher is now capable of only downloading new or changed files whenever a server updates. This means you won’t have to sit through a 55 MB (at the time of writing) update whenever a single tiny feature gets added. The size of our game content has grown dramatically in the last couple months as more and more content keeps coming in, and with it the download times got much worse for everybody. I apologize to anybody with poor internet for not getting this done sooner.
Additionally, downloaded assets will now be shared between servers regardless of the code they’re running. So if two different servers use the same floor sprites, for example, you’ll only download them once. It just works. More details are available in the Technical section.
Zstd Game State Compression Contributed by PJB
PJB also added Zstd compression to game states, which is a complicated way of saying that the game should generally use less bandwidth now. Technically-inclined users can find more details in the Technical section.
Machine Linking Improvements Contributed by DubiousDoggo & ElectroSR
Linking machines on the station has never been easier, thanks to a new change that allows anyone with a multitool to apply a default link to blast doors, shutters, and anything else capable of linking. This will no doubt save the greyshirts trying to pop open the blast doors to EVA storage several clicks.
Artifact Container Contributed by Macoron
The eggheads over in R&D have come up with a cure for premature activation… of xenoarcheology artifacts, that is.
The new Artifact Container will safely contain any artifacts the salvage crew come across, thus enabling safe transportation to a more suitable testing environment.
Grid Splitting Contributed by metalgearsloth
Every station, shuttle, asteroid, et cetera can now be broken up into multiple unique grids. For example, if an asteroid smashed all the way through a shuttle mid-transit, you’d see the two halves fly off in different directions as the portion with the engines strapped to it continues accelerating. More technical details can be found in the Technical section, but here’s a more direct visual aid:
Using the power of admin tools, I sawed this station in half!
Salvage Mining & Ore Processing Contributed by HoofedEar
The salvage crews have made a shocking discovery: All of those asteroid rocks are full of valuable minerals! We’re providing the station with a new Ore Processor to smelt all of it into usable materials.
Syndicate Operative Outfit Contributed by Daemon
Syndicate agents have a few new wardrobe choices, including the traditional black turtleneck worn by nuclear operatives and a pair of red magboots to really nail that operator look.
C4 & Remote Explosives Contributed by Macoron, Snowni, and Rane
Syndicate agents now have access to compound C4, a highly damaging plastic explosive capable of taking out almost anything it’s attached to, including walls and airlocks. It can be detonated using an included timer, or remotely through the use of a signal trigger and remote signaler. Just remember, the explosion is limited to a single tile, so don’t expect a big bang.
Agent ID Cards Contributed by Rane
The second new tool from the Syndicate this month is the Agent ID Card, which can have its name and job set by the user - in addition to its ability to steal access from any ID card it touches.
Pulling Improvements Contributed by metalgearsloth, ElectroSR, & ProfanedBane
A plethora of improvements have been made to pulling, both to fix bugs like handcuffed players being able to escape being pulled and also a general reduction in jankiness.
Additionally, it is now possible to pull objects around corners:
Chaplain Familiars Contributed by Rane
Nullrods are so SS13. Here at Space Station 14, the Chaplain has better gimmicks tools to save the eternal souls of the crew. The Chaplain can now summon a ghost-controlled Familiar, which is a bit like a pet but more ephemeral. Don’t worry though, they can return a few minutes after dying.
Improved Singularity Shader Contributed by ElectroSR
Lord Singuloth has gotten another facelift with several improvements to the shader:
Singularities no longer have a sudden pop-in Multiple singularities can be on-screen at once Tweaked the visuals a bit
Emaggable Vending Machines Contributed by Rane
The Syndicate have released an update to the cryptographic sequencer: It can now emag Nanotrasen vending machines to unlock new, restricted contents.
Currently only the PietyVend takes advantage of this; it offers occult items to any Chaplains that have… fallen from grace.
Station Map Posters Contributed by Emisse
Most existing stations now have map posters, which give a tiny overview of the station’s general layout. They can be found in various places on supported stations. The colors represent departments, such as red for security and blue for medical.
Atmospheric Technician Contributed by Emisse
Space Station 14 has a new job from SS13 this month in the form of the Atmospheric Technician, an engineer dedicated to working with the maze of pipes and gas pumps that make up the station’s atmospheric system.
Merge ID Accesses Contributed by 20kdc
In a recent survey, frustration among Heads of Personnel has been down across the board after a change to the way access works. Doors and windoors now check all of the spots an ID could be in before denying you access - meaning that the Head of Personnel can now open the windoor to their desk and hand an ID card across without having to drop it on the floor first.
Vehicles Contributed by Rane, & Veritius
A shipment of vehicles have arrived at the station, and security has already received several reports of traffic violations. Stop running over the Clown before we have a lawsuit on our hands.
Here’s a list of every vehicle you can find or order so far:
ATVs Janicart Secways Syndicate Segways
Mime Powers Contributed by Rane
The Mime now sports the uncanny and somewhat disturbing ability to create a temporary invisible wall, blocking the passage of objects and station personnel as well as a regular wall.
However, like all superheroes, the Mime must have a weakness. The Mime now starts with a vow of silence and loses their wall ability if the vow is broken.
Beds, Stasis Beds, and Beyond Contributed by Rane
A new study shows that a bit of bedrest can do wonders for a crewmember’s health, and medical beds are even better. Additionally, science can research new stasis beds that will greatly slow down the metabolism of any occupants. Now you can make your bad trip last even longer!
Zombies Contributed by EmoGarbage404
BRAAAAAAAAAAAAAAINS…
Admin Notes Contributed by DrSmugleaf
Admin notes are the latest tool from SS13 in our anti-greytide arsenal, allowing admins to record players’ heinous deeds on their permanent record. Be careful, just because you don’t get banned doesn’t mean your actions aren’t being noted!
Salvage Mob Ghost Roles Contributed by mirrorcult
Ghosts now have even more things to keep them occupied. They can take control of (almost) all hostile mobs found throughout the various salvage maps and ruin the day of some unsuspecting crewmember.
Drains Contributed by Rane
After countless OSHA complaints, Rane has added drains to help clean up spills in certain oft-slippery parts of the station. Chefs, rejoice!
New Hardsuits, Toggleable Helmets, & Armor Rebalance Contributed by Emisse & ElectroSR
The Materials Science Division™ have tweaked the armor of most armored clothing. They’ve also developed a new integrated hardsuit helmet and removed the need to carry a helmet around with you.
Finally, they have some new hardware for Paramedics and the salvage crew:
Mapping NT Barratry Contributed by EmoGarbage404
The NT Barratry has been added as a medium-sized station with a grungy and destroyed aesthetic. Engineers and Janitors should have plenty of things to keep themselves occupied fixing up this old rust bucket.
Atlas Ship Contributed by Emisse
Atlas is a new low-pop map inspired by the Goonstation map of the same name, but with some changes to make it more viable in SS14.
Admin Pirate Ship Contributed by Emisse
Yarr, a pirate ship for admins to abuse use for their your amusement. Now we just need to figure out how to make people walk the plank in space.
Minor Changes Due to length constraints, not everything can get a dedicated section in the progress report and instead will be found listed here. This list is non-exhaustive but covers the most blatant player-facing changes.
New Features Changed the default game mode from suspicion to traitor. Contributed by Zumorica Added stamps, for paperwork enthusiasts. Contributed by Fishfish458 & Veritius Added an airlock painter. Contributed by Soupstraw Added three new brass instruments. Contributed by EmoGarbage404 Added hugging. Contributed by Mirino97 Added the midipanic
command. It will clear all MIDI sounds if they somehow broke. Contributed by Zumorica Added the round ID to lobby info & round end summary. Contributed by ShadowCommander Added suit storage for air tanks. Contributed by Daemon Added a number identifier to all non-player mobs. Contributed by Peptide90 Pills can now be grinded to identify the chemical contents. Contributed by UKNOWH Modular grenades can now be crafted into flashbangs. Contributed by UKNOWH You can now cuff yourself. Contributed by freeman2651 Hypopens now fit into PDA pen slots. Contributed by KaiShibaa Added crafting recipes for spike racks, signal switches, and buttons. Contributed by Peptide90 Added rainbow crayons. Contributed by vulppine Fixes, Tweaks, and Balancing Welding masks are now flash immune. Contributed by juliangiebel Doors now close on immovable entities like tables. Contributed by ShadowCommander Fixed not needing both a pressure suit & helmet to survive hazardous pressure. Contributed by ElectroSR Stun batons now need more frequent recharging. Contributed by Leander-0 Added extra steps to reinforced window deconstruction. Contributed by Mirino97 Fixed grenade penguin AI & buffed explosion damage. Contributed by EmoGarbage404 Dead people can no longer suicide again. Contributed by keronshb Fixed emags working on bolted/unpowered doors. Contributed by Rane Emags no longer work on ID consoles. Contributed by Rane Rebalanced the uplink’s explosives. Contributed by Rane Space carp no longer destroy reinforced windows. Contributed by mirrorcult Fixed using multiple salvage magnets. Contributed by moony Increased the dead zone for click dragging. Contributed by ElectroSR Flying animals no longer slip. Contributed by Saakra Fixed minibombs to be a small but powerful explosion again. Contributed by ElectroSR Fixed removing tile decals (tile paint). Contributed by metalgearsloth Fixed some salvage maploading issues. Contributed by moony Energy sword light color now updates with blade color changes. Contributed by ElectroSR Fixed hardsuit lights and helmets. Contributed by ElectroSR Fixed SMES & Substation construction. Contributed by Zumorica Improved (un)anchoring prediction. Contributed by ElectroSR Fixed the RGBee. Contributed by ElectroSR Added no-slip to advanced magboots. Contributed by Emisse Fixed magboot prediction. Contributed by ElectroSR Fixed disarm. Contributed by ElectroSR Fixed seeds not spawning. Contributed by mirrorcult Fixed several issues with the explosion refactor. Contributed by ElectroSR Fixed various grammatical issues. Contributed by Veritius Duffle bags now carry more but slow you down slightly. Contributed by Emisse Area-of-Effect reactions no longer occur in space. Contributed by ElectroSR Guns are now more accurate on the first shot, but tap-firing is worse. Contributed by Rane Fixed bees being able to disarm. Contributed by Mirino97 Wall deconstruction welding time is 5x longer. Contributed by Rane Xenos & carp no longer slip. Contributed by Veritius & keronshb Buffed suspicious toolbox contents. Contributed by Emisse Fixed not being able to pry windoors. Contributed by Macoron Fixed various synthesizer, MIDI, and instrument-related bugs. Contributed by Zumorica Fixed the singularity shader in compatibility mode. Contributed by ElectroSR Added a delay to using signal transmitters. Contributed by ElectroSR Fixed some map loading issues. Contributed by moony Buffed flare duration. Contributed by Fishfish458 Fixed banners not having an interaction outline. Contributed by DogZeroX Rebalanced weapon weights, firesuits, and hardsuits. Contributed by Emisse Several crash fixes and performance optimizations. Contributed by several people Technical Delta Updates (Technical) Contributed by PJB
Delta updates has taken quite a lot of on-and-off pondering and work to reach the current state. To begin, an overview of how the previous updating system worked:
All the client contents are combined into a simple zip file when the game is built. This zip is hashed (SHA-256) and this hash, together with data such as download URL, “Fork ID” and “Fork Version” is included with the server build. The server reports this information to the launcher via its HTTP API when you try to connect to it. The launcher downloads the zip to disk (if it doesn’t have it yet), verifies the hash, and then runs the engine with this zip file mounted to run the actual game. The game server can optionally serve the zip itself to ease hosting in some cases, which is known as “Automated Client Zipping” (ACZ).
The upside is that this system is quite simple. The engine can mount zip files natively, it’s “just a single file to download”, zip files are common and easy to work with, etc…
+The downside is that the tiniest file change requires redownloading the whole 55 MB zip file again. Not everybody has a great internet connection. Oof.
Step one when tackling this problem was to get rid of zip files. We effectively used the SHA-256 hash of the zip as a way to identify the contents of the game server. While this is cryptographically secure, it is hard to work with: if you wanted to make a delta updating system, you’d need to exactly reproduce the zip file bytes, not just the contents inside it… So then hash said contents directly instead! The actual identity of the server contents are now represented via a manifest. The manifest looks like this:
Robust Content Manifest 1
938282D878C19E4EB88F854491B62E4D957ECFDB1AA840B7B8D3DA70F75E12DF Assemblies/Content.Client.dll
7936D72268E4151055928293BE752FC5984F114580460B55D881BB383C73B352 Assemblies/Content.Client.pdb
2F86ABCFAE9BF0733968C1D510F5CC3B907AB29F7C87E28888467ADBC12EDA4E Assemblies/Content.Shared.Database.dll
@@ -13,4 +15,4 @@
DD89F70FF4189AF34D1882EE8D6C939405864A7355007475CE08CD01DA8EE121 Audio/Ambience/Objects/drain.ogg
F877E13A467A8E38A310B9D6C15BCE05EE6C654846818FA1FBC22C86415A3B08 Audio/Ambience/Objects/emf_buzz.ogg
...
-
The manifest simply contains the BLAKE2b hash and the file path for each file in the game. This manifest is then hashed itself, and this hash is used as the source of truth instead of the zip file. It’s easy to generate programmatically and simple text.
Step two is for the launcher to store game files based on their hash, allowing us to deduplicate files if they are used by multiple servers . We decided to store them in a simple SQLite WAL database: it’s decently fast, transactional, and effectively guarantees data consistency. We call it ContentDB. When downloading zip files from servers that are not configured for manifest downloads (see below), we simply download the zip and ingest it into the DB. This requires us to reconstruct the manifest from scratch and at least decompress & hash all the files, but it’s not that bad. Blobs inside the database can also be compressed with ZStd, saving a good chunk of disk space.
Step three is a new download protocol that allows us to only download new files we need. The protocol is very simple: The launcher first downloads the manifest from the CDN server (the game server if using ACZ), then the launcher requests a list of all blobs it is missing to said CDN server, which responds with them. All of this happens over HTTP. The blob download itself uses a single POST request with a binary request/response to minimize overhead.
If it’s optimal, the CDN can provide individually pre-compressed blobs so the launcher can directly load them into the database without re-compression. When downloading large amounts of files however doing a compression over the whole stream gives better savings, so that is selected instead.
Outside of many Linux users initially having trouble due to library loading conflicts with ZStd, the new system seems to be working very nicely.
Possible Improvements There are a few areas of improvement to the system:
Manifest sizes: We have a lot of tiny files in the game due to the RSI format. This makes it so that manifests get really big (even when compressed, hashes don’t compress by nature). A larger-than-I’d-like amount of data needs to be downloaded just for the initial manifest, even on the tiniest of possible updates. We intend to alleviate this by eventually packing RSIs together in game downloads. Another option is a more complex tree-based manifest format (and requesting protocol thereof) that would allow us to skip whole directories if their contents haven’t changed.
Active CDN: The download protocol requires an active CDN server to be efficient. This allows us to optimize the actual bandwidth usage a lot (small protocol, optimal downloads) but this might be outweighed simply by not being able to use “standard” CDN servers.
A few days before rolling out the manifest downloading system, Veloren posted a dev blog announcing their new incremental downloading system . Veloren’s model simply uses HTTP range requests over their pre-existing zip file downloads, allowing them to use a regular CDN. I can’t say that if I was making the delta system from scratch now I wouldn’t use this method instead, but it is what it is.
Dictionaries : ZStd has support for dictionaries, allowing you to pre-share some data for compression between multiple frames (files, basically). This could allow us to reduce download & disk size even more in many cases. Some questions we need to ponder about before implementing this though: Do we permanently pack a preset of dictionaries with the launcher, or do we allow servers to dynamically generate a set of dictionaries for their content?
Binary deltas : We still can only send whole files when a file needs to be downloaded. The game’s compiled assemblies easily weigh more than half a megabyte. Ideally we would be able to supply binary patches instead, to only transmit the changes from the previous file versions. A challenge here is that the .dll
files don’t diff well, but I believe that with a specialized tool to re-organize them internally we could get huge savings.
Interrupting and resuming downloads : Right now the launcher needs to do a whole download in one go to actually store it to disk . If you already have files and are just downloading an update this isn’t a problem, but the hurdle of large initial downloads (fresh launcher, first ever connection) might prove problematic with people with poorer internet connections. Ideally the launcher could resume interrupted downloads with the files it already has.
Improving ACZ load performance : ACZ takes a long time to initialize on the server now. It’s not too bad, but I would prefer if it were faster (<1 second). This is purely down to lackluster design on System.IO.Compression.ZipArchive
making it impossible to efficiently handle zip files, nothing more. I couldn’t be arsed to make my own non-terrible zip file library, at least not yet.
Zstd Game State Compression (Technical) Contributed by PJB
As part of the above work on deltas I got a little familiar with Zstd, the modern compression algorithm used by it. I swapped out the old game state compressor with it for some speed ups.
We previously just used .NET’s DeflateStream
to do compression. The problem is that this API, like many, was not actually designed with any sort of performance in mind:
Because it’s a stream-based API, it always incurs at least one wasted memory copy that could be avoided in many cases. This is at least minor. You couldn’t really re-use DeflateStream
across multiple compressions. This means you would be constantly allocating and de-allocating native compression contexts and other garbage just to run a compression algo. So switching from Deflate to Zstd did not only provide the advantage of using an algorithm that wasn’t 28 years old, it also helped by allowing us to use a functional high-performance compression API. Hooray!
Grid Splitting (Technical) Contributed by metalgearsloth
Previously when you tried to saw a station in half there was no code detecting that a split had occurred which has now been added. Rather than checking every tile individually we group areas of tiles together as nodes and check those connections. This means that instead of potentially thousands of tiles we only check a handful of nodes to see if a split has occurred. The larger group of tiles is left as the original grid and the smaller group forms a new grid. Splitting off a solar array should be unnoticeable and sawing split station in half took ~250ms which we expect to get faster over time.
Here’s what the showgridnodes
debug command looks like:
Custom MIDI Soundfont Support Contributed by vulppine
MIDI sound fonts are now selectable by the end user in Robust Toolbox! They override any fonts loaded in by the server, and the default sound font used by your current system. This is beneficial for when you want to use other sound fonts in SS14 rather than the default one installed on your system, without having to replace any system files or deal with any configuration. In order to add any custom sound fonts to any Robust Toolbox game, you’ll need to go into the user configuration folder related to the game in question, and add any sound fonts you want into the ‘soundfonts’ folder.
Replaced Lidgren Encryption with Libsodium Contributed by PJB
Since we added account authentication, communication with the game server has mostly been AES encrypted. This was built using Lidgren’s NetEncryption
system and, well, it worked. If you check the code and you know a little bit about AES however… Yeah it reuses IVs on CBC mode. Yeah that makes it automatically broken. Hooray!
Because I am not a cryptographic expert I decided that the best way to fix this was to simply replace this with Libsodium’s AEAD XChaCha20-Poly1305 API . I trust that the crypto is not completely broken now. I also completely tore out Lidgren’s encryption support in our fork (it was evidently broken and didn’t integrate with the internals anyways).
There are some gotchas here though. The first thing is that .NET didn’t have an existing non-terrible Libsodium binding, so I had to make a partial binding for the APIs I care about myself: SpaceWizards.Sodium .
The second problem is that this change does have a noticeable increase on bandwidth usage. This is because proper encryption™ has more overhead in the form of AEAD and IV that has to be sent. Lidgren has a feature where it combines many net messages we send into fewer larger UDP packets. This is good, but the missed optimization here is that encryption runs before this combining. Ideally we would run encryption afterwards and only needing to encrypt single UDP packets, saving us some bandwidth. This would require deeper integration with Lidgren’s internals however, so this is something for the future.
I do believe that this new encryption system is at least faster CPU wise though, by the simple fact that .NET’s crypto API is pretty terrible and Libsodium’s isn’t. Just like the compression thing above!
It should be noted we’ve basically been maintaining Lidgren on our own for a while now, since upstream has stopped development. Our fork is SpaceWizards.Lidgren.Network .
SpaceWizards.HttpListener Contributed by PJB
Continuing the trend of forking and doing things ourself, a problem that came up while developing deltas above is that System.Net.HttpListener
was kinda bloody broken.
Let me back up for a second here. The .NET BCL has a type System.Net.HttpListener
which is basically a lightweight HTTP server you can embed in your app. This is great! The problem is that it’s basically completely abandoned by .NET in favor of “just use ASP.NET Core lol” and is no longer being maintained.
The type was originally designed to wrap the http.sys
Windows API. Outside Windows, an implementation that originates from Mono is now used. This has some funny consequences:
The implementations are not consistent between Windows and Mac/Linux. On Windows, listening to this HTTP listener requires admin access. On Mac/Linux, the implementation is extremely buggy. To solve (1) and (2) we opted to manually compile the managed (Mac/Linux) version of the type and use it on Windows too. This already required us to copy the code into its own repo. This was done via a submodule though, so using it wasn’t that convenient for other projects.
(3) however cropped up a lot while I was working on the delta-updates stuff, so I had to make multiple fixes myself to make this work. I didn’t bother to upstream these since it’s a ton of effort and there seems to be a lack of interest.
Because of this I decided to make a proper NuGet package and such for the effort, so it’s easier to consume by others. Anyways uhhh, have SpaceWizards.HttpListener !
Credits Contributors Since Last Progress Report 20kdc, Alainx277, AugustEymann, CrzyPotato, Daemon, Delete69, DogZeroX, DrSmugleaf, DubiousDoggo, ElectroSR, Emisse, EmoGarbage404, Fishfish458, freeman2651, HoofedEar, ike709, juliangiebel, KaiShibaa, keronshb, Leander-0, Macoron, metalgearsloth, Mirino97, mirrorcult, moony, Morb0, Pangogie, PaulRitter, Peptide90, PJB, ProfanedBane, Radosvik, Rane, Saakra, ShadowCommander, Snowni, Soupstraw, TaralGit, TimrodDX, UKNOWH, Veritius, vulppine, wrexbe, Zumorica
Patrons Alex Fry, Altana, Anthony Fleck, AquaDraco, Austin Nelson, Blaise M., Bobberunio, Callum Tubrett, Collin R Terrell, Cormos Lemming, CPM311, Dan Griskardian, Daniel Thompson, Darren Brady, Daskata, DramaBuns, Durp, Eric VW, Ethan Keller, Evan Armstrong, Farewell Fire, Florian, Frege Beach, grhmhome, Hamcha, hh, Jack Rose, James Andrew Peoples Jr, Jex N, Joel, John Edward Hamilton Barchard, Joshington Awesomahee, JustanAnus, Koyki, Kris Piper, KrystalDisc, liltenhead, Mikhail, Miniwoffer, Mono, Nicholas Hillblom, Oxyclean114, Peter “Azmond” Newhouse, Phillip Inman, Ramiro Agis, Robin Rottstock, Seija, Serathis, SnapKick, Spiffyfishface, spinnermaster, Taylor, ThatGuyGW, The Hateful Flesh, Tom Cruize, Tomeno, Valinov, vifs_vestige, Viridian, Will M., Wrexbe, Zandario
\ No newline at end of file
+
The manifest simply contains the BLAKE2b hash and the file path for each file in the game. This manifest is then hashed itself, and this hash is used as the source of truth instead of the zip file. It’s easy to generate programmatically and simple text.
Step two is for the launcher to store game files based on their hash, allowing us to deduplicate files if they are used by multiple servers . We decided to store them in a simple SQLite WAL database: it’s decently fast, transactional, and effectively guarantees data consistency. We call it ContentDB. When downloading zip files from servers that are not configured for manifest downloads (see below), we simply download the zip and ingest it into the DB. This requires us to reconstruct the manifest from scratch and at least decompress & hash all the files, but it’s not that bad. Blobs inside the database can also be compressed with ZStd, saving a good chunk of disk space.
Step three is a new download protocol that allows us to only download new files we need. The protocol is very simple: The launcher first downloads the manifest from the CDN server (the game server if using ACZ), then the launcher requests a list of all blobs it is missing to said CDN server, which responds with them. All of this happens over HTTP. The blob download itself uses a single POST request with a binary request/response to minimize overhead.
If it’s optimal, the CDN can provide individually pre-compressed blobs so the launcher can directly load them into the database without re-compression. When downloading large amounts of files however doing a compression over the whole stream gives better savings, so that is selected instead.
Outside of many Linux users initially having trouble due to library loading conflicts with ZStd, the new system seems to be working very nicely.
Possible Improvements There are a few areas of improvement to the system:
Manifest sizes: We have a lot of tiny files in the game due to the RSI format. This makes it so that manifests get really big (even when compressed, hashes don’t compress by nature). A larger-than-I’d-like amount of data needs to be downloaded just for the initial manifest, even on the tiniest of possible updates. We intend to alleviate this by eventually packing RSIs together in game downloads. Another option is a more complex tree-based manifest format (and requesting protocol thereof) that would allow us to skip whole directories if their contents haven’t changed.
Active CDN: The download protocol requires an active CDN server to be efficient. This allows us to optimize the actual bandwidth usage a lot (small protocol, optimal downloads) but this might be outweighed simply by not being able to use “standard” CDN servers.
A few days before rolling out the manifest downloading system, Veloren posted a dev blog announcing their new incremental downloading system . Veloren’s model simply uses HTTP range requests over their pre-existing zip file downloads, allowing them to use a regular CDN. I can’t say that if I was making the delta system from scratch now I wouldn’t use this method instead, but it is what it is.
Dictionaries : ZStd has support for dictionaries, allowing you to pre-share some data for compression between multiple frames (files, basically). This could allow us to reduce download & disk size even more in many cases. Some questions we need to ponder about before implementing this though: Do we permanently pack a preset of dictionaries with the launcher, or do we allow servers to dynamically generate a set of dictionaries for their content?
Binary deltas : We still can only send whole files when a file needs to be downloaded. The game’s compiled assemblies easily weigh more than half a megabyte. Ideally we would be able to supply binary patches instead, to only transmit the changes from the previous file versions. A challenge here is that the .dll
files don’t diff well, but I believe that with a specialized tool to re-organize them internally we could get huge savings.
Interrupting and resuming downloads : Right now the launcher needs to do a whole download in one go to actually store it to disk . If you already have files and are just downloading an update this isn’t a problem, but the hurdle of large initial downloads (fresh launcher, first ever connection) might prove problematic with people with poorer internet connections. Ideally the launcher could resume interrupted downloads with the files it already has.
Improving ACZ load performance : ACZ takes a long time to initialize on the server now. It’s not too bad, but I would prefer if it were faster (<1 second). This is purely down to lackluster design on System.IO.Compression.ZipArchive
making it impossible to efficiently handle zip files, nothing more. I couldn’t be arsed to make my own non-terrible zip file library, at least not yet.
Zstd Game State Compression (Technical) Contributed by PJB
As part of the above work on deltas I got a little familiar with Zstd, the modern compression algorithm used by it. I swapped out the old game state compressor with it for some speed ups.
We previously just used .NET’s DeflateStream
to do compression. The problem is that this API, like many, was not actually designed with any sort of performance in mind:
Because it’s a stream-based API, it always incurs at least one wasted memory copy that could be avoided in many cases. This is at least minor. You couldn’t really re-use DeflateStream
across multiple compressions. This means you would be constantly allocating and de-allocating native compression contexts and other garbage just to run a compression algo. So switching from Deflate to Zstd did not only provide the advantage of using an algorithm that wasn’t 28 years old, it also helped by allowing us to use a functional high-performance compression API. Hooray!
Grid Splitting (Technical) Contributed by metalgearsloth
Previously when you tried to saw a station in half there was no code detecting that a split had occurred which has now been added. Rather than checking every tile individually we group areas of tiles together as nodes and check those connections. This means that instead of potentially thousands of tiles we only check a handful of nodes to see if a split has occurred. The larger group of tiles is left as the original grid and the smaller group forms a new grid. Splitting off a solar array should be unnoticeable and sawing split station in half took ~250ms which we expect to get faster over time.
Here’s what the showgridnodes
debug command looks like:
Custom MIDI Soundfont Support Contributed by vulppine
MIDI sound fonts are now selectable by the end user in Robust Toolbox! They override any fonts loaded in by the server, and the default sound font used by your current system. This is beneficial for when you want to use other sound fonts in SS14 rather than the default one installed on your system, without having to replace any system files or deal with any configuration. In order to add any custom sound fonts to any Robust Toolbox game, you’ll need to go into the user configuration folder related to the game in question, and add any sound fonts you want into the ‘soundfonts’ folder.
Replaced Lidgren Encryption with Libsodium Contributed by PJB
Since we added account authentication, communication with the game server has mostly been AES encrypted. This was built using Lidgren’s NetEncryption
system and, well, it worked. If you check the code and you know a little bit about AES however… Yeah it reuses IVs on CBC mode. Yeah that makes it automatically broken. Hooray!
Because I am not a cryptographic expert I decided that the best way to fix this was to simply replace this with Libsodium’s AEAD XChaCha20-Poly1305 API . I trust that the crypto is not completely broken now. I also completely tore out Lidgren’s encryption support in our fork (it was evidently broken and didn’t integrate with the internals anyways).
There are some gotchas here though. The first thing is that .NET didn’t have an existing non-terrible Libsodium binding, so I had to make a partial binding for the APIs I care about myself: SpaceWizards.Sodium .
The second problem is that this change does have a noticeable increase on bandwidth usage. This is because proper encryption™ has more overhead in the form of AEAD and IV that has to be sent. Lidgren has a feature where it combines many net messages we send into fewer larger UDP packets. This is good, but the missed optimization here is that encryption runs before this combining. Ideally we would run encryption afterwards and only needing to encrypt single UDP packets, saving us some bandwidth. This would require deeper integration with Lidgren’s internals however, so this is something for the future.
I do believe that this new encryption system is at least faster CPU wise though, by the simple fact that .NET’s crypto API is pretty terrible and Libsodium’s isn’t. Just like the compression thing above!
It should be noted we’ve basically been maintaining Lidgren on our own for a while now, since upstream has stopped development. Our fork is SpaceWizards.Lidgren.Network .
SpaceWizards.HttpListener Contributed by PJB
Continuing the trend of forking and doing things ourself, a problem that came up while developing deltas above is that System.Net.HttpListener
was kinda bloody broken.
Let me back up for a second here. The .NET BCL has a type System.Net.HttpListener
which is basically a lightweight HTTP server you can embed in your app. This is great! The problem is that it’s basically completely abandoned by .NET in favor of “just use ASP.NET Core lol” and is no longer being maintained.
The type was originally designed to wrap the http.sys
Windows API. Outside Windows, an implementation that originates from Mono is now used. This has some funny consequences:
The implementations are not consistent between Windows and Mac/Linux. On Windows, listening to this HTTP listener requires admin access. On Mac/Linux, the implementation is extremely buggy. To solve (1) and (2) we opted to manually compile the managed (Mac/Linux) version of the type and use it on Windows too. This already required us to copy the code into its own repo. This was done via a submodule though, so using it wasn’t that convenient for other projects.
(3) however cropped up a lot while I was working on the delta-updates stuff, so I had to make multiple fixes myself to make this work. I didn’t bother to upstream these since it’s a ton of effort and there seems to be a lack of interest.
Because of this I decided to make a proper NuGet package and such for the effort, so it’s easier to consume by others. Anyways uhhh, have SpaceWizards.HttpListener !
Credits Contributors Since Last Progress Report 20kdc, Alainx277, AugustEymann, CrzyPotato, Daemon, Delete69, DogZeroX, DrSmugleaf, DubiousDoggo, ElectroSR, Emisse, EmoGarbage404, Fishfish458, freeman2651, HoofedEar, ike709, juliangiebel, KaiShibaa, keronshb, Leander-0, Macoron, metalgearsloth, Mirino97, mirrorcult, moony, Morb0, Pangogie, PaulRitter, Peptide90, PJB, ProfanedBane, Radosvik, Rane, Saakra, ShadowCommander, Snowni, Soupstraw, TaralGit, TimrodDX, UKNOWH, Veritius, vulppine, wrexbe, Zumorica
Patrons Alex Fry, Altana, Anthony Fleck, AquaDraco, Austin Nelson, Blaise M., Bobberunio, Callum Tubrett, Collin R Terrell, Cormos Lemming, CPM311, Dan Griskardian, Daniel Thompson, Darren Brady, Daskata, DramaBuns, Durp, Eric VW, Ethan Keller, Evan Armstrong, Farewell Fire, Florian, Frege Beach, grhmhome, Hamcha, hh, Jack Rose, James Andrew Peoples Jr, Jex N, Joel, John Edward Hamilton Barchard, Joshington Awesomahee, JustanAnus, Koyki, Kris Piper, KrystalDisc, liltenhead, Mikhail, Miniwoffer, Mono, Nicholas Hillblom, Oxyclean114, Peter “Azmond” Newhouse, Phillip Inman, Ramiro Agis, Robin Rottstock, Seija, Serathis, SnapKick, Spiffyfishface, spinnermaster, Taylor, ThatGuyGW, The Hateful Flesh, Tom Cruize, Tomeno, Valinov, vifs_vestige, Viridian, Will M., Wrexbe, Zandario
\ No newline at end of file
diff --git a/post/22-06-25-progress-report-35/index.html b/post/22-06-25-progress-report-35/index.html
index cbb15da..7f40084 100644
--- a/post/22-06-25-progress-report-35/index.html
+++ b/post/22-06-25-progress-report-35/index.html
@@ -1,3 +1,5 @@
-
Progress Report #35: Going Nuclear - SS14
Progress Report #35: Going Nuclear Contributed by DrSmugleaf, ike709, & Timrod Saturday June 25, 2022 Nuclear Operatives, magic, and more!
Content Nuclear Operatives Contributed by PaulRitter & metalgearsloth
The Nanotrasen Quarterly Threat Assessment™ has been published, and it seems the Syndicate are now employing Nuclear Operatives hell-bent on blowing stations back to the Stone Age. All Nanotrasen facilities are advised to be on alert and to neutralize these operatives with extreme prejudice. Additionally, Captains are instructed to ensure the location and safety of the Nuclear Authentication Disk at all times.
Secret Contributed by moony & metalgearsloth
With Nuke Ops comes Secret, the new (to SS14) default mode that doesn’t tell you who or what the antags are, or if there’s any at all to begin with.
Secret’s true mode can be influenced by weighing modes differently, requiring certain conditions such as minimum/maximum players, and more.
Not immediately knowing what antagonist to counter should spice up the rounds nicely.
Station Alert Levels Contributed by vulppine & Morb0
Code Red! All hands on deck! Battlestations!
That’s right, the communications console can now designate a station’s alert level, thus keeping the crew informed of how fearful they should be for their lives. Central Command also has access to even higher tiers of alert level. In the event of a Delta or Epsilon alert, please pray to your deity of choice or hide in the nearest available fridge.
Console Command Completion Contributed by PJB
There is now a system for console command completions. Completions are easy enough to write, and a decent chunk of commands already have them.
Redial Contributed by 20kdc
Previously, when the server updated or restarted, players would have to close the game and reconnect from the launcher. While the restart of the game still needs to happen (due to needing to update the client as well), it has now been automated - the restart occurs simply by the press of a button.
New Parallax Contributed by DogZeroX
Astronomers are baffled after noticing that space looks completely different from how it did yesterday, but many agree that the new look is much prettier.
Suppermatter Contributed by PJB
One of the most common engines has finally arrived… in the form of a delicious and energy-rich meal! …What?
Magic Spellbook Contributed by keronshb
The Department of Occult Affairs has stumbled across a genuine magic spellbook capable of feats such as teleportation, creating magical barriers, summoning creatures, and more. Crewmembers are advised to be on the lookout for runes and other mystical shenanigans.
FORTI GY AMA
Flavortext Contributed by Veritius
Crewmembers can now provide a short description of any not-readily-apparent physical characteristics or any other aspects they wish to describe about themselves.
If you intend to abuse this opportunity, refer to the section immediately below this one.
New Smites Contributed by moony
Admins now have access to twenty-one (21) new smites for applying creative punishments to crewmembers that don’t quite earn a ban. Rather than go through all of them, we’re just going to leave you with a picture containing most of the smite icons and let you work out for yourself what these fresh hells might entail. Don’t get yourself banished to the chess dimension.
Space Ambience Contributed by ike709
It turns out sound does travel in the vacuum of space, and it’s full of beats to relax to as you drift through the endless void waiting for your oxygen to run out! Below is only a short preview, but you can listen to the two full tracks here and here .
Rebalanced Space Damage Contributed by EmoGarbage404 & juliangiebel
Due to the high fatality rate of unprotected EVAs and hull breaches—and more importantly the cost of cloning replacement crew—Central Command has retooled the genetic makeup of crewmembers to ensure a minimum of one (1) minute of unprotected survivability in the harsh vacuum of space.
Additionally, there’s a new medipen in survival boxes to help with space exposure and some emergency lockers now contain emergency suits.
Nanotrasen Interns Contributed by mirrorcult
Someone informed HR about the concept of unpaid interns, so all entry-level employees have been demoted reassigned to the new role of departmental interns. They’ll be paid in experience, and if they delivering enough coffee to their superiors they’ll be promoted to full employees in no time.
The four new jobs include:
Technical Assistant (Engineering) Medical Intern (Medical) Service Worker (Service) Security Cadet (Security) Additionally, Assistants have been demoted to Passengers. We both know they weren’t actually assisting anyone.
Contributed by EmoGarbage404
It’s a bird… It’s a mouse… It’s… a crewmember? Entities are now capable of transforming into different entities and back to their original form, unless of course an admin smites you.
Immovable Rod Contributed by mirrorcult
All stations have a new hazard to be on the lookout for, the Immovable Rod. It’ll go through a station like a pulse rifle through a greyshirt, so try not to cross paths with any.
And remember—the rod is immovable, the rest of the universe is what’s moving. Pray that it never encounters an unstoppable force.
Contributed by mirrorcult
Variety is the spice of life, and as such it’s now possible for things to have random names or descriptions. You won’t believe all the things ATV can stand for.
Industrial & Advanced Welders Contributed by Peptide90
Engineers have some new welders that they can occasionally find in their lockers or on salvage wrecks: The Industrial Welder with a 250u fuel tank and the Advanced Industrial Welder which is 1.3x faster.
The total range of welders is shown below and goes from left to right: Experimental, Advanced Industrial, Industrial, Standard, Mini (Emergency)
Skeletons Contributed by EmoGarbage404
To alleviate ongoing labor shortages, Central Command has began experimenting with using necromancy on deceased crewmembers. They are resilient against various environmental hazards, but susceptible to physical trauma and may fall apart. Skeletons in such a state will need to be reassembled by hand.
Cat Ears Contributed by Peptide90
OwO what’s this? (Author’s Note: Never writing that again…) Traitors can now waste their telecrystals on a set of cat ears. Alternatively, it can be rarely found as loot. Side effects of wearing cat ears include being forced to talk like an idiot.
Extended Access Contributed by PJB
Central Command acknowledges that doing your job can be a bit harder on undercrewed stations, and in such cases your ID cards will have additional access enabled to make your job easier.
For example, when extended access is in effect the Botanist will have Kitchen access and Medical Doctors will have Chemistry access added on top of their normal access.
New Crates Contributed by youarereadingthis, magmodius, Peptide90, Macoron, lapatison, & keronshb
Cargo has received a manifest of new crates available for order, including:
Shuttle Assembly Crate Electronics Crate Mice Crate Kitchen Supplies Crate Rumor has it that the Syndicate are now offering their agents the chance to buy surplus crates, with random gear at extremely reduced prices.
Additionally, after a few lawsuits the latches on crates have been loosened a bit and will now allow trapped crewmembers to resist out of them.
Markings Contributed by vulppine & DogZeroX
In an effort to improve morale, Central Command has relaxed the dress code policy to allow various tattoos, extrusions, and other markings on company property employees' bodies.
Wires Refactor Contributed by vulppine
All engineers are advised that a new, cheaper more efficient circuit board supplier has resulted in doors and potentially other machines becoming much more dangerous and more varied in wire functionality. Wires can also shock anyone who touches them without insulated gloves. Additionally, cutting a door’s power wire now causes it to become electrified and extremely dangerous until a multitool is used to reset the door’s power.
Better Spacewind, Removed Spacewind Contributed by Tomeno & DogZeroX
Explosive decompression, also known as space wind, flows a bit differently now and should generally yeet people in the direction of pressure differentials, as shown in the video below. It’s a lot more realistic and makes more sense than the existing algorithm.
However… Space wind has also been entirely disabled for the time being pending further changes. This is a config option, so other servers can reenable it if they wish and take advantage of the improved yeeting showcased in this video.
Round Start & End Audio Contributed by metalgearsloth
Some audio changes have been made to round start/end, including:
An audio ping now denotes that the round is starting, so you know it’s time to Alt+Tab from Reddit or whatever Lobby music will play again at round-end (unless disabled in audio settings) APC destroyed mission accomplished Combat Changes Contributed by mirrorcult
The new Employee Defensive Combat Training Initiative™ has rolled out some new policies for its hand-to-hand combat training. Crewmembers will now perform a direct attack when directly hitting something, and will wide-attack in other circumstances.
Power Monitoring Console Contributed by 20kdc
The Engineering Department has received a new console to monitor both power sources and loads. No more excuses for generating insufficient power or accidentally disconnecting all of the SMES units!
Power Sink Contributed by Veritius
The Syndicate have provided traitors with another tool from SS13, the power sink. This bad boy can drain up to 300 kW and then goes out with a bang.
Speech Noises Contributed by hubismal
Central Command noticed that crewmembers and vending machines didn’t actually make any audible sounds when speaking, and this… deficiency… has now been rectified.
Typing Indicator Contributed by Macoron
Central Command has noted a 30% decrease in awkward conversations after the addition of chat bubbles, which now pop up when someone is typing.
Mapping Waystation Contributed by Timrod
Waystation, a map originally from /vg/station, has been recreated in SS14 to replace Packed Station as a low/mid pop map.
Technical Client Profiling System Contributed by PJB
I wrote a simple log-based profiling system, with the intent of making it easier to help weed out stutters and other performance issues. The internal data stored is extremely simple, so performance overhead at runtime is absolutely minimal. Profiles are viewed in the pop-out developer window, to avoid cluttering the main game. It’s not the most advanced tool, but it was certainly fun to write.
Credits Contributors Since Last Progress Report 555 commits, authored by: 20kdc, abregado, Absolute-Potato, Acruid, Clyybber, Daemon, DogZeroX, DrSmugleaf, efzapa, ElectroSR, Emisse, EmoGarbage404, Fishfish458, freeman2651, HoofedEar, hubismal, ike709, juliangiebel, JustinTrotter, keronshb, lapatison, Macoron, magmodius, metalgearsloth, Mirino97, mirrorcult, MLGTASTICa, moony, Morb0, PaulRitter, Peptide90, PJB, Putnam3145, Rane, Rinzii, rok-povsic, ShadowCommander, TheIntoxicatedCat, themias, TimrodDX, Tomeno, UKNOWH, Veritius, vulppine, wrexbe, WTCWR68, youarereadingthis, Zumorica
Patrons Alex Fry, Altana, Anthony Fleck, AquaDraco, Austin Nelson, Blaise M., Bobberunio, Callum Tubrett, Cormos Lemming, CPM311, Dan Griskardian, Daniel Thompson, Darren Brady, Daskata, DramaBuns, Durp, Eric VW, Ethan Keller, Evan Armstrong, Farewell Fire, Florian, grhmhome, Hamcha, hh, Jack Rose, James Andrew Peoples Jr, Jex N, Joel, John Edward Hamilton Barchard, Joshington Awesomahee, Koyki, Kris Piper, KrystalDisc, liltenhead, LPGaming, Matthew C Miklaucic, Mikhail, Miniwoffer, Mono, Nicholas Hillblom, osborn, Oxyclean114, Peter “Azmond” Newhouse, Phillip Inman, Ramiro Agis, Robin Rottstock, Seija, Serathis, Serianas, Simon Lapatin, Spiffyfishface, spinnermaster, Taylor, ThatGuyGW, The Hateful Flesh, Tomeno, Uinseann, Valinov, vifs_vestige, Viridian, Will M., Wrexbe, Zandario
\ No newline at end of file
+
Progress Report #35: Going Nuclear - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Progress Report #35: Going Nuclear Contributed by DrSmugleaf, ike709, & Timrod Saturday June 25, 2022 Nuclear Operatives, magic, and more!
Content Nuclear Operatives Contributed by PaulRitter & metalgearsloth
The Nanotrasen Quarterly Threat Assessment™ has been published, and it seems the Syndicate are now employing Nuclear Operatives hell-bent on blowing stations back to the Stone Age. All Nanotrasen facilities are advised to be on alert and to neutralize these operatives with extreme prejudice. Additionally, Captains are instructed to ensure the location and safety of the Nuclear Authentication Disk at all times.
Secret Contributed by moony & metalgearsloth
With Nuke Ops comes Secret, the new (to SS14) default mode that doesn’t tell you who or what the antags are, or if there’s any at all to begin with.
Secret’s true mode can be influenced by weighing modes differently, requiring certain conditions such as minimum/maximum players, and more.
Not immediately knowing what antagonist to counter should spice up the rounds nicely.
Station Alert Levels Contributed by vulppine & Morb0
Code Red! All hands on deck! Battlestations!
That’s right, the communications console can now designate a station’s alert level, thus keeping the crew informed of how fearful they should be for their lives. Central Command also has access to even higher tiers of alert level. In the event of a Delta or Epsilon alert, please pray to your deity of choice or hide in the nearest available fridge.
Console Command Completion Contributed by PJB
There is now a system for console command completions. Completions are easy enough to write, and a decent chunk of commands already have them.
Redial Contributed by 20kdc
Previously, when the server updated or restarted, players would have to close the game and reconnect from the launcher. While the restart of the game still needs to happen (due to needing to update the client as well), it has now been automated - the restart occurs simply by the press of a button.
New Parallax Contributed by DogZeroX
Astronomers are baffled after noticing that space looks completely different from how it did yesterday, but many agree that the new look is much prettier.
Suppermatter Contributed by PJB
One of the most common engines has finally arrived… in the form of a delicious and energy-rich meal! …What?
Magic Spellbook Contributed by keronshb
The Department of Occult Affairs has stumbled across a genuine magic spellbook capable of feats such as teleportation, creating magical barriers, summoning creatures, and more. Crewmembers are advised to be on the lookout for runes and other mystical shenanigans.
FORTI GY AMA
Flavortext Contributed by Veritius
Crewmembers can now provide a short description of any not-readily-apparent physical characteristics or any other aspects they wish to describe about themselves.
If you intend to abuse this opportunity, refer to the section immediately below this one.
New Smites Contributed by moony
Admins now have access to twenty-one (21) new smites for applying creative punishments to crewmembers that don’t quite earn a ban. Rather than go through all of them, we’re just going to leave you with a picture containing most of the smite icons and let you work out for yourself what these fresh hells might entail. Don’t get yourself banished to the chess dimension.
Space Ambience Contributed by ike709
It turns out sound does travel in the vacuum of space, and it’s full of beats to relax to as you drift through the endless void waiting for your oxygen to run out! Below is only a short preview, but you can listen to the two full tracks here and here .
Rebalanced Space Damage Contributed by EmoGarbage404 & juliangiebel
Due to the high fatality rate of unprotected EVAs and hull breaches—and more importantly the cost of cloning replacement crew—Central Command has retooled the genetic makeup of crewmembers to ensure a minimum of one (1) minute of unprotected survivability in the harsh vacuum of space.
Additionally, there’s a new medipen in survival boxes to help with space exposure and some emergency lockers now contain emergency suits.
Nanotrasen Interns Contributed by mirrorcult
Someone informed HR about the concept of unpaid interns, so all entry-level employees have been demoted reassigned to the new role of departmental interns. They’ll be paid in experience, and if they delivering enough coffee to their superiors they’ll be promoted to full employees in no time.
The four new jobs include:
Technical Assistant (Engineering) Medical Intern (Medical) Service Worker (Service) Security Cadet (Security) Additionally, Assistants have been demoted to Passengers. We both know they weren’t actually assisting anyone.
Contributed by EmoGarbage404
It’s a bird… It’s a mouse… It’s… a crewmember? Entities are now capable of transforming into different entities and back to their original form, unless of course an admin smites you.
Immovable Rod Contributed by mirrorcult
All stations have a new hazard to be on the lookout for, the Immovable Rod. It’ll go through a station like a pulse rifle through a greyshirt, so try not to cross paths with any.
And remember—the rod is immovable, the rest of the universe is what’s moving. Pray that it never encounters an unstoppable force.
Contributed by mirrorcult
Variety is the spice of life, and as such it’s now possible for things to have random names or descriptions. You won’t believe all the things ATV can stand for.
Industrial & Advanced Welders Contributed by Peptide90
Engineers have some new welders that they can occasionally find in their lockers or on salvage wrecks: The Industrial Welder with a 250u fuel tank and the Advanced Industrial Welder which is 1.3x faster.
The total range of welders is shown below and goes from left to right: Experimental, Advanced Industrial, Industrial, Standard, Mini (Emergency)
Skeletons Contributed by EmoGarbage404
To alleviate ongoing labor shortages, Central Command has began experimenting with using necromancy on deceased crewmembers. They are resilient against various environmental hazards, but susceptible to physical trauma and may fall apart. Skeletons in such a state will need to be reassembled by hand.
Cat Ears Contributed by Peptide90
OwO what’s this? (Author’s Note: Never writing that again…) Traitors can now waste their telecrystals on a set of cat ears. Alternatively, it can be rarely found as loot. Side effects of wearing cat ears include being forced to talk like an idiot.
Extended Access Contributed by PJB
Central Command acknowledges that doing your job can be a bit harder on undercrewed stations, and in such cases your ID cards will have additional access enabled to make your job easier.
For example, when extended access is in effect the Botanist will have Kitchen access and Medical Doctors will have Chemistry access added on top of their normal access.
New Crates Contributed by youarereadingthis, magmodius, Peptide90, Macoron, lapatison, & keronshb
Cargo has received a manifest of new crates available for order, including:
Shuttle Assembly Crate Electronics Crate Mice Crate Kitchen Supplies Crate Rumor has it that the Syndicate are now offering their agents the chance to buy surplus crates, with random gear at extremely reduced prices.
Additionally, after a few lawsuits the latches on crates have been loosened a bit and will now allow trapped crewmembers to resist out of them.
Markings Contributed by vulppine & DogZeroX
In an effort to improve morale, Central Command has relaxed the dress code policy to allow various tattoos, extrusions, and other markings on company property employees’ bodies.
Wires Refactor Contributed by vulppine
All engineers are advised that a new, cheaper more efficient circuit board supplier has resulted in doors and potentially other machines becoming much more dangerous and more varied in wire functionality. Wires can also shock anyone who touches them without insulated gloves. Additionally, cutting a door’s power wire now causes it to become electrified and extremely dangerous until a multitool is used to reset the door’s power.
Better Spacewind, Removed Spacewind Contributed by Tomeno & DogZeroX
Explosive decompression, also known as space wind, flows a bit differently now and should generally yeet people in the direction of pressure differentials, as shown in the video below. It’s a lot more realistic and makes more sense than the existing algorithm.
However… Space wind has also been entirely disabled for the time being pending further changes. This is a config option, so other servers can reenable it if they wish and take advantage of the improved yeeting showcased in this video.
Round Start & End Audio Contributed by metalgearsloth
Some audio changes have been made to round start/end, including:
An audio ping now denotes that the round is starting, so you know it’s time to Alt+Tab from Reddit or whatever Lobby music will play again at round-end (unless disabled in audio settings) APC destroyed mission accomplished Combat Changes Contributed by mirrorcult
The new Employee Defensive Combat Training Initiative™ has rolled out some new policies for its hand-to-hand combat training. Crewmembers will now perform a direct attack when directly hitting something, and will wide-attack in other circumstances.
Power Monitoring Console Contributed by 20kdc
The Engineering Department has received a new console to monitor both power sources and loads. No more excuses for generating insufficient power or accidentally disconnecting all of the SMES units!
Power Sink Contributed by Veritius
The Syndicate have provided traitors with another tool from SS13, the power sink. This bad boy can drain up to 300 kW and then goes out with a bang.
Speech Noises Contributed by hubismal
Central Command noticed that crewmembers and vending machines didn’t actually make any audible sounds when speaking, and this… deficiency… has now been rectified.
Typing Indicator Contributed by Macoron
Central Command has noted a 30% decrease in awkward conversations after the addition of chat bubbles, which now pop up when someone is typing.
Mapping Waystation Contributed by Timrod
Waystation, a map originally from /vg/station, has been recreated in SS14 to replace Packed Station as a low/mid pop map.
Technical Client Profiling System Contributed by PJB
I wrote a simple log-based profiling system, with the intent of making it easier to help weed out stutters and other performance issues. The internal data stored is extremely simple, so performance overhead at runtime is absolutely minimal. Profiles are viewed in the pop-out developer window, to avoid cluttering the main game. It’s not the most advanced tool, but it was certainly fun to write.
Credits Contributors Since Last Progress Report 555 commits, authored by: 20kdc, abregado, Absolute-Potato, Acruid, Clyybber, Daemon, DogZeroX, DrSmugleaf, efzapa, ElectroSR, Emisse, EmoGarbage404, Fishfish458, freeman2651, HoofedEar, hubismal, ike709, juliangiebel, JustinTrotter, keronshb, lapatison, Macoron, magmodius, metalgearsloth, Mirino97, mirrorcult, MLGTASTICa, moony, Morb0, PaulRitter, Peptide90, PJB, Putnam3145, Rane, Rinzii, rok-povsic, ShadowCommander, TheIntoxicatedCat, themias, TimrodDX, Tomeno, UKNOWH, Veritius, vulppine, wrexbe, WTCWR68, youarereadingthis, Zumorica
Patrons Alex Fry, Altana, Anthony Fleck, AquaDraco, Austin Nelson, Blaise M., Bobberunio, Callum Tubrett, Cormos Lemming, CPM311, Dan Griskardian, Daniel Thompson, Darren Brady, Daskata, DramaBuns, Durp, Eric VW, Ethan Keller, Evan Armstrong, Farewell Fire, Florian, grhmhome, Hamcha, hh, Jack Rose, James Andrew Peoples Jr, Jex N, Joel, John Edward Hamilton Barchard, Joshington Awesomahee, Koyki, Kris Piper, KrystalDisc, liltenhead, LPGaming, Matthew C Miklaucic, Mikhail, Miniwoffer, Mono, Nicholas Hillblom, osborn, Oxyclean114, Peter “Azmond” Newhouse, Phillip Inman, Ramiro Agis, Robin Rottstock, Seija, Serathis, Serianas, Simon Lapatin, Spiffyfishface, spinnermaster, Taylor, ThatGuyGW, The Hateful Flesh, Tomeno, Uinseann, Valinov, vifs_vestige, Viridian, Will M., Wrexbe, Zandario
\ No newline at end of file
diff --git a/post/22-07-27-progress-report-36/index.html b/post/22-07-27-progress-report-36/index.html
index 6ee1bc2..9c74248 100644
--- a/post/22-07-27-progress-report-36/index.html
+++ b/post/22-07-27-progress-report-36/index.html
@@ -1,35 +1,37 @@
-
Progress Report #36: Too Much of a Good Thing - SS14
Progress Report #36: Too Much of a Good Thing Contributed by DrSmugleaf & ike709 Wednesday July 27, 2022 There’s so much new content that at least one Progress Report author has been driven mad! We’ve even surpassed /tg/station 13 by contributions per month.
Content Surpassing /tg/station 13 Contributed by everyone
Space Station 14 is officially being developed at a faster pace than the most active SS13 codebase, /tg/station. At the time of writing SS14 has 520 merged and 50 open pull requests (code changes) in the last 30 days, compared to 326 merged and 106 open for /tg/.
And that’s not even counting changes to Robust Toolbox.
Gun Refactor Contributed by metalgearsloth, ElectroSR, taral & probably others
Guns have been refactored in their entirety. In fact there’s been so many changes to guns over the course of June that we, your benevolent Progress Report authors, lost track of them all.
Here’s the highlights:
Guns now have clientside prediction and are more responsive Updated hitscan effects Updated sprites Added fire rate selectors (e.g. semi-auto and full-auto) Rebalanced the weight, accuracy, and bullet spread of many guns to give different types (i.e. rifles versus SMGs) more distinction. These changes are ongoing. Cleaned up gun code a lot to enable sillier and more unique guns Added a development tool for visualizing bullet spread
Item Pricing & Piracy Contributed by moony
Most things now have prices assigned allowing Cargo to, for example, sell fuel tanks for a couple hundred spacebucks. Consequentially, an increase of space piracy has been detected in the sector.
Attempts to kidnap and sell the Clown will be refused by Central Command.
Drug & Drunk Shaders Contributed by ElectroSR
To save costs and improve employee morale, Central Command has disabled the drug & alcohol inhibitors embedded in everyone’s spinal cord, and both vices should now have much more substantial effects. Employees are reminded to avoid getting absolutely blasted while they’re on the clock.
Here’s what the drug effects look like (Author’s Note: This is not what it looks like IRL):
Department Radios Contributed by Morb0, ElectroSR, metalgearsloth, & notafet
Engineering finally bothered to install the rest of the station’s telecommunications equipment, and the network now has sufficient bandwidth for departmental radio channels. The crew can now yell exclusively at their own department instead of trying to talk over each other on the Common frequency all the time.
Modular Landmines Contributed by mirrorcult
The lads down in the Department of Interstellar War Crimes™ have developed a new modular landmine platform which accepts customized payloads. Casualties guaranteed or your money back!
Make sure to watch your step.
Rat King Contributed by mirrorcult & EmoGarbage404
His royal highness the Rat King has been spotted in maintenance aboard Space Station 14. The King and his loyal servants intend to eat the entire station’s food supply while leaving plague and rot in their wake. Research & Development has been tasked with developing extra-large mousetraps.
Cargo Shuttle, Evac Shuttle, & Docking Interface Contributed by metalgearsloth
Shuttles have finally arrived! Unlike their SS13 predecessors, the shuttles Actually Move™ and can be piloted around. The Cargo Techs now have an additional responsibility — they need to remotely bring the cargo shuttle in for docking once it arrives from Central Command. There’s also a fancy docking interface to make that easier.
Try to avoid slamming into any Salvage Miners!
Projectile Spells Contributed by mirrorcult
Wizards have found some new ancient tomes with detailed information on casting projectile spells, fireballs, and the like. Be sure to cast Dodge™ whenever one is headed your way!
Emergency Response Team Contributed by Peptide90
Central Command has begun sending Emergency Response Teams™ to any stations experiencing catastrophic failure and imminent death technical issues.
Jetpacks Contributed by metalgearsloth & lzimann
Nuclear Operatives and crewmembers should have an easier time getting around during EVAs thanks to a brand new set of jetpacks.
Miasma Contributed by Rane
“For when the morning breezes blow toward the town at sunrise, if they bring with them mist from marshes and, mingled with the mist, the poisonous breath of creatures of the marshes to be wafted into the bodies of the inhabitants, they will make the site unhealthy.” - Vitruvius
Rotting corpses will now produce miasma, a toxic and disease-ridden gas. Proper corpse disposal (or even just putting them on ice) is now essential for the crew’s health.
Space Dragons & Sushi Contributed by CrudeWax
Salvage miners have discovered a new species of space fauna: the Space Dragon! How does a dragon fly in the vacuum of space? Why is it allied with Space Carp? Who cares!
In response, the Chef has been armed with a variety of recipes for turning space carp into sushi.
Forensics Contributed by Rane, Soupstraw, & ike709
Security has been equipped with a set of forensic scanners that can detect the fingerprints or glove fibers that any pesky criminals leave behind at a crime scene. Preliminary reports indicate that chain-smoking while using the scanner doubles the likelihood of solving crimes while only tripling the likelihood of lung cancer. Now that’s efficiency!
Device Network Configuration Contributed by juliangiebel
A new Multitool™ version has been released with the ability to configure device networks. Setting up air alarms has never been so easy!
Mapping Lighthouse Station Contributed by OldDanceJacket
A new, completely original station has been created by OldDanceJacket.
Central Command Contributed by LittleBuilderJane
LittleBuilderJane has a spicy new take on the Central Command station, which now accessible via the evac shuttle.
Technical Entity Creation Optimizations Contributed by PJB
While many people would already say that SS14 runs better than BYOND SS13, there are still many performance problems. A lot of the core engine has some poor design that could do with a tune up.
One of the biggest problems were consistent stutters when moving around. This is because the networking system currently sends new entities from the server on chunk boundary, and these stutters were the result of new entities being really expensive to instantiate. There was some easy low-hanging fruit to grab at here that immediately stood out in a profiler, but the actually involved work here was related to optimizing event bus.
Event bus is the system that dispatches gameplay logic events. It has the ability to dispatch “directed” events on entities, based on the components said entities have. In short, a system can subscribe to an event:
SubscribeLocalEvent < LightReplacerComponent , InteractUsingEvent >( HandleInteract );
-
And then these events can be sent on an entity like this:
var interactUsingEvent = new InteractUsingEvent ( user , used , target , clickLocation );
-RaiseLocalEvent ( target , interactUsingEvent , true );
-
The table of events to raise on which components is stored per-entity, since we assume each entity can have its own set of components. A large amount of work on entity creation was building this table incrementally.
The low hanging fruit (so somewhat medium hanging) is removing special “component events” from the tables. These are events like ComponentAdd
which are sent only to one component at once (as opposed to all listening components on an entity). They don’t use the regular event tables, but were still being tracked there uselessly. This already cut down a massive amount of subscriptions, saving work and memory.
The real problem to tackle is the data layout of the event table itself. Previously, the data was stored like this:
// eUid -> EventType -> { CompType1, ... CompTypeN }
- internal Dictionary < EntityUid , Dictionary < Type , HashSet < CompIdx >>> _ entEventTables = new ();
-
(a CompIdx
is a simple integer that maps 1:1 to a component type. A little faster and more compact to work with in some cases)
Realistically, the only thing we need to be able to do is to iterate the list of subscribed components. We do not need properties like O(1) delete and unique keys from HashSet<T>
. Allocating a bunch of these hash sets is expensive , and most of them don’t contain much data.
A more optimal data structure is a simple linked list of subscriptions:
internal Dictionary < EntityUid , EventTable > _ entEventTables = new ();
-
-internal sealed class EventTable
-{
- private const int InitialListSize = 8 ;
-
- // Event -> { Comp, Comp, ... } is stored in a simple linked list.
- // EventIndices contains indices into ComponentLists where linked list nodes start.
- // Free contains the first free linked list node, or -1 if there is none.
- // Free nodes form their own linked list.
- // ComponentList is the actual region of memory containing linked list nodes.
- public readonly Dictionary < Type , int > EventIndices = new ();
- public int Free ;
- public EventTableListEntry [] ComponentLists = new EventTableListEntry [ InitialListSize ];
-
- public EventTable ()
- {
- InitEventTableFreeList ( ComponentLists , ComponentLists . Length , 0 );
- Free = 0 ;
- }
-}
-
-internal struct EventTableListEntry
-{
- public int Next ;
- public CompIdx Component ;
-}
-
Iteration and insertion are now even easier to do than before, because linked lists are very easy to work with. Removal is O(n) now, but it probably won’t ever be a problem.
Critically, we use a single array buffer to store the linked list data per entity. This drastically cuts down on the count of objects and complexity of the object graph, drastically reducing memory and GC overhead. Reminder that a heap object in .NET has 16 bytes of overhead, and hash sets are complex!
This system provides very good savings, but there is still a lot of things that can be improved about it. Ideally we would be able to pre-cache event tables for entity prototypes, so we can just copy-on-write the event tables when constructing entities. The current problem with this approach is that entity creation is still too dynamic (AddComponent()
from inside component initializations…) which would make this complex and gnarly to implement. Making entity creation more rigid is on our mind, but it’ll still take more work to be able to get there.
Credits Contributors Since Last Progress Report 448 content pull requests, authored by: 20kdc, Ablankmann, Acruid, Andre19926, asperger-sind, CrudeWax, Daemon, Delete69, DogZeroX, DrSmugleaf, ElectroSR, Emisse, EmoGarbage404, greenrock64, HoofedEar, hubismal, ike709, jessicamaybe, juliangiebel, Just-a-Unity-Dev, KaiShibaa, keronshb, KIBORG04, lapatison, LittleBuilderJane, LudwigVonChesterfield, Macoron, metalgearsloth, Mirino97, mirrorcult, moony, Morb0, OldDanceJacket, Pangogie, PaulRitter, Peptide90, PJB3005, ProfanedBane, Rane, Ranger6012, ScalyChimp, SirDragooon, TaralGit, TekuNut, themias, TimrodDX, UKNOWH, Veritius, Visne, vulppine, WilliamECrew, wrexbe, youarereadingthis, Zumorica
Patrons Alex Fry, Altana, Anthony Fleck, AquaDraco, Austin Nelson, Blaise M., Bobberunio, Brandon Campbell, Callum Tubrett, Cormos Lemming, CPM311, Dan Griskardian, Daniel Thompson, Darren Brady, Daskata, DramaBuns, Durp, Eric VW, Ethan Keller, Evan Armstrong, Farewell Fire, Florian, Gothryd, grhmhome, Hamcha, hh, Jack Rose, James Andrew Peoples Jr, Jex N, Joel, John Edward Hamilton Barchard, Joshington Awesomahee, KevKev, Koyki, Kris Piper, KrystalDisc, liltenhead, LPGaming, Matthew C Miklaucic, Mikhail, Mono, Nicholas Hillblom, osborn, Oxyclean114, Peter “Azmond” Newhouse, Phillip Inman, Ramiro Agis, Robin Rottstock, Seija, Serathis, Serianas, Simon Lapatin, Spiffyfishface, spinnermaster, ThatGuyGW, The Hateful Flesh, Tomeno, Uinseann, Valinov, vifs_vestige, Viridian, Will M., William Grondin, Wrexbe, Zandario
\ No newline at end of file
+
Progress Report #36: Too Much of a Good Thing - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Progress Report #36: Too Much of a Good Thing Contributed by DrSmugleaf & ike709 Wednesday July 27, 2022 There’s so much new content that at least one Progress Report author has been driven mad! We’ve even surpassed /tg/station 13 by contributions per month.
Content Surpassing /tg/station 13 Contributed by everyone
Space Station 14 is officially being developed at a faster pace than the most active SS13 codebase, /tg/station. At the time of writing SS14 has 520 merged and 50 open pull requests (code changes) in the last 30 days, compared to 326 merged and 106 open for /tg/.
And that’s not even counting changes to Robust Toolbox.
Gun Refactor Contributed by metalgearsloth, ElectroSR, taral & probably others
Guns have been refactored in their entirety. In fact there’s been so many changes to guns over the course of June that we, your benevolent Progress Report authors, lost track of them all.
Here’s the highlights:
Guns now have clientside prediction and are more responsive Updated hitscan effects Updated sprites Added fire rate selectors (e.g. semi-auto and full-auto) Rebalanced the weight, accuracy, and bullet spread of many guns to give different types (i.e. rifles versus SMGs) more distinction. These changes are ongoing. Cleaned up gun code a lot to enable sillier and more unique guns Added a development tool for visualizing bullet spread
Item Pricing & Piracy Contributed by moony
Most things now have prices assigned allowing Cargo to, for example, sell fuel tanks for a couple hundred spacebucks. Consequentially, an increase of space piracy has been detected in the sector.
Attempts to kidnap and sell the Clown will be refused by Central Command.
Drug & Drunk Shaders Contributed by ElectroSR
To save costs and improve employee morale, Central Command has disabled the drug & alcohol inhibitors embedded in everyone’s spinal cord, and both vices should now have much more substantial effects. Employees are reminded to avoid getting absolutely blasted while they’re on the clock.
Here’s what the drug effects look like (Author’s Note: This is not what it looks like IRL):
Department Radios Contributed by Morb0, ElectroSR, metalgearsloth, & notafet
Engineering finally bothered to install the rest of the station’s telecommunications equipment, and the network now has sufficient bandwidth for departmental radio channels. The crew can now yell exclusively at their own department instead of trying to talk over each other on the Common frequency all the time.
Modular Landmines Contributed by mirrorcult
The lads down in the Department of Interstellar War Crimes™ have developed a new modular landmine platform which accepts customized payloads. Casualties guaranteed or your money back!
Make sure to watch your step.
Rat King Contributed by mirrorcult & EmoGarbage404
His royal highness the Rat King has been spotted in maintenance aboard Space Station 14. The King and his loyal servants intend to eat the entire station’s food supply while leaving plague and rot in their wake. Research & Development has been tasked with developing extra-large mousetraps.
Cargo Shuttle, Evac Shuttle, & Docking Interface Contributed by metalgearsloth
Shuttles have finally arrived! Unlike their SS13 predecessors, the shuttles Actually Move™ and can be piloted around. The Cargo Techs now have an additional responsibility — they need to remotely bring the cargo shuttle in for docking once it arrives from Central Command. There’s also a fancy docking interface to make that easier.
Try to avoid slamming into any Salvage Miners!
Projectile Spells Contributed by mirrorcult
Wizards have found some new ancient tomes with detailed information on casting projectile spells, fireballs, and the like. Be sure to cast Dodge™ whenever one is headed your way!
Emergency Response Team Contributed by Peptide90
Central Command has begun sending Emergency Response Teams™ to any stations experiencing catastrophic failure and imminent death technical issues.
Jetpacks Contributed by metalgearsloth & lzimann
Nuclear Operatives and crewmembers should have an easier time getting around during EVAs thanks to a brand new set of jetpacks.
Miasma Contributed by Rane
“For when the morning breezes blow toward the town at sunrise, if they bring with them mist from marshes and, mingled with the mist, the poisonous breath of creatures of the marshes to be wafted into the bodies of the inhabitants, they will make the site unhealthy.” - Vitruvius
Rotting corpses will now produce miasma, a toxic and disease-ridden gas. Proper corpse disposal (or even just putting them on ice) is now essential for the crew’s health.
Space Dragons & Sushi Contributed by CrudeWax
Salvage miners have discovered a new species of space fauna: the Space Dragon! How does a dragon fly in the vacuum of space? Why is it allied with Space Carp? Who cares!
In response, the Chef has been armed with a variety of recipes for turning space carp into sushi.
Forensics Contributed by Rane, Soupstraw, & ike709
Security has been equipped with a set of forensic scanners that can detect the fingerprints or glove fibers that any pesky criminals leave behind at a crime scene. Preliminary reports indicate that chain-smoking while using the scanner doubles the likelihood of solving crimes while only tripling the likelihood of lung cancer. Now that’s efficiency!
Device Network Configuration Contributed by juliangiebel
A new Multitool™ version has been released with the ability to configure device networks. Setting up air alarms has never been so easy!
Mapping Lighthouse Station Contributed by OldDanceJacket
A new, completely original station has been created by OldDanceJacket.
Central Command Contributed by LittleBuilderJane
LittleBuilderJane has a spicy new take on the Central Command station, which now accessible via the evac shuttle.
Technical Entity Creation Optimizations Contributed by PJB
While many people would already say that SS14 runs better than BYOND SS13, there are still many performance problems. A lot of the core engine has some poor design that could do with a tune up.
One of the biggest problems were consistent stutters when moving around. This is because the networking system currently sends new entities from the server on chunk boundary, and these stutters were the result of new entities being really expensive to instantiate. There was some easy low-hanging fruit to grab at here that immediately stood out in a profiler, but the actually involved work here was related to optimizing event bus.
Event bus is the system that dispatches gameplay logic events. It has the ability to dispatch “directed” events on entities, based on the components said entities have. In short, a system can subscribe to an event:
SubscribeLocalEvent < LightReplacerComponent , InteractUsingEvent >( HandleInteract );
+
And then these events can be sent on an entity like this:
var interactUsingEvent = new InteractUsingEvent ( user , used , target , clickLocation );
+RaiseLocalEvent ( target , interactUsingEvent , true );
+
The table of events to raise on which components is stored per-entity, since we assume each entity can have its own set of components. A large amount of work on entity creation was building this table incrementally.
The low hanging fruit (so somewhat medium hanging) is removing special “component events” from the tables. These are events like ComponentAdd
which are sent only to one component at once (as opposed to all listening components on an entity). They don’t use the regular event tables, but were still being tracked there uselessly. This already cut down a massive amount of subscriptions, saving work and memory.
The real problem to tackle is the data layout of the event table itself. Previously, the data was stored like this:
// eUid -> EventType -> { CompType1, ... CompTypeN }
+internal Dictionary < EntityUid , Dictionary < Type , HashSet < CompIdx >>> _entEventTables = new ();
+
(a CompIdx
is a simple integer that maps 1:1 to a component type. A little faster and more compact to work with in some cases)
Realistically, the only thing we need to be able to do is to iterate the list of subscribed components. We do not need properties like O(1) delete and unique keys from HashSet<T>
. Allocating a bunch of these hash sets is expensive , and most of them don’t contain much data.
A more optimal data structure is a simple linked list of subscriptions:
internal Dictionary < EntityUid , EventTable > _entEventTables = new ();
+
+ internal sealed class EventTable
+{
+ private const int InitialListSize = 8 ;
+
+ // Event -> { Comp, Comp, ... } is stored in a simple linked list.
+ // EventIndices contains indices into ComponentLists where linked list nodes start.
+ // Free contains the first free linked list node, or -1 if there is none.
+ // Free nodes form their own linked list.
+ // ComponentList is the actual region of memory containing linked list nodes.
+ public readonly Dictionary < Type , int > EventIndices = new ();
+ public int Free ;
+ public EventTableListEntry [] ComponentLists = new EventTableListEntry [ InitialListSize ];
+
+ public EventTable ()
+ {
+ InitEventTableFreeList ( ComponentLists , ComponentLists . Length , 0 );
+ Free = 0 ;
+ }
+ }
+
+ internal struct EventTableListEntry
+{
+ public int Next ;
+ public CompIdx Component ;
+ }
+
Iteration and insertion are now even easier to do than before, because linked lists are very easy to work with. Removal is O(n) now, but it probably won’t ever be a problem.
Critically, we use a single array buffer to store the linked list data per entity. This drastically cuts down on the count of objects and complexity of the object graph, drastically reducing memory and GC overhead. Reminder that a heap object in .NET has 16 bytes of overhead, and hash sets are complex!
This system provides very good savings, but there is still a lot of things that can be improved about it. Ideally we would be able to pre-cache event tables for entity prototypes, so we can just copy-on-write the event tables when constructing entities. The current problem with this approach is that entity creation is still too dynamic (AddComponent()
from inside component initializations…) which would make this complex and gnarly to implement. Making entity creation more rigid is on our mind, but it’ll still take more work to be able to get there.
Credits Contributors Since Last Progress Report 448 content pull requests, authored by: 20kdc, Ablankmann, Acruid, Andre19926, asperger-sind, CrudeWax, Daemon, Delete69, DogZeroX, DrSmugleaf, ElectroSR, Emisse, EmoGarbage404, greenrock64, HoofedEar, hubismal, ike709, jessicamaybe, juliangiebel, Just-a-Unity-Dev, KaiShibaa, keronshb, KIBORG04, lapatison, LittleBuilderJane, LudwigVonChesterfield, Macoron, metalgearsloth, Mirino97, mirrorcult, moony, Morb0, OldDanceJacket, Pangogie, PaulRitter, Peptide90, PJB3005, ProfanedBane, Rane, Ranger6012, ScalyChimp, SirDragooon, TaralGit, TekuNut, themias, TimrodDX, UKNOWH, Veritius, Visne, vulppine, WilliamECrew, wrexbe, youarereadingthis, Zumorica
Patrons Alex Fry, Altana, Anthony Fleck, AquaDraco, Austin Nelson, Blaise M., Bobberunio, Brandon Campbell, Callum Tubrett, Cormos Lemming, CPM311, Dan Griskardian, Daniel Thompson, Darren Brady, Daskata, DramaBuns, Durp, Eric VW, Ethan Keller, Evan Armstrong, Farewell Fire, Florian, Gothryd, grhmhome, Hamcha, hh, Jack Rose, James Andrew Peoples Jr, Jex N, Joel, John Edward Hamilton Barchard, Joshington Awesomahee, KevKev, Koyki, Kris Piper, KrystalDisc, liltenhead, LPGaming, Matthew C Miklaucic, Mikhail, Mono, Nicholas Hillblom, osborn, Oxyclean114, Peter “Azmond” Newhouse, Phillip Inman, Ramiro Agis, Robin Rottstock, Seija, Serathis, Serianas, Simon Lapatin, Spiffyfishface, spinnermaster, ThatGuyGW, The Hateful Flesh, Tomeno, Uinseann, Valinov, vifs_vestige, Viridian, Will M., William Grondin, Wrexbe, Zandario
\ No newline at end of file
diff --git a/post/22-10-31-progress-report-37/index.html b/post/22-10-31-progress-report-37/index.html
index c240e16..0fef547 100644
--- a/post/22-10-31-progress-report-37/index.html
+++ b/post/22-10-31-progress-report-37/index.html
@@ -1,3 +1,5 @@
-
Progress Report #37: Love, Geoff, and Robots - SS14
Progress Report #37: Love, Geoff, and Robots Contributed by DrSmugleaf, ike709 & Visne Monday October 31, 2022 Better late than never, we’ll hopefully get back on track soon. (And if you’d like to help contribute, progress report writers are always welcome!)
Content Three-Parter This progress report only covers July 2022. The August and September 2022 editions will follow shortly after it.
Botsplosion Contributed by Rane
Security reports that a variety of medibots, cleanbots, and more were smuggled aboard the latest cargo shuttle resupply. They have offered to overlook this unfortunate mishap in exchange for a cleanbot to remove bloodstains trash from holding cells.
Identity & Disguises Contributed by mirrorcult
After several successful implantations of telepathic inhibitors, crewmembers are now able to disguise their identity from each other by hiding IDs, covering their faces, and so on.
Crewmembers are discouraged from engaging in any anonymous tomfoolery or criminal activity.
Magic Staves & Wands Contributed by mirrorcult
The Wizard Federation has begun supplying a new arsenal of magic staves and wands to its agents. In the event that you are spontaneously turned into a magic fish, please report to Security for immediate termination.
Damage Masks Contributed by metalgearsloth
Taking damage now comes with more visual feedback in the form of damage overlays.
Disease Stages Contributed by EmoGarbage404
CentCom Virologists have released a new disease classification system, splitting up disease effects and cures into unique stages based on disease progression.
Generally speaking, earlier stages have milder symptoms and are more easily treatable, so crewmembers are advised to report to medical ASAP if they feel more sickly and disgusting than usual.
Movement Refactor Contributed by metalgearsloth
Movement has been refactored, resulting in a variety of code cleanup, tweaks, and improvements. The most obvious player-facing change is that vehicles are now predicted and should generally feel more responsive. Vehicles also have acceleration now, so the laws of physics should be slightly less violated.
Additionally, shuttles can now brake (spacebar) and have separate keys for strafing and rotating.
Portable Scrubbers Contributed by Rane
Atmospherics has received a shipment of portable scrubbers. It should now be easier to make a room habitable again after acts of sabotage incompetence accidental gas release.
Shuttle FTL Contributed by metalgearsloth
All shuttle navigation computers have received an update which, among other things, enables more shuttles to FTL to CentCom in an emergency.
Please be advised that the navigation data may have been intercepted by a hostile Syndicate planet.
Stamina Contributed by metalgearsloth
After a series of lawsuits, crewmembers are no longer perpetually amped up on epinephrine and amphetamines; instead, everyone is now susceptible to stamina damage!
Work on your dodging skills or disabler beams will have you stunned in no time, but you’re no longer prone to falling over from a single shot of a taser.
Sleeping & Blinding Contributed by Rane
As a result of the aforementioned stamina changes and lawsuits, crewmembers are now permitted to sleep as needed.
To help crewmembers in this endeavor, a supply of blindfolds sleep masks have been issued to all stations. Blindfolds can be acquired from Security by pretending to be able to shoot lasers from your eyes. Crewmembers that can actually shoot lasers from their eyes are advised to report to Medical as soon as possible.
Blocking & Shields Contributed by keronshb
Security has received a new shipment of riot shields, which have the ability to Block™ incoming attacks. This should hopefully be self-explanatory, but blocking attacks is encouraged whenever possible to mitigate incoming damage.
Boxers (Not the Underwear) Contributed by Rane
One of the first station-restricted jobs has been added: Crewmembers can now join as the Boxer aboard Lighthouse Station.
“It ain’t about how hard you hit. It’s about how hard you can get hit and keep moving forward; how much you can take and keep moving forward. That’s how winning is done!” - Rocky Balboa
Event Music Contributed by ike709
Events can now play lofi hip hop beats to relax/study/die horribly to. As an example, sick tunes will now play when the nuclear device is armed. There’s a short preview below but you can listen to the full thing here .
Frezon Contributed by mirrorcult
Atmospherics has received approval to begin producing and deploying Frezon, a new gas with a variety of effects such as:
Rapidly cooling/depressurizing rooms and suppressing fires Reacting with nitrogen to form nitrous oxide Reacting with miasma to make lots of miasma Getting high* *Nanotrasen waives all responsibility for any brain damage resulting from Frezon™ inhalation
Zombies Game Mode Contributed by EmoGarbage404
BRAAAAAAAAAINS…
Contributed by drakewill-CRL
Admins have a new tool full of potential for abuse enhancing the round—the antag menu! At the click of a button anybody can be turned into a traitor, nuke op, or any other wacky antagonist role.
Credits Contributors Since Last Progress Report 475 content pull requests, authored by: 13spacemen, 20kdc, Ablankmann, Aerocrux, AJCM-git, asperger-sind, BismarckShuffle, ChilbroBaggins, corentt, CormosLemming, Deahaka, Delete69, DoctorBeard, DogZeroX, drakewill-CRL, Duddino, ElectroSR, Rane, Emisse, EmoGarbage404, fooberticus, FunkySphere, GoodWheatley, HoofedEar, hubismal, ike709, jacksonzck, jessicamaybe, jproads, keronshb, KIBORG04, Kimpes, lapatison, Level10Cybermancer, metalgearsloth, Mirino97, mirrorcult, ModeratelyAware, moony, Morb0, Myctai, notafet, OldDanceJacket, Pangogie, PaulRitter, Peptide90, PJB3005, Rinkashikachi, sBasalto, ShadowCommander, sunbear-dev, TaralGit, TekuNut, themias, TimrodDX, vulppine, wrexbe, Ygg01, Daemon, zerorulez, Zumorica
Patrons Matouš Hrdlička, Roman, Jacob Schramm, Nathan Zaldivar, SpydAxe, BokChoy, Nicholas Williamson, KevKev, Gothryd, Brandon Campbell, Matthew C Miklaucic, Serianas, lapatison, Uinseann, osborn, LPGaming, Alex Fry, Ramiro Agis, Mikhail, liltenhead, James Andrew Peoples Jr, Serathis, Joel, Kris Piper, Phillip Inman, Jex N, Peter “Azmond” Newhouse, Seija, Hamcha, Oxyclean114, Cormos Lemming, grhmhome, Spiffyfishface, Callum Tubrett, John Edward Hamilton Barchard, Wrexbe, Austin Nelson, AquaDraco, hh, Nicholas Hillblom, Florian, Viridian, Daskata, TacoCub, Jack Rose, The Hateful Flesh, Will M., spinnermaster, Koyki, Dan Griskardian, Robin Rottstock, Altana, Durp, Joshington Awesomahee, Eric VW, Evan Armstrong, Mono, Ethan Keller, DramaBuns, KrystalDisc, Darren Brady, Zandario, Anthony Fleck, vifs_vestige, Bobberunio, CPM311, ThatGuyGW, Farewell Fire, Daniel Thompson, Tomeno
\ No newline at end of file
+
Progress Report #37: Love, Geoff, and Robots - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Progress Report #37: Love, Geoff, and Robots Contributed by DrSmugleaf, ike709 & Visne Monday October 31, 2022 Better late than never, we’ll hopefully get back on track soon. (And if you’d like to help contribute, progress report writers are always welcome!)
Content Three-Parter This progress report only covers July 2022. The August and September 2022 editions will follow shortly after it.
Botsplosion Contributed by Rane
Security reports that a variety of medibots, cleanbots, and more were smuggled aboard the latest cargo shuttle resupply. They have offered to overlook this unfortunate mishap in exchange for a cleanbot to remove bloodstains trash from holding cells.
Identity & Disguises Contributed by mirrorcult
After several successful implantations of telepathic inhibitors, crewmembers are now able to disguise their identity from each other by hiding IDs, covering their faces, and so on.
Crewmembers are discouraged from engaging in any anonymous tomfoolery or criminal activity.
Magic Staves & Wands Contributed by mirrorcult
The Wizard Federation has begun supplying a new arsenal of magic staves and wands to its agents. In the event that you are spontaneously turned into a magic fish, please report to Security for immediate termination.
Damage Masks Contributed by metalgearsloth
Taking damage now comes with more visual feedback in the form of damage overlays.
Disease Stages Contributed by EmoGarbage404
CentCom Virologists have released a new disease classification system, splitting up disease effects and cures into unique stages based on disease progression.
Generally speaking, earlier stages have milder symptoms and are more easily treatable, so crewmembers are advised to report to medical ASAP if they feel more sickly and disgusting than usual.
Movement Refactor Contributed by metalgearsloth
Movement has been refactored, resulting in a variety of code cleanup, tweaks, and improvements. The most obvious player-facing change is that vehicles are now predicted and should generally feel more responsive. Vehicles also have acceleration now, so the laws of physics should be slightly less violated.
Additionally, shuttles can now brake (spacebar) and have separate keys for strafing and rotating.
Portable Scrubbers Contributed by Rane
Atmospherics has received a shipment of portable scrubbers. It should now be easier to make a room habitable again after acts of sabotage incompetence accidental gas release.
Shuttle FTL Contributed by metalgearsloth
All shuttle navigation computers have received an update which, among other things, enables more shuttles to FTL to CentCom in an emergency.
Please be advised that the navigation data may have been intercepted by a hostile Syndicate planet.
Stamina Contributed by metalgearsloth
After a series of lawsuits, crewmembers are no longer perpetually amped up on epinephrine and amphetamines; instead, everyone is now susceptible to stamina damage!
Work on your dodging skills or disabler beams will have you stunned in no time, but you’re no longer prone to falling over from a single shot of a taser.
Sleeping & Blinding Contributed by Rane
As a result of the aforementioned stamina changes and lawsuits, crewmembers are now permitted to sleep as needed.
To help crewmembers in this endeavor, a supply of blindfolds sleep masks have been issued to all stations. Blindfolds can be acquired from Security by pretending to be able to shoot lasers from your eyes. Crewmembers that can actually shoot lasers from their eyes are advised to report to Medical as soon as possible.
Blocking & Shields Contributed by keronshb
Security has received a new shipment of riot shields, which have the ability to Block™ incoming attacks. This should hopefully be self-explanatory, but blocking attacks is encouraged whenever possible to mitigate incoming damage.
Boxers (Not the Underwear) Contributed by Rane
One of the first station-restricted jobs has been added: Crewmembers can now join as the Boxer aboard Lighthouse Station.
“It ain’t about how hard you hit. It’s about how hard you can get hit and keep moving forward; how much you can take and keep moving forward. That’s how winning is done!” - Rocky Balboa
Event Music Contributed by ike709
Events can now play lofi hip hop beats to relax/study/die horribly to. As an example, sick tunes will now play when the nuclear device is armed. There’s a short preview below but you can listen to the full thing here .
Frezon Contributed by mirrorcult
Atmospherics has received approval to begin producing and deploying Frezon, a new gas with a variety of effects such as:
Rapidly cooling/depressurizing rooms and suppressing fires Reacting with nitrogen to form nitrous oxide Reacting with miasma to make lots of miasma Getting high* *Nanotrasen waives all responsibility for any brain damage resulting from Frezon™ inhalation
Zombies Game Mode Contributed by EmoGarbage404
BRAAAAAAAAAINS…
Contributed by drakewill-CRL
Admins have a new tool full of potential for abuse enhancing the round—the antag menu! At the click of a button anybody can be turned into a traitor, nuke op, or any other wacky antagonist role.
Credits Contributors Since Last Progress Report 475 content pull requests, authored by: 13spacemen, 20kdc, Ablankmann, Aerocrux, AJCM-git, asperger-sind, BismarckShuffle, ChilbroBaggins, corentt, CormosLemming, Deahaka, Delete69, DoctorBeard, DogZeroX, drakewill-CRL, Duddino, ElectroSR, Rane, Emisse, EmoGarbage404, fooberticus, FunkySphere, GoodWheatley, HoofedEar, hubismal, ike709, jacksonzck, jessicamaybe, jproads, keronshb, KIBORG04, Kimpes, lapatison, Level10Cybermancer, metalgearsloth, Mirino97, mirrorcult, ModeratelyAware, moony, Morb0, Myctai, notafet, OldDanceJacket, Pangogie, PaulRitter, Peptide90, PJB3005, Rinkashikachi, sBasalto, ShadowCommander, sunbear-dev, TaralGit, TekuNut, themias, TimrodDX, vulppine, wrexbe, Ygg01, Daemon, zerorulez, Zumorica
Patrons Matouš Hrdlička, Roman, Jacob Schramm, Nathan Zaldivar, SpydAxe, BokChoy, Nicholas Williamson, KevKev, Gothryd, Brandon Campbell, Matthew C Miklaucic, Serianas, lapatison, Uinseann, osborn, LPGaming, Alex Fry, Ramiro Agis, Mikhail, liltenhead, James Andrew Peoples Jr, Serathis, Joel, Kris Piper, Phillip Inman, Jex N, Peter “Azmond” Newhouse, Seija, Hamcha, Oxyclean114, Cormos Lemming, grhmhome, Spiffyfishface, Callum Tubrett, John Edward Hamilton Barchard, Wrexbe, Austin Nelson, AquaDraco, hh, Nicholas Hillblom, Florian, Viridian, Daskata, TacoCub, Jack Rose, The Hateful Flesh, Will M., spinnermaster, Koyki, Dan Griskardian, Robin Rottstock, Altana, Durp, Joshington Awesomahee, Eric VW, Evan Armstrong, Mono, Ethan Keller, DramaBuns, KrystalDisc, Darren Brady, Zandario, Anthony Fleck, vifs_vestige, Bobberunio, CPM311, ThatGuyGW, Farewell Fire, Daniel Thompson, Tomeno
\ No newline at end of file
diff --git a/post/22-11-30-progress-report-38/index.html b/post/22-11-30-progress-report-38/index.html
index d0a3e76..4ce89e9 100644
--- a/post/22-11-30-progress-report-38/index.html
+++ b/post/22-11-30-progress-report-38/index.html
@@ -1,5 +1,7 @@
-
Progress Report #38: Oh Baby a Triple - SS14
Progress Report #38: Oh Baby a Triple Contributed by DrSmugleaf & ike709 Wednesday November 30, 2022 Oh yeah. We have a ton of huge changes like oldchat, machine upgrade improvements, playtime tracking, and more! We have some catching up to do, so this PR covers August through October 2022. As a consequence, we’ve gone insane skipped the Minor Changes.
Content UI Refactor Contributed by Jezithyr, DrSmugleaf, & wrexbe
The UI system has been massively rewritten . This lays the groundwork for easier-to-make and better-looking UIs, as well as improved support for UI themes and other niceties. Unfortunately there’s not really any player-facing changes to show off (even though the entire HUD was rewritten too), but the next section will showcase a wonderful new UI that wasn’t possible before.
Oldchat/BYOND Chat/SS13 Chat Contributed by vulppine
Oldchat, the objectively better oft-requested HUD layout from Space Station 13, is finally here! It’s disabled by default, but players can pick their preferred HUD layout in the Graphics settings.
There’s still some room for improvement, but it’s off to a great start! And yes, you can resize the width of it.
Element Picker Contributed by DrSmugleaf
Another UI goodie is the new Element Picker, which allows developers to look at all of the different components of a UI. This’ll make debugging and making new UIs a lot easier!
Tomb of the Unknown Employee Contributed by Carbonhell
Here rests an unknown employee,
+
Progress Report #38: Oh Baby a Triple - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Progress Report #38: Oh Baby a Triple Contributed by DrSmugleaf & ike709 Wednesday November 30, 2022 Oh yeah. We have a ton of huge changes like oldchat, machine upgrade improvements, playtime tracking, and more! We have some catching up to do, so this PR covers August through October 2022. As a consequence, we’ve gone insane skipped the Minor Changes.
Content UI Refactor Contributed by Jezithyr, DrSmugleaf, & wrexbe
The UI system has been massively rewritten . This lays the groundwork for easier-to-make and better-looking UIs, as well as improved support for UI themes and other niceties. Unfortunately there’s not really any player-facing changes to show off (even though the entire HUD was rewritten too), but the next section will showcase a wonderful new UI that wasn’t possible before.
Oldchat/BYOND Chat/SS13 Chat Contributed by vulppine
Oldchat, the objectively better oft-requested HUD layout from Space Station 13, is finally here! It’s disabled by default, but players can pick their preferred HUD layout in the Graphics settings.
There’s still some room for improvement, but it’s off to a great start! And yes, you can resize the width of it.
Element Picker Contributed by DrSmugleaf
Another UI goodie is the new Element Picker, which allows developers to look at all of the different components of a UI. This’ll make debugging and making new UIs a lot easier!
Tomb of the Unknown Employee Contributed by Carbonhell
Here rests an unknown employee,
Unknown by name or rank,
-Whose acts will not be forgotten
On a serious note, the Tomb of the Unknown Employee was added to Space Station 13 in honor of a contributor who died in a car accident. It now stands as a monument to all of the contributors who have given a piece of themselves to make these games special and who have since passed away.
It can now be found in Space Station 14 at Central Command.
Night at the Orchestra Contributed by EmoGarbage404
A shipment of instruments intended for the Nanotrasen Symphony Orchestra somehow ended up in Cargo, where the Quartermaster promptly traded them to the Head of Personnel for an emitters crate. The HoP requests demands that every crewmember who can play an instrument report to the Chapel to practice for his new musical production.
Here’s a look at all of the available instruments:
Plant Genetics Contributed by notafet
After once again rediscovering the twice-lost works of Gregor Mendel, the Botanist is proud to report that plants do, in fact, have genes. New guidelines are being disseminated on how to mutate and cross-pollinate plants. A variety of new genetic plant traits have also been discovered, such as Seedless , Sentient , or Bioluminescent . Happy harvesting!
Hopefully bioluminescence is self-explanatory, but here’s a visual aid:
Containment Field Rework Contributed by keronshb
After a bit of tinkering, the Chief Engineer was able to make some improvements to Lord Singuloth’s containment field generators. New improvements include only needing four generators, being able to contain a level 4 singularity (DANGER: Only if there’s room), and more!
Chef Content Update Contributed by notafet
To celebrate three consecutive shifts without a mass-casualty event, Central Command has sent a new recipe book to the Chef. There’s now a wider variety of food to cook, more items in Dinnerware vendors, new seeds for Botany, and more! Let’s get cooking!
Nuclear Operative Win Conditions Contributed by vulppine
Central Command has reached an agreement with the Syndicate to produce new guidelines for incidents involving nuclear operatives. The newly-expanded victory conditions are as follows:
Syndicate Major Victory The nuclear bomb explodes on the station. The crew escapes, but the nuclear bomb was armed when they escaped. The nuclear bomb was delivered to Central Command. Syndicate Minor Victory The crew escapes, but leaves all nukies alive. The crew escapes, and some nukies are alive, but they don’t bring the disk with them. Neutral Victory The nuclear bomb explodes off-station. Crew Minor Victory The crew escapes, and some nukies are alive, but they manage to secure the disk. Crew Major Victory All nuclear operatives die. The crew manages to blow up the nuclear operative outpost. Station Records Contributed by vulppine
Engineering reports that they’ve finally had a breakthrough restoring the station records database after the H.O.N.K. Virus incident of 2561. The crew records are back online and can now be viewed at any Station Records Computer. Medical and Security records, however, are still missing.
SS14 Sign Contributed by EmoGarbage404
Engineering reports that they finally found a machinist that can count to 4, and the new Space Station 14 sign has been completed and installed.
Biomass Contributed by Rane
The eggheads over in Research & Development raised a fuss about how cloning pods producing clones from nothing violates the “conservation of mass” and a variety of other technobabble. To shut them up, Medical has agreed to start using biomass to build new clones. A new Biomass Reclaimer has been installed to produce it.
Revenants Contributed by EmoGarbage404
The Chaplain asks all crewmembers to be on alert for evil spirits haunting the station. Revenants are evil ghosts with a variety of ways to be annoying cause mischief and disrupt the normal functioning of the station.
Chameleon Clothing & Voice Masks Contributed by Macoron & vulppine
Central Command alerts all Security personnel that Syndicate infiltrators now have access to sophisticated disguises that can alter their clothing and voice at-will.
If you witness anyone wearing chameleon clothing or singing with Elvis’s voice, shoot first and clone later.
Pneumatic Valve Contributed by notafet
The Council of Atmosian Elders, the elite few Atmos Techs who treat the laws of physics as more of a polite suggestion, have announced a new atmospherics device. The Pneumatic Valve will transfer gas from an inlet port to an outlet port, but only if the third control port is connected to a pipe with sufficient pressure.
This seemingly simple device is receiving so much attention because atmospherics is now Turing-complete and could theoretically compute anything. We eagerly await the horrors this will inevitably produce.
To jumpstart this process, we’ll give you a hint. Here’s an unlabeled diagram of a NAND gate that works from left to right:
Gas Recyclers Contributed by notafet
To improve the station’s self-sustainability, Central Command has provided schematics for a new Gas Recycler. These machines take carbon dioxide or nitrous oxide, and produce oxygen or nitrogen respectively. The only caveat is that the inputted gas must have a pressure of at least 3 MPa and a temperature of at least 300 Celsius. That means any gasses coming out of it won’t be safe for human consumption without further processing.
Eye Damage Contributed by Rane
Due to budget cuts, Medical reports that they can no longer afford to supply the crew with indestructible eyeballs. Engineers need to be extra cautious, as welding without protection will now damage their vision.
Crewmembers experiencing dark or confusing vision are advised to report to medical for a dose of oculine or a pair of prescription glasses.
Machine Upgrades Overhaul Contributed by EmoGarbage404, Rolfero, 0x6273, and possibly others
The Research & Development team have released a plethora of schematics for upgrading all sorts of machinery across the station to take advantage of better capacitors, scanning modules, et cetera. Scientists have been seen scurrying through the corridors hauling Rapid Part Exchange Devices (RPEDs) and sacks of fancy parts.
Virtually every important machine that has upgradeable components will now benefit from having them upgraded.
Cargo Economy Balance Contributed by metalgearsloth
Central Command’s expert adequate team of economists have revised Cargo’s pay scale. Cargo’s passive income has been reduced by 80% in exchange for significantly bigger payouts when selling crates. The shuttle can also be called more frequently to facilitate this increased workload.
Generic Stats Windows Contributed by metalgearsloth
To help facilitate the Cargo economy rebalance, support for generic stats windows has been added to help developers quickly compare a value across all items for balancing purposes.
Here’s what it looks like for Cargo sell prices:
NPC & Pathfinding Refactor Contributed by metalgearsloth
People who have been following SS14 for a long time may remember that advanced NPCs were implemented all the way back in 2020 during Progress Report 22 . Ever since then they’ve largely been untouched and left to rot as the rest of the project evolved around them, but not anymore!
NPC AI and pathfinding have been completely rewritten to bring it up to par with everything else. There’s not much to visually showcase, but there are some notable improvements:
Pets no longer try to run away when buckled/pulled Space Carp now try to follow Space Dragons Automated turrets now exist NPCs should get stuck less when pathfinding Pathfinding is now multi-threaded Pathfinding now supports things like windoors and portals Pathfinding now accounts for scenarios like needing to pry doors or break walls to get somewhere NPCs now need line-of-sight to acquire a target Radiation Refactor Contributed by Macoron
Radiation spreading has been reworked. It can now be blocked by structures like walls, shutters, or airlocks and will lose intensity over distance. As an added bonus it has also been significantly optimized.
Here’s a developer debug view of what radiation spreading looks like, note that the radiation source is the tile below the scrubber:
Wizard’s Den Roleplaying Rules Contributed by a bunch of people
One of the hallmarks of Space Station 13 is the wide variety of roleplaying servers with different expectations and standards for how players should behave. To facilitate this in SS14, we’ve written a new, stricter roleplaying-focused ruleset. It’s now live on the server Salamander, which is now denoted in the server list as [US West RP]
. This will not replace the existing rules on our other servers, nor the custom rulesets of community servers.
You can find the full, extended version of the rules on our wiki .
Extended Rework & Ramping Event Scheduler Contributed by mirrorcult
The Extended mode has been reworked into a new Survival mode. No antagonists exist at roundstart, but the midround shenanigans and chaos will get more frequent and more severe as time goes on. This is somewhat similar to Space Station 13’s Dynamic gamemode, but with a distinct implementation.
Playtime Tracking & Role Restrictions Contributed by PJB3005
Total playtime and job playtime are now tracked. The most notable change associated with this is that various jobs are now restricted based on either total playtime requirements or specific job/department playtime requirements. This is to force newer players into easier roles like department interns while limiting roles with more authority to more experienced players.
All of this information is conveyed through the newly updated UI for job selection:
Melee Refactor Contributed by metalgearsloth
A variety of changes and improves have been made to melee combat:
Light attacks happen on click and strike at wherever your mouse is. Heavy attacks happen after a wind-up on right click. These are wide attacks that do extra damage but with a higher stamina cost. Disarm is now on right click when you have a free hand. The context menu is now disabled in combat mode. Attack swings are now predicted, meaning you shouldn’t see a delay. The damage effect still only occurs when the server confirms a successful hit. The server will now try to adjust for network lag when deciding if your attack is a hit or a miss, which should result in less cases of attacks missing when it looks like they should hit. Or to explain it another way, the server now tries to do a better job of considering where targets were from your perspective when you attacked. New Inventory Stripping UI Contributed by ElectroSR
The UI for interacting with other players' inventories has been completely remade; instead of a list of buttons, it now resembles the UI from Space Station 13 where you can view all of the slot contents of players (minus their pocket contents, of course).
Character Setup UI Tweaks Contributed by vulppine
The character setup UI has been changed to be part of the lobby UI, rather than a separate screen.
Mapping Kettle Station Contributed by Cheackraze
Kettle Station is now in service as the latest mid-high population map. It’s also the only station with a new, unique Zookeeper job.
Credits Contributors Since Last Progress Report 1430 pull requests, authored by: 0x6273, 20kdc, Ablankmann, Acruid, AJCM-git, aklos, asperger-sind, BasedUser, biometricPsychography, brainfood1183, Carbonhell, Checkraze, ChilbroBaggins, civilCornball, corentt, Daemon, DeathCamel58, DerSheppard, DoctorBeard, DogZeroX, DrSmugleaf, eclips_e, ElectroSR, Emisse, EmoGarbage404, estacaoespacialpirata, exincore, Flareguy, FunkySphere, GTRsound, HoidC, igorsaux, ike709, Illiux, Interrobang01, Jackrost, jessicamaybe, Jezithyr, jproads, juliangiebel, JupiterFive, JustinTrotter, KaiShibaa, keronshb, kognise, lapatison, LarryRussian, Level10Cybermancer, LordEclipse, Macoron, martin69420, Mervill, metalgearsloth, Mirino97, mirrorcult, moony, Morb0, Myctai, Nairodian, NoobyLegion, notafet, och-och, OctoRocket, OldDanceJacket, Pangogie, PaulRitter, Peptide90, PJB3005, PJBot, PrPleGoo, Rane, Rapidgame7, Rinkashikachi, rolfero, Scribbles0, ShadowCommander, SirDragooon, Slyfox333, SpaceManiac, Stealthbomber16, TaralGit, TekuNut, theashtronaut, themias, tomasalves8, tsp01, Veritius, Visne, Vordenburg, vulppine, Willhelm53, WPRobson, wrexbe, YanehCheck, Ygg01, ZeroDiamond, Zumorica
Patrons Alex Fry, Altana, Anthony Fleck, AquaDraco, Arthur Norris, Austin Nelson, Bobberunio, BokChoy, Brandon Campbell, BrittaQueenBee, Callum Tubrett, Carbonhell, clyf, Cormos Lemming, CPM311, Dan, Dan Griskardian, Daniel Thompson, Darren Brady, Daskata, DramaBuns, Durp, Eric VW, Ethan Keller, Evan Armstrong, Farewell Fire, Florian, Gothryd, Greggo Austin, grhmhome, Hamcha, hh, Jacob Schramm, James Andrew Peoples Jr, Jeremy Hernandez, Jex N, John Edward Hamilton Barchard, Joshington Awesomahee, Kai k, KevKev, Koyki, Kris Piper, lapatison, Late Fox, liltenhead, Matouš Hrdlička, Matthew C Miklaucic, Mikhail, Mitchell Marry, Mono, Nathan Zaldivar, Nicholas Hillblom, Nicholas Williamson, osborn, Oxyclean114, Pasemi, Peter “Azmond” Newhouse, Phillip Inman, Ramiro Agis, Rasmus Cedergren, Robin Rottstock, Serianas, spinnermaster, SpydAxe, ThatGuyGW, The Hateful Flesh, Tomeno, Uinseann, Unknown Kiwi, vifs_vestige, Viridian, Will M., Wrexbe, Zandario
\ No newline at end of file
+
Whose acts will not be forgotten On a serious note, the Tomb of the Unknown Employee was added to Space Station 13 in honor of a contributor who died in a car accident. It now stands as a monument to all of the contributors who have given a piece of themselves to make these games special and who have since passed away.
It can now be found in Space Station 14 at Central Command.
Night at the Orchestra Contributed by EmoGarbage404
A shipment of instruments intended for the Nanotrasen Symphony Orchestra somehow ended up in Cargo, where the Quartermaster promptly traded them to the Head of Personnel for an emitters crate. The HoP requests demands that every crewmember who can play an instrument report to the Chapel to practice for his new musical production.
Here’s a look at all of the available instruments:
Plant Genetics Contributed by notafet
After once again rediscovering the twice-lost works of Gregor Mendel, the Botanist is proud to report that plants do, in fact, have genes. New guidelines are being disseminated on how to mutate and cross-pollinate plants. A variety of new genetic plant traits have also been discovered, such as Seedless , Sentient , or Bioluminescent . Happy harvesting!
Hopefully bioluminescence is self-explanatory, but here’s a visual aid:
Containment Field Rework Contributed by keronshb
After a bit of tinkering, the Chief Engineer was able to make some improvements to Lord Singuloth’s containment field generators. New improvements include only needing four generators, being able to contain a level 4 singularity (DANGER: Only if there’s room), and more!
Chef Content Update Contributed by notafet
To celebrate three consecutive shifts without a mass-casualty event, Central Command has sent a new recipe book to the Chef. There’s now a wider variety of food to cook, more items in Dinnerware vendors, new seeds for Botany, and more! Let’s get cooking!
Nuclear Operative Win Conditions Contributed by vulppine
Central Command has reached an agreement with the Syndicate to produce new guidelines for incidents involving nuclear operatives. The newly-expanded victory conditions are as follows:
Syndicate Major Victory The nuclear bomb explodes on the station. The crew escapes, but the nuclear bomb was armed when they escaped. The nuclear bomb was delivered to Central Command. Syndicate Minor Victory The crew escapes, but leaves all nukies alive. The crew escapes, and some nukies are alive, but they don’t bring the disk with them. Neutral Victory The nuclear bomb explodes off-station. Crew Minor Victory The crew escapes, and some nukies are alive, but they manage to secure the disk. Crew Major Victory All nuclear operatives die. The crew manages to blow up the nuclear operative outpost. Station Records Contributed by vulppine
Engineering reports that they’ve finally had a breakthrough restoring the station records database after the H.O.N.K. Virus incident of 2561. The crew records are back online and can now be viewed at any Station Records Computer. Medical and Security records, however, are still missing.
SS14 Sign Contributed by EmoGarbage404
Engineering reports that they finally found a machinist that can count to 4, and the new Space Station 14 sign has been completed and installed.
Biomass Contributed by Rane
The eggheads over in Research & Development raised a fuss about how cloning pods producing clones from nothing violates the “conservation of mass” and a variety of other technobabble. To shut them up, Medical has agreed to start using biomass to build new clones. A new Biomass Reclaimer has been installed to produce it.
Revenants Contributed by EmoGarbage404
The Chaplain asks all crewmembers to be on alert for evil spirits haunting the station. Revenants are evil ghosts with a variety of ways to be annoying cause mischief and disrupt the normal functioning of the station.
Chameleon Clothing & Voice Masks Contributed by Macoron & vulppine
Central Command alerts all Security personnel that Syndicate infiltrators now have access to sophisticated disguises that can alter their clothing and voice at-will.
If you witness anyone wearing chameleon clothing or singing with Elvis’s voice, shoot first and clone later.
Pneumatic Valve Contributed by notafet
The Council of Atmosian Elders, the elite few Atmos Techs who treat the laws of physics as more of a polite suggestion, have announced a new atmospherics device. The Pneumatic Valve will transfer gas from an inlet port to an outlet port, but only if the third control port is connected to a pipe with sufficient pressure.
This seemingly simple device is receiving so much attention because atmospherics is now Turing-complete and could theoretically compute anything. We eagerly await the horrors this will inevitably produce.
To jumpstart this process, we’ll give you a hint. Here’s an unlabeled diagram of a NAND gate that works from left to right:
Gas Recyclers Contributed by notafet
To improve the station’s self-sustainability, Central Command has provided schematics for a new Gas Recycler. These machines take carbon dioxide or nitrous oxide, and produce oxygen or nitrogen respectively. The only caveat is that the inputted gas must have a pressure of at least 3 MPa and a temperature of at least 300 Celsius. That means any gasses coming out of it won’t be safe for human consumption without further processing.
Eye Damage Contributed by Rane
Due to budget cuts, Medical reports that they can no longer afford to supply the crew with indestructible eyeballs. Engineers need to be extra cautious, as welding without protection will now damage their vision.
Crewmembers experiencing dark or confusing vision are advised to report to medical for a dose of oculine or a pair of prescription glasses.
Machine Upgrades Overhaul Contributed by EmoGarbage404, Rolfero, 0x6273, and possibly others
The Research & Development team have released a plethora of schematics for upgrading all sorts of machinery across the station to take advantage of better capacitors, scanning modules, et cetera. Scientists have been seen scurrying through the corridors hauling Rapid Part Exchange Devices (RPEDs) and sacks of fancy parts.
Virtually every important machine that has upgradeable components will now benefit from having them upgraded.
Cargo Economy Balance Contributed by metalgearsloth
Central Command’s expert adequate team of economists have revised Cargo’s pay scale. Cargo’s passive income has been reduced by 80% in exchange for significantly bigger payouts when selling crates. The shuttle can also be called more frequently to facilitate this increased workload.
Generic Stats Windows Contributed by metalgearsloth
To help facilitate the Cargo economy rebalance, support for generic stats windows has been added to help developers quickly compare a value across all items for balancing purposes.
Here’s what it looks like for Cargo sell prices:
NPC & Pathfinding Refactor Contributed by metalgearsloth
People who have been following SS14 for a long time may remember that advanced NPCs were implemented all the way back in 2020 during Progress Report 22 . Ever since then they’ve largely been untouched and left to rot as the rest of the project evolved around them, but not anymore!
NPC AI and pathfinding have been completely rewritten to bring it up to par with everything else. There’s not much to visually showcase, but there are some notable improvements:
Pets no longer try to run away when buckled/pulled Space Carp now try to follow Space Dragons Automated turrets now exist NPCs should get stuck less when pathfinding Pathfinding is now multi-threaded Pathfinding now supports things like windoors and portals Pathfinding now accounts for scenarios like needing to pry doors or break walls to get somewhere NPCs now need line-of-sight to acquire a target Radiation Refactor Contributed by Macoron
Radiation spreading has been reworked. It can now be blocked by structures like walls, shutters, or airlocks and will lose intensity over distance. As an added bonus it has also been significantly optimized.
Here’s a developer debug view of what radiation spreading looks like, note that the radiation source is the tile below the scrubber:
Wizard’s Den Roleplaying Rules Contributed by a bunch of people
One of the hallmarks of Space Station 13 is the wide variety of roleplaying servers with different expectations and standards for how players should behave. To facilitate this in SS14, we’ve written a new, stricter roleplaying-focused ruleset. It’s now live on the server Salamander, which is now denoted in the server list as [US West RP]
. This will not replace the existing rules on our other servers, nor the custom rulesets of community servers.
You can find the full, extended version of the rules on our wiki .
Extended Rework & Ramping Event Scheduler Contributed by mirrorcult
The Extended mode has been reworked into a new Survival mode. No antagonists exist at roundstart, but the midround shenanigans and chaos will get more frequent and more severe as time goes on. This is somewhat similar to Space Station 13’s Dynamic gamemode, but with a distinct implementation.
Playtime Tracking & Role Restrictions Contributed by PJB3005
Total playtime and job playtime are now tracked. The most notable change associated with this is that various jobs are now restricted based on either total playtime requirements or specific job/department playtime requirements. This is to force newer players into easier roles like department interns while limiting roles with more authority to more experienced players.
All of this information is conveyed through the newly updated UI for job selection:
Melee Refactor Contributed by metalgearsloth
A variety of changes and improves have been made to melee combat:
Light attacks happen on click and strike at wherever your mouse is. Heavy attacks happen after a wind-up on right click. These are wide attacks that do extra damage but with a higher stamina cost. Disarm is now on right click when you have a free hand. The context menu is now disabled in combat mode. Attack swings are now predicted, meaning you shouldn’t see a delay. The damage effect still only occurs when the server confirms a successful hit. The server will now try to adjust for network lag when deciding if your attack is a hit or a miss, which should result in less cases of attacks missing when it looks like they should hit. Or to explain it another way, the server now tries to do a better job of considering where targets were from your perspective when you attacked. New Inventory Stripping UI Contributed by ElectroSR
The UI for interacting with other players’ inventories has been completely remade; instead of a list of buttons, it now resembles the UI from Space Station 13 where you can view all of the slot contents of players (minus their pocket contents, of course).
Character Setup UI Tweaks Contributed by vulppine
The character setup UI has been changed to be part of the lobby UI, rather than a separate screen.
Mapping Kettle Station Contributed by Cheackraze
Kettle Station is now in service as the latest mid-high population map. It’s also the only station with a new, unique Zookeeper job.
Credits Contributors Since Last Progress Report 1430 pull requests, authored by: 0x6273, 20kdc, Ablankmann, Acruid, AJCM-git, aklos, asperger-sind, BasedUser, biometricPsychography, brainfood1183, Carbonhell, Checkraze, ChilbroBaggins, civilCornball, corentt, Daemon, DeathCamel58, DerSheppard, DoctorBeard, DogZeroX, DrSmugleaf, eclips_e, ElectroSR, Emisse, EmoGarbage404, estacaoespacialpirata, exincore, Flareguy, FunkySphere, GTRsound, HoidC, igorsaux, ike709, Illiux, Interrobang01, Jackrost, jessicamaybe, Jezithyr, jproads, juliangiebel, JupiterFive, JustinTrotter, KaiShibaa, keronshb, kognise, lapatison, LarryRussian, Level10Cybermancer, LordEclipse, Macoron, martin69420, Mervill, metalgearsloth, Mirino97, mirrorcult, moony, Morb0, Myctai, Nairodian, NoobyLegion, notafet, och-och, OctoRocket, OldDanceJacket, Pangogie, PaulRitter, Peptide90, PJB3005, PJBot, PrPleGoo, Rane, Rapidgame7, Rinkashikachi, rolfero, Scribbles0, ShadowCommander, SirDragooon, Slyfox333, SpaceManiac, Stealthbomber16, TaralGit, TekuNut, theashtronaut, themias, tomasalves8, tsp01, Veritius, Visne, Vordenburg, vulppine, Willhelm53, WPRobson, wrexbe, YanehCheck, Ygg01, ZeroDiamond, Zumorica
Patrons Alex Fry, Altana, Anthony Fleck, AquaDraco, Arthur Norris, Austin Nelson, Bobberunio, BokChoy, Brandon Campbell, BrittaQueenBee, Callum Tubrett, Carbonhell, clyf, Cormos Lemming, CPM311, Dan, Dan Griskardian, Daniel Thompson, Darren Brady, Daskata, DramaBuns, Durp, Eric VW, Ethan Keller, Evan Armstrong, Farewell Fire, Florian, Gothryd, Greggo Austin, grhmhome, Hamcha, hh, Jacob Schramm, James Andrew Peoples Jr, Jeremy Hernandez, Jex N, John Edward Hamilton Barchard, Joshington Awesomahee, Kai k, KevKev, Koyki, Kris Piper, lapatison, Late Fox, liltenhead, Matouš Hrdlička, Matthew C Miklaucic, Mikhail, Mitchell Marry, Mono, Nathan Zaldivar, Nicholas Hillblom, Nicholas Williamson, osborn, Oxyclean114, Pasemi, Peter “Azmond” Newhouse, Phillip Inman, Ramiro Agis, Rasmus Cedergren, Robin Rottstock, Serianas, spinnermaster, SpydAxe, ThatGuyGW, The Hateful Flesh, Tomeno, Uinseann, Unknown Kiwi, vifs_vestige, Viridian, Will M., Wrexbe, Zandario
\ No newline at end of file
diff --git a/post/23-03-06-progress-report-39/index.html b/post/23-03-06-progress-report-39/index.html
index d98e3ab..4ca1ea0 100644
--- a/post/23-03-06-progress-report-39/index.html
+++ b/post/23-03-06-progress-report-39/index.html
@@ -1,3 +1,5 @@
-
Progress Report #39: Happy Holidelays - SS14
Progress Report #39: Happy Holidelays Contributed by DrSmugleaf & ike709 Monday March 6, 2023 Remember when progress reports used to be released on time every month? Neither do we! PR39 covers November and December 2022.
Content XenoArcheology Contributed by EmoGarbage404
Artifacts have gotten a big overhaul with the introduction of XenoArcheology! A new subdepartment of Science, XenoArch revolves around exploring the graph-like structure of artifacts; each node is randomly generated with its own effects and triggers. Unlocking these nodes generates points, but be careful! The artifact might throw you, shatter windows, deliver a carp straight to your face, or just leave you in a bad mood: the possibilities are endless!
These changes also include an overhauled tech tree and a variety of new machines and items. Go do some science and discover all the new goodies!
RIPLEY Mechs Contributed by EmoGarbage404
After several years of over-budget and misguided development, the science team has finally created Cargo’s beloved mech, the Ripley. For use only for sanctioned cargo transfer (but who cares about the rules?)
PDA Catridges & UI Overhaul Contributed by juliangiebel
Thinktronic has released a new version of RobustOS™ for all PDA tablets. It includes a complete UI rewrite, support for installing programs via cartridges, a crew manifest, and it now comes in a variety of new colors.
NetProbe Cartridge Contributed by juliangiebel
NetProbe is one of the first all-new PDA cartridges. Use it on any networked device to see its network info, and it can store up to 9 entries!
Rapid Parts Exchange Device Contributed by EmoGarbage404
Scientists, rejoice! The Rapid Parts Exchange Device is now available. Just fill it up with parts, whack a machine with it, and the upgrade is complete!
Contributed by rolfero
Engineering uncrossed some wires in the airlock circuitry, so now you can link buttons and levers to them and windoors. Assuming you have access, of course.
Target Dummies & Practice Guns Contributed by Daemon
After repeated friendly-fire incidents, Central Command has decided to supply Security with a variety of practice targets and a practice laser gun. All officers are encouraged to spend some time at the range. A subsequent request for clarification confirmed that tying up the Clown for target practice is still permitted as long as non-lethal weaponry is used.
Fax Machines Contributed by Morb0
You can now pester Central Command with state-of-the-art fax machines.
VIDEO Intercoms Contributed by EmoGarbage404
Intercoms have been added. Unfortunately the marketing department couldn’t come up with anything clever to say about it.
Prayers Contributed by eclips_e
After several complaints from the Chaplain, the Captain has agreed to let crewmembers use the altar to pray to whatever gods may be listening. Tread lightly, or risk invoking their wrath.
Subdermal Implants Contributed by keronshb
Subdermal implants are now available for implantation. They come in a variety of flavors such as trackers, bombs, and storage units.
Job Descriptions Contributed by mirrorcult
After numerous complaints in some variation of “That’s not in the job description!”, Central Command has now written job descriptions for all roles. You can read them via the job priority screen.
Diona Contributed by EmoGarbage404
Central Command has approved the employment of Diona aboard the station. They’re a real tree-t to be around and they wood love to help out.
Mapping Courser Emergency Evacuation Shuttle Contributed by Cheackraze
The Courser is the latest and greatest emergency shuttle for getting the hell out of dodge.
Minor Changes Due to length constraints, not everything can get a dedicated section in the progress report and instead will be found listed here.
As of Progress Report 39, the Minor Changes section is now auto-generated from SS14’s in-game changelog. So if you read the changelog, you won’t see anything new here and you can skip to the next section.
Minor Features/Fixes/Balancing Added the technology disk terminal, where you can exchange 2500 research points for a random technology disk. Contributed by EmoGarbage404 Added the Traversal Distorter, a machine capable of pushing Artifacts' random node traversal in certain directions. Simply place an artifact on the machine and you can choose how you want to encourage it. Contributed by EmoGarbage404 CentCom now calls the shuttle automatically after a long round. Contributed by notafet Added the Node Scanner, which can identify the ID of an artifact’s node with a single click. Contributed by EmoGarbage404 Item artifacts. Artifact spawns may now spawn handheld artifacts, which have a suite of new triggers and very useful effects, with more coming. Contributed by mirrorcult The radar shown in mass scanners and shuttle consoles now resizes gracefully, scaling as expected with whatever breathing room it has!. Contributed by deathride58 Radiation suit and hardsuits have built-in geiger counter. Contributed by Macoron Medbay can now obtain cryo pods, specialized cryogenics machines used to lower the temperature of a patient to extreme values somewhat safely to use specific chemicals, such as cryoxadone. Contributed by Carbonhell Wet floor sparkles are now slightly more opaque and stay invisible for less of their animation cycle. Contributed by Willhelm53 All humanoid metabolized reagents should apply effects proportional to how much was taken in. Eating 0.1u of a paralyzation drug will stun you for 1/5 the time as eating 0.5u. Contributed by rane The Syndicate has adjusted the price of several uplink items to encourage traitors to use more diverse strategies. Contributed by GoodWheatley Added new animal, pig, and new chef’s pet-companion. Contributed by lapatison All NT personnel have been trained to apply handcuffs in an aggressive manner. Contributed by dmnct Added a Party crate to cargo. Contributed by Cheackraze PA now activates the singularity generator again. Contributed by TemporalOroboros ability to mix reactions with certain entities, included example being blood can be converted into wine using a bible at a ratio of 1:1. Contributed by timothyteakettle Grids can now handle multiple gravity generators. Contributed by metalgearsloth Wall mounted generators and substations actually mounted on a wall can now be ~punched~ reached. Contributed by dmnct Vehicles now inherit access from the rider instead of having access defined on the vehicle itself. Contributed by EmoGarbage404 Weld modular mines and grenades to salvage them. Contributed by deltanedas Radio chat now supports department specific radio prefixes. Contributed by tgrkzus Escape key clears chat input. Contributed by jicksaw Fix planet footstep sound modifiers. Contributed by metalgearsloth Toggle internals icon correctly toggles gas tanks equipped on your back. Contributed by JustinTrotter All station events are no longer capped at a certain number of occurrences. Contributed by EmoGarbage404 You can now put both holosign projectors and wet floor signs into the janibelt. Contributed by Interrobang01 Ghosts can now toggle seeing FoV. Contributed by mirrorcult Turrets will now shoot space targets. Contributed by metalgearsloth Added hot plates for heating up beakers. No longer are chemists bound to the humble microwave. Contributed by EmoGarbage404 Burning entities now emit light. Contributed by ElectroSR Kick AFK players. Contributed by Morb0 Fixed a server error when spawning nuke ops. Contributed by DrSmugleaf NPCs will now smash and pry correctly. Contributed by metalgearsloth Dead people can no longer sleep. Contributed by dmnct Nanotrasen has begun experiments with advanced locker technology. Contributed by Chief-Engineer Toy ammunition boxes can be re-filled again. Contributed by Vordenburg Revamped the Nuke Ops round end screen. Contributed by EmoGarbage404 Intercoms can now be rotated properly. Contributed by EmoGarbage404 NT has begun distribution of books from the ‘Newton’s Guide to Atmos’ series to stations. Contributed by Chief-Engineer Rat servants will pathfind under doors again. Contributed by metalgearsloth Added bag for carrying books and cargo order to get more of them. Contributed by dontbetank Admins will have an easier time running santa-related events (as santa can see inside gifts). Contributed by moony Blood stains now fade out instead of becoming sparkles. Contributed by EmoGarbage404 Bump NPC avoidance range and fix some instances of unapproved dancing. Contributed by metalgearsloth NPCs will ignore stationary allies for separation. Pets in particular will move through other stationary pets. Contributed by metalgearsloth NPCs will no longer stall on 1 bad path. Contributed by metalgearsloth The internals alert will blink again when your gas tank need to be refilled. Contributed by corentt the price of food now depends on its nutritional capacity. Contributed by corentt The fallback for the ‘keep another traitor alive’ condition now just gives you stay alive rather than telling you to keep yourself alive. Contributed by rane Armor prices are calculated based on damage reduction. Contributed by rolfero Changed the laser crate to now require armory access. Contributed by Nairodian Upgradeable machines can now be examined to show the effects that the upgrades have. Contributed by 0x6273 Faxes received a stamp scanning module. Contributed by Morb0 Added forensic pads, zipties and glasses to the secfab. Contributed by Nairodian Allowed gas filters to be reset to filter no gases. Contributed by Vordenburg Fluids now spill slowly, rather than quantum tunneling to optimal size. Contributed by Ygg01 Added a practice disabler. Contributed by Cheackraze Docking ports on shuttles no longer force welded doors open. Have fun welding the shuttle doors shut. Contributed by Mervill The Lobby’s ready button now clearly states whether you are ready not. Hopefully this reduces confusion!. Contributed by theashtronaut Added a current readied player count to the lobby info during the pre-game phase. Contributed by theashtronaut Added a volume slider for the lobby & round-end music so you can enjoy it without blowing out your eardrums. Contributed by theashtronaut Shot Projectiles cause impulses like it was supposed to. Contributed by Salex08 Stealth boxes have been rebalanced. They now require players to move slower to stay hidden, collide with bullets, and can no longer trap simple mobs. Contributed by keronshb Objectives involving other traitors should be more reliable at providing traitors that are alive and not SSD. Contributed by rane fixed windoor hacking. Contributed by JustinTrotter Fixed vehicles not working. Contributed by ElectroSR Cat ears now cost 26tc. Contributed by mirrorcult Added XenoSci things and a mass scanner for salvage crew to Lighthouse. Contributed by Cheackraze Overdrawing with a syringe no longer destroys the transferred solution. Contributed by JustinTrotter Mousetraps no longer autokill cardboard box users. Contributed by keronshb Droppers behave more like injectors. Contributed by JustinTrotter The flames of lit welders now look bright in the dark. Contributed by Vordenburg You now shove people rather than “disarm” them if they aren’t holding anything. Contributed by rane internals tanks with air no longer flash warning. Contributed by Bright0 Removed duplicate disarm popup when disarming someone with an item in their hands. Contributed by ShadowCommander Clarified machine missing messages for the cloner. Contributed by Vordenburg You can no longer use machines which require vision while blind. Contributed by rane Added a Toggle Ghosts button on the ghost GUI to get rid of those pesky apparitions. Contributed by ShadowCommander Fixed an issue where crates would clip through firelocks. Contributed by keronshb Cell charger is destructible and doesn’t block mobs movement. Contributed by Macoron Fixed an exploit for generating infinite materials from protolathes. Contributed by EmoGarbage404 Fixed the damage/death overlay being off-centre while using the “separated” HUD layout. Contributed by metalgearsloth Pinpointer arrow should be more accurate. Contributed by Macoron Alt-clicking can now be used on hands again. Contributed by ShadowCommander Wiki now displays the proper names and descriptions for chemistry recipes and the rest instead of the localization keys. Contributed by Carbonhell Pets can wear breath/medical masks and air tanks. Save those pets!. Contributed by JustinTrotter Fixed collision mispredictions when something like a locker or crates get toggled open and closed. Contributed by ElectroSR Ghosts can now toggle the lighting manager to be able to better observe dark areas. Contributed by Carbonhell Fixed a bug allowing lathes to infinitely print items when upgraded. Contributed by EmoGarbage404 You can inject all animals with syringes now. Veterinarians rejoice!. Contributed by rane Lightning is fixed to properly collide. Contributed by keronshb Construction menu displays correct icon for air injector. Contributed by eoineoineoin Allowed Proto-Kinetic Accelerators to be stored in the belt slot. Contributed by civilCornball Melee sounds and effects are now predicted and the client should generally match the server due to lag compensation. Contributed by metalgearsloth The forensic scanner makes a sound when printing. Contributed by Vordenburg changed the presents to be boxes and made a new present that has a surprise inside!. Contributed by Cheackraze Glowstick sprites inhand are now visible. Contributed by rolfero NPCs will now try to stay ~1m away from you for melee rather than 0.2m, meaning rat servants will no longer sit under you in combat. Contributed by metalgearsloth Nanotrasen has finally ditched the paper helmet scheme! Expect your old-school security helmets to protect you now!. Contributed by asperger-sind Holofans and tiny fans are airtight again. Contributed by Macoron You can now inspect/strip someone through the examine tooltip again. Contributed by rolfero After a very long time, speed loaders have finally been fixed. Contributed by PixelTheKermit Decreased how many items can fit in a reagent grinder. Contributed by EmoGarbage404 Lawyers and Librarians can spawn with the Satchel and Duffelbag variants. Contributed by Mervill You can no longer sleepwalk from slipping while tired. Contributed by keronshb Lighthouse Station. Contributed by OldDanceJacket Fixed weird zombie attack animations. Contributed by EmoGarbage404 The coughing sounds are shorter. Contributed by DogZeroX Added gas miners to Pillar. Crew can now enjoy breathing!. Contributed by eoineoineoin The puking noise has been removed. Contributed by DogZeroX Computer’s hitbox is now smaller. Contributed by DogZeroX You can now print out artifact analyzer scans. Contributed by EmoGarbage404 Events are now quieter. Contributed by DogZeroX Some common objects that where indestructible now have proper destructible data, including Air Alarms, Surveillance Cameras and Extinguisher Cabinets. Contributed by Mervill Increased the likelihood of seeing certain rare artifact effects. Contributed by EmoGarbage404 Welder tanks explode when shot with projectile guns. (Also don’t poke them with a spear). Contributed by JustinTrotter Cognizine has a taste now. Contributed by Interrobang01 Fixed rich text wrapping. Contributed by PJB3005 Added ban list window for admins. Contributed by DrSmugleaf Fixed a rounding error which would cause certain parts in machine upgrades to not work. This has mostly affected the artifact analyzer. Contributed by EmoGarbage404 Combat mode no longer disables alt-clicking. Contributed by ElectroSR The savage magnet now has functional LED lights. Contributed by JustinTrotter Fixed LOOC chat prefix not working. Now messages starting starting with “(” just be interpreted as LOOC chat. Contributed by ElectroSR Origin station has been pulled temporarily due to needing re-review. Contributed by moony Fixes an issue where teleporting would happen if someone raised a riot shield . Contributed by keronshb Eswords can damage windows now. Contributed by GoodWheatley You can’t turn chameleon hat into cat ears. Contributed by Macoron Fixed a broken inhand for the fire extinguisher. Contributed by EmoGarbage404 Hydroponics trays and soil now properly rotate with the player perspective. Contributed by EmoGarbage404 Fixes access permissions for maintenance door on saltern. Contributed by nikthechampiongr Recycler counts the number of recycled items. Contributed by Mervill Fix damage effect persisting indefinitely. Contributed by metalgearsloth Chameleon masks and helmets can hide your identity. Contributed by Macoron The ‘toggle ghosts’ button while a ghost is now an action. Contributed by mirrorcult Names show during the join announcement again. Contributed by rane Resprited the Detective’s Coat. Contributed by EmoGarbage404 Omnitool can cut lattice and pry unpowered doors. Contributed by Macoron Added machine upgrades for the medical scanner. You can now decrease the chance that cloning fails on a body. Contributed by EmoGarbage404 Added damage to gas tanks and utensils!. Contributed by illersaver Fixed mice and other small entities becoming unable to move sometimes after they leave a container. Contributed by rane the RPED can now actually be printed at protolathes. Contributed by EmoGarbage404 add missing flame to cowelder. Contributed by Gaxeer Item artifacts can now be scanned. Contributed by EmoGarbage404 Magnet artifacts can now be activated with magboots. Contributed by EmoGarbage404 You can no longer use an RPED to increase a generator’s power output infinitely. Contributed by EmoGarbage404 Individual stations can now have specific emergency shuttles. Contributed by Vordenburg Fixed a bug causing gas/fire visuals to sometimes not update properly. Contributed by ElectroSR Items dropped onto a moving Conveyor by the disposal network move immediately . Contributed by Mervill Fix conveyor assemblies being un-interactable after deconstruct. Contributed by Mervill Hopefully fixed an issue that was causing entities to sometimes not appear (e.g., “invisible walls”). Please re-report if it reoccurs on updated servers. Contributed by ElectroSR The RPG-7 can be loaded again with its proper ammo. Contributed by Vordenburg Heterochromia is now available through the markings tab, located under the head section. Contributed by Scribbles0 Fixed missing text regarding voice triggers. Contributed by EmoGarbage404 Chemists have stopped pouring dangerous chemicals into the vents. Contributed by Pangogie Item artifacts can now be sprayed properly. Contributed by EmoGarbage404 Nanotrasen and Syndicate revolvers have been retrofitted to use .45 magnum rounds instead of .40. Happy shooting!. Contributed by asperger-sind Gas recyclers can now be upgrades to reduce the minimum required temperature and pressure. Contributed by EmoGarbage404 Added confirmation button for character deletion. Contributed by nikthechampiongr Air Alarm UI is now easier to understand. Contributed by eoineoineoin Credits Contributors Since Last Progress Report 773 pull requests, authored by: 0x6273, AJCM-git, amylizzle, AruMoon, asperger-sind, brainfood1183, Bright0, Carbonhell, Cheackraze, Chief-Engineer, ChilbroBaggins, civilCornball, corentt, Daemon, deathride58, deltanedas, dmnct, DogZeroX, dontbetank, DrSmugleaf, Easypoller, eclips_e, ElectroSR, Emisse, EmoGarbage404, eoineoineoin, Flareguy, Gaxeer, GoodWheatley, illersaver, Interrobang01, Jackrost, jicksaw, juliangiebel, JustinTrotter, keronshb, KIBORG04, lapatison, Macoron, Mervill, metalgearsloth, mirrorcult, moony, Morb0, Mr0maks, Nairodian, nikthechampiongr, notafet, OldDanceJacket, Pangogie, PaulRitter, PixelTheKermit, PJB3005, QuietlyWhisper, rane, rolfero, S1ss3l, Salex08, Scribbles0, ShadowCommander, ssdaniel24, Stealthbomber16, stopka-html, TemporalOroboros, tgrkzus, theashtronaut, Theomund, timothyteakettle, veliebm, Veritius, Vordenburg, Willhelm53, wrexbe, Ygg01, Zumorica
Patrons Akira Shiroyanagi [無情な男], Aleksey, Alix Shepard, Altana, Anthony Fleck, AquaDraco, Ari., Austin Nelson, Bobberunio, Brandon Campbell, Carbonhell, clyf, Codmiestero7, Cormos Lemming, CPM311, Dan, Dan Griskardian, Daniel Thompson, Darren Brady, Daskata, Dave, DramaBuns, DubzyVEVO, Durp, Eric VW, Ethan Keller, Evan Armstrong, Farewell Fire, Fiebertraum Illhead, Florian, Gavin Simmons, Gaxeer, Gnomo, Gothryd, Hamcha, ikamuse johnson, Jeff Tatem, Jeremy Hernandez, JhenMaster, John Edward Hamilton Barchard, Joshington Awesomahee, Kevin, KevKev, Kris Piper, lapatison, Late Fox, liltenhead, March, Matouš Hrdlička, Matthew C Miklaucic, Mikhail, Mitchell Marry, Mono, Never Solus, Nicholas Hillblom, Odin The Wanderer, osborn, Pasemi, Peter “Azmond” Newhouse, Ramiro Agis, Rasmus Cedergren, Robin Rottstock, rosysyntax, russell, Samtaro, Saphire, Scott MacCombie, Skarlet, spinnermaster, Tamora Droppa, ThatGuyGW, The Hateful Flesh, TheGoldElite, tokie, Tomeno, tomhendo, Uinseann, Unknown Kiwi, vifs_vestige, Viridian, Wallace Megas, Will M., Wrexbe, Zandario, Александр Белошапка
\ No newline at end of file
+
Progress Report #39: Happy Holidelays - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Progress Report #39: Happy Holidelays Contributed by DrSmugleaf & ike709 Monday March 6, 2023 Remember when progress reports used to be released on time every month? Neither do we! PR39 covers November and December 2022.
Content XenoArcheology Contributed by EmoGarbage404
Artifacts have gotten a big overhaul with the introduction of XenoArcheology! A new subdepartment of Science, XenoArch revolves around exploring the graph-like structure of artifacts; each node is randomly generated with its own effects and triggers. Unlocking these nodes generates points, but be careful! The artifact might throw you, shatter windows, deliver a carp straight to your face, or just leave you in a bad mood: the possibilities are endless!
These changes also include an overhauled tech tree and a variety of new machines and items. Go do some science and discover all the new goodies!
RIPLEY Mechs Contributed by EmoGarbage404
After several years of over-budget and misguided development, the science team has finally created Cargo’s beloved mech, the Ripley. For use only for sanctioned cargo transfer (but who cares about the rules?)
PDA Catridges & UI Overhaul Contributed by juliangiebel
Thinktronic has released a new version of RobustOS™ for all PDA tablets. It includes a complete UI rewrite, support for installing programs via cartridges, a crew manifest, and it now comes in a variety of new colors.
NetProbe Cartridge Contributed by juliangiebel
NetProbe is one of the first all-new PDA cartridges. Use it on any networked device to see its network info, and it can store up to 9 entries!
Rapid Parts Exchange Device Contributed by EmoGarbage404
Scientists, rejoice! The Rapid Parts Exchange Device is now available. Just fill it up with parts, whack a machine with it, and the upgrade is complete!
Contributed by rolfero
Engineering uncrossed some wires in the airlock circuitry, so now you can link buttons and levers to them and windoors. Assuming you have access, of course.
Target Dummies & Practice Guns Contributed by Daemon
After repeated friendly-fire incidents, Central Command has decided to supply Security with a variety of practice targets and a practice laser gun. All officers are encouraged to spend some time at the range. A subsequent request for clarification confirmed that tying up the Clown for target practice is still permitted as long as non-lethal weaponry is used.
Fax Machines Contributed by Morb0
You can now pester Central Command with state-of-the-art fax machines.
VIDEO Intercoms Contributed by EmoGarbage404
Intercoms have been added. Unfortunately the marketing department couldn’t come up with anything clever to say about it.
Prayers Contributed by eclips_e
After several complaints from the Chaplain, the Captain has agreed to let crewmembers use the altar to pray to whatever gods may be listening. Tread lightly, or risk invoking their wrath.
Subdermal Implants Contributed by keronshb
Subdermal implants are now available for implantation. They come in a variety of flavors such as trackers, bombs, and storage units.
Job Descriptions Contributed by mirrorcult
After numerous complaints in some variation of “That’s not in the job description!”, Central Command has now written job descriptions for all roles. You can read them via the job priority screen.
Diona Contributed by EmoGarbage404
Central Command has approved the employment of Diona aboard the station. They’re a real tree-t to be around and they wood love to help out.
Mapping Courser Emergency Evacuation Shuttle Contributed by Cheackraze
The Courser is the latest and greatest emergency shuttle for getting the hell out of dodge.
Minor Changes Due to length constraints, not everything can get a dedicated section in the progress report and instead will be found listed here.
As of Progress Report 39, the Minor Changes section is now auto-generated from SS14’s in-game changelog. So if you read the changelog, you won’t see anything new here and you can skip to the next section.
Minor Features/Fixes/Balancing Added the technology disk terminal, where you can exchange 2500 research points for a random technology disk. Contributed by EmoGarbage404 Added the Traversal Distorter, a machine capable of pushing Artifacts’ random node traversal in certain directions. Simply place an artifact on the machine and you can choose how you want to encourage it. Contributed by EmoGarbage404 CentCom now calls the shuttle automatically after a long round. Contributed by notafet Added the Node Scanner, which can identify the ID of an artifact’s node with a single click. Contributed by EmoGarbage404 Item artifacts. Artifact spawns may now spawn handheld artifacts, which have a suite of new triggers and very useful effects, with more coming. Contributed by mirrorcult The radar shown in mass scanners and shuttle consoles now resizes gracefully, scaling as expected with whatever breathing room it has!. Contributed by deathride58 Radiation suit and hardsuits have built-in geiger counter. Contributed by Macoron Medbay can now obtain cryo pods, specialized cryogenics machines used to lower the temperature of a patient to extreme values somewhat safely to use specific chemicals, such as cryoxadone. Contributed by Carbonhell Wet floor sparkles are now slightly more opaque and stay invisible for less of their animation cycle. Contributed by Willhelm53 All humanoid metabolized reagents should apply effects proportional to how much was taken in. Eating 0.1u of a paralyzation drug will stun you for 1/5 the time as eating 0.5u. Contributed by rane The Syndicate has adjusted the price of several uplink items to encourage traitors to use more diverse strategies. Contributed by GoodWheatley Added new animal, pig, and new chef’s pet-companion. Contributed by lapatison All NT personnel have been trained to apply handcuffs in an aggressive manner. Contributed by dmnct Added a Party crate to cargo. Contributed by Cheackraze PA now activates the singularity generator again. Contributed by TemporalOroboros ability to mix reactions with certain entities, included example being blood can be converted into wine using a bible at a ratio of 1:1. Contributed by timothyteakettle Grids can now handle multiple gravity generators. Contributed by metalgearsloth Wall mounted generators and substations actually mounted on a wall can now be ~punched~ reached. Contributed by dmnct Vehicles now inherit access from the rider instead of having access defined on the vehicle itself. Contributed by EmoGarbage404 Weld modular mines and grenades to salvage them. Contributed by deltanedas Radio chat now supports department specific radio prefixes. Contributed by tgrkzus Escape key clears chat input. Contributed by jicksaw Fix planet footstep sound modifiers. Contributed by metalgearsloth Toggle internals icon correctly toggles gas tanks equipped on your back. Contributed by JustinTrotter All station events are no longer capped at a certain number of occurrences. Contributed by EmoGarbage404 You can now put both holosign projectors and wet floor signs into the janibelt. Contributed by Interrobang01 Ghosts can now toggle seeing FoV. Contributed by mirrorcult Turrets will now shoot space targets. Contributed by metalgearsloth Added hot plates for heating up beakers. No longer are chemists bound to the humble microwave. Contributed by EmoGarbage404 Burning entities now emit light. Contributed by ElectroSR Kick AFK players. Contributed by Morb0 Fixed a server error when spawning nuke ops. Contributed by DrSmugleaf NPCs will now smash and pry correctly. Contributed by metalgearsloth Dead people can no longer sleep. Contributed by dmnct Nanotrasen has begun experiments with advanced locker technology. Contributed by Chief-Engineer Toy ammunition boxes can be re-filled again. Contributed by Vordenburg Revamped the Nuke Ops round end screen. Contributed by EmoGarbage404 Intercoms can now be rotated properly. Contributed by EmoGarbage404 NT has begun distribution of books from the ‘Newton’s Guide to Atmos’ series to stations. Contributed by Chief-Engineer Rat servants will pathfind under doors again. Contributed by metalgearsloth Added bag for carrying books and cargo order to get more of them. Contributed by dontbetank Admins will have an easier time running santa-related events (as santa can see inside gifts). Contributed by moony Blood stains now fade out instead of becoming sparkles. Contributed by EmoGarbage404 Bump NPC avoidance range and fix some instances of unapproved dancing. Contributed by metalgearsloth NPCs will ignore stationary allies for separation. Pets in particular will move through other stationary pets. Contributed by metalgearsloth NPCs will no longer stall on 1 bad path. Contributed by metalgearsloth The internals alert will blink again when your gas tank need to be refilled. Contributed by corentt the price of food now depends on its nutritional capacity. Contributed by corentt The fallback for the ‘keep another traitor alive’ condition now just gives you stay alive rather than telling you to keep yourself alive. Contributed by rane Armor prices are calculated based on damage reduction. Contributed by rolfero Changed the laser crate to now require armory access. Contributed by Nairodian Upgradeable machines can now be examined to show the effects that the upgrades have. Contributed by 0x6273 Faxes received a stamp scanning module. Contributed by Morb0 Added forensic pads, zipties and glasses to the secfab. Contributed by Nairodian Allowed gas filters to be reset to filter no gases. Contributed by Vordenburg Fluids now spill slowly, rather than quantum tunneling to optimal size. Contributed by Ygg01 Added a practice disabler. Contributed by Cheackraze Docking ports on shuttles no longer force welded doors open. Have fun welding the shuttle doors shut. Contributed by Mervill The Lobby’s ready button now clearly states whether you are ready not. Hopefully this reduces confusion!. Contributed by theashtronaut Added a current readied player count to the lobby info during the pre-game phase. Contributed by theashtronaut Added a volume slider for the lobby & round-end music so you can enjoy it without blowing out your eardrums. Contributed by theashtronaut Shot Projectiles cause impulses like it was supposed to. Contributed by Salex08 Stealth boxes have been rebalanced. They now require players to move slower to stay hidden, collide with bullets, and can no longer trap simple mobs. Contributed by keronshb Objectives involving other traitors should be more reliable at providing traitors that are alive and not SSD. Contributed by rane fixed windoor hacking. Contributed by JustinTrotter Fixed vehicles not working. Contributed by ElectroSR Cat ears now cost 26tc. Contributed by mirrorcult Added XenoSci things and a mass scanner for salvage crew to Lighthouse. Contributed by Cheackraze Overdrawing with a syringe no longer destroys the transferred solution. Contributed by JustinTrotter Mousetraps no longer autokill cardboard box users. Contributed by keronshb Droppers behave more like injectors. Contributed by JustinTrotter The flames of lit welders now look bright in the dark. Contributed by Vordenburg You now shove people rather than “disarm” them if they aren’t holding anything. Contributed by rane internals tanks with air no longer flash warning. Contributed by Bright0 Removed duplicate disarm popup when disarming someone with an item in their hands. Contributed by ShadowCommander Clarified machine missing messages for the cloner. Contributed by Vordenburg You can no longer use machines which require vision while blind. Contributed by rane Added a Toggle Ghosts button on the ghost GUI to get rid of those pesky apparitions. Contributed by ShadowCommander Fixed an issue where crates would clip through firelocks. Contributed by keronshb Cell charger is destructible and doesn’t block mobs movement. Contributed by Macoron Fixed an exploit for generating infinite materials from protolathes. Contributed by EmoGarbage404 Fixed the damage/death overlay being off-centre while using the “separated” HUD layout. Contributed by metalgearsloth Pinpointer arrow should be more accurate. Contributed by Macoron Alt-clicking can now be used on hands again. Contributed by ShadowCommander Wiki now displays the proper names and descriptions for chemistry recipes and the rest instead of the localization keys. Contributed by Carbonhell Pets can wear breath/medical masks and air tanks. Save those pets!. Contributed by JustinTrotter Fixed collision mispredictions when something like a locker or crates get toggled open and closed. Contributed by ElectroSR Ghosts can now toggle the lighting manager to be able to better observe dark areas. Contributed by Carbonhell Fixed a bug allowing lathes to infinitely print items when upgraded. Contributed by EmoGarbage404 You can inject all animals with syringes now. Veterinarians rejoice!. Contributed by rane Lightning is fixed to properly collide. Contributed by keronshb Construction menu displays correct icon for air injector. Contributed by eoineoineoin Allowed Proto-Kinetic Accelerators to be stored in the belt slot. Contributed by civilCornball Melee sounds and effects are now predicted and the client should generally match the server due to lag compensation. Contributed by metalgearsloth The forensic scanner makes a sound when printing. Contributed by Vordenburg changed the presents to be boxes and made a new present that has a surprise inside!. Contributed by Cheackraze Glowstick sprites inhand are now visible. Contributed by rolfero NPCs will now try to stay ~1m away from you for melee rather than 0.2m, meaning rat servants will no longer sit under you in combat. Contributed by metalgearsloth Nanotrasen has finally ditched the paper helmet scheme! Expect your old-school security helmets to protect you now!. Contributed by asperger-sind Holofans and tiny fans are airtight again. Contributed by Macoron You can now inspect/strip someone through the examine tooltip again. Contributed by rolfero After a very long time, speed loaders have finally been fixed. Contributed by PixelTheKermit Decreased how many items can fit in a reagent grinder. Contributed by EmoGarbage404 Lawyers and Librarians can spawn with the Satchel and Duffelbag variants. Contributed by Mervill You can no longer sleepwalk from slipping while tired. Contributed by keronshb Lighthouse Station. Contributed by OldDanceJacket Fixed weird zombie attack animations. Contributed by EmoGarbage404 The coughing sounds are shorter. Contributed by DogZeroX Added gas miners to Pillar. Crew can now enjoy breathing!. Contributed by eoineoineoin The puking noise has been removed. Contributed by DogZeroX Computer’s hitbox is now smaller. Contributed by DogZeroX You can now print out artifact analyzer scans. Contributed by EmoGarbage404 Events are now quieter. Contributed by DogZeroX Some common objects that where indestructible now have proper destructible data, including Air Alarms, Surveillance Cameras and Extinguisher Cabinets. Contributed by Mervill Increased the likelihood of seeing certain rare artifact effects. Contributed by EmoGarbage404 Welder tanks explode when shot with projectile guns. (Also don’t poke them with a spear). Contributed by JustinTrotter Cognizine has a taste now. Contributed by Interrobang01 Fixed rich text wrapping. Contributed by PJB3005 Added ban list window for admins. Contributed by DrSmugleaf Fixed a rounding error which would cause certain parts in machine upgrades to not work. This has mostly affected the artifact analyzer. Contributed by EmoGarbage404 Combat mode no longer disables alt-clicking. Contributed by ElectroSR The savage magnet now has functional LED lights. Contributed by JustinTrotter Fixed LOOC chat prefix not working. Now messages starting starting with “(” just be interpreted as LOOC chat. Contributed by ElectroSR Origin station has been pulled temporarily due to needing re-review. Contributed by moony Fixes an issue where teleporting would happen if someone raised a riot shield . Contributed by keronshb Eswords can damage windows now. Contributed by GoodWheatley You can’t turn chameleon hat into cat ears. Contributed by Macoron Fixed a broken inhand for the fire extinguisher. Contributed by EmoGarbage404 Hydroponics trays and soil now properly rotate with the player perspective. Contributed by EmoGarbage404 Fixes access permissions for maintenance door on saltern. Contributed by nikthechampiongr Recycler counts the number of recycled items. Contributed by Mervill Fix damage effect persisting indefinitely. Contributed by metalgearsloth Chameleon masks and helmets can hide your identity. Contributed by Macoron The ’toggle ghosts’ button while a ghost is now an action. Contributed by mirrorcult Names show during the join announcement again. Contributed by rane Resprited the Detective’s Coat. Contributed by EmoGarbage404 Omnitool can cut lattice and pry unpowered doors. Contributed by Macoron Added machine upgrades for the medical scanner. You can now decrease the chance that cloning fails on a body. Contributed by EmoGarbage404 Added damage to gas tanks and utensils!. Contributed by illersaver Fixed mice and other small entities becoming unable to move sometimes after they leave a container. Contributed by rane the RPED can now actually be printed at protolathes. Contributed by EmoGarbage404 add missing flame to cowelder. Contributed by Gaxeer Item artifacts can now be scanned. Contributed by EmoGarbage404 Magnet artifacts can now be activated with magboots. Contributed by EmoGarbage404 You can no longer use an RPED to increase a generator’s power output infinitely. Contributed by EmoGarbage404 Individual stations can now have specific emergency shuttles. Contributed by Vordenburg Fixed a bug causing gas/fire visuals to sometimes not update properly. Contributed by ElectroSR Items dropped onto a moving Conveyor by the disposal network move immediately . Contributed by Mervill Fix conveyor assemblies being un-interactable after deconstruct. Contributed by Mervill Hopefully fixed an issue that was causing entities to sometimes not appear (e.g., “invisible walls”). Please re-report if it reoccurs on updated servers. Contributed by ElectroSR The RPG-7 can be loaded again with its proper ammo. Contributed by Vordenburg Heterochromia is now available through the markings tab, located under the head section. Contributed by Scribbles0 Fixed missing text regarding voice triggers. Contributed by EmoGarbage404 Chemists have stopped pouring dangerous chemicals into the vents. Contributed by Pangogie Item artifacts can now be sprayed properly. Contributed by EmoGarbage404 Nanotrasen and Syndicate revolvers have been retrofitted to use .45 magnum rounds instead of .40. Happy shooting!. Contributed by asperger-sind Gas recyclers can now be upgrades to reduce the minimum required temperature and pressure. Contributed by EmoGarbage404 Added confirmation button for character deletion. Contributed by nikthechampiongr Air Alarm UI is now easier to understand. Contributed by eoineoineoin Credits Contributors Since Last Progress Report 773 pull requests, authored by: 0x6273, AJCM-git, amylizzle, AruMoon, asperger-sind, brainfood1183, Bright0, Carbonhell, Cheackraze, Chief-Engineer, ChilbroBaggins, civilCornball, corentt, Daemon, deathride58, deltanedas, dmnct, DogZeroX, dontbetank, DrSmugleaf, Easypoller, eclips_e, ElectroSR, Emisse, EmoGarbage404, eoineoineoin, Flareguy, Gaxeer, GoodWheatley, illersaver, Interrobang01, Jackrost, jicksaw, juliangiebel, JustinTrotter, keronshb, KIBORG04, lapatison, Macoron, Mervill, metalgearsloth, mirrorcult, moony, Morb0, Mr0maks, Nairodian, nikthechampiongr, notafet, OldDanceJacket, Pangogie, PaulRitter, PixelTheKermit, PJB3005, QuietlyWhisper, rane, rolfero, S1ss3l, Salex08, Scribbles0, ShadowCommander, ssdaniel24, Stealthbomber16, stopka-html, TemporalOroboros, tgrkzus, theashtronaut, Theomund, timothyteakettle, veliebm, Veritius, Vordenburg, Willhelm53, wrexbe, Ygg01, Zumorica
Patrons Akira Shiroyanagi [無情な男], Aleksey, Alix Shepard, Altana, Anthony Fleck, AquaDraco, Ari., Austin Nelson, Bobberunio, Brandon Campbell, Carbonhell, clyf, Codmiestero7, Cormos Lemming, CPM311, Dan, Dan Griskardian, Daniel Thompson, Darren Brady, Daskata, Dave, DramaBuns, DubzyVEVO, Durp, Eric VW, Ethan Keller, Evan Armstrong, Farewell Fire, Fiebertraum Illhead, Florian, Gavin Simmons, Gaxeer, Gnomo, Gothryd, Hamcha, ikamuse johnson, Jeff Tatem, Jeremy Hernandez, JhenMaster, John Edward Hamilton Barchard, Joshington Awesomahee, Kevin, KevKev, Kris Piper, lapatison, Late Fox, liltenhead, March, Matouš Hrdlička, Matthew C Miklaucic, Mikhail, Mitchell Marry, Mono, Never Solus, Nicholas Hillblom, Odin The Wanderer, osborn, Pasemi, Peter “Azmond” Newhouse, Ramiro Agis, Rasmus Cedergren, Robin Rottstock, rosysyntax, russell, Samtaro, Saphire, Scott MacCombie, Skarlet, spinnermaster, Tamora Droppa, ThatGuyGW, The Hateful Flesh, TheGoldElite, tokie, Tomeno, tomhendo, Uinseann, Unknown Kiwi, vifs_vestige, Viridian, Wallace Megas, Will M., Wrexbe, Zandario, Александр Белошапка
\ No newline at end of file
diff --git a/post/index.html b/post/index.html
index 6cf5ae0..334fc2b 100644
--- a/post/index.html
+++ b/post/index.html
@@ -1,3 +1,5 @@
-
Space Station 14
Monday March 6, 2023 Remember when progress reports used to be released on time every month? Neither do we! PR39 covers November and December 2022.
Wednesday November 30, 2022 Oh yeah. We have a ton of huge changes like oldchat, machine upgrade improvements, playtime tracking, and more! We have some catching up to do, so this PR covers August through October 2022. As a consequence, we’ve gone insane skipped the Minor Changes.
Monday October 31, 2022 Better late than never, we’ll hopefully get back on track soon. (And if you’d like to help contribute, progress report writers are always welcome!)
Wednesday July 27, 2022 There’s so much new content that at least one Progress Report author has been driven mad! We’ve even surpassed /tg/station 13 by contributions per month.
Saturday June 25, 2022 Nuclear Operatives, magic, and more!
Wednesday May 25, 2022 Tons of improvements to the SS14 experience, and more!
Saturday April 30, 2022 There’s so many changes we couldn’t figure out how to cover them all!
Friday April 1, 2022 As promised in the last progress report, here’s the second half of our two-part special! This part covers February 2022.
Wednesday March 16, 2022 It’s been a minute since the last Progress Report, and there’s been so many changes that we had to break this one up into two parts! This part covers January 2022.
Monday January 17, 2022 Even with the winter holidays and a week-long feature freeze, December capped off a busy year for Space Station 14. In 2021, Space Station 14 had 2184 contributions, easily beating the 2020 contribution count of 1498.
\ No newline at end of file
+
Space Station 14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Monday March 6, 2023 Remember when progress reports used to be released on time every month? Neither do we! PR39 covers November and December 2022.
Wednesday November 30, 2022 Oh yeah. We have a ton of huge changes like oldchat, machine upgrade improvements, playtime tracking, and more! We have some catching up to do, so this PR covers August through October 2022. As a consequence, we’ve gone insane skipped the Minor Changes.
Monday October 31, 2022 Better late than never, we’ll hopefully get back on track soon. (And if you’d like to help contribute, progress report writers are always welcome!)
Wednesday July 27, 2022 There’s so much new content that at least one Progress Report author has been driven mad! We’ve even surpassed /tg/station 13 by contributions per month.
Saturday June 25, 2022 Nuclear Operatives, magic, and more!
Wednesday May 25, 2022 Tons of improvements to the SS14 experience, and more!
Saturday April 30, 2022 There’s so many changes we couldn’t figure out how to cover them all!
Friday April 1, 2022 As promised in the last progress report, here’s the second half of our two-part special! This part covers February 2022.
Wednesday March 16, 2022 It’s been a minute since the last Progress Report, and there’s been so many changes that we had to break this one up into two parts! This part covers January 2022.
Monday January 17, 2022 Even with the winter holidays and a week-long feature freeze, December capped off a busy year for Space Station 14. In 2021, Space Station 14 had 2184 contributions, easily beating the 2020 contribution count of 1498.
\ No newline at end of file
diff --git a/post/index.xml b/post/index.xml
index 0091890..dce4746 100644
--- a/post/index.xml
+++ b/post/index.xml
@@ -1,5 +1,12 @@
-
Space Station 14 https://spacestation14.io/post/Recent content on Space Station 14 Hugo -- gohugo.io en-us Mon, 06 Mar 2023 00:00:00 +0000 Progress Report #39: Happy Holidelays https://spacestation14.io/post/23-03-06-progress-report-39/Mon, 06 Mar 2023 00:00:00 +0000 https://spacestation14.io/post/23-03-06-progress-report-39/ <p>Remember when progress reports used to be released on time every month? Neither do we! PR39 covers November and December 2022.</p> Progress Report #38: Oh Baby a Triple https://spacestation14.io/post/22-11-30-progress-report-38/Wed, 30 Nov 2022 00:00:00 +0000 https://spacestation14.io/post/22-11-30-progress-report-38/ <p>Oh yeah. We have a ton of huge changes like oldchat, machine upgrade improvements, playtime tracking, and more! We have some catching up to do, so this PR covers August through October 2022. As a consequence, we’ve <del>gone insane</del> skipped the Minor Changes.</p> Progress Report #37: Love, Geoff, and Robots https://spacestation14.io/post/22-10-31-progress-report-37/Mon, 31 Oct 2022 00:00:00 +0000 https://spacestation14.io/post/22-10-31-progress-report-37/ <p>Better late than never, we’ll hopefully get back on track soon. (And if you’d like to help contribute, progress report writers are always welcome!)</p> Progress Report #36: Too Much of a Good Thing https://spacestation14.io/post/22-07-27-progress-report-36/Wed, 27 Jul 2022 00:00:00 +0000 https://spacestation14.io/post/22-07-27-progress-report-36/ <p>There’s so much new content that at least one Progress Report author has been driven mad! We’ve even surpassed /tg/station 13 by contributions per month.</p> Progress Report #35: Going Nuclear https://spacestation14.io/post/22-06-25-progress-report-35/Sat, 25 Jun 2022 00:00:00 +0000 https://spacestation14.io/post/22-06-25-progress-report-35/ <p>Nuclear Operatives, magic, and more!</p> Progress Report #34: Manifest Destiny https://spacestation14.io/post/22-05-25-progress-report-34/Wed, 25 May 2022 00:00:00 +0000 https://spacestation14.io/post/22-05-25-progress-report-34/ <p>Tons of improvements to the SS14 experience, and more!</p> Progress Report #33: Delta Variant https://spacestation14.io/post/22-04-30-progress-report-33/Sat, 30 Apr 2022 00:00:00 +0000 https://spacestation14.io/post/22-04-30-progress-report-33/ <p>There’s so many changes we couldn’t figure out how to cover them all!</p> Progress Report #32: Geoff https://spacestation14.io/post/22-04-01-progress-report-32/Fri, 01 Apr 2022 00:00:00 +0000 https://spacestation14.io/post/22-04-01-progress-report-32/ <p>As promised in the last progress report, here’s the second half of our two-part special! This part covers February 2022.</p> Progress Report #31: Duck, Duck, Weh https://spacestation14.io/post/22-03-16-progress-report-31/Wed, 16 Mar 2022 00:00:00 +0000 https://spacestation14.io/post/22-03-16-progress-report-31/ <p>It’s been a minute since the last Progress Report, and there’s been so many changes that we had to break this one up into two parts! This part covers January 2022.</p> Progress Report #30: A Short Freeze for Winter https://spacestation14.io/post/22-01-11-progress-report-30/Mon, 17 Jan 2022 00:00:00 +0000 https://spacestation14.io/post/22-01-11-progress-report-30/ <p>Even with the winter holidays and a week-long feature freeze, December capped off a busy year for Space Station 14. In 2021, Space Station 14 had 2184 contributions, easily beating the 2020 contribution count of 1498.</p> Progress Report #29: A Lot To Unpack https://spacestation14.io/post/21-12-09-progress-report-29/Thu, 09 Dec 2021 00:00:00 +0000 https://spacestation14.io/post/21-12-09-progress-report-29/ <p>Space Station 14 underwent so many changes in November that we had to split them off into a separate progress report. From November 4th to December 4th, the Space Station 14 code base had 357 contributions made - easily beating the two month period covered by Progress Report 28.</p> Progress Report #28: Atmosia Rising https://spacestation14.io/post/21-11-24-progress-report-28/Wed, 24 Nov 2021 00:00:00 +0000 https://spacestation14.io/post/21-11-24-progress-report-28/ <p>The last couple of months have been a huge step forward for Space Station 14, with a total of 315 contributions made to the SS14 codebase between September 29th and November 3rd, and nearly 700 commits to SS14 and the RobustToolbox engine.</p> Progress Report #27: Transported to the Chess Dimension https://spacestation14.io/post/21-10-01-progress-report-27/Wed, 29 Sep 2021 00:00:00 +0000 https://spacestation14.io/post/21-10-01-progress-report-27/ Progress Report #26: Lītigium In Forīs https://spacestation14.io/post/21-05-07-progress-report-26/Fri, 07 May 2021 00:00:00 +0000 https://spacestation14.io/post/21-05-07-progress-report-26/ Progress Report #25: Blowing Off Steam https://spacestation14.io/post/21-02-12-progress-report-25/Sun, 07 Feb 2021 00:00:00 +0000 https://spacestation14.io/post/21-02-12-progress-report-25/ Progress Report #24: Atmos Sim Remake Now Simulates Atmos https://spacestation14.io/post/20-10-16-progress-report-24/Fri, 16 Oct 2020 00:00:00 +0000 https://spacestation14.io/post/20-10-16-progress-report-24/ Progress Report #23: We Didn't Want To Wait Until Atmos Was Done https://spacestation14.io/post/20-07-22-progress-report-23/Wed, 22 Jul 2020 00:00:00 +0000 https://spacestation14.io/post/20-07-22-progress-report-23/ <p>Sadly atmos is not done yet. A lot of other stuff is though!</p> Progress Report #22: Full Steam Ahead https://spacestation14.io/post/20-06-07-progress-report-22/Sun, 07 Jun 2020 00:00:00 +0000 https://spacestation14.io/post/20-06-07-progress-report-22/ <p>It has been 3 months since the last post, we have a lot to tell you!</p> Progress Report #21: Colonial Marines, lighting, features https://spacestation14.io/post/20-02-24-progress-report-21/Mon, 24 Feb 2020 00:00:00 +0000 https://spacestation14.io/post/20-02-24-progress-report-21/ <p>We have big news for everyone who enjoys slaying meat sacks as a xenomorph, futilely hiding in a locker as a survivor, or being eaten alive as a marine…</p> Progress Report #20: 2020 Resolution Failed https://spacestation14.io/post/20-01-24-progress-report-20/Fri, 24 Jan 2020 00:00:00 +0000 https://spacestation14.io/post/20-01-24-progress-report-20/ <p>Writing progress reports is hard. Usually it isn’t even writing the progress report itself, it’s making the content we’ve added presentable.</p> Progress Report #19: 2x The Wait, 4x The Content https://spacestation14.io/post/19-10-22-progress-report-19/Tue, 22 Oct 2019 00:00:00 +0000 https://spacestation14.io/post/19-10-22-progress-report-19/ <p>Kept you waiting, huh?</p> Progress Report #18: Speech Bubbles & Slightly Better Launcher https://spacestation14.io/post/19-08-24-progress-report-18/Wed, 28 Aug 2019 00:00:00 +0000 https://spacestation14.io/post/19-08-24-progress-report-18/ <p>Writing these into sections is hard, did you know that?</p> Progress Report #17: Main UI Plans https://spacestation14.io/post/19-07-24-progress-report-17/Wed, 24 Jul 2019 00:00:00 +0000 https://spacestation14.io/post/19-07-24-progress-report-17/ <p>One of the biggest things that scare people away from SS13 is, of course, the terrible user interface.
-So, let’s make sure that isn’t the case for SS14!</p> Progress Report #16: Outline, Use, Kaboom https://spacestation14.io/post/19-06-07-progress-report-16/Sun, 07 Jul 2019 00:00:00 +0000 https://spacestation14.io/post/19-06-07-progress-report-16/ <p>As it turns out, <em>re-imagining</em> SS13 is a bit harder than simply <em>re-making</em> it. Not that that deters us.</p> Progress Report #15: Bye Godot https://spacestation14.io/post/19-05-12-progress-report-15/Sun, 12 May 2019 00:00:00 +0000 https://spacestation14.io/post/19-05-12-progress-report-15/ <p>Godot is finally dead, but it will always be there in our hearts.</p> Progress Report #14: Content & More Server https://spacestation14.io/post/19-04-22-progress-report-14/Mon, 22 Apr 2019 00:00:00 +0000 https://spacestation14.io/post/19-04-22-progress-report-14/ <p>This time on SS14: neat features and neat server features.</p> Progress Report #13: Permanent Public Server. https://spacestation14.io/post/19-04-02-progress-report-13/Tue, 02 Apr 2019 00:00:00 +0000 https://spacestation14.io/post/19-04-02-progress-report-13/ <p>Working on a massive project like this can be quite daunting. “Remake SS13” is quite a clear goal but far from concrete. Having intermediate goals to work towards is important. So for now, my goal at least is to get a permanent public server running.</p> Progress Report #12: Suddenly, Progress! https://spacestation14.io/post/19-03-23-progress-report-12/Sat, 23 Mar 2019 00:00:00 +0000 https://spacestation14.io/post/19-03-23-progress-report-12/ <p>Didn’t think you’d already see a new progress report now, did you?
-And especially not such a packed one!</p> Progress Report #11: UI & Animations https://spacestation14.io/post/19-03-17-progress-report-11/Sun, 17 Mar 2019 00:00:00 +0000 https://spacestation14.io/post/19-03-17-progress-report-11/ <p>The GUI system is much more complete now, so most interfaces work now.
-I also decided to actually code something NEW instead of purely catching up to Godot.</p> Progress Report #10: Nothing To Say For Ourselves https://spacestation14.io/post/19-02-20-progress-report-10/Sat, 23 Feb 2019 00:00:00 +0000 https://spacestation14.io/post/19-02-20-progress-report-10/ <p>Yeah I honestly have nothing to say for myself. You have the right to laugh.</p> Progress Report #9: The One Where We Implemented New Features https://spacestation14.io/post/18-12-14-progress-report-9/Fri, 14 Dec 2018 00:00:00 +0000 https://spacestation14.io/post/18-12-14-progress-report-9/ <p>Yeah, we really don’t have anything to say here, outside of “look at all these features!”</p> Progress Report #8: Writing Some Content https://spacestation14.io/post/18-09-19-progress-report-8/Wed, 19 Sep 2018 00:00:00 +0000 https://spacestation14.io/post/18-09-19-progress-report-8/ <p>It’s pretty nice to get to a point where we can worry purely about content without having to juggle the engine around all the time. I think we’re getting close to the point of reaching that now.</p> Progress Report #7: Visual https://spacestation14.io/post/18-06-24-progress-report-7/Sun, 24 Jun 2018 00:00:00 +0000 https://spacestation14.io/post/18-06-24-progress-report-7/ <p>Fancy graphics and less fancy menus.</p> Progress Report #6: Never say 'few' https://spacestation14.io/post/18-04-13-progress-report-6/Fri, 13 Apr 2018 00:00:00 +0000 https://spacestation14.io/post/18-04-13-progress-report-6/ <p>The wait is over.</p> Progress Report #5: Waiting for Godot https://spacestation14.io/post/18-02-26-progress-report-5/Mon, 26 Feb 2018 00:00:00 +0000 https://spacestation14.io/post/18-02-26-progress-report-5/ <p>So when was the last progress report made? November right?</p>
-<p>Oh jeez.</p> Nightly Builds Up (Properly!) https://spacestation14.io/post/17-10-25-nightly-builds-up-properly/Wed, 25 Oct 2017 00:00:00 +0000 https://spacestation14.io/post/17-10-25-nightly-builds-up-properly/ <p><a href="https://ss14.silvertorch5.io/jenkins/job/SS14%20Content%20Build/">Get your Windows, MacOS and Linux builds here!</a></p> Nightly Builds Up! https://spacestation14.io/post/17-10-21-nightly-builds-up-sorta/Sat, 21 Oct 2017 00:00:00 +0000 https://spacestation14.io/post/17-10-21-nightly-builds-up-sorta/ <p><a href="https://ss14.silvertorch5.io/jenkins/job/SS14%20Content%20Build/">Nightly Windows & Linux builds here!</a></p> Progress Report #4: Robust Content Framework https://spacestation14.io/post/17-08-17-progress-report-4/Thu, 17 Aug 2017 00:00:00 +0000 https://spacestation14.io/post/17-08-17-progress-report-4/ <p>It’s been a couple weeks since the last progress report, and lots has happened since then. Refactors, setting up the content repo, and more!</p> Progress Report #3: Ending the pre-alpha https://spacestation14.io/post/17-07-25-progress-report-3/Tue, 25 Jul 2017 00:00:00 +0000 https://spacestation14.io/post/17-07-25-progress-report-3/ <p>So stuff’s been quiet for the past 14 days. I can give you an annoying excuse or I can just accept that weekly progress reports aren’t working <em>yet</em>. As such <strong>progress reports will no longer be scheduled and done whenever we feel there’s something big to report</strong>, like today!</p> Progress report #2: Refactor Hell https://spacestation14.io/post/17-07-10-progress-report-2/Mon, 10 Jul 2017 00:00:00 +0000 https://spacestation14.io/post/17-07-10-progress-report-2/ <p>The progress report took a bit to get here, because I uploaded #1 two days too late, and not a lot of substance for a report happened between then and when #2 should’ve happened. Not the case anymore though, got plenty to write about this time!</p> Progress Report #1: Revive https://spacestation14.io/post/17-06-26-progress-report-1/Mon, 26 Jun 2017 00:00:00 +0000 https://spacestation14.io/post/17-06-26-progress-report-1/ <p>You’re reading this on the new website for SS14! After <a href="https://i.imgur.com/Q3cUg29.gif">lots of hard work with CSS</a>, the website is ready to recieve progress reports and other news.</p>
\ No newline at end of file
+
Space Station 14 https://spacestation14.com/post/Recent content on Space Station 14 Hugo -- gohugo.io en-us Mon, 06 Mar 2023 00:00:00 +0000 Progress Report #39: Happy Holidelays https://spacestation14.com/post/23-03-06-progress-report-39/Mon, 06 Mar 2023 00:00:00 +0000 https://spacestation14.com/post/23-03-06-progress-report-39/ <p>Remember when progress reports used to be released on time every month? Neither do we! PR39 covers November and December 2022.</p> Progress Report #38: Oh Baby a Triple https://spacestation14.com/post/22-11-30-progress-report-38/Wed, 30 Nov 2022 00:00:00 +0000 https://spacestation14.com/post/22-11-30-progress-report-38/ <p>Oh yeah. We have a ton of huge changes like oldchat, machine upgrade improvements, playtime tracking, and more! We have some catching up to do, so this PR covers August through October 2022. As a consequence, we’ve <del>gone insane</del> skipped the Minor Changes.</p> Progress Report #37: Love, Geoff, and Robots https://spacestation14.com/post/22-10-31-progress-report-37/Mon, 31 Oct 2022 00:00:00 +0000 https://spacestation14.com/post/22-10-31-progress-report-37/ <p>Better late than never, we’ll hopefully get back on track soon. (And if you’d like to help contribute, progress report writers are always welcome!)</p> Progress Report #36: Too Much of a Good Thing https://spacestation14.com/post/22-07-27-progress-report-36/Wed, 27 Jul 2022 00:00:00 +0000 https://spacestation14.com/post/22-07-27-progress-report-36/ <p>There’s so much new content that at least one Progress Report author has been driven mad! We’ve even surpassed /tg/station 13 by contributions per month.</p> Progress Report #35: Going Nuclear https://spacestation14.com/post/22-06-25-progress-report-35/Sat, 25 Jun 2022 00:00:00 +0000 https://spacestation14.com/post/22-06-25-progress-report-35/ <p>Nuclear Operatives, magic, and more!</p> Progress Report #34: Manifest Destiny https://spacestation14.com/post/22-05-25-progress-report-34/Wed, 25 May 2022 00:00:00 +0000 https://spacestation14.com/post/22-05-25-progress-report-34/ <p>Tons of improvements to the SS14 experience, and more!</p> Progress Report #33: Delta Variant https://spacestation14.com/post/22-04-30-progress-report-33/Sat, 30 Apr 2022 00:00:00 +0000 https://spacestation14.com/post/22-04-30-progress-report-33/ <p>There’s so many changes we couldn’t figure out how to cover them all!</p> Progress Report #32: Geoff https://spacestation14.com/post/22-04-01-progress-report-32/Fri, 01 Apr 2022 00:00:00 +0000 https://spacestation14.com/post/22-04-01-progress-report-32/ <p>As promised in the last progress report, here’s the second half of our two-part special! This part covers February 2022.</p> Progress Report #31: Duck, Duck, Weh https://spacestation14.com/post/22-03-16-progress-report-31/Wed, 16 Mar 2022 00:00:00 +0000 https://spacestation14.com/post/22-03-16-progress-report-31/ <p>It’s been a minute since the last Progress Report, and there’s been so many changes that we had to break this one up into two parts! This part covers January 2022.</p> Progress Report #30: A Short Freeze for Winter https://spacestation14.com/post/22-01-11-progress-report-30/Mon, 17 Jan 2022 00:00:00 +0000 https://spacestation14.com/post/22-01-11-progress-report-30/ <p>Even with the winter holidays and a week-long feature freeze, December capped off a busy year for Space Station 14. In 2021, Space Station 14 had 2184 contributions, easily beating the 2020 contribution count of 1498.</p> Progress Report #29: A Lot To Unpack https://spacestation14.com/post/21-12-09-progress-report-29/Thu, 09 Dec 2021 00:00:00 +0000 https://spacestation14.com/post/21-12-09-progress-report-29/ <p>Space Station 14 underwent so many changes in November that we had to split them off into a separate progress report. From November 4th to December 4th, the Space Station 14 code base had 357 contributions made - easily beating the two month period covered by Progress Report 28.</p> Progress Report #28: Atmosia Rising https://spacestation14.com/post/21-11-24-progress-report-28/Wed, 24 Nov 2021 00:00:00 +0000 https://spacestation14.com/post/21-11-24-progress-report-28/ <p>The last couple of months have been a huge step forward for Space Station 14, with a total of 315 contributions made to the SS14 codebase between September 29th and November 3rd, and nearly 700 commits to SS14 and the RobustToolbox engine.</p> Progress Report #27: Transported to the Chess Dimension https://spacestation14.com/post/21-10-01-progress-report-27/Wed, 29 Sep 2021 00:00:00 +0000 https://spacestation14.com/post/21-10-01-progress-report-27/ Website Upgrade As you may have noticed, our official website has gotten a major facelift thanks to PJB. We also commissioned some nice new background art from AsPev as a replacement for our old one which was a little crusty. You can download a full resolution of it here.
+Updated Playtest Schedule We’re moving playtests to a consistent schedule due to their popularity and developers wanting more feedback from the community on the state of the game. Progress Report #26: Lītigium In Forīs https://spacestation14.com/post/21-05-07-progress-report-26/Fri, 07 May 2021 00:00:00 +0000 https://spacestation14.com/post/21-05-07-progress-report-26/ 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. Progress Report #25: Blowing Off Steam https://spacestation14.com/post/21-02-12-progress-report-25/Sun, 07 Feb 2021 00:00:00 +0000 https://spacestation14.com/post/21-02-12-progress-report-25/ Playtest We’re proud to announce that Space Station 14 is now available through the new Steam Playtest feature. Originally we were planning to do a full release through Early Access, but we felt that a more limited release was a better match for the current state of SS14 development.
+To gain access, simply visit the SS14 store page and click Request Access. You’ll be added to the pool of people who are waiting, which we randomly draw from when we feel we could use more players. Progress Report #24: Atmos Sim Remake Now Simulates Atmos https://spacestation14.com/post/20-10-16-progress-report-24/Fri, 16 Oct 2020 00:00:00 +0000 https://spacestation14.com/post/20-10-16-progress-report-24/ Barebones rounds! Throughout the years, we’ve put a lot of work into developing the engine and framework necessary for Space Station 14 to have playable content. Last year, we transitioned to developing player-facing features and gameplay in earnest, and we’ve made a lot of progress in that short timespan!
+SS14 now has playable, albeit barebones, rounds. As we add more features the number of complex interactions grows, and so does the need for testing the game with real players. Progress Report #23: We Didn't Want To Wait Until Atmos Was Done https://spacestation14.com/post/20-07-22-progress-report-23/Wed, 22 Jul 2020 00:00:00 +0000 https://spacestation14.com/post/20-07-22-progress-report-23/ <p>Sadly atmos is not done yet. A lot of other stuff is though!</p> Progress Report #22: Full Steam Ahead https://spacestation14.com/post/20-06-07-progress-report-22/Sun, 07 Jun 2020 00:00:00 +0000 https://spacestation14.com/post/20-06-07-progress-report-22/ <p>It has been 3 months since the last post, we have a lot to tell you!</p> Progress Report #21: Colonial Marines, lighting, features https://spacestation14.com/post/20-02-24-progress-report-21/Mon, 24 Feb 2020 00:00:00 +0000 https://spacestation14.com/post/20-02-24-progress-report-21/ <p>We have big news for everyone who enjoys slaying meat sacks as a xenomorph, futilely hiding in a locker as a survivor, or being eaten alive as a marine…</p> Progress Report #20: 2020 Resolution Failed https://spacestation14.com/post/20-01-24-progress-report-20/Fri, 24 Jan 2020 00:00:00 +0000 https://spacestation14.com/post/20-01-24-progress-report-20/ <p>Writing progress reports is hard. Usually it isn’t even writing the progress report itself, it’s making the content we’ve added presentable.</p> Progress Report #19: 2x The Wait, 4x The Content https://spacestation14.com/post/19-10-22-progress-report-19/Tue, 22 Oct 2019 00:00:00 +0000 https://spacestation14.com/post/19-10-22-progress-report-19/ <p>Kept you waiting, huh?</p> Progress Report #18: Speech Bubbles & Slightly Better Launcher https://spacestation14.com/post/19-08-24-progress-report-18/Wed, 28 Aug 2019 00:00:00 +0000 https://spacestation14.com/post/19-08-24-progress-report-18/ <p>Writing these into sections is hard, did you know that?</p> Progress Report #17: Main UI Plans https://spacestation14.com/post/19-07-24-progress-report-17/Wed, 24 Jul 2019 00:00:00 +0000 https://spacestation14.com/post/19-07-24-progress-report-17/ <p>One of the biggest things that scare people away from SS13 is, of course, the terrible user interface.
+So, let’s make sure that isn’t the case for SS14!</p> Progress Report #16: Outline, Use, Kaboom https://spacestation14.com/post/19-06-07-progress-report-16/Sun, 07 Jul 2019 00:00:00 +0000 https://spacestation14.com/post/19-06-07-progress-report-16/ <p>As it turns out, <em>re-imagining</em> SS13 is a bit harder than simply <em>re-making</em> it. Not that that deters us.</p> Progress Report #15: Bye Godot https://spacestation14.com/post/19-05-12-progress-report-15/Sun, 12 May 2019 00:00:00 +0000 https://spacestation14.com/post/19-05-12-progress-report-15/ <p>Godot is finally dead, but it will always be there in our hearts.</p> Progress Report #14: Content & More Server https://spacestation14.com/post/19-04-22-progress-report-14/Mon, 22 Apr 2019 00:00:00 +0000 https://spacestation14.com/post/19-04-22-progress-report-14/ <p>This time on SS14: neat features and neat server features.</p> Progress Report #13: Permanent Public Server. https://spacestation14.com/post/19-04-02-progress-report-13/Tue, 02 Apr 2019 00:00:00 +0000 https://spacestation14.com/post/19-04-02-progress-report-13/ <p>Working on a massive project like this can be quite daunting. “Remake SS13” is quite a clear goal but far from concrete. Having intermediate goals to work towards is important. So for now, my goal at least is to get a permanent public server running.</p> Progress Report #12: Suddenly, Progress! https://spacestation14.com/post/19-03-23-progress-report-12/Sat, 23 Mar 2019 00:00:00 +0000 https://spacestation14.com/post/19-03-23-progress-report-12/ <p>Didn’t think you’d already see a new progress report now, did you?
+And especially not such a packed one!</p> Progress Report #11: UI & Animations https://spacestation14.com/post/19-03-17-progress-report-11/Sun, 17 Mar 2019 00:00:00 +0000 https://spacestation14.com/post/19-03-17-progress-report-11/ <p>The GUI system is much more complete now, so most interfaces work now.
+I also decided to actually code something NEW instead of purely catching up to Godot.</p> Progress Report #10: Nothing To Say For Ourselves https://spacestation14.com/post/19-02-20-progress-report-10/Sat, 23 Feb 2019 00:00:00 +0000 https://spacestation14.com/post/19-02-20-progress-report-10/ <p>Yeah I honestly have nothing to say for myself. You have the right to laugh.</p> Progress Report #9: The One Where We Implemented New Features https://spacestation14.com/post/18-12-14-progress-report-9/Fri, 14 Dec 2018 00:00:00 +0000 https://spacestation14.com/post/18-12-14-progress-report-9/ <p>Yeah, we really don’t have anything to say here, outside of “look at all these features!”</p> Progress Report #8: Writing Some Content https://spacestation14.com/post/18-09-19-progress-report-8/Wed, 19 Sep 2018 00:00:00 +0000 https://spacestation14.com/post/18-09-19-progress-report-8/ <p>It’s pretty nice to get to a point where we can worry purely about content without having to juggle the engine around all the time. I think we’re getting close to the point of reaching that now.</p> Progress Report #7: Visual https://spacestation14.com/post/18-06-24-progress-report-7/Sun, 24 Jun 2018 00:00:00 +0000 https://spacestation14.com/post/18-06-24-progress-report-7/ <p>Fancy graphics and less fancy menus.</p> Progress Report #6: Never say 'few' https://spacestation14.com/post/18-04-13-progress-report-6/Fri, 13 Apr 2018 00:00:00 +0000 https://spacestation14.com/post/18-04-13-progress-report-6/ <p>The wait is over.</p> Progress Report #5: Waiting for Godot https://spacestation14.com/post/18-02-26-progress-report-5/Mon, 26 Feb 2018 00:00:00 +0000 https://spacestation14.com/post/18-02-26-progress-report-5/ <p>So when was the last progress report made? November right?</p>
+<p>Oh jeez.</p> Nightly Builds Up (Properly!) https://spacestation14.com/post/17-10-25-nightly-builds-up-properly/Wed, 25 Oct 2017 00:00:00 +0000 https://spacestation14.com/post/17-10-25-nightly-builds-up-properly/ <p><a href="https://ss14.silvertorch5.io/jenkins/job/SS14%20Content%20Build/">Get your Windows, MacOS and Linux builds here!</a></p> Nightly Builds Up! https://spacestation14.com/post/17-10-21-nightly-builds-up-sorta/Sat, 21 Oct 2017 00:00:00 +0000 https://spacestation14.com/post/17-10-21-nightly-builds-up-sorta/ <p><a href="https://ss14.silvertorch5.io/jenkins/job/SS14%20Content%20Build/">Nightly Windows & Linux builds here!</a></p> Progress Report #4: Robust Content Framework https://spacestation14.com/post/17-08-17-progress-report-4/Thu, 17 Aug 2017 00:00:00 +0000 https://spacestation14.com/post/17-08-17-progress-report-4/ <p>It’s been a couple weeks since the last progress report, and lots has happened since then. Refactors, setting up the content repo, and more!</p> Progress Report #3: Ending the pre-alpha https://spacestation14.com/post/17-07-25-progress-report-3/Tue, 25 Jul 2017 00:00:00 +0000 https://spacestation14.com/post/17-07-25-progress-report-3/ <p>So stuff’s been quiet for the past 14 days. I can give you an annoying excuse or I can just accept that weekly progress reports aren’t working <em>yet</em>. As such <strong>progress reports will no longer be scheduled and done whenever we feel there’s something big to report</strong>, like today!</p> Progress report #2: Refactor Hell https://spacestation14.com/post/17-07-10-progress-report-2/Mon, 10 Jul 2017 00:00:00 +0000 https://spacestation14.com/post/17-07-10-progress-report-2/ <p>The progress report took a bit to get here, because I uploaded #1 two days too late, and not a lot of substance for a report happened between then and when #2 should’ve happened. Not the case anymore though, got plenty to write about this time!</p> Progress Report #1: Revive https://spacestation14.com/post/17-06-26-progress-report-1/Mon, 26 Jun 2017 00:00:00 +0000 https://spacestation14.com/post/17-06-26-progress-report-1/ <p>You’re reading this on the new website for SS14! After <a href="https://i.imgur.com/Q3cUg29.gif">lots of hard work with CSS</a>, the website is ready to recieve progress reports and other news.</p>
\ No newline at end of file
diff --git a/post/page/1/index.html b/post/page/1/index.html
index 8fe57db..1d6acc3 100644
--- a/post/page/1/index.html
+++ b/post/page/1/index.html
@@ -1 +1,2 @@
-
https://spacestation14.io/post/
\ No newline at end of file
+
https://spacestation14.com/post/
+
\ No newline at end of file
diff --git a/post/page/2/index.html b/post/page/2/index.html
index 3354e43..80d9c66 100644
--- a/post/page/2/index.html
+++ b/post/page/2/index.html
@@ -1,3 +1,12 @@
-
Space Station 14
Thursday December 9, 2021 Space Station 14 underwent so many changes in November that we had to split them off into a separate progress report. From November 4th to December 4th, the Space Station 14 code base had 357 contributions made - easily beating the two month period covered by Progress Report 28.
Wednesday November 24, 2021 The last couple of months have been a huge step forward for Space Station 14, with a total of 315 contributions made to the SS14 codebase between September 29th and November 3rd, and nearly 700 commits to SS14 and the RobustToolbox engine.
Wednesday September 29, 2021 Wednesday July 22, 2020 Sadly atmos is not done yet. A lot of other stuff is though!
Sunday June 7, 2020 It has been 3 months since the last post, we have a lot to tell you!
Monday February 24, 2020 We have big news for everyone who enjoys slaying meat sacks as a xenomorph, futilely hiding in a locker as a survivor, or being eaten alive as a marine…
Friday January 24, 2020 Writing progress reports is hard. Usually it isn’t even writing the progress report itself, it’s making the content we’ve added presentable.
\ No newline at end of file
+
Space Station 14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Thursday December 9, 2021 Space Station 14 underwent so many changes in November that we had to split them off into a separate progress report. From November 4th to December 4th, the Space Station 14 code base had 357 contributions made - easily beating the two month period covered by Progress Report 28.
Wednesday November 24, 2021 The last couple of months have been a huge step forward for Space Station 14, with a total of 315 contributions made to the SS14 codebase between September 29th and November 3rd, and nearly 700 commits to SS14 and the RobustToolbox engine.
Wednesday September 29, 2021 Website Upgrade As you may have noticed, our official website has gotten a major facelift thanks to PJB. We also commissioned some nice new background art from AsPev as a replacement for our old one which was a little crusty. You can download a full resolution of it here.
+Updated Playtest Schedule We’re moving playtests to a consistent schedule due to their popularity and developers wanting more feedback from the community on the state of the game.
Friday May 7, 2021 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.
Sunday February 7, 2021 Playtest We’re proud to announce that Space Station 14 is now available through the new Steam Playtest feature. Originally we were planning to do a full release through Early Access, but we felt that a more limited release was a better match for the current state of SS14 development.
+To gain access, simply visit the SS14 store page and click Request Access. You’ll be added to the pool of people who are waiting, which we randomly draw from when we feel we could use more players.
Friday October 16, 2020 Barebones rounds! Throughout the years, we’ve put a lot of work into developing the engine and framework necessary for Space Station 14 to have playable content. Last year, we transitioned to developing player-facing features and gameplay in earnest, and we’ve made a lot of progress in that short timespan!
+SS14 now has playable, albeit barebones, rounds. As we add more features the number of complex interactions grows, and so does the need for testing the game with real players.
Wednesday July 22, 2020 Sadly atmos is not done yet. A lot of other stuff is though!
Sunday June 7, 2020 It has been 3 months since the last post, we have a lot to tell you!
Monday February 24, 2020 We have big news for everyone who enjoys slaying meat sacks as a xenomorph, futilely hiding in a locker as a survivor, or being eaten alive as a marine…
Friday January 24, 2020 Writing progress reports is hard. Usually it isn’t even writing the progress report itself, it’s making the content we’ve added presentable.
\ No newline at end of file
diff --git a/post/page/3/index.html b/post/page/3/index.html
index a61f493..bb988a0 100644
--- a/post/page/3/index.html
+++ b/post/page/3/index.html
@@ -1,6 +1,8 @@
-
Space Station 14
Tuesday October 22, 2019 Kept you waiting, huh?
Wednesday August 28, 2019 Writing these into sections is hard, did you know that?
Wednesday July 24, 2019 One of the biggest things that scare people away from SS13 is, of course, the terrible user interface.
+
Space Station 14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Tuesday October 22, 2019 Kept you waiting, huh?
Wednesday August 28, 2019 Writing these into sections is hard, did you know that?
Wednesday July 24, 2019 One of the biggest things that scare people away from SS13 is, of course, the terrible user interface.
So, let’s make sure that isn’t the case for SS14!
Sunday July 7, 2019 As it turns out, re-imagining SS13 is a bit harder than simply re-making it. Not that that deters us.
Sunday May 12, 2019 Godot is finally dead, but it will always be there in our hearts.
Monday April 22, 2019 This time on SS14: neat features and neat server features.
Tuesday April 2, 2019 Working on a massive project like this can be quite daunting. “Remake SS13” is quite a clear goal but far from concrete. Having intermediate goals to work towards is important. So for now, my goal at least is to get a permanent public server running.
Saturday March 23, 2019 Didn’t think you’d already see a new progress report now, did you?
And especially not such a packed one!
Sunday March 17, 2019 The GUI system is much more complete now, so most interfaces work now.
-I also decided to actually code something NEW instead of purely catching up to Godot.
Saturday February 23, 2019 Yeah I honestly have nothing to say for myself. You have the right to laugh.
\ No newline at end of file
+I also decided to actually code something NEW instead of purely catching up to Godot.
Saturday February 23, 2019 Yeah I honestly have nothing to say for myself. You have the right to laugh.
\ No newline at end of file
diff --git a/post/page/4/index.html b/post/page/4/index.html
index f3c8c3a..5d2f30b 100644
--- a/post/page/4/index.html
+++ b/post/page/4/index.html
@@ -1,3 +1,5 @@
-
Space Station 14
Friday December 14, 2018 Yeah, we really don’t have anything to say here, outside of “look at all these features!”
Wednesday September 19, 2018 It’s pretty nice to get to a point where we can worry purely about content without having to juggle the engine around all the time. I think we’re getting close to the point of reaching that now.
Sunday June 24, 2018 Fancy graphics and less fancy menus.
Friday April 13, 2018 The wait is over.
Monday February 26, 2018 So when was the last progress report made? November right?
Oh jeez.
Thursday August 17, 2017 It’s been a couple weeks since the last progress report, and lots has happened since then. Refactors, setting up the content repo, and more!
Tuesday July 25, 2017 So stuff’s been quiet for the past 14 days. I can give you an annoying excuse or I can just accept that weekly progress reports aren’t working yet . As such progress reports will no longer be scheduled and done whenever we feel there’s something big to report , like today!
Monday July 10, 2017 The progress report took a bit to get here, because I uploaded #1 two days too late, and not a lot of substance for a report happened between then and when #2 should’ve happened. Not the case anymore though, got plenty to write about this time!
\ No newline at end of file
+
Space Station 14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Friday December 14, 2018 Yeah, we really don’t have anything to say here, outside of “look at all these features!”
Wednesday September 19, 2018 It’s pretty nice to get to a point where we can worry purely about content without having to juggle the engine around all the time. I think we’re getting close to the point of reaching that now.
Sunday June 24, 2018 Fancy graphics and less fancy menus.
Friday April 13, 2018 The wait is over.
Monday February 26, 2018 So when was the last progress report made? November right?
Oh jeez.
Thursday August 17, 2017 It’s been a couple weeks since the last progress report, and lots has happened since then. Refactors, setting up the content repo, and more!
Tuesday July 25, 2017 So stuff’s been quiet for the past 14 days. I can give you an annoying excuse or I can just accept that weekly progress reports aren’t working yet . As such progress reports will no longer be scheduled and done whenever we feel there’s something big to report , like today!
Monday July 10, 2017 The progress report took a bit to get here, because I uploaded #1 two days too late, and not a lot of substance for a report happened between then and when #2 should’ve happened. Not the case anymore though, got plenty to write about this time!
\ No newline at end of file
diff --git a/post/page/5/index.html b/post/page/5/index.html
index 79acc3e..5dd1518 100644
--- a/post/page/5/index.html
+++ b/post/page/5/index.html
@@ -1,3 +1,5 @@
-
Space Station 14
Monday June 26, 2017 You’re reading this on the new website for SS14! After lots of hard work with CSS , the website is ready to recieve progress reports and other news.
\ No newline at end of file
+
Space Station 14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Monday June 26, 2017 You’re reading this on the new website for SS14! After lots of hard work with CSS , the website is ready to recieve progress reports and other news.
\ No newline at end of file
diff --git a/sitemap.xml b/sitemap.xml
index c93dbbf..20aae32 100644
--- a/sitemap.xml
+++ b/sitemap.xml
@@ -1 +1 @@
-
https://spacestation14.io/post/ 2023-03-06T00:00:00+00:00 https://spacestation14.io/post/23-03-06-progress-report-39/ 2023-03-06T00:00:00+00:00 https://spacestation14.io/ 2023-03-06T00:00:00+00:00 https://spacestation14.io/post/22-11-30-progress-report-38/ 2022-11-30T00:00:00+00:00 https://spacestation14.io/post/22-10-31-progress-report-37/ 2022-10-31T00:00:00+00:00 https://spacestation14.io/post/22-07-27-progress-report-36/ 2022-07-27T00:00:00+00:00 https://spacestation14.io/post/22-06-25-progress-report-35/ 2022-06-25T00:00:00+00:00 https://spacestation14.io/post/22-05-25-progress-report-34/ 2022-05-25T00:00:00+00:00 https://spacestation14.io/post/22-04-30-progress-report-33/ 2022-04-30T00:00:00+00:00 https://spacestation14.io/post/22-04-01-progress-report-32/ 2022-04-01T00:00:00+00:00 https://spacestation14.io/post/22-03-16-progress-report-31/ 2022-03-16T00:00:00+00:00 https://spacestation14.io/post/22-01-11-progress-report-30/ 2022-01-17T00:00:00+00:00 https://spacestation14.io/post/21-12-09-progress-report-29/ 2021-12-09T00:00:00+00:00 https://spacestation14.io/post/21-11-24-progress-report-28/ 2021-11-24T00:00:00+00:00 https://spacestation14.io/post/21-10-01-progress-report-27/ 2021-09-29T00:00:00+00:00 https://spacestation14.io/post/21-05-07-progress-report-26/ 2021-05-07T00:00:00+00:00 https://spacestation14.io/post/21-02-12-progress-report-25/ 2021-02-07T00:00:00+00:00 https://spacestation14.io/post/20-10-16-progress-report-24/ 2020-10-16T00:00:00+00:00 https://spacestation14.io/post/20-07-22-progress-report-23/ 2020-07-22T00:00:00+00:00 https://spacestation14.io/about/ 2020-06-09T00:00:00+00:00 https://spacestation14.io/about/faq/ 2020-06-09T00:00:00+00:00 https://spacestation14.io/post/20-06-07-progress-report-22/ 2020-06-07T00:00:00+00:00 https://spacestation14.io/about/contact/ 2020-05-17T00:00:00+00:00 https://spacestation14.io/post/20-02-24-progress-report-21/ 2020-02-24T00:00:00+00:00 https://spacestation14.io/post/20-01-24-progress-report-20/ 2020-01-24T00:00:00+00:00 https://spacestation14.io/post/19-10-22-progress-report-19/ 2019-10-22T00:00:00+00:00 https://spacestation14.io/post/19-08-24-progress-report-18/ 2019-08-28T00:00:00+00:00 https://spacestation14.io/post/19-07-24-progress-report-17/ 2019-07-24T00:00:00+00:00 https://spacestation14.io/post/19-06-07-progress-report-16/ 2019-07-07T00:00:00+00:00 https://spacestation14.io/post/19-05-12-progress-report-15/ 2019-05-12T00:00:00+00:00 https://spacestation14.io/post/19-04-22-progress-report-14/ 2019-04-22T00:00:00+00:00 https://spacestation14.io/post/19-04-02-progress-report-13/ 2019-04-02T00:00:00+00:00 https://spacestation14.io/post/19-03-23-progress-report-12/ 2019-03-23T00:00:00+00:00 https://spacestation14.io/post/19-03-17-progress-report-11/ 2019-03-17T00:00:00+00:00 https://spacestation14.io/post/19-02-20-progress-report-10/ 2019-02-23T00:00:00+00:00 https://spacestation14.io/post/18-12-14-progress-report-9/ 2018-12-14T00:00:00+00:00 https://spacestation14.io/post/18-09-19-progress-report-8/ 2018-09-19T00:00:00+00:00 https://spacestation14.io/post/18-06-24-progress-report-7/ 2018-06-24T00:00:00+00:00 https://spacestation14.io/about/nightlies/ 2018-04-13T00:00:00+00:00 https://spacestation14.io/post/18-04-13-progress-report-6/ 2018-04-13T00:00:00+00:00 https://spacestation14.io/post/18-02-26-progress-report-5/ 2018-02-26T00:00:00+00:00 https://spacestation14.io/post/17-10-25-nightly-builds-up-properly/ 2017-10-25T00:00:00+00:00 https://spacestation14.io/post/17-10-21-nightly-builds-up-sorta/ 2017-10-21T00:00:00+00:00 https://spacestation14.io/post/17-08-17-progress-report-4/ 2017-08-17T00:00:00+00:00 https://spacestation14.io/post/17-07-25-progress-report-3/ 2017-07-25T00:00:00+00:00 https://spacestation14.io/post/17-07-10-progress-report-2/ 2017-07-10T00:00:00+00:00 https://spacestation14.io/post/17-06-26-progress-report-1/ 2017-06-26T00:00:00+00:00 https://spacestation14.io/about/about/ 2017-06-25T00:00:00+00:00
\ No newline at end of file
+
https://spacestation14.com/categories/update/ 2024-03-31T00:00:00+00:00 https://spacestation14.com/categories/ 2024-03-31T00:00:00+00:00 https://spacestation14.com/tags/liltenhead/ 2024-03-31T00:00:00+00:00 https://spacestation14.com/ 2024-03-31T00:00:00+00:00 https://spacestation14.com/tags/ 2024-03-31T00:00:00+00:00 https://spacestation14.com/updates/24-03-31-liltenhead-67/ 2024-03-31T00:00:00+00:00 https://spacestation14.com/updates/ 2024-03-31T00:00:00+00:00 https://spacestation14.com/updates/24-03-24-liltenhead-66/ 2024-03-24T00:00:00+00:00 https://spacestation14.com/updates/24-03-18-liltenhead-65/ 2024-03-18T00:00:00+00:00 https://spacestation14.com/post/ 2023-03-06T00:00:00+00:00 https://spacestation14.com/categories/progress-report/ 2023-03-06T00:00:00+00:00 https://spacestation14.com/post/23-03-06-progress-report-39/ 2023-03-06T00:00:00+00:00 https://spacestation14.com/post/22-11-30-progress-report-38/ 2022-11-30T00:00:00+00:00 https://spacestation14.com/post/22-10-31-progress-report-37/ 2022-10-31T00:00:00+00:00 https://spacestation14.com/post/22-07-27-progress-report-36/ 2022-07-27T00:00:00+00:00 https://spacestation14.com/post/22-06-25-progress-report-35/ 2022-06-25T00:00:00+00:00 https://spacestation14.com/post/22-05-25-progress-report-34/ 2022-05-25T00:00:00+00:00 https://spacestation14.com/post/22-04-30-progress-report-33/ 2022-04-30T00:00:00+00:00 https://spacestation14.com/post/22-04-01-progress-report-32/ 2022-04-01T00:00:00+00:00 https://spacestation14.com/post/22-03-16-progress-report-31/ 2022-03-16T00:00:00+00:00 https://spacestation14.com/post/22-01-11-progress-report-30/ 2022-01-17T00:00:00+00:00 https://spacestation14.com/post/21-12-09-progress-report-29/ 2021-12-09T00:00:00+00:00 https://spacestation14.com/post/21-11-24-progress-report-28/ 2021-11-24T00:00:00+00:00 https://spacestation14.com/post/21-10-01-progress-report-27/ 2021-09-29T00:00:00+00:00 https://spacestation14.com/post/21-05-07-progress-report-26/ 2021-05-07T00:00:00+00:00 https://spacestation14.com/post/21-02-12-progress-report-25/ 2021-02-07T00:00:00+00:00 https://spacestation14.com/post/20-10-16-progress-report-24/ 2020-10-16T00:00:00+00:00 https://spacestation14.com/post/20-07-22-progress-report-23/ 2020-07-22T00:00:00+00:00 https://spacestation14.com/about/ 2020-06-09T00:00:00+00:00 https://spacestation14.com/about/faq/ 2020-06-09T00:00:00+00:00 https://spacestation14.com/post/20-06-07-progress-report-22/ 2020-06-07T00:00:00+00:00 https://spacestation14.com/about/contact/ 2020-05-17T00:00:00+00:00 https://spacestation14.com/post/20-02-24-progress-report-21/ 2020-02-24T00:00:00+00:00 https://spacestation14.com/post/20-01-24-progress-report-20/ 2020-01-24T00:00:00+00:00 https://spacestation14.com/post/19-10-22-progress-report-19/ 2019-10-22T00:00:00+00:00 https://spacestation14.com/post/19-08-24-progress-report-18/ 2019-08-28T00:00:00+00:00 https://spacestation14.com/post/19-07-24-progress-report-17/ 2019-07-24T00:00:00+00:00 https://spacestation14.com/post/19-06-07-progress-report-16/ 2019-07-07T00:00:00+00:00 https://spacestation14.com/post/19-05-12-progress-report-15/ 2019-05-12T00:00:00+00:00 https://spacestation14.com/post/19-04-22-progress-report-14/ 2019-04-22T00:00:00+00:00 https://spacestation14.com/post/19-04-02-progress-report-13/ 2019-04-02T00:00:00+00:00 https://spacestation14.com/post/19-03-23-progress-report-12/ 2019-03-23T00:00:00+00:00 https://spacestation14.com/post/19-03-17-progress-report-11/ 2019-03-17T00:00:00+00:00 https://spacestation14.com/post/19-02-20-progress-report-10/ 2019-02-23T00:00:00+00:00 https://spacestation14.com/post/18-12-14-progress-report-9/ 2018-12-14T00:00:00+00:00 https://spacestation14.com/post/18-09-19-progress-report-8/ 2018-09-19T00:00:00+00:00 https://spacestation14.com/post/18-06-24-progress-report-7/ 2018-06-24T00:00:00+00:00 https://spacestation14.com/about/nightlies/ 2018-04-13T00:00:00+00:00 https://spacestation14.com/tags/godot/ 2018-04-13T00:00:00+00:00 https://spacestation14.com/post/18-04-13-progress-report-6/ 2018-04-13T00:00:00+00:00 https://spacestation14.com/post/18-02-26-progress-report-5/ 2018-02-26T00:00:00+00:00 https://spacestation14.com/post/17-10-25-nightly-builds-up-properly/ 2017-10-25T00:00:00+00:00 https://spacestation14.com/post/17-10-21-nightly-builds-up-sorta/ 2017-10-21T00:00:00+00:00 https://spacestation14.com/post/17-08-17-progress-report-4/ 2017-08-17T00:00:00+00:00 https://spacestation14.com/post/17-07-25-progress-report-3/ 2017-07-25T00:00:00+00:00 https://spacestation14.com/post/17-07-10-progress-report-2/ 2017-07-10T00:00:00+00:00 https://spacestation14.com/post/17-06-26-progress-report-1/ 2017-06-26T00:00:00+00:00 https://spacestation14.com/tags/website/ 2017-06-26T00:00:00+00:00 https://spacestation14.com/about/about/ 2017-06-25T00:00:00+00:00
\ No newline at end of file
diff --git a/tags/godot/index.html b/tags/godot/index.html
new file mode 100644
index 0000000..9f0287f
--- /dev/null
+++ b/tags/godot/index.html
@@ -0,0 +1,5 @@
+
Godot - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Friday April 13, 2018 The wait is over.
Monday February 26, 2018 So when was the last progress report made? November right?
Oh jeez.
\ No newline at end of file
diff --git a/tags/godot/index.xml b/tags/godot/index.xml
new file mode 100644
index 0000000..0dd2620
--- /dev/null
+++ b/tags/godot/index.xml
@@ -0,0 +1,2 @@
+
Godot on Space Station 14 https://spacestation14.com/tags/godot/Recent content in Godot on Space Station 14 Hugo -- gohugo.io en-us Fri, 13 Apr 2018 00:00:00 +0000 Progress Report #6: Never say 'few' https://spacestation14.com/post/18-04-13-progress-report-6/Fri, 13 Apr 2018 00:00:00 +0000 https://spacestation14.com/post/18-04-13-progress-report-6/ <p>The wait is over.</p> Progress Report #5: Waiting for Godot https://spacestation14.com/post/18-02-26-progress-report-5/Mon, 26 Feb 2018 00:00:00 +0000 https://spacestation14.com/post/18-02-26-progress-report-5/ <p>So when was the last progress report made? November right?</p>
+<p>Oh jeez.</p>
\ No newline at end of file
diff --git a/tags/godot/page/1/index.html b/tags/godot/page/1/index.html
new file mode 100644
index 0000000..3b576a6
--- /dev/null
+++ b/tags/godot/page/1/index.html
@@ -0,0 +1,2 @@
+
https://spacestation14.com/tags/godot/
+
\ No newline at end of file
diff --git a/tags/index.html b/tags/index.html
new file mode 100644
index 0000000..ccc6ab0
--- /dev/null
+++ b/tags/index.html
@@ -0,0 +1,5 @@
+
Tags - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
\ No newline at end of file
diff --git a/tags/index.xml b/tags/index.xml
new file mode 100644
index 0000000..9ffaa6e
--- /dev/null
+++ b/tags/index.xml
@@ -0,0 +1 @@
+
Tags on Space Station 14 https://spacestation14.com/tags/Recent content in Tags on Space Station 14 Hugo -- gohugo.io en-us Sun, 31 Mar 2024 00:00:00 +0000 Liltenhead https://spacestation14.com/tags/liltenhead/Sun, 31 Mar 2024 00:00:00 +0000 https://spacestation14.com/tags/liltenhead/ Godot https://spacestation14.com/tags/godot/Fri, 13 Apr 2018 00:00:00 +0000 https://spacestation14.com/tags/godot/ Website https://spacestation14.com/tags/website/Mon, 26 Jun 2017 00:00:00 +0000 https://spacestation14.com/tags/website/
\ No newline at end of file
diff --git a/tags/liltenhead/index.html b/tags/liltenhead/index.html
new file mode 100644
index 0000000..25ffc16
--- /dev/null
+++ b/tags/liltenhead/index.html
@@ -0,0 +1,5 @@
+
Liltenhead - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
\ No newline at end of file
diff --git a/tags/liltenhead/index.xml b/tags/liltenhead/index.xml
new file mode 100644
index 0000000..a6b7a8b
--- /dev/null
+++ b/tags/liltenhead/index.xml
@@ -0,0 +1 @@
+
Liltenhead on Space Station 14 https://spacestation14.com/tags/liltenhead/Recent content in Liltenhead on Space Station 14 Hugo -- gohugo.io en-us Sun, 31 Mar 2024 00:00:00 +0000 Update Vlog - 67 - (Cleaning Grenades, Explosion Changes, Rubber Bullet Removal) https://spacestation14.com/updates/24-03-31-liltenhead-67/Sun, 31 Mar 2024 00:00:00 +0000 https://spacestation14.com/updates/24-03-31-liltenhead-67/ Update Vlog - 66 - (Throwing Knives, Lone Ops Buff, Hacking Tweaks) https://spacestation14.com/updates/24-03-24-liltenhead-66/Sun, 24 Mar 2024 00:00:00 +0000 https://spacestation14.com/updates/24-03-24-liltenhead-66/ Update Vlog - 65 - Additions (IED Changes, Pipebomb, Plant Biomass Reclaimer) https://spacestation14.com/updates/24-03-18-liltenhead-65/Mon, 18 Mar 2024 00:00:00 +0000 https://spacestation14.com/updates/24-03-18-liltenhead-65/
\ No newline at end of file
diff --git a/tags/liltenhead/page/1/index.html b/tags/liltenhead/page/1/index.html
new file mode 100644
index 0000000..53b7e75
--- /dev/null
+++ b/tags/liltenhead/page/1/index.html
@@ -0,0 +1,2 @@
+
https://spacestation14.com/tags/liltenhead/
+
\ No newline at end of file
diff --git a/tags/page/1/index.html b/tags/page/1/index.html
new file mode 100644
index 0000000..2887ffd
--- /dev/null
+++ b/tags/page/1/index.html
@@ -0,0 +1,2 @@
+
https://spacestation14.com/tags/
+
\ No newline at end of file
diff --git a/tags/website/index.html b/tags/website/index.html
new file mode 100644
index 0000000..3924554
--- /dev/null
+++ b/tags/website/index.html
@@ -0,0 +1,5 @@
+
Website - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Monday June 26, 2017 You’re reading this on the new website for SS14! After lots of hard work with CSS , the website is ready to recieve progress reports and other news.
\ No newline at end of file
diff --git a/tags/website/index.xml b/tags/website/index.xml
new file mode 100644
index 0000000..5bba9a8
--- /dev/null
+++ b/tags/website/index.xml
@@ -0,0 +1 @@
+
Website on Space Station 14 https://spacestation14.com/tags/website/Recent content in Website on Space Station 14 Hugo -- gohugo.io en-us Mon, 26 Jun 2017 00:00:00 +0000 Progress Report #1: Revive https://spacestation14.com/post/17-06-26-progress-report-1/Mon, 26 Jun 2017 00:00:00 +0000 https://spacestation14.com/post/17-06-26-progress-report-1/ <p>You’re reading this on the new website for SS14! After <a href="https://i.imgur.com/Q3cUg29.gif">lots of hard work with CSS</a>, the website is ready to recieve progress reports and other news.</p>
\ No newline at end of file
diff --git a/tags/website/page/1/index.html b/tags/website/page/1/index.html
new file mode 100644
index 0000000..4c810eb
--- /dev/null
+++ b/tags/website/page/1/index.html
@@ -0,0 +1,2 @@
+
https://spacestation14.com/tags/website/
+
\ No newline at end of file
diff --git a/updates/24-03-18-liltenhead-65/index.html b/updates/24-03-18-liltenhead-65/index.html
new file mode 100644
index 0000000..a56f6aa
--- /dev/null
+++ b/updates/24-03-18-liltenhead-65/index.html
@@ -0,0 +1,5 @@
+
Update Vlog - 65 - Additions (IED Changes, Pipebomb, Plant Biomass Reclaimer) - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Update Vlog - 65 - Additions (IED Changes, Pipebomb, Plant Biomass Reclaimer) Contributed by Liltenhead Monday March 18, 2024
VIDEO
\ No newline at end of file
diff --git a/updates/24-03-24-liltenhead-66/index.html b/updates/24-03-24-liltenhead-66/index.html
new file mode 100644
index 0000000..9c9c909
--- /dev/null
+++ b/updates/24-03-24-liltenhead-66/index.html
@@ -0,0 +1,5 @@
+
Update Vlog - 66 - (Throwing Knives, Lone Ops Buff, Hacking Tweaks) - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Update Vlog - 66 - (Throwing Knives, Lone Ops Buff, Hacking Tweaks) Contributed by Liltenhead Sunday March 24, 2024
VIDEO
\ No newline at end of file
diff --git a/updates/24-03-31-liltenhead-67/index.html b/updates/24-03-31-liltenhead-67/index.html
new file mode 100644
index 0000000..f39303e
--- /dev/null
+++ b/updates/24-03-31-liltenhead-67/index.html
@@ -0,0 +1,5 @@
+
Update Vlog - 67 - (Cleaning Grenades, Explosion Changes, Rubber Bullet Removal) - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
Update Vlog - 67 - (Cleaning Grenades, Explosion Changes, Rubber Bullet Removal) Contributed by Liltenhead Sunday March 31, 2024
VIDEO
\ No newline at end of file
diff --git a/updates/index.html b/updates/index.html
new file mode 100644
index 0000000..0f056d6
--- /dev/null
+++ b/updates/index.html
@@ -0,0 +1,5 @@
+
Updates - SS14
+
+
{{statusData.name}} Players online: {{statusData.players}}
Map: {{statusData.map}}
Round is in the lobby
Round started {{ roundStartedAgo }} ago
Round just ended
{{address}}
\ No newline at end of file
diff --git a/updates/index.xml b/updates/index.xml
new file mode 100644
index 0000000..d5d3980
--- /dev/null
+++ b/updates/index.xml
@@ -0,0 +1 @@
+
Updates on Space Station 14 https://spacestation14.com/updates/Recent content in Updates on Space Station 14 Hugo -- gohugo.io en-us Sun, 31 Mar 2024 00:00:00 +0000 Update Vlog - 67 - (Cleaning Grenades, Explosion Changes, Rubber Bullet Removal) https://spacestation14.com/updates/24-03-31-liltenhead-67/Sun, 31 Mar 2024 00:00:00 +0000 https://spacestation14.com/updates/24-03-31-liltenhead-67/ Update Vlog - 66 - (Throwing Knives, Lone Ops Buff, Hacking Tweaks) https://spacestation14.com/updates/24-03-24-liltenhead-66/Sun, 24 Mar 2024 00:00:00 +0000 https://spacestation14.com/updates/24-03-24-liltenhead-66/ Update Vlog - 65 - Additions (IED Changes, Pipebomb, Plant Biomass Reclaimer) https://spacestation14.com/updates/24-03-18-liltenhead-65/Mon, 18 Mar 2024 00:00:00 +0000 https://spacestation14.com/updates/24-03-18-liltenhead-65/
\ No newline at end of file
diff --git a/updates/page/1/index.html b/updates/page/1/index.html
new file mode 100644
index 0000000..9f66826
--- /dev/null
+++ b/updates/page/1/index.html
@@ -0,0 +1,2 @@
+
https://spacestation14.com/updates/
+
\ No newline at end of file