- The
redhorizon-classic
module is now up on Maven central, allowing Java/JVM developers to use it as a way of reading classic C&C files or decoding C&C file data. Instructions in the README of theredhorizon-classic
project folder. - A paletted sprite shader was created, and is used in the unit viewer so that can now do faction-based palette shifting to show what units would look like for different factions.
- Add native support for M1 macs. This is through Java 17 (the first Java LTS release with native support for the M1 processors) and a custom-built version of the ImGui binaries. As such, Java 17 is now required for this project.
- Restored the paletted PNG -> Dune 2 SHP converter
- Toggle fullscreen mode on double click (Windows only)
- Sort files by name in the explorer when browsing a mix file
- Attempt to determine the type of a file when browsing a mix file in the explorer, allowing it to be previewed
- Added Red Alert video names for when viewing those mix files
- The Red Horizon Explorer is now a subcommand of the Red Horizon CLI, so to
use it you now run
./bin/redhorizon explorer
on Mac, or./bin/explorer.bat explorer
on Windows - Project and dependencies now running on Groovy 4.0.0
- Update LWJGL to 3.3.0+ and ImGui to 1.86.0+ for better support of M1 macs (note that this is using Java 11 which only has an x86 release, so will be running using Rosetta)
- Improve UI scaling to go with any OS display scaling settings
Been a good while since I did a release, but thought I should make one to mark
some progress. This release has a new CLI tool, what I've dubbed the "Red
Horizon Explorer" (run ./bin/explorer
or ./bin/explorer.bat
) whose goal is
to be able to browse your file system and C&C's mix files like you would a
normal file explorer. I got tired of having to extract files from mix files, or
having to know the name of a file in advance inside the mix file just to look at
them, so this is something I've wanted to make for a while.
It's OK at browsing the file system, and can currently only peek into Red
Alert's Conquer.mix
file (mostly contained unit/structure graphics). This is
because the metadata in mix files on what is inside them is rather sparse, so
you have to manually build these lookup tables and writing ones for every mix
file is quite tedious!
So it's pretty rough for now, but I'm hoping to make lots of improvements in future releases.
- Another rendering performance improvement by bundling several materials into a single one such that it all lives in GPU memory and is rendered in a single draw call. Currently used for drawing all map tiles.
- Move a lot of the graphical effects to shaders to run on the GPU: the scanline effect, and the smooth scaling of low-res graphics to higher resolutions.
- Merged all of the various CLI tools into a single one. Now each tool is a
subcommand of a main
redhorizon
one. - Implemented basic batch rendering and object culling to speed up rendering
- Replaced the OpenGL fixed-function pipeline with a modern shader-based renderer. This opens up Red Horizon to do paletted textures on the GPU. A minimum of OpenGL 4.1 is now needed.
- Added ImGui to include debug info, which was normally emitted in log files, right in the view.
- Upgrade the reflections library which came with a change that removes the large Google Guava dependency - we're now 2MB lighter
- Use the current desktop refresh rate in full screen mode instead of always replacing it with the highest the monitor can do
- Added a resource manager which can search for items inside a directory and
all its subdirectories, loosening one restriction of the map viewer only
working with my current setup. However, a new restriction is that it doesn't
yet work on
.mix
files inside.mix
files, so it's still somewhat specific to my workspace 😅 - Sped up map rendering and reduced memory usage by reusing map tiles already encountered
- Lean on Java's built-in blowfish cipher to replace the BlowfishJ library I'd been using.
- Renamed the unit viewer to a general purpose object viewer, and gave it the ability to view Red Alert mission maps. Currently only works with the directory structure I have for local dev and doesn't work for interior maps.
- Converted the C/C++ code for reading encrypted MIX files to Groovy - no more native platform compilers needed for supporting other platforms
- Rebuilt the file conversion utility (the
convert
CLI tool), which currently supports the following file conversions:- PCX -> CPS
- paletted PNG -> C&C SHP
- Added more options to the media player, including less blurry filtering, a full screen mode, play/pause, and more
- Created a unit/structure viewer which supports a handful of units that I have
added configuration files for (see: the
view
CLI tool)
- Improve performance of VQA file playback
- Allow playback of some VQA files in Red Alert that contain unknown data
- Support for viewing SHP files (puts all the frames up on the screen at once) with either the RA/TD "temperate" palette
- When viewing images/animations/videos, don't let the window get bigger than the smallest screen in a multi-monitor setup (#31)
- Support for playing VQA files through the media player
- Performance improvements when streaming files, reducing memory usage by deleting old sound buffers / animation frames
- Media player window is no longer fixed to 640x480, now growing to some value that is almost as large as the primary display, while maintaining the desired aspect ratio
- Support for playing WSA files through the media player
- Can now view images and animations on Windows
- Performance improvements to not peg the CPU during graphics rendering
First release on GitHub! 🎉 What this release represents is an attempt to move this project forward since I started it back in 2007 by targeting some smaller goals and steps to bring it back up to a working state. The 0.30.x releases will focus on being able to view the old C&C/RA content such as images, animations, videos, sounds, music, etc, through some very basic CLI tools.
This release has the ability to read standard and encrypted (RA) mix files to extract their contents to disk (via the mix CLI tool), and play AUD files and view PCX files (via the play CLI tool).