Skip to content

VPA-Linux 3.67.4

Choose a tag to compare

@promano7 promano7 released this 07 Aug 19:07
· 158 commits to main since this release
Immutable release. Only release title and notes can be modified.

VPA-Linux 3.67.4 — Russian help, keyboard fixes & a 13-year-old I/O bug

🇬🇧 English. A maintenance release of the native GNU/Linux build of VGA
Planets Assistant (VPA) 3.67
, the classic client for the play-by-email
strategy game VGA Planets 3. Built from the original Turbo/Borland Pascal DOS
source with Free Pascal — no DOSBox, no dosemu. Star map, ships, planets,
StarBases, messages, and a native, bit-exact PHost combat viewer (replacing
the old DOS-only PVCR.EXE), all running natively on X11/Wayland.

This release is almost entirely the result of detailed bug reports from one
player — see Acknowledgements below.

Downloads

  • vpa-linux-3.67.4-x86_64.tar.gz — pre-built binary for 64-bit x86 +
    everything you need to run it (VPA.HLP, VPA_RUS.HLP, VPA.MSG,
    DISTTABL.DAT, LITT_VPA.CHR). Start here if you're on a regular PC and
    just want to play. See HOWTO.en.md / HOWTO.es.md for
    setup instructions, including which files from your own VGA Planets
    installation and host you'll still need.
  • vpa-linux-3.67.4-aarch64.tar.gz — pre-built binary for 64-bit ARM
    (Raspberry Pi 3/4/5 and other aarch64 boards), same contents as the x86_64
    package.
  • vpa-linux-3.67.4-src.tar.gz — full source tree for this release,
    cleaned of DOS-era build artifacts. See BUILD.en.md /
    BUILD.es.md to compile it yourself.

Requirements

64-bit Linux (x86_64 or aarch64), X11 or Wayland (via XWayland), and the usual
desktop X11 libraries (libX11, libXext, libXfixes, libXi, libXrandr,
libXxf86vm) — no libXxf86dga needed. Full details in the HOWTO.

Quick start

tar xzf vpa-linux-3.67.4-<arch>.tar.gz      # x86_64 or aarch64
cd vpa-linux-3.67.4-<arch>
chmod +x VPA
./VPA <race> [game-directory]

VPA.HLP must be present in the directory you run VPA from — it's
required to start.

