Skip to content

Commit

Permalink
Updated README.md
Browse files Browse the repository at this point in the history
Reorganized a lot of things, changed preferred Arena download to Steam, added collapsible sections.
  • Loading branch information
afritz1 authored Jul 16, 2024
1 parent 079899d commit 73927a5
Showing 1 changed file with 101 additions and 71 deletions.
172 changes: 101 additions & 71 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,16 @@
[![Discord](https://img.shields.io/discord/395739926831824908.svg?label=&logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2)](https://discord.gg/DgHe2jG)
[![YouTube Channel Views](https://img.shields.io/youtube/channel/views/UCJpmkgtHRIxR7aOpi909GKw)](https://www.youtube.com/channel/UCJpmkgtHRIxR7aOpi909GKw)

This open-source project aims to be a modern engine re-implementation for the 1994 video game [*The Elder Scrolls: Arena*](https://en.wikipedia.org/wiki/The_Elder_Scrolls:_Arena) by Bethesda Softworks. It is written in C++20 and uses SDL2, WildMIDI for music, and OpenAL Soft for sound and mixing. There is support for Windows, Linux, and macOS.
This is an in-progress modern open-source engine for the 1994 DOS game [*The Elder Scrolls: Arena*](https://en.wikipedia.org/wiki/The_Elder_Scrolls:_Arena) by Bethesda Softworks. The goal is to eventually replicate all aspects of the original game with a clean-room approach while quality-of-life changes are made along the way. Details on Arena's inner-workings can be found in the [wiki](https://github.com/afritz1/OpenTESArena/wiki). No game assets are distributed.

<br/>

![Preview](Preview.PNG)
<br/>

## 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.
No actual gameplay yet, but all locations and interiors can be accessed. Citizens wander around but can't be interacted with. Collision detection is barebones and needs work. Character creation works but class questions and player attributes are not implemented.

Controls:
- WASD - move and turn. Hold LCtrl to strafe.
Expand All @@ -26,101 +31,122 @@ Controls:
- F4 - debug profiler
- PrintScreen - screenshot

<br/>
## Playing OpenTESArena

![Preview](Preview.PNG)
<br/>

## Project Details
<details>
<summary>Windows</summary>

Inspired by [OpenXcom](https://openxcom.org/) and [OpenMW](https://openmw.org/en/), 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](https://github.com/afritz1/OpenTESArena/wiki). It is a behavioral approximation project, not about matching machine instructions, and quality-of-life changes are made where they make sense.
#### Download [*The Elder Scrolls: Arena* on Steam](https://store.steampowered.com/app/1812290/The_Elder_Scrolls_Arena/)

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.
#### Download OpenTESArena
1. [Get latest Windows build](https://github.com/afritz1/OpenTESArena/releases)
1. Extract the `.zip`

Check out [CONTRIBUTING.md](CONTRIBUTING.md) for more details on how to assist with development.
#### Copy game assets path
1. In your Steam library, right click *The Elder Scrolls: Arena* then select Manage -> Browse local files
1. Open `ARENA` folder then highlight and copy the current directory path with Ctrl+C
1. In the OpenTESArena folder, open `options/options-default.txt` and paste the game directory after `ArenaPath=`
- Example: `ArenaPath=C:\Program Files (x86)\Steam\steamapps\common\The Elder Scrolls Arena\ARENA`

#### Run `OpenTESArena.exe`

## Installation
#### Music (optional)
1. Download [eawpats](https://github.com/afritz1/OpenTESArena/releases/download/opentesarena-0.1.0/eawpats.zip)
1. Extract the `.zip`
1. Move the extracted `eawpats` folder inside the OpenTESArena `data` folder
- If you'd like a different sound patches library like OPL3, edit the value of `MidiConfig` in `options/options-default.txt` so it points to the MIDI `.cfg` file for that library

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.
#### Common issues
- Missing MSVCP141.dll error
- Download and run latest X64 [vc_redist.x64.exe](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) from Microsoft
- No sound, `alcOpenDevice()` warnings
- Download [OpenAL 1.1 Windows Installer (zip)](https://www.openal.org/downloads/) and run `oalinst.exe`

### Windows
#### Get the data files for *The Elder Scrolls: Arena*
Download the full game from one of:
- [Bethesda website](https://cdnstatic.bethsoft.com/elderscrolls.com/assets/files/tes/extras/Arena106Setup.zip) (floppy disk version)
1. Extract `Arena106Setup.zip` and run `Arena106.exe`.
1. Pick a destination folder to install anywhere on your hard drive. You can copy installed files to the OpenTESArena `data` folder later.
- [Steam](https://store.steampowered.com/app/1812290/The_Elder_Scrolls_Arena/) (CD version)
- [GOG](https://www.gog.com/game/the_elder_scrolls_arena) (CD version)

#### Install OpenTESArena
1. Download the most recent build from the [releases](https://github.com/afritz1/OpenTESArena/releases) tab.
1. Extract the `.zip`.
1. Open `options-default.txt` in the `options` folder and change `ArenaPath` to where you put the `ARENA`/`ARENACD` folder.
1. Run `OpenTESArena.exe`.
</details>

If you see an error about missing MSVCP141.dll or similar, download and run the [Visual C++ Redistributable Installer](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) for Windows:
- 64-bit (recommended): `vc_redist.x64.exe`
- 32-bit: `vc_redist.x86.exe`
<details>
<summary>Linux (Debian-based)</summary>

If you see a warning about `alcOpenDevice()` failing, or there is no sound, download the [OpenAL 1.1 Windows Installer](https://www.openal.org/downloads/) and run `oalinst.exe`.

### macOS
#### Get the data files for *The Elder Scrolls: Arena*
1. Download the full game from [Bethesda website](https://cdnstatic.bethsoft.com/elderscrolls.com/assets/files/tes/extras/Arena106Setup.zip).
1. Extract `Arena106Setup.zip`.
1. `Arena106.exe` is a self-extracting RAR file. Use a tool such as [The Unarchiver](https://theunarchiver.com) to extract it into a folder of data files.

#### Install OpenTESArena
1. Download the most recent build from the [releases](https://github.com/afritz1/OpenTESArena/releases) tab.
1. Open the `.dmg` and copy OpenTESArena to the `Applications` folder or another location.
1. Right-click on the app and choose "Show Package Contents".
1. Navigate to `Contents/Resources/data` and copy in the files for Arena that you extracted earlier.
1. Return to the `Applications` folder or wherever you have the app installed and open `OpenTESArena`. If you have Gatekeeper turned on (the default for macOS), you will need to do the following:
1. Right-click on the app and choose "Open".
1. In the warning that appears saying that it is from an unidentified developer, choose "Open".
1. 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`).
#### Download packages
```bash
sudo apt-get install wget unzip rar
```

#### Download *The Elder Scrolls: Arena*
```bash
wget https://cdnstatic.bethsoft.com/elderscrolls.com/assets/files/tes/extras/Arena106Setup.zip
```

#### Download OpenTESArena
Replace `<version>` with the latest build number (`#.##.#`) and `<arch>` with an architecture (`x86-64`, `rpi4`) available on the [Releases](https://github.com/afritz1/OpenTESArena/releases) page.
```bash
wget https://github.com/afritz1/OpenTESArena/releases/download/opentesarena-<version>/opentesarena-<version>-linux_<arch>.tar.gz
tar xvzf opentesarena-<version>-linux_<arch>.tar.gz
```

#### Extract game assets
```bash
cd opentesarena-<version>-linux_<arch>/data
unzip ../../Arena106Setup.zip
rar x Arena106.exe
```

#### Run OpenTESArena
```bash
cd ..
./run.sh
```

#### Music (optional)
1. Download [eawpats](https://github.com/afritz1/OpenTESArena/releases/download/opentesarena-0.1.0/eawpats.tar.gz)
1. Extract the `.tar.gz`
1. Move the extracted `eawpats` folder inside the OpenTESArena `data` folder
- If you'd like a different sound patches library like OPL3, edit the value of `MidiConfig` in `options/options-default.txt` so it points to the MIDI `.cfg` file for that library

</details>

<details>
<summary>macOS</summary>

#### Download *The Elder Scrolls: Arena*
1. Get the full game from the [Bethesda website](https://cdnstatic.bethsoft.com/elderscrolls.com/assets/files/tes/extras/Arena106Setup.zip)
1. Extract `Arena106Setup.zip`
1. `Arena106.exe` is a self-extracting RAR file. Use a tool such as [The Unarchiver](https://theunarchiver.com) to extract it into a folder of data files

#### Install OpenTESArena
1. Download the latest [macOS build](https://github.com/afritz1/OpenTESArena/releases)
1. Open the `.dmg` and copy OpenTESArena to the `Applications` folder or another location
1. Right-click on the app and choose "Show Package Contents"
1. Navigate to `Contents/Resources/data` and copy in the files for Arena that you extracted earlier

#### Run OpenTESArena
1. Return to the `Applications` folder or wherever you have the app installed and open `OpenTESArena`. If you have Gatekeeper turned on (the default for macOS), you will need to do the following:
1. Right-click on the app and choose "Open"
1. In the warning that appears saying that it is from an unidentified developer, choose "Open"
1. The app will start. In the future, you can just double-click on the app without having to go through these steps

</details>

### 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:
`options-changes.txt` is created in your user prefs folder the first time OpenTESArena runs and stores values that differ from the ones in `options-default.txt`.
- 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](https://github.com/afritz1/OpenTESArena/releases/download/opentesarena-0.1.0/eawpats.zip), [tar.gz](https://github.com/afritz1/OpenTESArena/releases/download/opentesarena-0.1.0/eawpats.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 OpenTESArena from source

## Building from source

### Project dependencies
### Dependencies
- [CMake](https://cmake.org/download/)
- [OpenAL Soft 1.19.1](https://openal-soft.org/#download)
- [SDL 2.0.10](https://github.com/libsdl-org/SDL/releases)
- [WildMIDI 0.4.4](https://github.com/Mindwerks/wildmidi/releases) (optional; required for music)
- [WildMIDI 0.4.4](https://github.com/Mindwerks/wildmidi/releases) (required for music)

Unix terminal commands on a fresh machine:
Example Unix terminal commands on a fresh machine:
```bash
sudo apt-get install git g++ cmake libsdl2-dev libopenal-dev libwildmidi-dev
```

### Building the executable
### Building OpenTESArena
- 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:
```bash
Expand All @@ -129,19 +155,23 @@ sudo apt-get install git g++ cmake libsdl2-dev libopenal-dev libwildmidi-dev
cmake -DCMAKE_BUILD_TYPE=<?> ..
make -j8
```
where `CMAKE_BUILD_TYPE` is one of `Debug`|`DebugFast`|`ReleaseGeneric`|`ReleaseNative`. For maximum optimizations, `ReleaseNative` should be used.
- Other parameters for CMake may be necessary depending on the IDE you are using.
where `CMAKE_BUILD_TYPE` is one of `Debug`|`ReleaseGenericNoLTO`|`ReleaseGeneric`|`ReleaseNative`
- For maximum compatibility, use `ReleaseGeneric`
- For maximum speed only compatible with your specific CPU, use `ReleaseNative`
- Other parameters for CMake may be necessary depending on the IDE you are using

### Running the executable
- Verify that the `data` and `options` 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` and `ArenaPath` in the options file point to valid locations on your computer (i.e., `data/eawpats/timidity.cfg` and `data/ARENA` respectively).
### Running OpenTESArena
- Verify that the `data` and `options` 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` and `ArenaPath` in the options file point to valid locations on your computer (i.e., `data/eawpats/timidity.cfg` and `data/ARENA` respectively)
If you struggle, here are some more detailed guides:
Other guides:
- [Building with Visual Studio (Windows)](docs/setup_windows.md)
- [Building with MSYS2 (Windows)](docs/setup_windows_msys2.md)
If there is a bug or technical problem in the program, check out the issues tab!
## Contributing
Check out [CONTRIBUTING.md](CONTRIBUTING.md) for details on how to assist with development.
## Resources
The [Unofficial Elder Scrolls Pages](https://en.uesp.net/wiki/Arena:Arena) are a great resource for information all about Arena. [Various tools](https://en.uesp.net/wiki/Arena:Files#Misc_Utilities) like WinArena and BSATool allow for browsing Arena's content, and there is a very detailed [manual](https://en.uesp.net/wiki/Arena:Files#Official_Patches_and_Utilities) as well. I also recommend the [Lazy Game Review](https://www.youtube.com/watch?v=5MW5SxKMrtE) on YouTube for a humorous overview of the game's history and gameplay.
- [Unofficial Elder Scrolls Pages](https://en.uesp.net/wiki/Arena:Arena) - a great resource for information about Arena
- [Various tools](https://en.uesp.net/wiki/Arena:Files#Misc_Utilities) like WinArena and BSATool for browsing Arena's assets
- The Elder Scrolls: Arena [manual](https://en.uesp.net/wiki/Arena:Files#Official_Patches_and_Utilities)

0 comments on commit 73927a5

Please sign in to comment.