You are viewing a potentially older version of this package. View all versions.
Sohneg-AllfathersEye-0.30.7 icon

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.

Date uploaded a week ago
Version 0.30.7
Download link Sohneg-AllfathersEye-0.30.7.zip
Downloads 30
Dependency string Sohneg-AllfathersEye-0.30.7

This mod requires the following mods to function

denikson-BepInExPack_Valheim-5.4.2351 icon
denikson-BepInExPack_Valheim

BepInEx pack for Valheim. Preconfigured with the correct entry point for mods and preferred defaults for the community.

Preferred version: 5.4.2351

README

Allfather's Eye

English · Deutsch · allfatherseye.sohneg.ch · Ko-fi


English

Your Twitch viewers get creatures in Valheim. Somebody writes in chat, and their name attaches itself to a random creature near you and floats above its head:

Troll (xXKevinXx)

A deer in a winter forest with the name Mitzikatz above it

Kill it and the soul is free again — the viewer gets a new shape next time they write. No command needed: any message is enough, and nobody ever holds more than one creature at a time.

What is in it

  • Viewers become creatures — one message in chat, their name above a head
  • Souls follow you — walk on and the soul moves into a creature near you
  • Points for watching — the quiet ones earn too, not just the loud
  • A shop that unlocks with your world — food and help, or boars and a raid on your camp
  • Hugin announces — follows, subs, gifts, raids and bits, out loud in the game
  • A hall of fame — who lasted longest and as what, on a tablet you build
  • Chat votes — three things on screen, thirty seconds, A B or C, and it costs nothing
  • A bounty on your head — whoever puts you on the ground gets paid
  • Earned epithets — Mitzikatz Trollborn, Kevin Bonebreaker, somebody else Shortbreath
  • A Twitch extension — the shop on top of your video, coming soon; chat can do the same

Everything below is detail. If you only want it running, the next section is all you need.

Quick start

  1. Install the mod for everyone who should see the names.
  2. Only the streamer sets up their channel under 2 - Twitch — either by signing in (recommended) or by typing the channel name.
  3. Everybody else leaves that section empty and simply sees the names.

Settings live in the game: press Escape and click Allfather's. The window comes with the mod — no Configuration Manager, nothing else to install. What you change there takes effect at once and is saved to BepInEx/config/sohneg.AllfathersEye.cfg.

Valheim's pause menu with the extra entry Allfather's

Signing in, or not

Channel name only Signed in
Names, feed, death messages ✅ ✅
Several streamers at once ✅ ✅
The mod answers in chat ❌ ✅
Points, shop, chat commands ❌ ✅
The Twitch extension ❌ ✅

The mod reads chat anonymously — Twitch needs no account for that. Writing needs one. That is the whole difference.

Under 2 - Twitch press "Connect Twitch". Twitch opens in your browser and the Allfather's window shows a code to type there.

While streaming: do not show that code, and do not show the Twitch page either — the code is in the address bar too. The mod therefore prints it in the Allfather's window only, never in the feed, the console or the log.

Credentials live in BepInEx/config/sohneg.AllfathersEye.auth.json, a separate file. If you hand your config to somebody, leave that one out.

Signed in, Channel is set from your account and used even if the field says something else — a typo should not put the mod's greeting into a stranger's chat under your name.

Commands for your viewers

Your viewers cannot see the name; it floats on your screen. So they ask:

kevin: !soul Allfather's Eye: @kevin your soul is inside: Troll

Command What it does
!soul / !seele Which creature holds their soul
!points / !vp Their own balance
!title / !titel The epithet they have earned, and the rest they hold
!ae-help / !ae-hilfe The list of commands
!ae-help-en / !ae-help-de Force an answer in one language
!shop, !shop blessing|wrath|mischief What is for sale, with prices

Moderators and you also have !ae-give <name> <amount>, !ae-take <name> <amount> and !ae-pause / !ae-resume. An ordinary viewer trying one gets no answer at all — an error message would only reveal that the command exists. Permission comes from the Twitch badge, not from a name list.

Both language spellings always work, whatever you have configured; only the answer follows your language. A bare command never triggers a name, so asking does not spend a viewer's first message.

Answers arrive as a real Twitch reply, at most one per viewer and command every 30 seconds (CommandCooldownSeconds), within a budget of 15 messages per 30 seconds.

Nothing free nearby? The viewer joins a queue and hears about it after three seconds — long enough that a shop full of creatures never produces a needless "please wait". When one frees up, they are told again. Turn both off with AnnounceWaiting.

When a creature dies, the mod tells its viewer directly, naming the viking who struck if there was one (AnnounceDeaths). Only your own channel is written to.

Valheim Points

Viewers earn VP for being there.

For Default
Watching 10 VP every 5 minutes
Writing a message 5 VP, at most every 10 minutes

That is 2.5 VP a minute for somebody who watches and occasionally writes. The weighting is deliberate: most of it comes from watching, so the quiet ones are not left out.

Silent viewers only count if the mod may ask Twitch who is in chat. If you signed in before that permission existed, disconnect and connect once — a scope cannot be added to a token already issued. Until then, "present" means "wrote within the last 15 minutes" (PresenceWindowMinutes).

Subscriptions, bits, raids, gifted subs and follows pay too:

Event Points
Follow 150 About an hour of watching
Sub or renewal 500 / 1000 / 2500 By tier; Prime counts as tier 1
Gifted subs count × tier To the giver
Bits 1 each 100 bits, 100 points
Raid 10 per viewer Capped at 2000

Each of those is its own setting under 7 - Points, and 0 switches one off. Unlike watching, these pay outside broadcast hours as well — somebody who subscribes an hour after the stream ended has still subscribed.

Rules worth knowing: the first sighting only starts the clock and pays nothing; missed intervals are not paid retroactively; a bare command earns nothing but does count as present; bots never earn (IgnoredUsers), and neither do you (BroadcasterEarns); by default nothing is earned while you are offline (OnlyWhenLive).

Balances live in BepInEx/config/sohneg.AllfathersEye.points.<channel>.json, written every minute and on exit, atomically, keeping the last five states as backups. Somebody with no points who has not been seen for 30 days is forgotten (ForgetAfterDays). Points, once earned, are kept.

The shop

Every purchase hits you — the streamer in whose chat it was triggered.

Odin's Blessing

Command What arrives Price From
!wood / !holz 20 wood 50 start
!food / !essen 3 queen's jam 75 start
!heal / !heilen full health 150 start
!rested / !ausgeruht the Rested buff 100 start
!copper / !kupfer 5 copper ore 100 Eikthyr
!tin / !zinn 5 tin ore 100 Eikthyr
!iron / !eisen 5 scrap iron 200 The Elder
!silver / !silber 5 silver ore 300 Bonemass
!blackmetal / !schwarzmetall 5 black metal scrap 400 Moder

The ores follow the world rather than the purse: silver before Bonemass would be a gift nobody can smelt.

Odin's Wrath

Command What arrives Price From
!necks / !nixen 4 necks 50 start
!greylings / !gräulinge 4 greylings 60 start
!boar / !eber 3 boars 75 start
!greydwarfs / !grauzwerge 4 greydwarves 120 Eikthyr
!skeletons / !skelette 3 skeletons 140 Eikthyr
!raid / !überfall a real Valheim raid 500 Eikthyr
!surtlings / !surtlinge 3 surtlings 180 The Elder
!draugr 3 draugr 200 The Elder
!troll a troll 350 The Elder
!wolves / !wölfe 3 wolves 300 Bonemass
!golem / !steingolem a stone golem 450 Bonemass
!goblins / !fulings 4 fulings 400 Moder
!deathsquitos / !todeskitos 2 deathsquitos 450 Moder
!seekers / !sucher 3 seekers 600 Yagluth
!gjall a gjall 800 Yagluth

