-- 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 2.2 ** This describes the new features, changes, and bug fixes in Daedalus 2.2, that weren't in the previous version. This file is only useful if you're already familiar with Daedalus 2.1 or before and want to know what the newest version offers. For a quick demo of some of the cool things Daedalus 2.2 can do, start the program, press Alt+1 to start the "Daedalus demos" script, then press F2 to animate yourself running through a Maze. ************ NEW FEATURES ************ A list of new features in Daedalus 2.2, i.e. new commands and settings that weren't present in the previous version: 1. Sidewinder Mazes: The Sidewinder command on the More Perfect submenu of the Create menu creates a Maze with the property that every horizontal passage has exactly one passage leading up from it, resulting in a Maze with no backtracking passages where the solution path just snakes back and forth from entrance to exit. The Maze is just as hard to solve forwards, however it's easy to solve backwards since there's always exactly one way to get to the previous row. If the Create With Wall Adding flag in the Maze Settings dialog is set, this command will create the Maze by adding walls. The Random Bias field in the Random Settings dialog will affect the Maze, and be the percentage of horizontal vs. vertical passages, ranging from -50 (all vertical) to 0 (equal chance) to 50 (all horizontal). 2. Tremaux's algorithm: The Tremaux's Algorithm command on the Solve menu will solve a Maze using that algorithm. This method works for all Mazes (even Mazes with loops) and can be implemented by a person inside of a Maze. Unlike most solving commands, this never changes the Maze in the main bitmap, but rather draws the solution in the color bitmap. Markings in the Dot color indicate the solution path, i.e. where a passage was navigated and marked once. Markings in the Overlay color indicate false paths that were visited, i.e. where a passage was navigated and marked twice. If the Solve Fillers Check Every Pixel flag in the Maze Settings dialog is set, the command won't assume the Maze is on a grid with passages always on odd pixels. Rather it will consider every pixel as a possible passage. Since Tremaux's algorithm works by considering markings between cells, this case necessitates drawing the solution in a zoomed version of the Maze bitmap. If the Find A Path Finds Random Path flag in Maze Settings is set, solving won't always choose paths in the same order. 3. Chain solving: The Chain Algorithm command on the Wall Following submenu of the Solve menu will solve Mazes using the chain algorithm. This is similar to wall following, but is able to jump between islands. Solving proceeds from the dot to 2nd dot, or the first available passage on the top and/or bottom rows if the dots aren't positioned over valid passages. The solving path moves along an invisible straight line between the start and end points. If that line bumps into a Maze wall, then wall following robots proceed in both directions until one reaches the invisible line again. 4. Textured blocks: Daedalus now supports texture mapping on the top and bottom surfaces of wall blocks in the perspective inside view, where these squares can be decorated with bitmap patterns like ground squares already can. This can be demoed with commands on the Apply Texture submenu of the Color menu. The Color Blocks, Overlay Blocks, and Color Overlay Blocks commands do the same thing as the Color Ground, Overlay Ground, and Color Overlay Ground commands, but affect blocks instead of the ground. As with the Ground commands, these commands make use of the color bitmap (using the main bitmap if the color bitmap doesn't exist) and temporary monochrome bitmap (using the main bitmap if it doesn't exist). If the Narrow Walls inside setting is set, cells that are thinner horizontally, vertically, or both will be textured with versions of the input bitmaps truncated or tessellated appropriately. 5. Shortest solutions count: If the Show Count Of Shortest Solutions checkbox in the Maze Settings dialog is on, the Find Shortest Paths command will display the total number of shortest solutions, instead of how long each of those solutions are. 6. Transparency blending: The Alpha With Temp command on the Color Bitmap submenu of the Color menu is similar to the Blend command on the Temp Bitmap submenu. Instead of the main color bitmap being half way between the main and temporary color bitmaps, this uses the extra color bitmap as a transparency indicator or alpha channel. Each pixel in the extra bitmap indicates how much to bias each RGB component between the main and temporary bitmaps, ranging from 0 (entirely main bitmap) to 255 (entirely temporary bitmap). 7. Survivor Maze simulation script: The Survivor Maze #7 command on the Run Script submenu of the File menu will run a new script to simulate the Maze from the final five immunity challenge in the CBS TV show "Survivor XIV: Fiji". Survivor Maze #7 is similar to the existing six Survivor Maze games. You need to navigate your way through five Mazes in sequence, finding a key within each before exiting. You have the option of trying to solve the Mazes blindfolded, where everything is dark and you can only see (i.e. feel) the walls directly in front of you. 8. Checkpoint hunt script: The Safari Maze command on the Run Script submenu of the File menu will run a new script simulating an imaginary Maze where you need to visit the four checkpoints and then find the exit. The Maze has several 3D aspects to it, specifically bridges to climb over and go under, and a high central tower you start on along with tunnels that go through that tower. 9. Fractal script: The Mandelbrot Set Fractal command on the Run Script submenu of the File menu will run a new non-Maze related script demonstrating the famous fractal. You can zoom in on parts of the fractal, display 3D overviews of it, and even walk among a 3D version of the fractal in the perspective inside view. **************************** EXTENDED & IMPROVED FEATURES **************************** A list of improvements to existing features, i.e. new things you can now do with old features that you couldn't do before, or ways existing features work better then before. Note some change existing behavior in ways users of previous versions should be aware of: 1. Color solving: Running a Maze solving command when the color bitmap is active will put the solution in the color bitmap, leaving the original Maze alone in the monochrome bitmap. False or highlighted paths will be filled in with the Dot color from the Set Colors dialog, and any walls that get highlighted will be marked with the Overlay color. Normally Maze solving commands only edit the monochrome bitmap, and replace the Maze with a solved version of it, where false passages get filled in. 2. Glancing Blows inside: The Glancing Blows setting in the Dot Settings dialog now applies to the perspective inside view as well as the overhead view, where when you move into a wall, you'll slide along the wall as if it were made of ice, as opposed to stick to the wall as if it were made of glue. 3. Binary Tree setting: The Random Run field in the Random Settings dialog affects Mazes created with the Binary Tree command. The value acts as a percentage for whether each cell row will be flipped horizontally. (Rows in Binary Tree Mazes can be flipped and still form valid Mazes.) A value of 0 doesn't affect the Maze, a value of 100 flips the entire Maze, while a balanced value of 50 results in something very similar to a Sidewinder Maze where only the top edge consists of a long passage. 4. Analyze Walls addition: The Analyze Walls command now also displays the number of wall segments composing the Maze. For example, if one wanted to reproduce a Maze using tarps, this would indicate the number of tarp panels needed. 5. Make Thinner addition: The Make Thinner command, when the monochrome bitmap is active, will remove even more pixels if the No Corner Hopping setting is off. Specifically this will allow removals that only leave pixels connected diagonally, where this will remove most 2x2 blocks of on pixels that weren't carved into before. 6. Make Thinner addition: The Make Thinner command when the color bitmap is active will map each pixel to the nearest color of the rainbow, if the Special To Pattern setting in the Replace Color dialog is set to Rainbow Blend. If the Special To Pattern is set to Straight Color Blend, then the command will behave as before and map each pixel to a set of maximum contrast colors. 7. Color bitmap editing: The Maze Size command, the commands on the Common Sizes submenu, and the commands on the Row Column Edits submenu, will now work on color bitmaps. 8. Color pixel edits: The Show Individual Pixel Edits flag in the Display Settings dialog now works with the color bitmap in addition to the monochrome bitmap. This works well with commands that edit the color bitmap such as Tremaux's Algorithm, where one can see the solving method in progress. 9. Draw settings addition: A Horizontal & Vertical Size Bias draw setting of zero is now allowed for the Make Wireframe Bitmap Overview and Make Patch Bitmap Overview commands. This allows these scenes to have zero width walls. 10. Perspective improvement: The perspective inside view is slightly faster, where it has better knowing of when variable height walls are hidden behind others, and hence don't need to be drawn. ********* BUG FIXES ********* A list of bugs and other problems in Daedalus 2.1, all of which have been fixed in Daedalus 2.2: 1. File dialog crash: Opening or saving a file with a sufficiently long path name would crash. 2. File dialog crash: Selecting files in the file dialogs would crash in rare circumstances. For example, this could happen when trying to show a tooltip for a file on the Windows Desktop if certain programs such as Adobe Acrobat 7 are also installed on the system. 3. Inside texture glitch: In the first person perspective display, getting very close to a high wall with a texture would show garbage instead of the proper texture. In rare circumstances this would instead crash. 4. Solve fractal hang: The Find Recursive Fractal solve command would hang if run on certain malformed input mazes. 5. Color Zoom bug: The Zoom command when shrinking a color bitmap with Preserve On When Shrinking selected would produce wrong colors when the average color for a pixel should have 255 or maximum intensity in one of its RGB components. 6. Color bitmap load bug: Loading color Windows bitmaps that say they have a zero sized palette would result in offset pixels and often bad coloring too. 7. Solve Weave bug: The Fill Weave Dead Ends solve command would display a dot fault error message if any passage was filled to the edge of the bitmap. 8. Follow Passages bug: The Drag Move Dot editing setting wouldn't fully work when the Follow Passages motion setting was also set. It would only set pixels after the first move, and not the rest of the automatic moves done until the next junction. 9. Screensaver bug: Using Daedalus as a screensaver would frequently result in screensave mode ending prematurely. For example, if the monitor entered power save mode, that would behave the same as if the user had moved the mouse. 10. Macro nesting crash: If a macro recursively called itself too many times, Daedalus would crash. Now, having more than 100 nested macros will result in an error message. 11. Macro error handling: An error message during a macro or script will halt execution to prevent a potentially endless stream of errors. However sometimes macros are invoked by the Autorepeat Last Command setting, which could also result in endless errors. Now autorepeat mode will be turned off upon any error that stops a macro. ******************* SCRIPTING ADDITIONS ******************* 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 ******************** DlgOpenPaint: Brings up a dialog allowing one to select a file, and then loads that file as a 256 color Paint bitmap file (.PCX extension) into the color bitmap. This can be used to import the PCX format screenshots generated by certain games into the program. OpenPaint : Opens the Paint bitmap file in the string . This accesses the functionality of the DlgOpenPaint operation command without bringing up a dialog. MazeSizeC : Like the MazeSize operation but resizes the Maze in the main color bitmap. This accesses the functionality of the "Maze Size..." command when operating on a color bitmap without bringing up the dialog. If is true, the Maze bitmap is cleared after being resized. SetStringNum : Sets custom string to a string containing the number . If contains fewer than digits, it will be prefixed with "0" characters. If you don't want leading zeros, it's easier to use SetString and let it expand custom numeric variables in the formatted string. If is a number it indicates the index of the custom string, else if is a string (e.g. "a") it corresponds to a custom string directly. SetStringReal : Sets custom string to a string containing a floating point number represented by . There will be digits to the right of the decimal point, or in other words this outputs with a decimal point places from the right end. If is a number it indicates the index of the custom string, else if is a string (e.g. "a") it corresponds to a custom string directly. GetString2 : Brings up a dialog which prompts the user to enter two strings. The formatted strings and get displayed as captions in the dialog. If the user clicks OK instead of canceling the dialog, the strings entered will be stored in custom string slots and . Afterward @z will contain 1 if the dialog was cancelled, 0 otherwise. Perimeter: Counts the perimeter of an area of on pixels in the monochrome bitmap, displaying the total length in pixels, the number of sides, and the average side length. The total length will also be returned in @z. The shape measured will be that under the dot, or the first shape from the top of the bitmap if the dot isn't over an on pixel. If No Corner Hopping is off, pixels connected only by corners will be considered the same shape, where counting will include both. NoIslands: Like NoIsland except it runs multiple times until all islands are connected. Afterward @z is the number of times islands were connected, i.e. one less than the total number of islands on the original bitmap. This is used by the "Word Mazes" script when making Mazes in the shape of words, to connect all the letters. ZoomSprite: This replaces the active bitmap with a zoomed version of itself. Each pixel is replaced with a square section from the temporary bitmap. The status of a pixel in the monochrome bitmap and its four neighbors determines which section of the temporary bitmap is used for the zoomed pixel at that coordinate. The width of the temporary bitmap divided by four determines the zoom factor and the size of each section. On pixels use the first four rows of the temporary bitmap, where the 16 combinations of the status of their four neighbors as shown below determines which section gets used. If there's not enough rows in the temporary bitmap, combinations out of bounds are solid on or white pixels. Off pixels are replaced with solid off or black pixels, unless rows 5 through 8 in the temporary bitmap are present, in which case those rows are used instead. # . . . .#. ##. #. .## . . # . # . . # ##. ##. .## .## . # # . # # . # ### ##. ### .## . # # # # . # . .#. ### ### ... # . # . DrawSeen : This highlights pixels on the color bitmap that are visible from the dot. Pixels within a distance of pixels along a line of sight from the dot, that aren't blocked by on pixels in the monochrome bitmap, will be set to the corresponding pixel in the temporary color bitmap. If is negative, pixels within a circular region will be uncovered, otherwise pixels within a square region will be. If No Corner Hopping is off, this allows one to "see" between on pixels connected diagonally. MandelbrotGet: This operation sets @x and @y to the coordinates of a random color pixel in the color bitmap that's adjacent to a black pixel. Returns the center if there are no such pixels. Priority will be given to color pixels adjacent to a low number of black pixels. This is used by the "Mandelbrot Set Fractal" script to find an interesting spot when zooming in randomly. Contrast: Sets the active bitmap to highlight contrast or differences between pixels. Each pixel is set to the maximum difference between it and all neighboring pixels. If No Corner Hopping is set, this considers the four orthogonal neighboring pixels, otherwise this considers all eight neighboring pixels including diagonals. The edge of the bitmap is considered to be next to off or black pixels. For the monochrome bitmap this sets a pixel if any of its neighbors have a different value than it, while for the color bitmap this compares the three RGB channels separately. This operation can be used to detect and highlight sharp edges in a picture, which can convert an imported Maze image into something that Daedalus can solve. ******************** Variables ******************** fScreenSaver: This indicates whether Daedalus is running in screensaver mode. When active, any keyboard or mouse activity will attempt to exit the program. nAutorepeat: This indicates the command currently or most recently autorepeated. The values used here are the same as those returned by the Command function. nTextureBlock: Turns on texture mapping for the top and bottom surfaces of walls in perspective inside view, i.e. points to which custom bitmap slot defines them. Works similar to ground texture mapping, where pixels in the color bitmap in that slot point to the custom bitmap slot containing the texture, where 0 means no texture. The monochrome bitmap there is used for masks, and indicates whether monochrome overlays are black or white. By default this is -1, meaning block textures are turned off. nGrayscale: This value affects the Make Grayscale command, and indicates the brightness to give to each of the RGB channels. The first three digits indicate the red brightness, the second three the green brightness, and the last three the blue brightness. Each three digit number is a fraction ranging from 0 (minimum) to 999 (maximum), where all three shouldn't add to over 1000. The default value is 299587114, which indicates brightness factors of 0.299, 0.587, 0.114 for the RGB channels. If this value is negative, each channel will be given an equal 1/3 brightness factor. ******************** Functions ******************** Sqr : Square root. Return the square root of , rounded down. For negative numbers this returns the same value as if the number were positive. Dist : Distance. Returns the distance between coordinates , and , . Asin : ArcSine. Returns the arcsine of divided by , in degrees. Acos : ArcCosine. Returns the arccosine of divided by , in degrees. Atan : ArcTangent. Returns the arctangent of divided by , in degrees. Asin2 : ArcSine. Like Asin but assumes a circle is divided into slices instead of 360 degrees. Useful for when precision to a fraction of a degree or an odd ratio is needed. Acos2 : ArcCosine. Like Acos but assumes a circle is divided into equal slices instead of 360 degrees. Atan2 : AtcTangent. Like Atan but assumes a circle is divided into equal slices instead of 360 degrees. HSL : Make color. Returns a 24 bit color value given hue (ranging from 0 to 3600), saturation (ranging from 0 to 1000), and luminosity (ranging from 0 to 1000) parts. Timer2: Returns the number of milliseconds that have passed. This value rounded to the nearest thousands is the same value as returned by the Timer function and as displayed by the Query Timer command. -- IMPORTANT NOTICE: Daedalus and all Maze generation and general graphics routines used in this program are Copyright (C) 1998-2007 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.TXT 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