VOGONS


First post, by Benedikt

User metadata
Rank Oldbie
Rank
Oldbie

Hi there!

In short: The refactored and expanded source code of Planet X3 is now available under GPL!
See https://github.com/planet-x3/px3_ose

Changelog since the last update release:

Changes under the hood

  • Port of the entire code base from A86 to YASM syntax
  • New build system mostly based on GNU tools
  • Introduction of a "logical screen coordinate" concept and conversion functions
  • Replacement of all hard-coded on-screen addresses with either logical coordinates or variables for pre-converted coordinates
  • Introduction of mode-specific function pointer and data variable blocks
  • Reintegration of the various engine forks, resulting in only one engine: px3_ose.com
  • Full rewrite of most text plotting routines and addition of new ones (lower overhead: string-based rather than character-based)
  • Full rewrite of most low-level tile plotting routines and addition of new ones
  • Full rewrite of rectangle clearing and scrolling routines as somewhat generic functions
  • Partial rewrite of most cursor plotting routines, addition of new ones
  • Partial rewrite of the radar code: Single LUT-based radar screen function, routines that plot horizontal groups of pixels
  • Partial rewrite of the menu code: Now based on data structures for menus and menu entries
  • Refactoring of the AI dispatcher: Now based on jump tables
  • Refactoring of the screen redraw routine and addition of a "lazy update" mechanism
  • More graceful handling of missing files: First search elsewhere, then ask for disk
  • Re-formatting of the entire code base
  • Additional documentation for certain parts of the code base (calling conventions etc.)

New features & Bugfixes

  • Various new video modes
  • Hardware sanity checks that usually catch incompatible video mode choices
  • New audio device: MPU-401 (two modes: MT-32 and General MIDI)
  • New audio device: CMS/GameBlaster (also CMSLPT)
  • Map flipping and multi-climate maps (via 2nd menu level)
  • Enhanced jukebox: Additional tracks for MT-32 (via shift key), in-game tracks keep playing when a game is started
  • Command line options (documented in new "Engine Manual")
  • Map lists stored in a user-editable maplist.bin rather than the engine itself
  • Transparent and/or smooth multi-disk support
  • Masking of transparent areas in modes without transparency support
  • Scout cars (included as useless preview because the artwork is there)
  • Check the actual `+`-key and not just `=` (Software assuming an American kezboard lazout is annozing!)
  • Better bridge construction
  • Further minor improvements and fixes

Reply 1 of 13, by darry

User metadata
Rank l33t++
Rank
l33t++
Benedikt wrote on 2023-01-31, 19:17:
Hi there! […]
Show full quote

Hi there!

In short: The refactored and expanded source code of Planet X3 is now available under GPL!
See https://github.com/planet-x3/px3_ose

Changelog since the last update release:

Changes under the hood

  • Port of the entire code base from A86 to YASM syntax
  • New build system mostly based on GNU tools
  • Introduction of a "logical screen coordinate" concept and conversion functions
  • Replacement of all hard-coded on-screen addresses with either logical coordinates or variables for pre-converted coordinates
  • Introduction of mode-specific function pointer and data variable blocks
  • Reintegration of the various engine forks, resulting in only one engine: px3_ose.com
  • Full rewrite of most text plotting routines and addition of new ones (lower overhead: string-based rather than character-based)
  • Full rewrite of most low-level tile plotting routines and addition of new ones
  • Full rewrite of rectangle clearing and scrolling routines as somewhat generic functions
  • Partial rewrite of most cursor plotting routines, addition of new ones
  • Partial rewrite of the radar code: Single LUT-based radar screen function, routines that plot horizontal groups of pixels
  • Partial rewrite of the menu code: Now based on data structures for menus and menu entries
  • Refactoring of the AI dispatcher: Now based on jump tables
  • Refactoring of the screen redraw routine and addition of a "lazy update" mechanism
  • More graceful handling of missing files: First search elsewhere, then ask for disk
  • Re-formatting of the entire code base
  • Additional documentation for certain parts of the code base (calling conventions etc.)

