Repository navigation
VPA-Linux 3.67.4
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. SeeHOWTO.en.md/HOWTO.es.mdfor
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. SeeBUILD.en.md/
BUILD.es.mdto 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 — carryowner = -1,
and two places indexed the 1..12 race table with it directly. PLANET.NMcan now live in the game directory. It had to sit next to
the VPA binary, unlikeRACE.NMand the spec files. The lookup logic was
never at fault: a staleIOResultwas. With$I-in effect an unread I/O
error persists and silently skips all further I/O, andini_saveends with
anerase()of a.BAKthat doesn't exist yet. That error leaked into the
next file open — which happened to bePLANET.NM— and also meant
VPAHELP.INIwas never written at all, leaving a stray.TMPbehind 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_SCALEaccepts a percentage. Values from 21 up are read as a
literal percentage —VPA_SCALE=220gives 2.2×,137gives 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 inVPA.INIunder[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 enBUILD.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 — llevanowner = -1, y dos sitios indexaban con eso directamente la
tabla de razas, que va de 1 a 12. PLANET.NMya puede estar en el directorio de la partida. Antes tenía
que estar junto al binario de VPA, a diferencia deRACE.NMy los ficheros
de especificaciones. La lógica de búsqueda nunca fue el problema: lo era un
IOResultheredado. Con$I-activo, un error de E/S sin leer persiste y
hace que se salten en silencio todas las operaciones siguientes, eini_save
termina con unerase()de un.BAKque todavía no existe. Ese error se
filtraba a la siguiente apertura de fichero — que resultaba serPLANET.NM—
y además hacía queVPAHELP.INIno llegara a escribirse nunca, dejando un
.TMPde 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_SCALEacepta porcentajes. Los valores a partir de 21 se leen como
porcentaje literal —VPA_SCALE=220da 2.2×,137da 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 enVPA.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.