Difference between revisions of "Orbital"

From Fixme.ch
Jump to: navigation, search
(Tips)
(Tips)
Line 149: Line 149:
 
== Tips ==
 
== 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.
 
* 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.
 
* 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.

Revision as of 01:24, 27 February 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