New features & Bugfixes

  • Various new video modes
  • Hardware sanity checks that usually catch incompatible video mode choices
  • New audio device: MPU-401 (two modes: MT-32 and General MIDI)
  • New audio device: CMS/GameBlaster (also CMSLPT)
  • Map flipping and multi-climate maps (via 2nd menu level)
  • Enhanced jukebox: Additional tracks for MT-32 (via shift key), in-game tracks keep playing when a game is started
  • Command line options (documented in new "Engine Manual")
  • Map lists stored in a user-editable maplist.bin rather than the engine itself
  • Transparent and/or smooth multi-disk support
  • Masking of transparent areas in modes without transparency support
  • Scout cars (included as useless preview because the artwork is there)
  • Check the actual `+`-key and not just `=` (Software assuming an American kezboard lazout is annozing!)
  • Better bridge construction
  • Further minor improvements and fixes

Nice!

Is there a bit of a back story that you could share as to why this has happened now and not earlier or later (or never) ?

Reply 2 of 13, by Benedikt

User metadata
Rank Oldbie
Rank
Oldbie

The back story is that all previous releases relied on a fork of the engine for every video memory model.
Within every single one of them, all positions on screen were hard-coded as magic numbers.
With the growing number of engine forks this created an absolute maintenance hell and the archaic assembler (A86) did not help, either.
The YASM port that eventually combined everything in one binary then had to become reasonably stable again and the code base had to be tidied up a bit.

Reply 3 of 13, by Benedikt

User metadata
Rank Oldbie
Rank
Oldbie

Addendum:

This is a minimal update package containing just the engine binary, engine manual and a few support files: http://usermo.de/files/planet_x3/updates/PX3JAN23.ZIP.
Copy the content to an older Planet X3 disk and you get most new features, but no MIDI, no modified text mode and no "six islands" map.

Reply 5 of 13, by Benedikt

User metadata
Rank Oldbie
Rank
Oldbie

The original tracks (for MT-32 and SC-55) have always been available as part of the commercial digital download package, namely as ordinary MIDI files as well as MP3s.
The build system of the Planet X3 Open Source Edition, which obviously comes without artwork, pulls everything from the folder of such a download package and converts the MIDI files to a more compact format suitable for the game engine.
Both, the MPU-401 code in the engine and the converter are contributions by Michal Procházka.

Reply 6 of 13, by vetz

User metadata
Rank l33t
Rank
l33t
Benedikt wrote on 2023-02-04, 10:56:

The original tracks (for MT-32 and SC-55) have always been available as part of the commercial digital download package, namely as ordinary MIDI files as well as MP3s.
The build system of the Planet X3 Open Source Edition, which obviously comes without artwork, pulls everything from the folder of such a download package and converts the MIDI files to a more compact format suitable for the game engine.
Both, the MPU-401 code in the engine and the converter are contributions by Michal Procházka.

Thanks, that is great information!

3D Accelerated Games List (Proprietary APIs - No 3DFX/Direct3D)
3D Acceleration Comparison Episodes

Reply 7 of 13, by Benedikt

User metadata
Rank Oldbie
Rank
Oldbie

As of yesterday, you can download and build version 1.1.0, which incorporates the following changes:

  • Implementation of the two previously reserved EGA modes (i.e. 640x350 3-color and 320x200 16-color)
  • Fix bug in LUT patching for tile set overrides
  • Fix bug in radar LUT (existed since PX3 OSE 1.0.0)
  • Let the (improved) MIDI converter translate missing General MIDI tracks from MT-32 during the artwork import step

Tagged source release: https://github.com/planet-x3/px3_ose/releases/tag/1.1.0
Build instructions: https://github.com/planet-x3/px3_ose/wiki/Build-process

