DARKER Research archive

Command-line options: manual and executable

Consolidated from printed English manual pages 20–22 (PDF pages 12–13), darker/DARKER.BAT, and all 13 entries in the original parser. The batch file runs X Lang=0 Mus=1.

Use decimal Name=value arguments, separated by spaces. Matching is case-insensitive and uses only the first two letters; longer alphabetic suffixes are ignored. Values are unsigned 16-bit decimal integers, with additional bounds in some handlers. This makes Lang, Language and LA equivalent. An unrecognised prefix or rejected value takes the invalid-command-line path.

All accepted prefixes

Prefix / manual spelling Meaning and accepted range Handler Manual coverage (pp. 20–22)
LA / Language, Lang 0 English, 1 French, 2 German 029E Documented.
MU / Music, Mus 0 no sound, 1 SoundBlaster FM, 2 General MIDI, 3 Roland, 4 Gravis, 5 SoundBlaster AWE32 (manual names) 0293 Documented.
LI / Light Monitor brightness compensation, 0–50; manual default 0 02AA Documented.
MS / MSpeed Mouse sensitivity, 1–25; higher is more sensitive 02BA Documented.
IN / Input Mouse/device selection; low and high bytes stored separately; see below 02DC Documented.
LO / LookRnd Look-around action mask 02F0 Documented.
RA / Radar Enlarged-radar action mask 02E4 Documented.
BR / Brake Brake action mask 02E8 Documented.
CL / ClrLock Clear-target-lock action mask 02EC Documented.
AF Primary-fire action mask; full original spelling not recovered 02F4 Not documented under this name; manual calls it PrimFire (unrecognised).
BF Secondary-fire action mask; full original spelling not recovered 02F8 Not documented under this name; manual calls it SecFire (different handler).
EY Display mode: 1 ordinary, 2 paired-view; full spelling not recovered 02C6 Undocumented.
SE 0–15; selects AH=60h+n for a specialised INT 33h mouse/device call at 3B5D. Full name and hardware semantics unresolved 02D1 Undocumented function; the manual’s SecFire name collides with this prefix.

EY stores value minus one at image offset 3CFD. Mode 1 there enables the two displaced scene views and the keypad-minus separation adjustment. This connects it to the stereo/VR rendering investigation; it is not a claim that EY=2 alone configures all required headset hardware. The untouched image has FF (automatic/unset) here; EFA6 resolves that default using detected device flags. These mode names describe traced branches rather than recovered full command names.

SE defaults to 0. The original instruction at 3B5D is MOV AH,60h; INT 33h (B4 60 CD 33), exactly the selector produced by SE=0. Thus this is the built-in default even when no SE argument is supplied; it is not 60 in command-line units. The call is gated by device flag bit 10h at 3B52, so the default does not imply that every setup executes it.

Playtest: explicitly launching with EY=2 produces a blank screen in DOSBox. This is recorded as an observed outcome, not proof of the cause; the required hardware/driver/display conditions remain unresolved.

Playtesting also shows no detectable difference when varying SE; tested values and device configuration were not specified. This does not establish that the gated device call executes in that setup. EYES is a plausible expansion of EY, but the parser preserves only the two-letter prefix, so the intended original spelling remains unknown.

Early handlers address data relative to the PSP, 100h below the unpacked image, while parser dispatch uses the image segment. For example, the store to DS:3DFD corresponds to image offset 3CFD. This distinction is reproduced in the verification harness.

Manual mouse selections

Input value Device
1 PS/2 mouse
2 MS or Logitech bus mouse
4 MS MSX bus mouse
8 Serial mouse COM2
16 Serial mouse COM1
32 Amstrad mouse

Add 256 for one CyberPuck or 512 for two. The manual example Input=264 is COM2 plus one CyberPuck. These are documented device selections, not proof that arbitrary combinations of the low-byte values work. The parser itself stores both bytes without enumerating valid hardware combinations.

Action-mask values

Value Input
1 Right mouse button
2 Middle mouse button
4 Left mouse button
16 Joystick A button 1
32 Joystick A button 2
64 Joystick B button 1
128 Joystick B button 2
256 Tab
512 Backspace
1024 Equals
2048 Minus
4096 Insert / keypad 0
8192 Caps Lock
16384 Space
32768 Alt

The manual instructs adding values to assign multiple inputs to one action. These are masks of alternative inputs, not arbitrary keyboard scan codes.

Manual discrepancies and remapping limitation

Do not treat the manual's fire-remapping examples as verified working recipes for this executable.

This reference covers the complete recovered parser table. Hardware semantics for SE and the full VR setup remain open, and accepted syntax does not establish that a hardware mode will function on the current DOS environment.

Reproduction

PYTHONPATH=/tmp/darker-python python3 tools/verify_command_line.py

The 27-case report executes the original parser and handlers with a synthetic PSP command tail, including boundary checks, manual-name rejection, display selection and mask mutation. Execution stops before subsequent startup; no original game files or saved games are changed. Raw prefix entries remain in tables.json.