Difference between revisions of "Orbital"

From Fixme.ch
Jump to: navigation, search
(Created page with "Category:Ongoing_Projects Orbital is a game designed to be played on addressable LED strips, on any one dimensional array of lights. You control a pixel and try to shoot...")
 
(Adding link to YouTube video)
 
(36 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 
[[Category:Ongoing_Projects]]
 
[[Category:Ongoing_Projects]]
Orbital is a game designed to be played on addressable LED strips, on any one dimensional array of lights.
 
  
You control a pixel and try to shoot down others while staying alive. The last one standing wins.
+
[[File:Orbita-logo-full.png|right|400px]]
  
GitHub : [https://github.com/Pecamo/orbital]
+
'''Orbital''' is a game designed to be played on addressable LED strips, on any one dimensional array of lights.
  
== Participants ==
+
=== Goal ===
 +
 
 +
Control a pixel and try to shoot down others while staying alive ! The last one standing wins.
 +
 
 +
=== Structure ===
 +
 
 +
The term "Orbital" may refer to either just the software that controls the game and the lights, or the whole construction that is comprised of, minimally :
 +
 
 +
* 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.ch orbital.fixme.ch]
 +
 
 +
This is the original version and first running instance of the game.
 +
 
 +
This instance is composed of a RaspBerry Pi running the software, connected to an strip of 300 LEDs. The whole strip of LEDs is attached to a circular construction made of flat bendable metal rods bolted together. The result looks like a circle of LEDs, pointing inwards so that someone "inside" the circle can see all of the by turning around.
 +
 
 +
This circle that has a diameter of approximately 2m hangs on the ceiling, over the sofas.
 +
 
 +
=== 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.
 +
 
 +
For the game to work and be easily accessible to any player, the construction had to be more complicated than the FIXME variant.
 +
 
 +
This version is composed of :
 +
 
 +
* A strip of addressable LEDs.
 +
* A foldable wooden construction that the strip can latch on to.
 +
* A Raspberry Pi Zero connected to the LEDs, running both the Orbital game server and the LEDs controller server.
 +
* 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 together
 +
File:Orbital-structure-zipties.jpg|Zip ties holding the LED strip to the aluminum structure
 +
File:Orbital-stucture-installed.jpg|The structure is then suspended from the ceiling using ropes
 +
File: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 it
 +
File:Orbital-Portable-Wooden-Star.jpg|Here is the wooden Japanese fan-like wooden frame
 +
File:Orbital-Portable-folded-frame.jpg|Folded, with a bolt in the middle and a wing screw
 +
File: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 attached
 +
File:Orbital-Portable-Brackets.jpg|Aluminum brackets are screwed in place. The rest of the wood can then be cut to length
 +
File:Orbital-Portable-Paint.jpg|Painting the Orbital Portable frame
 +
File:Orbital-Portable-Rpi-Bracket.jpg|We made a custom bracket for the Raspi Zero
 +
File: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 :
 +
 
 +
* 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)
 +
 
 +
= External links =
 +
 
 +
* [https://github.com/Pecamo/orbital Source code on GitHub]
 +
* [https://orbital.run Portal for Orbital-Portable]
 +
* [https://youtu.be/HKIx03cR7d4 Video presentation (in French)]
 +
 
 +
= Participants =
  
 
* [[User:Binary Brain]]
 
* [[User:Binary Brain]]
 
* [[User:Protectator]]
 
* [[User:Protectator]]

Latest revision as of 22:47, 3 April 2023

Orbita-logo-full.png

Orbital is a game designed to be played on addressable LED strips, on any one dimensional array of lights.

Goal

Control a pixel and try to shoot down others while staying alive ! The last one standing wins.

Structure

The term "Orbital" may refer to either just the software that controls the game and the lights, or the whole construction that is comprised of, minimally :

  • 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 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

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 orbital.fixme.ch

This is the original version and first running instance of the game.

This instance is composed of a RaspBerry Pi running the software, connected to an strip of 300 LEDs. The whole strip of LEDs is attached to a circular construction made of flat bendable metal rods bolted together. The result looks like a circle of LEDs, pointing inwards so that someone "inside" the circle can see all of the by turning around.

This circle that has a diameter of approximately 2m hangs on the ceiling, over the sofas.

Orbital Portable

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.

For the game to work and be easily accessible to any player, the construction had to be more complicated than the FIXME variant.

This version is composed of :

  • A strip of addressable LEDs.
  • A foldable wooden construction that the strip can latch on to.
  • A Raspberry Pi Zero connected to the LEDs, running both the Orbital game server and the LEDs controller server.
  • 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.

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.

Orbital portable simple diagram.png


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.

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.

Material

Common Base for Orbital and Orbital Portable:

Orbital Portable:

Orbital Mini:

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 :

  • 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 : VIFFF's evening parties (2* 100 people)

External links

Participants