AllfathersEye
Your Twitch chat takes over the creatures of Valheim. Names above their heads, points for watching, a shop that unlocks with your world, and Odin's raven announcing follows and subs. Several streamers can play together.Changelog
0.30.7
Nur die Beschreibung. Die README hat Bilder vom Pausenmenue und von der Shop-Tabelle, und wo sie "F1" sagte, sagt sie jetzt Escape -> Allfather's: Dort stehen die Einstellungen, auch der Code fuers Anmelden bei Twitch. Am Code selbst hat sich nichts geaendert.
0.30.6
Was andere Mods mitbringen, ist in der Shop-Auswahl erst einmal ausgeblendet. Ihre Items, Kreaturen und Effekte koennen alles sein - ein Test-Schwert, ein Effekt, der eine andere Mod abschaltet (AzuCraftyBoxes' "Preventing Pulling" stand zwischen den Effekten) -, und der Shop soll so etwas nicht aus Versehen anbieten. Ein Schalter "Andere Mods" neben den Tabs zeigt sie; dann tragen sie ein "Mod" in der Ecke, und der Tooltip sagt, woher sie kommen. Bei jedem Start ist er wieder aus. Steht schon eine Zeile aus einer anderen Mod im Shop, zeigt die Tabelle das am Namen.
Woran die Mod das erkennt: Valheim fuellt seine Listen (ObjectDB.m_items,
m_StatusEffects, ZNetScene.m_prefabs) nur aus seinen eigenen Daten und fuegt
nach dem Laden nichts mehr hinzu - im Code nachgesehen. Andere Mods haengen ihres
gleich danach an. Was beim Aufwachen schon in den Listen steht, ist also das
Spiel; das schreibt die Mod sich in genau diesem Moment auf. ae shop creatures
markiert Kreaturen aus anderen Mods mit "[another mod]".
0.30.5
Tooltips in der Shop-Auswahl und in der Tabelle. Mit der Maus auf einer Kachel
oder einem Namen steht da, was das Spiel darueber sagt: bei Items ihre
Beschreibung, bei Effekten der Text aus dem Inventar, bei Met mitsamt den Werten.
Wo das Spiel nichts sagt - Kreaturen, Wetter, Spezial -, steht da, was der Shop
damit tut. In der Tabelle zusaetzlich der Prefab-Name, unter dem die Zeile in der
.cfg und bei ae shop steht.
0.30.4
Der Topf des Zufalls-Items stand in einer Spalte innerhalb einer Zeile, und deren Schattierung war eine Zeile zu kurz: "+ Item" hing unten heraus. Jetzt ist er ein Block aus eigenen Zeilen.
Die Meldung unter einer Tabelle ("Abyssale Klinge ist im Topf.") brach um und lief mit der zweiten Zeile in "+ Hinzufuegen". Sie bricht nicht mehr um.
Zurueck und Weiter stehen jetzt unter der ersten und der letzten Spalte der Auswahl, die Seitenzahl mittig dazwischen.
0.30.3
Wetter und Spezial. Im Allfather's-Fenster gibt es statt drei Knoepfen einen, + Hinzufuegen, und darunter Tabs: Items, Kreaturen, Effekte, Wetter, Spezial. Nichts davon steht im Standard-Shop - jeder holt sich, was er will.
- Wetter: jedes, das die Biome der Welt haben, so viele Minuten wie unter Anzahl steht, nur auf dem Bildschirm des Streamers. Krypten und Boss-Arenen setzen ihr eigenes Wetter jede Frame selbst; das gekaufte stellt sich nicht dagegen und kommt danach zurueck, solange Zeit uebrig ist. Die Aschenlande fehlen - ihr Funkenregen setzt dort Holz in Brand, und ob auch an der Basis, zeigt der Code des Spiels nicht -, ebenso der Hohe Norden.
- Hochwerfen: senkrecht nach oben, Anzahl = Meter, ungefaehr. Ueber
ForceJump, wie der Sprung des Spiels selbst, also mit dem Fallschaden des Spiels und einem Federumhang, der weiter hilft. Wartet wie Odins Zorn, wenn ein Boss nah ist, das Leben knapp, im Wasser oder in der Luft, und kommt nie in eine Abstimmung - die prueft keine dieser Regeln. - Ausdauer auffuellen, Eitr auffuellen, Ausruestung reparieren - wer schon voll ist oder nichts Abgenutztes traegt, bekommt die Punkte zurueck.
- Zufalls-Item: eines aus einem Topf, den der Streamer in der Zeile selbst befuellt, in der eingestellten Anzahl.
0.30.2
Die Koenigin und Fader. Der Shop kannte nur fuenf Bosse - so viele, wie
Valheims Code als Schluessel auffuehrt; GlobalKeys endet bei Yagluth. Die
beiden neueren setzen ihren Schluessel selbst, vom Boss aus
(m_defeatSetGlobalKey), und von dort liest die Mod ihn jetzt, sobald eine Welt
geladen ist. Das Log sagt einmal, welche Schluessel sie gefunden hat. Im Fenster
lassen sich Zeilen hinter die Koenigin oder Fader legen, ae tier geht bis 7,
und das Overlay nennt beide beim Namen.
+ Effekt. Neben Items und Kreaturen jetzt jeder Effekt, den das Spiel kennt - die Waerme eines Mets, Ausgeruht, eine Waechterkraft oder etwas weniger Willkommenes.
0.30.1
Die Kreaturen-Auswahl zeigt nur noch, was in einer Welt herumlaeuft. Das Spiel
kennt mehr Kreaturen, als es gibt: Die "Aspekte" der Bosse und die Kreaturen des
Hohen Nordens sind Platzhalter fuer Inhalte, die noch nicht erschienen sind; die
"Beschworenen" kommen aus Staeben. Valheim kennzeichnet sie selbst, mit eigenen
Fraktionen (DeepNorth, PlayerSpawned, Boss, TrainingDummy), und danach wird jetzt
aussortiert - dazu alles, was gezaehmt anfaengt. ae shop creatures schreibt
jede Kreatur ins Log, mit dem Grund, warum sie fehlt.
Unter jedem Namen steht der Prefab. Das Spiel nennt vier verschiedene Draugr
"Draugr"; erst Draugr_Ranged sagt, welcher es ist.
Seiten statt "und 102 weitere", 30 Treffer pro Seite.
"Ab" waehlt man aus einer Leiste unter der Zeile, statt sich durch die Bosse zu klicken, und die Art eines Items ebenso. Die Spalte ist breiter: Knochenwanst passt.
Das Suchfeld der Auswahl aenderte die Treffer mitten in einem Zeichendurchgang von IMGUI. Wurde dabei die Liste laenger - ein geloeschter Buchstabe -, warf das Fenster einen Fehler und zeigte die Shop-Tabelle bis zum Neustart nur noch als Strich. Die Treffer folgen jetzt erst dem naechsten Durchgang.
0.30.0
Den Shop selbst zusammenstellen. Im Allfather's-Fenster (Escape -> Allfather's) ist jede Kategorie jetzt eine Tabelle, statt drei Einstellungen pro Aktion:
- Preis, Anzahl, Befehle, ab welchem Boss, an/aus - fuer jede Zeile, auch die eingebauten.
- - nimmt eine Zeile heraus, ein paar Sekunden lang mit Rueckgaengig.
- + Item bietet jedes Item an, das das Spiel kennt, auch aus anderen Mods: ins Inventar, Inventar fuellen wie die Steine, oder fallen lassen - alles davon aus dem Inventar vor die Fuesse, mit Valheims eigenem Fallenlassen. Fallen gelassen, nicht geloescht; wer nichts davon hat, bekommt die Punkte zurueck.
- + Kreatur bietet jede Kreatur an ausser Bossen und Wassertieren. Monster feindlich oder friedlich, Tiere friedlich.
- Standard setzt eine Kategorie zurueck. Es fragt zweimal, weil die eigenen Zeilen dabei verschwinden.
Neue Zeilen bekommen Befehle aus dem Namen im Spiel ("Harz" wird !harz, mit
Umlaut auch ohne); doppelte und solche der Mod selbst (!soul, !shop, der
Namens-Befehl) werden abgelehnt. Vote, Overlay, Chat-Liste und ae shop nehmen
eigene Zeilen ohne weiteres mit, und Mitspieler sehen sie im Feed mit dem Namen
aus ihrem eigenen Spiel.
Gespeichert wird pro Kategorie eine Zeile Actions in der .cfg, von Hand lesbar:
boar 75 3 !boar !eber; -troll; spawn.Troll 350 1 elder hostile !troll. Die
alten Eintraege wood.Price, wood.Amount, wood.Enabled und so weiter werden
uebernommen und verschwinden aus der Datei. Was eine spaetere Version an
eingebauten Zeilen dazubringt, erscheint trotzdem: Herausgenommenes wird als
herausgenommen gemerkt, nicht einfach weggelassen.
Die Schutzregeln gelten fuer alles Feindliche. Boss in der Naehe und wenig Leben hielten bisher nur Odins Zorn zurueck. Jetzt auch jede feindliche Kreatur, in welcher Kategorie sie auch steht - sonst waere ein Troll im Schabernack der Weg um die Sperre herum.
Die Grenze fuer gekaufte Kreaturen rechnet mit der eingestellten Anzahl, nicht mehr mit der eingebauten. Acht Woelfe, wo drei vorgesehen waren, liefen unter der Grenze durch.
Das Allfather's-Fenster, Version 5. Escape laesst erst ein Feld los, in dem gerade getippt wird, und schliesst das Fenster beim zweiten Mal - wie in jedem anderen Fenster. Die Suche findet jetzt auch die Werte von Text-Einstellungen, nicht nur ihre Namen. Gebraucht hat beides die Eye fuer ihre Shop-Tabellen; weil jede Allfather's-Mod das Fenster mitbringt, kommt es hier mit.
0.29.3
TriggerMode = FirstMessage gibt es nicht mehr. Es hiess: ein Versuch pro
Zuschauer und Sitzung. Geschuetzt hat es vor nichts - ein Zuschauer hat ohnehin
nur eine Kreatur gleichzeitig und steht nur einmal in der Schlange, eine zweite
Nachricht aenderte also nichts. Dafuer gab es Wege, ausgesperrt zu werden: Eine
Kreatur, die bei Tagesanbruch verschwand oder deren Name entfernt wurde, liess
ihren Zuschauer "schon gesehen" zurueck, bis das Spiel neu startete.
Uebrig sind AnyMessage - jede Nachricht zaehlt, hoechstens einmal pro
CooldownSeconds - und Command. Wer FirstMessage eingestellt hatte, und das
war der Standard, hat jetzt AnyMessage; spuerbar ist nur, dass niemand mehr
haengen bleibt.
Ein Knopf fuer die Log-Datei. Unten im Allfather's-Fenster, neben
Schliessen: Log-Datei zeigen oeffnet den Ordner mit LogOutput.log, die
Datei schon markiert. "Schick mir dein Log" ist das Erste, worum man bei einem
Problem bittet, und "wo ist das?" die erste Antwort - mit Gale liegt es nicht
einmal beim Spiel, sondern tief in AppData, pro Profil. Der Tooltip erinnert
daran, dass die Datei bei jedem Spielstart ersetzt wird.
ae debug meldet sich jetzt mit "Detailed log" statt "Verbose logging" - so
heisst der Schalter in Chest und Grasp inzwischen auch.
0.29.2
Der Stil kommt von uns, nicht aus der Konfiguration. Weg sind 6 - Feed /
UseGameFont, GameFontName und Shadow sowie 13 - Chronicle /
BoardFontScale. Der Feed schreibt immer in Valheims Schrift und immer mit
Umriss - ohne ihn verschwindet eine Zeile, sobald der Stream ueber Schnee
schwenkt. Die Tafel richtet ihre Schriftgroesse nach Scale allein; zwei Regler
fuer dieselbe Groesse waren einer zu viel. Position, Groesse und Farben bleiben
einstellbar, die haengen vom Layout des Streams ab.
Alle Allfather's-Mods nehmen Rahmen, Schrift und Farben jetzt aus einer gemeinsamen Quelle. Es gab drei Stellen, die nach Valheims Schriften suchten, jede mit "die erste, die passt" - und welche zuerst kommt, entscheidet Unity, nicht wir. Zwei Fenster derselben Familie konnten so in zwei Schriften stehen. Jetzt gilt eine Regel: Averia fuer den Text, Norse fuer Titel, und Valheims gemessene Farben - #FFB75B fuer Fensternamen, #FFCE00 fuer Ueberschriften, Weiss fuer alles, was man liest.
Das Allfather's-Fenster hatte eigene, leicht andere Farben und gab sie ohne Farbraum-Korrektur aus; das Gold kam deshalb orange an. Es sieht jetzt aus wie die Chronik-Tafel und die Abstimmung.
ae fonts sagt jetzt, welche Schriften gewaehlt wurden.
0.29.1
Die Abstimmung hat eine Vorschau. 14 - Vote / Preview zeigt rechts eine
Beispielrunde mit drei Dingen, ein paar Stimmen und laufender Uhr - so gross,
wie eine echte Runde das Panel macht. Damit sieht man, wo es sitzt, waehrend man
Scale und Height einstellt. Niemand kann darin abstimmen, nichts wird
ausgeloest, und eine echte Runde hat immer Vorrang. Wie die Feed-Vorschau geht
sie beim Spielstart und beim Betreten einer Welt von selbst aus.
Der Look ist nicht mehr einstellbar. GameBackground, Saturation,
Darkness und BackgroundSprite unter 13 - Chronicle sind weg. Allfather's
kommt mit dem Holzrahmen, auf den die Werte einmal gemessen wurden; vier Regler
dafuer waren vier Arten, ihn schlechter aussehen zu lassen. Wer sie verstellt
hatte, sieht jetzt wieder den Standard. ae records sprites und ae records panel bleiben als Diagnose.
Im Allfather's-Fenster werden die Unterlaengen nicht mehr abgeschnitten. Valheims Schrift reicht tiefer unter die Zeile, als Unity einplant, und jedes g, p und y verlor seinen Schwanz - am deutlichsten in der letzten Zeile eines Absatzes.
Das Fenster ist ausserdem schmaler geworden, damit an den Bildschirmraendern Platz bleibt: dort sitzen Abstimmung und Feed, und deren Vorschau soll man sehen, waehrend man im Fenster an ihnen dreht.
0.29.0
Das Allfather's-Fenster ist fertig. Das Allfather's-Fenster im ESC-Menue kann jetzt alles, wofuer man bisher F1 brauchte. Jede Einstellung jeder installierten Allfather's-Mod laesst sich dort aendern: Schalter, Auswahlknoepfe, Schieber fuer alles mit einem Wertebereich, Zahlen- und Textfelder, und fuer Tastenkuerzel ein Knopf, der die naechste gedrueckte Taste uebernimmt. Wo ein Wert vom Standard abweicht, steht ein Standard-Knopf daneben. Die Beschreibung einer Einstellung erscheint, wenn die Maus auf ihrem Namen ruht.
Getippte Werte gelten erst bei Enter oder wenn man das Feld verlaesst - sonst wuerde ein Kanalname Buchstabe fuer Buchstabe gespeichert. Escape im Feld verwirft das Getippte, Escape ausserhalb schliesst das Fenster. Ein Komma als Dezimalzeichen wird verstanden.
Oben ein Suchfeld; die Reiter zeigen dabei, wie viele Treffer jede Mod hat. Erweiterte Einstellungen sind hinter einem Schalter, die Suche findet sie trotzdem.
Das Fenster traegt jetzt Valheims Holzrahmen und Schriften, denselben Rahmen wie die Chronik-Tafel. Der Rahmen war bisher in Eye und Grasp je einmal vorhanden und schon auseinandergelaufen; er liegt jetzt einmal im gemeinsamen Code. Die Regler unter 13 - Chronicle wirken wie zuvor auf die Tafel.
Chest und Grasp bringen das Fenster ab jetzt selbst mit. Wer mehrere Allfather's-Mods hat, sieht trotzdem nur einen Eintrag: gezeichnet wird von der Mod mit der neuesten Fassung des Fensters, die anderen halten still.
0.28.1
Im Allfather's-Fenster steht der Shop jetzt als Tabelle. Statt iron.Amount,
iron.Enabled und iron.Price untereinander, zwischen copper und silver
einsortiert, hat jede Ware eine Zeile mit den Spalten Enabled, Price und
Amount - in der Reihenfolge des Katalogs, nicht des Alphabets. Was eine Spalte
nicht hat, etwa die Heilung keine Menge, bleibt leer. Jede zweite Zeile ist leicht
hinterlegt, damit das Auge vom Namen bis zum Preis auf der Zeile bleibt.
Das Fenster weiss dabei nichts vom Shop: es fasst alle Einstellungen zusammen, die denselben Namen vor dem Punkt tragen. Der Shop ist nur das Einzige, was seine Einstellungen heute so benennt.
0.28.0
Ein eigener Eintrag im ESC-Menue. Zwischen Einstellungen und Ausloggen steht jetzt Allfather's. Er oeffnet ein Fenster mit einem Reiter pro installierter Allfather's-Mod - Eye, Chest, Grasp, je nachdem, was da ist - und darin jede Einstellung dieser Mod mit ihrem aktuellen Wert.
Das ist der erste Schritt zu einem Fenster, das F1 fuer unsere Mods ersetzt. Noch zeigt es nur an; bearbeiten kommt als Naechstes. Was es schon beweist, ist der Teil, der haette scheitern koennen: der Knopf sitzt im Menue wie einer von Valheims eigenen, das Fenster liegt darueber, und es liest alle drei Mods von einer Stelle aus, ohne dass die Mods voneinander wissen.
Escape schliesst das Fenster und fuehrt zurueck ins Menue, nicht zurueck ins Spiel. Das Spiel bleibt pausiert, solange es offen ist, und der Knopf ist auch mit dem Controller erreichbar.
0.27.4
Gekaufte Gegner tragen jetzt den Namen dessen, der sie geschickt hat. Steht
ein Troll vor deiner Tuer, steht ueber ihm "Troll (von Mitzikatz)" - und du
weisst, bei wem du dich bedanken kannst. Traegt die Kreatur dagegen den Namen
eines Zuschauers, bleibt dieser stehen: eine Seele im Koerper schlaegt eine
Quittung. Einen Beinamen bekommt eine gekaufte Kreatur nicht; ein Titel gehoert
dem Koerper, in dem jemand lebt, nicht dem Werkzeug, mit dem gezielt wurde.
Abschaltbar unter 5 - Display / ShowShopSender.
Dafuer merkt sich eine gekaufte Kreatur jetzt auch, wie der Kaeufer sich selbst schreibt - ein Login ist klein geschrieben und oft nicht der Name, den der Chat kennt, und genau darum geht es bei einem Schild ueber dem Kopf.
0.27.3
Das Kopfgeld sagt jetzt, wenn es nicht zahlt. Vorher brach es stumm ab, und der
haeufigste Grund ist ausgerechnet der, auf den man beim Testen zuerst stoesst:
Der Kanalinhaber verdient nichts, solange BroadcasterEarns aus ist - wer sich
mit dem eigenen Konto etwas kauft und sich damit umbringen laesst, bekommt also
nie etwas. Das steht jetzt als Warnung im Log und als Hinweis unter ae bounty.
Jeder andere Grund - falscher Kanal, laufende Sperre, Betrag auf null - steht
unter ae debug on im Log. Und wenn eine Kreatur einen Namen traegt, den dieser
Client nie selbst vergeben hat, sagt die Mod das ebenfalls: nach einem Neustart
gibt es zu so einem Namen kein Konto mehr, das man bezahlen koennte.
0.27.2
ae bounty test <login> zahlt das Kopfgeld aus, ohne dass jemand dafuer sterben
muss - Sperre, Konto und Chatzeile lassen sich damit pruefen. Wer dich erledigt
hat, rechnet es nicht aus; dafuer braucht es einen echten Tod.
Und ae records demo fuellt die erfundenen Zuschauer jetzt so, dass die
Beinamen ihre ganze Bandbreite zeigen - auch Kurzatem und Lieblingsbeute, die
vorher in der Vorschau nie auftauchten.
0.27.1
Die Zeile unter dem Titel des Abstimmungspanels flackerte zwischen ihren drei Schreibweisen. Sie hat mehrere Varianten, und die werden bei jedem Abruf neu gewuerfelt - richtig fuer einen Satz, der einmal im Chat steht, falsch fuer einen, den ein Panel sechzigmal pro Sekunde neu zeichnet. Die Runde legt ihre Zeile jetzt beim Oeffnen fest: zwischen zwei Runden wechselt sie weiterhin, innerhalb einer steht sie still.
Dazu ein Test, der jede Wortwahl, die ein Panel beim Zeichnen abruft, auf genau eine Variante festnagelt.
Und die Abstimmung sagt jetzt, was sie tut. Eine Runde, an der niemand
teilgenommen hat, verschwand vorher wortlos - was von aussen genauso aussieht wie
eine Runde, deren Stimmen nicht angekommen sind. Jetzt steht es im Panel. ae vote zeigt waehrend einer laufenden Runde die Buchstaben, die Stimmen und die
Restzeit, ae debug on protokolliert jede gelesene Stimme, und Anfang wie Ende
einer Runde stehen im Log.
0.27.0
Kopfgeld auf den Streamer. Ab jetzt steht immer eines auf deinem Kopf. Wer dich zu Boden bringt, kassiert - der Zuschauer, dessen Name die Kreatur traegt, oder wer sie im Shop gekauft hat. Traegt sie einen Namen, gewinnt der Name: der Kaeufer hat sein Geld schon in Spass umgesetzt, und die Seele im Koerper hat die Tat begangen. Stirbst du an Kaelte, Sturz oder an einem wilden Vieh, das niemandem gehoert, zahlt niemand.
Hundert Punkte, einstellbar unter 7 - Points, mit fuenf Minuten Sperre pro
Zuschauer - sonst wird ein gekaufter Troll auf deinem Grabstein zum Bankautomat.
ae bounty zeigt den Stand, ae bounty reset <login> laesst jemanden sofort
wieder kassieren.
Der Chat stimmt ab. Alle halbe Stunde erscheint rechts ein Panel mit drei Dingen, und alle haben dreissig Sekunden, um A, B oder C zu schreiben. Mal gemischt, mal nur Segen, mal nur Zorn, mal nur Schabernack. Abstimmen kostet nichts - das ist der Sinn: es ist der einzige Moment am Abend, an dem jemand, der gerade erst dazugekommen ist, genauso viel zaehlt wie ein Stammgast.
Weil nichts bezahlt wird, faellt die uebliche Bremse weg. Statt des Preises entscheidet eine Obergrenze, was verschenkt werden darf - standardmaessig 250 Punkte. Was mehr kostet, bleibt im Shop. Ein Ueberfall steht nie zur Wahl, und was hinter einem noch nicht erlegten Boss liegt, ebenso wenig. Waehrend eines Bosskampfes und solange du tot bist, wartet die Runde.
Wer gerade persoenlich gefragt wurde, auf wen sein Ueberfall gehen soll,
antwortet weiterhin dieser Frage - beide nutzen dieselben Buchstaben, und wer
direkt angesprochen wurde, meinte das. Alles unter 14 - Vote, ae vote oeffnet
eine Runde sofort.
Beinamen. Zuschauer verdienen sich einen zweiten Namen und tragen ihn ueber dem Kopf, auf der Tafel und im Chat: Mitzikatz Trollgeboren, Kevin Knochenbrecher, jemand anders Kurzatem. Kein Zufallsgenerator, sondern ein Rang - verdient durch Durchhalten, Jagen, Wiederkommen, die Gestalt der laengsten Runde, und durch die eine oder andere Peinlichkeit. Wer drei verdient hat, traegt den seltensten.
Angehaengt statt vorangestellt, so wie ein Nordmann zu einem kam - Harald
Blauzahn, Erik Blutaxt. Das klingt nicht nur richtiger, es spart auch die Frage,
ob es der oder die Trollgeborene heisst. !titel verraet einem Zuschauer,
was er hat. Abschaltbar unter 5 - Display.
Die Chronik merkt sich zwei Dinge mehr. Fuer die Beinamen braucht es die kuerzeste Runde und wie oft ein Spieler derjenige war, der sie beendet hat. Alte Dateien lesen sich weiterhin, die Werte fangen einfach bei null an.
Unter der Haube: Valheims Fensterbild liegt nicht mehr in der Tafel, sondern an einer Stelle, die sich beide Panels teilen. Das war die Datei, die vier Anlaeufe gebraucht hat, bis die Farbe stimmte und der weisse Strich am Rand weg war - die will man kein zweites Mal schreiben.
0.26.28
Das Changelog im Paket wird gekuerzt, wenn es Thunderstores Grenze reisst. Hundert Kilobyte sind erlaubt, die Datei war bei hundertachtzehn - und gesagt bekommt man das erst beim Hochladen, also nachdem die Versionsnummer schon verbraucht ist. Das Packskript nimmt jetzt so viele ganze Eintraege mit, wie hineinpassen, und haengt eine Zeile an, wo der Rest steht. Halbe Eintraege gibt es nicht: eine abgeschnittene Erklaerung liest sich wie ein Fehler, ein weggelassener Abschnitt wie eine Auslassung.
Die vollstaendige Geschichte bleibt im Quellcode, und bei Thunderstore behaelt jede fruehere Version ihr eigenes Changelog auf ihrer eigenen Seite - verloren geht nichts.
Dazu prueft das Packen jede Markdown-Datei gegen dieselbe Grenze, bevor das Archiv entsteht.
0.26.26
Die Twitch-Erweiterung steht als "noch in Entwicklung" da. Sie ist gebaut und sie laeuft, aber Twitch hat sie nicht freigegeben - beschrieben war sie bisher so, als koennte man sie heute installieren. Jetzt steht der Hinweis oben im Abschnitt, nicht im Kleingedruckten.
Und die Sprungmarken in der Uebersicht sind wieder raus: In Gale werden sie als Links dargestellt, springen aber nirgendwohin. Ein Link, der aussieht wie einer und nichts tut, ist schlechter als gar keiner.
0.26.25
Ganz oben steht jetzt, was drin ist. Sieben Zeilen, jede eine, und die meisten davon springen an die Stelle, an der es ausfuehrlich steht. Damit ist der lange Text kein Pflichtprogramm mehr, sondern ein Nachschlagewerk - wer nur wissen will, ob sich das Installieren lohnt, ist nach zehn Sekunden fertig.
Und die Kurzbeschreibung auf Thunderstore ist auf dem Stand der Mod. Sie kannte weder Punkte noch Shop noch Hugin noch die Tafel, obwohl sie das Erste ist, was in der Liste jemand liest.
Der Laden heisst auch auf Deutsch Shop, im Chat wie in der Beschreibung.
So sagt es der Befehl (!shop), so sagen es die Zuschauer.
0.26.24
Die Beschreibung stimmt wieder. Sie behauptete an einer Stelle, Follows seien noch nicht eingebaut - und beschrieb sie zwei Absaetze darueber. Sie nannte eine Spalte der Tafel, die es nicht mehr gibt, einen Stein als Preis statt zehn, und "die Mod belegt keine Tasten", obwohl F7 seit der Tafel belegt ist.
Dazu fuenf Bilder: eine benannte Kreatur, Hugin beim Ausrufen und nach dem Druck auf E, die Tafel neben ihrem Stein, und das Meldungsband. Sie liegen auf allfatherseye.sohneg.ch, weil Thunderstore aus dem Paket nur das Symbol ausliefert - ein Bild daneben waere ein leerer Rahmen.
0.26.23
Die Tafel nannte eine Zuschauerin auf Englisch ein "Wildschwein". Die Aufzeichnungen haben den fertigen Namen gespeichert, uebersetzt in dem Moment, in dem das Ereignis geschah - und damit die Sprache jenes Abends fuer immer eingefroren. Ueber das Netzwerk verschicken wir aus genau diesem Grund Tokens statt Text; in der Ruhmeshalle hatte ich es vergessen. Sie speichert jetzt ebenfalls das Token und uebersetzt beim Lesen. Alte Eintraege bleiben stehen, wie sie sind.
Die Vorschau (ae records demo) benutzt ebenfalls Tokens, jedes einzelne gegen
resources.assets geprueft statt geraten.
0.26.22
Die Meldung verlaesst seine Liste in dem Moment, in dem er sie ausruft. Alle bisherigen Regeln dafuer waren Vermutungen ueber fremde Zustaende - ist er gelandet, wurde der Dialog gezeigt, ist er wieder weg. Der Zuruf selbst ist keine Vermutung: der Satz hat seinen Schnabel verlassen, wir fangen ihn ohnehin ab, und genau dort wird jetzt abgeraeumt.
Aus der Liste nehmen heisst nicht, sie ihm wegzunehmen: was E zeigt, ist
m_currentText, und das haelt er schon. Er kann weiter angesprochen werden, er
wird nur nicht mehr aufs Neue geholt.
0.26.21
Er kam einmal und blieb dann weg. Bisher nahm ich die Meldung erst aus seiner Liste, wenn jemand E gedrueckt hatte - sonst nach drei Minuten. Das Spiel prueft aber alle paar Sekunden, ob etwas wartet, und holte ihn fuer dieselbe Meldung immer wieder zurueck. Drei Minuten lang, fuer einen Follow. Jetzt gilt: er ist da gewesen und wieder weg, das ist eine Zustellung, und die genuegt.
ae raven sagt, was er haelt - wie viele Texte in seiner Liste stehen, wie
viele davon unsere sind, was er ausrufen soll und ob er gerade da ist. Jedes Mal,
wenn ich das geraten statt nachgesehen habe, hat es eine Version gekostet.
0.26.20
Der Rabe, der nicht mehr wegging. Valheim nimmt einen wartenden Text aus
seiner Liste, sobald der Spieler das zugehoerige Tutorial gesehen hat - und
entscheidet das am Schluessel des Textes. Unserer ist absichtlich leer, denn ein
Schluessel ist zugleich das, was Talk in den Spielstand schreibt, und der Name
eines Zuschauers gehoert nicht in Odins Buch. Der Preis war, dass das Spiel
unsere Texte nie vergisst: jede Meldung des Abends stand noch in der Liste und
holte ihn weiter zurueck.
Wir nehmen sie jetzt selbst heraus - wenn sie gelesen wurde, wenn sie veraltet ist, und wenn eine neuere sie ersetzt. Kein Eintrag im Spielstand, keine Schlange von Meldungen, die sich ueber den Abend aufbaut.
0.26.19
Hugin ruft beim Landen, was er bringt - jetzt wirklich. Ich habe es dreimal
ueber seine Spruchlisten versucht, und das kann nicht funktionieren.
Raven.Spawn setzt m_randomTextTimer auf 99999: er ruft im allerersten Frame,
in dem er sichtbar ist, bevor irgendetwas, das auf sein Landen wartet, an die
Reihe kommt - und Unity sagt nicht zu, wessen Update zuerst laeuft. Dazu wird er
beim Wegfliegen geloescht und aus dem Original neu gebaut, und die zweite Liste
ist sein Geplauder, das ihn zum Endlosband machte, als ich sie ueberschrieb.
Alle drei Probleme haben dieselbe Wurzel: die Listen sind die Eingabe einer
Auswahl, die uns nicht gehoert. Der Satz selbst geht durch genau eine Methode,
Raven.Say. Dort steht jetzt ein Patch. Der Rabe selbst bleibt unangetastet -
Listen, Timer, alles seins - und verhaelt sich darum wieder wie im Spiel.
Ein leerer Topic ist der Zuruf, Talk gibt immer einen mit; der Dialog hinter E
bleibt also, wie er war. Die Methode ist privat und wird ueber ihren Namen
gepatcht, also prueft verify-api.ps1 sie jetzt mit.
0.26.18
ae follows reset <login> laesst einen Zuschauer wieder als neuen Follower
zaehlen. Seit "ein Follow zaehlt einmal" gibt es sonst keinen Weg, einen Follow
ein zweites Mal zu sehen - ausser einen zweiten Menschen zu finden, der den Knopf
drueckt. Zum Pruefen der Kette gehoert aber, sie zweimal ausloesen zu koennen.
Nachgelesen, warum der Zuruf beim Landen so hartnaeckig der falsche war:
Raven.Spawn setzt m_randomTextTimer auf 99999. Der Rabe ruft also im
allerersten Frame, in dem er sichtbar ist - bevor irgendetwas, das auf sein
Landen wartet, an die Reihe kommt. Seine Liste wird seit 0.26.17 jeden Frame
nachgezogen statt beim Landen, und der Timer dabei zurueckgesetzt; das ist die
einzige Reihenfolge, bei der er nicht gewinnen kann.
0.26.17
Hugin hoerte nicht mehr auf, und das war mein Fehler von gestern Abend. Ich hatte in 0.26.16 beide seiner Spruchlisten ueberschrieben - auch die, aus der er im Leerlauf plaudert. Damit sagte er "Neuer Follower" bis zum Ende der Sitzung, zu niemandem. Die Liste gehoert ihm und bleibt seine.
Und der Zuruf beim Landen stimmt jetzt unabhaengig davon, wann er kommt. Der Rabe ist eine Prefab-Instanz: fliegt er weg, wird er geloescht, und der naechste wird aus dem Original neu gebaut. Einmal ersetzen half also nur dem Exemplar, das gerade dastand - und wenn er laenger brauchte als unsere dreissig Sekunden Geduld, kam er an, nachdem wir ihn aufgegeben hatten, mit den Originalzeilen. Seine Neuigkeiten-Liste wird jetzt jeden Frame nachgezogen, solange die Nachricht frisch ist. Nach dem Ausrichten gehoert sie wieder ihm, spaetestens nach drei Minuten.
0.26.16
Hugin ruft beim Landen wieder aus, was er bringt. Er hat zwei Spruchlisten - eine fuer Neuigkeiten, eine fuers Plaudern - und ich hatte nur die erste ueberschrieben. Stand er schon da und war angesprochen worden, nahm er die zweite: "Sei gegruesst, Krieger!" ueber einer Meldung ueber einen neuen Follower. Jetzt sagen beide Listen dasselbe, naemlich das, was er traegt. Dazu faengt sein Zuruf-Timer neu an, damit kein halb abgelaufener Takt noch den alten Spruch hinausrufen kann.
0.26.15
Ein Follow zaehlt einmal, fuer immer. Twitch laesst jeden beliebig oft entfolgen und neu folgen, und von aussen sieht jedes Mal aus wie ein neuer Follower. Ohne Gegenwehr sind das 150 Punkte pro Knopfdruck, ohne jede Sperre. Das Konto merkt sich jetzt den ersten - und zwar in der Datei, denn ein Gedaechtnis, das beim Neustart vergisst, macht die Druckerpresse nur langsamer.
Hugin ruft wieder seine eigene Neuigkeit aus. Valheim nimmt die
Neuigkeiten-Liste nur, solange m_hasTalked falsch ist, und danach die
gewoehnlichen Sprueche. Talk setzt das einmal und nimmt es nie zurueck - also
rief er ab dem ersten Mal, das jemand E gedrueckt hatte, bei jeder weiteren
Meldung "Sei gegruesst, Krieger!", waehrend die Nachricht selbst hinter E sass,
wo niemand einen Grund hatte nachzusehen. Bei neuer Nachricht gilt er jetzt
wieder als ungehoert.
Mit ae debug on steht jeder gefundene Follow samt Zeitstempel im Log, mit
Vermerk, ob er gezaehlt wurde.
0.26.14
Follows haben nie funktioniert, und zwar wegen einer Zahl. Twitch erlaubt
tausend Chatter pro Seite und hundert Follower. Ich habe dieselbe Konstante fuer
beides benutzt, und damit hat Twitch jeden einzelnen Follower-Abruf mit "HTTP
400: der Parameter first war fehlerhaft" abgelehnt - lautlos, weil auf diesem Weg
nichts spricht. Gefunden hat es ae follows aus der Version davor, im ersten
Versuch.
Ein Test haelt die Seitengroesse jetzt an Twitchs dokumentierte Grenze.
0.26.13
ae follows zeigt, was die Followersuche tut. Ein Follow ist das einzige
Ereignis, das abgeholt statt zugestellt wird - und jeder Weg, auf dem das
schiefgehen kann, war bisher stumm: fuenf Minuten Pause und nichts auf dem
Schirm. Der Befehl nennt Berechtigung, Kanal-ID, letzten Abruf, den Zeitpunkt, ab
dem gezaehlt wird, und den letzten Fehler - und stoesst gleich einen neuen Abruf
an. Die stummen Faelle schreiben jetzt ausserdem einmal ins Log.
Punkte fuer Follows haengen nicht mehr an Hugin. Der Abruf lief nur, wenn der Rabe eingeschaltet war und auf Follows reagieren sollte. Wer Hugin abschaltete, schaltete damit unsichtbar auch die Punkte fuer Follows ab. Jetzt genuegt jeder der beiden Gruende fuer sich.
0.26.12
Die Tafel kostet zehn Steine. Einer war der Preis zum Ausprobieren, nicht der Preis fuer eine Steintafel.
Wer den Preis aendert, muss dafuer nicht mehr neu starten. Er stand bisher im Bauplan, und der wurde genau einmal gebaut - eine Einstellung, die scheinbar nichts tut, ist schlimmer als gar keine.
0.26.11
Die Tafel schloss sich im selben Atemzug, in dem sie aufging. Man kann den Stein von weiter weg ansprechen, als die Tafel bereit war offenzubleiben. Der Abstand geht jetzt ab Werk auf 4,5 Meter - und faellt nie unter die Reichweite, mit der man sie geoeffnet hat, egal was in der Konfiguration steht. Die Reichweite ist dabei die des Spiels, nicht meine Schaetzung davon.
0.26.10
Ein Klick daneben schliesst die Tafel, ohne dass die Axt fliegt. Der Fehler war nicht der Klick, sondern der Zeitpunkt: die Tafel gab die Eingabe beim Druecken frei, und der noch gedrueckte Knopf landete einen Frame spaeter im Spiel. Jetzt schliesst das Loslassen, beide Haelften des Klicks werden geschluckt, und die Sperre laeuft noch eine Viertelsekunde weiter - lang genug, dass die Freigabe auf nichts mehr trifft. Das gilt auch fuer F7 und Esc.
0.26.9
Das Holz ist jetzt grau. Nebeneinander auf einem Bildschirm gemessen liegt
die nackte Bohle bei einem Rot-zu-Blau von 2,2, Valheims Herstellungsfenster bei
1,1 - also praktisch neutral. Eine Faerbung schliesst diese Luecke nie: sie
multipliziert, und ein multipliziertes Orange bleibt Orange. Also werden die
Pixel selbst zu ihrer eigenen Helligkeit hingezogen, in einer Kopie des Sprites,
die uns gehoert. Die Maserung bleibt - das ist Helligkeit, keine Farbe - und nur
das Orange geht. 13 - Chronicle / Saturation, ab Werk 0,25.
Die eigene Kopie hat einen zweiten Vorteil: sie enthaelt nur dieses eine Bild und klemmt an ihren Raendern ab. Die Filterung kann damit gar nicht mehr in das greifen, was im Atlas daneben liegt - die alte Quelle des weissen Haarstrichs um die Tafel.
Die Ueberschrift sieht aus wie eine Fensterueberschrift: Grossbuchstaben, #FFB75B und in Norse, der Schrift, in der das Spiel HERSTELLUNG und INVENTAR schreibt. Das ist eine andere Schrift als die des Inhalts, und dass es zwei sind, ist der halbe Eindruck.
0.26.8
Die Tafel war unsichtbar, und zwar durch mich. Beim Entfernen der drei
ueberfluessigen Regler ist Scale mit weggefallen - deklariert, aber nie
gebunden. Das uebersetzt sauber und wirft beim ersten Lesen eine
NullReferenceException, und Draw() liest es als Erstes. Sechzigmal pro Sekunde,
ohne dass am Bildschirm etwas davon zu sehen war ausser: kein Panel.
Zwei Lehren daraus eingebaut. Das Packen prueft jetzt, dass jede deklarierte Einstellung auch gebunden wird - der Fehler kann so nicht noch einmal ausgeliefert werden. Und die Tafel faengt einen Fehler beim Zeichnen ab, meldet ihn einmal und bleibt geschlossen, statt das Log zu fluten und dabei stumm zu verschwinden.
0.26.7
Nachgeschaut statt geraten. Ich habe das Buendel geoeffnet, in dem Valheims
Inventarfenster liegt, und jede Image-Komponente samt Farbe ausgelesen. Das
Muster zieht sich durch das ganze Fenster: bkg ist #000000 mit 48 Prozent
Deckung, darken 31, border #0F0F0F mit 48 - und jede einzelne dieser
Schichten ist ein neunfach geschnittenes Bild.
Das Spiel schichtet also auch. Der Unterschied war die Form: seine dunklen Schichten haben dieselbe Rundung und dieselbe Innenkante wie der Rahmen, weil es dasselbe Bild ist. Meine war ein Rechteck, und die vier Ecken, die dabei ueberstanden, sahen aus wie ein zweites Panel auf dem ersten.
Jetzt wird zum Abdunkeln dasselbe Sprite ein zweites Mal gezeichnet, schwarz.
Damit stimmen Ecken und Kanten von selbst. Color, FrameShade und
CornerRadius sind wieder weg - das waren drei Regler fuer ein Problem, das es
so nicht gab. Geblieben ist Darkness, ab Werk 0,55, also ungefaehr dort, wo das
Spiel seine eigenen Schichten haelt.
Und das Gelb war nie das Gelb. #FFCE00 gesetzt, #FF9D00 auf dem Schirm - Gruen bei 157 statt 206, waehrend Weiss weiss und Schwarz schwarz blieb. Dass genau diese beiden feststehen, ist die Handschrift einer Gammakurve: Valheim rechnet in linearen Farben, und IMGUI reicht die Farbe eines Labels unveraendert durch. Wird jetzt zurueckgerechnet, und nur dort - bei einer Bildfaerbung waere dieselbe Korrektur falsch.
0.26.6
Die zwei Panels waren eins mit eckigen Ecken. Die Farbflaeche aus 0.26.5 lag
als schlichtes Rechteck auf dem Holz und stand an den vier Ecken ueber die runde
Kante des Fensters hinaus - vier kleine Zipfel, die zusammen wie ein zweites,
schaerferes Panel darauf aussehen. Unity kann eine gezeichnete Flaeche selbst
abrunden, und das ist billiger und genauer als jede Maske. Der Radius liegt unter
13 - Chronicle / CornerRadius, ab Werk 12 Pixel bei 1080p, und waechst mit
der Aufloesung mit - wie Valheims Oberflaeche auch.
Die Fusszeile hat jetzt zwei Zeilen. Sie traegt die Zaehlung und jeden Weg aus der Tafel heraus, und auf Deutsch lief sie rechts hinaus - wobei das, was hinauslief, die Anleitung zum Schliessen war.
0.26.5
Die Farbe wird jetzt gesagt statt hergeleitet. Drei Anlaeufe lang habe ich
versucht, aus dem Holzbild die Fensterfarbe zu rechnen, und das kann nicht
aufgehen: die Bohle ist orange, Valheims Fenster sind grau-braun, und
Multiplizieren macht nur dunkler, niemals grauer. Die Farbe steht jetzt in der
Konfiguration - 13 - Chronicle / Color, ab Werk #2F2822 - und wird ueber
das Holz gelegt. Innen fast deckend, damit Text darauf lesbar ist, ueber dem
geschnitzten Rahmen duenn, damit der die hellere Kante bleibt (Darkness und
FrameShade).
Schrift wie im Spiel. Weiss statt Creme, Ueberschriften in #FFCE00 - beides
aus dem Spiel abgemessen, nicht geschaetzt - und um jedes Wort der schwarze Rand,
den Valheim um jede Zeile seiner Oberflaeche zieht. Der ist keine Zierde: die
Tafel wird ueber einen Stream gelesen, zweimal verkleinert und komprimiert, und
ohne Rand loesen sich duenne helle Buchstaben im Holz dahinter auf.
Und sie steht nicht mehr schraeg. Averia liegt als normal, fett und kursiv im Speicher, und die Suche nahm, was zuerst kam - was den ganzen Text kursiv setzte und damit nach einer anderen Schrift aussah statt nach derselben. Aufrecht geht jetzt vor.
Ein Klick daneben schliesst die Tafel. Solange sie den Mauszeiger haelt, kann die Figur nicht laufen - weggehen war also keine Moeglichkeit mehr, und uebrig blieben nur F7 und Esc. Der Abstand schliesst weiterhin, wenn die Tafel den Zeiger gar nicht erst nimmt.
0.26.4
Die Farbe war falsch, weil die Tafel im falschen Teil des Fensters gesucht hat. Die Suche lief nur durch die vier Felder, die das Spiel beim Namen nennt - Herstellung, Inventar, Truhe, Beschreibung. Der geschnitzte Rahmen, den jeder meint, wenn er "wie das Inventar" sagt, ist deren Elternteil und war damit nie ein Kandidat. Gefunden wurde stattdessen eine kleine Innenflaeche, und die wird im Spiel reinweiss gezeichnet, weil der Ton vom Fenster dahinter kommt. Jetzt wird das ganze Inventarfenster durchsucht, und bei zwei Holzpaneelen gewinnt das groessere.
Falls es immer noch nicht stimmt, muss ich nicht mehr raten: ae records panel
listet jedes Bild mit Groesse, Rahmenbreite, Faerbung, Pfad - und der
tatsaechlichen Durchschnittsfarbe seiner Pixel, vom Grafikspeicher
zurueckgelesen, weil ein Atlas nicht anders auslesbar ist. Der Name daraus
gehoert dann in 13 - Chronicle / BackgroundSprite.
Die weissen Striche am Rand waren Schnee. Zwei aneinandergrenzende Stuecke des Rahmens trafen sich bei x = 431,6, und jedes wurde fuer sich auf ganze Pixel gerundet - der Spalt dazwischen liess die Landschaft durch. Alles wird jetzt auf ganze Pixel gelegt, und die Bildkoordinaten liegen ein halbes Texel innerhalb der Kante, damit die weiche Filterung nicht ins Nachbarbild im Atlas greift.
Bei jeder Liste steht jetzt, was sie misst. "Jaeger" ueber einer Spalte Zahlen ist ein Raetsel.
Und bei den Ueberlebenskuenstlern steht die Gestalt dabei - die, in der die Seele gestorben ist. Wer gewandert ist, war mehrere; erinnert wird die letzte.
Stammgaeste ist weg. Die Zeit wird weiter mitgeschrieben, sie steht nur nicht mehr auf der Tafel.
0.26.3
Die Tafel leuchtete orange, Valheims Fenster sind fast schwarzbraun. Ich
hatte die Einfaerbung der Image-Komponente uebernommen und angenommen, damit sei
die Farbe erklaert. Ist sie nicht: Die Abdunklung steckt im Spiel in einer
eigenen Schicht ueber dem Holz, nicht im Holz selbst. Die Tafel legt jetzt ihre
eigene Schicht darueber - innerhalb des geschnitzten Rahmens, damit der hell
bleibt. Einstellbar unter 13 - Chronicle / Darkness, 0 laesst das nackte
Holz.
Damit ist auch das Lesen behoben. Heller Text auf hellem Holz war der Grund, warum die Ueberschriften kaum zu erkennen waren.
Die Schriftgroesse richtet sich jetzt nach der Tafel statt nach dem Bildschirm. Das war doppelt falsch: die Tafel hat eine Hoechstbreite, also wuchs auf einem hohen Bildschirm der Text weiter, waehrend die Tafel darunter stehenblieb - und die Proportionen verschoben sich mit jeder Aufloesung. An die Tafel gebunden sieht sie ueberall gleich aus.
Und sie ist kleiner geworden, von hoechstens 820 auf 700 Punkte Breite. Wem
das nicht passt: Scale unter 13 - Chronicle, von der Haelfte bis zum
Anderthalbfachen.
0.26.2
Die Tafel sah hochskaliert aus, weil sie es war. Ich hatte das Bild als Ganzes gestreckt - ein 240 Pixel breites Fenster auf achthundert gezogen, samt geschnitztem Rand. In 0.26.1 habe ich nur die Faerbung nachgebessert und den Rahmen dabei uebersehen.
Jetzt wird gezeichnet, wie Unity ein geschnittenes Sprite zeichnet: die vier Ecken in ihrer eigenen Groesse, die vier Kanten nur entlang einer Achse gestreckt, und die Mitte in beide Richtungen. Der Rand bleibt damit scharf, und genau der Rand ist der Teil, den man sieht.
Dazu passend zieht die Suche jetzt Sprites vor, die ueberhaupt einen Neunerschnitt haben - die wurden dafuer gebaut, in der Groesse veraendert zu werden. Und weil Valheims eigene Oberflaeche auch nicht in Originalgroesse gezeichnet wird, sondern von 1080p hochskaliert, waechst der Rahmen auf hoeheren Bildschirmen mit. Sonst waere er feiner als bei jedem anderen Fenster daneben.
Im Log steht jetzt zusaetzlich der Neunerschnitt des gewaehlten Bildes, falls doch eines ohne dabei herauskommt.
0.26.1
Der Zeiger war nie frei, das Rad hat weiter gezoomt. 0.26.0 hat an den
falschen Schaltern gedreht. Valheim benutzt kein UnityEngine.Cursor, sondern
sein eigenes ZCursor, das der Zeigerzustand jede Frame neu setzt - meine
Zuweisung wurde also sofort wieder ueberschrieben. Und der Kamerazoom haengt
noch einmal woanders: in GameCamera.UpdateCamera, hinter einer eigenen Liste
von "ist ein Fenster offen"-Abfragen, an die ein Eingriff in die Mausaufnahme
gar nicht herankommt.
In jeder dieser Listen steht dieselbe Frage: InventoryGui.IsVisible(). Die
beantwortet die Mod jetzt mit Ja, solange die Tafel offen ist. Damit stimmt alles
auf einen Schlag - und zwar so, wie das Spiel es selbst macht: Valheim gibt den
Zeiger frei, Valheim sperrt den Zoom, Valheim haelt die Figur an. Jedem Symptom
einzeln nachzulaufen haette geheissen, eine Liste zu raten, die sich zwischen
Versionen aendert.
Die Tafel hatte die falsche Farbe. Das Herstellungs-Fenster ist eine helle Holztextur, die von der Image-Komponente dunkelbraun eingefaerbt wird. Die Mod hat nur das Bild genommen und kam mit einem hellen Brett heraus - die Farbe war nie im Bild, sondern drumherum. Die Faerbung wird jetzt mitgenommen.
0.26.0
Die Tafel gibt den Mauszeiger frei, wie das Inventar. Solange sie offen ist,
hast du einen Zeiger, kannst mit dem Rad scrollen, und deine Figur steht still -
genau wie mit offenem Inventar. Valheim hat dafuer zwei Stellen, und die Mod
haengt sich an beide: GameCamera.UpdateMouseCapture fuer den Zeiger,
Player.TakeInput fuers Stillstehen.
Ich hatte das zuerst bewusst nicht gemacht, weil eine Mod, die sich die Eingabe nimmt und sie nicht zurueckgibt, einen Streamer live festsetzt. Der Ausweg haengt jetzt aber an keiner dieser beiden Stellen: die Taste zum Schliessen wird in Update gelesen und laeuft unabhaengig davon, Esc schliesst ebenfalls, und beim Verlassen der Welt geht die Tafel von selbst zu. Unten auf der Tafel steht, womit man rauskommt.
Abschaltbar unter 13 - Chronicle / TakesInput. Aus heisst: kein Zeiger, das
Spiel laeuft weiter, und Weggehen schliesst die Tafel - das Verhalten aus 0.25.
0.25.5
Scrollen ging nicht, weil es keine Maus gibt. Waehrend du spielst, haelt Valheim den Zeiger gefangen - es gibt also nichts, was man ueber die Tafel fuehren koennte, und das Rad ist ohnehin die Kamera. Ich hatte eine Bedienung gebaut, die nur mit offenem Inventar funktioniert haette.
Zwei Antworten darauf. Geblaettert wird jetzt mit Bild auf und Bild ab, die Valheim nicht belegt; steht auch unten auf der Tafel, sobald es etwas zu blaettern gibt. Das Mausrad tut es weiterhin, wenn tatsaechlich ein Zeiger da ist. Pfeiltasten bewusst nicht - die Konsole kann gleichzeitig offen sein und benutzt sie fuer ihren Verlauf.
Und wichtiger: jede Liste zeigt wieder fuenf Namen statt zehn. Drei Listen zu
fuenf passen bei den ueblichen Aufloesungen aufs Bild, also gibt es meistens gar
nichts zu blaettern. Neu einstellbar unter 13 - Chronicle / Rows, drei bis
fuenfundzwanzig.
0.25.4
Die Tafel war ein weisses Blatt. Die Automatik hat woodpanel_crafting_240_mask
gewaehlt - die Maske des Fensters, also dieselbe Form komplett weiss ausgefuellt,
mit der das Spiel anderswo ein Loch ausstanzt. Sie liegt im Atlas direkt neben
dem echten Fenster, ist exakt gleich gross und schneidet bei jedem anderen
Kriterium genauso gut ab. Namen mit mask fallen jetzt durch, und die
Herstellungs-Fenster werden leicht bevorzugt - damit landet man bei
woodpanel_crafting_240, dem Bild aus dem Screenshot.
Die Tafel ist nur noch so hoch, wie sie sein muss. Vorher stand sie in fester Groesse da, und an einem Abend, an dem drei Listen zusammen vier Namen haben, war die untere Haelfte leer - was eher nach kaputt aussieht als nach neu. Sie waechst jetzt mit dem Inhalt bis hoechstens 82 Prozent der Bildhoehe, danach wird gescrollt.
0.25.3
Die Tafel war durchsichtig. Ich hatte als Hintergrund das groesste Sprite
unter dem Inventar genommen, und das ist meistens eine bildschirmfuellende,
halb durchsichtige Flaeche - nicht das geschnitzte Holzfenster, das man meint,
wenn man "wie das Inventar" sagt. Gesucht wird jetzt zuerst nach dem Namen
(woodpanel vor panel), Trenner, Knoepfe und Schnipsel unter 24 Pixeln
fliegen raus, und die Groesse entscheidet nur noch den Rest.
ae records sprites listet auf, was es gibt, beste Vermutung zuerst. Ein
Name daraus in 13 - Chronicle / BackgroundSprite nimmt genau dieses Bild -
Geschmack laesst sich nicht ausrechnen.
"[piece_rune]" auf dem Stein. Der Hinweistext hat sich Valheims eigenes Wort
fuers Lesen geborgt. Der Schluessel steht in resources.assets, ich hatte ihn
dort nachgeschlagen und fuer sicher gehalten - zur Laufzeit ist er aber nicht in
der Tabelle, und Valheim zeigt einen unbekannten Schluessel in eckigen Klammern
an. Jetzt steht dort unser eigenes Wort, je eine Zeile in beiden Sprachdateien.
$KEY_Use bleibt geborgt, das loest sich korrekt auf und zeigt die Taste, die
der Spieler wirklich belegt hat.
Die Listen stehen jetzt untereinander statt nebeneinander, und die Tafel ist schmaler und hoeher. Drei Spalten nebeneinander fuellten den halben Bildschirm und liessen darunter zwei Drittel leer; eine Liste, die nach unten laeuft, ist die Form, in der man Namen liest. Dafuer stehen jetzt zehn statt fuenf Namen pro Liste.
Scrollbar mit dem Mausrad, solange der Zeiger ueber der Tafel ist, mit einer schmalen Leiste am Rand als Hinweis, dass noch mehr kommt. Bewusst ohne GUI.BeginScrollView: das will die Maus fuer sich haben, und diese Tafel nimmt dem Spiel absichtlich keine Eingabe weg.
0.25.2
Kein Waechterstein-Hinweis mehr beim Bauen. Die Tafel ist eine Kopie eines Objekts aus Valheim, und das meldete sich beim Aufstellen selbst zu Wort: "Du hast einen Waechterstein errichtet", samt Rabe. Ausgeloest wird das nicht von Spielcode - in den Assemblies gibt es dafuer keinen einzigen Aufruf und keinen globalen Schluessel -, sondern aus den Prefab-Daten, an die eine Mod nicht herankommt. Also merkt sich die Mod, dass gerade eine eigene Tafel entstanden ist, und schluckt den Hinweis, der darauf folgt. Nichts wird dabei als gesehen markiert: ein echter Hinweis in derselben Sekunde kommt beim naechsten Durchlauf wieder.
Die Tafel sieht jetzt aus wie Valheim. Statt eines dunklen Rechtecks liegt
Valheims eigenes Fensterbild dahinter, geholt aus dem Inventar. Abschaltbar
unter 13 - Chronicle / GameBackground, dann kommt die schlichte dunkle
Flaeche zurueck.
Schrift kleiner und ueber BoardFontScale einstellbar. Die erste Fassung
war fuer einen Streamer auf Armlaenge bemessen und wirkte auf dem Stream
angebruellt.
Namen laufen nicht mehr in die Zahlen. Die Zahlenspalte wird jetzt gemessen statt geschaetzt - "1h 50m" und "6" brauchen sehr verschieden viel Platz -, und zu lange Namen werden mit Auslassungspunkten gekuerzt.
Die Tafel schliesst erst nach 2.5 Metern statt nach 8, einstellbar unter
CloseDistance.
0.25.1
Der Stein war da und trotzdem unsichtbar. Beide Log-Zeilen meldeten Erfolg -
Prefab gebaut, ins Hammer-Menue gelegt -, und im Baumenue stand nichts. Im
Hammer zu stehen reicht naemlich nicht: Valheim zeichnet das Menue aus
m_availablePieces, einer gefilterten Kopie der Bauteile, die der Spieler
kennt. Ein von einer Mod hinzugefuegtes Bauteil kennt niemand, also flog es
beim Filtern sofort wieder raus - und zwar lautlos, weil beide Registrierungen
tatsaechlich geklappt hatten. AddKnownPiece und ein Neuaufbau der Liste
beheben das.
Umbenannt in "Allvaters Tafel" (englisch "Allfather's Tablet"), auf der Tafel selbst und im Baumenue.
Neu: ae records stone sagt, woran es liegt, statt dass man raten muss:
ob das Prefab existiert, ob es in der Szene ist, ob es in der Hammer-Liste
steht, ob es im Menue auftaucht, ob es bekannt ist, welche Kategorie, welches
Symbol und wie viele Zutaten. Genau die Auskunft, die mir bei diesem Fehler
gefehlt hat.
0.25.0
Die Ruhmeshalle, erste Fassung zum Ansehen. Ab jetzt wird aufgezeichnet, was deine Zuschauer anstellen, und drei Bestenlisten stehen auf einer Tafel:
- Ueberlebenskuenstler - laengster Lauf am Stueck, von der Benennung bis zum Tod
- Jaeger - wie oft eine Kreatur dieses Zuschauers einen Spieler erledigt hat
- Stammgaeste - alle Laeufe zusammengerechnet
Ein Umzug beendet einen Lauf nicht. Zieht die Seele weiter, weil du weggelaufen bist, hat der Zuschauer nichts falsch gemacht - sonst wuerde die Bestenliste messen, wie weit du gewandert bist, und nicht, wie lange er durchgehalten hat. Beim Verlassen der Welt werden alle laufenden Uhren gestoppt und verbucht, sonst gingen ausgerechnet die laengsten Laeufe verloren.
Aufgezeichnet wird pro Kanal, in
BepInEx/config/sohneg.AllfathersEye.records.<kanal>.json. Ereignisse anderer
Streamer werden weggefiltert: in einer gemeinsamen Welt hoert jeder Client von
jeder Kreatur, und ohne Filter stuenden mitzikatz' Zuschauer auf deiner Tafel.
Huginns Chronik, ein Bauteil. Im Baumenue des Hammers liegt jetzt ein
Runenstein. Hinstellen, hingehen, E - die Tafel geht auf. Kein Inventarplatz,
kein Menue, ein Ort. Zum Ausprobieren kostet er genau 1 Stein und braucht
keine Werkbank.
Die Mod bringt kein eigenes 3D-Modell mit - dafuer braeuchte es ein Asset-Bundle,
gebaut gegen genau diese Spielversion, und das ist der haeufigste Grund, warum
eine Valheim-Mod am Patchtag stirbt. Der Stein ist deshalb eine Kopie eines
Objekts, das Valheim schon hat. Welches, steht unter 13 - Chronicle /
BasePrefab: guard_stone ist der Schutzwall-Runenstein (Standard), sign ein
Holzschild, itemstand ein kleiner Sockel. Aendern, Welt neu laden, anderes
Aussehen.
ae records demo 12 fuellt die Tafel mit erfundenen Namen, damit du siehst,
wie sie aussieht, bevor jemand echte Rekorde hat. Nichts davon wird gespeichert.
Dazu ae records show, ae records close und ae records clear. Ohne Stein
oeffnet F7 die Tafel, frei belegbar.
Die Tafel sperrt die Eingabe nicht - das Spiel laeuft dahinter weiter, und du kannst davor stehen bleiben und gefressen werden. Gehst du mehr als acht Meter vom Stein weg, schliesst sie sich von selbst.
Neu: ae claims war schon in 0.23.8 dabei, hier nur der Vollstaendigkeit
halber - es zeigt auf dem Host, welcher Zuschauer welchem Kanal gehoert.
0.24.0
Du musst die Mod einmal neu mit Twitch verbinden. F1, Abschnitt Twitch, trennen und wieder verbinden. Ohne das bleibt der Follow-Melder still und sagt dir das auch im Log; alles andere laeuft unveraendert weiter.
Hugin meldet jetzt neue Follower. Die Sprueche dafuer lagen seit 0.23 fertig
herum und konnten nie ausgeloest werden: Twitch schickt Follows als einziges
Kanal-Ereignis nicht ueber die Chat-Verbindung. Abos, Verlaengerungen,
Geschenke, Raids und Bits reisen dort als versteckte Zeile mit, ein Follow
erzeugt gar nichts. Die Mod fragt Twitch jetzt alle 30 Sekunden selbst nach den
neuesten Followern und meldet, was seit dem letzten Blick dazugekommen ist.
Neuer Schalter OnFollow in 12 - Hugin, und ae raven follow zum Ausprobieren.
Beim Spielstart wird die erste Liste nur gelesen, nicht gemeldet - sonst marschierten dir beim Laden die letzten fuenfzig Follower als frische Neuigkeit vorbei.
Punkte fuer Abos, Bits, Raids, Geschenke und Follows. Bisher verdiente man Punkte nur durchs Zuschauen und Schreiben; wer ein Abo verschenkte, bekam davon im Spiel nichts. Die Werte orientieren sich daran, dass Zuschauen rund 150 Punkte pro Stunde bringt und der Shop von 25 bis 800 reicht:
- Follow: 150, also eine Stunde Zuschauen
- Abo oder Verlaengerung: 500 auf Stufe 1, 1000 auf Stufe 2, 2500 auf Stufe 3
- Prime zaehlt als Stufe 1, weil es den Zuschauer nichts extra kostet
- Verschenkte Abos: Anzahl mal Stufenwert, an den Schenker
- Bits: 1 Punkt pro Bit, 100 Bits sind also 100 Punkte
- Raid: 10 Punkte pro mitgebrachtem Zuschauer, hoechstens 2000
Alles einzeln in 7 - Points einstellbar, 0 schaltet eine Belohnung ab. Der
Streamer selbst verdient daran nichts, solange BroadcasterEarns aus ist -
sonst koennte man sich durch Abos an den eigenen Chat Punkte drucken. Anders als
das Zuschauen zahlen diese Ereignisse auch ausserhalb der Sendezeit: Wer eine
Stunde nach Streamende abonniert, hat trotzdem abonniert.
Nicht drin, obwohl vorgeschlagen: Punkte fuer den Beschenkten eines Geschenk-Abos. Twitch meldet die Beschenkten eines Schwungs auf eigenen Zeilen, die diese Mod absichtlich wegwirft - sonst waeren fuenfzig Geschenke fuenfzig Meldungen. Ein Belohnungspfad, der Zeilen liest, die sonst niemand liest, waere eine zweite Wahrheit neben der ersten. Nachruesten laesst sich das, wenn du es willst.
0.23.8
Toeten beendet eine Seele wieder. Wer einmal geschrieben hatte, wanderte bis zum Spielende mit: Die Wanderliste hatte genau einen Ausgang - die Kreatur kommt zurueck in Reichweite - und ein Tod war keiner. Die Kreatur starb, der Eintrag blieb, und der naechste Durchlauf gab dem Zuschauer einen neuen Koerper, vorbei an der Wiedergeburts-Wartezeit und vorbei am Ausloeser. Dass ein Zuschauer den Stream laengst verlassen hatte, war fuer die Mod kein Zustand, den sie kannte, und das Einzige, was ein Streamer dagegen tun konnte - die Kreatur toeten - tat nichts.
Ein Tod nimmt die Seele jetzt aus der Liste. Der Zuschauer muss neu schreiben, um zurueckzukommen. Die Wanderung selbst bleibt unveraendert: Wer da ist, ist weiter dort, wo der Stream ist.
Seelen wandern nur noch im eigenen Kanal. Der Namensspeicher merkt sich jede benannte Kreatur in Reichweite, ausdruecklich auch die eines anderen Streamers - das haelt die Namen in einer gemeinsamen Welt zusammen. Beim Wandern war das ein Fehler: Lief die Kreatur eines fremden Zuschauers aus der Reichweite, zog dieser Client die Seele in ein Tier neben sich und schrieb den eigenen Kanal in die ZDO. Der andere Streamer verlor seinen Zuschauer an einen Chat, den dieser nie betreten hatte, das Anspruchsbuch des Hosts uebernahm den Diebstahl, und zurueckholen liess sich der Zuschauer nicht mehr - er wartete den Rest der Sitzung vergeblich.
Das ging in beide Richtungen und fiel erst auf, als die Duplikat-Bereinigung meldete, dass zwei Clients gleichzeitig denselben Namen vergeben hatten. Jeder Client nimmt jetzt nur noch Seelen seines eigenen Chats mit, und beim Umzug wird der Kanal der Seele geschrieben statt der des Clients.
Ein Zuschauer, den ein anderer Chat haelt, wird nicht mehr endgueltig verworfen. Vorher fiel er aus der Warteschlange und wurde nie wieder gefragt - das Ende des anderen Streams bemerkte also niemand. Jetzt wird er eine Minute zurueckgestellt und danach erneut angemeldet.
Neu: ae claims. Zeigt auf dem Host, welcher Zuschauer welchem Kanal
gehoert und ob dieser Kanal noch laeuft. Genau diese Auskunft fehlte, als ein
Zuschauer bei einem zweiten Streamer keine Kreatur bekam: Eine Ablehnung und ein
Uebersehen sehen von aussen gleich aus.
0.23.7
Das author-Feld ist wieder aus dem Manifest raus. Thunderstore hat die
Einreichung abgelehnt - "Invalid submission", ohne Grund -, und das Feld war der
einzige Punkt, an dem das Paket vom Standard abwich: Das Schema kennt genau
fuenf Schluessel, wir hatten einen sechsten dazugeschrieben.
Eingebaut war es fuer Gale, das bei lokal importierten Mods den Autor daraus liest. Gebracht hat es dort nichts - die Spalte in der Mod-Liste wird aus dem Thunderstore-Paketindex gefuellt, den eine lokale Mod nicht hat. Ein Feld, das nichts bewirkt und moeglicherweise eine Ablehnung ausloest, ist eine leichte Entscheidung.
0.23.6
Thunderstore nahm das Paket nicht an: "CHANGELOG.md starts with a UTF-8
BOM". Windows-PowerShell schreibt so ein Byte-Order-Mark bei jedem
Set-Content -Encoding utf8, und genau damit habe ich mehrfach die
Changelog-Ueberschrift umbenannt. Betroffen waren CHANGELOG.md und
manifest.json, beide sind sauber.
Warum es niemandem auffiel: Gale entfernt ein BOM von sich aus, bevor es das Manifest liest. Die Datei konnte also durch beliebig viele lokale Tests laufen und erst beim Hochladen auffliegen - im denkbar unguenstigsten Moment.
Beides abgestellt: bump-version.ps1 schreibt jetzt UTF-8 ohne BOM, und
pack.ps1 weigert sich zu packen, wenn eine Text- oder JSON-Datei im Paket mit
einem anfaengt.
0.23.5
Ko-fi steht jetzt oben in der Beschreibung, neben den Sprachlinks und der Webseite: https://ko-fi.com/sohneg. Die Mod bleibt kostenlos, und in ihr selbst steht davon nichts - ein Spendenhinweis im Spiel waere genau die Sorte Einblendung, die man von einer Mod nicht will.
0.23.4
Der Autor steht jetzt in Gale. In der Mod-Liste stand bei jeder anderen Mod "Azumatt" oder "OdinPlus" und bei unserer nichts.
Der Weg dahin war laenger als noetig, weil ich zweimal geraten habe statt
nachzusehen. Erst hielt ich den Dateinamen dafuer verantwortlich - das Paket
heisst deshalb neu Sohneg-AllfathersEye-<version>.zip, wie Thunderstore seine
Pakete benennt, was richtig ist, aber nicht der Grund war. Der steht in Gales
Quelltext, src-tauri/src/profile/import/local.rs:
name: manifest.name,
author: manifest.author,
Bei einer lokal importierten Mod liest Gale den Autor aus dem Manifest. Das ist Gales eigene Erweiterung: In keiner der 22 veroeffentlichten Mods daneben kommt das Feld vor, denn bei einem Download bekommt Gale den Autor von Thunderstore mitgeliefert. Steht jetzt drin.
Sollte Thunderstore beim Hochladen ueber das zusaetzliche Feld stolpern, ist es
die eine Zeile in Package/manifest.json, die wieder rausmuss.
0.23.2
Die Ueberschriften ueber der Meldung sind zurueck. "Kunde aus Midgard", "Hugin bringt Nachricht", "Odin laesst ausrichten" - sechs Stueck, wieder ausgewuerfelt. Sie waren kurz weg, weil der Platz fuer die Art der Nachricht gebraucht wurde; seit die auf der Landeblase steht, ist er wieder frei.
Damit sagen die beiden Blasen bewusst Verschiedenes. Was er beim Landen ruft, ist eine Beschriftung und muss jedes Mal gleich heissen, sonst ist es keine. Was ueber der Meldung steht, darf Spass machen - wer sie liest, weiss ohnehin schon, worum es geht.
Neues Logo. Das alte war ein Platzhalter, den ein Skript aus Rechtecken und Text zusammengesetzt hat. Jetzt liegt echte Grafik dabei - Rabe, Runenkreis, Wikinger vor dem Fjord.
make-icon.ps1 erzeugt daraus weiterhin die 256x256, die Thunderstore
verlangt, nur eben aus icon-source.png statt aus Zeichenbefehlen. Beide
Dateien liegen im Paket: die Vorlage, damit sich das Symbol nach einer Aenderung
neu erzeugen laesst, und das Ergebnis, weil der Build keine Bildwerkzeuge hat.
0.23.0
Hugin sagt jetzt zuerst, worum es geht. Die Art der Meldung steht als orangene Ueberschrift ueber dem Satz - "Neuer Follower", "Abo verlaengert", "Raid" - und der Satz selbst ist wieder ein Satz, ohne die Klammer am Ende.
Das ist kein Geschmacksentscheid, sondern der Platz, den das Spiel dafuer hat:
Raven.Say setzt den Topic in Orange auf eine eigene Zeile ueber den Text, in
derselben Sprechblase, die der Rabe von sich aus zeigt. Dort stand bisher
"Kunde aus Midgard" - huebsch und vollkommen nutzlos, waehrend die eigentliche
Information hinten in Klammern nachklapperte.
Beim Landen ruft er jetzt, worum es geht. Der Rabe hat zwei Sprechblasen,
und sie sind nicht dieselbe: Wenn er landet, ruft er eine kurze Zeile, um
aufzufallen - ab Werk "Willkommen." - mit dem Ausrufezeichen darunter. Die
Meldung selbst sieht nur, wer hinlaeuft und E drueckt, denn den eingereihten
Text zeigt allein Raven.Talk, und der einzige Aufrufer davon ist
Raven.Interact.
Genau dort gehoert die Art der Nachricht hin: "Neuer Follower", "Abo verlaengert", "Raid". Das ist die Haelfte, die man ueber eine Lichtung hinweg liest, ohne stehen zu bleiben - und sie sollte sagen, warum er gekommen ist, und nicht hallo. Der Satz bleibt hinter E, wo Platz zum Lesen ist.
Er ruft es auf seinem eigenen Takt und wiederholt es, bis man ihn anspricht. Das ist das Verhalten des Raben und nicht unseres. Landet er innerhalb einer halben Minute gar nicht - unter ein Dach kommt er naemlich nicht -, faellt die Meldung weg.
Und der Rabe hat jetzt eine Schlange. Bisher fiel alles weg, was innerhalb
von GapSeconds ankam - zwei Follower kurz hintereinander, und einer war nie
gemeldet worden. Jetzt warten bis zu fuenf Meldungen und werden nacheinander
abgearbeitet, eine alle GapSeconds. Laeuft es ueber, faellt die aelteste weg,
denn die ist am wenigsten aktuell.
Der Grund fuers Wegwerfen war ein Abo-Regen, der den Raben minutenlang beschaeftigt. Den gibt es nicht mehr: Ein Schwung verschenkter Abos kommt seit 0.21 als eine Meldung mit ihrer Gesamtzahl an.
Dabei sind zwei Fehler aufgefallen, die in deinen Spielstand geschrieben haben. Beide sind weg:
- Jede Meldung bekam einen eigenen Schluessel, und
Raven.Talkmeldet einen Schluessel als gesehenes Tutorial an deinen Charakter. Nach einem langen Stream haetten dort hunderte Eintraege gestanden. Der Schluessel ist jetzt leer - das ueberspringt auch die Doppelt-Pruefung, zwei Abos hintereinander bleiben also zwei Meldungen. - Der Zuschauername ging als Label mit, und ein Label laesst
Talkden Text dauerhaft in dein Kompendium eintragen. Ein Zuschauername gehoert nicht in das Buch der nordischen Ueberlieferung.
0.22.2
Die Beschreibung gibt es jetzt auf Englisch und auf Deutsch, und sie ist wieder auf dem Stand der Mod. Thunderstore und Gale zeigen diese eine Datei, und sie war seit Monaten nur deutsch und kannte weder den Laden in seiner jetzigen Groesse noch die Twitch-Erweiterung, Hugin, die Kartenmarker oder den Ruf der Kreaturen. Oben stehen zwei Links, sonst laeuft jede Sprache einmal komplett durch.
Kuerzer ist sie trotzdem geworden: Was frueher ausfuehrlich begruendet wurde, warum eine Regel so ist, steht im Changelog. Eine Beschreibung soll sagen, was passiert.
0.22.0
Das Overlay zeigt jetzt auch, was noch kommt. Bisher schickte die Mod nur,
was gerade kaufbar war - drei Eintraege im Zorn, und kein Hinweis darauf, dass
dort vierzehn stehen werden. Gesperrte Aktionen gehen jetzt mit raus, als nicht
anklickbare Zeile mit dem Boss daneben, der ihnen im Weg steht: "braucht
Knochenwanst". Ueber jedem Reiter steht, wie viel davon offen ist - 4/9.
Der Grund, sie frueher wegzulassen, war ein Knopf, den man nur abweisen kann. Das gilt weiterhin, nur ist er jetzt gar nicht erst anklickbar - und damit ist die Zeile keine Einladung mehr, sondern die Antwort auf "was kommt als naechstes". Ein Shop, der drei Dinge zeigt und verschweigt, dass es vierzehn sind, versteckt den besten Teil: dass die Liste mitwaechst.
Der Chatbefehl steht nicht mehr unter jedem Namen. !wood unter "Holz" war
eine zweite Zeile pro Eintrag, die niemand liest - wer vor einer Reihe Knoepfe
sitzt, tippt keinen Befehl ab. Die Liste ist damit halb so hoch.
Die Kopfzeile nimmt die ganze Breite. Sie war so breit wie ihre Beschriftung und liess daneben einen leeren Streifen stehen, der wie eine Luecke im Layout aussah statt wie eine Kopfzeile. Jetzt sitzt der Punktestand am anderen Ende, mit Tausendertrennung und dem Wort dazu - 549 060 statt 549060.
Zwei deutsche Bossnamen waren falsch. "Knochenmasse" heisst im Spiel
Knochenwanst, "den Ahnen" heisst Der Uralte. Beides aus resources.assets
nachgeschlagen, wie die Kreaturennamen vorher. Die Saetze drumherum sind
mitgezogen, damit der Fall stimmt.
0.21.3
Hugin bringt die Neuigkeiten. Abos, Verlaengerungen, verschenkte Abos, Raids
und Bits werden neu von Valheims eigenem Raben gemeldet - er fliegt heran, setzt
sich neben dich und sagt es. Pro Art gibt es einen Schalter in Abschnitt
12 - Hugin, dazu eine Untergrenze fuer Bits: Ein Bit ist ein Dankeschoen,
tausend sind ein Ereignis, und wo die Grenze liegt, entscheidest du.
Der Rabe statt eines eigenen Kastens in der Ecke, weil das Spiel schon einen Boten hat - mit Stimme, Animation und einem Platz in der Geschichte. Ein Abo, das Hugin ansagt, gehoert zur Welt; dieselben Worte in einem Kasten sind ein Overlay, das jemand drangeschraubt hat.
Es braucht dafuer keinen Patch und auch keine neue Twitch-Anmeldung.
Raven.AddTempText ist oeffentlich und statisch, und der Rabe kommt sogar dann,
wenn du die Tutorials abgeschaltet hast: Raven.Spawn weist einen Text nur ab,
wenn er als Tutorial markiert ist, und das ist keiner von unseren. Abos und
Raids kommen als USERNOTICE ueber dieselbe Chatverbindung, die ohnehin offen
ist, Bits als Merkmal an einer gewoehnlichen Nachricht.
Zwei Dinge, die sonst nerven wuerden, sind mitbedacht: Ein Schwung verschenkter
Abos wird einmal mit seiner Gesamtzahl gemeldet und nicht fuenfzig Mal einzeln,
und zwischen zwei Meldungen liegen mindestens GapSeconds. Was in diese Luecke
faellt, faellt weg statt sich anzustauen - ein Rabe, der noch den Abo-Regen von
vor fuenf Minuten abarbeitet, ist schlimmer als eine verpasste Meldung.
Follows fehlen noch, und zwar absichtlich ohne Schalter: Die gibt es ueber IRC nicht, sie brauchen eine zweite Verbindung samt neuer Twitch-Anmeldung. Ein Schalter fuer ein Ereignis, das gar nicht ankommen kann, waere ein Versprechen, das die Mod nicht haelt.
Jede Meldung hat ein bis anderthalb Dutzend Fassungen, gemischt aus ernst und
spoettisch - "{viewer} hat den Eid geleistet. Odin hat zugehoert." steht neben
"{viewer} zahlt dafuer, dir beim Sterben zuzusehen." Zwei Abos hintereinander
sollen sich nicht wie eine Schleife anfuehlen. Wer eigene Zeilen will, schreibt
sie in Localization\de.json unter raven.*; Zeilen dazu oder weg ist keine
Codeaenderung.
Hinter jeder Meldung steht in Klammern, worum es ging - (Abo), (Raid),
(Follow). Die Zeilen sind geschrieben, um gelesen zu werden, und nicht, um zu
informieren: "{viewer} hat deine Faehrte aufgenommen" ist der schoenere Satz und
das schlechtere Etikett. Auf einem lebhaften Kanal hat niemand Zeit, sich das
zusammenzureimen.
Zum Ausprobieren gibt es ae raven <sub|resub|gift|gifts|raid|cheer> [zahl].
Sonst bekaeme man den Raben erst zu sehen, wenn einen tatsaechlich jemand
abonniert - schlecht, wenn man gerade einstellt, ob man ihn ueberhaupt will. Der
Befehl nimmt denselben Weg wie eine echte Meldung, geht also durch die Schalter
und die Sperrzeit hindurch; wenn einer davon ihn schluckt, sagt er welcher.
docs/game-names.ps1 ist neu. Es zeigt, wie Valheim selbst eine Kreatur
oder einen Gegenstand nennt, in allen Sprachen, ausgelesen aus
valheim_Data\resources.assets. Anlass war eine Reihe plausibel klingender
Falschuebersetzungen: "Nacken" fuer Neck, "Graulinge" ohne Umlaut, "Todesmuecken"
statt Todeskitos. Die Tabelle liegt lokal - es gibt keinen Grund, sie zu raten.
0.20.1
Der Zorn hat jetzt eine Leiter. Bisher stand dort ein Eintrag: Wildschweine. Neu sind dreizehn, gestaffelt nach den fuenf Bossen, die die Welt ohnehin zaehlt:
| Ab | Neu |
|---|---|
| Start | Nixen, Graeulinge |
| Eikthyr | Grauzwerge, Skelette |
| Der Aelteste | Surtlinge, Draugr, Troll |
| Bonemass | Woelfe, Steingolem |
| Moder | Fulings, Todeskitos |
| Yagluth | Sucher, Gjall |
Die deutschen Namen stehen nicht da, weil sie plausibel klingen, sondern weil
sie aus resources.assets stammen - der Uebersetzungstabelle, die Valheim selbst
mitliefert. Geraten hatte ich vorher "Nacken", "Graulinge" und "Todesmuecken",
und alle drei waren falsch.
Das Staffeln ist nicht Zierde. Ein Wolfsrudel auf jemanden zu hetzen, der noch in Lumpen kaempft, ist kein Ereignis, sondern ein Abbruch - und ein Shop, der einem gleich vierzehn Zeilen hinwirft, ist keine Auswahl, sondern eine Wand. So zeigt eine frische Welt drei Eintraege, und der Laden waechst mit dem Stream.
Segen: fuenf neue. Ausgeruht von Anfang an, dann Zinn, Eisen, Silber und Schwarzmetall hinter dem jeweiligen Boss. Die Erze folgen der Welt und nicht dem Geldbeutel: Silber vor Bonemass waere ein Geschenk, das niemand einschmelzen kann.
Schabernack: drei neue. Kaelteschauer, Rauchschwaden - und Ferkel. Die sind der lange Witz im Katalog: harmlos jetzt, eine Herde Wildschweine in zwanzig Minuten. Genau deshalb stehen sie bei Loki und nicht bei Odin. Man sieht es kommen.
Preise, Mengen und jede einzelne Aktion lassen sich wie gehabt in F1 abschalten
oder umstellen; die Eintraege entstehen automatisch aus der Tabelle. Die
Prefab-Namen prueft ae shop verify im laufenden Spiel - aus den DLLs sind sie
nicht zu lesen, sie stehen in Asset-Bundles.
0.19.2
"Gib zuerst deine Identitaet frei" stand auch dann da, wenn man sie laengst freigegeben hatte. Zwei verschiedene Absagen teilten sich einen Code. Die eine kommt vom Backend und heisst: Twitch hat gar nicht verraten, wer da klickt. Die andere kommt aus der Mod und heisst: Twitch hat es verraten, aber die Mod kennt den Chat-Namen dazu noch nicht - sie lernt diese Zuordnung nur aus Chat- Nachrichten, und nach einem Neustart ist das jeder.
Der zweite Fall bekam damit die Antwort des ersten, also einen Knopf, den man schon gedrueckt hatte, und keinen Weg weiter. Jetzt hat er einen eigenen Code und sagt, was tatsaechlich hilft: einmal etwas in den Chat schreiben.
Die Zuordnung selbst ueberlebt einen Neustart weiterhin nicht. Das ist die naechste Baustelle.
0.19.1
Im Overlay sind Knoepfe still, solange sie ohnehin abgelehnt wuerden. Bisher war nur ausgegraut, was sich ein Zuschauer nicht leisten konnte. Abklingzeiten sah man dagegen erst an der Absage - man klickte, wartete, und bekam "Noch 47 Sekunden". Die Mod schickt jetzt mit dem Katalog, wann eine Aktion wieder frei ist, und der Knopf zeigt an dieser Stelle die Restzeit statt des Preises.
Dasselbe gilt fuer die eigene Wartezeit nach einem Kauf: Sobald ein Kauf
durchgeht, sind alle Knoepfe fuer die Dauer von ViewerCooldownSeconds still,
und waehrend ein Kauf unterwegs ist, laesst sich kein zweiter starten.
Verschickt wird dabei der Zeitpunkt, zu dem etwas wieder frei ist, nicht die Restzeit. Eine Zahl, die jede Sekunde kleiner wird, waere ein Katalog, der sich jede Sekunde aendert - und der Katalog geht nur raus, wenn er sich geaendert hat. So steht er still, und der Browser zaehlt selbst.
Die Bestaetigung unter dem Shop verschwindet wieder. Sie blieb bis zum naechsten Klick stehen, also unter Umstaenden minutenlang, und sah dann aus, als gehoere sie zu etwas, das man gerade tut. Jetzt raeumt sie sich nach viereinhalb Sekunden selbst weg. "Wird gesendet..." bleibt, denn das beschreibt etwas, das noch laeuft.
Der Kartenmarker ist der schlichte Punkt, und MapPinIcon gibt es nicht
mehr. Die Einstellung stand auf Icon4, der Hoehle. Kein Symbol des Spiels
bedeutet "Kreatur", aber die anderen vier bedeuten sehr deutlich etwas anderes:
Lagerfeuer, Haus, Hammer und Hoehle lesen sich als Ort, und ein Ort, der
herumlaeuft, liest sich als Fehler. Zwischen vier falschen Antworten und einer
richtigen auswaehlen zu duerfen ist keine Wahl, sondern Hausaufgabe - also faellt
die Frage weg und der Punkt steht fest. Der alte Schluessel wird beim naechsten
Start aus der Konfiguration entfernt.
Die Erweiterung muss fuer die Abklingzeiten neu hochgeladen werden; die Mod allein genuegt nicht.
0.18.9
Ein Zuschauer konnte nach seinem ersten Tod bis zum Weltwechsel keinen
Koerper mehr bekommen. Er stand in der Schlange, neben ihm grasten freie
Tiere, ae status meldete "free for a name: 3" - und nichts geschah.
Die Ursache liegt darin, wie die Mod den Host fragt, wem ein Zuschauer gehoert. Wer seine eigene Welt hostet, ist dieser Host: Valheim reicht einen an den Server gerichteten Aufruf direkt an den lokalen Empfaenger weiter, also urteilt, antwortet und vergibt dieselbe Maschine - alles noch innerhalb der Frage. Die Mod hat den Zuschauer aber erst danach als "gefragt" vermerkt, und traf damit jemanden, der laengst ein Tier trug und aus der Schlange raus war. Diesen Vermerk loescht nur eine Antwort, und eine Antwort gibt es nur auf eine Frage, die wegen des Vermerks nie wieder gestellt wurde. Ein Tod genuegte, und die Seele wartete den Rest der Sitzung.
Der Vermerk wird jetzt vor der Frage gesetzt und wieder entfernt, wenn es niemanden zu fragen gab. Wer davon betroffen war, kommt auch ohne Update frei, indem er die Welt einmal verlaesst und neu betritt.
0.18.8
ae debug on schreibt jetzt tatsaechlich etwas ins Log. Die ausfuehrlichen
Zeilen gingen an BepInEx als Debug raus - und genau diese Stufe steht per
Werkseinstellung nicht in [Logging.Disk] LogLevels. Der Schalter liess sich
also einschalten, bestaetigte das auch, und danach stand im Logfile nichts. Das
ist schlimmer als gar kein Schalter: Ein leeres Log sieht wie ein Beweis aus,
dass nichts passiert ist. Die Zeilen gehen jetzt als Info raus und landen
damit dort, wo man sie sucht.
0.18.7
Konsolenbefehle vertragen jetzt kopierte Zeilen. Wer ae status aus einer
Anleitung in die Konsole einfuegt, bringt den Zeilenumbruch mit, und Valheim
reicht ihn durch: Der Befehl hiess dann status mit einem unsichtbaren Zeichen
hintendran, passte auf nichts und wurde mit "Unknown subcommand" abgewiesen - als
gaebe es ihn gar nicht. Man tippt dieselbe Zeile noch einmal und bekommt
dieselbe Abfuhr, weil niemand ein Zeichen vermutet, das man nicht sieht. Alle
Argumente werden jetzt beschnitten, bevor sie gelesen werden.
0.18.6
Die Position des Feeds sieht jetzt auch nach Prozent aus. PositionX und
PositionY waren zwar schon Anteile des Bildschirms, das Fenster zeigte aber
eine nackte Zahl mit allen Nachkommastellen - nach einem Zug am Regler stand da
23.35526, was wie die Messung von irgendetwas aussieht und nichts davon verraet,
dass es Prozent sind. Beide Einstellungen haben jetzt einen eigenen Regler, der
auf halben Prozent einrastet und den Wert als "23,5 %" danebenschreibt. Halbe
Prozent sind auf einem breiten Bildschirm rund zehn Pixel - fein genug fuer
einen Feed und grob genug, um runde Zahlen genau zu treffen.
Die Umrechnung alter Pixelwerte war falsch und ist es nicht mehr. Sie lief, waehrend die Einstellungen geladen werden, und das passiert lange bevor das Spiel seine Aufloesung gesetzt hat: Zu dem Zeitpunkt meldet Valheim ein Platzhalterfenster - auf dem Testrechner 304 Pixel breit. Aus 71 Pixeln wurden so 23 Prozent, aus 655 Pixeln die volle Hoehe, und der Feed rutschte genau dorthin, wo die Umrechnung ihn eigentlich weghalten sollte. Jetzt werden die alten Werte beim Laden nur noch eingesammelt und erst umgerechnet, wenn das Spiel einen Bildschirm meldet, den man ernst nehmen kann.
Wer schon auf 0.18.5 war, hat die krummen Zahlen bereits in der Konfiguration stehen - dort einmal von Hand auf die gewuenschte Position ziehen. Wer von 0.18.4 oder frueher kommt, merkt nichts davon.
0.18.5
Die Position des Feeds steht jetzt in Prozent. OffsetX und OffsetY
hiessen eine Zahl Pixel, was zwei Nachteile hatte: Die Zahl sagte einem nichts,
und der Feed wanderte, sobald sich die Aufloesung aenderte. Die Einstellungen
heissen jetzt PositionX und PositionY und sind Anteile des Bildschirms,
gemessen von der Ecke, an der der Feed haengt. Damit bleibt der Anker eine
einzige Angabe, und dieselbe Einstellung sitzt auf jedem Monitor am selben
Fleck.
Wer schon Pixel eingestellt hatte, muss nichts tun: Die alten Werte werden beim ersten Start einmal mit der aktuellen Aufloesung umgerechnet und die alten Schluessel aus der Konfiguration entfernt. 655 einfach als 655 Prozent zu lesen haette den Feed still an den Rand geklemmt.
Die Erinnerung im Chat kommt seltener. ReminderMinutes steht neu auf 15
statt 5. In einer bestehenden Konfiguration bleibt die alte Zahl stehen -
BepInEx uebernimmt einen neuen Standard nur fuer einen Schluessel, den es noch
nicht kennt -, dort also einmal von Hand umstellen.
0.18.4
Jeder Zuschauer sieht den Shop in seiner eigenen Sprache. Bisher schickte die Mod die Namen in der Sprache, auf die sie selbst eingestellt war - ein deutscher Stream zeigte also auch englischen Zuschauern "Hasen". Jetzt schickt sie alle Sprachen mit, und die Erweiterung waehlt die, die Twitch fuer den jeweiligen Zuschauer meldet. Eine Einstellung dafuer gibt es bewusst nicht: Die Frage stellt sich pro Zuschauer, nicht pro Streamer.
Der Chatbefehl unter dem Namen bleibt, wie er ist. Ein Befehl wird getippt, nicht gelesen, und die Mod hoert ohnehin auf die Varianten beider Sprachen.
Was du in F1 aenderst, steht Sekunden spaeter im Overlay. Preise, einzelne Aktionen, ganze Kategorien: Der Shop wurde bisher alle zehn Sekunden neu gebaut, was reicht, aber sich beim Einstellen zaeh anfuehlt. Jetzt meldet die Konfiguration selbst, dass sich etwas geaendert hat, und der naechste Frame baut neu. Bis das im Browser eines Zuschauers ankommt, vergehen noch ein bis zwei Abfragen - unterm Strich zwei bis fuenf Sekunden statt bis zu fuenfzehn.
Der Zehn-Sekunden-Takt bleibt fuer das, was sich ohne Ansage aendert: ein erlegter Boss, der eine neue Stufe freischaltet.
0.18.3
Zuschauer stehen jetzt auf der Karte. Jede Kreatur mit einem Zuschauernamen
bekommt einen Marker, und der bleibt nicht liegen, wo die Kreatur mal war - er
folgt ihr. Der Name steht daran. In deinen Spielstand wird nichts geschrieben:
Stirbt die Kreatur, zieht sie davon oder wird sie entladen, ist der Marker weg.
Bei vielen Zuschauern deckelt MapPinLimit das Ganze, sonst liegt die Karte
irgendwann unter ihrem eigenen Publikum.
Ein Symbol fuer Kreatur gibt es im Spiel nicht, deshalb laesst sich unter
MapPinIcon aussuchen, welches der vorhandenen Marker-Symbole es sein soll.
Und alle zwei Minuten meldet sich einer. Mit demselben Laut, den eine Kreatur macht, wenn sie dich bemerkt - aber aus der Kreatur heraus, also hoerst du die Richtung. Das ist der eigentliche Punkt: Wer seit zehn Minuten hinter einem Felsen steht, wird so gefunden, ohne die Karte zu oeffnen. Jedes Mal ein anderer, damit nicht immer derselbe Troll ruft.
CallOutMinutes stellt den Abstand, 0 schaltet es ab. Es haengt bewusst nicht
am Ton beim Einzug einer Seele - wer den nicht will, will vielleicht trotzdem
wissen, wo seine Zuschauer sind. Denselben Mindestabstand teilen sich beide,
damit sie einander nicht ins Wort fallen. Solange niemand in der Naehe ist,
bleibt es still.
0.18.2
Im Videobild kaufen funktioniert jetzt wirklich. Bisher erkannte die Mod einen Klick und lehnte ihn ab. Ein Klick geht nun durch denselben Kaufweg wie ein Befehl im Chat - dieselben Regeln, dieselben Punkte, dieselbe Ankuendigung im Feed. Unterschiedlich ist nur der Rueckweg: Das Overlay bekommt einen Code statt eines fertigen Satzes, denn welche Sprache der Zuschauer liest, weiss nur sein Browser.
Ein Ueberfall ist dabei der Sonderfall. Ihn entscheidet nicht das Spiel, sondern der Host, und dessen Antwort kommt Sekunden spaeter. Sie findet den Klick wieder, der sie ausgeloest hat. Gefragt, auf wen der Ueberfall zielen soll, wird aus dem Overlay nicht - ein Klick kann im Chat nicht antworten.
Das Overlay hat keinen Schalter mehr. Es erkennt selbst, ob es gebraucht wird: Das Backend sieht die Zuschauer, die es geoeffnet haben, und sagt es der Mod. Das ist die genauere Frage als "ist die Erweiterung installiert" - melden lohnt sich erst, wenn jemand hinschaut.
Solange niemand hinschaut, verlaesst nur die Kanal-ID den Rechner. Keine Zuschauernamen, keine Punktestaende, keine Shop-Liste. Was sich in der Zwischenzeit ansammelt, wird nicht weggeworfen - der erste Zuschauer bekommt alles auf einmal.
Abschnitt "9 - Overlay" ist verschwunden. Host und Token waren nie eine
Wahl: Die veroeffentlichte Erweiterung ist gegen genau ein Backend registriert,
also gab es immer nur eine richtige Antwort. Beides steckt jetzt im Code. Wer
ein eigenes Backend betreibt, baut die Mod selbst; im Ordner
AllfathersEye-extension liegt alles dafuer.
Eine Einstellung verschwindet allerdings nicht von selbst aus der .cfg -
BepInEx behaelt einen Schluessel, den es nicht mehr kennt, und schreibt ihn bei
jedem Speichern zurueck. Die alten Eintraege werden deshalb beim naechsten Start
aktiv entfernt.
Stattdessen steht unter der Twitch-Anmeldung, was das Overlay gerade tut - aus, nicht erreichbar, bereit oder aktiv, und bei "aus" auch, woran es liegt. Dazu ein Knopf zur Anleitung.
Es gibt jetzt eine Webseite: allfatherseye.sohneg.ch, zweisprachig, mit Anleitung und Datenschutzerklaerung.
0.18.1
Der Overlay-Host ist jetzt voreingestellt. Die Erweiterung und ihr Server gehoeren zusammen - eine Twitch-Erweiterung ist unter genau einer Client-Id registriert, und die spricht mit genau einem Backend. Ihn von Hand einzutragen war Arbeit ohne Wahl. Nur wer eine eigene Erweiterung betreibt, aendert ihn noch.
Einzutragen bleibt das Token, und das aus gutem Grund: Es ist pro Kanal verschieden und muss auf beiden Seiten dasselbe sein.
0.18.0
Der Shop kann jetzt im Videobild erscheinen - als Twitch-Erweiterung, mit
drei Reitern, Preisen und ausgegrauten Eintraegen fuer alles, was sich ein
Zuschauer noch nicht leisten kann. Unter 9 - Overlay einzuschalten.
Das braucht mehr als die Mod: Das Overlay laeuft im Browser eines Zuschauers
und dieser Rechner sitzt hinter einem Router, die beiden koennen einander also
nicht erreichen. Dazwischen gehoert ein kleiner eigener Server. Wie der
aussieht, steht im Ordner AllfathersEye-extension - er hat keine
Abhaengigkeiten und laeuft als Docker-Container.
Die Mod fragt, sie wird nie gefragt. Alle zwei Sekunden meldet sie, was sich geaendert hat, und holt ab, was Zuschauer inzwischen angeklickt haben. Eine ausgehende Verbindung kommt durch jeden Router, eine eingehende nicht. Das laeuft auf einem eigenen Thread: Der HTTPS-Client wartet auf die Antwort, und ein wartender Hauptthread waere ein stehendes Spiel.
Punkte bleiben Punkte dieser Mod - Twitchs Kanalpunkte sind etwas anderes
und lassen sich aus einer Erweiterung ohnehin nicht ausgeben. Das Overlay ist
nur eine zweite Tuer zum selben Laden. Damit ein Klick beim richtigen Konto
landet, liest die Mod jetzt das user-id-Feld jeder Chat-Nachricht mit: Twitch
nennt einer Erweiterung den Zuschauer als Nummer, die Punkte haengen am Login,
und diese Nummer steht in jeder Nachricht. Wer noch nie geschrieben hat, ist
deshalb unbekannt - und hat auch keine Punkte.
Das Zertifikat von Let's Encrypt ist dazugekommen. Die Mod prueft Serverzertifikate gegen fest hinterlegte Wurzeln, weil Unitys Laufzeit oft keinen brauchbaren Zertifikatsspeicher hat. Bisher waren das nur die von Twitch; ein eigener Server waere daran gescheitert.
Noch nicht drin: Kaeufe aus dem Overlay werden erkannt, aber noch nicht
ausgefuehrt - der Zuschauer bekommt eine Absage. Der Weg dorthin fuehrt durch
ShopService, das heute fest mit den Chat-Antworten verwoben ist, und das ist
ein eigener Umbau.
19 neue Tests (620 insgesamt).
0.17.0
Der Host entscheidet jetzt, wem ein Zuschauer gehoert. Bisher vergab jeder Client Namen fuer seinen eigenen Chat und schaute zwei Sekunden spaeter nach, ob jemand anderes dasselbe getan hatte. Diese Pruefung konnte den Fall, fuer den sie gebaut war, gar nicht sehen: Sie laeuft ueber geladene Kreaturen, und zwei Streamer, die weiter auseinander stehen als ihre Ladebereiche, sehen die Kreaturen des anderen nicht. Beide vergaben denselben Zuschauer, beide hielten das fuer richtig — bis sie sich trafen und einer ihn schlagartig verlor.
Der Host ist die einzige Maschine, die jede Kreatur der Welt kennt, auch die gerade ungeladenen. Also wird er gefragt, bevor geschrieben wird. Wer in zwei Chats schreibt, bekommt vom zweiten eine Absage, statt in zwei Kreaturen zu stecken.
Er verwaltet dabei nichts, was nicht ohnehin in der Welt steht. Zuschauer, Kanal und Zeitpunkt liegen in den Kreaturen selbst, und nach einem Weltstart liest der Host sein Verzeichnis einmal daraus zurueck. Es kann deshalb weder verloren gehen noch veralten, und ein Absturz hinterlaesst keine Reste.
Ein beendeter Stream gibt seine Zuschauer von selbst frei. Die Zaehlermeldung, die jeder Client alle drei Sekunden schickt, ist zugleich sein Lebenszeichen. Bleibt sie fuenfzehn Sekunden aus, gilt der Kanal als beendet und seine Zuschauer koennen anderswo mitmachen — ohne dass dafuer irgendetwas Zusaetzliches uebers Netz geht.
Auf einem Server ohne die Mod aendert sich nichts. Ein Aufruf, den niemand entgegennimmt, verschwindet spurlos — „kein Mod-Host" und „Host denkt nach" sehen von aussen gleich aus. Nach drei Sekunden Stille vergibt der Client den Namen selbst, nach zwei Stillen in Folge hoert er fuer eine Minute auf zu fragen. Die alte Aufraeumlogik bleibt als Netz darunter bestehen. Die Mod laeuft damit weiterhin ueberall und ist mit einem Mod-Host exakt.
Damit erledigt sich auch der Fall, den 0.16.2 noch offen liess: Bei drei beteiligten Chats konnte die alte, paarweise Entscheidung von der Reihenfolge abhaengen. Wo der Host antwortet, gibt es keine paarweise Entscheidung mehr.
28 neue Tests (601 insgesamt), zwei neue API-Pruefungen (132).
0.16.2
Der Zaehler zeigt die wandernden Seelen, und alle sehen dieselbe Zahl. Die Zeile nennt jetzt drei Werte statt zwei: Seelen in einer Kreatur, Seelen unterwegs zu einer neuen, und Wartende, die noch nie eine hatten. Ohne das waere beim Gang durchs Portal die Anzeige von zwanzig auf null gefallen, obwohl zwanzig Seelen unterwegs sind - sie standen weder bei den Seelen noch bei den Wartenden.
Die dritte Zahl reist ueber denselben Weg wie die anderen beiden: Jeder Client
meldet alle drei Sekunden nur seinen eigenen Kanal, alle addieren. Ein
Mitspieler, der nicht streamt, sieht also genauso, wie viele Seelen gerade
zwischen den Koerpern sind. Der Zaehler-Aufruf traegt jetzt vier Werte statt
drei und heisst deshalb AllfathersEye_Counts2: Ein aelterer Client hat fuer
den neuen Namen keinen Empfaenger und ignoriert ihn still, statt an der
Parameterzahl zu zerbrechen.
Wer in zwei Chats schreibt, existiert trotzdem nur einmal. Bisher entschied allein die Reihenfolge der Vergabe, wem ein Zuschauer gehoert, der bei zwei Streamern gleichzeitig mitschreibt - seit dem Zeitstempel haette der Stream gewonnen, in dem er zuletzt getippt hat, und die beiden haetten ihn sich gegenseitig abgenommen. Jetzt behaelt ihn der Stream, der ihn zuerst hatte.
Innerhalb eines Chats gilt weiter das Gegenteil, und das ist kein Widerspruch: Dort ist die aeltere Markierung ein Ueberbleibsel, das die Seele laengst verlassen hat, waehrend zwischen zwei Chats der Besitzstand zaehlt.
11 neue Tests (573 insgesamt).
0.16.1
!seele weiss jetzt, dass eine Seele unterwegs sein kann. Zwischen dem
Teleport und der neuen Kreatur ist ein Zuschauer koerperlos, und die Antwort
lautete bisher, er habe keine Gestalt - richtig, aber irrefuehrend, denn sie
klang wie eine Aufforderung, etwas in den Chat zu schreiben. Genau das haette
nichts bewirkt: Eine Seele, die schon auf dem Weg zu einem Koerper ist, stellt
sich nicht noch einmal hinten an.
Jetzt gibt es eine vierte Antwort dafuer, in sieben Wortlauten je Sprache: die Seele ist mitgereist und sucht hier eine neue Gestalt.
Dazu acht Tests (562 insgesamt), die pruefen, dass alle vier Antworten auf
!seele in beiden Sprachen wirklich existieren. Der Schluessel wird im Code von
Hand gewaehlt, und ein Tippfehler faellt sonst erst auf, wenn ein Zuschauer
fragt und den Schluessel selbst zurueckbekommt.
0.16.0
Die Seelen bleiben bei dir. Bisher blieb eine Seele in der Kreatur, die sie
bei der Vergabe bekommen hatte. Wer weiterzog, liess seine Zuschauer zurueck:
unsichtbar fuer alle, und !seele nannte eine Kreatur, die im Stream seit einer
halben Stunde nicht mehr vorkam. Nach zehn Minuten ohne Sichtkontakt vergass die
Mod den Eintrag, und der Zuschauer stand wieder ganz am Anfang.
Jetzt zieht eine Seele um, sobald ihre Kreatur weiter als WanderRadius
entfernt ist - in eine Kreatur derselben Art. Wer als Troll losgezogen ist,
kommt als Troll wieder. Erst wenn sich fuenf Minuten lang keine passende findet,
nimmt die Seele, was da ist, und nur dann kommt auch eine Zeile dazu: Dass ein
Troll durch einen anderen Troll ersetzt wurde, merkt der Zuschauer ohnehin nicht,
und zwanzig solcher Meldungen auf einmal will niemand lesen.
Zwei Radien, und das ist Absicht. Radius (30 m) bleibt der Umkreis, in dem
Namen vergeben werden; WanderRadius (100 m) ist der Abstand, ab dem eine Seele
abwandert. Waeren beide gleich, spraenge jede Seele am Rand im Sekundentakt hin
und her, sobald du am Lagerfeuer stehst.
Wartende gehen vor. Steht nur eine Kreatur frei und will ein Wanderer hinein, waehrend jemand in der Warteschlange noch gar keine hat, bekommt sie der Wartende. Wer noch nie eine Kreatur hatte, hat gar nichts vom Stream - ein Wanderer hat immerhin eine, nur zu weit weg.
Durchs Portal kommen sie mit. Ein Teleport war der einzige Weg, auf dem eine Kreatur zwischen zwei Messungen aus dem Ladebereich faellt - zu Fuss oder per Schiff sind in einer halben Sekunde keine zweihundert Meter zu schaffen. Deshalb sammelt die Mod die Seelen ein, solange du noch am alten Ort stehst und die Kreaturen beschreibbar sind. Die Kreaturen dort bleiben namenlos zurueck; das Bild ist ja mitgereist.
Ein Name auf zwei Kreaturen entscheidet sich jetzt anders, und das raeumt einen aelteren Fehler mit weg: Nach einem Weltneustart weiss die Mod nichts mehr, dieselben Zuschauer bekommen neue Kreaturen, und eine alte in einem nie geladenen Winkel traegt den Namen weiter. Bisher entschied allein die ZDO-Id, wer gewinnt - also jedes zweite Mal die alte, und die Seele wurde quer ueber die Karte zurueckgezogen. Jetzt gewinnt die juengere Vergabe. Kreaturen aus Welten von vorher haben keinen Zeitstempel und verlieren damit gegen alles Aktuelle.
32 neue Tests (554 insgesamt), vier neue API-Pruefungen (130).
Aeltere Eintraege stehen auf Thunderstore bei den jeweiligen Versionen, und vollstaendig in CHANGELOG.md im Quellcode.
Older entries are on Thunderstore under their own versions, and in full in CHANGELOG.md in the source.
