Wispbone
Your Wisplight's wisp is drawn to items you choose on the ground, in treasure chests and in things that drop them, and to dungeon portals, with a sound-only Wishbone-style ping. Client-side.Wispbone
The Wisplight and the Wishbone share an equipment slot, so you can't wear both. Wispbone gives your Wisplight a bit of the Wishbone's knack for finding things.
With the Wisplight equipped, your wisp is attracted to things you choose. The names in parentheses are examples of the IDs you'd
put in the Tracked setting (as many as you want, separated by commas):
- Items lying on the ground or in treasure chests and pickups, and nearby things that drop them. By
default that's soft tissue (
Softtissue), so it finds soft tissue on the ground, dvergr, dvergr crates, giant skulls in the Mistlands and anything else that drops it. Surtling cores (SurtlingCore) would find Surtlings and the core stands in burial chambers, and scrap iron (IronScrap) would have the wisp find the muddy scrap piles in sunken crypts, or chests with scrap iron. - Objects, such as Greydwarf nests (
Spawner_GreydwarfNest), raspberry bushes (RaspberryBush), burial chamber chests (TreasureChest_forestcrypt), or creatures like Seeker Soldiers (SeekerBrute). Anything that can be used up counts only while it can still be used: a chest while it holds something, a berry bush while it has berries. Everything else counts until it's gone. - Locations, such as burial chambers (
Crypt), sunken crypts (SunkenCrypt) or Haldor's camp (Vendor_BlackForest). For a dungeon, it leads you to the portal. - Dungeons with tracked items or objects inside. From outside, it leads you to the portal of a dungeon with
something you're tracking inside, such as a burial chamber with a ruby (
Ruby) in a chest or out on a pedestal, or a sunken crypt with (IronScrap) muddy scrap piles. Once you're in, it leads you to them. WithFindDungeonson, every dungeon's portal attracts the wisp, whatever is inside.
The distance from the nearest tracked object determines the wisp's behavior:
- Within range (40 m by default), the wisp drifts a few meters ahead of you toward the target, drifting to one side or the other depending on which direction the object is in.
- Within hover distance (8 m by default), it flies over and hovers above the target. That clears the mist around it, so you can see it.
- A ping (the Wishbone's sound, without its visual effect) speeds up as you get closer. It goes silent once you're right next to the target (4 m by default) and starts again if you walk away.
With nothing in range, the wisp behaves normally. All distances are measured in a straight line from your character to the target, not from the wisp. It checks again once a second, or right away when its target is gone or you go through a portal.
Inside a dungeon, the wisp only looks in that dungeon. A dungeon stops attracting the wisp once nothing you're tracking is left inside.
Installation
Install it with r2modman, Thunderstore Mod Manager or Gale. They also install its only requirement, BepInExPack Valheim.
To install by hand, install
BepInExPack Valheim first, then copy
Wispbone.dll from the zip's plugins folder into BepInEx/plugins.
Client-side
Only the player who installs it needs it, and it works on vanilla servers. The wisp's movement and the ping happen only on your machine.
Compatibility
It has been played alongside Jötunn, TeleportEverything, CraftFromContainers, ValheimPerformanceOverhaul, ValheimPerformanceOptimizations and several other mods without errors. It may not work with a mod that also moves the Wisplight's wisp, since both would be setting where it flies. Any mod that dynamically modifies creature/structure drops may also play poorly with this one, though not in a destructive way.
Configuration
BepInEx/config/com.adapperbadger.wispbone.cfg, or press F1 in-game with Configuration Manager installed.
| Section | Setting | Default | Description |
|---|---|---|---|
| General | Enabled |
true |
Turn the attraction and the ping on or off |
| Tracking | Tracked |
Softtissue |
Comma-separated item IDs (the names the spawn command uses), object IDs and location IDs. Items count on the ground and in treasure chests and pickups, and anything that drops one counts too. Objects count themselves: a chest only while it holds something, a pickable only while there's something to pick. A dungeon with a tracked item or object inside attracts the wisp to its portal. Locations count themselves, a dungeon by its portal. A name without its number covers every variant (Crypt covers Crypt2, Crypt3, Crypt4) |
| Tracking | FindDungeons |
false |
Every dungeon's portal attracts the wisp, as if every dungeon type were in Tracked |
| Tracking | IgnoredSources |
(empty) | Comma-separated source, object, chest or location IDs to skip, matched the same way as Tracked. Dverger* skips every kind of dvergr, an item's own ID skips it on the ground (chests and pickups holding it still count), and SunkenCrypt stops sunken crypts from attracting the wisp to their portals |
| Wisp | Range |
40 |
How close (meters) a target must be to attract the wisp (10 to 100) |
| Wisp | HoverDistance |
8 |
Within this distance the wisp hovers above the target. 0 = never (0 to 30) |
| Ping | Enabled |
true |
Wishbone-style ping, sound only |
| Ping | SilentWithin |
4 |
The ping stops within this distance of the target; the wisp keeps hovering. 0 = never go quiet (0 to 20) |
| Debug | LogDungeons |
false |
Log what the mod can see inside each dungeon that loads near you, at most one dungeon a second. See Finding IDs below |
| Debug | LogTimings |
false |
Every 30 seconds, log the mod's cost in frame time and FPS, broken down by part |
Changes to the tracking settings apply a second or two after you stop typing.
Tracked can mix every kind of ID. To find rubies, Greydwarf nests and burial chambers:
Tracked = Ruby,Spawner_GreydwarfNest,Crypt
Each ID matches exactly, or covers its numbered variants: Crypt covers Crypt2, Crypt3 and Crypt4. * is a
wildcard, but it can match more than you expect: Greydwarf* also matches Greydwarf eyes (and so every creature
that drops them), Greydwarf corpses, their thrown rocks and their camps. The log lists what each entry matched, so
check the log if you're confused about what got pinged. Keep Tracked to rare things: Wood would make every tree
a target.
Finding IDs below shows where to look up others.
Performance
Wispbone is built to stay light: it only checks targets it noted as they loaded, once a second, rather than
scanning everything around you. In testing it used 0.003% to 0.25% of frame time. To see the cost on your
machine, turn on LogTimings. Every 30 seconds it logs the mod's share of frame time, broken down by part.
Finding IDs
Jötunn's lists are generated from the game's own data, so they use the same IDs as the mod:
- Item list for items
- Prefab list for objects and creatures
- Location list for locations
They were made for Valheim 1.0.7, so anything added since may be missing.
When you load a world, BepInEx/LogOutput.log lists every location ID in your game, with variants grouped under
their family name, then what each entry in Tracked matched:
Location IDs (...): ..., Crypt (Crypt2, Crypt3, Crypt4), ...
Locations matching 'Crypt': Crypt2, Crypt3, Crypt4
Objects matching 'Spawner_GreydwarfNest': Spawner_GreydwarfNest
Sources of Softtissue: Softtissue (on the ground), Dverger (creature), DvergerMage (creature), ..., dvergrprops_crate (breakable), giant_brain_frac (mineable), giant_brain (breakable, becomes giant_brain_frac)
Use it to check your entries. Anything IgnoredSources skips is marked [ignored], and if an entry matches
nothing, the log warns that there's no such item, object or location. For things inside dungeons, see
LogDungeons below.
The items themselves count wherever they're lying loose, including stacks you drop yourself. Other sources are found from loot tables: creature drops, things that drop items when destroyed, mineable rocks, trees and logs, and pickables. A pickable counts only while there's something to pick, so a picked berry bush or an empty surtling core stand doesn't count. Some objects swap into a different object when first hit, the way silver veins break into a mineable version. The intact object counts as a source too if what it turns into drops a tracked item.
Chests and treasure pickups count by what they actually hold. A treasure pickup, like the ones in burial chambers, picks its item when it first loads, and counts if that item is tracked. A chest counts while it holds a tracked item, but only a chest the world generated: never one a player built, a tombstone, or the crate a wrecked ship or cart spills into. The log lists which chest types count when you load a world. Items on item stands or in someone's inventory don't count. A chest type you track by its own ID is different: any chest of that type counts while it holds anything, whoever built it.
To see the IDs of the chests, pickups and pickables inside dungeons, turn on LogDungeons, or check the lists
linked above. The first time a dungeon loads near you in a session, once things inside have settled, the
log describes what the mod can see inside it from outside, starting with the tracked things. If more loads later,
it reports again. It writes at most one dungeon a second:
Dungeon Crypt4 at (-1226, 1474): portal found 7 m from its center; a target (tracked items inside). Tracked inside: Pickable_ForestCryptRandom (Amber) x4, TreasureChest_forestcrypt (Ruby, SilverNecklace). Loaded inside: chests TreasureChest_forestcrypt x3 (world chest): 3 holding ...
Known issues
- The wisp doesn't know whether you can reach a target. An item underwater or behind a wall still attracts it (those damn scrap piles won't ever clear).
- When two targets are about the same distance away, the wisp can switch between them as you move.
Credits
- KHAAAAAAN! came up with the name "Wispbone".