What's new in 3.67.4

  • The Russian help is now actually readable. 3.67.3 started shipping
    VPA_RUS.HLP, but it displayed as garbled accented-Latin characters: the
    help viewer draws its text with ptcgraph's own built-in 8×8 bitmap font,
    which has no Cyrillic glyphs, so the CP866-encoded text was rendered through
    the wrong glyph table. Glyphs #128–#255 of that font are now the CP866
    ("DOS Alt") Cyrillic set, verified byte-for-byte against the standard CP866
    layout. ASCII glyphs are untouched, so the English help is unaffected.
  • Item-display switches now work and are remembered. Two separate bugs
    in the indicator toggles (top-right corner of the star map): Shift-C and
    Shift-F did nothing at all, because both toggles were trapped inside an
    {$IFDEF vpacc} block for an optional DOS module that is never built on
    Linux; and the whole set of switches was not persisted across sessions —
    whatever you set, restarting always came back to the same fixed pattern. The
    save/load code assumed a group of separate global variables would sit
    contiguously in memory in declaration order, which held under 16-bit Turbo
    Pascal but does not under FPC on x86-64, so it was reading and writing
    unrelated memory. It now copies field by field. The same fix also restores
    the previously selected object, which was being lost on every restart.
  • Function and Ctrl keys that did nothing now work. F11, Ctrl-F11
    and Shift-F11, and later Ctrl-Tab, Ctrl-Up, Ctrl-Down and
    Ctrl-Keypad-minus, were all silently swallowed. ptccrt only emitted those
    scancodes for two keyboard modes, and VPA uses a third one — with no
    fallback. After the first report the whole modifier branch was audited by
    cross-referencing every gated scancode against the codes VPA actually
    handles, so the remaining cases were found and fixed together rather than one
    at a time.
  • Fixed a crash on startup with ShowMaxPop = On. VPA aborted with an
    access violation (Error 217) right after loading game data. Planets whose
    owner isn't known — seen only through remote sensors — carry owner = -1,
    and two places indexed the 1..12 race table with it directly.
  • PLANET.NM can now live in the game directory. It had to sit next to
    the VPA binary, unlike RACE.NM and the spec files. The lookup logic was
    never at fault: a stale IOResult was. With $I- in effect an unread I/O
    error persists and silently skips all further I/O, and ini_save ends with
    an erase() of a .BAK that doesn't exist yet. That error leaked into the
    next file open — which happened to be PLANET.NM — and also meant
    VPAHELP.INI was never written at all, leaving a stray .TMP behind on
    every run. This is upstream VPA Team code from 2013 and the same Turbo Pascal
    semantics applied under DOS, so the bug was there all along; it stayed
    invisible because DOS users ran VPA from the VGA Planets directory itself,
    where the fallback lookup found the file anyway.
  • VPA_SCALE accepts a percentage. Values from 21 up are read as a
    literal percentage — VPA_SCALE=220 gives 2.2×, 137 gives 1.37× — for
    finer control than whole multiples. Values 1–20 keep their old "N times"
    meaning, so nothing changes for existing users. Fullscreen benefits too: the
    largest fit is now computed as a percentage instead of being rounded down to
    a whole multiple, so a 1920×1080 screen fills the full height (225%) rather
    than wasting 120 pixels.
  • The StickyMouse radius is configurable (StickyMouseRange). VPA's
    filter that keeps an accidental nudge from dropping the current selection was
    hardcoded to 2 pixels, too tight for modern optical mice that report movement
    constantly. Set it in VPA.INI under [Interface]; the default stays at 2,
    and 10–20 works well with a modern mouse.
  • Version bumped to 3.67.4 in the console banner and the graphical intro
    screen.

Acknowledgements

Nearly every fix in this release came from Alexander Alexandrovich
Bezborodov
(Александр Александрович Безбородов), who reported each one with
enough detail to reproduce it — often with screenshots, terminal output and
testing across two different monitors. He also tested every build and confirmed the
fixes. Several of these bugs had been in VPA for years and would have gone
unnoticed without him. Спасибо, Александр!

Known limitations

A thorough side-by-side comparison against the DOS version under DOSBox is
still pending. One cosmetic, by-design difference remains, documented in the
README: the combat viewer's first decimal digit can differ by ±0.5 from
PVCR.EXE due to a fractional-accumulation difference between the classic
host and PCC2ng's algorithm — the integer part and the final result always
match.

Under Wayland the mouse cursor is grabbed but not released, because all
the cursor handling is X11 code running through XWayland, and Wayland
deliberately does not let a client grab and release the pointer that way.
Selecting an X11 session works correctly in the meantime. The proper fix —
separate X11 and native Wayland graphics backends behind a common internal
API — is planned but is a substantial piece of work.

Credits & license

Original VPA by Alex V. Ivlev (1993–96) and later maintainers. Native
PHost combat viewer derived from PCC2ng by Stefan Reuther. Cyrillic
console font from the Linux kbd/console-setup fonts (public domain). This
Linux port © 2026 Pablo Romano Gómez. Multi-license breakdown and full texts in
LICENSE.md.


🇪🇸 Español. Versión de mantenimiento de la compilación nativa para
GNU/Linux de VGA Planets Assistant (VPA) 3.67, el cliente clásico del
juego de estrategia por correo VGA Planets 3. Reconstruido a partir del
código original en Turbo/Borland Pascal para DOS con Free Pascal — sin
DOSBox, sin dosemu. Mapa estelar, naves, planetas, StarBases, mensajes, y un
visor de combate PHost nativo y bit-exacto (sustituyendo al antiguo
PVCR.EXE, solo para DOS), todo funcionando de forma nativa sobre X11/Wayland.

Esta versión es casi en su totalidad fruto de los reportes detallados de un
jugador — ver Agradecimientos más abajo.