A ladder beside the world's own: what Odin throws at you grows as you do. A fresh world offers three of these, a finished one all fifteen. The raid has its own section.

Loki's Mischief

Command What arrives Price
!hares / !hasen 6 hares 25
!piglets / !ferkel 5 piglets 35
!chickens / !hühner 8 chickens 40
!deer / !hirsche 5 deer 40
!wet / !nass you get soaked 50
!cold / !kalt you get cold 60
!smoked / !rauch a lungful of smoke 70
!stones / !steine inventory full of stones 150

The piglets are the long joke: harmless now, a herd of boars in twenty minutes.

Your own shop

The tables above are where a shop starts, not where it has to stay. Under Escape → Allfather's → Allfather's Eye, each category is a table you can change while you play:

Odin's Blessing as a table, the picker for a new row below it

  • Price, amount, commands, the boss it waits for, on/off — for every row, the built-in ones included. Typed values count on Enter.

  • − at the end of a row takes it out. For a few seconds there is an Undo.

  • + Add opens a picker with five tabs:

    • Items — any item your game knows, other mods' included: given into the inventory by the amount, filling the inventory like the stones, or dropping them all — every one of it out of your inventory and onto the floor. Dropped, not deleted; you can pick it up again.
    • Creatures — any creature except bosses, sea creatures, summons and what the game has not released yet. Monsters can be hostile (sent after you, held back near a boss like Odin's Wrath) or harmless (just set down).
    • Effects — any status effect the game has: a mead's warmth, Rested, a guardian power, or something less welcome.
    • Weather — any weather your world's biomes have, for as many minutes as the amount says, on your screen only. Not the Ashlands' (their cinder rain sets wood alight) and not the Deep North's.
    • Special — Launch (straight up, amount = metres, the game's own fall damage, held back like Odin's Wrath and never put to a vote), Stamina and Eitr refill, Gear repair, and a Random item drawn from a pot you fill yourself.

    None of these is in the shop until you add it. What other mods added to the game is hidden at first; the Other mods switch shows it, marked "Mod".

  • Default puts the category back the way it ships. It asks twice, because your own rows go with it.

A new row gets commands made from the name your game shows — "Resin" becomes !resin — and you can type others; a command something else already answers to is refused. Rows you add are named in chat and in the extension the way your game names them, in your game's language. Your old prices from before 0.30 are carried over.

How a purchase runs

Checked in this order: shop open → action enabled → not paused → unlocked → player present → (for Wrath, and anything hostile) safe → room → cooldowns → enough points. From permanent to temporary, so nobody hears "you need 40 more VP" about something that is switched off anyway.

Charged first, then carried out, refunded at once on failure. Charging first stops two simultaneous purchases both going through. If the action then cannot happen, the points come back in the same moment and the viewer is told why. Nobody pays for nothing, and a failed action starts no cooldown.

Creatures appear 8 to 15 metres away, on solid ground, not under a roof and not inside a player base — checked against Valheim's own workbench and ward zones. They vanish again after 10 minutes (SpawnLifetimeMinutes), except while fighting, and tamed ones stay for good: tame a bought chicken and it is yours.

The guard rails

Rule Default Against
ViewerCooldownSeconds 30 One person steering the whole stream
ActionCooldownSeconds 60 The same thing twice in a row
MischiefCooldownSeconds 120 The cheapest category crowding out the rest
MaxHostileSpawns 8 Bought enemies at once
MaxHarmlessSpawns 20 Separate ceiling, so chickens cannot block a boar
PauseWrathNearBoss on No wrath during a boss fight
WrathMinHealthPercent 35 No wrath below 35 % health, while swimming, or midair

The last two apply to Wrath only. Being healed mid-boss is the point; three boars at 20 % health is a gravestone.

!ae-pause stops the shop only — name assignment keeps running. The bigger switch is Paused in section 1.

The raid

!raid is the one action that does not happen on your machine. A client cannot start a Valheim raid at all, so your game asks the host, who carries it out; Valheim then replicates it to everyone, mod or not.

The host decides using its own config and its own cooldown. If nobody answers within eight seconds the purchase fails and is refunded.

With several players in the world the buyer is asked who to send it at:

kevin: !raid Allfather's Eye: @kevin at whom? A) Mitzikatz B) Psycho kevin: !b

Only the person asked may answer. The question costs nothing and expires silently after 60 seconds.

Two dials: RaidDifficulty (default Gentle) picks a raid one boss tier below your world — annoying, not a wipe. RaidSeconds (default 60) ends it early; what is already there stays, nothing further is sent. 0 lets it run in full.

Which raids exist is Valheim's decision, not the mod's — the same check the game uses for its own. With several players nearby, the weakest decides: a raid counts as available only if everyone is ready for it.

WorldEventCooldownSeconds (default 600) is counted by the host for the whole world, and AllowOtherChannels decides whether another streamer's viewers may trigger world events in your world.

Before you go live: ae shop verify

Item and creature names live in Valheim's asset bundles and cannot be checked at build time. A wrong one would show up by a viewer paying 100 VP for nothing.

 ok   !wood (wood) -> 20 x Wood
 FAIL !copper (copper): item 'CopperOre' does not exist

Run it once after every Valheim update.

The Twitch extension

Still in development. It is built and it works, but Twitch has not approved it yet, so it cannot be installed on a channel today. It is coming soon — and it is optional in any case: chat can do everything the overlay can.

Viewers can spend their points from a panel over your stream instead of typing commands. It shows their balance, the three categories, and what each costs — buttons go quiet when they cannot afford something, while a cooldown runs, or until the boss that unlocks it falls. Above each tab stands how much of that category your world has opened up: 4/9.

It needs the sign-in, and it needs the extension installed on your channel. The mod finds the backend by itself; there is nothing to configure beyond a status line under 2 - Twitch that says whether it is reachable.

A viewer has to share their Twitch identity with the extension once, and to have written in chat once — points belong to a chat login, and only a chat message ties one to a Twitch id.

allfatherseye.sohneg.ch walks through setting it up with pictures, in English and German, and holds the privacy policy that Twitch links to from the extension.

Telling people it exists. Somebody joining mid-stream never saw the greeting. The bot therefore repeats a reminder every ReminderMinutes (15) in changing words, and twitch-panel.md in this package holds ready-made text for the panels under your stream, in both languages — three small panels or one compact, with every command and price.

The chronicle

The mod keeps a hall of fame per channel: Survivors — the longest single run, from being named to dying, with the shape they died in — and Hunters, how often their creature put a player on the ground. Moving to a new creature because you walked away does not end a run; that would measure how far you wandered rather than how long they lasted.

To read it, build Allfather's Tablet from the hammer's build menu, walk up to it and press E. It costs ten stone and needs no workbench. F7 opens the same board without walking there.

The chronicle stone and the open tablet

The mod ships no 3D model of its own, so the stone is a copy of something Valheim already has — 13 - Chronicle / BasePrefab decides which: guard_stone (the warding rune stone, the default), sign, or itemstand. Change it, reload the world, different stone.

ae records demo 12 fills the board with invented names so you can see how it looks before anybody has earned anything. Nothing about a demo is saved.

Chat decides

Every half hour a narrow panel appears on the right with three things on it, and everybody has thirty seconds to write A, B or C. Sometimes mixed, sometimes nothing but gifts, sometimes nothing but wrath. The bars fill while the clock runs down, and whatever wins happens.

Voting is free, and that is the point: it is the one moment in the evening where somebody who arrived two minutes ago counts exactly as much as the regular who has been earning points all night. One viewer, one vote — you may change your mind, you may not shout twice.

Because nothing is paid, the usual brake is gone. A ceiling decides what may be given away instead (14 - Vote / MaxPrice, 250 by default). Anything dearer stays in the shop, where somebody has to pay for it. A raid is never put to a vote, and neither is anything behind a boss your world has not beaten. During a boss fight, and while you are dead, the round waits.

Someone who was just asked on whom? for a raid of their own is answering that question — both use the same letters, and being spoken to directly wins. ae vote opens a round now instead of waiting half an hour.

A bounty on your head

There is always one. Whoever puts you on the ground collects it: the viewer whose name the creature carries, or the viewer who bought it from the shop. If both are true, the name wins — the buyer already had their money's worth, and the soul in the body did the deed. Die of cold, of a fall, or to some wild thing nobody owns, and nobody is paid.

100 points by default (7 - Points / BountyPoints), with a five minute gap per viewer so a bought troll standing on your gravestone does not become a cash machine. ae bounty shows the state of it.

Earned epithets

Viewers earn a second name and wear it above the creature, on the tablet and in chat: Mitzikatz Trollborn, Kevin Bonebreaker, somebody else Shortbreath.

It is not a random generator, it is a rank. Lasting a long time, hunting well, coming back again and again, the shape of your longest run — and the occasional embarrassment. Someone who has earned three wears the rarest of them. !title tells a viewer what they hold and the name is appended rather than declined, the way a Norseman came by one: Harald Bluetooth, Erik Bloodaxe. Turn it off under 5 - Display / ShowEpithets.

Hugin brings the news

Subs, renewals, gifted subs, raids, bits and new followers are announced by Valheim's own raven: he flies in, lands beside you and says it. Each kind has a switch under 12 - Hugin, plus a floor for bits (MinimumBits, default 100).

Follows arrive a little differently. Twitch puts every other event on the chat connection that is open anyway, but not follows — so the mod asks Twitch for the newest followers every 30 seconds instead. That needs the moderator:read:followers permission: if you signed in before version 0.24, disconnect and connect once under Escape → Allfather's, or the log will tell you why Hugin stays quiet. Whatever was already on the list when the game started is not announced.

It works with the game's tutorials switched off. A batch of gifted subs is announced once with its total rather than fifty times, and at least GapSeconds (15) pass between two announcements — what falls inside is dropped rather than queued.

Every wording exists in a dozen variants, serious and dry mixed, and the kind is named in brackets so a flavourful line is still legible at a glance:

{viewer} has picked up your trail. (Follow)

Try it without waiting for a real sub: ae raven sub, ae raven raid 42, ae raven cheer 500, ae raven follow.

Hugin lands and calls out a new follower Hugin's message after pressing E

On your screen

Messages along the edge of the screen

The feed in a corner lists who got a creature and whose creature died. Corner, position, width, font size, colour, shadow, line count, lifetime and fade are all configurable in section 6. Position is given as a percentage of the screen, so the same setting lands in the same place on any monitor.

Scope decides what you see: All shows every streamer in the group, OwnOnly just your own channel. Players without the mod notice nothing — Valheim discards unknown network messages silently, so it works over a normal dedicated server too.

Preview and PreviewAnimation at the top of section 6 let you set the feed up without waiting for real chat activity; preview lines are local only and are switched off automatically when you enter a world.

The soul count on the outer edge of the feed says how many souls are out there and how many are waiting. Every client reports only its own channel every three seconds and all of them add up, so a creature is counted once even when two players are looking at it.

Map pins mark every creature carrying a viewer's name, and they follow it rather than sitting where it once was. Nothing is written to your save: when the creature dies, wanders off or unloads, the pin is gone. MapPinLimit (20) caps it.

A sound when a soul moves in. The creature makes its own alert call — the one it makes when it notices you. Nothing is shipped or hard-coded; a creature Valheim adds later brings its own. It plays at the creature, not at you, so it gives away the direction. SoundMinGapSeconds (1.5) keeps several arrivals from becoming noise.

And every couple of minutes, one of them calls out. CallOutMinutes (2) picks a random named creature and plays that same call, so you remember they are out there. 0 turns it off.

Several streamers at once

Expressly supported. Everyone signs in with their own account in their own config. Each instance only names creatures that player owns, so two streamers never collide. A viewer writing in both chats still gets only one creature. ColorPerChannel gives each channel its own colour:

ColorPerChannel = mychannel:#9146FF,herchannel:#FF69B4

Anyone who has the mod but does not stream simply sees all the names, and no connection to Twitch is made at all.

Settings worth knowing

Setting Default Meaning
Channel (empty) Your Twitch channel. Empty = display only
Language Game Follows Valheim: German → German, everything else → English
Paused false Stop assigning without dropping the Twitch connection
Radius 30 Search radius in metres
IncludeTamed true Name tamed animals too
IncludeBosses false Name bosses too
PrefabBlacklist (empty) e.g. Crow,Seagull,Fish1
NameFormat {creature} ({viewer}) Display format
ViewerColor #FFCB52 Colour of the name
ColorPerChannel (empty) One colour per channel
RebirthCooldownSeconds 60 Pause after a death before a new creature
SoundOnAssign true The creature calls out when a soul moves in
CallOutMinutes 2 How often a named creature calls out
MapPins / MapPinLimit true / 20 Pins for named creatures
AnnounceDeaths / AnnounceWaiting true Chat messages for deaths and queueing
ReminderMinutes 15 How often chat is reminded the mod is running
Points → PresencePoints 10 Points for watching
Points → ChatBonusPoints 5 Points for writing
Points → PointsPerFollow 150 Points for a new follower
Points → PointsPerSubTier1 500 Points for a subscription
Points → OnlyWhenLive true Only earn while live
Shop → Enabled true The shop at all
Sections 9–11 Each category's switch, and its table of what is for sale
Section 12 Which events Hugin announces
Section 13 The tablet: what the stone costs, the key, the size

Everything technical — TriggerMode, cooldowns, bot filters, feed Scope, font choice — sits under Show advanced in the Allfather's window.

"Reset all creatures" under 1 - General takes the name off every loaded creature, not just the ones in range, and lets every viewer have another one. Creatures belonging to another player are left alone. ae clear all does the same; ae clear <name> frees a single viewer.

The mod binds one key: F7 opens the tablet, and 13 - Chronicle / BoardKey moves it.

Console commands

Open the console with F5. No devcommands needed.

Command What it does
ae status Connection, queue, creatures free for a name
ae nearby Nearby creatures and why they do (not) qualify
ae test [name] Give the nearest free creature a test name
ae fake <user> [text] Simulate a chat message, e.g. ae fake kevin !soul
ae clear [name|all] Remove one name or all of them
ae feed Play the feed test sequence
ae fonts Which fonts the Allfather's windows use
ae sound Play the nearest creature's alert call
ae raven [<sub|resub|gift|gifts|raid|cheer|follow> [n]] Send Hugin with made-up news, or show what he is holding
ae records [demo <n>] Open the tablet, or fill it with invented names
ae follows [reset <login>] State of the follower check; reset lets one viewer count as new again
ae bounty [reset <login>] What the bounty pays and who is cooling down
ae vote Open a round of voting now
ae points [<login> [amount]] Balances; a negative amount takes points away
ae shop [verify|creatures|<command>] Shop overview, name check, which creatures can be added and why not, or run an action free
ae tier <0-7|off> Pretend the world is at boss tier N
ae twitch [connect|disconnect] Manage the Twitch sign-in
ae debug [on|off] Verbose logging
ae pause / ae resume Stop and resume assigning
ae reconnect Reconnect to Twitch

ae points kevin 2000 is the quick way to test something without waiting five minutes per payout. ae tier 0 shows the "not unlocked yet" answer even in a finished world — it only pretends, and never writes to your world's global keys.

Trouble

  • Nothing happens. ae status shows whether the connection is up and whether any creature nearby is free for a name. free for a name: 0 means the bodies are the problem, not the mod.
  • No connection. The link to Twitch is always encrypted and the certificate is always checked; there is deliberately no setting for that. If the log shows a certificate error, Twitch probably changed CA — please report it.
  • More detail. ae debug on logs every chat message and every assignment attempt. It resets when the game restarts.

Good to know

  • The name appears above the head as soon as you aim at the creature — Valheim's normal behaviour for the enemy HUD. Bosses are always visible.
  • Names from chat are reduced to A-Z, a-z, 0-9 and _, so nobody can smuggle rich text like <size=500> in through their display name.
  • Credentials are never written to the log, the feed or chat.
  • The mod writes exactly two kinds of message into your chat on its own: the greeting when it connects, and the reminder every ReminderMinutes. Everything else is an answer to something a viewer said.

Deutsch

Deine Twitch-Zuschauer bekommen Kreaturen in Valheim. Schreibt jemand im Chat, hängt sich sein Name an einen zufälligen Gegner in deiner Nähe und steht über dessen Kopf:

Troll (xXKevinXx)

Ein Hirsch im Winterwald, über ihm der Name Mitzikatz

Stirbt die Kreatur, wird die Seele wieder frei — und der Zuschauer bekommt beim nächsten Schreiben eine neue Gestalt. Ein Befehl ist nicht nötig: Jede Nachricht genügt, und niemand hat je mehr als eine Kreatur gleichzeitig.

Was drin ist

  • Zuschauer werden Kreaturen — eine Nachricht im Chat, der Name über einem Kopf
  • Seelen wandern mit — läufst du weiter, zieht die Seele in eine Kreatur bei dir
  • Punkte fürs Zusehen — auch die Stillen verdienen, nicht nur die Lauten
  • Ein Shop, der mit deiner Welt aufgeht — Essen und Hilfe, oder Wildschweine und ein Überfall auf dein Lager
  • Hugin meldet — Follows, Abos, Geschenke, Raids und Bits, laut im Spiel
  • Eine Ruhmeshalle — wer am längsten überlebt hat und als was, auf einer Tafel, die du baust
  • Der Chat stimmt ab — drei Dinge am Rand, dreissig Sekunden, A B oder C, und es kostet nichts
  • Ein Kopfgeld auf dich — wer dich zu Boden bringt, kassiert
  • Verdiente Beinamen — Mitzikatz Trollgeboren, Kevin Knochenbrecher, jemand anders Kurzatem
  • Eine Twitch-Erweiterung — der Shop über dem Video, bald verfügbar; der Chat kann dasselbe

Alles darunter ist Detail. Wenn du es nur zum Laufen bringen willst, genügt der nächste Abschnitt.

Kurzanleitung

  1. Mod bei allen installieren, die die Namen sehen sollen.
  2. Nur der Streamer richtet unter 2 - Twitch seinen Kanal ein — entweder mit Anmeldung (empfohlen) oder nur mit dem Kanalnamen.
  3. Alle anderen lassen die Sektion leer und sehen die Namen einfach mit.

Eingestellt wird im Spiel: Escape drücken und auf Allfather's klicken. Das Fenster bringt die Mod selbst mit — kein Configuration Manager, nichts weiter zu installieren. Was du dort änderst, wirkt sofort und wird in BepInEx/config/sohneg.AllfathersEye.cfg gespeichert.

Das Pausenmenü von Valheim mit dem zusätzlichen Eintrag Allfather's

Anmelden, oder nicht

Nur Kanalname Angemeldet
Namen, Feed, Todesmeldung ✅ ✅
Mehrere Streamer gleichzeitig ✅ ✅
Die Mod antwortet im Chat ❌ ✅
Punkte, Shop, Chatbefehle ❌ ✅
Die Twitch-Erweiterung ❌ ✅

Die Mod liest den Chat anonym mit — dafür braucht Twitch kein Konto. Zum Schreiben braucht sie eins. Mehr ist der Unterschied nicht.

Unter 2 - Twitch auf „Mit Twitch verbinden". Twitch öffnet sich im Browser, und im Allfather's-Fenster steht ein Code, den du dort eingibst.

Fürs Streamen: Zeig diesen Code nicht — auch nicht die Twitch-Seite, denn er steht ebenfalls in der Adresszeile. Die Mod zeigt ihn deshalb nur im Allfather's-Fenster, nie im Feed, in der Konsole oder im Log.

Die Zugangsdaten liegen in BepInEx/config/sohneg.AllfathersEye.auth.json, einer eigenen Datei. Wenn du deine Config weitergibst, lass diese weg.

Angemeldet wird Channel aus deinem Konto gesetzt und auch benutzt, selbst wenn im Feld etwas anderes steht — ein Tippfehler soll die Begrüßung der Mod nicht unter deinem Namen in einen fremden Chat setzen.

Befehle für deine Zuschauer

Deine Zuschauer sehen den Namen nicht; er schwebt auf deinem Bildschirm. Also fragen sie nach:

kevin: !seele Allfather's Eye: @kevin deine Seele steckt in: Troll

Befehl Was er tut
!seele / !soul In welcher Kreatur die eigene Seele steckt
!punkte / !vp Der eigene Punktestand
!titel / !beiname Der verdiente Beiname, und was sie sonst noch haben
!ae-hilfe / !ae-help Die Befehlsliste
!ae-help-en / !ae-help-de Antwort in einer bestimmten Sprache erzwingen
!shop, !shop segen|zorn|schabernack Was es gibt, mit Preisen

Moderatoren und du selbst haben zusätzlich !ae-give <name> <menge>, !ae-take <name> <menge> und !ae-pause / !ae-resume. Versucht ein normaler Zuschauer einen davon, passiert gar nichts — eine Fehlermeldung würde nur verraten, dass es den Befehl gibt. Geprüft wird über das Twitch-Abzeichen, nicht über eine Namensliste.

Beide Sprachvarianten werden immer verstanden, egal was du eingestellt hast; nur die Antwort richtet sich nach deiner Sprache. Ein reiner Befehl löst keine Namensvergabe aus — wer fragt, verbraucht also nicht seine erste Nachricht.

Geantwortet wird als echte Twitch-Reply, höchstens alle 30 Sekunden pro Zuschauer und Befehl (CommandCooldownSeconds), insgesamt 15 Nachrichten je 30 Sekunden.

Gerade nichts frei? Dann kommt der Zuschauer in die Warteschlange und erfährt das nach drei Sekunden — lange genug, dass eine Wiese voller Kreaturen nie eine überflüssige „warte bitte"-Meldung erzeugt. Wird eine frei, hört er es wieder. Beides aus mit AnnounceWaiting.

Stirbt die Kreatur, sagt es die Mod dem Zuschauer direkt, mit dem Namen des Wikingers, falls einer zugeschlagen hat (AnnounceDeaths). Geschrieben wird nur in deinen eigenen Kanal.

Valheim-Punkte

Zuschauer verdienen VP dafür, dass sie da sind.

Wofür Standard
Zusehen 10 VP alle 5 Minuten
Eine Nachricht schreiben 5 VP, höchstens alle 10 Minuten

Macht 2,5 VP pro Minute für jemanden, der zusieht und ab und zu schreibt. Die Gewichtung ist Absicht: Der Hauptteil kommt vom Zuschauen, damit die Stillen nicht leer ausgehen.

Stille Zuschauer zählen nur, wenn die Mod Twitch fragen darf, wer im Chat sitzt. Wer sich vor dieser Berechtigung angemeldet hat, muss sich einmal neu verbinden — ein Scope lässt sich an ein bereits ausgestelltes Token nicht nachträglich anhängen. Bis dahin heißt „anwesend" nur „hat in den letzten 15 Minuten geschrieben" (PresenceWindowMinutes).

Abos, Bits, Raids, verschenkte Abos und Follows zahlen ebenfalls:

Ereignis Punkte
Follow 150 Etwa eine Stunde Zuschauen
Abo oder Verlängerung 500 / 1000 / 2500 Nach Stufe; Prime zählt als Stufe 1
Verschenkte Abos Anzahl × Stufe An den Schenker
Bits je 1 100 Bits, 100 Punkte
Raid 10 je Zuschauer Höchstens 2000

Jedes davon ist eine eigene Einstellung unter 7 - Points, 0 schaltet eine Belohnung ab. Anders als das Zuschauen zahlen diese Ereignisse auch außerhalb der Sendezeit — wer eine Stunde nach Streamende abonniert, hat trotzdem abonniert.

Regeln, die man nicht erwartet: Die erste Sichtung startet nur die Uhr und zahlt nichts; verpasste Intervalle werden nicht nachgezahlt; ein reiner Befehl verdient nichts, zählt aber als anwesend; Bots verdienen nie (IgnoredUsers) und du selbst auch nicht (BroadcasterEarns); standardmäßig wird nur verdient, während du live bist (OnlyWhenLive).

Die Punkte liegen in BepInEx/config/sohneg.AllfathersEye.points.<kanal>.json, gespeichert jede Minute und beim Beenden, atomar und mit den letzten fünf Ständen als Sicherung. Wer keine Punkte hat und 30 Tage nicht gesehen wurde, wird vergessen (ForgetAfterDays). Wer Punkte hat, bleibt — die sind verdient.

Der Shop

Jeder Kauf trifft dich — den Streamer, in dessen Chat er ausgelöst wurde.

Odins Segen

Befehl Was kommt Preis Frei ab
!holz / !wood 20 Holz 50 sofort
!essen / !food 3 Beerenmarmelade 75 sofort
!heilen / !heal volle Heilung 150 sofort
!ausgeruht / !rested der Ausgeruht-Bonus 100 sofort
!kupfer / !copper 5 Kupfererz 100 Eikthyr
!zinn / !tin 5 Zinnerz 100 Eikthyr
!eisen / !iron 5 Eisenschrott 200 Der Uralte
!silber / !silver 5 Silbererz 300 Knochenwanst
!schwarzmetall / !blackmetal 5 Schwarzmetall-Schrott 400 Moder

Die Erze folgen der Welt und nicht dem Geldbeutel: Silber vor Knochenwanst wäre ein Geschenk, das niemand einschmelzen kann.

Odins Zorn

Befehl Was kommt Preis Frei ab
!nixen / !necks 4 Nixen 50 sofort
!gräulinge / !greylings 4 Gräulinge 60 sofort
!eber / !boar 3 Wildschweine 75 sofort
!grauzwerge / !greydwarfs 4 Grauzwerge 120 Eikthyr
!skelette / !skeletons 3 Skelette 140 Eikthyr
!überfall / !raid ein echter Valheim-Überfall 500 Eikthyr
!surtlinge / !surtlings 3 Surtlinge 180 Der Uralte
!draugr 3 Draugr 200 Der Uralte
!troll ein Troll 350 Der Uralte
!wölfe / !wolves 3 Wölfe 300 Knochenwanst
!steingolem / !golem ein Steingolem 450 Knochenwanst
!fulings / !goblins 4 Fulings 400 Moder
!todeskitos / !deathsquitos 2 Todeskitos 450 Moder
!sucher / !seekers 3 Sucher 600 Yagluth
!gjall ein Gjall 800 Yagluth

Eine Leiter parallel zur Welt: Was Odin dir schickt, wächst mit dir. Eine frische Welt zeigt hier drei Einträge, eine durchgespielte alle fünfzehn. Der Überfall hat weiter unten einen eigenen Abschnitt.

Lokis Schabernack

Befehl Was kommt Preis
!hasen / !hares 6 Hasen 25
!ferkel / !piglets 5 Ferkel 35
!hühner / !chickens 8 Hühner 40
!hirsche / !deer 5 Hirsche 40
!nass / !wet du wirst nass 50
!kalt / !cold dir wird kalt 60
!rauch / !smoked eine Ladung Rauch 70
!steine / !stones Inventar voll Steine 150

Die Ferkel sind der lange Witz: harmlos jetzt, eine Herde Wildschweine in zwanzig Minuten.

Dein eigener Shop

Die Tabellen oben sind, womit ein Shop anfängt, nicht wie er bleiben muss. Unter Escape → Allfather's → Allfather's Eye ist jede Kategorie eine Tabelle, die du während des Spielens ändern kannst:

Odins Segen als Tabelle, darunter die Auswahl für eine neue Zeile

  • Preis, Anzahl, Befehle, ab welchem Boss, an/aus — für jede Zeile, auch die eingebauten. Getippte Werte gelten mit Enter.

  • − am Ende einer Zeile nimmt sie heraus. Ein paar Sekunden lang gibt es Rückgängig.

  • + Hinzufügen öffnet eine Auswahl mit fünf Tabs:

    • Items — jedes Item, das dein Spiel kennt, auch aus anderen Mods: ins Inventar in der eingestellten Anzahl, Inventar füllen wie die Steine, oder fallen lassen — alles davon aus deinem Inventar vor deine Füße. Fallen gelassen, nicht gelöscht; du kannst es wieder aufheben.
    • Kreaturen — jede Kreatur außer Bossen, Wassertieren, Beschwörungen und dem, was das Spiel noch nicht veröffentlicht hat. Monster können feindlich sein (auf dich gehetzt, in Bossnähe zurückgehalten wie Odins Zorn) oder friedlich (nur hingestellt).
    • Effekte — jeder Effekt, den das Spiel kennt: die Wärme eines Mets, Ausgeruht, eine Wächterkraft oder etwas weniger Willkommenes.
    • Wetter — jedes Wetter, das die Biome deiner Welt haben, so viele Minuten wie unter Anzahl steht, nur auf deinem Bildschirm. Nicht das der Aschenlande (ihr Funkenregen setzt Holz in Brand) und nicht das des Hohen Nordens.
    • Spezial — Hochwerfen (senkrecht nach oben, Anzahl = Meter, Fallschaden wie im Spiel, zurückgehalten wie Odins Zorn und nie in einer Abstimmung), Ausdauer und Eitr auffüllen, Ausrüstung reparieren und ein Zufalls-Item aus einem Topf, den du selbst befüllst.

    Nichts davon ist im Shop, bevor du es hinzufügst. Was andere Mods ins Spiel gebracht haben, ist zuerst ausgeblendet; der Schalter Andere Mods zeigt es, mit „Mod" markiert.

  • Standard setzt die Kategorie zurück, wie sie ausgeliefert wird. Es fragt zweimal, weil deine eigenen Zeilen dabei verschwinden.

Eine neue Zeile bekommt Befehle aus dem Namen, den dein Spiel zeigt — „Harz" wird zu !harz — und du kannst andere eintippen; einen Befehl, auf den schon etwas anderes hört, lehnt die Tabelle ab. Eigene Zeilen heißen im Chat und in der Erweiterung so, wie dein Spiel sie nennt, in der Sprache deines Spiels. Deine Preise von vor 0.30 werden übernommen.

Wie ein Kauf abläuft

Geprüft wird in dieser Reihenfolge: Shop offen → Aktion aktiv → nicht pausiert → freigeschaltet → Spieler da → (bei Zorn und allem Feindlichen) sicher → Platz → Wartezeiten → genug Punkte. Von dauerhaft nach vorübergehend, damit niemand „dir fehlen 40 VP" hört, obwohl die Aktion ohnehin abgeschaltet ist.

Erst abbuchen, dann ausführen, bei Fehlschlag sofort erstatten. Vorher abzubuchen verhindert, dass zwei gleichzeitige Käufe beide durchgehen. Geht die Aktion dann nicht, kommen die Punkte im selben Moment zurück und der Zuschauer erfährt, warum. Niemand bezahlt für nichts, und ein Fehlschlag startet keine Wartezeit.

Kreaturen landen 8 bis 15 Meter entfernt, auf festem Boden, nicht unter einem Dach und nicht in einer Spielerbasis — geprüft über Valheims eigene Werkbank- und Ward-Zonen. Nach 10 Minuten verschwinden sie wieder (SpawnLifetimeMinutes), außer sie kämpfen gerade — und gezähmte bleiben für immer: Wer ein gekauftes Huhn zähmt, behält es.

Die Schutzschranken

Regel Standard Wofür
ViewerCooldownSeconds 30 Eine Person steuert nicht den ganzen Stream
ActionCooldownSeconds 60 Dieselbe Sache nicht zweimal hintereinander
MischiefCooldownSeconds 120 Die billigste Kategorie verdrängt nicht alles andere
MaxHostileSpawns 8 Gekaufte Gegner gleichzeitig
MaxHarmlessSpawns 20 Eigene Obergrenze, damit Hühner kein Wildschwein blockieren
PauseWrathNearBoss an Kein Zorn während eines Bosskampfs
WrathMinHealthPercent 35 Kein Zorn unter 35 % Leben, beim Schwimmen oder in der Luft

Die letzten beiden gelten nur für den Zorn. Mitten im Bosskampf geheilt zu werden ist genau der Punkt; drei Wildschweine bei 20 % Leben sind ein Grabstein.

!ae-pause hält nur den Shop an — die Namensvergabe läuft weiter. Das größere Werkzeug ist Paused in Sektion 1.

Der Überfall

!überfall ist die einzige Aktion, die nicht auf deinem Rechner passiert. Ein Client kann einen Valheim-Überfall gar nicht starten, also fragt dein Spiel den Host, und der führt aus; Valheim repliziert ihn danach an jeden, auch an Mitspieler ohne Mod.

Der Host entscheidet nach seiner eigenen Config und seiner eigenen Wartezeit. Antwortet innerhalb von acht Sekunden niemand, gilt der Kauf als gescheitert und wird erstattet.

Sind mehrere Spieler in der Welt, fragt der Bot nach dem Ziel:

kevin: !überfall Allfather's Eye: @kevin auf wen? A) Mitzikatz B) Psycho kevin: !b

Antworten darf nur, wer gefragt wurde. Die Frage kostet nichts und verfällt nach 60 Sekunden stillschweigend.

Zwei Regler: RaidDifficulty (Standard Gentle) wählt einen Überfall eine Boss-Stufe unter deiner Welt — lästig, aber kein Wipe. RaidSeconds (Standard 60) beendet ihn vorzeitig; was schon da ist, bleibt, es kommt nur nichts mehr nach. 0 lässt ihn voll durchlaufen.

Welche Überfälle es gibt, entscheidet Valheim, nicht die Mod — dieselbe Prüfung, die das Spiel für seine eigenen benutzt. Sind mehrere Spieler in der Nähe, entscheidet der Schwächste: Ein Überfall zählt nur als verfügbar, wenn jeder dafür bereit ist.

WorldEventCooldownSeconds (Standard 600) zählt der Host für die ganze Welt, und AllowOtherChannels entscheidet, ob die Zuschauer eines anderen Streamers in deiner Welt Welt-Ereignisse auslösen dürfen.

Bevor du live gehst: ae shop verify

Item- und Kreaturnamen liegen in Valheims Asset-Bundles und lassen sich beim Bauen nicht prüfen. Ein falscher würde sich zeigen, indem ein Zuschauer 100 VP für nichts bezahlt.

 ok   !wood (wood) -> 20 x Wood
 FAIL !copper (copper): item 'CopperOre' does not exist

Einmal nach jedem Valheim-Update laufen lassen.

Die Twitch-Erweiterung

Noch in Entwicklung. Sie ist gebaut und sie läuft, aber Twitch hat sie noch nicht freigegeben — sie lässt sich heute also noch nicht auf einem Kanal installieren. Sie kommt bald, und sie ist ohnehin freiwillig: Der Chat kann alles, was das Overlay kann.

Zuschauer können ihre Punkte in einem Fenster über deinem Stream ausgeben statt im Chat zu tippen. Es zeigt den Punktestand, die drei Kategorien und was was kostet — Knöpfe sind still, wenn man es sich nicht leisten kann, während eine Abklingzeit läuft, oder bis der Boss fällt, der sie freischaltet. Über jedem Reiter steht, wie viel deine Welt davon geöffnet hat: 4/9.

Sie braucht die Anmeldung und die installierte Erweiterung auf deinem Kanal. Das Backend findet die Mod von allein; einzustellen gibt es nichts außer einer Statuszeile unter 2 - Twitch, die sagt, ob es erreichbar ist.

Ein Zuschauer muss einmal seine Twitch-Identität freigeben und einmal im Chat geschrieben haben — Punkte gehören zu einem Chat-Namen, und nur eine Chatnachricht verbindet den mit einer Twitch-Id.

allfatherseye.sohneg.ch führt bebildert durch die Einrichtung, auf Deutsch und Englisch, und dort steht auch die Datenschutzerklärung, auf die Twitch aus der Erweiterung heraus verlinkt.

Darauf aufmerksam machen. Wer mitten im Stream dazukommt, hat die Begrüßung nie gesehen. Deshalb erinnert der Bot alle ReminderMinutes (15) mit wechselndem Wortlaut daran, und im Paket liegt twitch-panel.md mit fertigen Texten für die Panels unter deinem Stream, auf Deutsch und Englisch — drei kleine Panels oder eines kompakt, mit allen Befehlen und Preisen.

Die Chronik

Die Mod führt pro Kanal eine Ruhmeshalle: Überlebenskünstler — der längste Lauf am Stück, von der Benennung bis zum Tod, samt der Gestalt, in der sie gestorben sind — und Jäger, wie oft ihre Kreatur einen Spieler erledigt hat. Ein Umzug in eine neue Kreatur beendet einen Lauf nicht; sonst würde gemessen, wie weit du gelaufen bist, und nicht, wie lange der Zuschauer durchgehalten hat.

Zum Lesen baust du Allvaters Tafel aus dem Baumenü des Hammers, gehst hin und drückst E. Sie kostet zehn Stein und braucht keine Werkbank. F7 öffnet dieselbe Tafel, ohne hinzulaufen.

Der Chronikstein und die geöffnete Tafel

Die Mod bringt kein eigenes 3D-Modell mit, der Stein ist also eine Kopie eines Objekts aus Valheim — welches, entscheidet 13 - Chronicle / BasePrefab: guard_stone (der Schutzwall-Runenstein, Standard), sign oder itemstand. Ändern, Welt neu laden, anderer Stein.

ae records demo 12 füllt die Tafel mit erfundenen Namen, damit du siehst, wie sie aussieht, bevor jemand echte Rekorde hat. Von einer Vorschau wird nichts gespeichert.

Der Chat stimmt ab

Alle halbe Stunde erscheint rechts ein schmales Panel mit drei Dingen darauf, und alle haben dreissig Sekunden, um A, B oder C zu schreiben. Mal gemischt, mal nur Segen, mal nur Zorn. Die Balken füllen sich, während die Uhr läuft, und was gewinnt, passiert.

Abstimmen kostet nichts, und genau das ist der Sinn: Es ist der einzige Moment am Abend, an dem jemand, der vor zwei Minuten dazugekommen ist, genauso viel zählt wie der Stammgast, der den ganzen Abend Punkte gesammelt hat. Ein Zuschauer, eine Stimme — umentscheiden darf man sich, zweimal rufen nicht.

Weil nichts bezahlt wird, fällt die übliche Bremse weg. Stattdessen entscheidet eine Obergrenze, was verschenkt werden darf (14 - Vote / MaxPrice, standardmässig 250). Was mehr kostet, bleibt im Shop, wo jemand dafür bezahlen muss. Ein Überfall steht nie zur Wahl, und was hinter einem Boss liegt, den deine Welt nicht erlegt hat, ebenso wenig. Während eines Bosskampfes und solange du tot bist, wartet die Runde.

Wer gerade persönlich gefragt wurde, auf wen? sein eigener Überfall gehen soll, antwortet dieser Frage — beide nutzen dieselben Buchstaben, und wer direkt angesprochen wurde, hat Vorrang. ae vote öffnet sofort eine Runde, statt eine halbe Stunde zu warten.

Ein Kopfgeld auf deinen Kopf

Es steht immer eines. Wer dich zu Boden bringt, kassiert: der Zuschauer, dessen Name die Kreatur trägt, oder wer sie im Shop gekauft hat. Trifft beides zu, gewinnt der Name — der Käufer hat sein Geld schon in Spass umgesetzt, und die Seele im Körper hat die Tat begangen. Stirbst du an Kälte, an einem Sturz oder an einem wilden Vieh, das niemandem gehört, zahlt niemand.

Standardmässig 100 Punkte (7 - Points / BountyPoints), mit fünf Minuten Abstand pro Zuschauer, damit ein gekaufter Troll auf deinem Grabstein kein Bankautomat wird. ae bounty zeigt den Stand.

Verdiente Beinamen

Zuschauer verdienen sich einen zweiten Namen und tragen ihn über der Kreatur, auf der Tafel und im Chat: Mitzikatz Trollgeboren, Kevin Knochenbrecher, jemand anders Kurzatem.

Das ist kein Zufallsgenerator, sondern ein Rang. Lange durchhalten, gut jagen, immer wieder zurückkommen, die Gestalt der längsten Runde — und die eine oder andere Peinlichkeit. Wer drei verdient hat, trägt den seltensten. !titel sagt einem Zuschauer, was er hat.

Angehängt statt vorangestellt, so wie ein Nordmann zu einem kam: Harald Blauzahn, Erik Blutaxt. Abschaltbar unter 5 - Display / ShowEpithets.

Hugin bringt die Neuigkeiten

Abos, Verlängerungen, verschenkte Abos, Raids, Bits und neue Follower meldet Valheims eigener Rabe: Er fliegt heran, setzt sich neben dich und sagt es. Pro Art gibt es einen Schalter unter 12 - Hugin, dazu eine Untergrenze für Bits (MinimumBits, Standard 100).

Follows kommen auf einem anderen Weg. Alle übrigen Ereignisse schickt Twitch über die Chat-Verbindung mit, die ohnehin offen ist — Follows nicht. Die Mod fragt Twitch deshalb alle 30 Sekunden selbst nach den neuesten Followern. Dafür braucht sie die Berechtigung moderator:read:followers: Wer sich vor Version 0.24 angemeldet hat, muss sich unter Escape → Allfather's einmal trennen und neu verbinden, sonst sagt das Log, warum Hugin schweigt. Was beim Spielstart schon auf der Liste stand, wird nicht gemeldet.

Es funktioniert auch bei abgeschalteten Tutorials. Ein Schwung verschenkter Abos wird einmal mit seiner Gesamtzahl gemeldet statt fünfzig Mal, und zwischen zwei Meldungen liegen mindestens GapSeconds (15) — was dazwischen ankommt, fällt weg statt sich anzustauen.

Jede Meldung hat ein Dutzend Fassungen, ernst und spöttisch gemischt, und die Art steht in Klammern dahinter, damit eine schöne Zeile trotzdem lesbar bleibt:

{viewer} hat deine Fährte aufgenommen. (Follow)

Ausprobieren, ohne auf ein echtes Abo zu warten: ae raven sub, ae raven raid 42, ae raven cheer 500, ae raven follow.

Hugin landet und ruft einen neuen Follower aus Hugins Nachricht nach dem Druck auf E

Auf deinem Bildschirm

Meldungen am Bildschirmrand

Der Feed in einer Ecke meldet, wer eine Kreatur bekommen hat und wessen Kreatur gestorben ist. Ecke, Position, Breite, Schriftgröße, Farbe, Schatten, Zeilenzahl, Lebensdauer und Ausblenden sind in Sektion 6 einstellbar. Die Position wird in Prozent des Bildschirms angegeben, damit dieselbe Einstellung auf jedem Monitor am selben Fleck landet.

Scope bestimmt, was du siehst: All zeigt alle Streamer der Gruppe, OwnOnly nur deinen eigenen Kanal. Mitspieler ohne die Mod merken nichts davon — Valheim verwirft unbekannte Netzwerknachrichten kommentarlos, es geht also auch über einen normalen Dedicated Server.

Preview und PreviewAnimation ganz oben in Sektion 6 lassen dich den Feed einrichten, ohne auf echten Chat zu warten; Vorschauzeilen sind rein lokal und schalten sich beim Betreten einer Welt automatisch ab.

Die Seelen-Anzeige am äußeren Rand des Feeds sagt, wie viele Seelen unterwegs sind und wie viele warten. Jeder Client meldet alle drei Sekunden nur seinen eigenen Kanal und alle addieren, damit eine Kreatur einmal zählt, auch wenn zwei Spieler daneben stehen.

Kartenmarker zeigen jede Kreatur mit einem Zuschauernamen, und sie folgen ihr, statt liegen zu bleiben, wo sie mal war. In deinen Spielstand wird nichts geschrieben: Stirbt die Kreatur, zieht sie davon oder wird sie entladen, ist der Marker weg. MapPinLimit (20) deckelt das Ganze.

Ein Ton beim Einzug. Die Kreatur gibt ihren eigenen Alarmlaut von sich — denselben, den sie macht, wenn sie dich bemerkt. Nichts davon ist mitgeliefert oder fest eingetragen; eine Kreatur, die Valheim später hinzufügt, bringt ihren selbst mit. Gespielt wird bei der Kreatur, nicht bei dir, damit er die Richtung verrät. SoundMinGapSeconds (1,5) verhindert, dass mehrere Einzüge zu Lärm werden.

Und alle paar Minuten meldet sich eine. CallOutMinutes (2) wählt eine zufällige benannte Kreatur und spielt denselben Laut, damit du weißt, dass sie da draußen sind. 0 schaltet es ab.

Mehrere Streamer gleichzeitig

Ausdrücklich vorgesehen. Jeder meldet sich in seiner eigenen Config mit seinem eigenen Konto an. Jede Instanz benennt nur Kreaturen, die dem jeweiligen Spieler gehören, so kommen sich zwei Streamer nicht in die Quere. Ein Zuschauer, der in beiden Chats schreibt, bekommt trotzdem nur eine Kreatur. Mit ColorPerChannel bekommt jeder Kanal seine eigene Farbe:

ColorPerChannel = meinkanal:#9146FF,ihrkanal:#FF69B4

Wer die Mod hat, aber nicht streamt, sieht einfach alle Namen mit; es wird dann gar keine Verbindung zu Twitch aufgebaut.

Wichtige Einstellungen

Einstellung Standard Bedeutung
Channel (leer) Dein Twitch-Kanal. Leer = nur Anzeige
Language Game Folgt Valheim: Deutsch → Deutsch, alles andere → Englisch
Paused false Vergabe anhalten, ohne die Twitch-Verbindung zu trennen
Radius 30 Suchradius in Metern
IncludeTamed true Auch gezähmte Tiere benennen
IncludeBosses false Auch Bosse benennen
PrefabBlacklist (leer) z. B. Crow,Seagull,Fish1
NameFormat {creature} ({viewer}) Anzeigeformat
ViewerColor #FFCB52 Farbe des Namens
ColorPerChannel (leer) Farbe je Kanal
RebirthCooldownSeconds 60 Pause nach einem Tod bis zur neuen Kreatur
SoundOnAssign true Kreatur meldet sich, wenn eine Seele einzieht
CallOutMinutes 2 Wie oft sich eine benannte Kreatur meldet
MapPins / MapPinLimit true / 20 Marker für benannte Kreaturen
AnnounceDeaths / AnnounceWaiting true Chatmeldungen bei Tod und Warteschlange
ReminderMinutes 15 Wie oft der Chat erinnert wird, dass die Mod läuft
Punkte → PresencePoints 10 Punkte fürs Zusehen
Punkte → ChatBonusPoints 5 Punkte fürs Schreiben
Punkte → PointsPerFollow 150 Punkte für einen neuen Follower
Punkte → PointsPerSubTier1 500 Punkte für ein Abo
Punkte → OnlyWhenLive true Nur verdienen, während du live bist
Shop → Enabled true Den Shop überhaupt
Sektionen 9–11 Schalter je Kategorie, und ihre Tabelle mit allem, was es zu kaufen gibt
Sektion 12 Welche Ereignisse Hugin meldet
Sektion 13 Die Tafel: was der Stein kostet, Taste, Größe

Alles Technische — TriggerMode, Wartezeiten, Bot-Filter, Feed-Scope, Schriftwahl — steht im Allfather's-Fenster unter „Erweiterte anzeigen".

„Alle Kreaturen zurücksetzen" unter 1 - General nimmt allen geladenen Kreaturen den Namen ab, nicht nur denen in Reichweite, und lässt danach jeden Zuschauer wieder eine bekommen. Kreaturen, die einem anderen Spieler gehören, bleiben unberührt. Dasselbe macht ae clear all; ae clear <Name> befreit einen einzelnen Zuschauer.

Die Mod belegt eine Taste: F7 öffnet die Tafel, verschieben lässt sie sich unter 13 - Chronicle / BoardKey.

Konsolenbefehle

Konsole mit F5 öffnen. Kein devcommands nötig.

Befehl Was es tut
ae status Verbindung, Warteschlange, freie Kreaturen
ae nearby Kreaturen in der Nähe und warum sie (nicht) passen
ae test [Name] Gibt der nächsten freien Kreatur einen Testnamen
ae fake <user> [text] Simuliert eine Chatnachricht, z. B. ae fake kevin !seele
ae clear [Name|all] Einen Namen oder alle entfernen
ae feed Spielt die Feed-Testsequenz ab
ae fonts Welche Schriften die Allfather's-Fenster benutzen
ae sound Spielt den Alarmlaut der nächsten Kreatur
ae raven [<sub|resub|gift|gifts|raid|cheer|follow> [n]] Schickt Hugin mit erfundener Nachricht, oder zeigt, was er gerade hält
ae records [demo <n>] Öffnet die Tafel, oder füllt sie mit erfundenen Namen
ae follows [reset <login>] Stand der Followersuche; reset lässt einen Zuschauer wieder als neu zählen
ae bounty [reset <login>] Was das Kopfgeld zahlt und wer gerade gesperrt ist
ae vote Öffnet sofort eine Abstimmung
ae points [<login> [menge]] Punktestände; negative Menge zieht ab
ae shop [verify|creatures|<befehl>] Übersicht, Namensprüfung, welche Kreaturen wählbar sind und warum nicht, oder Aktion ohne Kosten
ae tier <0-7|off> Tut so, als wäre die Welt auf Boss-Stufe N
ae twitch [connect|disconnect] Twitch-Anmeldung steuern
ae debug [on|off] Ausführliches Log
ae pause / ae resume Vergabe anhalten / fortsetzen
ae reconnect Neu mit Twitch verbinden

ae points kevin 2000 ist der schnelle Weg, etwas zu testen, ohne fünf Minuten pro Auszahlung zu warten. ae tier 0 zeigt die „noch nicht freigeschaltet"-Antwort auch in einer durchgespielten Welt — es tut nur so und schreibt niemals in die globalen Schlüssel deiner Welt.

Probleme

  • Es passiert nichts. ae status zeigt, ob die Verbindung steht und ob überhaupt eine Kreatur in Reichweite frei ist. free for a name: 0 heißt: Es fehlen Körper, nicht die Mechanik.
  • Keine Verbindung. Die Verbindung zu Twitch ist immer verschlüsselt und das Zertifikat wird immer geprüft; dafür gibt es bewusst keine Einstellung. Steht im Log ein Zertifikatsfehler, hat Twitch vermutlich die CA gewechselt — dann bitte melden.
  • Mehr Details. ae debug on protokolliert jede Chatnachricht und jeden Vergabeversuch. Setzt sich beim Neustart zurück.

Gut zu wissen

  • Der Name über dem Kopf erscheint, sobald man die Kreatur anvisiert — Valheims normales Verhalten fürs Gegner-HUD. Bosse sind immer sichtbar.
  • Namen aus dem Chat werden auf A-Z, a-z, 0-9 und _ beschränkt, damit niemand über seinen Anzeigenamen Rich-Text wie <size=500> einschleusen kann.
  • Zugangsdaten landen nie im Log, nie im Feed und nie im Chat.
  • Die Mod schreibt von sich aus genau zwei Sorten Nachricht in deinen Chat: die Begrüßung beim Verbinden und die Erinnerung alle ReminderMinutes. Alles andere ist eine Antwort auf etwas, das ein Zuschauer gesagt hat.

CHANGELOG

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.Talk meldet 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 Talk den 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.