FreshRSS
Thursday, 4. March 2021
Feedtragon war für mich der perfekte Feedreader – kein Wunder, baute ich ihn doch selbst. Als Schwachstelle entpuppte sich Superfeedr, als der als Backend genutzte Service die Preise anhob hätte ich feedtragon auf ein eigenes Backend umbauen müssen. Stattdessen benutzte ich mehrere Fertig-Feedreader: BazQux (hervorragend, aber damals wollte ich nichts bezahlen), den Digg Reader (abgeschaltet) und bis zuletzt Feedly (gut, aber etwas umständlich). Nun bin ich bei FreshRSS gelandet, was auf meinem uberspace von mir selbstgehostet wird.
Eindruck nach ein paar Wochen
FreshRSS ist freie Software (AGPL) und funktioniert einwandfrei. Die Installation ist im Uberspace-Wiki dokumentiert, uberspace bietet sich für sowas immer als unproblematischer und fähiger Hoster an. Meine Installation ist jetzt schon ein bisschen her, aber es muss gepasst haben, sonst würde ich mich an Probleme erinnern.
Das Interface ist das eines klassischen RSS-Readers. Links ist die Liste der Feeds, rechts die Artikel. Mit der Toolbar oben können diverse Aktionen mit den Artikeln durchgeführt (z.B. als Favorit markieren) und zwischen den verschiedenen Ansichten umgeschaltet werden.
Kleinigkeiten empfinde ich als nicht optimal. Das automatische Markieren als gelesen durch Scrollen der eingeklappten Artikelliste war extrem stressig, zum Glück kann die Funktion deaktiviert werden. Die Taste M
sollte den Gelesen-Status von Artikel umschalten, aber bewirkt nichts. Und das Warnungsicon bei Uncategorized in der Feedliste links ist nervig, wenn wie bei mir alle Feeds nicht in Kategorien sind und das auch so bleiben soll.
Aber das sind wirklich Kleinigkeiten. Der Rest passt. Insbesondere habe habe ich den Eindruck, dass die Infrastruktur sehr gut funktioniert. Damit meine ich, dass die Software einwandfrei per Cronjob die Feeds liest und neue Artikel entdeckt. Die Darstellung der Artikel selbst ist gut, die wichtigsten Tasten J
und K
zum Weitergehen in der Artikelliste sind belegt. Der eingebaute RSS-Feed gibt die Option der Weiterverarbeitung. Mehr braucht es nicht.
Es tut gut, wieder einen selbstkontrollierten Feedreader zu haben. Und noch dazu einen, den ich nicht selbst bauen muss, auch wenn feedtragon wieder zum Laufen zu bringen immer noch als gutes Projekt in meinem Hinterkopf herumschwebt. Feedly hatte schon okay funktioniert, aber mir waren die Limitierungen unangenehm und es nagte auch der Gedanke, warum ich nicht freie Software benutze wenn es denn gute Optionen gibt.
Als nur tt-rss mit seinem problematischen Autor auf meinem Radar war sah das nicht so aus, aber FreshRSS füllt die Rolle gut. Unter anderem Dirk hatte die Software in seinem Blog erwähnt. Auch wenn ich nicht mehr genau weiß, welcher Autor und welcher Artikel den Ausschlag gab: Danke für den Hinweis.
Wie XCOM 2 die Schraube anzieht
Friday, 19. February 2021
Wer als Veteran des Vorgängers Enemy Unknown das neuere XCOM 2 spielt könnte sich wundern, wieviel die Entwickler am Spieldesign geändert haben. Eine Änderung insbesondere ist kritisch: Viele Missionen haben eine Rundenzeitbegrenzung. Als ich damals darüber las ging ich sogar davon aus, dass dieser neue Ansatz überhaupt nicht zu meiner Spielweise passen würde. Was stimmt – aber das ist überraschenderweise kein Problem. Stattdessen ist das Rundenlimit eine der Änderungen, die das Spiel noch besser als den ersten Teil machen.
Die Wurzeln: Rundenkämpfe, RPG-Elemente und Basisbau
Es täuscht, aber: Auf den ersten Blick ändert sich nicht viel. Noch immer gilt es die Erde gegen eine Alieninvasion zu verteidigen, nur sind sie diesmal schon angekommen und etabliert. Ihr führt den Widerstand, der den Kampf gegen die Alienherrscher gewinnen und ihre finsteren Pläne vereiteln will.
In erster Linie passiert das in den bekannten Rundenkämpfen. Immer ein kleines Team aus XCOM-Soldaten muss die Siegbedingungen auf den nicht zu großen Karten erreichen. Und das möglichst, ohne dass einer der vier (später auch mehr) geführten Recken stirbt. Das bedeutet: Deckung nutzen, Gegner flanken, geschickt die Sonderfähigkeiten der Soldatenklassen einsetzen, ein bisschen Glück haben und im Zweifel neu laden. Von den Spezialaktionen gibt es bald mehr, erledigte Gegner bringen Erfahrung, bei Levelaufstiegen darf eine von immer zwei möglichen Fähigkeiten erlernt werden. Aber immer erst nach der Mission, nur in der Heimatbasis kann die Beförderung verliehen werden.
Die Basis ist auch sonst ein wichtiges Spielelement. Sind ein paar Räume wie das Forschungslabor schon vorhanden, ist da noch weiterer Platz für Einrichtungen. Beispielsweise für das Psi-Labor, mit dem neue Rekruten mit den übernatürlichen Fähigkeiten ausgestattet werden können, die auch die Aliens immer wieder gegen die Spielertruppe einsetzen. Doch für die Räume braucht es Ressourcen wie auch genug Energieproduktion, zudem müssen fast alle Einrichtungen sowie Ausrüstungsgegenstände erstmal erforscht werden.
Diese Ressourcen gewinnt man durch erfüllte Missionen, aber auch durchs Kontrollieren der Weltkarte. Die Sektoren müssen kontaktiert werden, was Zeit kosten, dann gibt es monatlich Unterstützung. Und auch gibt es immer wieder Ressourcenquellen auf der Karte, bei denen gegen Zeiteinsatz z.B. neue Rekruten oder Intel gewonnen werden können. Meist aber ruft sowieso eine der Missionen.
Die Hauptressource: Zeit
Es gibt also überall etwas zu tun und man hat gerade am Anfang unzählige Optionen. Doch XCOM 2 lässt eben nicht frei die Möglichkeiten auszuprobieren. Stattdessen gibt es immer wieder zeitkritische wichtige Missionen. Das Spiel poppt deren Beschreibungen auf und sagt ganz klar: Du hast im Grunde keine Wahl, du musst jetzt eine dieser drei wählen um eine Aktion der Aliens zu vereiteln oder eine einzelne erfüllen, um Ressourcen zu erhalten.
Vor allem das Avatarprojekt droht da als klar sichtbares Zeitlimit, das sabotiert werden muss. Dafür können Alienforschungseinrichtungen hochgejagt werden. Ironischerweise ist das eine der wenigen Missionstypen, bei denen der Spieler einmal kein Zeitlimit hat. Dafür praktisch in allen anderen: Dann ist z.B. in dem zu kapernden abgestürzten UFO ein Peilsender, der in 5 Runden Verstärkungen anfordern und damit zum Rückzug zwingen wird, sollte er nicht rechtzeitig abgeschaltet werden.
Doch ist dieses Zeitlimit in den Missionen nicht so stressig wie es klingt. Es zwingt zum aggressiveren Vorgehen, klar. Aber zum einen tut das XCOM gut, denn es verhindert das übervorsichtige Vortasten bei dem dann meist minutenlang nichts passierte. Vor allem aber ist das Spiel für diese schnellere Spielweise ausgelegt. Es gibt nicht die große übermächtige Gegnermassen, sondern es sind relativ wenige Aliens auf den Karten unterwegs, die sich zudem in kleine Gruppen von immer etwa drei Gegner aufteilen. Manchmal trifft man mehrere dieser Gruppen in einem Zug, aber meistens können sie nach und nach abgearbeitet werden. Vor allem wenn man nach einer Weile 5 oder 6 eigene Figuren mit guter Ausrüstung und Sonderfähigkeiten führt werden die Missionen beherrschbar.
Die vielen Verbesserungen
So können die vielen Verbesserungen scheinen. Wie klar wurde, dazu zähle ich das Missionsdesign mit seinem Zeitlimit, aber das ist beileibe nicht alles.
Durch die vielen automatisch auftauchenden Missionen gerade am Anfang des Spiels ist der Spieler zwar zuerst sehr unfrei, aber auch geführt. Die Missionen fordern und gleichzeitig sollen ja doch auf der Weltkarte und beim Basisbau längerfristige Entscheidungen getroffen werden. Aber doch wird man nicht überfordert, weil mit den Missionen immer Fortschritt erreicht wird. So verhindert XCOM 2 effektiv, dass die schiere Komplexität zum blockierenden Problem wird. Und der Schwierigkeitsgrad wird gemächlich erhöht, zumindest langsamer als es mir beim Vorgänger vorkam.
Diesem besseren Spielgefühl dienen auch die stärkeren Klassen. Sie alle haben ein klareres Profil mit besseren Spezialfähigkeiten bekommen. Wer dann noch halbwegs fleißig Ressourcen in Soldatenupgrades investiert kämpft nicht mehr als absoluter Underdog gegen die Feinde, anders als im ersten Teil.
Es gibt immer noch einen Heavy und einen Scharfschützen, die immer noch mit schwerem Geschütz bzw. Gewehr die Gegner aufräumen. Dazu kommt diesmal der Ranger mit Schrotflinte und Nahkampfangriff, der sich entweder auf diesen spezialisiert oder auf die Tarnung. Und dann komplettiert auch schon der Spezialist die regulären Klassen, der als Heiler oder als Hacker sehr wichtig geworden ist. Vor allem, dass er als Hacker Roboter besonders effektiv ausschalten oder sogar zeitweise übernehmen kann macht ihn sehr effektiv. Dazu kommt dann noch der Psi-Soldat, der schnell sehr viele sehr starke Fähigkeiten bekommt, dann humanoide Gegner sogar dauerhaft übernehmen kann, garantiert trifft oder Flächenschaden verursacht.
Dazu setzt XCOM 2 den Fokus auf die Inszenierung fort. Die Missionen sind weit davon entfernt wie das Herumziehen kleiner Pixelfiguren zu wirken. Dafür sorgen die vielen Momente, in denen die Kamera in die Nahansicht geht um Aktionen und ihre Ergebnisse zu zeigen. Auch außerhalb der Missionen gibt es viele Zwischensequenzen, besonders wenn eines der Hauptziele erfüllt wurde, in denen auch die Mitstreiter des Widerstands auftreten.
Ein gelungener schmaler Grat
Die geringe dem Spieler mögliche Initiative am Anfang hätte nerven können, das Zeitlimit in den Missionen stressen, die Weltkarte langweilen. Stattdessen fügt sich XCOM 2 zu einer tollen Mischung zusammen, die schlicht nochmal besser funktioniert als der auch schon sehr gute Vorgänger.
Wie knapp das war zeigen die sich wiederholenden Missionen, in denen ein Sender vor den Aliens verteidigt werden soll. Der ist immer auf der anderen Seite der Karte. Ein festes Zeitlimit gibt es nicht, aber manchmal wird er von der ersten Runde an angegriffen. Dann reicht die Zeit höchstens gerade so, rechtzeitig den Sender zu erreichen und die Gegner zu besiegen. Ich schaffte es immer, aber gerade am Ende des Spiels (wenn die Gegner stärker sind) nur durch exzessives Ausnutzen der Quickload-Funktion, um immer optimale Spielzüge zu machen. Selbst dann war es ein paarmal unwahrscheinlich knapp. Und das ist dann nicht mehr herausfordernd spaßig, sondern frustrierend unfair.
Ich kann mir daher sehr gut vorstellen, dass die oft zu lesende Kritik an den DLCs berechtigt ist, dass sie entweder mit weiteren starken Feinden oder mit zu vielen weiteren – und dann durch die unweigerlich ausfallenden verletzten Soldaten nicht mehr gewinnbaren – Pflichtmissionen am Anfang die Balance kippen.
Aber so wie das Grundspiel ist funktioniert die Mischung hervorragend. Und die Linuxversion funktioniert mit sehr wenigen kleinen Macken (wie manchmal etwas etwas spät nachladenden Texturen) ebenfalls sehr gut. XCOM 2 wird mittlerweile im Sale für 4€ auf Steam verscherbelt, das Geld ist es auf jeden Fall wert.
Lärmfilter fürs Mikrofon unter Alsa
Monday, 1. February 2021
Ich möchte hier alsa_rnnoise vorstellen. Aber dafür muss ich erstmal das tolle NoiseTorch erwähnen. Es ist ein Programm, das den Umgebungslärm reduziert der vom Mikrofon aufgenommen wird. Wenn man via dem PC mit anderen Leuten spricht und sie nicht mit beispielsweise dem Tastaturlärm oder anderen Lärmquellen belästigen will ist das praktisch. Und auch wenn man Aufnahmen außerhalb eines isolierten Raums macht könnte es nützlich sein. Ich nutze NoiseTorch während der Arbeit am Laptop für unsere Telefonkonferenzen.
Aber weil es im Kern ein Pulsaudio-Plugin ist funktioniert es für mich nicht am heimischen, mit ALSA eingerichteten PC. NoiseTorch hat auch ein paar Macken, wie die hohe Prozessorlast selbst ohne Sound-Input, die aber an Pulseaudio hängt – was mich darin bestärkt weiterhin kein Pulseaudio zu installieren. Deswegen ist es für mich besonders toll, dass der Entwickler arsen sich die Mühe gemacht hat ein ALSA-Plugin mit der gleichen Kernfunktionalität zu bauen. Eben alsa_rnnoise. Das namensgebende RNNoise ist das neuronale Netzwerk, das auch NoiseTorch benutzt um Lärm wegzufiltern.
Installation
Weder RNNoise noch alsa_rnnoise waren für void gepackt, daher musste ich beides manuell installieren. Was sich zusammen mit der folgenden ALSA-Konfiguration ein bisschen anfühlte wie Linux vor einer Dekade. Aber wer modernen Komfort will könnte sich ja an NoiseTorch mit Pulseaudio halten. Zum Glück beschreibt die jeweilige Readme fast vollständig was zu tun ist.
Stell erstmal sicher, dass alsa-dev installiert ist:
sudo xbps-install alsa-lib-devel
Dann installiere RNNoise:
git clone https://gitlab.xiph.org/xiph/rnnoise.git cd rnnoise ./autogen.sh ./configure make sudo make install
Die Libraries von RNNoise werden so nach /usr/local/lib/ gepackt.
Den Ordner von RNNoise müssen wir bei der Installation von alsa_rnnoise dem Buildsystem mitteilen, ebenso wie den richtigen Ordner für ALSA-Plugins:
PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/:/usr/lib/pkgconfig/:/usr/lib64/pkgconfig/ meson build -Dplugin_dir=/usr/lib/alsa-lib/ ninja -C build sudo ninja -C build install
Damit ist das System bereit um ALSA zu konfigurieren. Die Readme schlägt diese Konfiguration vor, die in der $HOME/.asoundrc zu platzieren wäre:
pcm.urnnoise { type rnnoise slave.pcm "sysdefault" } pcm.rnnoise { type plug slave { rate 48000 pcm "urnnoise" } } pcm.!default { type asym playback.pcm "cards.pcm.default" capture.pcm "rnnoise" }
Bei mir muss da aber noch das softvol-Plugin dazwischen, da mein t.bone MB 88U sonst zu leise ist, plus eine manuelle dmix-Konfiguration. Daher sieht die .asoundrc bei mir etwas anders aus:
pcm.!default { type asym playback.pcm { type plug slave.pcm "dmixer" } capture.pcm rnnoise } ctl.!default { type hw card "PCH" } pcm.softvol { type softvol slave.pcm "hw:Device" control { name "Softmaster"; card "Device"; } max_dB 20.0 min_dB -5.0 } pcm.urnnoise { type rnnoise slave.pcm "softvol" } pcm.rnnoise { type plug slave { rate 48000 pcm "urnnoise" } } pcm.dmixer { type dmix ipc_key 1024 slave { pcm "hw:PCH" buffer_size 16384 period_time 0 period_size 1024 } }
Der Filter funktionierte so direkt.
Soundtest
Aber funktioniert er auch gut, lohnt sich der Aufwand? Ich habe ein paar Testaufnahmen gemacht um das einzuordnen. Eingebunden sind unkomprimierte .wav-Dateien, die auf .ogg zurückfallen falls der Browser mit ersteren nicht umgehen kann (mit ffmpeg umgewandelt, maximale Qualität).
Ohne Lärm
Im ersten Test habe ich in einem ruhigen Raum ohne besondere Lärmquelle kurz in das Mikrofon gesprochen. Hier sollte der Filter im Idealfall kaum wahrnehmbar sein, auf jeden Fall sollte er die Stimme nicht abschneiden. Doch hört selbst wie es lief.
Ich fand das Ergebnis gut. Der Raum klingt ein bisschen anders, oder? Aber ich habe nicht den Eindruck, dass es schlechter klingt oder meine Sprache abgehackt wird. Da auch die Prozessorlast nicht hoch war ein erster Hinweis, dass alsa_rnnoise immer anbleiben könnte.
Mit Tastaturlärm
Regulären Lärm wie das Klappern der Tastatur rauszufiltern oder zu reduzieren wäre mir am wichtigsten. So könnte ich guten Gewissens in Gesprächen das jeweilige Programm nicht auf Push-To-Talk stellen. Und wenn sowas funktioniert, dann wird wahrscheinlich auch ein in der Ferne vorbeifahrendes Auto weggefiltert.
Ein gutes Ergebnis! Wenn ich nicht spreche ist die Tastatur weg, wenn ich spreche ist sie leiser. Und sie ist vorher ja sehr laut, gar nicht mal nur das Klicken der Tasten, sondern da wurden auch die Schwingungen des Tisches übertragen. Als ob ich auf die Tastatur hämmern würde, dabei tat ich das gar nicht.
Wenn ich während eines Gespräches mal tippen müsste wäre der Lärmfilter sehr hilfreich.
Mit einem Staubsauger an der Seite
Ich dachte, wenn ich einen Handstaubsauger anmache wäre ich ohne Filter nicht zu hören und mit Filter vielleicht etwas, wobei ich andererseits fürchtete, dass das zuviel erhofft ist. Tatsächlich funktionierte es nicht, aber anders als erwartet.
Die Aufnahme ohne Filter war besser als erwartet, weil trotz des Lärms meine Stimme aufgenommen wurde und sogar verständlich blieb. Mit dem Filter dagegen war zwar der Staubsaugerlärm reduziert, aber war leider auch meine Stimme immer wieder verzerrt. Als ob die Aufnahme übersteuern würde, wobei ich mir ziemlich sicher bin nicht wesentlich lauter geredet zu haben als bei der ersten Aufnahme. Bei solchem extremen Lärm liegt bei alsa_rnnoise wohl eine Grenze, ob es jetzt am Alsaplugin oder am RNNoise-Kern selbst liegt kann ich nicht sagen.
Fazit
NoiseTorch ist derzeit natürlich schon einfacher zu installieren und zu konfigurieren, aber ich sehe großes Potential in der ALSA-Lösung. Sie könnte einfach von Distributionen ausgeliefert werden und wir dann eine Konfigurationsoption davon entfernt sein, automatisch die Sprachaufnahmen aller Linuxnutzer verbessern zu können. Egal ob das Aufnahmen für Podcasts oder VoIP-Gespräche sind. Damit das machbar wird sollte mit Aufnahmen während extremen Umgebungslärms etwas besser umgegangen werden. Andererseits dürfte niemand erwarten bei solchem Lärm gut verstanden zu werden, daher ist das in der Praxis vielleicht ein relativ kleines Problem.
Ich bin gespannt was draus wird. Bei meinem System lasse ich das jetzt einfach erstmal an und schaue, ob es sich bewährt.
Open-World in Bestform bei Mad Max
Friday, 29. January 2021
Das 2015 etwas nach dem Release des hervorragenden Films Mad Max: Fury Road veröffentlichte Spiel zu Mad Max ging trotz positiver Tests wohl ziemlich unter, zumindest hörte man schnell nichts mehr davon. Auch kein gutes Zeichen: Der ins Hauptmenü gesetzte Menüpunkt DLC führt zu einer leeren Shopseite, die Online-Funktionen werden abgeschaltet. Also werden es viele nicht gespielt haben, und das ist ein Verlust – denn Mad Max ist richtig gut.
Szenario
Mad Max ist eigentlich eine Filmreihe, bei der bis zu Fury Road Mel Gibson die Hauptrolle spielte. Es ist wieder mal eine postapokalyptische Dystopie und ähnelt daher etwas Fallout, aber es kommt ohne dessen schwarzen Humor aus. Stattdessen ist diese Zukunftsversion viel mehr verstörend, mit zu Monstern verkommenen Menschen, lebensfeindlichen Wüstenlandschaften und aus dem verbliebenen Schrott der Zivilisation zusammengeklaubten Unterschlüpfen – und vor allem Autos. Ganz vielen Autos, mit denen sich die Überlebenden bekriegen und wobei Benzin selten ein Mangel ist. Max ist einer dieser Fahrer und auch er ist eine ziemlich beschädigte Figur, wenn auch etwas weniger auf einem wahnsinnigen Vernichtungstrip als seine üblichen Antagonisten.
Das Spiel jetzt setzt die Handlung in die Nähe des letzten Films, der wiederum keine klare Kontinuität mit den vorherigen Filmen hatte. Es ist immer noch so in etwa die gleiche Welt und die gleiche Figur, aber es gibt selten eindeutigen Verweise auf was vorher passiert. Im Spiel sind ein paar mehr als im Film war, so wird die Donnerkuppel zitiert (Two men enter; one man leaves!). Und es gibt klare Verweise auf den Film, der Bösewicht ist gebaut wie einer der Verbündeten des Film-Bösen.
Die Handlung ist ansonsten simpel: Zu Beginn verliert Max im Kampf gegen Scrotus sein Auto. Doch er trifft auf den buckeligen Mechaniker Chumbucket, der ihm ein neues bauen kann. Allerdings reicht der verbaute V6-Motor Max nicht, er will einen V8. Den könnte er in Gastown gewinnen. Aber dort muss er erstmal hinkommen, eine in der Haupthandlung zu überwindende Mauer und viele Gegner wie Nebenmissionen trennen ihn von der auch im Film erwähnten Stadt.
Viel zu tun in der offene Welt
Das Spiel ist ein Actionspiel mit RPG-Elementen in einer offenen Welt und daher vom Genre in der gleichen Kategorie wie ein Assassin's Creed oder Far Cry. Und als dystopische Version dieser Spiele könnte man es auch treffend beschreiben. Allerdings gibt es ein sehr viel wichtigeres aufrüstbares Auto, dafür weniger reguläre Waffen, und funktioniert das Spielkonzept wirklich gut.
In der Spielwelt sind eine Reihe von Feinden und Orte verteilt, die unterschiedlich viel Aufmerksamkeit und Zeit beanspruchen.
Zuerst fährt natürlich nicht nur der Spieler in der Gegend herum. Sondern auch eine ganze Menge an Feinden, meist die Warboys von Scrotus, die mit ihren Autos direkt den Wagen des Spielers angreifen werden. Wer nicht flieht steckt immer wieder in Autokämpfen, bei denen die Fähigkeiten des Wagens wie die Harpune oder Maxs Schrotflinte zum Einsatz kommen werden.
Zivilisten gibt es auch, sie teilen Informationen oder Schrott, beteiligen sich ansonsten aber nicht an den Kämpfen.
Bei den Orten stolpert man zunächst über die Scarecrows, aus Metall und Leichen zusammengehaltene Feuertürme. Max kann sie mit seiner Harpune niederreißen, was den Gefährdungsfaktor des Sektors etwas senkt und sammelbaren Schrott hinterlässt.
Ähnlich funktionieren die Scharfschützentürme, nur schießen die halt zurück und ist der Lohn nicht Schrott, sondern Munition und von einem Ort weniger beschossen zu werden.
Schrott, Munition und manchmal Erinnerungsstücke der Zivilisation finden sich an den gelb markierten neutralen Orten, bei denen aber auch immer ein paar Banditen sich aufhalten und was aufs Maul wollen.
Das gilt meistens auch für die Aussichtsorte. Bei ihnen gibt es aber noch einen Heißluftballon, mit dem man aufsteigt und so die Umgebung erkunden kann. Das Pendant zum Erklimmen von Türmen in anderen Open-World-Spielen samt Markierung anderer Orte auf der Karte. Einmal erkundet dienen diese Orte dann noch als Schnellreisepunkt und bleiben feindeslos.
Aber es sind die Festungen der Verbündeten, die eher als gute Rückzugsorte dienen. Sie alle sind Teil der Haupthandlung. Da ist zum Beispiel die Mannschaft eines riesiges Schiffs, das mitten in der Wüste auf einem Hügel festsitzt, wobei die Bewohner auf die Rückkehr des Ozeans warten. In diesen Festungen gibt es immer ein paar Nebenmissionen und wer an den anderen Orten die richtigen Kisten findet kann in ihnen Stationen aufbauen. Danach bekommt man bei jedem Besuch der Festung z.B. den Wasserkanister aufgefüllt.
Und natürlich haben auch die Feinde Basen. Die sind oft ebenfalls fantastisch in die kaputte Welt integriert. Es gibt dabei verschiedene Arten von feindlichen Festungen, bei der einen muss beispielsweise der Ölförderturm in die Luft gejagt, bei einer anderen alle Gegner besiegt werden. Diese Orte werden einmal befreit von Alliierten in Besitz genommen und bringen regelmäßige Schrotteinnahmen.
Ein Auto-RPG, ein Survivalgame?
Mit dem Schrott und wenn die Gebiete der Verbündeten ausreichend befriedigt wurden schalten sich immer weitere Upgrade frei, die den eigentlichen Star des Spiels verbessern: Das Magnum Opus getaufte Auto. So wird es schneller, bekommt einen Flammenwerfer, bessere Panzerung und einiges mehr. Manche der Upgrades sind auch ans Bewältigen von Haupt- oder Nebenmissionen gebunden, wie der erwähnte V8-Motor. Tatsächlich machen die Verbesserungen ordentlich was aus, gerade wenn die Autos der Gegner anfangen gepanzert zu werden ist nach etwas investiertem Schrott der Unterschied im Kampf deutlich spürbar.
Und auch Max bekommt Upgrades, die verbessern ihn dann in den Faustkämpfen, die er immer wieder zu erledigen hat wenn er zu Fuß unterwegs ist. Das ist ähnlich wie in den Batmanspielen: Linksklicken zum Angreifen, langer Klick für einen stärkeren langsamen Angriff, wenn ein Gegner angreift muss mit rechter Maustaste gekontert werden. Dazu kommt die Schrotflinte, kurzzeitig verwendbare Nahkampfwaffen und ein paar andere Kampffähigkeiten wie Shims oder später freischaltbare Zusatzfähigkeiten. Außerdem gibt es für Errungenschaften (wie den Zornzustand durch gute Kampfkombinationen in wenigen Sekunden zu erreichen) Punkte, die bei einem Schamanen in weitere Boni umgewandelt werden können.
Max kann nur wenig Munition mit sich rumschleppen. Er heilt sich über das Wasser im Kanister, das nicht gerade viel ist. Und selbst das Benzin im Auto geht mit der Zeit aus. Anfangs wirkt Mad Max daher wie ein Survivalspiel, bei dem knappe Ressourcen sorgsam verwaltet werden sollen. Doch das ändert sich schnell: Überall liegt alles rum was Max braucht, Benzin z.B. gibt es im Überschuss und regeneriert auch noch. Dazu sind die meisten Schamanenupgrades solche, die den Ressourcenmangel entgegenwirken, sodass z.B. mehr Schrott und Wasser gefunden wird. Wenn dann noch ein paar Stationen in den Festungen gebaut wurden ist der Ressourcenmangel komplett vorbei. Immerhin bleibt der Munitionsmangel ein Thema, weil eben nur wenig mitgenommen werden kann, wodurch die Kämpfe interessant bleiben und beim Spielen eben doch etwas rationiert werden muss.
Schnell, hübsch und gutklingend
Positiv überrascht war ich von der Technik des Spiels. Gut, es ist nicht ganz neu, aber das ist mein PC ja auch nicht. Ich hatte absolut stabile 75 FPS, das bei meinem Monitor durch FreeSync gegebene Maximum. So wirken die Fahrten viel besser als wenn es geruckelt hätte. Dabei sieht Mad Max stellenweise toll aus, die diversen Wüstenlandschaften insbesondere. Auch die düstere Umgebung von Gastown ist klasse gemacht und die Autos sind genau so faszinierend gepanzerte coole Schrottkisten wie in den Filmvorbildern. Die in tolle Explosionen aufgehen, wobei auch Feuer und Rauch stark wirken.
Mit gutklingend meine ich besonders die Motoren. Die Musik steht nicht stark im Vordergrund. Und obwohl die Sprecher ausnahmslos gut waren: Es ist der V8-Motor, der genau so klingt wie er klingen soll und generell die Autokämpfe, die eine tolle Soundkulisse schaffen.
Vereinzelte Bugs und die verschwundene Linuxversion
Anders als die Psyche von Mad Max ist das Spiel Mad Max sehr stabil. Ich sah nur vereinzelte Bugs. So blieb in einem Gespräch mit einem Zivilisten der Sound weg, ein anderes endete mit einem schwarzen Bildschirm, nachdem währenddessen ein kleiner Wirbelsturm die Spielfigur in die Höhe riss. Fragwürdiger ist da die Linuxversion. Mad Max wurde eigentlich von Feral portiert und diese Version auch per Steam verteilt. Mittlerweile aber wird sie nicht mehr auf der Steamseite erwähnt und tatsächlich startete sie bei mir nicht (wobei Feral-Portierungen auf meinem System generell seltenst funktionierten), die Windowsversion mit Proton-5.21-GE1 lief dann auch unter Linux einwandfrei.
Die Mischung machts
Ich habe bisher im Grunde nur aufgezählt was im Spiel drin ist und bin dabei noch nicht mal fertig. Es gibt zudem noch Rennen, Stürme, von Zivilisten vergebene Missionen, die Basen haben Verteidigungsmechanismen und Sammelitems gibt es auch noch. Mad Max ist prall gefüllt. Aber das macht ein Spiel noch nicht gut. Andere Open-World-Spiele sind eher abschreckend, wenn es an jeder Ecke etwas anderes zu tun gibt.
Das besondere an Mad Max ist wie gut die Elemente zusammenpassen. Da ist erstmal das Szenario, das vollumfänglich ausgenutzt wird um absurde Charaktere wie Chumbucket mit seiner religiösen Verehrung des Automobils zu platzieren oder auch schillernde Gegenfiguren wie die Kurtisane Hope. Die Hauptmissionen führen in die Festungen, die mit ihren Upgrades und Nebenmissionen Motivation geben die Spielwelt zu erkunden. Das wiederum schafft Bedarf für die Upgrades von Max und dem Magnum Opus, was ebenfalls durch das Erkunden der Spielwelt bedient werden kann. Und dann funktioniert es eben wenn in der Spielwelt einiges los ist, es überall Scarecrows umzustürzen und feindliche Basen zu erobern gibt, ohne dass die Aktivitäten sich zu sehr unterscheiden als dass es verwirren würde. Es hilft auch, dass es mit dem Metallschrott nur eine einzige Sammelressource gibt. Und dass das Spiel auch deutlich macht: Du musst das alles nicht tun, da drüben ist der grüne Punkt der zur nächsten Hauptmission führt. Etwas 40 Stunden habe ich so im Spiel verbracht, was für ein Einzelspieler-Actionspiel sehr ordentlich ist.
Außerdem ist es endlich mal ein gutes Spiel zu einem guten Film. Auch wenn Max im Spiel nicht aussieht wie Max im Film, ist es doch klar die gleiche Welt, bedient sich Film wie Spiel der gleichen Elemente und Atmosphäre und baut dabei das Computerspiel dieses Universum ein bisschen weiter aus als ein Film es könnte. Erhalten bleibt auch der Fokus auf das Auto und auf Autoschlachten, was größtenteils durchaus Spaß macht.
Nur stellenweise wird das etwas zum Manko, wenn später die gegnerischen Wagen ziemlich viel aushalten und man eigentlich keine Lust mehr hat, schon wieder Minuten darein zu investieren sie kaputtzurammen. Dann aber hat man meist auch andere Optionen wie den Flammenwerfer, man muss sich nur überwinden deren Munition auch einzusetzen.
Ein paar der Sammelelemente hätten auch nicht sein müssen. So kann man Convoys vernichten und dadurch Trophäen für das Magnum Opus sammeln, welche die Werte verbessern. Die Kämpfe sind nett, nur dass die Upgrades sich wiederholen und jeder Bonus der gleichen Kategorie so stark ist wie der andere. Die findbaren Zivilisationsartefakte sind okay wenn Max einen Kommentar abgibt, aber sie zu sammeln gibt das Spiel außer einer Prozentanzeige keinen Grund. Und warum man feindliche Wagen kapern und in die eigene Garage stellen sollte bleibt auch unklar, ist der Magnum Opus doch schneller, stärker, besser zu steuern – und wiegt durch die anderen Wagen erstmal von Gegnern ignoriert zu werden das nicht auf.
Aber das sind sind kleine Macken in einem ansonsten tollen Spiel, das mit Story, Grafik, Spielmechaniken und vor allem dem Szenario super ansprechend ist. Wer ein bisschen was übrig hat für diese Art von Open-World-Actionspielen sollte es nicht weiter ignorieren.
Heroic 1.0 veröffentlicht, FOSS-Client für Epic
Monday, 11. January 2021
Heroic ist ein Programm, um unter Linux Spiele des Epic-Stores zu starten. Da Epic Linux nicht unterstützt sollte man meinen, dass es für Linuxspieler uninteressant wäre. Und würde sich täuschen. Denn Epic haut ununterbrochen kostenlose Spiele raus. Und nichtmal Mist oder was schon hundertmal umsonst verteilt wurde, sondern in meinem Account liegen zum Beispiel mit Troy, Alien Isolation und Civilization VI interessante Spiele bislang ungespielt herum.
Heroic baut auf legendary auf. Das ist ebenfalls ein Client für den Epic-Store, aber es ist ein Kommandozeilenprogramm. Ohne den Code studiert zu haben ist die Aufteilung wohl so, dass legendary den Großteil der Arbeit macht und Heroic dafür eine grafische Oberfläche bereitstellt. Das ist mir hochwillkommen, auch weil GameHub diese Aufgabe nicht wirklich übernehmen zu wollen scheint.
Der Login ist leider noch etwas frickelig. Man soll sich auf der Webseite einloggen und dann die SID
eingeben. Wie man die findet erklärt Heroic aber nicht. Da ist es einfacher, ein Terminal aufzumachen und mit
legendary auth
den Login zu erledigen. Legendary macht zuerst auch nur die Webseite im Browser auf, nach dem Login aber wird die SID im Terminal angezeigt und kann auch dort direkt für das Programm gesetzt werden. Ist legendary eingeloggt ist auch Heroic eingeloggt. Grundsätzlich sollten zumindest manche Spiele später nach der Installation auch starten, ohne dass ein weiterer Login notwendig ist.
Heroic wird sicher noch nicht per Paketmanager deiner Distribution verfügbar sein, aber beim Release ist ein AppImage angehängt. Das ausführbar machen und starten reicht, wenn denn legendary installiert ist, was wiederum im Paketmanager vorhanden sein sollte. Wenn nicht kann auch das gemäß der Anleitung auf der Github-Seite manuell installiert werden.
Dabei aber nicht vergessen, dass Heroic trotz der Versionsnummer ein sehr junges Projekt ist. Dass etwas nicht funktioniert ist zu erwarten.
Slay the Spire, ein gelungener Genremix
Monday, 14. December 2020
Slay the Spire ist ein Roguelike mit Handkarten. Es führt beide Konzepte gekonnt zusammen und ist auch insgesamt einfach überraschend gut gemacht.
Einfacher Beginn
Ganz zu Beginn ist ein einzelner Charakter verfügbar, der mit einer geringen Auswahl an Handkarten das Spiel startet. Handkarten haben viele verschiedene Effekte, so würde eine Blockkarte dem Charakter 6 Blockpunkte gegeben, die ebensoviel Schaden abwehren. Der Charakter hat zudem ein Startartefakt, zum Beispiel eines das nach jedem Kampf ein paar Lebenspunkte heilt.
Auf einer Übersichtskarte muss Schritt für Schritt die nächste Station ausgewählt werden. Das kann ein Lagerfeuer sein, an dem ebenfalls die Lebenspunkte geheilt werden können oder aber eine Karte verbessert werden kann; ein Händler, bei dem Artefakte, Tränke und neue Karten gekauft werden können; Multiple-Choice-Events mit diversen Effekten, Schatztruhen mit Artefakten – oder aber Kämpfe.
Fortgeschrittene Kämpfe
In den Kämpfen sind die Gegner mit den Handkarten zu besiegen. Es sind Rundenkämpfe. Ein Icon über den Gegnerköpfen zeigt ihre nächste Aktion an, z.B. dass der jeweilige Gegner angreifen oder sich buffen wird. Solange noch Aktionspunkte und Karten da sind können diese gespielt werden. Die simplen machen einfach Schaden oder erhöhen den Blockwert. Dann gibt es solche, die den Gegner verwundbarer machen oder schwächen. Dazu kommen viele andere Karten, von denen nach den Kämpfen immer eine zusätzliche in den Vorrat gelegt werden kann, die weitreichendere Effekte haben.
Welche Karten verfügbar sind hängt vom Charakter und Spielfortschritt ab. Jeder Charakter hat mehrere Freischaltungen. Beim Tod oder nach Bewältigen des Finales werden die gesammelten Punkte gezählt und dem Konto gutgeschrieben. Ist die Grenze für die nächste Freischaltung überschritten, werden weitere Karten (oder auch Artefakte) freigeschaltet, die dann beim nächsten Durchgang gefunden werden könnten. Genauso werden auch die anderen drei Charaktere erst nach und nach spielbar. Und während der erste, der Ironclad, ein ziemlich simpler Kämpfertyp ist, wird es zunehmend komplizierter. Dann greifen die Statuseffekte mehr zusammen, gibt es Giftschaden, Orbs mit passiven und aktiven Effekten oder Kampfzustände und mächtige Zusatzkarten mit speziellen Effekten, die alle sinnvoll eingesetzt werden müssen damit der Finalkampf erreicht und gewonnen werden kann.
Beherrschbare Komplexität
Slay the Spire macht also einige Sachen ziemlich gut. Es fängt relativ simpel an, ist dabei aber nicht zu einfach, weil es schon einen Moment dauert bis man versteht wie selbst die einfachen Anfangskarten ineinandergreifen. Dabei ist aber selbst ein Scheitern vor dem Finale immer ein Fortschritt, nicht nur per gemehrtem Spielerwissen, sondern weil ja auch im Laufe der Zeit neue Karten, Artefakte und Charaktere dazukommen. So werden immer weitere Konzepte eingeführt. Und die sind durchaus erlernbar, ist der Effekt der Karten doch jederzeit in klaren Worten beschrieben. Insgesamt gibt es später dank den neuen Charakteren, Karten und Artefakten immer mehr Möglichkeiten, sodass dieses auf dem ersten Blick simple Spiel viel länger Spaß macht als man erst erwartet.
Die Radeon RX 6800 (XT) unter Linux sieht klasse aus
Wednesday, 18. November 2020
Ich bin gerade durch das Phoronix-Review der neuen AMD-Grafikkarten gegangen und bin beeindruckt. Sie testen die Leistung für Spiele unter Linux, mit und ohne Proton und mit AMDGPU-PRO sowie dem freien Mesa 20.3. Das Ergebnis ist einfach stark. Sie kommen alles zusammengerechnet auf dieses Benchmarkergebnis:
Die Treiber sind sehr nah beieinander, die 6800 XT is nah bei der RTX 3080 und die 6800 stärker als die 2080 Super. Zum Vergleich, so sieht das in meinem Meta-Benchmark unter Windows aus:
Das passt! Wenn auch die 3070 wahrscheinlich unter Linux anders als unter Windows etwas stärker als die kleinere 6800 ist, wird der Unterschied nicht groß sein. AMD hat also nicht nur eine Grafikkarte herausgebracht, die ordentlich unter Linux läuft. Das hatten wir schon in vorherigen Releases. Sondern AMD hat eine Karte herausgebracht, die es mit Nvidas neuen Top-Karten aufnehmen kann und deren relative Leistung unter Linux mit dem freien Treiber erhalten bleibt. Es gibt also endlich eine High-End-Grafikkarte für Linux mit einem freien Treiber.
Was großartig ist, auch wenn man selbst nicht unbedingt so viel für eine Grafikkarte ausgeben will. Die günstigeren Varianten werden ja ähnlich gut – relativ gesehen – unter Linux laufen.
Age of Empires 2: Definitive Edition unter Linux
Monday, 16. November 2020
Die erneuerte Variante des Klassikers Age of Empires 2 läuft mit Proton unter Linux. Sogar der Multiplayer geht, aber nicht ohne weitere Anpassungen. Die Goldwertung auf ProtonDB ist da etwas irreführend.
Ich benutzte Proton-5.9-GE-8-ST, die modifizierte GloriousEggroll-Version. Damit lief das Offline-Match gegen die KI, ohne dass mir Probleme auffielen. Aber beim Multiplayer gab es immer fast sofort einen Disconnect.
Die Lösung fand ich auf Github:
rm ~/.steam/steam/steamapps/compatdata/813780/pfx/drive_c/windows/system32/ucrtbase.dll cd ~/.steam/steam/steamapps/compatdata/813780/pfx/drive_c/windows/system32/ wget "https://aka.ms/vs/16/release/vc_redist.x64.exe" cabextract vc_redist.x64.exe cabextract a10
Nach dem Ersetzen der Dateien lief dann auch der Multiplayer, bei mir bis jetzt stabil.
Update: Ich habe jetzt eine Weile nicht mehr gespielt, aber der Fix sollte weiterhin funktionieren. So landete erst vor drei Wochen – im Februar 2023 – in der ProtonDB ein Eintrag, laut dem Age of Empires mit einem cabextract-Workaround für den Multiplayer repariert werden konnte. Interessant ist die Abweichung, anstatt die vc_redist.x64.exe herunterzuladen kann sie dem Eintrag zufolge auch aus dem Hauptverzeichnis des Spiels kopiert werden. Und es funktionierte mit einer neueren Protonversion, Spieler sind also nicht auf die 5.9-GE8 beschränkt, sondern sollten einfach die aktuelle versuchen.
Multiplayer meinte bei mir übrigens nicht ranked, sondern ich spielte normale Multiplayermatche mit einem Kumpel. Bei der Microsoft-Accounteinbindung gab es auch Probleme, sodass ich manche dieser kleinen Aufgaben nicht erledigen konnte, die Avatar-Icons freigeschaltet hätten. Ich weiß nicht, ob diese Probleme Ranked-Spiele blockiert hätte – Erfahrungen dazu bitte gerne als Kommentar teilen.
Dafür hatte ich einen sehr positiven Eindruck von der Performance des Spiels. Auch gegen mehrere Gegner und mit vielen Einheiten auf der Karte sah ich keine FPS-Einbrüche. Gut, würde man bei einem so alten Spiel außerhalb extrem vollen Karten vielleicht auch nicht erwarten, aber Proton kann ja manchmal doch Performance kosten. Stabil war das Spiel auch, die Abstürze die ich sah hingen völlig an einer defekten Grafikkarte. Sobald die ausgewechselt war lief das Spiel bei mir komplett stabil.
Regions of Ruin – Toller Ansatz, aber es fehlt was
Monday, 9. November 2020
Regions of Ruin ist eine Genremischung in Pixelgrafik. Die Zutaten: Ein Sidescroller mit RPG- und Aufbauspielelementen. Man spielt einen Zwerg, der die aussterbende Zwergenrasse wiedervereinen will, dabei aber eine Monsterhorde voller Orks und Goblins besiegen muss.
Vom Lagerfeuer zum Dorf
Startpunkt ist die eigene Siedlung. Wo anfangs nur zwei Zwerge sich an einem Lagerfeuer wärmen entsteht nach und nach ein richtiges Dorf, wenn mit gesammelten Rohstoffen weitere Gebäude errichtet und ausgebaut werden. So kannst du zum Beispiel eine Taverne errichten. In der Taverne warten Söldner darauf, mit in die Gruppe genommen zu werden. Wird die Taverne vergrößert gibt es mehr Söldner zur Auswahl, dann kommt auch ein Brett für Kopfgeldquests hinzu. Die Rohstoffe wie Holz dafür werden nicht nur von dir selbst gesammelt, sondern auch von Arbeitern – meist befreiten Zwergen – die zu von Gegnern gesäuberten Gebieten geschickt werden können und dann von dort in einer festen Rate Rohstoffe einbringen. Solange der Vorrat reicht und das Lager noch nicht voll ist.
Diese Gebiete sind die auf der Karte verteilten und meist sehr kurzen 2D-Level. In ihnen gibt es NPCs – die oft Quests vergeben – Rohstoffe, Schätze und Monster. Um die Quests zu erfüllen muss man fast immer Monster töten, die auf dem oder einem anderen Level verteilt sind. Die werden schnell sehr stark, wohl dem Spieler der seine Söldnergruppe voll ausgebaut hat. Schätze meint Ausrüstungsgegenstände, wobei der Zwerg neben Rüstung, Waffe, Schild und Helm noch ein Amulett und einen Ring tragen kann. Wie beim Diablosystem haben manche dieser Items magische Eigenschaften und gibt es verschiedene farbig markierte Stärkeklassen, nach einer Weile müssen sie schon mindestens blau-magisch sein um eine Option sein zu können.
Hakelige Kämpfe
Die Kämpfe gegen die Monster und das Befreien der Level sind das Hauptelement des Spiels, und hier fängt es an problematisch zu werden. Anfangs alleine konnte man die Gegner sehr überlegt ausschalten, es gibt sogar eine Schleichfunktion, samt Verstecken hinter Fässern und Bonusschaden wenn Gegner überrascht werden. Treffer von Gegnern können Verletzungen verursachen, dann sinkt der Maximalgesundheitszustand, der Heiler in der Siedlung kann die Effekte entfernen. Angriffe können geblockt werden, es gibt Standard- und stärkere langsamere Angriffe, plus Ausdauerbalken, und mit bei Levelaufstiegen aktivierten Effekten kann der Spielercharakter angepasst werden.
Später jedoch ist man in der Gruppe unterwegs, und dann werden die Kämpfe sehr chaotisch. Gewinnen wird die stärkere Gruppe, aber welche das ist ist vorher kaum zu sehen. Die Level haben keine Gefährlichkeitsanzeige. So gibt es eine Hauptstory, in der Zwergenrunen aktiviert werden sollen, was dann jeweils ein entferntes Gebiet markiert. Das vierte davon war für mich und meine Gruppe viel zu stark – aber wie soll man erkennen, wann man für die Gegnergruppe bereit ist? Ich könnte jetzt nur Zeit investieren, mehr Level bewältigen, meinen Charakter und seine Gruppe aufleveln (auch mit einem Gebäude in der Siedlung, das Söldner viel stärker macht), und es dann periodisch wieder probieren. Aber das ist doch keine Lösung.
Abnutzungserscheinungen
Das wirkt auch deswegen so unattraktiv auf mich, weil sich jetzt langsam das Prinzip der 2D-Level abgenutzt hat. Wenn die Quests praktisch immer Töte ein paar Monster sind, wird das im Laufe der Zeit weniger interessant, selbst wenn das Spiel immer mal wieder neue Ideen aufbringt, wie (nicht toll umgesetzte) Festungen samt Monsterwellen, die man überleben soll. Gleichzeitig haben die regulären Gebiete das gleiche Problem: Die Monster sind teils zu stark, ohne dass das vorher ersichtlich ist. Sowieso, Grinden zu müssen ist kein gutes Spieldesign.
Die Bedienung ist dabei auch ein Problem. Ein Spiel wie Regions of Ruin spielt sich viel besser mit dem Controller. Das wird auch unterstützt, aber das Interface ist dafür nicht ausgelegt. Das Journal zum Beispiel lässt sich mit dem Controller gar nicht aufrufen, man muss die Maus in die Hand nehmen. Muss man auch, um im Söldnermenü den ausgewählten zu wechseln. Und sollte man, um auf der Karte Gebiete auszuwählen, da die Controllersteuerung dort nur manchmal und umständlich funktioniert. Problematisch wird auch das Schleichen: Jede der Schultertasten ist belegt, aber betätigt man aus Versehen die fürs Schleichen ist das ein Umschalter, der den Zwerg massiv verlangsamt – und damit im Gefechtschaos meist direkt tötet. Es ist offensichtlich, dass der Entwickler mit Maus und Tastatur spielt. Machen manche PC-Spieler auch bei solchen Spielen, macht den meisten aber keinen Spaß.
Stilfragen sind subjektiv, Bugs sind es nicht
Wenn die Grafik wenigstens konsistent hübsch wäre! Sie ist es stellenweise. Aber der Pixelmatsch bei den Charakteren und Gegenständen hat trotz der Anleihen mit der Eleganz der Spiele meiner Kindheit nichts zu tun. Immerhin wird die Freiheit einer solchen Engine genutzt, wenn jeder Ausrüstungsgegenstand am Spielercharakter zu erkennen ist (naja, soweit die Pixelfantasie trägt), die 2D-Gebiete voller Dinge und Hintergrundelemente vollstehen und in der Siedlung die Gebäude Schritt für Schritt wachsen. Aber trotzdem: Hübsch ist anders.
Voll zu den Problemen passt dann auch, wenn die Begleiter in den späteren vertikalen Leveln hängen bleiben. Nach unten fallen geht noch, aber dem Spieler springend folgen oder nach oben klettern - keine Chance. Oder wenn sie bei den Belagerungen an den Rand der Karte rennen und sich dort ohne Gegenwehr angreifen lassen. Da setzt die KI einfach komplett aus.
Fazit: Ein gutes Konzept macht noch kein gutes Spiel
Regions of Ruin hat mit seiner Mischung ein interessantes Konzept. Es fasziniert gerade zu Beginn, wenn all die Spielelemente anfangen zusammenzugreifen: Der Siedlungsaufbau, die hektischen Kämpfe, das Aufleveln des Charakters, dann die vielen Quests die Welt füllen und durch NPCs und gesammelte Buchseiten langsam die Hintergrundgeschichte zusammenkommt. Doch schnell verpufft dieser Effekt, wenn die kurzen 2D-Level zu wenig überraschen, die Kämpfe sich als repetitiv und zu chaotisch erweisen und der stark wachsende Schwierigkeitsgrad Grinden erfordert. Dazu die Schwächen bei Bedienung, Grafik und Begleiter-KI. Das erinnert an Pixel Piracy, das ähnlich faszinierend und dann unfertig war, wobei das mit etwas mehr Spielfortschritt auch noch unweigerlich kaputt ging. So kaputt ist Regions of Ruin nun nicht, doch auch es entpuppt sich nach wenigen Stunden leider als unfertiges Konzeptspiel.
Legend of Grimrock, altmodischer Crawler in neu
Monday, 26. October 2020
2012 einen Dungen-Crawler zu veröffentlichen, der abgesehen von der Grafik nur eine vorsichtig modernisierte Variante von Klassikern des Genres wie Eye of the Beholder ist, war ein gewagtes Experiment. Es scheint gelungen zu sein: Das Spiel bekam einen Nachfolger und Legend of Grimrock selbst erntete positive Reviews.
Ich tat mir mit dem Spiel anfangs allerdings ziemlich schwer. Ein Lands of Lore war das einzige Rollenspiel dieser Machart, das ich je gespielt hatte. Und es war keine zu positive Erinnerung, denn ich fand es zwar faszinierend, aber spätestens im Dschungelabschnitt wusste ich nie was ich machen sollte, verlief mich und starb. Ähnlich war mein erster Versuch mit Legends of Grimrock, als ich nach einer kurzen Weile schlicht an den Monstern scheiterte.
Jetzt motivierte mich aber der Blog The CRPG Addict mit seinen vielen Berichten über alte Rollenspiele, Grimrock nochmal eine Chance zu geben. Mittlerweile hatte ich auch verstanden, dass in diesem Genre Kämpfe aktiver geführt werden müssen als es erst scheint: Indem man immer um die Gegner herummanövriert kann man den meisten Schaden vermeiden. So sind die Gegner dann nicht mehr unbezwingbar, die anderen Mechaniken des Spiels werden erlernbar.
In Grimrock spielt man eine Gruppe von Abenteurern, die in einen Dungeon geworfen werden. Ihre einzige Hoffnung ist, ihn zu durchwandern und einen Ausgang zu finden beziehungsweise sein Mysterium zu lösen. Dabei ist der Dungeon unterteilt in mehrere Ebenen, immer musst du die Treppe in die nächstuntere finden.
Das beginnt simpel, mit wenigen langsamen Gegnern. Doch es zieht stetig an: Teleporter und Fallen kommen hinzu, mehr und stärkere Gegnertypen gilt es zu besiegen, mit immer besserer Ausrüstung und versteckten Schätzen (oft verborgen durch schwer zu sehende Schalter an den Wänden). Du musst Nahrung sammeln und die Helden versorgen, aber das Inventar ist nicht unbegrenzt groß und das Gewicht wird auch zum Problem. Solche Survivalelemente sind passend fürs Genre, aber erst in den letzten Jahren wiederentdeckt worden. Dazu kommen schließlich kompliziert werdende Rätsel.
Rätsel in Spielen sind immer ein zweischneidiges Schwert, so auch hier. Zu simpel, und man hätte sie sich auch sparen können. Zu schwer, und sie bremsen den Spieler komplett aus und zerstören jeglichen Spielspaß. Grimrock schafft es meistens, die richtige Balance zu finden. Doch einzelne Rätsel sind kaum zu lösen. So gibt es einen zwei Quadrate breiten Gang, den man in der richtigen Abfolge links/rechts entlanglaufen muss, sonst teleportiert er die Gruppe an den Anfang. Die richtige Schriftrolle mit einer Erklärung ist zwar vorher zu finden, aber kein Hinweis, dass genau an dieser Stelle die beschriebene Kombination anzuwenden ist. Ich war blockiert. Und wurde danach direkt nochmal blockiert: Denn auf dieser Ebene geht es erst weiter, wenn aus drei verteilten in die Wand gehauenen Altaren Gegenstände entnommen werden. Den zweiten davon brauchte ich aber nicht, weil mein Magier nur Feuermagie konnte, die Rolle aber einen Luftmagiespruch anbot. Also legte ich ihn zurück - und war wieder blockiert, bis ich schließlich die Lösung suchen musste. Altmodisch oder nicht, das ist einfach schlechtes Spieledesign.
Andererseits ist das Spiel trotz seiner betonten Altbackenheit ansonsten fair. Rätsel haben normalerweise erkennbare Lösungen, hat man das Kampfsystem einmal verstanden sind die Monster fordernd, aber besiegbar. Und der frustrierende Moment war nach dieser Situation: Während ich nach einem Levelaufstieg über die Skillpunktverteilung haderte, nachdem ich gerade erst die Ausrüstung neu verteilt hatte und dabei nicht wusste, ob der bei einem Treffer mehr Schaden verursachende Ogerhammer trotz der schlechten Genauigkeit oder die schwächere Streitkeule ohne Genauigkeitsmalus die bessere Wahl war, merkte ich: Hey, das ist ja wirklich wie in einem regulären Rollenspiel. Und hey, das macht sogar Spaß!
Legend of Grimrock hat eben hinter all dem Retroexperiment auch die Tugenden eines guten Computerrollenspiels. Die Gruppe des Spielers wird immer stärker, bekommt tolle neue Ausrüstung, die stärker ist und auch besser aussieht. Vor allem der Effekt der Skillpunkte ist wie so oft toll, wenn dann durch neue automatisch ausgelöste Attacken die Gegner viel schneller besiegt werden. Das motiviert. Die Hintergrundgeschichte wird sehr dezent erzählt, mit Notizzetteln und Traumsequenzen, aber sie ist da und hilft ebenfalls. Die vielen versteckten Schätze zu entdecken macht Spaß, wobei das fortwährende Absuchen der Wände nach versteckten Schaltern irgendwann auch nervig wird. Vor allem aber wird der Spieler selbst besser: Wenn mit etwas Erfahrung das Leveldesign lesbar wird, zum Beispiel wenn der Aufbau der Monsterköpfe an den Wänden vor einer Bodendruckplatte klar macht, dass man dort jetzt besser nicht drauftritt, sondern erstmal einen Stein hinlegt und ausweicht.
Insgesamt empfand ich Legend of Grimrock zwar durchaus auch als etwas mühselig, an einigen Stellen arg sperrig und verbesserbar. Aber es überwog, dass ich es interessant fand und es mich bis zum Spielende fesseln konnte. Wenn auch erst im zweiten Anlauf.
Flutter: Ein tolles Framework für mobile Apps
Monday, 19. October 2020
Flutter ist ein Framework zur Anwendungsentwicklung. Fokus sind Android und iOS-Apps, aber man kann stattdessen auch für das Web oder mittlerweile sogar den Desktop entwickeln. Es ist ein Google-Projekt, was aber nicht wirklich ein Nachteil ist wenn man mit Android sowieso für eine Google-Plattform entwickelt.
Das Framework ist schon wegen der Konzepte eine ziemliche Umstellung zur gewöhnlichen Android-Entwicklung, zusätzlich schreibt man die Anwendung dann auch noch in einer neuen Sprache, Dart. Doch Dart entpuppt sich als großer Vorteil, dazu unten mehr.
Flutter-Code und Konzepte
Flutter mag insgesamt eine große Umstellung sein, doch der Einstieg ist super simpel. Alles ist ein Widget, jede Oberfläche ist ein Widgetbaum, im Baum kombiniert man die Widgets frei. Zum Beispiel ist das hier das mitgelieferte Hello-World-Beispiel:
import 'package:flutter/widgets.dart'; void main() => runApp( const Center( child: Text('Hello, world!', key: Key('title'), textDirection: TextDirection.ltr ) ) );
So sieht das aus:
Auch als Anfänger ist das problemlos lesbar, die Elemente machen genau genau was man erwartet. main()
ist der Startpunkt der Anwendung, runApp
startet die App, das Center-Widget
zentriert, Text
zeigt Text an. Würde man den Code in eine Material-App packen, würde die App auch direkt aussehen wie eine typische Android-Anwendung.
Aber es ist purer Code, während man bei der Entwicklung mit Android-Studio Oberflächen mit XML-Layouts zusammenbauen konnte. Die Trennung nicht zu haben birgt die Gefahr, UI-Code und Programmlogik zu verschmelzen – was ja aber auch bei regulären Androidanwendungen nur zu schnell passiert. Flutter, und mehr noch die Community drumrum, kompensiert diesen Nachteil über mit einem exzessiven Fokus auf Zustandsmanagement.
Zustandmanagement
Zustandsmanagement ist die Verwaltung des States, das sind einfach die lokalen und globalen Variablen, die Einfluss auf die Oberfläche haben. Flutter versucht generell eine deklarative UI-Entwicklung vorzugeben: Die UI wird immer wieder neu gezeichnet, und wenn der Zustand sich verändert hat sieht die Oberfläche entsprechend anders aus.
Zuerst aber gibt es StatelessWidgets, die keinen eigenen Zustand haben. Holen sie sich die Variablen nicht von außen sehen sie immer gleich aus.
class GreenFrog extends StatelessWidget { const GreenFrog({ Key key }) : super(key: key); @override Widget build(BuildContext context) { return Container(color: const Color(0xFF2DBD3A)); } }
Das hier wäre einfach ein grünes Fenster.
Dann gibt es StatefulWidgets, die ihre eigenen änderbaren Variablen haben können.
class YellowBird extends StatefulWidget { const YellowBird({ Key key }) : super(key: key); @override _YellowBirdState createState() => _YellowBirdState(); } class _YellowBirdState extends State<YellowBird> { @override Widget build(BuildContext context) { return Container(color: const Color(0xFFFFE306)); } }
Das zeigt jetzt auch nur einen farbigen Bereich an. Aber der State-Klasse könnte man jetzt Variablen hinzufügen. Die Doku zeigt dieses Beispiel:
class Bird extends StatefulWidget { const Bird({ Key key, this.color = const Color(0xFFFFE306), this.child, }) : super(key: key); final Color color; final Widget child; _BirdState createState() => _BirdState(); } class _BirdState extends State<Bird> { double _size = 1.0; void grow() { setState(() { _size += 0.1; }); } @override Widget build(BuildContext context) { return Container( color: widget.color, transform: Matrix4.diagonal3Values(_size, _size, 1.0), child: widget.child, ); } }
Das ist also ein Widget mit einer festen Größe, das eine Funktion mitbringt um zu wachsen. setState(() { });
muss immer dann aufgerufen werden, wenn die Oberfläche die Zustandsvariablen neu evaluieren soll.
GetX
Es gibt Unmengen Lösungsansätze für die Zustandsverwaltung. Zum einen weil sie wichtig ist, denn mit ihr steuert man ja direkt das Verhalten der App. Aber auch, weil da die Einflüsse der Entwicklergruppen kollidieren: Da kommt das übliche mentale Chaos aus dem Javascript-Land angeschwemmt, vermischt mit Enterprise-Architekturen – passt ja zu einem Google-Framework. GetX ist anders. Es ist ein pragmatisches Werkzeugset, das nur unter anderem Statemanagment löst. Mit dem Flutter-Modul kann man jeder Oberfläche einen Controller zur Seite stellen, und mit dem Obx
-Widget die Oberfläche immer neu zeichnen lassen wenn sich eine der Variablen ändert. Im Flutter-Kontext ist das Magie, das Resultat ist einfach sauberer Code. So ist das Counter-Beispiel aus der Readme elegant und verständlich:
Du hast einen Controller, in der die Variable und eine optionale Manipulierfunktion definiert wird:
class Controller extends GetxController{ var count = 0.obs; increment() => count++; }
Und dazu das Widget, bei dem ein Druck auf den Button die Variable erhöht, wodurch direkt die Anzeige aktualisiert wird:
class Home extends StatelessWidget { // Instantiate your class using Get.put() to make it available for all "child" routes there. final Controller c = Get.put(Controller()); @override Widget build(context) => Scaffold( // Use Obx(()=> to update Text() whenever count is changed. appBar: AppBar(title: Obx(() => Text("Clicks: ${c.count}"))), // Replace the 8 lines Navigator.push by a simple Get.to(). You don't need context body: Center(child: RaisedButton( child: Text("Go to Other"), onPressed: () => Get.to(Other()))), floatingActionButton: FloatingActionButton(child: Icon(Icons.add), onPressed: c.increment)); } class Other extends StatelessWidget { // You can ask Get to find a Controller that is being used by another page and redirect you to it. final Controller c = Get.find(); @override Widget build(context){ // Access the updated count variable return Scaffold(body: Center(child: Text("${c.count}"))); } }
Das Beispiel zeigt noch zusätzlich die Navigationslösung, die man nicht nutzen muss. Trotzdem: Klarer geht es nicht.
GetX hat Nachteile. So sind die Details nicht ganz so simpel wie es zuerst scheint - wie zum Beispiel umsetzen, dass auf eine Objektvariable eines Listenelements reagiert wird, wenn doch List.obs
nur auf das Vergrößern und Verkleinern der Liste reagiert? Vor allem aber ist es ein junges Projekt, bei dem noch zu viele Commits hereinkommen, von zu wenigen Entwicklern, das Ding ist noch im Flux. Trotzdem ist es ein supermächtiges Werkzeug und erleichtert die Arbeit mit Flutter deutlich.
Paketverwaltung
Richtig nett an Flutter ist auch das darum aufgebaute Entwickleruniversum. Man findet Erklärvideos und -artikel. Am wichtigsten aber sind die Pakete. Auf https://pub.dev/ gibt es eine Suche, Module (für Flutter wie Dart) werden dort sauber vorgestellt, gewonnene Likes dienen als Orientierungshilfe. Bräuchte meine App beispielsweise eine animierbare Navigationszeile unten, ich könnte sie mit convex_bottom_bar direkt von dort beziehen. Eintragen in die pubspec.yaml, flutter pub get
ausführen, den Code einbauen, fertig. Eine solche Paketübersicht habe ich bei der direkten Androidentwicklung mit Java schmerzlich vermisst.
Dart
Dass Flutter direkt eine neue Programmiersprache erfordert ist erstmal total abschreckend. Doch Dart macht das ganz schnell wieder wett, denn die Sprache ist gelungen. Dart ist eine wilde Mischung, für mich fühlt es sich aber vor allem nach Ruby an. Was toll ist. Es fehlen allerdings die Blöcke. Dafür hat es async-Funktionen direkt mit dabei, samt await und Future. Wikipedia zählt Smalltalk und Erlang als weitere Einflüsse. Bestimmt ist da auch Python mit drin, Java und Javascript.
Dart hat mich bisher noch in keiner Situation enttäuscht. Die Sprache hat für mich als Ruby-Programmierer immer eine gute Lösung parat gehabt und mich seltenst negativ überrascht.
Die folgenden Beispiele kann man auch alle auf der Webseite ausprobieren.
Hallo-Welt:
main() { print("Hello, World!"); }
Zahlen:
int i = 1 + 2; print(i); // => 3
Strings:
final s = "abc" + "def"; print(s); // => abcdef
Es gibt Listen und Maps (Hashes):
var testliste = [1, 2, 3]; print(testliste[1]); // => 2 var testmap = {1: 'a', 2: 'b', 3: 'c'}; print(testmap[2]); // => b
Und map und fold:
var testliste = [1, 2, 3]; var result = testliste.map((element) => [element]); print(result); // => [[1], [2], [3]] var folded = result.fold(0, (prev, element) => prev + element.first); print(folded); // => 6
Dr ganze Bereich um async war ungewohnt und ist nicht einfach, aber das simple Beispiel ist klar:
Future<void> fetchUserOrder() { // Imagine that this function is fetching user info from another service or database. return Future.delayed(Duration(seconds: 2), () => print('Das hier folgt 2 Sekunden später')); } void main() { fetchUserOrder(); print('Das ist die erste Ausgabe.'); }
Und natürlich Objekte mit Funktionen:
class Sword { int damage = 5; use() => print("$this dealt $damage damage."); } main() { var sword = Sword(); sword.use(); // => Instance of 'Sword' dealt 5 damage. }
Dazu kommt noch viel mehr: Generic, Mixins, Named Parameters, Lambda hatte ich erwähnt, die Standardklassen haben hilfreiche Funktionen definiert, chaining mittels ..
– also das Aneinanderreihen von Funktionen an ein Objekt, obwohl die Funktionen eigentlich void
zurückgeben. Dart ist wirklich erstaunlich angenehm.
Und die Flutter-Programme, die mit Dart gebaut werden, laufen nicht etwa in einem Wrapper, sondern werden kompiliert und dann nativ auf dem Gerät ausgeführt. Dart kann auch nach Javascript transpilieren, was dann die Web-Unterstützung von Flutter erlaubt, aber das ist gefährlich – die so erstellten Webseiten sind bestimmt Javascript-Monster. Für einzelne Spezialfälle könnte aber auch das eine gute Lösung sein.
Fazit: Beachtenswert
Flutter verspricht, mobile Anwendungen viel schneller entwickelbar zu machen als wenn man sie mit den Bordmitteln schreibt. Wenn man das Framework bereits beherrscht mag das stimmen. Ist man neu, ist es mit der Fixierung auf indirekte Interaktivität nicht so einfach zu beherrschen und dieser Lernprozess dann auch nicht schnell. Aber: Dann ist es mächtig, und ich habe definitiv den Eindruck, dass man hiermit bessere Oberflächen und somit auch Apps bauen kann. Dass die dann auf beiden großen mobilen Betriebssystemen laufen können kommt noch dazu.
Dart ist dann die Krönung. Erwartet hatte ich ein alternatives Javascript – etwas, womit man arbeiten kann, aber woran man eher keine Freude hat. Stattdessen ist es nahe genug an Ruby und so ausgereift, dass ich fast frei meinen Programmcode schreiben kann. Sicher, mit der Zeit werden sich die Schwachstellen offenbaren, und eine so junge Sprache kann nicht an die Modulvielfalt von Ruby herankommen. Eine positive Überraschung war sie aber allemal.
Wenn Flutter die entsprechende Entwicklung stabilisiert (noch ist es alpha) könnte ich mir das glatt auch für Linuxanwendungen vorstellen. Die Entwicklung mit wxWidgets, GTK und Qt ist deutlich komplizierter. Derzeit greifen Entwickler dann stattdessen oft zu Electron und anderen Javascript-Desktopwrappern. Flutter mit Dart könnte die bessere Lösung sein. Ich bin gespannt, ob sich das bewahrheitet. Derzeit hat sich die Alpha an snap gekoppelt, was komplett inakzeptabel ist solange es die einzige Lösung bleibt. Aber Flutter-Appimages oder schlicht Binaries? Könnten eine tolle Sache sein.
Wer jetzt für Android entwickeln will, für den ist Flutter mit Dart auch jetzt schon einen Versuch wert.
Wir waren fertig!
Monday, 12. October 2020
Jono Bacons Bemerkungen zur Brainstorm-Abschaltung haben bei mir eine Erinnerung freigesetzt. Als Ubuntu bekannt wurde war ich ja bei ubuntuusers aktiv, trat als Supporter dem Team bei und verbrachte viel Zeit in dem Forum. Und wenn ich natürlich nicht für alle reden kann, war zumindest bei mir die Grundeinstellung bezüglich dieses Linuxsystems: Das wars jetzt.
Ob Gnome 2, das damalige KDE oder die unbekannteren Fenstermanager: Die Desktopmetapher war perfektioniert. Seit Windows 95 hatte sich da nichts mehr getan, Microsoft produzierte Schrott (Vista! Wobei, das war etwas später), warum sollte sich da jetzt noch etwas ändern? Der Linuxkern untendrunter funktionierte gut, soweit wir sehen konnten. Es ging nur noch darum, die richtigen Standardeinstellungen zu finden, Bugs zu beheben, Workarounds umzusetzen, Konfigurationssoftware zu bauen.
Es ist diese Einstellung, die erklärt, warum ein Ziel wie "Fixt Suspend/Hibernate auf allen Laptops" richtig erschien. Was sonst sollte man machen? Die Iconfarben ändern?
Natürlich ist genau das passiert.
Auf der einen Seite stimmte die Einstellung damals: Es hat sich nichts mehr getan. Selbst das so disruptive Gnome 3 ist letzten Endes, von der Oberfläche her, Windows 95 kaum überlegen. Die Änderungen sind im Zweifel Änderungen, nicht Verbesserungen, was die Oberfläche besser macht sind Funktionen wie virtuelle Desktops, die die Linuxwelt schon vorher hatten. Compiz kam und verschwand wieder, der 3D-Desktop war genau so unbrauchbar wie er zuerst schien. Wir benutzen immer noch Maus und Tastatur und Monitor, und gerade bei den Eingabegeräten oft genug exakt die gleichen wie damals.
Aber andererseits war die Erwartung, dass nun zielgerichtet das System perfektioniert wird, komplett falsch. Stattdessen wurde umgekrempelt was umzukrempeln ging, kämpften die verschiedenen Distributionen und ihre technischen Initiativen um die Vorherrschaft. Ja, im Großen geht es vorwärts, sehen unsere Oberflächen nun hübscher aus als damals und haben Animationen. In manchen Bereichen wie der Spieleunterstützung ist der Fortschritt so massiv wie hervorragend. Aber es ist oft keine direkte Vorwärtsbewegung, es ist ein wildes Umherzucken und man muss bei jeder Bewegung froh sein, wenn nicht gerade kaputt geht was vorher perfekt funktionierte. Pulseaudio ließ hunterttausendfach Computersoundsysteme verstummen. Die beiden bekannten Desktopumgebungen entschieden nahezu zeitgleich, von null anzufangen und ihre stabilen Versionen mit instabilen und dem üblichen Deskop fernen Experimenten zu ersetzen, woran das Gnome-Projekt beinahe zugrunde gegangen wäre als die Nutzer rebellierten. X sollte ersetzt werden durch Mir und Wayland, Mir starb, Wayland versucht sich immer noch als schlechteren X-Ersatz. Systemd nistete sich als seitdem immer weiter wachsendes Krebsgeschwür unter dem Deckmantel eines Initsystem in die Distributionen ein, machte Logs binär und Startprozesse so instabil wie unwartbar. Und das sind ja nur die großen Beispiele, die üblichen Verdächtigen.
Diese Sichtweise erklärt dann auch die Abwehrbewegungen. Wer wie ich seit über zehn Jahren den gleichen Nischen-Fenstermanager einsetzt (wenn auch mit einem schöneren Design) hat kein Interesse daran, wenn das Fundament wackelig wird. Und genau: Die Linuxwelt hat sich getrennt, mit Extremen wie Fedora auf der einen Seite – die Wayland einsetzten, obwohl das System längst noch nicht als X-Ersatz taugte, und SELinux anschalteten, obwohl dann in vielen Situationen der unbedarfte Nutzer komplett blockiert wurde – und Anti-Systemd-Distributionen wie Devuan oder auch void auf der anderen, und dazwischen Distributionen wie Ubuntu, die nach schmerzhaften Ausbruchversuchen wie Unity generell der Masse folgen.
Aber wenigstens ist der vorher braune Desktophintergrund jetzt pink.
Pinetab, ein Ersteindruck
Friday, 2. October 2020
Das Konzept wirkt auch noch gut wenn man das Gerät in Händen hält. Das Pinetab ist ein 10.1" Tablet. Linux ist das Betriebssystem, optional gibt es eine ansteckbare Tastaturhülle (beleuchtet!), sie verwandelt das Tablet in ein kleines Laptop. Beim ersten Start führt ein Wizard durch die Einrichtung, der gleich auch vor den noch bestehenden Bugs warnt. Man solle doch bitte direkt updaten. Das hilft zwar nicht merklich, aber das kann ja noch werden.
Die Hardware hat auch ein paar Probleme. Das Display fühlt sich ganz anders an als andere Tablets (wie mein HP Touchpad) und zeigt sehr deutlich Fettspuren, vor allen auf den schwarzen Rändern. Die zwei Lautsprecherschlitze sind blödsinnigerweise hinten angebracht und der Ton ist relativ schwach, sollte auf dem Ding mal Youtube laufen mindestens nicht optimal. Und die Tastaturbeleuchtung ist sehr ungleichmäßig, sollte die Software mal als Laptopersatz taugen wird das nerven.
Zuerst dachte ich der Bildschirm wäre zu schlecht aufgelöst um Schrift ordentlich anzeigen zu können, stellt sich raus dass nur Ubuntu Touch keine ordentliche Systemschriftart hat (und auch Icons nicht sauber zeichnen kann). 1280×800 bei 10.1" sind an sich okay, im Browser wirkt das Bild dann auch besser.
Was nochmal zur Software führt. Ubuntu Touch hat ein ordentliches Bedienkonzept, die Gestensteuerung funktioniert. Aber halt noch nichts anderes. Immer wieder stirbt die Oberfläche, versucht etwas anzuzeigen und zeigt stattdessen auf einem ansonsten leeren Bildschirm nur einen Zipfel des Zielfensters. Der Browser hat kein ordentliches Tabinterface und keinen Adblocker. Youtubevideos kann er nicht flüssig abspielen. Es gibt einen Appstore, aber keine der getesteten Apps funktionierte (ich testete alle Youtubeapps sowie Telegram). Libertine, das System um reguläre Linuxanwendungen laufen zu lassen, starb bei der Testinstallation (von Firefox) in einer Endlosschleife.
Wenn man die Tastatur anschließt ist der vom Trackpad gesteuerte Mauszeiger nur in einem kleinen Teil des Bildschirms bewegbar. Das ist ein bekannter Bug.
Wir wurden ja vorgewarnt, dass es eine frühe Version des Tablets ist. Es ist eine sehr frühe. Ich hoffe, dass es im Laufe der Zeit besser wird. Ich würde gerne Youtube mit abspielen, ein brauchbarer Webbrowser wäre auch praktisch, als Alternative zum auch nicht jünger werdenden Touchpad. Und wenn dann später noch die Tastatur funktioniert (samt Linuxumgebung, Texteditor und Webbrowser), umso besser. Davon ist die Software aber noch weit weg.
GMDX unter Proton installieren
Monday, 21. September 2020
GMDX, ein patchartiger Mod für Deus Ex, ist unter Linux nicht so einfach installierbar wie unter Windows. Und leider nicht auf Steam. Mein Vorgehen war so:
Zuerst lud ich die Version 10 auf moddb herunter. Dieser Forenpost beschreibt dann, wie man den Installer per wine am richtigen Ort ausführt und danach die Dateien in den eigentlichen Spieleordner schiebt:
cp ~/Downloads/GMDXv10_Setup_100520.exe ~/.local/share/Steam/steamapps/compatdata/6910/pfx/drive_c/ WINEPREFIX=~/.local/share/Steam/steamapps/compatdata/6910/pfx winetricks shell wine GMDXv10_Setup_100520.exe cp -R ~/.local/share/Steam/steamapps/compatdata/6910/pfx/drive_c/Program\ Files\ \(x86\)/Steam/steamapps/common/Deus\ Ex/System/* ~/.local/share/Steam/steamapps/common/Deus\ Ex/System/ cp -R ~/.local/share/Steam/steamapps/compatdata/6910/pfx/drive_c/Program\ Files\ \(x86\)/Steam/steamapps/common/Deus\ Ex/Help/ ~/.local/share/Steam/steamapps/common/Deus\ Ex/Help/ cp -R ~/.local/share/Steam/steamapps/compatdata/6910/pfx/drive_c/Program\ Files\ \(x86\)/Steam/steamapps/common/Deus\ Ex/GMDXv10/ ~/.local/share/Steam/steamapps/common/Deus\ Ex/
Schließlich noch bei Steam den Startparameter anpassen:
Startparameter: INI=GMDXv10Default.ini USERINI=GMDXv10DefUser.ini
Im verlinkten Post wird statt winetricks protontricks verwendet, bei mir funktionierte das nicht.
Corona-Warn-App auf LineageOS 17.1 mit microG aktivieren
Friday, 11. September 2020
Update 12.2021: Die Anleitung unten sollte noch funktionieren, aber es ist wesentlich einfacher den freien Fork der Covid-Warn-App mit F-Droid zu installieren. MicroG muss dann nicht mehr manuell installiert werden (wird aber genutzt wenn vorhanden).
Mit microG kann jetzt die Corona-Warn-App auch ohne die Google-Dienste aktiviert werden. Dafür muss microG installiert werden, damit microG funktioniert muss Signature-Spoofing aktiviert sein. Das kann LineageOS so nicht, aber es kann aktiviert werden.
Vorgehen:
- Installiere Magisk
- Aktiviere in Magisk den NanoDroid-Patcher
- Nach einem Neustart installiere per F-Droid microG, microG Services Framework Proxy und den FakeStore
- Gebe microG die notwendigen Rechte. Insbesondere braucht der FakeStore die Permission für Signature-Spoofing, was unter Einstellungen -> Apps vergeben werden kann
- Installiere die Corona-Warn-App (z.B. per Aurora Store) und aktiviere das Tracing
- Prüfe in der microG-Anwendung ob IDs gesammelt werden.
Mehr Informationen finden sich in diesem Reddit-Thread und auf Mastodon. Ich beschreibe im Folgenden aber auch nochmal jeden Schritt mit mehr Details.
Magisk Installieren
Magisk ist ein Android-Programm, mit dem das System grundlegend verändert werden kann. Es hakt sich in den Startvorgang und lädt Module, die dann zum Beispiel neue Funktionen bereitstellen. Es ist ein komfortabler erster Schritt um Signature-Spoofing aktiviert zu bekommen.
Lade von der Github-Releaseseite das neueste Magisk-vX.Y.zip herunter, momentan ist das Magisk-v20.4.zip. Telefon ausschalten und das Recovery-Programm starten (normalerweise Lautstärke-unten und Power beim Anschalten gedrückt halten, eben wie bei der Lineage-Installation). Dann sideloading starten, Telefon per USB-Kabel mit dem PC verbinden und Magisk transferieren:
onli@fallout:~/Downloads$ adb sideload Magisk-v20.4.zip
Nach einem Neustart sollte Magisk in der Appliste auftauchen.
Signature-Spoofing per NanoDroid-Patcher aktivieren
Magisk nutzen wir nun um Signature-Spoofing zu aktivieren, denn nur wenn das an ist lässt sich die Corona-Warn-App dazu herab statt mit Google-Diensten mit microG zu reden. NanoDroid kann eigentlich noch viel mehr und könnte uns auch direkt microG installieren, aber bei mir funktionierte dann die Corona-App nicht. Also ziehen wir das aus F-Droid und nutzen von NanoDroid nur den Patcher.
Er ist bei den Releasedateien gelistet. Herunterladen und auf Telefon transferieren:
onli@fallout:~/Downloads$ adb push NanoDroid-patcher-22.9.20200910.zip /sdcard/Download/
Dann in der Magisk-App unter "Modules -> Plus-Icon" auswählen, werkeln lassen, neustarten.
microG installieren
Mit F-Droid lässt sich nun microG installieren.
Zuerst muss in F-Droid das microG-Repository hinzugefügt werden. Einfach die URL eintippen.
microG besteht aus mehreren Komponenten. Die erste heißt microG Services Core. Dazu kommt microG Services Framework Proxy. Und zusätzlich ein Platzhalter für den Play-Store namens FakeStore.
Rechte vergeben
Die App microG taucht jetzt bei den Anwendungen auf. Ihr erster Menüpunkt ist ein Self-Check. In diesem Menü lassen sich viele der notwendigen Rechte vergeben und einsehen was noch fehlt. Überraschen und vom Menü nicht direkt abgedeckt ist die notwendige Signature-Spoofing-Permission, die der FakeStore braucht. Dafür geht man in die App-Liste unter Einstellungen, sucht nach FakeStore, drückt auf Permissions und dann auf die Signature-Permission.
Jetzt sollten bei microG alle Haken gesetzt sein.
Corona-Warn-App installieren und starten
In F-Droid gibt es die App Aurora Store. Mit ihr lassen sich Apps aus dem Play-Store installieren, eben auch die Corona-Warn-App.
ID-Sammlung prüfen
Ob nun die IDs gesammelt werden zeigt wieder die microG-App an, im untersten Menüpunkt.
Komplett unklar, ob das zuverlässig auf allen Smartphones funktioniert und ob auch die Meldung einer Infektion klappt bzw ankäme. So bekomme ich gerade eine Fehlermeldung von der Corona-App:
CAUSE: 3
Something went wrongError during communication with Google Interface (8)
Ich kann nur hoffen, dass sie trotzdem gut genug funktioniert um etwas zu bewirken.
Und natürlich ist das aufwändiger als ideal. Aber vielleicht gibt es bald einfachere Lösungen. Wenigstens gibt es jetzt überhaupt eine erste Möglichkeit, ohne Google-Dienste die Corona-Warn-App anzuwerfen.