Repository navigation
VPA-Linux 3.67.5
VPA-Linux 3.67.5 — the settings-menu crash, centred fullscreen and a turn you no longer lose
🇬🇧 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 again almost entirely the result of detailed bug reports from
one player — see Acknowledgements below. Its headline fix is a memory
corruption that had been triggered every single time the settings menu was
opened.
Downloads
vpa-linux-3.67.5-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.5-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.5-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.5-<arch>.tar.gz # x86_64 or aarch64
cd vpa-linux-3.67.5-<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.5
- Opening the settings menus no longer corrupts memory (Ctrl-O / Ctrl-U).
This is the important one. VPA saves the piece of screen hidden behind a menu
so it can paint it back afterwards, and it kept the size of that save in a
16-bit word. In 256 colours the settings menu needs 104204 bytes, which wraps
around to 38668 in a word: VPA reserved 38 KB and then wrote 104 KB into it,
overrunning the block by exactly 65536 bytes every time the menu opened.
The damage surfaced later and anywhere — a crash on the second Enter, a crash
while saving on the way out, a program that simply died — which is why it took
a week of heap tracing and a bisection to corner. Under DOS the 16-colour BGI
packed four bits per pixel and the same save took about 26 KB, comfortably
inside a word, so the assumption held there and the bug never showed. - A crash inside a menu no longer costs you the turn. Separate bug, found
while chasing the one above. The emergency save that runs when VPA dies needs
the reserved memory block as its I/O buffer, but menus release that block
while they are open, so the rescue attempt died too and nothing was written.
It now re-acquires the block first. Your turn survives even when VPA doesn't. Edit filein the settings menus opens a real editor. It was still
trying to runedit.com, the MS-DOS editor, and after failing it left the
program with no window, waiting forever for a keystroke that could never
arrive — a freeze, not a crash. It now uses your own editor ($VISUAL, then
$EDITOR), falling back tonanoand thenvi, and the menu line shows
which one it will use. Note it needs VPA to have been started from a terminal.
Editing also reloads the file you actually edited; before, it always reloaded
VPAHELP.INIinstead.- Fullscreen is centred. With
VPA_SCALE=fullscreenthe picture sat in the
top-left corner with all the leftover space in one black band on the right,
which is uncomfortable on a large or curved screen. It is now centred, with a
narrower band on each side. VPA is a 4:3 program, so on a widescreen monitor
those bands are unavoidable without distorting the image. Mouse coordinates
follow the picture, so clicks land where you point. - Ctrl-+ and Ctrl-- work again (jump to last / first turn). 3.67.4 fixed
one of the four ways of pressing them; the other three still did nothing. They
are now handled by looking at the character rather than the key code, so they
work from the numeric keypad and from the main row alike, on any keyboard
layout. - The right panel is no longer drawn 32 pixels low after the fleet report
(Ctrl-F11). Leaving the report skipped restoring a drawing setting, and the
panel was painted below its place until the next full redraw. Invisible under
DOS, where a video-mode call at the end reset that setting by accident — a
call that does nothing in this port. - The statistics graph is readable (Ctrl-F10). The first series was drawn
in dark blue on a black background, and so were its name in the legend and its
value in the table above. All three now use light, mutually distinguishable
colours. - Numeric settings step sensibly. Pressing Enter on
StickyMouseRangein
the Ctrl-O menu added 1000 at a time — a step that only makes sense for
MaxMoney— so a pixel radius of 2 jumped to 1002, a value that leaves the
mouse stuck all over the screen and the program looking dead. Each numeric
entry now has its own range and step;StickyMouseRangegoes up one at a time
to 20, and the.INIfile still accepts up to 100. - Video-mode restoration is honest. Seven leftover calls asked to restore a
DOS 16-colour mode this port can never grant, so they silently did nothing.
They now restore the mode actually in use, and only when the program really
left graphics mode. - New example launch script. Added an example launch script in
EXAMPLES/game_launch.sh. - For developers: a
heaptrcbuild target (make heaptrc) that links Free
Pascal's heap checker. - Version bumped to 3.67.5 in the console banner and the graphical intro
screen.
Acknowledgements
Once again nearly every fix in this release came from Alexander Alexandrovich
Bezborodov (Александр Александрович Безбородов), AKA "at0mix".
He reported each problem with enough detail to reproduce it, sent screenshots,
terminal traces and full heap-checker logs, patiently ran a series of instrumented
builds that each answered one question and nothing else, and tested every candidate
fix across three different machines. The memory corruption at the heart of this release
had been in VPA for as long as the Linux port has existed and would still be
there 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 de nuevo casi en su totalidad fruto de los reportes detallados
de un jugador — ver Agradecimientos más abajo. Su corrección principal es
una corrupción de memoria que se producía cada vez que se abría el menú de
configuración.
Descargas
vpa-linux-3.67.5-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 enHOWTO.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.5-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.5-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.5-<arch>.tar.gz # x86_64 o aarch64
cd vpa-linux-3.67.5-<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.5
- Abrir los menús de configuración ya no corrompe la memoria (Ctrl-O /
Ctrl-U). Esta es la importante. VPA guarda el trozo de pantalla que queda
tapado por un menú para poder repintarlo después, y llevaba la cuenta del
tamaño de ese guardado en un entero de 16 bits. En 256 colores el menú de
configuración necesita 104204 bytes, que en un word se dan la vuelta y quedan
en 38668: VPA reservaba 38 KB y escribía 104 KB dentro, saliéndose del bloque
exactamente 65536 bytes cada vez que se abría el menú. El destrozo salía a
la luz más tarde y en cualquier sitio — un fallo al segundo Intro, un fallo al
guardar la partida al salir, o el programa muriéndose sin más — y por eso costó
una semana de rastreo del montón y una bisección acorralarlo. En DOS el BGI de
16 colores empaquetaba cuatro bits por píxel y ese mismo guardado ocupaba unos
26 KB, holgado dentro del word, así que allí la suposición se cumplía y el
fallo nunca se manifestó. - Que VPA se caiga dentro de un menú ya no cuesta el turno. Fallo distinto,
encontrado persiguiendo el anterior. El guardado de emergencia que se ejecuta
cuando VPA se muere necesita el bloque de memoria reservado como búfer de
entrada/salida, pero los menús lo sueltan mientras están abiertos, así que el
intento de rescate también moría y no se escribía nada. Ahora vuelve a pedir
el bloque antes de empezar. Tu turno sobrevive aunque VPA no. Edit fileen los menús de configuración abre un editor de verdad.
Seguía intentando lanzaredit.com, el editor de MS-DOS, y tras fallar dejaba
el programa sin ventana esperando eternamente una tecla que ya no podía
llegar: un cuelgue, no un fallo. Ahora usa tu propio editor ($VISUAL, luego
$EDITOR), y si no hay ninguno recurre ananoy después avi, indicando en
la línea del menú cuál va a usar. Necesita que VPA se haya arrancado desde una
terminal. Además recarga el fichero que realmente has editado; antes recargaba
siempreVPAHELP.INI.- La pantalla completa está centrada. Con
VPA_SCALE=fullscreenla imagen
quedaba pegada arriba a la izquierda y todo el espacio sobrante se acumulaba en
una franja negra a la derecha, incómodo en pantallas grandes o curvas. Ahora va
centrada, con una franja más estrecha a cada lado. VPA es un programa 4:3, así
que en un monitor panorámico esas franjas son inevitables sin deformar la
imagen. Las coordenadas del ratón acompañan a la imagen, así que los clics caen
donde apuntas. - Ctrl-+ y Ctrl-- vuelven a funcionar (ir al último / primer turno). La
3.67.4 arregló una de las cuatro formas de pulsarlas; las otras tres seguían
sin hacer nada. Ahora se resuelven mirando el carácter en lugar del código de
tecla, así que funcionan igual desde el teclado numérico que desde la fila
principal, y en cualquier distribución de teclado. - El panel derecho ya no se dibuja 32 píxeles más abajo tras el informe de
flota (Ctrl-F11). Al salir del informe se saltaba la restauración de un
ajuste de dibujo, y el panel se pintaba fuera de su sitio hasta el siguiente
repintado completo. En DOS no se veía, porque una llamada de cambio de modo de
vídeo al final reajustaba ese valor por casualidad — una llamada que en este
port no hace nada. - La gráfica de estadísticas se lee (Ctrl-F10). La primera serie se
dibujaba en azul oscuro sobre fondo negro, y con ella su nombre en la leyenda y
su valor en la tabla de arriba. Las tres usan ahora colores claros y
distinguibles entre sí. - Los ajustes numéricos avanzan con sentido. Pulsar Intro sobre
StickyMouseRangeen el menú de Ctrl-O sumaba de 1000 en 1000 — un salto que
solo tiene sentido paraMaxMoney—, así que un radio de 2 píxeles pasaba a
1002, un valor con el que el ratón queda pegado por toda la pantalla y el
programa parece muerto. Cada entrada numérica tiene ahora su propio rango y su
propio paso;StickyMouseRangesube de uno en uno hasta 20, y el fichero
.INIsigue admitiendo hasta 100. - La restauración del modo de vídeo es honesta. Siete llamadas heredadas
pedían volver a un modo DOS de 16 colores que este port no puede dar nunca, de
modo que no hacían nada en silencio. Ahora restauran el modo realmente en uso, y
solo cuando el programa ha salido de verdad del modo gráfico. - Nuevo script de lanzamiento de ejemplo. Añadido un script de lanzamiento del
juego a modo de ejemplo enEXAMPLES/game_launch.sh. - Para quien compila: un objetivo
heaptrc(make heaptrc) que enlaza el
comprobador de heap de Free Pascal. - Número de versión actualizado a 3.67.5 en el banner de consola y en la
pantalla de bienvenida gráfica.
Agradecimientos
Una vez más, casi todas las correcciones de esta versión vienen de Alexander
Alexandrovich Bezborodov (Александр Александрович Безбородов), AKA "at0mix".
Reportó cada problema con el detalle suficiente para reproducirlo, mandó capturas, trazas
de terminal y registros completos del comprobador de montón, ejecutó con paciencia
una serie de compilaciones instrumentadas en las que cada una respondía a una
sola pregunta, y probó cada arreglo candidato en tres máquinas distintas. La
corrupción de memoria que centra esta versión llevaba en VPA desde que existe el
port a Linux y seguiría ahí 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.