Descargas

  • vpa-linux-3.67.4-x86_64.tar.gz — binario ya compilado para x86 de 64
    bits + todo lo necesario para ejecutarlo (VPA.HLP, VPA_RUS.HLP,
    VPA.MSG, DISTTABL.DAT, LITT_VPA.CHR). Empieza por aquí si estás en
    un PC normal y solo quieres jugar. Instrucciones en
    HOWTO.es.md / HOWTO.en.md, incluyendo qué
    ficheros de tu propia instalación de VGA Planets y de tu host seguirás
    necesitando.
  • vpa-linux-3.67.4-aarch64.tar.gz — binario ya compilado para ARM de 64
    bits (Raspberry Pi 3/4/5 y otras placas aarch64), con el mismo contenido que
    el paquete x86_64.
  • vpa-linux-3.67.4-src.tar.gz — árbol de código fuente completo de esta
    versión, ya limpio de artefactos de compilación de la era DOS. Instrucciones
    para compilarlo en BUILD.es.md / BUILD.en.md.

Requisitos

Linux de 64 bits (x86_64 o aarch64), X11 o Wayland (vía XWayland), y las
librerías X11 habituales de cualquier escritorio (libX11, libXext, libXfixes,
libXi, libXrandr, libXxf86vm) — no hace falta libXxf86dga. Detalle completo
en el HOWTO.

Arranque rápido

tar xzf vpa-linux-3.67.4-<arch>.tar.gz      # x86_64 o aarch64
cd vpa-linux-3.67.4-<arch>
chmod +x VPA
./VPA <raza> [directorio-de-partida]

VPA.HLP tiene que estar en el directorio desde el que ejecutas VPA — es
obligatorio para arrancar.

Novedades de la 3.67.4

  • La ayuda en ruso ya se lee de verdad. La 3.67.3 empezó a distribuir
    VPA_RUS.HLP, pero se veía como caracteres latinos acentuados sin sentido:
    el visor de ayuda dibuja el texto con la fuente de mapa de bits 8×8 interna
    de ptcgraph, que no tiene glifos cirílicos, así que el texto en CP866 se
    renderizaba con la tabla equivocada. Los glifos #128–#255 de esa fuente son
    ahora el juego cirílico CP866 («DOS Alt»), verificado byte a byte contra la
    tabla estándar de CP866. Los glifos ASCII quedan intactos, así que la ayuda
    en inglés no cambia.
  • Los interruptores de visualización funcionan y se recuerdan. Dos
    errores distintos en los indicadores (esquina superior derecha del mapa
    estelar): Shift-C y Shift-F no hacían absolutamente nada, porque
    ambos estaban atrapados dentro de un {$IFDEF vpacc} de un módulo DOS
    opcional que nunca se compila en Linux; y el conjunto de interruptores no
    se conservaba entre sesiones
    — pusieras lo que pusieras, al reiniciar
    volvía siempre el mismo patrón fijo. El código de guardado suponía que un
    grupo de variables globales sueltas quedaría contiguo en memoria en el orden
    en que están declaradas, algo cierto en el Turbo Pascal de 16 bits pero no
    en FPC sobre x86-64, así que leía y escribía memoria ajena. Ahora se copia
    campo a campo. El mismo arreglo recupera además el objeto seleccionado, que
    se perdía en cada reinicio.
  • Teclas de función y combinaciones con Ctrl que no hacían nada. F11,
    Ctrl-F11 y Shift-F11, y más tarde Ctrl-Tab, Ctrl-Arriba,
    Ctrl-Abajo y Ctrl-menos del teclado numérico, se tragaban en
    silencio. ptccrt solo emitía esos códigos de tecla para dos modos de teclado,
    y VPA usa un tercero — sin alternativa. Tras el primer reporte se auditó toda
    la rama de modificadores cruzando cada código capado con los que VPA maneja
    de verdad, así que el resto de casos se encontraron y arreglaron de una vez
    en lugar de uno por uno.
  • Corregido un fallo al arrancar con ShowMaxPop = On. VPA abortaba con
    una violación de acceso (Error 217) justo después de cargar los datos de la
    partida. Los planetas de dueño desconocido — vistos solo por sensores
    remotos — llevan owner = -1, y dos sitios indexaban con eso directamente la
    tabla de razas, que va de 1 a 12.
  • PLANET.NM ya puede estar en el directorio de la partida. Antes tenía
    que estar junto al binario de VPA, a diferencia de RACE.NM y los ficheros
    de especificaciones. La lógica de búsqueda nunca fue el problema: lo era un
    IOResult heredado. Con $I- activo, un error de E/S sin leer persiste y
    hace que se salten en silencio todas las operaciones siguientes, e ini_save
    termina con un erase() de un .BAK que todavía no existe. Ese error se
    filtraba a la siguiente apertura de fichero — que resultaba ser PLANET.NM —
    y además hacía que VPAHELP.INI no llegara a escribirse nunca, dejando un
    .TMP de basura en cada arranque. Es código de upstream del VPA Team de
    2013, y la semántica de Turbo Pascal era la misma, así que el fallo estaba
    ahí desde siempre; quedaba invisible porque en DOS se ejecutaba VPA desde el
    propio directorio de VGA Planets, donde la búsqueda de reserva encontraba el
    fichero igualmente.
  • VPA_SCALE acepta porcentajes. Los valores a partir de 21 se leen como
    porcentaje literal — VPA_SCALE=220 da 2.2×, 137 da 1.37× — para ajustar
    con más precisión que con múltiplos enteros. Los valores del 1 al 20 mantienen
    su significado clásico de «N veces», así que nada cambia para quien ya lo
    usaba. La pantalla completa también gana: el mayor ajuste posible se calcula
    ahora como porcentaje en vez de redondearse a la baja al múltiplo entero, de
    modo que una pantalla de 1920×1080 llena toda la altura (225%) en lugar de
    desperdiciar 120 píxeles.
  • El radio de StickyMouse es configurable (StickyMouseRange). El filtro
    de VPA que evita perder la selección por un movimiento involuntario estaba
    fijo en 2 píxeles, demasiado poco para ratones ópticos modernos, que reportan
    movimiento constantemente. Se ajusta en VPA.INI, sección [Interface]; el
    valor por omisión sigue siendo 2, y entre 10 y 20 va bien con un ratón
    moderno.
  • Número de versión actualizado a 3.67.4 en el banner de consola y en la
    pantalla de bienvenida gráfica.