Reply 8 of 13, by analog_programmer

User metadata
Rank Oldbie
Rank
Oldbie

Any clue why I always get this error, while "maplist.bin" (prebuild OSE release 1.0.0 version) is there?

The attachment maplist_error.jpg is no longer available

And after choosing "abort" (no way to proceed with "retry") I always get only "river divide" map with no option to select another map.

The attachment maplist_error.jpg is no longer available

The word Idiot refers to a person with many ideas, especially stupid and harmful ideas.
This world goes south since everything's run by financiers and economists.
This isn't voice chat, yet some people overusing online communications talk and hear voices.

Reply 9 of 13, by analog_programmer

User metadata
Rank Oldbie
Rank
Oldbie

I managed to build PX3-OSE executable version 1.1.0 from the source. Unfortunately the "missing" maplist.bin error remains 🙁

EDIT: Removed attached executable ver. 1.1.0 due to mentioned serious bug.

Last edited by analog_programmer on 2025-08-24, 10:23. Edited 1 time in total.

The word Idiot refers to a person with many ideas, especially stupid and harmful ideas.
This world goes south since everything's run by financiers and economists.
This isn't voice chat, yet some people overusing online communications talk and hear voices.

Reply 10 of 13, by M-HT

User metadata
Rank Member
Rank
Member

The error with maplist.bin is a bug in the source code. The fix is described here.

Reply 11 of 13, by analog_programmer

User metadata
Rank Oldbie
Rank
Oldbie
M-HT wrote on 2025-08-24, 08:38:

The error with maplist.bin is a bug in the source code. The fix is described here.

Thank you!

Seems like the project is abandoned from the last year as this problem is still not fixed in the last official source code version 1.1.0. I've just used your fix in "diskio.s" (I'm not into assembly) and finally the freshly build executable (ver. 1.1.1) works fine 😀 I'm attaching it here, since there's no prebuild working executable version for PX3-OSE available for download (UPX-packed XT compatible com-file):

The attachment px3_ose_111_xt.zip is no longer available
The last things that still concern me are these compiler warning messages

