Repository navigation
VPA-Linux 3.67.6 — Native Wayland, pluggable graphics backends and combat-viewer charge indicators
🇬🇧 English. A new 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 and, from this
release on, natively on Wayland too.
The headline of this release is native Wayland support: VPA no longer
needs XWayland in a Wayland session, and the mouse pointer is no longer
trapped in its window. To get there the graphics layer was rebuilt as
run-time plugins, one per display system, behind a common internal API. A
handful of fixes come along with it — see What's new below.
Downloads
vpa-linux-3.67.6-x86_64.tar.gz— pre-built binary for 64-bit x86 +
everything you need to run it: theplugins/folder with the two
graphics backends and the bundled SDL3 (new, see below),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.6-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, both plugins and SDL3 included.vpa-linux-3.67.6-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) with glibc 2.34 or later (Debian 12,
Ubuntu 22.04 and anything newer), and a graphical session, X11 or
Wayland. The VPA binary itself only needs libc; the plugins use the
libraries every desktop already has: the usual X11 ones (libX11, libXext,
libXfixes, libXi, libXrandr, libXxf86vm) for the X11 plugin, and the Wayland
client libraries (libwayland-client, libxkbcommon, libdecor) for the Wayland
plugin. SDL3 is bundled, you don't need to install it. Full details and
per-distribution package names in the HOWTO.
Quick start
tar xzf vpa-linux-3.67.6-<arch>.tar.gz # x86_64 or aarch64
cd vpa-linux-3.67.6-<arch>
chmod +x VPA
./VPA <race> [game-directory]
The plugins/ folder must stay next to the VPA binary — VPA won't
start without it. If you copy VPA to your own games folder, copy
plugins/ along with it. VPA.HLP must be present in the directory you run
VPA from — it's required to start.
What's new in 3.67.6
Native Wayland — how it was done
Up to 3.67.5, VPA linked the Free Pascal ptcgraph library and, through it,
seven X11 libraries: it was an X11 program, and in a Wayland session it only
ran through XWayland. That is where the known limitation of the last two
releases came from: the mouse pointer was grabbed when it entered the window
and never released, because all the pointer handling was X11 code
(XGrabPointer/XWarpPointer) that Wayland deliberately does not honour.
Patching around it was not possible; the fix had to be structural.
-
The executable no longer draws by itself.
VPAnow links no graphics
library at all (ldd VPA: libc only). A new core,GRAPH/(VPAGraph),
offers VPA the same BGI drawing API it has always used, plus keyboard and
mouse, so VPA's ~2,400 drawing calls did not change:uses ptcgraphsimply
becameuses vpagraph. At start-up the core loads a graphics plugin
withdlopenand forwards every call to it through a table of function
pointers (the VPAGraph ABI v1). Before a plugin is accepted its ABI version,
its table size and every mandatory entry are checked. -
Two plugins, the same drawing code.
plugins/libvpagraph-x11.soand
plugins/libvpagraph-wayland.soboth contain the sameptcgraph; only the
PTC "console" that finally puts the pixels on screen differs. The X11 one is
the console VPA-Linux has always used; the Wayland one is a new PTC console
written for this port on top of SDL3, which talks to the compositor
natively. That is why the picture is byte-for-byte identical on both
backends — and it is not taken on trust:make visual-testcaptures a set
of reference scenes from a real game on X11 and on Wayland and compares
every frame with the golden ones, with a threshold of zero.VPA (executable) libc only └─ GRAPH/ VPAGraph core BGI API + keyboard + mouse + plugin loader │ VPAGraph ABI v1 (table of function pointers) ├─ plugins/libvpagraph-x11.so ptcgraph on PTC's X11 console └─ plugins/libvpagraph-wayland.so the same ptcgraph on a new │ SDL3 console (native Wayland) └─ plugins/libSDL3.so.0 bundled SDL 3.4.16 -
Why plugins and not two builds. There is still a single
VPA
binary. If SDL3 were linked into the executable, a system without it could
not start VPA at all; as a plugin, a missing SDL3 just means the Wayland
plugin does not load and VPA carries on with X11, exactly as before. -
Nothing to configure. VPA looks at the session (
WAYLAND_DISPLAY,
DISPLAY,XDG_SESSION_TYPE), loads the matching plugin and, if it fails,
tries the other one.VPA_GRAPH_BACKEND=x11or=waylandforces one, and a
forced backend never falls back silently: if it fails, VPA stops and says
why. The new./VPA --graph-infoexplains the whole decision (session,
order tried, plugin chosen, or every reason why none worked) without opening
a window — attach its output to any graphics bug report../VPA --help
now also lists the VPA-Linux environment variables. -
SDL3 comes in the package. Many distributions don't ship SDL3 yet, and
some ship one that is too old, so the package carries its own:
plugins/libSDL3.so.0, SDL 3.4.16 built from the unmodified official
tarball with only what VPA uses (Wayland video, events and rendering), its
zlib licence inLICENSE.SDL3.txt. Nothing is installed in your system. The
plugin looks for it next to itself first and in the system second, so if
you'd rather use your distribution's SDL3 (3.4.4 or later), just delete the
bundled copy. -
What you get on Wayland. The pointer comes and goes freely: VPA's white
crosshair inside the window, the desktop's cursor outside. The picture stays
sharp with fractional desktop scaling (tested at 100 %, 125 %, 150 %, 200 %
and 240 %). The window keeps VPA's 4:3 shape when you resize it, as on X11,
andVPA_SCALE=fullscreenfills the screen with black side bands and no
distortion. The map stops auto-scrolling when the pointer is over those
bands. The window's [X] button saves your turn like Alt-X. Key repeat,
keyboard focus (also after returning fromEdit file) and Ctrl-+ / Ctrl--
on non-US layouts all work, and the "sticky mouse" that pulls the pointer
onto planets and ships works on compositors that allow pointer warping. -
Built for older systems too. The packages are now built in a clean
Debian 12 (bookworm) chroot, amd64 and arm64, with scripts included in
tools/. That's where the glibc 2.34 minimum above comes from.
Fixes
- The map no longer scrolls while the pointer rests on the right-hand
panel. WithAutoScroll = Onthe map kept scrolling for as long as the
pointer was anywhere over the panel. This came from the very first versions
of the port and happened on X11 as well: under DOS the mouse driver stopped
the pointer at the edge of the map (SetMouseRange(0,0,479,479)), but on a
modern desktop the real pointer moves into the panel, and its position was
only clamped to 479 — so the whole panel counted as "the right edge". Now
only the 8-pixel strip at the edge of the map scrolls, as on the other
three sides. - The bottom auto-scroll strip is 8 pixels, like the other three. It was
2: the original DOS source usedMouseY>477at the bottom and 8 pixels
everywhere else. Under DOS nobody noticed, because the mouse driver pinned
the pointer to the edge anyway; with the right-hand side fixed, the
difference became obvious. - The PHost combat viewer shows the charge of beams and torpedo tubes, in
the battle simulator (F5) and when watching VCRs, like the classic viewer
always did: a red bar per beam that fills green as it recharges, and a
red / yellow / green circle per tube. The native PHost viewer that replaced
PVCR.EXEhad left these indicators unwired. The combat maths is untouched. - Integer settings line up in the Ctrl-O menu. Numeric entries such as
StickyMouseRangewere printed without padding, one column to the left of
the On/Off entries. VPA_FULLSCREENandVPA_VIDEOare gone. They were leftovers from the
first fullscreen attempt;VPA_SCALE=fullscreen(orfull,max) is the
one way to go fullscreen, on both backends.- For developers:
makebuildsVPAand the X11 plugin;
make wayland-pluginbuilds the Wayland plugin against the system's SDL3;
make dataassembles the full package with both plugins and its own SDL3
(make sdl3).make visual-testruns the pixel comparison described
above. The whole design, phase by phase with its decisions and tests, is in
WAYLAND.md(Spanish), and the choice of the Wayland engine in
docs/adr-001-motor-wayland.md. - Version bumped to 3.67.6 in the console banner and the graphical intro
screen.
Acknowledgements
Thanks again to Alexander Alexandrovich Bezborodov (Александр
Александрович Безбородов), AKA "at0mix", who kept playing the
development builds and comparing them side by side with the DOS VPA. The
bottom auto-scroll strip and the missing charge indicators in the combat
viewer were both his catches, reported with screenshots from both versions.
Спасибо, Александр!
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.
The native Wayland backend has been played by hand on KDE Plasma 6
(KWin), and runs through the automated tests on Weston and Sway. Other
compositors, GNOME's included, have not been tried by hand yet; if something
looks wrong there, please report it with the output of ./VPA --graph-info.
The "sticky mouse" needs the compositor to let a program move the pointer
(the pointer-warp-v1 protocol, which KDE Plasma 6.7 provides). On
compositors without it the pointer is not pulled onto planets and ships;
everything else works.
If you force VPA_GRAPH_BACKEND=x11 inside a Wayland session, or no usable
SDL3 is available, VPA runs through XWayland as in 3.67.5, with the old
caveat: the pointer is grabbed and not released when it leaves the window
(F1 or F10 free it). Debian 13 (trixie) ships SDL 3.2.10, which is too
old for the plugin: keep the bundled copy there.
Credits & license
Original VPA by Alex V. Ivlev (1993–96) and later maintainers. Native PHost
combat viewer derived from PCC2ng by Stefan Reuther. SDL 3 by Sam
Lantinga and the SDL contributors (zlib), bundled in the binary packages;
SDL3-for-Pascal bindings by the Pascal Game Development Team (zlib).
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. Nueva versión 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 y, desde esta versión,
también de forma nativa sobre Wayland.
La gran novedad de esta versión es el soporte nativo de Wayland: VPA ya
no necesita XWayland en una sesión Wayland, y el puntero del ratón ya no se
queda atrapado en su ventana. Para llegar hasta aquí se ha rehecho la capa
gráfica como plugins que se cargan en tiempo de ejecución, uno por sistema
gráfico, detrás de una API interna común. Con ello llegan también unas
cuantas correcciones — ver Novedades más abajo.
Descargas
vpa-linux-3.67.6-x86_64.tar.gz— binario ya compilado para x86 de 64
bits + todo lo necesario para ejecutarlo: la carpetaplugins/con los
dos backends gráficos y la SDL3 incluida (nuevo, ver más abajo),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.6-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, los dos plugins y la SDL3 incluidos.vpa-linux-3.67.6-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) con glibc 2.34 o posterior (Debian 12,
Ubuntu 22.04 y cualquier versión más nueva), y una sesión gráfica, X11 o
Wayland. El binario VPA por sí solo solo necesita libc; los plugins usan
las librerías que ya tiene cualquier escritorio: las X11 habituales (libX11,
libXext, libXfixes, libXi, libXrandr, libXxf86vm) el plugin X11, y las
librerías cliente de Wayland (libwayland-client, libxkbcommon, libdecor) el
plugin Wayland. La SDL3 va incluida, no hace falta instalarla. Detalle
completo y nombres de paquete por distribución en el HOWTO.
Arranque rápido
tar xzf vpa-linux-3.67.6-<arch>.tar.gz # x86_64 o aarch64
cd vpa-linux-3.67.6-<arch>
chmod +x VPA
./VPA <raza> [directorio-de-partida]
La carpeta plugins/ tiene que estar junto al binario VPA — sin ella VPA
no arranca. Si copias VPA a tu propia carpeta de partidas, copia plugins/
con él. VPA.HLP tiene que estar en el directorio desde el que ejecutas
VPA — es obligatorio para arrancar.
Novedades de la 3.67.6
Wayland nativo — cómo se ha hecho
Hasta la 3.67.5, VPA enlazaba la librería ptcgraph de Free Pascal y, a
través de ella, siete librerías X11: era un programa X11, y en una sesión
Wayland solo funcionaba a través de XWayland. De ahí venía la limitación
conocida de las dos últimas versiones: el puntero del ratón se capturaba al
entrar en la ventana y no se soltaba nunca, porque toda la gestión del puntero
era código X11 (XGrabPointer/XWarpPointer) que Wayland, a propósito, no
atiende. No había parche posible; el arreglo tenía que ser de estructura.
-
El ejecutable ya no dibuja por sí mismo.
VPAya no enlaza ninguna
librería gráfica (ldd VPA: solo libc). Un núcleo nuevo,GRAPH/
(VPAGraph), le ofrece a VPA la misma API de dibujo BGI que ha usado siempre,
más teclado y ratón, así que las ~2.400 llamadas de dibujo de VPA no han
cambiado:uses ptcgraphpasó a seruses vpagraph. Al arrancar, el núcleo
carga un plugin gráfico condlopeny le pasa cada llamada a través de
una tabla de punteros a función (la ABI v1 de VPAGraph). Antes de aceptar un
plugin se comprueban su versión de ABI, el tamaño de su tabla y todas las
entradas obligatorias. -
Dos plugins, el mismo código de dibujo.
plugins/libvpagraph-x11.soy
plugins/libvpagraph-wayland.sollevan dentro el mismoptcgraph; solo
cambia la "consola" de PTC que acaba poniendo los píxeles en pantalla. La de
X11 es la que VPA-Linux ha usado siempre; la de Wayland es una consola PTC
nueva escrita para este port sobre SDL3, que habla con el compositor de
forma nativa. Por eso la imagen es idéntica byte a byte en los dos
backends — y no es un acto de fe:make visual-testcaptura una serie de
escenas de referencia de una partida real en X11 y en Wayland y compara cada
fotograma con los dorados, con umbral cero.VPA (ejecutable) solo libc └─ GRAPH/ núcleo VPAGraph API BGI + teclado + ratón + cargador de plugins │ ABI v1 de VPAGraph (tabla de punteros a función) ├─ plugins/libvpagraph-x11.so ptcgraph sobre la consola X11 de PTC └─ plugins/libvpagraph-wayland.so el mismo ptcgraph sobre una consola │ SDL3 nueva (Wayland nativo) └─ plugins/libSDL3.so.0 SDL 3.4.16 incluida -
Por qué plugins y no dos compilaciones. Sigue habiendo un único
binarioVPA. Si la SDL3 estuviera enlazada en el ejecutable, un sistema
sin ella no podría ni arrancar VPA; como plugin, que falte la SDL3 solo
significa que el plugin Wayland no carga y VPA sigue con X11, exactamente
como antes. -
Nada que configurar. VPA mira la sesión (
WAYLAND_DISPLAY,DISPLAY,
XDG_SESSION_TYPE), carga el plugin que le corresponde y, si falla, prueba
el otro.VPA_GRAPH_BACKEND=x11o=waylandfuerza uno, y un backend
forzado nunca se cambia por otro en silencio: si falla, VPA se detiene y dice
por qué. El nuevo./VPA --graph-infoexplica toda la decisión (sesión,
orden de prueba, plugin elegido o, si ninguno funciona, todos los motivos)
sin abrir ninguna ventana — adjunta su salida a cualquier informe de fallo
gráfico../VPA --helplista ahora también las variables de entorno de
VPA-Linux. -
La SDL3 viene en el paquete. Muchas distribuciones todavía no traen SDL3,
y alguna trae una demasiado antigua, así que el paquete lleva la suya:
plugins/libSDL3.so.0, SDL 3.4.16 compilada a partir del tarball oficial
sin modificar y solo con lo que VPA usa (vídeo Wayland, eventos y render),
con su licencia zlib enLICENSE.SDL3.txt. No se instala nada en el sistema.
El plugin la busca primero junto a sí mismo y después en el sistema, así que
si prefieres la SDL3 de tu distribución (3.4.4 o posterior), basta con borrar
la copia incluida. -
Qué se nota en Wayland. El puntero entra y sale con libertad: la diana
blanca de VPA dentro de la ventana, el cursor del escritorio fuera. La
imagen se mantiene nítida con escalado fraccionario del escritorio (probado
al 100 %, 125 %, 150 %, 200 % y 240 %). La ventana conserva la proporción 4:3
de VPA al redimensionarla, como en X11, yVPA_SCALE=fullscreenllena la
pantalla con bandas negras a los lados y sin deformar. El mapa deja de
desplazarse cuando el puntero está sobre esas bandas. El botón [X] de la
ventana guarda el turno como Alt-X. La repetición de teclas, el foco del
teclado (también al volver deEdit file) y Ctrl-+ / Ctrl-- con teclados no
estadounidenses funcionan, y el "imán" que lleva el puntero a planetas y
naves funciona en los compositores que permiten mover el puntero. -
Compilado también para sistemas más antiguos. Los paquetes se compilan
ahora en un chroot limpio de Debian 12 (bookworm), amd64 y arm64, con scripts
incluidos entools/. De ahí sale el mínimo de glibc 2.34 de los requisitos.
Correcciones
- El mapa ya no se desplaza mientras el puntero descansa sobre el panel
derecho. ConAutoScroll = Onel mapa se desplazaba sin parar mientras el
puntero estuviera en cualquier punto del panel. Venía de las primeras
versiones del port y pasaba también en X11: en DOS el driver del ratón
paraba el puntero en el borde del mapa (SetMouseRange(0,0,479,479)), pero
en un escritorio actual el puntero real entra en el panel, y su posición solo
se recortaba a 479 — así que todo el panel contaba como "el borde derecho".
Ahora solo desplaza la franja de 8 píxeles del borde del mapa, como en los
otros tres lados. - La franja inferior de auto-scroll mide 8 píxeles, como las otras tres.
Medía 2: el código original de DOS usabaMouseY>477abajo y 8 píxeles en
el resto. En DOS nadie lo notó, porque el driver del ratón clavaba el puntero
en el borde de todos modos; con el lado derecho ya arreglado, la diferencia
saltaba a la vista. - El visor de combate PHost muestra la carga de los rayos y de los tubos de
torpedos, en el simulador de batallas (F5) y al ver los VCR, como hizo
siempre el visor clásico: una barra roja por rayo que se llena de verde al
recargarse, y un círculo rojo / amarillo / verde por tubo. El visor PHost
nativo que sustituyó aPVCR.EXEhabía dejado estos indicadores sin
conectar. La matemática del combate no se ha tocado. - Los ajustes enteros quedan alineados en el menú de Ctrl-O. Las entradas
numéricas comoStickyMouseRangese escribían sin relleno, una columna a la
izquierda de las de On/Off. - Desaparecen
VPA_FULLSCREENyVPA_VIDEO. Eran restos del primer
intento de pantalla completa;VPA_SCALE=fullscreen(ofull,max) es la
única forma de ponerse a pantalla completa, en los dos backends. - Para quien compila:
makeconstruyeVPAy el plugin X11;
make wayland-plugin, el plugin Wayland contra la SDL3 del sistema;
make datamonta el paquete completo con los dos plugins y su propia SDL3
(make sdl3).make visual-testejecuta la comparación de píxeles descrita
arriba. El diseño completo, fase a fase con sus decisiones y sus pruebas,
está enWAYLAND.md, y la elección del motor de Wayland en
docs/adr-001-motor-wayland.md. - Número de versión actualizado a 3.67.6 en el banner de consola y en la
pantalla de bienvenida gráfica.
Agradecimientos
Gracias de nuevo a Alexander Alexandrovich Bezborodov (Александр
Александрович Безбородов), AKA "at0mix", que ha seguido jugando con las
versiones de desarrollo y comparándolas lado a lado con el VPA de DOS. La
franja inferior del auto-scroll y los indicadores de carga que faltaban en el
visor de combate los encontró él, y los reportó con capturas de las dos
versiones. ¡Спасибо, Александр!
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.
El backend Wayland nativo se ha jugado a mano en KDE Plasma 6 (KWin), y
pasa las pruebas automáticas en Weston y en Sway. Otros compositores,
incluido el de GNOME, todavía no se han probado a mano; si algo se ve mal en
ellos, repórtalo con la salida de ./VPA --graph-info.
El "imán" del ratón necesita que el compositor deje a un programa mover el
puntero (el protocolo pointer-warp-v1, que KDE Plasma 6.7 ofrece). En los
compositores que no lo tienen, el puntero no salta a planetas y naves; todo
lo demás funciona.
Si fuerzas VPA_GRAPH_BACKEND=x11 dentro de una sesión Wayland, o no hay una
SDL3 utilizable, VPA funciona a través de XWayland como en la 3.67.5, con la
pega de siempre: el puntero se captura y no se suelta al salir de la ventana
(F1 o F10 lo liberan). Debian 13 (trixie) trae la SDL 3.2.10, demasiado
antigua para el plugin: ahí hay que quedarse con la copia incluida.
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. SDL 3 de
Sam Lantinga y los colaboradores de SDL (zlib), incluida en los paquetes
binarios; enlaces SDL3-for-Pascal del Pascal Game Development Team (zlib).
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.