SpaceInLasers 3.0

Aus Hackerspace Ffm
Version vom 13. März 2017, 23:03 Uhr von Tut (Diskussion | Beiträge) (Besondere Controller)

Wechseln zu: Navigation, Suche

Grundlegende Idee

Unten eine Kulisse aus Häusern, Kühen etc. Oben Alien-UFO Spider mit Scheinwerfer nach unten. Die Treffer-Logik soll beibehalten werden wie bei der vorherigen Version. Die Bodenkulisse soll der Hauptfokus sein und modular aufgebaut werden.

Spielprinzip

Single Player bzw. kooperative Single Player (wenn mehrere Leutes das Ufo und deren Waffen steuern).

Angelehnt an Flipper bzw. Moorhuhn: Möglichst viele Punkte durch Zerstörungen von Zielen am Boden sammeln. Das Ufo hat Energie, die langsam runtergeht. Wird das Ufo von Bodenwaffen getroffen, geht gleich eine ganze Menge Energie verloren. Beamt das Ufo spezielle Dinge wie Atomkraftwerk oder den Würgerking-Burger, kann es Energie hinzugewinnen. Ist die Energie zu Ende endet das Spiel.

Wo

Auf der Make_Rhein-Main_2017 - diese Seite zeigt auch den Raum, wo wir das Ganze aufbauen wollen.

Wer macht was?

  • Spider UFO: Jochen, Axl
  • Steuerpult UFO: Christine
  • UFO-Lampe: Shintaro
  • UFO Modell: Shintaro
  • Tentakel: Shintaro
  • Bus mit Neopixelansteuerung / Treffersensoren (Wiederverwertung von Space'n'Lasers 2.0 Kram): Lutz
  • Bodenkulisse:
    • Kühe: Lutz
    • Kühe wollen ein schönes Atomkraftwerk: Lutz
    • Abwehrtürme: ? (Lampen von Lutz) Alex und Volker
    • Weißes Haus: Björn
    • Gräber (Ufo erzeugt Zombies): ?
    • Skyline: ?
    • Zerstörbarer (über Beleuchtung) Hollywood HACKFFM.DE Schriftzug
    • Vergnügungspark: ?
    • Würgerking oder Mäc-Doof (Ufo klaut Burger, zerstört das M ...): ?
    • Massenziele wie Autos, Tiere, Leute, Häuser, Statuen etc. am Boden: ?
      • Hat jemand Playmobil-Zeug, was hier her passen würde und was er leihweise zur Verfügung stellen könnte?
    • Schokoladen/Bonbon-Fabrik (wenn von Ufo getroffen kriegt der Spieler Schoki/Bonbons):
    • ...weitere Ideen?

Energy Level Parser

Mit diesem Beispiel-Arduino-Sketch kann der Parser fürs Energie-Update implementiert werden. Er empfängt per serieller Schnittstelle auf 2400 Baud einen Energie-Update Befehl. Dieser Befehl muss mit einem kleinen "e" beginnen, danach kommt der neue Energie-Wert als Dezimalzahl gefolgt von einem Return-Zeichen. Der Parser unterstützt viele Arten von Return-Zeichen sowie Backspace - sollte also stressfrei klappen.

Ein Energiewert von 0 bedeutet das Objekt ist zerstört (Beispiel: Kuh kippt um), ein Energiewert von 100 bedeut das Objekt ist voll Einsatzbereit bzw. in den Ursprungszustand zu versetzen (Beispiel: Kuh klappt wieder hoch). Energiewerte dazwischen können nach eigenen Ideen behandelt werden (oder auch einfach gar nicht, Beispiel: bei der Kuh blitzt das Sklett auf).

// Space'n'Lasers 3.0 example code to receive energy levels.
// send "e100" + Return to via serial terminal (2400 Baud) to update energy level.

int Energy = 100;
int OldEnergy = 0;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(2400);
}