Agradecimientos

Casi todas las correcciones de esta versión vienen de Alexander
Alexandrovich Bezborodov
(Александр Александрович Безбородов), que reportó
cada una con el detalle suficiente para reproducirla — muchas veces con
capturas de pantalla, salidas de terminal y pruebas en dos monitores
distintos. Además probó cada compilación y confirmó los arreglos. Varios de
estos fallos llevaban años en VPA y habrían pasado desapercibidos sin él.
¡Спасибо, Александр!

Limitaciones conocidas

Queda pendiente una comparación exhaustiva contra la versión DOS bajo DOSBox.
Se mantiene una diferencia cosmética y por diseño ya documentada en el README:
el primer decimal del visor de combate puede diferir en ~±0.5 respecto a
PVCR.EXE, por cómo cada uno acumula la fracción sub-unidad de forma distinta
(host clásico vs. algoritmo de PCC2ng) — la parte entera y el resultado final
siempre coinciden.

Bajo Wayland, el cursor del ratón se captura pero no se libera, porque
toda la gestión del cursor es código X11 funcionando a través de XWayland, y
Wayland no permite deliberadamente que un cliente capture y suelte el puntero
de esa manera. Mientras tanto, elegir una sesión X11 funciona correctamente.
La solución de fondo — backends gráficos separados para X11 y Wayland nativo
tras una API interna común — está prevista, pero es un trabajo de envergadura.

Créditos y licencia

VPA original de Alex V. Ivlev (1993–96) y mantenedores posteriores. Visor
de combate PHost nativo derivado de PCC2ng de Stefan Reuther. Fuente
cirílica de consola procedente de las fuentes kbd/console-setup de Linux
(dominio público). Este port a Linux © 2026 Pablo Romano Gómez. Desglose de
licencias y textos completos en LICENSE.md.