New Features
- The Linux port is complete. It provides native Linux text and graphics windows and uses the standard id.cfg video mode table.
- The macOS port is complete and provides the same support as Linux. (Fixes #42)
- Libraries are used to group data files for Id. (Fixes #95)
- The documentation is now available in PDF format. (Fixes #262)
- The raytrace output format can now be specified by name instead of just by number. (Fixes #318)
- The DXF raytrace output format is documented in the help file. (Fixes #317)
- The previous browse history limit of 16 files was relaxed; it is now limited only by available memory.
- Random-dot stereogram generation now honors rseed=, making RDS output deterministic when a seed is specified.
- Random-dot stereograms can now be generated in batch mode using rds= and rds-texture=. (Fixes #227)
- Formula rand now honors rseed=, making formulas that use rand repeatable when a seed is specified. (Fixes #363)
- Formula comparison operators now document that they compare only the real parts of operands. (Fixes #358)
- The Burning Ship fractal type now documents its formula and parameters. (Fixes #426)
- makepar now writes legacy color ranges when saving parameters from legacy GIF images. (Fixes #428)
- Fractal types using random numbers now consistently honor rseed=, making seeded random fractals repeatable across fractal types.
- Formula, IFS, and L-system item names now preserve user-entered case in parameter output while still matching entries case-insensitively. (Fixes #364)
- Image tests now cover periodicity checking with non-default settings. (Fixes #354)
- The bibliography now includes "Chaos and Fractals: New Frontiers of Science". (Fixes #365)
- Online HTML documentation is now published to versioned permalink URLs before approval for the latest URL. (Fixes #366)
- Autokey files can now use caret notation for control-key command initiators, such as ^S for <Ctrl+S>.
- MIG piece generation now writes a bash shell script on Linux and macOS. (Fixes #370)
- Disk-video modes can now generate GIF-sized images up to 65535x65535. Windowed display modes still require a physical display large enough for the configured mode.
Bugs Fixed
- Doxygen pages are now being generated from the source code. Documentation comments will be added over time to improve the generated documentation. (Fixes #263)
@parfilefunctionality restored. (It processes the first parameter set in the file.)- List of fractal types in the repository ReadMe linked and condensed. (Fixes #332)
- Solid guessing no longer leaves parts of images unfinished when symmetry splits work, such as in 640x480 video mode. (Fixes #257)
- Solid guessing no longer crashes in disk-video modes wider than 2048 pixels, such as the 8K disk-video mode.
- Lambdafn with function=exp now honors the reset version when selecting the Fractint-compatible bailout behavior. (Fixes #107)
- Legacy parameter sets now use the Fractint-compatible logmap table and outside coloring behavior selected by reset. (Fixes #104)
- FrothyBasin now honors legacy Fractint parameter semantics selected by reset, allowing
@id.par/EvilFrogto render correctly. (Fixes #105) - The
@id.par/mandalaparameter set now explicitly selects reset=1730 so legacy outside=real coloring is used. (Fixes #106) - The
@example1.par/fireworksparameter set was removed because its appearance depends on Fractint fixed-point artifacts. (Fixes #391) - Ant rule strings from params= are now preserved so
@example2.par/Antrenders with the intended rule. (Fixes #393) - Ant rules can now use exact integer text in params=, allowing rule strings wider than Fractint's numeric formatting permits.
- Legacy outside=atan coloring now uses the Fractint-compatible color scaling selected by reset. (Fixes #394)
@example2.par/Barnsleyj2-manrnow selects the Fractint reset version needed for its logmap=old coloring. (Fixes #395)- The default inside color now matches Fractint, allowing
@example2.par/TileMandelto render correctly. (Fixes #399) - Legacy 6-bit palette values are now expanded to the full 8-bit range when loading old parameter colors, affected Id GIF files, and legacy map files.
- Parameter
colors=@namenow finds name.map when the extension is omitted. @lyapunov.par/Blob1now renders correctly by restoring the legacy Lyapunov reset behavior used by Fractint. (Fixes #400)- Compatibility version handling now follows Fractint's model: restores the current Id version, bare reset selects Fractint 17.30 behavior, and explicit reset= values preserve old parameter behavior.
- Included parameter sets now render consistently with the resolved Fractint compatibility expectations. (Fixes #117)
- Setting type=formula, type=lsystem, or type=ifs on the command line without specifying an item name now behaves like selecting the type interactively. (Fixes #71)
- The function= parameter documentation now lists the default variable functions. (Fixes #390)
- More mathematical formulas now render correctly in the AsciiDoc documentation.
- Debug output files are now written under the debug subdirectory of the save library. New debug files honor overwrite=no by choosing an incremented name, while append-mode debug logs keep appending to the same file.
- Scratch files now use the temporary directory instead of the working directory.
- makepar= now writes PAR files correctly when Id is launched from a directory other than the home library. (Fixes #368)
- Library searches now accept FRACTINT-style formulas, maps, and pars subdirectories as read-only aliases. (Fixes #421)
- Formula entries embedded in a selected PAR file now load when formulafile= names a missing formula file, matching Fractint fallback
behavior. (Fixes #389) - MIG image component files are now removed from the image save library after the final image is assembled.
- The Linux executable is now named xid to avoid conflicting with the standard id system utility.
- Windows executables now embed icon and version resources directly. (Fixes #386)
- 3D Targa output now writes rendered pixels to the image save library.
- The bignum storage arena now matches the 64 KB allocator limit, avoiding memory corruption in arbitrary precision math.
- sound=off now suppresses completion buzzers.
- Restore orbitdelay= paced timing for orbit sound (Fixes #325).
Code Cleanup
- Many small changes to avoid buffer overruns or other unbounded string operations as reported by SonarQube.
- The incomplete X11 driver for linux has been removed. (Fixes #343)
- All identifiers are now inside a namespace to avoid collisions with external libraries. wxWidgets on linux depends on glib which uses g_ prefix for all identifiers and this conflicted with the same prefix used by Id to identify all global variables. (Fixes #330)
- File output comparison tests were added for raytrace output and orbit output to detect major regressions in the formatted output.
- An autokey-driven UI test was added for generating MIG PAR and BAT files.
- Help text spelling was normalized to American English.
- More image comparison tests were added to cover more fractal types, rotation and skew of the zoom box and the inversion, biomorph and decomp options. (Fixes #335, #336, #337, #341, #342)
- The code has been restructured to increase the separation of image computation from user interface.
Known limitations
- This initial implementation of perturbation does not support periodicity checking and only supports a limited number of inside and outside coloring algorithms. Suspend and resume is not supported with perturbation.
- Sound output does nothing, although all controls can be set through parameters or interactive screens. Sound output will be restored once a suitable audio library has been identified.
- Some formulas don't render correctly. These problems have been around forever as xfractint also renders them incorrectly. This will be fixed in a subsequent release.
While every effort has been made to ensure that this release is free of problems, using both automated and manual testing, if you encounter a problem, please open an issue on github.
There are some known bugs, mostly with respect to different renderings of Fractal of the Day images. The documentation lists known limitations of this release.
The release plan outlines in broad strokes the direction of future development.
The Setup program should apply the necessary Visual C++ runtime if it is not installed on your system. If you encounter this problem and used the Setup program, please file an issue on that; the Setup program should have taken care of the dependency automatically but it is difficult for us to test this since we already have the dependency installed.
The standalone ZIP and MSI packages assume the runtime is already installed on your machine.
If you get an error message about missing the following files:
MSVCP140.dllVCRUNTIME140.dllVCRUNTIME140_1.dll
It means you don't have the Visual C++ runtime files installed on your machine. You can install them from here:
https://aka.ms/vs/17/release/vc_redist.x64.exe
Make sure you install the x64 (64-bit) version.