Refuted claims

Technical appendix · Home · Français

Claims that were believed and then disproved, kept so they aren't re-adopted. Section A comes from the full re-check on 2026-11-03.

Standing rules

  • A negative from a limited search pattern isn't evidence of absence. State the limit.
  • A text scan only rules out the encoding it tested. Every "no dialogue" scan below missed 5-bit coding.

A. Refuted by the re-check

Earlier claim Result
INT 0FEh handler is missing or external It is maup.exe EA 0x10628 (0x53:0xF8).
Segment 0x53 is a separate far API 0x53:0 is _main, 0x53:6 is Game_Main, 0x53:0xF8 the handler.
maup.exe is overlaid No overlay evidence; 24 ordinary relocated segments.
Text is fixed-pitch with +0x66 unused Vid_DrawGlyph adds +0x66; the +0x6A nudge is temporary.
The atlas reads as little-endian in the file Wrong for odd byte offsets: 47 of 99 glyphs.
Index-to-character map unknown Solved; see Text and fonts.
Dialogue is in no file It is in G3.CON records 0x28/0x29, 5-bit packed.
Output is in 0x400 chunks with input resync The counter only increments; no effect on decoding.
rec27_sub02 is a charset, 4,112 B when decoded It's a raw image; its first u32 is palette and count bytes.
Font_LoadStrings loads strings It decodes a picture for the intro script.
.CON records are vector geometry, no text Many are tiled images; records 0x28/0x29 are text.
wVidCanvas* is the draw target It's read as a blit source; draws go to wPageSeg.
ES writes and DS reads the canvas Backwards for blits: ES:DI is the source.
bGlyphDirectStore == 1 means direct store 1 selects Vid_PutPixel.
word_1A4F4 is text origin; wGlyphRowPitch is pitch Both hold the text colour.
Vid_BlitTile: CH rows, CL tiles CH is width, CL is height.
sub_10536 is a paragraph scan It's a Sound Blaster port probe.
INT 0FEh site table Four of six EAs were wrong; all six are file offset + 0xF800.
Six service numbers Six sites, five services.
Archive slot comes from the disk map It comes from wConRecordToArchive.
Open uses 3D00h 3D80h.
Sentinel list is 20 records Six groups, with the record set of each archive.
Only nine files; nothing missing More names exist, including conditional G7.CON.
Remap applies when the flag is set It applies when bSoundCard is 0.
0x15/0x16 both alias 0x17 0x15→0x17, 0x16→0x14.
INSERT DISK belongs to maup.exe Only INSTALLE.EXE has that string.
INSTALLE.EXE is 37,376 B 12,684 B.
Last 4 KiB of maup.exe are zero Only 1,458 of them are; there's also a 29-byte trailer.
HNF.HUF says lanxhor, HEY lankhor, URL; ROT-13 was misapplied.
HNF.HUF tail is byte-identical to SND.HUF Shared suffix is only 216 B.
Turbo C code here is BP-less Standard push bp / mov bp,sp is common: 160 raw matches.
0 of 312 payloads pass try_decompress Two .CON payloads pass, and all .HUF streams decode.
unk_1CBE8 The published offset DS:27CB is EA 0x1CBEB.
Delphine Software or Loriciels made it Lankhor: intro credits say so.
sub_12722 is the idle worker, called from 0x1EFEB It's Game_LoadAssets, called once from 0x1F1EB. 0x1EFEB holds no call.
SAUP.MAU is a saved-game blob, out of scope It's the starting game state, loaded into the block at DS:166.
Room records' sub 0 has an unknown format Palettes, then a normal image at +0x40.
MAUPITI1 only serves or parks as a TSR It holds the game loop, resumed by maup.exe at 0x1EF4D.
MAUPITI1 "record/arena engine" with a separate resident role It loads records through services; maup.exe does the file work.

B. Still valid

Claim Evidence
.HUF containers aren't ROT-13 They decode from raw bytes.
No static Huffman table exists The tree is adaptive.
The game doesn't print text through INT 10h The character routines are used by the adapter/CLI path (unverified in full).
Vid_ArenaAlloc isn't a fatal-error routine Verified.
0x7D00 is a word count for a 64,000 B page copy Verified at 0x16FBF.
Con_ResolveDestPtr EA 0x11C48 and sub_13C80 are separate code Verified as separate call targets.

C. Invalid tests: don't reuse as evidence

These measured something real but don't support their old conclusions:

  • XOR, ROT-N and 5/6/7-bit scans for dialogue, including all "no French" results. Only byte-aligned or wrongly-tabled forms were tried.
  • "No glyph-index stream exists": correct for raw bytes, irrelevant to packed text.
  • Bitmap pitch, autocorrelation and bit-density tests on .CON data: pixels are nibble and run-length coded, in many scan orders.
  • MAUPITI1 "contains no text" from a printable-ASCII census: the game's text isn't ASCII, so the census can't show that. The text is in G3.CON; whether MAUPITI1 also embeds packed strings isn't tested.

D. Confirmed in MAUPITI1.EXE

Unpacks from .olz to an identical image; INT 0FEh handler isn't in it; 51 stubs; 21 INT 21h sites; one iret; no in, out, INT 10h, INT 33h; two rep movsb in the runtime; 7 printable runs; CD FE false hits are displacements; 0x1335A pushes constant 83, unrelated to segment 0x53. The instruction counts differ by tool (IDA 29,083 or 29,099; a linear sweep gives 29,145). IDA's runtime names, such as @Assign, weren't re-read, but the code behind them has no far callers.

E. Unverified

Conclusions from runtime dumps not in this repo: D-1F11.BIN, S8C76.BIN, S7832.BIN.

Previous: Naming · Next: Open questions · Technical appendix · Home