JJFFE Guide
JJFFE was originally created by John Jordan in an attempt to make the game playable on modern (at the time) 32bit operating systems. In an era before AI-assistance, this was a monumental effort. While being entirely unofficial and unsupported, JJFFE was responsible for both keeping the game playable in the many years between the release of FFE and Elite:Dangerous, and fixing a number of game-breaking bugs along the way.
Unfortunately John Jordan’s original site has been lost to the sands of time, but there is a partial archive that is still available (as of 2026).
For this guide I am going to assume you are going to be using JJFFE 2.8 in Windows and have DirectX installed. There are other versions but this tends to be the most common.
Getting Started
Step 1 - Getting FFE
First you need to have a copy of FFE - JJFFE is not the complete game! If you have an original copy already installed, skip this step and go to Step 2.
To get a copy of FFE, you can download the shareware version here.
Once you have completed the download, extract the zip to your c:\ drive, i.e., "c:\firstenc". Inside this directory should be 4 files and another directory (firstenc.bat, setup.bat, licence.txt, readme.txt).
Read the ReadMe and the License before continuing.
Step 2 - Getting JJFFE
Now we need to get JJFFE. There are multiple versions depending on what operating system you are using. These are the most common, but there are others on the downloads page
- Windows 95/98/Me/2000/7/8/10/11 - still runs on modern 64bit machines (as of 2026)
- Dos - suitable for running under emulation within DOSBox et al
If you have an original FFE install (i.e., not shareware), extract the JJFFE files into c:\firstenc\.
If you are using the shareware install, extract the JJFFE files into c:\firstenc\game\.
Step 3 - Playing
Now you just need to run it! Find "ffewin28.exe" or "ffedos28.exe" and run it (not firstenc.bat). Read the warning and follow the instructions to play.
To make it full screen, press the control key ("Ctrl") and F12 together. Please note, the resolution cannot be changed.
Original Documentation
As noted, the original site has gone offline and only an archive.org partial copy still exists.
Below is some of the most salient information that may be useful or of general interest.
Which version to download?
If you’re running Windows 95/98/Me/2000/7/8/10/11 then use Win32/DirectX5 version. The Win32/SDL version is an alternative, but has no music or documentation.
If for some reason you’re running Windows NT4, you’ll need to use the Win32/DirectX3 version instead.
For DOS or DOSBox uses, the DJGPP/HMI version uses the original HMI sound code and relies on the setup.exe configuration program. The DJGPP/Allegro version should auto-configure sound, but has lower-quality MIDI and no joystick code. Other than this the versions are essentially identical - we reocmmend you start with the DJGPP/HMI version.
Note: The DJGPP/HMI version contains two additional binaries beyond
setup.exe:
joycal16.exe: Joystick calibration file generatormouseacc.exe: Mouse accelerator (for raw DOS)
If you’re running Linux, you can compile either the Linux/Allegro or Linux/SDL versions from source.
JJFFE Controls
The standard FFE key controls can be found on the Controls page.
JJFFE made some changes to the default controls listed here:
- Refuelling key changed to R.
- F key changed to FPS counter toggle.
- Keys +/- on main keyboard now duplicate function of +/- on number pad.
- Pressing opposite external view keys now resets to original position.
- Keys 6-0 now duplicates function of shift-F1-5 (stardreamer).
- ; and insert (inc. numpad 0) keys now duplicate function of E (ECM).
- [ and ] key snow perform roll.
- Number pad 8/5 are now forward/reverse thrust in engines off mode.
- Number pad 6/3 and 4/1 are now up/down thrust in engines off mode.
- Number pad 7/9 are now left/right thrust in engines off mode.
- Ctrl-Q now exits the game.
- Keys 1-3 during the intro now select the alternative starts.
- Win32 only: Ctrl-F12 toggles fullscreen/windowed mode.
Source Code
The JJFFE source code contains the original decompiled asm code as well as the additional code that was created to support running on different systems.
The original listing from the archived copy of the JJFFE site (approx 2011) contained a useful commentary on the purpose of each file in the archive - several of the files listed here are not in the source archive that we were able to recover (notably the dos and alleg dirs are missing, as are the Dos mak files):
ffe.asm - Main assembler source
ffedat.asm - Main assembler data
ffebmp.asm - Missions, models and bitmaps data
ffeapi.h - Header for JJFFE API
ffecfg.h - Header for config code
ffecfg.c - Config code
ffemisc.c - Misc. C code
hmp.cpp - Hmp->mid conversion code
ffewin.cfg - Config file for DirectX versions
ffedos.cfg - Config file for DJGPP/HMI version
ffedosal.cfg - Config file for DJGPP/Allegro version
ffelnxal.cfg - Config file for Linux/Allegro version
jjffent4.dsp - MSVC project file for Win32/DirectX3 version
jjffewin.dsp - MSVC project file for Win32/DirectX5 version
jjffew32.dsw - MSVC workspace file for both projects
ffedos.mak - Makefile for DJGPP/HMI version
ffedal.mak - Makefile for DJGPP/Allegro version
ffelal.mak - Makefile for Linux/Allegro version
srctools/ffedis.cpp - Decompiler code
srctools/convdata.cpp - String<->hex data conversion code
srctools/bmpconv.cpp - BMP->data conversion code
srctools/funcloc.cpp - Mapfile reordering code
srctools/expbmp.cpp - Data->BMP conversion code
srctools/gmstruct.txt - Partial map of D8804 structure
srctools/plstate.txt - Various other structure maps
srctools/shuttle.txt - Some 3d model structure info
srctools/c*.txt - Various partially-decoded functions
dos/dosapi.c - Main DJGPP/HMI code
dos/dosdir.c - DJGPP directory code
dos/dosinp.asm - DJGPP/HMI low-level input code
dos/dostime.asm - DJGPP/HMI low-level timer code
dos/dosvid.asm - DJGPP/HMI low-level display code
dos/doshmi.asm - DJGPP/HMI low-level HMI (sound) code
dos/dossound.asm - DJGPP/HMI low-level sound interface code
dos/joytest.cpp - DOS joystick tester util code
dos/joycalib.cpp - DOS joystick calibrator util code
dos/maccmain.c - DOS mouse accelerator util code
dos/macc.asm - DOS mouse accelerator util low-level code
linux/linuxdir.c - Linux directory code
linux/lnxconv.c - Linux underscore conversion util code
alleg/allegsnd.c - Allegro sound code
alleg/allegapi.c - Other Allegro code
win32/win32api.h - DirectX internal header
win32/w32dir.cpp - Win32 directory code
win32/w32input.cpp - DirectX5 input code
win32/w32inpnt.cpp - DirectX3 input code
win32/w32time.cpp - Win32 timer code
win32/w32video.cpp - DirectX display code
win32/w32sound.cpp - DirectX sound code
sdl/sdlvideo.cpp - SDL display code
sdl/sdlsound.cpp - SDL sound code
sdl/sdlinput.cpp - SDL input code
sdl/sdltimer.cpp - SDL timer code
The following were noted as being correct versions etc at the time (approx 2011) if you are looking to recompile yourself.
- DOS (DJGPP)
- GCC (Any version)
- Allegro 3.12 (Tested) or newer
make -f ffedos.makormake -f ffedosal.mak
- Windows
- MSVC 6 SP4 (Tested)
- DirectX 6.1 SDK (Required) or SDL (Optional)
- Linux
- GCC (Any version)
make -f ffelnxal.makormake -f ffelnxsdl.mak
- Assembler: NASM 0.98.
- Note: Use
NASMW.EXE(Windows) renamed toNASM.EXEor a DJGPP-compiled version. Do not use real-mode DOS binaries (insufficient memory for large files). - Incompatibility: Avoid NASM 0.98.08 (contains a bug that prevents JJFFE compilation).
- Note: Use