Changes

Orbital

7,469 bytes added, 21:47, 3 April 2023
Adding link to YouTube video
* A strip of addressable LEDs
* A computer that is connected to the LEDs, running both the Orbital game server, and the LEDs controller server.
 
The "game server" is now also able to play atmospheric animations.
The code for the game server is hosted on GitHub : https://github.com/Pecamo/orbital
 
= Gameplay =
 
== Game mode ==
 
You play Orbital against other players, each using their smartphone. To start a game, at least two players are needed. Once the game starts, each player is assigned a color, a LED lights up to that color. A player controls their LED using three buttons on their phone :
 
* Left : Moves the player's LED to the left
* Right : Moves the player's LED to the right
* Shoot : Fires a projectile in the last moved direction. The distance it travels is proportional to the time elapsed since the last shot.
 
The goal is then to "kill" other players by firing a projectile at them all while staying alive. Two projectiles that meet cancel each other.
 
There's not real maximum amount of players, however in practice having 8 players at the same time already starts to be confusing.
 
== Strategy ==
 
With the default settings, players usually evade a projectile by staying at a long enough range or by firing at the incoming one. The battle royale mode forces the remaining players to get close to each other rapidly. Once only two players remain and are at close range, the strategy game that emerges is similar to a basic version of [https://sonichurricane.com/?page_id=1702 footsies] in classic fighting games.
 
== Settings ==
 
Some mechanics elements can be altered to diversify gameplay between games. For example :
 
* Activate "Battle Royale" mode to make a growing part of the field become deadly, forcing the remaining players to get closer to each other.
* "Missile collision" controls whether two projectiles cancel each other, or even if only the weakest one gets destroyed.
* "Shot cooldown" controls the minimum amount of time a player must wait to shoot again.
 
== Lamp mode ==
 
There's also a "Lamp mode", which is not a game : it uses the LED strip to play atmospheric animations. The animations are pre-programmed patterns that have varying customizable parts (such as speed, color, brightness, etc.).
= Instances =
 
[[File:Orbital_FIXME_finished.jpg|thumb|right|Orbital FIXME initializing with all LEDs set to white]]
There is currently two slightly different variants of what we call "Orbital" that are running.
=== Orbital FIXME ===
Orbital FIXME is the name of the Orbital instance that runs in the local. You can play it on [https://orbital.fixme.chorbital.fixme.ch]
This is the original version and first running instance of the game.
=== Orbital Portable ===
 
[[File:Orbital_portable_finished.jpg|300px|thumb|right|Orbital Portable running the rainbow animation]]
Orbital Portable is a variant whose purpose is to be portable so that we can deploy it wherever we want. The goal is to bring it to events and parties, and bring people together by making they play a simple using their phone.
* A power source for the RasPi. We can either connect it to a standard electric Swiss socket, or to an external battery system.
* A phone that runs a WiFi access point. (We usually just use our personal phone)
* A "portal", which is a public web page that will redirect connecting players to the RasPi's local IP address.In this case, it is accessible at https://orbital.run ==== Visualization ==== Here's a diagram showing how all of the required collaborating components are connected. [[File:Orbital_portable_sequence_diagram_calls.png|thumb|right|Sequence diagram showing the communications between each device: From the moment the RasPi connects to the internet during the setup, to when a end-user connects to the game.]] [[File:orbital_portable_simple_diagram.png|500px]] <div style="clear: both;"></div>  = Build Your Own = There is many possible ways to build your own Orbital structure. Beside electronics, the most important thing you'll need is a way to have a circle of addressable LEDs. == Orbital FIXME == For our hackerspace version, we've build this circle using flat aluminum extrusions (3 pieces of 1.70m, bolted together) and zip-tying some flexible LED strip to these extrusions. This gives you a sturdier circle but is still quite flexible so you'll have to attach it in multiple points. <gallery widths=500px heights=300px mode=packed-overlay>File:Orbital-structure-screw.jpg|Screws holding aluminum extrusions togetherFile:Orbital-structure-zipties.jpg|Zip ties holding the LED strip to the aluminum structureFile:Orbital-stucture-installed.jpg|The structure is then suspended from the ceiling using ropesFile:Orbital-stucture-installed-on.jpg|And we have light!</gallery> == Orbital Portable == For Orbital Portable, we thought carrying a 1.60m diameter circle was annoying, so we created a Japanese fan-like wooden structure to form an 8-arms star. We then placed the LED strip inside a nice silicon diffuser to give it some rigidity and hold it in 8 points using aluminum brackets. The wooden frame can be folded or unfolded by untying the wing screw that hold every pieces together. We also used teethed washed to increase the friction. A rope is attached to each wooden piece to keep an angle of 45° between them. It's not mandatory but still very useful to deploy it. The diffuser make the game a little more blurry. It's still very playable but true hardcore gamers will prefer the pure square LED pixels. Another great aspect of the diffuser is the added protection of the LED strip again elements while carrying Orbital Portable. It's waterproof, absorb shocks, increase the bend radius, you can (gently) pull on it, etc. <gallery widths=500px heights=300px mode=packed-overlay>File:Orbital-Portable-Diffuser.jpg|The diffuser used in Orbital Portable with the LED strip in itFile:Orbital-Portable-Wooden-Star.jpg|Here is the wooden Japanese fan-like wooden frameFile:Orbital-Portable-folded-frame.jpg|Folded, with a bolt in the middle and a wing screwFile:Orbital-Portable-Frame-Rope.jpg|The rope keeping every element apart with an angle of 45°File:Orbital-Portable-Marking.jpg|The LED strip can be placed on top of it to mark where the aluminum brackets will be attachedFile:Orbital-Portable-Brackets.jpg|Aluminum brackets are screwed in place. The rest of the wood can then be cut to lengthFile:Orbital-Portable-Paint.jpg|Painting the Orbital Portable frame File:Orbital-Portable-Rpi-Bracket.jpg|We made a custom bracket for the Raspi ZeroFile:Orbital-Portable-Done.jpg|Up and running!File:Orbital-Portable-tripod.jpg|A third leg has been added to the frame to support it on its own.</gallery> == Material == Common Base for Orbital and Orbital Portable:* LED strip: SK6812, 5m, 60 led/m, RGBWW https://www.aliexpress.com/item/32763384538.html* Raspberry Pi 3+ or Similar* Power Supply: 5V, at least 5A, 8A-10A to be comfortable https://www.aliexpress.com/item/32670505021.html Orbital Portable:* LED strip Silicon Diffuser: T1023, 10mm wide, 5m long https://www.aliexpress.com/item/4000077271746.html* Aluminum Brackets, 10mm https://www.aliexpress.com/item/1709430101.html Orbital Mini:* LED Pixel Ring: 45 LEDs https://www.aliexpress.com/item/1005002289201149.html* ESP32: running WLED https://www.aliexpress.com/item/32959541446.html == Tips == * We used a 5m LED strip with 60 LED/m to have a nice an big circle. Thus said, it can totally work with any length and LED density.* Prefer short data cable from the Raspberry Pi to the LED strip. Long unshielded cables can lead to weird behavior.* The Raspberry Pi Zero W has a very nice form factor but is also very slow. We'd like to test with the Raspberry Pi Zero 2 W and we'll probably recommend it. = Chronology = * 21.08.2019 - 25.08.2019 : Ideation and start of development during [[CCCamp2019]].* 09.2019 : First working version of Orbital FIXME finished* 09.2020 : Ideation of Orbital-Portable* 05.2021 - 07.2021 : Building hardware of Orbital-Portable* 08.2021 : First release of Lamp mode* 05.2022 : Lamp Animations "framework"* 08.2022 : Frontend entirely re-written in Vue 3* 02.2023 : WLED Integration = Orbital-Portable = Here are the different events during which Orbital-Portable has been used :
==== Sequence diagram ====* 16.07.2021 : At a friend's house (~10 people)* 13.11.2021 : Party in a cave (battery-powered) (~30 people)* 24.04.2022 : A friend's birthday party (~30 people)* 07.05.2022 : An other friend's birthday party (~30 people)* 27.08.2022 : Weekend in a Swiss chalet (battery-powered) (~5 people)* 27 + 28.10.2022 : [https://vifff.ch VIFFF]'s evening parties (2* 100 people)
[[File:Orbital_portable_sequence_diagram_calls.png|500px|left]]= External links =
Here's a sequence diagram visualizing the communications between each device, from the moment the RasPi connects to the internet during the setup, to when a end* [https://github.com/Pecamo/orbital Source code on GitHub]* [https://orbital.run Portal for Orbital-user connects to the gamePortable]* [https://youtu.be/HKIx03cR7d4 Video presentation (in French)]
= Participants =
40
edits