void loop() {
  // should be called regulary
  receive_serial_cmd();

  // test if energy has changed
  if(Energy != OldEnergy) {
    OldEnergy = Energy;
    // Energy level has been changed - react here
    Serial.println("Energy changed!");
  }

  // Do other stuff like animation updates here
}

void receive_serial_cmd(void) {
  static uint8_t cmd[18];
  static uint8_t cmdcount = 0;
  uint8_t c;
  while(Serial.available()) {
    c = Serial.read();
    if(c > ' ') cmd[cmdcount++] = c;
    if((c == 8) && (cmdcount > 0)) cmdcount--;
    if((c == 0x0d) || (c == 0x0a) || (cmdcount > 16)) {
      cmd[cmdcount] = 0;
      if(cmdcount > 0) {
       switch(cmd[0]) {
        case 'e': 
          if((cmdcount > 1) && (cmdcount < 7)) {
            int temp = atoi((const char *)&cmd[1]);           
            Energy = constrain(temp, 0, 100);
            Serial.print("Value received:");
            Serial.print(temp); 
            Serial.print(", Energy set to:");
            Serial.println(Energy);                       
          }                    
          break; 
          
        // other commands can be decoded here the same way                    
       }    
      }
      cmdcount = 0;
    } 
  }
}  

Besondere Controller

Radiomaster

Bediehnt nur den NRF24L01+ als Master. Muss diesmal auch das UFO befehligen - dieses muss Treffer empfangen und selbst schießen können.

Wichtige Befehle fürs Ufo (immer Node ID 'r'):

  • rA302xx : xx Helligkeit Prim. Waffe
  • rA702xx : xx Helligkeit Sek. Waffe
  • rAb02xx : xx (0-180) Pos X Servo
  • rAf02xx : xx (0-180) Pos Y Servo
  • suv : u = Primärwaffe Triggern (0x81), v = Sekundärwaffe triggern (0x82)
  • re3xx : xx Energielevel für UFO übertragen


Wichtige Befehle für die Autos:

  • re0xx : xx Energielevel für Auto 0 übertragen
  • re1xx : xx Energielevel für Auto 1 übertragen
  • sst : u = Primärwaffe Triggern (0x91), t = Sekundärwaffe triggern (0x92) (ungenutzt)


Generelle Befehle für Radiomaster:

  • rtr : Target-Codes abfragen ( AABBCCDDEEFFGGHH, AA Auto 0, BB Auto 1, CC frei, DD Ufo, EE FF GG frei, HH Radio-Fehler-Code)

Ufo Controller (auch für Autos genutzt)

Angebunden über NRF24L01+. Im Grunde wie Abwehr Controller, schießt, empfängt Treffer und sendet Energie-Level und Anderes weiter.

Problem: Durch Radio entsteht beim Senden ein (hoffentlich immer gleicher) Zeitversatz. Dieser muss wird per konstanter Verzögerung in den per Bus angeschlossenen Nodes ausgeglichen. Der Zeitversatz wurde zu 740us ermittelt.

Die UFO Controller Software wird nun auch zur Steuerung der Virobi-Autos genutzt.

Energielevel Tx und Light Tx Controller

Bodenstations-Controller, der Energie-Levels sendet, Treffer empfangen und schießen kann.

Achtung: Es wird eine Soft-Serial verwendet.


Wichtige Befehle für SlaveRxTx Controller (_ durch Node-ID ersetzen):

  • scd : c = Primärwaffe Triggern (0xa8), d = Sekundärwaffe triggern (0xac) (genutzt bei Abwehrtürmen)
  • _eNxx : xx Energielevel für Objekt N (0..7) übertragen
  • _tr : Light-Rx Sensoren abfragen


Zuordnung der Controller IDs mit Energielevel Tx:

  • ID1 : Testcontroller mit Waffen und Lichtern
  • ID2 :
  • ID3 :

Waffen Controller

Arduino, direkt über USB mit Gamemaster verbunden.