0.4.0
- ozCore
- null replaced by nullptr keyword
- global abs(), min(), max(), clamp() and hash() functions, overloaded where necessary
- container improvements
- improved iterators: much less code duplication, no more key() and value() members
- STL-like begin() and end() members on containers
- new Set template class: Map with arbitrary elements instead of key-value pairs
- HashIndex and HashString merged into new HashMap template class with an arbitrary key type
- new HashSet template class: hashtable of arbitrary elements instead of key-value pairs
- String: construction from numbers, new number parsing functions
- new Mat33 class
- SIMD support for linear algebra classes
- new SpinLock class
- ALSA and OSS back-ends for System::bell()
- linear algebra classes added as primitives to streams, Log and JSON
- PFile class merged into File class
- ozDynamics: new rigid body dynamics library
- collision
- primitives: Box, Capsule, Polytope, Compound
- collision
- ozEngine: new engine building blocks library
- GL class for OpenGL utilities: error checks, DDS texture loader
- AL class for OpenAL utilities: error checks, WAVE & Vorbis loader, Vorbis streamer
- Window class based on client::Window
- Pepper class based on client::NaClPlatform
- matrix
- melee attack
- ui
- UI colours, fonts and layouts can be configured in
ui/style.json
- UI colours, fonts and layouts can be configured in
- client
- text-to-speech using eSpeak library
- SMM models can be rendered at BSP entities
- builder
- Context generates mipmaps and S3TC textures (using libsquish) without initialising OpenGL
- general
- ported to Android (i686, ARM, ARMv7a, MIPS)
- LuaJIT can be optionally used instead of official Lua
0.3.1
- client
- credits screen
- general
- Win32 port fixed, bugfixes, polishing ...
0.3.0
- oz
- more C++11 features
- move semantics
- defaulted & deleted functions
- explicit overrides
- new exception specification
- limited use of initialiser lists
- limited use of constexpr (float constants)
- (D)List renamed to (D)Chain, (S)Vector renamed to (S)List
- String class has more consistent members, parsing functions added
- Vec3, Vec4, Quat don't inherit from each other or Simd class
- AABB & Bounds moved to liboz from matrix
- Mutex, Semaphore and Thread classes for high-level thread management
- new Time class
- new StackTrace class (split from System class)
- System::bell()
- OutputStream is readable
- new BufferStream class (OutputStream with dynamic internal storage)
- File class: file type and size setting changed, added support for NaCl local filesystems
- new PFile class: version of File class to act as PhysicsFS wrapper
- Log supports operator << for printing streams
- new JSON class for manipulating JSON files
- Config class removed
- clearmacros.hh header to undefine liboz macros that might conflict other libraries
- can be compiled as a shared library
- additional Linux dependency: PhysicsFS, optional dependency for Linux: libpulse-simple
- better Win32 support, POSIX API replaced with Win32 API where possible
- ported to NaCl
- fully documented
- ZLIB licence
- more C++11 features
- common
- new layer, split from matrix
- Span and Timer classes moved to common from matrix
- new Lingua class, gettext-like system, but modularised and suitable for data package system
- matrix
- BSPs, object classes, fragment pools, client imagos and audios are internally referenced by pointers or indices instead by strings, several lookup hashtables replaced by arrays
- object attributes: tell what special abilities an object can have (nigh vision, binoculars, satnav, music player ...)
- fragment pools: particle replacements; fragments can be configured like object classes, can have a graphic model assigned, etc.
- keys: object can have assigned a key value, so it can lock/unlock matching structure entities
- lava: can be used both in structures and terrain instead of sea
- objects can be rotated around z axis in 90° steps
- physics
- object tracks lower entity: when an entity moves horizontally it also moves objects on top
- sliding damage
- configurable gravity
- fine-tuning of constants and many small improvements and bugfixes
- structures
- crushing: structures fall into terrain, and crush objects in their way
- bound objects: objects that are created together with a structure and destroyed with it; useful for defence turrets
- air brushes to tag certain structure areas that should not be filled with water when the structure is under sea
- sea brushes tag areas with the same content as terrain sea (including fog colour)
- no more need for hull around BSPs
- triggers: some entities can be activated; they can trigger themselves or other entities
- entities can be locked/unlocked with appropriate key
- manual doors
- elevators
- client
- smooth loading: model loading split to preloading (mapping file to memory) that is run in a new thread and upload to graphic card that has to be synchronous with rendering
- textures have 3 components: diffuse (base colour), masks (per-pixel specular and emission masks) and normal map
- objects are filtered from rendering if aspect angle from eye is too small
- configurable fog colour for both terrain and structure water/lava
- Mesh class
- meshes are not rendered immediately but lists are created for each mesh and all instances of a mesh are rendered together
- MD2-like vertex animation integrated into Mesh class
- offscreen rendering support
- postprocessing, bloom postprocess effect
- Camera class & proxies
- smoothing of movement and rotation
- colour transformation matrix, used for visual effects like injuries, night vision, black-and-white sequences ...
- camera bob, walk/run animations and footsteps sounds are synchronised to a counter in Bot class
- CinematicProxy class for scripted camera movements, colours, music track setting ...
- *Audio classes
- footstep and swim sounds
- filtering of high-frequency events
- velocity is set for sound sources and listener
- Sound class
- sounds are played asynchronously, parallel to rendering
- asynchronous streaming of tracks
- support for music in MP3 and AAC formats
- a user-specified directory can be searched for music
- new Input class
- key-to-action mappings, key/mouse sensitivity etc.
- input.json configuration file
- resizable main window
- new main menu, mission selection menu
- builder
- prebuilding entirely split from the runtime part of the engine
- SDL_image replaced by FreeImage, wider range of image formats supported as prebuilding source
- 16-bit colour components for terrain heightmap
- no more encapsulating a BSP with a box
- fragment pools and object classes are compiled
- tools
- ozGettext tool for extracting structure, entity, object names and strings from mission scripts for translation
- ozManifest for generating package manifests for NaCl port
- ozSineSample for generating
src/oz/bellSample.inc
- general
- PhysicsFS used for accessing game data, so they can be loaded directly from archives
- game data can be modularised into packages
- Lua API redesigned
- Lua classes share API code - no more code triplication of Lua API implementations
- ported to SDL 2.0
- ported to NaCl
- PKGBUILD for Arch Linux and RPM spec file