We did not receive the source code for versions prior to 1.32c and there is no way for us to go back to 1.16n or other old versions. For the very few mods that require 1.16n, there is no way to make them work on ioquake3.https://wiki.ioquake3.org/Sys_Admin_Guide (or view on archive.org)
I read this in 2008 when I was looking at using ioquake3 for creating a game. From time to time people ask about Quake 3 1.16n for running the mod NoGhost or it comes up for playing with Quake 3 for the Sega Dreamcast using DreamPi.
At the end of 2019 I wondered how similar Star Trek Voyager — Elite Force Holomatch and Quake 3 1.16n were. Elite Force Holomatch is from before Quake 3: Team Arena changes were made in Q3 1.2# versions so it shouldn’t be that far off.
On a whim I decided to take Lilium Voyager (my updated version of ioEF, a re-implementation of Elite Force Holomatch on ioquake3, by Thilo Schulz) and run it with the data files used by Q3 1.16n. There was some Elite Force Holomatch specific changes to revert and then the game logic (in QVM files, Quake Virtual Machine) more or less worked.
I got the Q3 1.16n network protocol working in three days (with a 3 month gap in the middle) after a lot of messing with the network code . The last issue was reading player states which use an index into a pre-calculated table that specifies which player state fields changed with bit flags. (Q3 1.32 sorted the fields and just has number of modified fields.) After a 3 month break, in desperation I searched the Quake 3 executable for fragments of the table and found a slightly different table. Putting it into the source code fixed the remaining player state issues. (This is how reverse engineering works, right?)
Credit for reverse engineering Quake 3 protocol 43 goes to Thilo Schulz (for ioEF) and Zack Middleton.
After a minor change of allowing older UI version, it’s possible to run the original Quake 3 Retail/Demo version 1.11 and the 1.09 Demo Test (the first version with QVMs).
So 13 years after reading Q3 1.16n support was more or less impossible; I present my Q3 1.09 to Q3 1.16n compatible ioquake3 engine: Lilium Arena Classic.
No pre-compiled downloads are available yet. This has stalled since March 2020 due to my lack of desire to work on it but at least it’s rebranded and the source code is released now.
There is also now Lilium Arena as a Q3 1.32 compatible companion/parent project. Lilium Voyager may eventually be rebased on Lilium Arena Classic as most changes can be shared. So the process to update a common bug in all projects is to fix it in ioquake3 and then merge down the chain of ioquake3 -> Lilium Arena -> Lilium Arena Classic -> Lilium Voyager. This is kind of ridiculous. The git history is a mess and will continue to get worse. Ah, so is life.
Does new Quake 3 1.16n clients or servers interest you? Donations are accepted on ko-fi.