Moorhuhn 1, 2, Winter-Edition, 3, Tennis and CD extras

Local candidates moorhuhn, moorhuhn-2, moorhuhn-winter in test/candidate-corpus/manifest.json (archive.org item moorhuhn_1__2_with_addins); app ids moorhuhn, moorhuhn_2, moorhuhn_winter in lib/apps.js. All three reach gameplay headless and in the browser (2026-09-21).

Moorhuhn (2000, DirectDraw 640x480)

Moorhuhn 2 (v1.1)

Moorhuhn Winter-Edition (2001, Haribo)

Moorhuhn 3 (2001 download edition, German)

Source: Moorhuhn.zip from archive.org moorhuhn_202112. It holds Setup_Moorhuhn3DL_DE.exe (InstallShield); 7z that, then unshield -g "App Executables" on Disk1/data1.cab. The candidate fetcher does both steps (moorhuhn-3). Moorhuhn3.exe + moorhuhn3.dat are the whole game. It uses DirectDraw 640x480x16 and DirectSound, and its audio is an FPU MP3 synthesis filter at 0x43030b, the hottest block in gameplay.

The exe is packed, and the packer is hostile. Four things had to be real:

It also writes C:\WINDOWS\TEMP\gsm3sys32.exe one byte at a time and ShellExecutes it, and probes highscores.txt ~26 times.

Route (batch size 200000): the title is up by ~1400 batches. A click leaves it, another click at ~1700 and Space at ~1900 start the round. The first gameplay frames are a venetian-blind wipe (4px vertical stripes). That is the game's transition, not a blit bug. By ~2300 the round is clean.

node test/run.js --app=moorhuhn_3 --quiet-api --no-close --batch-size=200000 --max-batches=2700 \
  --input=1450:mousedown:320:240,1453:mouseup:320:240,1700:mousedown:320:240,1703:mouseup:320:240,1900:keydown:32,1903:keyup:32 \
  --png=/tmp/mh3.png

Unpacked code is only in memory, so read it with --input=B:dump-mem:0xVA:LEN + node tools/disasm-dump.js <log> --addr=0xVA.

Bonus puzzles (MOORHUHN 3 - BONUS GAMES/)

All three are Jigs@w Puzzle (Tibo Software, 2000-2001) self-extractors:

What it took to run them:

The board is up by about batch 700 of 500000, and dragging a piece works (hover, mousedown, several mousemoves, mouseup):

node test/run.js --app=moorhuhn_3_puzzle_fisch --quiet-api --no-close \
  --batch-size=500000 --max-batches=900 --png=/tmp/fisch.png

Best Of Moorhuhn (2001 CD, archive.org/details/best_of_mh)

The ISO holds three InstallShield 5 setups (unshield each data1.cab).

Each of the three is a Delphi Jester wrapper:

Gallinelle XXL (2003 Italian Moorhuhn 1, archive.org/details/gallinelle-xxl)

The image: the zip is a raw MODE2/2352 BIN/CUE. Keep bytes 24..2071 of every sector to get an ISO, then unshield SETUP/DATA1.CAB.

The game (gallinelle): Game/Gallinelle.exe is a different build from our Moorhuhn.exe, but it runs unchanged. The route is the same:

Bonus: Bonus/trainingsarea{1,2}.exe are plain Flash 6 projectors with no Jester wrapper, the Italian twins of the Best Of Training-Areas. They are kept in the fixture but not in the dropdown.

Moorhuhn Tennis (2002, Flash)

Source: Moorhuhn-Tennis.exe from archive.org moorhuhn-tennis, a Wise installer. Its payload is in an overlay 7z cannot open, so install it inside Wine Assembly. Control id 3 exists on a hidden progress dialog as well (its Abbrechen), so wait-dlg-control:3 + dlg-click:3 cancels setup. Click Weiter by position (378,395) every ~400 batches of 10000 instead.

The installed moorhuhn_tennis.exe is only a wrapper. It unpacks swfxxlrt.dll and a <random>TMP\ folder holding MH_Tennis_V14.exe, source.swf and basepath.txt, then CreateProcesses the exe and polls EnumWindows/GetWindowThreadProcessId/Sleep for its window. Headless CreateProcess does not start a child, so it waits forever. MH_Tennis_V14.exe is a stock Macromedia Flash Player 6 projector with the game appended (it seeks to its own tail). It runs directly. lib/apps.js moorhuhn_tennis points at it, and the candidate manifest entry is manual and lists these steps.

Route (batch size 100000): the instruction screen appears by ~300 batches. Hover "weiter" (243,462), press at 1500 and release at 1520; a two-batch click only highlights the button. The chicken follows the mouse.