OpenTESArena
This open-source project aims to be a modern engine re-implementation for the 1994 video game The Elder Scrolls: Arena by Bethesda Softworks. It is written in C++17 and uses SDL2, WildMIDI for music, and OpenAL Soft for sound and mixing. There is support for Windows, Linux, and macOS.
Current status
No actual gameplay yet, but all locations and interiors can be accessed for testing. Citizens wander around cities and the wilderness but cannot be interacted with. Fast traveling works and you can go to any city or dungeon on the world map. Collision detection is barebones (just enough for playtesting) and needs work. Character creation works but character questions and player attributes are not implemented. Some of the in-game interface icons work; for example, left clicking the map icon goes to the automap, and right clicking it goes to the world map.
Controls:
- WASD - move and turn. Hold LCtrl to strafe.
- Esc - pause menu
- Tab - character sheet
- F - draw/sheathe weapon
- G - hold and click voxel to destroy
- L - logbook
- M - world map
- N - automap
- V - status
- F2 - player position
- F4 - debug profiler
- PrintScreen - screenshot
Project Details
Inspired by OpenXcom and OpenMW, this started out as a simplistic ray tracing tech demo in early 2016, and is now steadily inching closer to something akin to the original game. I am using a clean-room approach for understanding Arena's algorithms and data structures, the details of which can be found in the wiki. It is a behavioral approximation project, not about matching machine instructions, and quality-of-life changes are made where they make sense.
There are two versions of Arena (both available for free): the floppy disk version and the CD one. The player must acquire their own copy of Arena because OpenTESArena is a standalone engine and does not contain content.
Check out CONTRIBUTING.md for more details on how to assist with development.
Installation
If you would like music played in-game, see Music setup below after installing. The engine uses ArenaPath
and MidiConfig
from the options file to find where the game files and MIDI config are.
Windows
Get the data files for The Elder Scrolls: Arena
Download the full game from one of:
- Bethesda website (floppy disk version)
- Extract
Arena106Setup.zip
and runArena106.exe
. - Pick a destination folder to install anywhere on your hard drive. You can copy installed files to the OpenTESArena
data
folder later.
- Extract
- Steam (CD version)
- GOG (CD version)
Install OpenTESArena
- Download the most recent build from the releases tab.
- Extract the
.zip
. - Open
options-default.txt
in theoptions
folder and changeArenaPath
to where you put theARENA
/ARENACD
folder. - Run
OpenTESArena.exe
.
If you see an error about missing MSVCP141.dll or similar, download and run the Visual C++ Redistributable Installer for Windows:
- 64-bit (recommended):
vc_redist.x64.exe
- 32-bit:
vc_redist.x86.exe
If you see a warning about alcOpenDevice()
failing, or there is no sound, download the OpenAL 1.1 Windows Installer and run oalinst.exe
.
macOS
Get the data files for The Elder Scrolls: Arena
- Download the full game from Bethesda website.
- Extract
Arena106Setup.zip
. Arena106.exe
is a self-extracting RAR file. Use a tool such as The Unarchiver to extract it into a folder of data files.
Install OpenTESArena
- Download the most recent build from the releases tab.
- Open the
.dmg
and copy OpenTESArena to theApplications
folder or another location. - Right-click on the app and choose "Show Package Contents".
- Navigate to
Contents/Resources/data
and copy in the files for Arena that you extracted earlier. - Return to the
Applications
folder or wherever you have the app installed and openOpenTESArena
. If you have Gatekeeper turned on (the default for macOS), you will need to do the following:- Right-click on the app and choose "Open".
- In the warning that appears saying that it is from an unidentified developer, choose "Open".
- The app will start. In the future, you can just double-click on the app without having to go through these steps.
Linux (Debian/Ubuntu)
Substitute <version>
with the current version number (0.#.0
) and <arch>
with your desired architecture (x86-64
, rpi4
).
sudo apt-get install wget unzip rar
wget https://cdnstatic.bethsoft.com/elderscrolls.com/assets/files/tes/extras/Arena106Setup.zip
wget https://github.com/afritz1/OpenTESArena/releases/download/opentesarena-<version>/opentesarena-<version>-linux_<arch>.tar.gz
tar xvzf opentesarena-<version>-linux_<arch>.tar.gz
cd opentesarena-<version>-linux_<arch>/data
unzip ../../Arena106Setup.zip
rar x Arena106.exe
cd ..
./run.sh
Options files
options-default.txt
comes with releases and stores default settings. options-changes.txt
is generated in your user prefs folder and stores user-specific settings, and you can either create it yourself or let the program create it. For now, you can change things like ArenaPath
in options-default.txt
, but in the future, a wizard will take care of this instead. The prefs folders are:
- Windows:
<username>/AppData/Roaming/OpenTESArena/options/
- Linux:
~/.config/OpenTESArena/options/
- macOS:
~/Library/Preferences/OpenTESArena/options/
Music setup
Arena uses MIDI files for music, so the user must have MIDI sound patches in order to have music play in-game.
The easiest way is to download one of the eawpats packages (zip, tar.gz) and place the extracted eawpats
folder into the OpenTESArena data
folder.
If you would like to use a different sound patches library like OPL3, edit MidiConfig
in the options file to point to the MIDI .cfg
file for that library.
Building from source
Project dependencies
- CMake
- OpenAL Soft 1.19.1
- SDL 2.0.10
- WildMIDI 0.4.4 (optional; required for music)
Unix terminal commands on a fresh machine:
sudo apt-get install git g++ cmake libsdl2-dev libopenal-dev libwildmidi-dev
Building the executable
- Navigate to the root of the repository
- Use CMake to generate your project file (Visual Studio .sln, Unix Makefile, etc.). In a Unix terminal, the commands might look like:
where
mkdir build cd build cmake -DCMAKE_BUILD_TYPE=<?> .. make -j8
CMAKE_BUILD_TYPE
is one ofDebug
|DebugFast
|ReleaseGeneric
|ReleaseNative
. For maximum optimizations,ReleaseNative
should be used. - Other parameters for CMake may be necessary depending on the IDE you are using.
Running the executable
- Verify that the
data
andoptions
folders are in the same folder as the executable. If not, then copy them from the project's root folder (this should be fixed in the future with a post-build command). - Make sure that
MidiConfig
andArenaPath
in the options file point to valid locations on your computer (i.e.,data/eawpats/timidity.cfg
anddata/ARENA
respectively).
If you struggle, here are some more detailed guides:
If there is a bug or technical problem in the program, check out the issues tab!
Resources
The Unofficial Elder Scrolls Pages are a great resource for information all about Arena. Various tools like WinArena and BSATool allow for browsing Arena's content, and there is a very detailed manual as well. I also recommend the Lazy Game Review on YouTube for a humorous overview of the game's history and gameplay.