Adds co-op multiplayer to the Find The Needle demo. Several players dig the same haystack, share the money and see each other's buildings.
Connections go through Steam's relay network, so there is no port forwarding and no IP addresses to exchange. The host invites from the Steam friends list.
Unofficial mod, not affiliated with the game's developer. It contains no game files, only its own scripts and a CC0 player model. Spanish version of this file: README.es.md.
- Find The Needle demo (free on Steam), build V26 or newer
- Windows 64-bit
- The same mod version on every machine
- The game has to be launched from Steam, or the invites will not work
No installer to run: copy a folder, add two lines to a text file.
-
Download the zip from Releases and unzip it.
-
Copy the
modsfolder next toFindTheNeedle.exe. In Steam: right-click the game, Manage, Browse local files. -
Open
override.cfg, in that same folder, with any text editor and add:[autoload] MPMod="*mods/multiplayer/mp.gd"
If the file already has an
[autoload]section, only the second line is needed. -
Launch from Steam. There is a MULTIPLAYER entry in the main menu.
If you would rather not edit the file, tools/install-helper.bat (also
attached to each release) does that one step for you. It is not inside the
download because Nexus quarantines uploads that contain scripts.
To uninstall, delete that line and the mods folder, or run
tools/uninstall-helper.bat. Nothing is ever written outside it.
Game updates replace override.cfg, so add the lines again after each one.
Host: MULTIPLAYER, CREATE GAME, INVITE FRIENDS, then start or load a save as usual. Everyone else joins by accepting the Steam invite. If their game is closed, Steam starts it and takes them in.
There is a direct-IP mode under "IP connection (advanced)" as a fallback.
| Key | Action |
|---|---|
| F2 | Multiplayer panel |
| Y | Chat |
| F8 | Resync the world |
| F6 | Test menu |
F6 opens the debug menu the game already has: money, items, unlocks and the tech tree, plus buttons to take money away. It is there to set a session up or to try something out. The game marks any run that used it, so it stops counting for the leaderboards.
- The haystack. Everyone digs the same pile.
- Buildings, placed and demolished.
- Money, debt, hay sold, needles found, the collection.
- The tech tree.
- Uncovered needles. They show up for everyone and can only be handed in once.
- New hay loads, which resync every client.
- Player positions, names and the tool in hand.
- Loose items: buckets, sacks, bales, wads. You see what the others pick up, carry, drop and throw, and you can pick up their things yourself.
- What is riding on the belts.
- Loose straw on the ground, so everyone digs into the same mess.
- How the machines move, their smoke and lamps, and their settings.
- The straw and the needle in your bare hands, drawn in your farmer's fist.
The interface follows the game's own language setting. English, Spanish,
German, French, Italian, Czech, Polish, Russian, Turkish, Japanese, Korean and
Chinese are included, in mp_i18n.gd. Anything else falls back to English.
Tool names are not translated by the mod: they go through the game's own
translations, so they read the same as in the rest of the UI.
- Machines run on the host only, so the same hay cannot be counted twice. Clients see them move, smoke and light up, and their settings match, but the work itself happens on one machine.
- Hay loaded on a tool, in a shovel or a fork, is not drawn for the others. What is in your bare hands, and straw on the ground, is.
- Bought tools are per player. Money is shared.
- Only the host saves. Clients never write to their own save files.
- The online leaderboard is disabled while the mod is loaded.
- Money can dip below zero if two players spend at the same moment.
- Who holds a loose needle is shared; where one lies can differ a little between players until someone picks it up.
No MULTIPLAYER entry: the game updated and replaced override.cfg. Add the
two lines again.
"Steam not available": the game was launched from the .exe instead of Steam.
A friend cannot join: check that both of you run the same mod version. The panel shows it.
The world looks different between players: press F8.
The game crashes: send the newest crash log from
%APPDATA%\Godot\app_userdata\Haystack Incremental\crashes\ together with
mp_trace.log from the folder above it (or mp_trace.prev.log if the game was
opened again since). The trace only lists which messages the mod received and
when, so we can see what was being handled when it went down.
Anything else: open an issue with the log from
%APPDATA%\Godot\app_userdata\Haystack Incremental\logs\.
The demo ships as one encrypted Godot .pck, which the mod never touches.
Godot reads override.cfg next to the executable at startup. The installer
registers mp.gd there as an autoload, so the mod is a handful of .gd files
living outside the game.
The demo has no Steam API, so the mod loads the
GodotSteam GDExtension at runtime with
GDExtensionManager.load_extension() and initialises Steam under the demo's
app id. That provides lobbies, invites and SteamMultiplayerPeer.
To let someone join, the host serialises its world in the same format the game uses for saves, sends it compressed, and the client loads it with the game's own loader into a scratch slot.
Syncing after that is incremental. The haystack is a height field and each peer
sends the vertices it changed. Buildings are diffed against the game's
to_array() and rebuilt through its own loader. Money and counters travel as
deltas, with the host as the authority.
Everything is applied by walking the live scene tree and calling the game's own methods.
mods/multiplayer/ what ships in the release
mp.gd session, lobby flow, RPCs
mp_world.gd world sync (haystack, buildings, state, needles)
mp_steam.gd GodotSteam loading, lobbies, invites
mp_ui.gd panel, chat, notifications
mp_avatar.gd the other players' figures
mp_i18n.gd UI strings per language
tool_poses.cfg hand-placed held tools (optional, made with tool_poser)
models/ farmer model (CC0)
steam/ GodotSteam GDExtension (prebuilt)
dev/mp_test.gd test harness, not shipped
dev/mp_sync_test.gd two-player sync checks, not shipped
dev/avatar_calib.gd live avatar height tuning, not shipped
dev/tool_poser.gd place held tools on the farmer by hand, not shipped
dev/tool_poser.bat starts the game with the tool poser
dev/models/ tooling used to prepare the model
docs/ Nexus page copy
Nothing is compiled. Edit a file, restart the game.
Remote players are an animated farmer, mods/multiplayer/models/farmer.glb,
loaded at runtime with GLTFDocument. The overalls and the hat band take the
player's colour, the head follows where they look, the legs bend when they
crouch, and the clip (Idle_Neutral, Walk, Run) follows their speed. If the file is
missing or fails to load, an older figure made of primitives stands in. The
.glb is the original pack trimmed to those three clips with
dev/models/slim_glb.py, which takes it from 1.3 MB to 500 KB.
Tool models hang off the avatar's hand. Each one is scaled to its real length
(TOOL_LENGTHS) along its longest axis and turned so the working end points
away from the hand. Set flip_tool on an avatar to turn a model 180 degrees
while testing a new one. A tool with an entry in tool_poses.cfg skips that
guess and uses the saved position, rotation and length instead.
To use the test harness, copy dev/mp_test.gd next to mp.gd and start the
game with MP_TEST_AVATAR=user://saves/slot_1.dat set, plus MP_TEST_TOOL=1
for the spade. It drops two puppets holding that tool, one of them flipped, and
writes a screenshot.
dev/mp_sync_test.gd runs a host and a guest on one PC over the IP
connection and checks that the pile, money, missions, tech, needles and
buildings agree. Copy it next to mp.gd as mp_test.gd; how to start both
is at the top of the file.
dev/avatar_calib.gd puts a farmer in front of you that copies your look and
crouch, so you can tune MODEL_HEIGHT and CROUCH_DROP with the arrow keys
and save them with F9. How to enable it is at the top of the file.
dev/tool_poser.gd swaps the main menu for an empty stage with a farmer
holding the tool you pick (1-6). Drag the move (W) or rotate (E) gizmo on the
tool, or use the sliders on the right, and preview looking up and down,
walking, crouching or a turntable. The camera orbits, pans and flies like in
the Godot editor. C switches to an optional crouch pose, for tools that should
sit differently when crouched; without one they keep the standing pose. F9
writes tool_poses.cfg into the mod folder. The keys are
listed at the top of the file. dev/tool_poser.bat starts the game with it and
puts override.cfg back when you close the game.
Entry 7 is the wheelbarrow. The gizmo moves and turns it from the farmer's
feet, and the farmer grabs both handles as you go. The grips are found on the
model; if they're off, click a white dot (or press G) and drag it. It saves to
[wheelbarrow] in the same file, and without one the mod uses its own default.
Mod by AleDev11. Find The Needle by FindTheNeedleDev. Farmer model from the Ultimate Modular Men Pack by Quaternius, CC0. GodotSteam is MIT. Steamworks SDK is Valve's.
MIT licence, see LICENSE.
