DDDDD AAAAA EEEEEEE DDDDD AAAAA L U U SSSSS
D D A A E D D A A L U U S S
D D A A E D D A A L U U S
D D AAAAAAA EEEEEE D D AAAAAAA L U U SSSSS
D D A A E D D A A L U U S
D D A A E D D A A L U U S S
DDDDD A A EEEEEEE DDDDD A A LLLLLLL UUUUU SSSSS
** VERSION 3.3 **
This file describes the new features, changes, and bug fixes in Daedalus 3.3, that weren’t in the previous version. It is only useful if you’re already familiar with Daedalus 3.2 or before and want to know what the newest version offers. The file is divided into four sections:
· 1) New Features: A list of new features.
· 2) Extended & Improved Features: A list of improvements or changes to existing features.
· 3) Bug Fixes: Bugs and other problems that have been fixed.
· 4) Scripting Additions: New keywords added to the Daedalus scripting language.
For a quick demonstration of some things Daedalus 3.3 can do, start the program, press Alt+1 to start the “Daedalus demos” script, then press F2 to animate yourself running through a Maze.
A list of new features in Daedalus 3.3, which means new commands and settings that weren’t present in the previous version:
1. SVG files: Daedalus can save wireframes to the Scalable Vector Graphics (SVG) format. The new “Draw / Wireframe File / Save Vector” command will save the internal wireframe to this format. SVG files are an XML based format, and like HTML files they can be displayed in Web browsers.
2. Open Website: The new “File / More Help / Open Website Mirror” menu command will open the alternate Daedalus website location at magitech.com in the default browser.
3. Infinite bitmap: Infinite length Mazes can be saved as a sequence of bitmap files. The new “Save As Bitmaps” option in the File Settings dialog will make it so infinite length Mazes created by the commands on the “Create / Infinite” submenu will be saved to bitmap files in the current directory, instead of plain text files. The first file will be called “inf00000.bmp”, the second “inf00001.bmp”, and so on.
4. Braid Maze method: In the Create Settings dialog, there’s a new “Braid Creation Method” radio button group which determines how Mazes without dead ends are created when the “Braid” command is run. The three options are “Wall Added”, “Eller’s Algorithm Variation”, and “Tilt Template”. These three methods were available in the program before, but required less intuitive setting combinations to access.
5. Maze size addition: The Maze Size dialog has a new “Maze Total Pixel Size Even” flag. It controls whether the resized Maze bitmap will have an even number of horizontal and vertical pixels (in which even means there will a blank row and column of pixels at the right and bottom edges). This flag is initially set based on the whether the original bitmap has odd or even pixel dimensions.
6. Gigamaze script enhanced: The World’s Largest Maze script that comes with the program has some new features. 3D virtual Mazes can be generated with the 3D nested cell and 3D binary tree creation algorithms. (Before, nested cells and binary trees were only available for 2D virtual Mazes.) Also, Hilbert curve unicursal Labyrinths are now available as a creation algorithm for both 2D and 3D Mazes.
7. Squared script enhanced: The Survivor Squares Game script that comes with the program has some new features. You can now set the board dimensions in squares, the number of players competing, whether players are allowed to move diagonally, and the difficulty. Higher difficulty means computer players will make more intelligent moves, and notice larger spaces with more available squares to move into.
A list of improvements to existing features, which means new things you can now do with old features that you couldn’t do before, or ways existing features work better than before. Note that some change existing behavior in ways users of previous versions should be aware of:
1. Color wireframes: Daedalus now supports color wireframe rendering. The Render Wireframe commands will draw lines in color if the color bitmap is active. The Make Wireframe Bitmap Overview command will produce a color wireframe if the color bitmap is active, giving lines the color of adjacent on pixels. The Convert Patches To Wireframe command will produce a color wireframe if the patches in memory have color.
2. Rendered stars: Wireframe and patch renderings now have the option to show background stars. Whether stars are displayed and if so how many are taken from the Stars and Star Count fields in Inside Settings.
3. Binary tree addition: 3D binary tree algorithm Mazes are now affected by the Random Run setting, in the same manner that 2D binary tree Mazes are. Within each level, each row of cells will have its ending passage column flipped to the right instead of on the left, using the Random Run setting as a percentage.
4. True Prim’s addition: If Solve Fillers Consider Dots As Exits in Maze Settings is on, then the starting point from which the True Prim’s Algorithm command will begin creating the Maze will be taken from the coordinates of the dot. Normally its starting location is chosen randomly.
5. Command line addition: The Enter Command Line dialog has been improved, such that it will evaluate the Number field as a command line expression. For example, if the World’s Largest Maze script has been loaded, then instead of having to be a specific number, it can be an expression like “%FHelp”, in which case the custom constant will be evaluated, instead of one having to manually determine the macro slot number containing the command line labeled FHelp.
6. Setup improvement: In the Windows version, the File Extensions setup command no longer requires Administrator privileges on most versions of Windows. Before, this command and the program’s initial install would often result in the error: “Failed to register Daedalus file extensions. You may need to run Daedalus as Administrator for registering to succeed.”
7. Windows 64 bit build: The source code for Daedalus can now compile 64 bit instances of the Windows version. The About dialog will indicate whether a 32 or 64 bit version of the program is running. Internally, the sources look for the compiler set #define _WIN64 to indicate 64 bit specific content.
A list of bugs and other problems in Daedalus 3.2, all of which have been fixed in Daedalus 3.3:
1. Planair bug: Creating a Planair Maze would display an internal error message and produce a Maze that didn’t cover all panels. This bug affected the Demos script and caused the “Draw cubes Maze” options to produce incomplete Mazes. (The only way to prevent it would be if the 3D Z dimension of the Maze was at least as large as the number of Planair panels defined in Create Settings.)
2. Infinite bug: Saving an Infinite Maze to file as it’s being created would leave off the bottom text row in each section that was output.
3. Inside crash: In the perspective inside view, having color wall textures present but no monochrome mask bitmaps defined would crash in certain circumstances.
4. Wireframe display: In Wireframe renderings, long lines that face you and extend behind you would be clipped incorrectly, resulting in them appearing at wrong angles.
5. Copy section bug: The Get Section command on the 2nd Dot submenu wouldn’t work right when the upper left corner of the section was off the top or left edge of the bitmap. In such a case the bitmap contents would be justified in the upper left instead of the lower right corner of the destination bitmap.
6. Create random bug: The Random Perfect Maze creation command would, if Create With Wall Adding was on, and if randomly trying to create a Maze with the Growing Forest algorithm, produce only the boundary wall of the Maze. (Creating Mazes with the Growing Forest command itself would always work.)
7. Zap dot limitation: The commands on the Zap Dot submenu wouldn’t work in 2D Mazes if the Z coordinate of the dot was anything other than 0.
8. Windows shell limitation: In the Windows shell, one can right click a Daedalus generated file and select “Open” to have Daedalus launch and open that file. That however would fail to open the file, if there were spaces in the path of the filename.
9. Gigamaze bug: In the World’s Largest Maze script, creating a virtual Maze with the binary tree algorithm wouldn’t produce a perfect Maze if the Random Run random setting was non-zero.
A list of new operations, variables, and functions added to the Daedalus scripting language. This only affects those who write their own macros or scripts, and should be ignored by everybody else:
******************** Operations ********************
VirtualPerfect <edges>: Creates or adds on to part of a Maze in memory using the hunt and kill algorithm, in which only part of the Maze is stored in the main bitmap. The dot indicates the current coordinates, and will be updated upon return. The <edges> parameter is a group of flags indicating which edges the current section being worked upon is adjacent to, in which 1 means top, 2 means left, 3 bottom, and 4 right. This operation will create the Maze until one of the edges is reached. Afterward, custom variable @z will contain how many cells were created. This operation can be used to compose a Maze larger than will fit in memory at once, by creating one section at a time, although it’s the responsibility of the caller to save created sections to disk and load other sections appropriately for the next phase of creation.
VirtualAldous <edges>: Like VirtualPerfect except creates or adds on to part of a Maze using the Aldous Broder algorithm.
VirtualRecurs <edges> <stack>: Like VirtualPerfect except creates or adds on to part of a Maze using the recursive backtracking algorithm. The stack used by this algorithm is stored in the temporary bitmap, which should be n by 1 pixels, where n is two times the number of entries in the stack. (Because the stack stores directions, two bits are needed to represent four possible numbers.) The <stack> parameter indicates the initial stack offset in the temporary bitmap. This operation will create the Maze until one of the edges is reached, or one of the ends of the stack is reached. Afterward, custom variable @y will contain the new stack offset. The “Virtual Mazes” script that comes with the program uses this operation to create large recursive backtracking Mazes in a grid of bitmaps (along with using other bitmaps temporarily for the stack). This script doesn’t have its own menu option, but it is available in the sources subdirectory of the installation.
GetWireframe <num> <var>: Fetches line number <num> from the wireframe scene in memory and stores it in 7 custom variables starting with index <var>. For example, “GetWireframe 0 10” will store the X, Y, and Z coordinates of the two endpoints of the first line in custom variables #10 through #15, and its color in variable #16.
SetWireframe <num> <var>: Defines line number <num> in the wireframe scene in memory with the 7 custom variables starting with index <var>. For example, “SetWireframe 0 10” will set the X, Y, and Z coordinates of the two endpoints of the first line with custom variables #10 through #15, and set color from variable #16. This does nothing if <num> is outside the limit of the number of lines in the wireframe, so set nWireframeSize if you want to change the number of lines in memory.
GetPatch <num> <var>: Fetches patch number <num> from the patch scene in memory and stores it in 19 custom variables starting with index <var>. The first 16 variables store the four vertexes of the patch, in X, Y, and Z coordinates, and then whether the edge connected with the point is highlighted. The 17th variable stores the number of vertexes used in the patch (which is always either 3 or 4), the 18th stores the color, and the 19th the patch’s transparency.
SetPatch <num> <var>: Defines patch number <num> in the patch scene in memory with the 19 custom variables starting with index <var>. The 19 custom variables define the three or four vertexes, the number of vertexes in use, the color, and transparency, in the same layout as GetPatch. This does nothing if <num> is outside the limit of the number of patches in the scene, so set nPatchSize if you want to change the number of patches in memory.
******************** Variables ********************
nIgnorePrint: Determines the types of message boxes that are suppressed when the Skip Message Display setting is on. Setting this to -1 ignores nothing, and is the same as if Skip Message Display is off. Setting this to 0 ignores standard messages. Setting this to 1 ignores notice category messages too, such as the result of commands. Setting this to 2 ignores warnings as well, such as bad user input. Setting this to 3 ignores serious error conditions, such as out of memory.
nWireWidth: Determines the maximum width of lines drawn in the wireframe display. Setting this to 0 always draws hairline thin one pixel wide lines, no matter their distance from the viewer. Setting this to 1 draws close lines one pixel wider horizontally, and the remainder as with setting 0. Setting this to 2 draws closer lines one pixel wider horizontally and vertically, and farther lines as with settings 1 and 0. Setting this to 3 draws the closest lines two pixels wider horizontally and vertically, and farther lines as with lower settings.
nWireDistance: This setting only plays a role when the wireframe width setting nWireWidth is more than zero. It determines how many coordinate units away from the viewer the midpoint of lines must get before they’re displayed in the next narrower category.
fWireSort: Determines whether lines in the wireframe display are sorted by distance before being drawn, to ensure that far away lines aren’t drawn on top of close lines. This generally isn’t necessary when the wireframe line width stored in nWireWidth is low, because intersecting lines will have little if any overlapping area. Sorting may slow down the rendering time, which is why there’s an option to turn it off.
fArrowKeysFree: This setting only plays a role when Move With Arrow Keys in Draw Settings is on. It causes movement in the wireframe and patch renderings to feel more fluid, like playing a video game. You don’t have to wait for key repeat to kick in, which means holding down a key immediately continuously moves, and you can also hold down two keys at once (e.g. move forward plus rotate) and have them both take effect. The speed at which continuous movement happens is controlled by the Repeat Delay In Msec field in Display Settings. This is like the Very Free Movement Inside Display Mode, but applied to the wireframe and patch renderings.
nDrawFaceOrigin: Determines whether the wireframe and patch displays force the rendering to face the origin, pointing at X, Y, Z coordinate 0, 0, 0. Setting this to 0 doesn’t face the origin at all. Setting 1 makes the rendering face the origin, but doesn’t affect the actual direction one is moving in Draw Settings, which allows one to move along one trajectory while continually facing the origin. Setting 2 makes the rendering face the origin, and also updates the actual direction one is facing in Draw Settings, which allows one to sidestep in order to continually circle around the origin.
nWireframeSize: Contains the current number of line segments in the wireframe scene in memory. This variable can be changed to truncate the list or add space for new lines at the end of the list.
nPatchSize: Contains the current number of patches in the patch scene in memory. This variable can be changed to truncate the list or add space for new patches at the end of the list.
nFileLock: Points to a custom string variable naming a mutex to use when reading files. A mutex is an operating system feature which ensures mutual exclusion, so that two processes aren’t accessing a file at the same time. If the file is locked by another program using the same mutex, then Daedalus won’t just fail right away, but will rather wait up to one second for the other process to release the mutex. This is used in the creation of videos such as https://www.youtube.com/watch?v=UdRaDGXBV-0 in which Daedalus is continually reloading a file and rendering a scene, while another process is continually updating and rewriting the contents of that file.
nHuntType: Determines how the hunt and kill Maze generation algorithm command hunts for cells that aren’t yet part of the Maze. Setting this to 0 searches horizontal row by row until a new cell is found, which is simple but can result in a horizontal bias. Setting this to 1 alternates searching in both rows and columns until a new cell is found, which is more balanced. Setting this to 2 searches outward from the last cell in a spiral pattern until a new cell is found, which appears even smoother but can be slower.
IMPORTANT NOTICE: Daedalus and all Maze generation and general graphics routines used in this program are Copyright (C) 1998-2018 by Walter D. Pullen. Permission is granted to freely use, modify, and distribute these routines provided these credits and notices remain unmodified with any altered or distributed versions of the program. The user does have all rights to Mazes and other graphic output they make in Daedalus, like a novel created in a word processor.
More formally: This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful and inspiring, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details, a copy of which is in the LICENSE.HTM included with Daedalus, and at http://www.gnu.org
O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O
* Walter D. "Cruiser1" Pullen :) ! Astara@msn.com *
O Find your way through life's Maze: http://www.astrolog.org/labyrnth.htm O
* "Who am I, What am I? As I am, I am not. But as we are, I AM. And to *
O you my creation, My Perfect Love is your Perfect Freedom. And I will be O
* with you forever and ever, until the End, and then forever more." - GOD *
O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O*O