rc3/rc3_notes.md
2021-02-16 04:22:04 +01:00

236 lines
11 KiB
Markdown

* rc3-World (== Online CCC-Kongress)
https://howto.rc3.world/
https://links.rc3.world/
Chaosradio über die rc3-World:
https://chaosradio.de/cr265-rc3-world
Scraped maps:
https://github.com/MichaelKreil/rc3-map-scraper
* Software: Workadvanture
* 2D-Multiplayer-Onlinespielumgebung mit integriertem Ad-Hoc Video-Konferenz-System wenn Spieler sich begegnen (Max. 4 Teilnehmer)
* Entwickler: The Coding Machine https://www.thecodingmachine.com/
* https://workadventu.re/
* https://github.com/thecodingmachine/workadventure
* Binary-Kitchen Fork:
* https://git.binary-kitchen.de/noby/workadventure
* Tutorials:
* https://workadventu.re/map-building
* https://howto.rc3.world/
* Videos der Binary Kitchen:
* https://www.youtube.com/watch?v=NmIT2UYFVzY
* https://www.youtube.com/watch?v=hPPvZaI97aM
* Engine
* Basiert auf der Phaser HTML5 Game Engine (https://phaser.io/)
* Online version (https://play.workadventu.re)
* Self hosted
* Other hosts (z.B. https://play.wa.binary-kitchen.de/)
* 200+ Spieler (lt. Website)
* Lizensierung erbeten für >= 25 Spieler (aber z.Zt. nicht erzwungen)
* AGPL Lizenz
* You cannot offer online subscriptions to a WorkAdventure server you are putting online.
* Maps
* Unabhängig vom engine host
* Wird über URL in die engine geladen:
<engine_server>/_/<instance>/<map_server>/<path_to_map>#<start_point>
z.B. https://play.wa.binary-kitchen.de/_/global/c0c0bird.github.io/chaos-world/main.json#start_alpen
* <instance>: Beliebiger Bezeichner (typ. "global"). Nur Spieler in derselben Instanz können sich sehen.
* Achtung: uMatrix o.ä. blockieren eventuell den XMLHTTPRequest
* Map-Format:
json (map layer definitions) + png (tiles)
WICHTIG: Tilesets müssen EMBEDDED werden.
* Grafischer Editor: Tiled
https://www.mapeditor.org/
Tiled tutorial der Binary-Kitchen:
https://www.youtube.com/watch?v=NmIT2UYFVzY
* Struktur:
* Rechteckige Matrix aus Feldern
* Mehrere Übereinanderliegende Ebenen (Layer)
* Layertyp: Tile Layer (außer floorLayer)
* LAyer Groups werden laut Github noch nicht unterstützt.
* Jede Ebene kann an jeder Position mit einer 32x32px Kachel (Tile) gefüllt sein
* Oben liegende Ebenen überdecken darunterliegende (beachte PNG-Transparenz)
* Tiles organisiert in Tilesets (= PNGs mit mehreren 32x32 Tiles)
* Spezielle Ebenen:
* "floorLayer": Hier wird die Spielfigur dargestellt.
* Muss vom Typ Objectlayer sein (als einziger)
* Exitlayer (typ. "exitToXXX"): Ausgänge zu anderen Karten
* Jeder Layer mit der Eigenschaft "exitUrl" (string)
* Inhalt des exitUrl-Strings gibt die Zielkarte an
* Auf dem gleichen Map-Server: "<path_to_map>#<start_point>"
* Auf anderem Map-Server: "/_/<instance>/<map_server>/<path_to_map>#<start_point>"
* Jedes beliebige Tile auf einem Exitlayer dient als Ausgang.
Good practice: Benutze Tile "EXIT" aus mapUtilities
* ACHTUNG: Exit- und Startfelder dürfen nicht zusammenfallen. (Sonst stürzt das Spiel ab).
* Wenn der angegebene Startlayer nicht gefunden wird: Start in der Mitte der Karte
* exitUrl kann auch auf die aktuelle Karte zeigen --> Sprung auf Karte
* Startlayer: (typ. "startFromXXX"): Einstiegspunkt beim betreten der Karte
* Jeder Layer mit der Eigenschaft "startLayer" (Typ bool)
* Einstieg definiert durch ein beliebiges Tile auf dem Startlayer
* Good practice: Benutze Tile "START" aus Tileset "mapUtilities".
* Bei mehreren existierenden Tiles wird eines davon zufällig als Startpunkt gewählt
* Name des Startlayers wird als <start_point> in Map-URL übergeben
* Es kann mehrere Startlayer geben (z.B. für verschiedene Eingänge)
* Wände (eigentlich kein spezieller Layer):
* Jedes Tile mit der Eigenschaft "collide" (bool) wirkt als Wand,
d.h. man kann nicht durchlaufen
* Üblich: Benutze Tile "BLOCK" aus mapUtilities.
* Silent-Layer:
* Unterdrückt Ad-hoc Videochats
* Jeder Layer mit Eigenschaft "silent" (bool)
* Bereich definiert durch beliebige Tiles
* Good practice: Banutze Tile "SILENT" aus mapUtilities
* Jitsi-Konferenzbereiche:
* Erlaubt Video-Konferenzen mit mehr als 4 Teilnehmern
* Jeder Layer mit Eigenschaft "jitsiRoom" (string)
* Name des jitsiRooms = <instance>+string
* Konferenzbereich definiert durch beliebige Tiles
* Good practice: Benutze Tile "MISC" aus mapUtilities
* Speziell: Layer-Eigenschaft "jitsiTrigger: onaction"
--> Konferenz wird erst nach Drücken von Space beigetreten
* Website öffnen (als iFrame):
* Layer mit Eigenschaft "openWebsite" (string)
* Beim betreten eines beliebigen Tiles wird die in Website im string geöffnet.
* Für jede Website ist eine eigener Layer nötig.
* Lokale Pfade funktionieren anscheinend nicht, nur vollständige URLs.
* Nur https://
* Good practice: Benutze Tile URL aus mapUtilities
* Speziell: Layer-Eigenschaft "openWebsiteTrigger: onaction"
--> Website wird erst nach Drücken von Space geöffnet
* Audio abspielen:
* Layer mit Eigenschaft "playAudio" (string)
* Bei Betreten eines Tiles wird das im string angegeben mp3-file geladen und abgespielt
* Good practice: Benutze Tile "AUDIO" aus mapUtilities
* Eigenschaft "playAudioLoop" statt "playAudio":
Audio wird in Endlosschleife abgespielt
* Animationen:
* Bestehend aus Abfolge von Tiles
* Editierbar mit Tiled:
Teilset anwählen --> Tielset bearbeiten (Schraubenschlüssel-Icon)
--> Animationseditor (Kamera-Icon)
* Maps hosten:
* Lokaler HTTP-Server zur Entwicklung
* Webspace
* github.io, Droppages, GoogleDrive, OneDrive
* Wie können wir möglichst vielen Nutzern die Möglichkeit geben, einfach eigene Karten zu hosten?
* HTTP-Header:
* Access-Control-Allow-Origin: * (Cross-Site-Scripting beim Laden der Karte durch Webbrowser)
* X-Frame-Options deativieren (für iFrames)
* Expires: 0 (Verhindere Caching durch Browser während Entwicklung und ev. für Special-Effects)
* Cache-Control: no-cache, max-age=0
* Hacks:
* Mapseitige Spielmechanismen
* Reagiere auf Events
* Audio
* iframes
* Dynamisch veränderte Maps (Änderungen nur bei Mapwechsel möglich)
* Problem: Phaser-Engine cached alle files,
Ausnahme: iframes
--> Ermöglicht Spielmechanismen mit iframes ohne Auswirkungen auf die Maps
* Spielzustand speichern
* Cookies (Spieler-Spezifisch)
* In generierter Karte (Spieler-Spezifisch)
* Auf Map-Server (Global)
* Problem: Browser akzeptiert keine Cookies via Cross-Site-Scripting
* Cache aushebeln Mapseitig:
* HTTP redirect nützt nichts, engine merkt sich die ursprüngliche URL
* Workaround: Dynamische einamalige Dateinamen für Maps
* Nachteil: Jeder Spieler bekommt eine andere Map, kein Multiplayer mehr
* Funktioniert nur für Maps, nicht für Audio-Events
* Implementierung:
(1) Wenn eine Karte map.php aufgerufen wird:
* Lade map.json
* Ersetze alle Exit-URLs der Form dest.php#start --> dest.timestamp.php#start
(dest.json wird so gelassen, damit man wieder in Multiplayer-Maps zurück kann).
(2) URL-Rewrite rule via .htaccess: Entferne timestamp
RewriteRule ^(.+)\.\d+\.php$ $1.php
* Cache deaktivieren Engineseitig:
* Karten beim betreten neu laden
* File GameScene.ts, function onMapExit()
this.cache.tilemap.entries.clear();
* Dynamisch generierte Maps
* Maze-generator
* Endless Tower
* Automatisch generierte Stockwerke (außer das Stockwerk ist schon bewohnt)
* Treppenhaus
* Aufzug
* Exit games:
* Ausgang öffnen durch Rätsel auf iframe
* Ausgang öffnen durch Event (z.B. Audio-Feld == Druckplatte)
* Einschränkung:
Ausgang muss in anderem Raum sein als Auslöser (Mapänderungen nur bei Mapwechsel möglich)
* Items sammeln und benutzen
* Engine hosten:
* Source von github laden
https://github.com/thecodingmachine/workadventure
* Fork von binary kitchen
https://git.binary-kitchen.de/noby/workadventure
* Docker installieren
* docker-compose installieren (via curl)
* Eintragungen in /etc/hosts:
127.0.0.1 workadventure.localhost
127.0.0.1 pusher.workadventure.localhost (scheint nicht notwendig)
* sudo dockerd &
* sudo docker-compose up
Dauert einige Zeit, kompiliert Zeug und startet dann mehrere Container
* Webbrowser
play.workadventure.localhost/_/global....
Firefox macht Probleme wegen irgendeinem http/https-Forwarding
Chromium geht, aber ohne Kamera/Mikrofon (nur über HTTPS).
* Erstmal nur von lokal erreichbar,
von außerhalb ip:8080 meldet sich Traefik Reverse Proxy
ip:80 nicht erreichbar
* Erreichbarkeit von außen:
Konfigurationsfile docker-compose.yaml
Domainnamen in alle traefik host-rules eintragen
Domainnamen in front envirnment Variablen eintragen
Muss über Domain angesprochen werden, damit traefik entsprechend weiterleitet
Nur IP geht nicht
Für lokale Tests: Domains in /etc/hosts bzw. C:/windows/system32/drivers/etc/hosts eintragen
https://xn--han-7ka.de/s/b3SKomnirgisMc9
https://play.workadventu.re/_/global/devlol-systems.pages.devlol.org/vspace-workadv/vspace.json
Du kannst dich gern mit mir vernetzen alexander@m4h.network bzw. alexander.stellmach@ose-germany.de
https://nemo.jstsmthrgk.eu/files/rc3graph.svg
https://play.workadventu.re/_/global/simondueckert.github.io/nuedigital/map.json
https://miro.com/app/board/o9J_laWLPI8=/
https://gitlab.com/fediventure/workadventure/-/tree/feature/federation/
https://gitlab.com/fediventure/fediventure/-/issues/2
https://git.devlol.org/devlol-systems/vspace-workadv/-/blob/master/.gitlab-ci.yml
https://obs.ninja/?view=8iiMHZa
https://github.com/tehwalris/vertiled
https://miro.com/app/board/o9J_laWLPI8=/