src/maingame/globals.s:90: warning: uninitialized space declared in code/data section: zeroing
src/maingame/globals.s:94: warning: uninitialized space declared in code/data section: zeroing
src/maingame/globals.s:95: warning: uninitialized space declared in code/data section: zeroing
src/maingame/globals.s:96: warning: uninitialized space declared in code/data section: zeroing
src/maingame/globals.s:97: warning: uninitialized space declared in code/data section: zeroing
src/maingame/globals.s:98: warning: uninitialized space declared in code/data section: zeroing
src/maingame/globals.s:101: warning: uninitialized space declared in code/data section: zeroing
src/maingame/globals.s:103: warning: uninitialized space declared in code/data section: zeroing
src/maingame/globals.s:109: warning: uninitialized space declared in code/data section: zeroing
src/maingame/globals.s:110: warning: uninitialized space declared in code/data section: zeroing
src/maingame/savegame.s:27: warning: uninitialized space declared in code/data section: zeroing
src/maingame/savegame.s:28: warning: uninitialized space declared in code/data section: zeroing
src/maingame/savegame.s:29: warning: uninitialized space declared in code/data section: zeroing
src/maingame/savegame.s:30: warning: uninitialized space declared in code/data section: zeroing
src/maingame/savegame.s:31: warning: uninitialized space declared in code/data section: zeroing
src/maingame/savegame.s:32: warning: uninitialized space declared in code/data section: zeroing
src/maingame/savegame.s:33: warning: uninitialized space declared in code/data section: zeroing
src/maingame/savegame.s:34: warning: uninitialized space declared in code/data section: zeroing
src/maingame/savegame.s:35: warning: uninitialized space declared in code/data section: zeroing
src/maingame/savegame.s:36: warning: uninitialized space declared in code/data section: zeroing
src/maingame/savegame.s:37: warning: uninitialized space declared in code/data section: zeroing
src/maingame/savegame.s:38: warning: uninitialized space declared in code/data section: zeroing
src/maingame/savegame.s:39: warning: uninitialized space declared in code/data section: zeroing
src/maingame/savegame.s:40: warning: uninitialized space declared in code/data section: zeroing
src/maingame/savegame.s:41: warning: uninitialized space declared in code/data section: zeroing
src/maingame/savegame.s:42: warning: uninitialized space declared in code/data section: zeroing
src/maingame/savegame.s:49: warning: uninitialized space declared in code/data section: zeroing
src/maingame/choice.s:74: warning: value does not fit in signed 16 bit field
src/maingame/cmdline.s:356: warning: value does not fit in signed 16 bit field
src/maingame/main.s:92: warning: value does not fit in signed 16 bit field
src/maingame/main.s:123: warning: value does not fit in signed 16 bit field
src/maingame/main.s:163: warning: value does not fit in signed 16 bit field
src/maingame/main.s:172: warning: value does not fit in signed 16 bit field
src/maingame/main.s:178: warning: value does not fit in signed 16 bit field
src/video/setmode.s:315: warning: value does not fit in signed 16 bit field
src/video/setmode.s:325: warning: value does not fit in signed 16 bit field
src/video/setmode.s:392: warning: value does not fit in signed 16 bit field
src/video/setmode.s:586: warning: value does not fit in signed 16 bit field
src/video/convert.s:543: warning: value does not fit in 8 bit field
src/video/convert.s:544: warning: value does not fit in 8 bit field
src/video/convert.s:545: warning: value does not fit in 8 bit field
src/video/convert.s:546: warning: value does not fit in 8 bit field
src/video/convert.s:547: warning: value does not fit in 8 bit field
src/video/convert.s:548: warning: value does not fit in 8 bit field
src/maingame/backgrnd.s:63: warning: value does not fit in signed 16 bit field
src/maingame/backgrnd.s:415: warning: value does not fit in signed 16 bit field
src/video/scrdraw.s:151: warning: uninitialized space declared in code/data section: zeroing
src/video/scrdraw.s:712: warning: value does not fit in 16 bit field
src/video/scrdraw.s:772: warning: value does not fit in 16 bit field
src/maingame/game.s:811: warning: value does not fit in signed 16 bit field
src/maingame/game.s:854: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1013: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1033: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1199: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1226: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1243: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1261: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1279: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1414: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1441: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1452: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1523: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1537: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1594: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1635: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1675: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1698: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1723: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1748: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1773: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1798: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1824: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1937: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1977: warning: value does not fit in signed 16 bit field
src/maingame/game.s:2012: warning: value does not fit in signed 16 bit field
src/maingame/game.s:2045: warning: value does not fit in signed 16 bit field
src/maingame/game.s:2067: warning: value does not fit in signed 16 bit field
src/maingame/game.s:2126: warning: value does not fit in signed 16 bit field
src/maingame/game.s:2183: warning: value does not fit in signed 16 bit field
src/maingame/game.s:2213: warning: value does not fit in signed 16 bit field
src/maingame/game.s:2243: warning: value does not fit in signed 16 bit field
src/maingame/game.s:2274: warning: value does not fit in signed 16 bit field
src/maingame/game.s:2429: warning: value does not fit in signed 16 bit field

I wish there were implemented mouse support in PX3-OSE and freeware map editor...

UPDATE: I totally forgot about UPX's "--8086" XT compatibility switch. Sorry, there's a new attachment with updated UPX-packed executable, which is also compatible with 8088/86 CPUs.

The word Idiot refers to a person with many ideas, especially stupid and harmful ideas.
This world goes south since everything's run by financiers and economists.
This isn't voice chat, yet some people overusing online communications talk and hear voices.

Reply 12 of 13, by Benedikt

User metadata
Rank Oldbie
Rank
Oldbie

