SpaceInLasers 3.0: Unterschied zwischen den Versionen

Aus Hackerspace Ffm
Wechseln zu: Navigation, Suche
Zeile 1: Zeile 1:
[[Datei:SnL2017 4 1.JPG|400px]]
+
[[Datei:SnL2017 4 1.JPG|700px]]
  
 
== Grundlegende Idee ==
 
== Grundlegende Idee ==

Version vom 21. März 2017, 12:06 Uhr

SnL2017 4 1.JPG

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.

TODO bis zur Make

  • Ufo:
    • Zusammenbau
  • AKW:
    • Lüfteransteuerung, Controll-Arduino
    • Servos einbauen
  • Pyramiden:
    • Arduino mit Polulo + NEMA17, 1x Endstop
    • großes Auge, Servo-Pupille, blinzeln?
  • Abwehrtürme:
    • Servo-Control-Software

Sounds

  • Sounds raussuchen und vorbereiten:
    • Spielstart:
      • Ambient Vogelgezwitscher, urbanes Geräusch
      • Ressurection-Sound Effekt für etwa 5sek
      • Dezente, leichte positive Musik (eher leise)
    • Ufo kommt ins Spiel:
      • Ambient Dröhnen, ausserirdische technische Geräusche
      • Alarm-Sound, lautes Dröhnen am Start - wird dann leiser und bleibt im Hintergrund
      • Musik: Bombastisch-bedrohlich wenn Ufo kommt, wechselt langsam nach Spassig, slow-groove, kaum Beat
    • Ufo geht die Energie aus:
      • Musik: Hektisch
      • Alien-Alarm-Sound, Low-Energy-Ansage
    • Spielende:
      • Fails-Sound Sad-Trumpet oder dergleichen
      • Ggf leichte Ambient-Game-Over-Musik
    • Sound Kühe:
      • Ambientes Muhen wenn Ufo über Kühen ist
      • mehrere Mad-Kuh-Sounds wenn Kühe getroffen werden
    • Sound AKW:
      • Industrial Dröhnen / Britzel-Strahlungs-Sound wenn Reaktor offen
      • Alarm bei Angriff
      • Puff-Sound wenn AKW kaputt geht
    • Bus:
      • Ambient Straßenverkeher + Kindergeplärr
      • Kindergeschrei bei Treffer
      • Auto-Crash-Sound wenn kaputt
    • Pyramide:
      • Ägyptischer Tempel-Sound + futuristischer Sphärensound
      • Bei Treffern: Melodischer Synthi oder sogar Cimes-Sounds
      • Kaputt: Bomast-Zischen
    • Weißes Haus:
      • Parlament-Gequatsche, ggf. +Bürosound, Redensounds
      • Bei Treffern: Explosionssound
      • Kaputt: Feuerwehr im Einsatz

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 (0xa4) (genutzt bei Abwehrtürmen)
  • _eNxx : xx Energielevel für Objekt N (0..7) übertragen
  • _tr : Light-Rx Sensoren abfragen
  • _*xxx


Zuordnung der Controller IDs mit Energielevel Tx:

  • ID0 : Akw, Pyramide, Weisseshaus
  • ID1 : Abwehrtürme (bisher Testcontroller mit Waffen und Lichtern)
  • ID2 : Kühe 1
  • ID3 : Kühe 2

Waffen Controller

Arduino, direkt über USB mit Gamemaster verbunden.