Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
NordicWindmill
A taller Nordic windmill with a custom two-section rotor, adjustable blade radius and configurable processing speed.
This mod requires the following mods to function
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.2351README
Nordic Windmill
Version 0.1.0 | Author: GethLegion | Valheim / BepInEx 5
Give your windmill a taller Nordic silhouette and a custom four-arm rotor with two sail sections per arm. Adjust tower height, blade radius and item processing speed independently.
Features
- Custom Blender-edited rotor with wooden frames, stitched sails and support pieces.
- Sails visible from both sides with the native game material.
- Adjustable blade radius; the rotor scales uniformly around its spin axis.
- Adjustable tower height with optional collision for the upper extension.
- Native wind-driven rotation, orientation and processing.
- Configurable processing speed, including existing windmills.
- Existing vanilla windmills are updated automatically; no new building recipe is added.
Requirements
- Valheim with BepInExPack Valheim installed.
- Optional: Configuration Manager by shudnal, with its required dependencies, for the F1 settings menu.
- No Blender or Unity installation is needed to use the mod.
Installation
Thunderstore / r2modman
Install NordicWindmill by GethLegion and its dependencies. For a local ZIP, use Settings > Import local mod and select GethLegion-NordicWindmill-0.1.0.zip.
Manual / Nexus Mods
Close the game, extract the archive, and copy plugins/NordicWindmill.dll into BepInEx/plugins/NordicWindmill/. Start the game once to generate the configuration file.
Updating from a development build
Remove the older Nordic Windmill DLL before installing this release. Keep only one NordicWindmill.dll in your profile. The first public release is numbered 0.1.0; earlier 1.x builds were private development versions. Since 0.1.0 is numerically lower, replace a development build manually instead of relying on automatic update detection.
Existing settings in BepInEx/config/local.nordic.windmill.cfg are retained. Old SailSegments entries are unused. The package does not include a configuration file that overwrites your values.
Configuration
With Configuration Manager installed, press F1 and open Nordic Windmill. Otherwise, close the game and edit BepInEx/config/local.nordic.windmill.cfg.
| Section | Setting | Default | Range / behavior |
|---|---|---|---|
| General | Enabled | true | Enable custom appearance and processing speed; false restores vanilla behavior. |
| Dimensions | HeightMultiplier | 1.55 | 1 to 3; independent of blade radius. |
| Dimensions | BladeRadiusMultiplier | 1.5852476 | 0.5 to 3; relative to the measured vanilla rotor radius. |
| Collision | UpperTowerCollision | true | Collision for the added upper tower section. |
| Processing | SpeedMultiplier | 1 | 0.1 to 100; 1 = normal, 2 = twice as fast, 0.5 = half speed. |
Blade radius
The default blade radius is approximately 4.845 meters (9.69 meters in diameter). A value of 1 matches the measured vanilla radius of approximately 3.056 meters. Radius is measured from the spin axis to the outermost vertex. The model scales uniformly, including its depth.
Processing speed
Processing duration = original duration / SpeedMultiplier. For example, 2 halves the time per item. The default of 1 keeps vanilla timing. Wind remains required and still affects production. Recipes, input/output quantities and queue capacity are unchanged.
Changes apply on the next native processing tick. The current item's completion percentage is retained when changing the multiplier. The network owner updates saved progress. Other processing stations are unaffected. Disabling the mod in its settings restores the original duration.
Multiplayer and compatibility
Use the same version and settings on the server and all clients. Settings are not automatically synchronized or enforced by this mod. The network owner runs the native production simulation.
Mods that also change windmill geometry, blade materials or processing duration may conflict. Increase the blade radius only where there is enough clearance. The blade damage area keeps its native size and may not reach enlarged blade tips.
Validation
The rotor's two-sided appearance was confirmed in game by the model author during development. The public release adds English documentation/settings and the processing speed control. Automated tests cover rotor scaling and reverse faces, tower geometry, processing speed, progress preservation, owner changes and installed game API compatibility. The new processing control still needs an in-game check, including multiplayer if used there.
Credits and license
Author and model editing: GethLegion.
The plugin reuses Valheim materials and textures at runtime. It does not bundle the texture atlas exported by Blender. The rotor mesh is derived from Valheim geometry; original game assets belong to Iron Gate / their respective owners. This is an unofficial mod and is not affiliated with or endorsed by the game developers.
Plugin code is distributed under the included MIT license. The MIT license does not grant rights to third-party game assets. Derived shared implementation credits are retained in LICENSE.
Building from source
Use the supplied Build.ps1 with the paths to your installed Valheim and BepInEx directories:
.\Build.ps1 -ValheimDir 'PATH_TO_VALHEIM' -BepInExDir 'PATH_TO_BEPINEX'
.\tests\Run-Tests.ps1
.\tests\Verify-GameApi.ps1 -ValheimDir 'PATH_TO_VALHEIM' -BepInExDir 'PATH_TO_BEPINEX'
The build embeds assets/RotorMesh.bin. To convert an updated centered rotor GLB, use tools/Convert-Rotor.py; its metadata records the source and coordinate mapping. Source archives omit the original GLB and its embedded game texture. Legacy procedural sail helpers remain for regression tests and are not used to render the current rotor.