Aside from the observation that David Murray appears to have moved on from Planet X3, it is not abandoned, because I - some rando from a different continent - am still the “active” maintainer.
However, most notable development work has been happening on the obscure-hw branch for quite a while, namely to support... obscure hardware.

The bug you mentioned is now fixed.
On this occasion, I have also published a few other improvements that have been rotting away on my hard disk.

Fresh from the git log, the newly published changes are:

  • fix bug in processing of /r argument
  • add /t argument to disable transparency
  • also use lazy tile updating with transparency=on
  • make scouts useful and add soldiers
  • add missing terminating 0 to MAPLIST.BIN file name

For the soldiers, a unit that comes from your headquarters rather than a factory, I came up with a slightly different concept to make sure that they are not entirely useless:
They are the only units that are permanently in a “fire at will“ mode while you can still move them around.
In exchange, you cannot actually manually aim at anything, but you would not be able to do that, anyway, because they are only strong as a group.

Reply 13 of 13, by analog_programmer

User metadata
Rank Oldbie
Rank
Oldbie
Benedikt wrote on Yesterday, 19:16:
Aside from the observation that David Murray appears to have moved on from Planet X3, it is not abandoned, because I - some rand […]
Show full quote

Aside from the observation that David Murray appears to have moved on from Planet X3, it is not abandoned, because I - some rando from a different continent - am still the “active” maintainer.
However, most notable development work has been happening on the obscure-hw branch for quite a while, namely to support... obscure hardware.

The bug you mentioned is now fixed.
On this occasion, I have also published a few other improvements that have been rotting away on my hard disk.

Fresh from the git log, the newly published changes are:

  • fix bug in processing of /r argument
  • add /t argument to disable transparency
  • also use lazy tile updating with transparency=on
  • make scouts useful and add soldiers
  • add missing terminating 0 to MAPLIST.BIN file name

For the soldiers, a unit that comes from your headquarters rather than a factory, I came up with a slightly different concept to make sure that they are not entirely useless:
They are the only units that are permanently in a “fire at will“ mode while you can still move them around.
In exchange, you cannot actually manually aim at anything, but you would not be able to do that, anyway, because they are only strong as a group.

Hi,

Nice to see, that you're still maintaining the project.

Do you have any clue why YASM compiler gives me these warnings?

