-
Notifications
You must be signed in to change notification settings - Fork 68
Home
OpenTESArena is an open-source engine re-implementation for "The Elder Scrolls: Arena" by Bethesda Softworks, being developed from scratch in modern C++. It requires a copy of the original game data from either the floppy disk version (available on the official website here) or the CD version in order to play.
Early on, documentation about Arena's technical details was either hard to find or non-existent, but thanks to the efforts of several contributors, this wiki now contains a large collection of information regarding all aspects of the game, and continues to be revised from time to time.
The Arena manual is also an excellent resource for understanding the game's rules and design. However, not all of the stated values are accurately reproduced in-game. Therefore, the behavior of the original executable is preferred for tie-breaking and new quality-of-life changes are based off of it as well.
Features may come and go from here, or be moved around, depending on how the project is progressing. This list is not exhaustive.
- Scene change redesign (combine interior/exterior/wilderness transitions into one "scene change" type)
- 3D renderer API redesign (instance geometry, texture handle allocation for voxels/entities/sky, intermediate chunk render format, per-frame data via RenderFrameSettings, etc.)
- Redesign existing software renderer to be "classic" renderer (8-bit paletted, any resolution from 320x200 to 4k, point texture filtering, light tables, dithering, scales with several CPU threads)
- Entity interaction support (interaction types, usable containers, placeholder conversation UI)
- Key locks implementation (pick up key and open associated door)
- Initial inventory implementation (pick up/equip/drop placeholder items, generate placeholder items in loot/corpses, quest items do nothing)
- Initial combat implementation (player health bar from class, enemies run towards player and attack, death animations, sounds)
- Attributes, level + experience, stat calculation, weight, stamina, speed, restrictions
- NPC conversation support (citizen name, personality, ask directions, placeholder rumors/work)
- NPC name generation
- Initial camping implementation (pass time, heal, no enemy spawning)
- "Modern" software renderer implementation (true color, 3D camera, trilinear texture filtering + mipmapping, ray cast hard shadows)
- Screen-space fog
- Automap notes
- Character class generation questions
- Items generated from original data (no magical effects)
- Enemy loot tables (based on level)
- Ground loot tables
- Loading/saving (+ classic save support)
- NPC merchant item tables (tavern, blacksmith, wizard)
- NPC services (tavern room, temple healing, equipment repair)
- Collision detection (+ climbing, jumping, swimming)
- City guards after committing a crime
- Lockpicking (locked containers and buildings)
- Random enemy spawning (based on level)
- Pickpocketing
- Vehicle support (rowboats)
- No wandering NPCs at night
- Character class traits/specials
- Holidays
- Logbook
- Quests
- Spells/enchantments
- Automap zoom-in/out
- AZERTY + QWERTZ keyboard support (see strings in original executable)
- Gamepad support
- Key rebinding
- Localization
- Save game versioning support
- Replace UI panels with more data-driven "UI collections"
- UI scaling
- Support for all of the original game's major data formats
- City generation
- Wild generation
- Main quest dungeons
- Initial citizen spawning and color variation support
- Puddle reflections
- Voiced cinematic support (CD version only)
- Music library system (user-defined MIDI filenames in text file)
- City entrance jingle
- Chunk system to replace fixed-size game world (#181)
- Texture system redesign to decouple SDL2 from texture management and allow future support for other image formats (PNG, etc.) (#192)
- Weather effects (rain, snow, thunderstorms), no screen-space fog
- Input system redesign (input listener registration, input action definitions, easier to add key rebinding later on) (#219)
- UI system redesign (add UI texture handle allocation, UI building blocks like image texture functions, vector space geometry, anchoring, draw calls) (#209, #216, #220)