src/maingame/globals.s:90: warning: uninitialized space declared in code/data section: zeroing
src/maingame/globals.s:94: warning: uninitialized space declared in code/data section: zeroing
src/maingame/globals.s:95: warning: uninitialized space declared in code/data section: zeroing
src/maingame/globals.s:96: warning: uninitialized space declared in code/data section: zeroing
src/maingame/globals.s:97: warning: uninitialized space declared in code/data section: zeroing
src/maingame/globals.s:98: warning: uninitialized space declared in code/data section: zeroing
src/maingame/globals.s:101: warning: uninitialized space declared in code/data section: zeroing
src/maingame/globals.s:103: warning: uninitialized space declared in code/data section: zeroing
src/maingame/globals.s:109: warning: uninitialized space declared in code/data section: zeroing
src/maingame/globals.s:110: warning: uninitialized space declared in code/data section: zeroing
src/maingame/savegame.s:27: warning: uninitialized space declared in code/data section: zeroing
src/maingame/savegame.s:28: warning: uninitialized space declared in code/data section: zeroing
src/maingame/savegame.s:29: warning: uninitialized space declared in code/data section: zeroing
src/maingame/savegame.s:30: warning: uninitialized space declared in code/data section: zeroing
src/maingame/savegame.s:31: warning: uninitialized space declared in code/data section: zeroing
src/maingame/savegame.s:32: warning: uninitialized space declared in code/data section: zeroing
src/maingame/savegame.s:33: warning: uninitialized space declared in code/data section: zeroing
src/maingame/savegame.s:34: warning: uninitialized space declared in code/data section: zeroing
src/maingame/savegame.s:35: warning: uninitialized space declared in code/data section: zeroing
src/maingame/savegame.s:36: warning: uninitialized space declared in code/data section: zeroing
src/maingame/savegame.s:37: warning: uninitialized space declared in code/data section: zeroing
src/maingame/savegame.s:38: warning: uninitialized space declared in code/data section: zeroing
src/maingame/savegame.s:39: warning: uninitialized space declared in code/data section: zeroing
src/maingame/savegame.s:40: warning: uninitialized space declared in code/data section: zeroing
src/maingame/savegame.s:41: warning: uninitialized space declared in code/data section: zeroing
src/maingame/savegame.s:42: warning: uninitialized space declared in code/data section: zeroing
src/maingame/savegame.s:49: warning: uninitialized space declared in code/data section: zeroing
src/maingame/choice.s:74: warning: value does not fit in signed 16 bit field
src/maingame/cmdline.s:356: warning: value does not fit in signed 16 bit field
src/maingame/main.s:92: warning: value does not fit in signed 16 bit field
src/maingame/main.s:123: warning: value does not fit in signed 16 bit field
src/maingame/main.s:163: warning: value does not fit in signed 16 bit field
src/maingame/main.s:172: warning: value does not fit in signed 16 bit field
src/maingame/main.s:178: warning: value does not fit in signed 16 bit field
src/video/setmode.s:315: warning: value does not fit in signed 16 bit field
src/video/setmode.s:325: warning: value does not fit in signed 16 bit field
src/video/setmode.s:392: warning: value does not fit in signed 16 bit field
src/video/setmode.s:586: warning: value does not fit in signed 16 bit field
src/video/convert.s:543: warning: value does not fit in 8 bit field
src/video/convert.s:544: warning: value does not fit in 8 bit field
src/video/convert.s:545: warning: value does not fit in 8 bit field
src/video/convert.s:546: warning: value does not fit in 8 bit field
src/video/convert.s:547: warning: value does not fit in 8 bit field
src/video/convert.s:548: warning: value does not fit in 8 bit field
src/maingame/backgrnd.s:63: warning: value does not fit in signed 16 bit field
src/maingame/backgrnd.s:415: warning: value does not fit in signed 16 bit field
src/video/scrdraw.s:151: warning: uninitialized space declared in code/data section: zeroing
src/video/scrdraw.s:712: warning: value does not fit in 16 bit field
src/video/scrdraw.s:772: warning: value does not fit in 16 bit field
src/maingame/game.s:811: warning: value does not fit in signed 16 bit field
src/maingame/game.s:854: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1013: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1033: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1199: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1226: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1243: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1261: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1279: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1414: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1441: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1452: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1523: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1537: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1594: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1635: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1675: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1698: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1723: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1748: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1773: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1798: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1824: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1937: warning: value does not fit in signed 16 bit field
src/maingame/game.s:1977: warning: value does not fit in signed 16 bit field
src/maingame/game.s:2012: warning: value does not fit in signed 16 bit field
src/maingame/game.s:2045: warning: value does not fit in signed 16 bit field
src/maingame/game.s:2067: warning: value does not fit in signed 16 bit field
src/maingame/game.s:2126: warning: value does not fit in signed 16 bit field
src/maingame/game.s:2183: warning: value does not fit in signed 16 bit field
src/maingame/game.s:2213: warning: value does not fit in signed 16 bit field
src/maingame/game.s:2243: warning: value does not fit in signed 16 bit field
src/maingame/game.s:2274: warning: value does not fit in signed 16 bit field
src/maingame/game.s:2429: warning: value does not fit in signed 16 bit field

The produced .com executable seems to work fine.

The word Idiot refers to a person with many ideas, especially stupid and harmful ideas.
This world goes south since everything's run by financiers and economists.
This isn't voice chat, yet some people overusing online communications talk and hear voices.