Faery Tale Adventure Patch -------------------------- by Peter McGavin (p.mcgavin@irl.cri.nz) 12 May 1997 Faery Tale Adventure is an excellent, very playable, classic animated adventure game Released by MicroIllusions(tm) in about 1986. The original version works well on early Amigas from floppy disk with as little as 512kb of RAM. Unfortunately Faery Tale Adventure has many problems with the latest Amiga operating systems, CPUs and chipsets. Also, Faery Tale Adventure always pages to/from slow floppy disks and doesn't work from hard disk. This unofficial patch fixes many bugs so it works with any CPU, any native chipset and any OS version up to 3.1. It also allows (indeed, -requires-) hard disk installation. Apart from that, the game is unchanged. To use this patch, you need: an original Faery Tale Adventure diskette (free update version) the paper map that came with the original game (for passwords) an OCS, ECS or AGA Amiga a 15kHz monitor (or suitable scan doubler) at least 1Mb chipmem at least 2Mb free hard disk space any AmigaOS version a little knowledge about using Amiga Workbench and shells (because there is no automatic install script yet) a bit of luck Important warning: There are at least 2 different Amiga Faery Tale Adventure diskette versions. I know this because I sent my first diskette back to MicroIllusions in exchange for a free update (with some bug fixes). This patch is known to work with the free update version. I am unable to test this patch with the original version. It might work, but then again it might not. The files in this archive are freely distributable. They may not be modified. Please note: I am not associated with MicroIllusions (apart from enjoying their games). This patch does not include their game. Keep a lookout for Faery Tale Adventure 2 (probably not for Amigas though). Try http://www.dreamersguild.com/products/fta2.htm . To install the patch: --------------------- 1: Ensure your original Faery Tale Adventure diskette is write protected. You should be able to see through the hole in the corner. Never write anything to your original diskette. 2: Create a new drawer for Faery Tale Adventure somewhere on your hard disk. This is best done using the Workbench "New Drawer" menu item to ensure an icon is created. It doesn't matter what you call it, but "Faery Tale Adventure" is a good idea. 3: Copy the entire DOS contents of your original Faery Tale Adventure diskette into your new drawer, including all subdrawers. You can do this with shell commands. For example, assuming you created your new drawer under the WORK:Games drawer: cd "WORK:Games/Faery Tale Adventure" copy DF0:#? "" all clone 4: Copy the files fmain, fmain.info and read_tracks from this patch to your new drawer. (There is already a file called fmain there. You must overwrite it with the patch version.) For example, assuming you unpacked the patch into RAM: and you are still in the "WORK:Games/Faery Tale Adventure" directory: copy RAM:Faery_Patch/fmain "" clone copy RAM:Faery_Patch/fmain.info "" clone copy RAM:Faery_Patch/read_tracks "" clone 5: With the original Faery Tale Adventure diskette still in DF0:, run the program read_tracks with the argument faery_disk_image.dat. For example: read_tracks faery_disk_image.dat The latter command reads all the raw tracks from your original Faery Tale Adventure diskette and writes them to a new 901120-byte file called faery_disk_image.dat. This takes about a minute. 6: Remove your Faery Tale Adventure diskette and put in back in a safe place. That's it. You don't need to make any ASSIGNs, nor make any changes to your startup files. If you write a good automatic install script to replace the above instructions, please send it to me. To start Faery Tale Adventure: ------------------------------ From the Workbench, locate and double-click the fmain icon. Alternatively, run fmain from the SHELL. When prompted, enter the passwords from your original map. Only for Kickstart 1.3 and earlier users, you need to ASSIGN PROGDIR: to your "Faery Tale Adventure" drawer before starting fmain. You should not promote Faery Tale Adventure's Screen with any ScreenMode promotion utility. A note about bugs: ------------------ Although this patch fixes all the bugs I know how to fix, there are still some bugs left. Maybe I even introduced some by mistake. The system may be left in an unstable state after exit. I take no responsibility for any consequences. Make haste but take heed. OS friendliness: ---------------- Faery Tale Adventure has always been an OS-friendly game which obeys OS programming rules laid down by Commodore. It does not disable multitasking, nor does it bang interrupt vectors directly, nor does it kill the OS. It takes over the keyboard and mouse from Intuition with an input handler and it installs its own View with LoadView(). It accesses the game diskette with trackdisk.device. Any hardware banged is allocated through the OS first. Background tasks such as network servers and BBS downloads continue to run. For optimal performance, you should shut down all unnecessary tasks and commodities before starting Faery Tale Adventure. Technical list of patches made: ------------------------------- Audio: The aud_per and aud_len registers were not initialised, sometimes resulting in staticy sound initially. Now initialised to 2. Byte writes to audio registers caused unpredictable results on different chipsets and accelerators such as: no sound at all; stoccato sounds; and notes continuing forever. Changed to word moves. CLR instructions were illegally used with audio registers. Changed to word moves. Several occurrences of "MOVE.W 0,(audx_xxx,An)" caused enforcer hits. Changed 0 to #0. Interrupts structures were initialised to be type NT_UNKNOWN instead of NT_INTERRUPT, causing problems with some OS versions. Changed to NT_INTERRUPT. Raised interrupt priorities from 1 to 127. Audio channels were not allocated so other tasks could upset audio. Channels are now allocated. Register A0 was assumed preserved by RemIntServer(). Fixed. Graphics: Original code assumed game was started from 640x200x4 (or 640x256x4) Workbench and re-used bitplanes of current active View. It also rendered into the currently active View. This saved chip memory, but it caused writes to unallocated memory with gfx-cards and odd configurations. I didn't patch the main code, rather just patched to open a 640x200x4 Intuition Screen and Window first. Original code illegally freed and re-used Intuition's sprite. This caused severe problems with recent OS versions and gfx cards. Patched to clear Intuition's sprite with SetPointer() and allocate a new sprite. Workbench fonts other than topaz8 didn't fit in gadgets. Now sets topaz8 font explicitly. Exit code called graphics.library and layers.library functions after those libraries had been closed. Fixed. Tried to free colormap structure that the system had already freed. Fixed. Other: Gameport wasn't allocated. Now allocated (GPCT_ALLOCATED). Added requesters for common startup errors, such as not enough chip memory available, inability to open display, can't create message ports, no native chipset found, can't allocate audio channels or gameports, can't find required file, etc. Raised input handler priority from 51 to 127 to avoid problems with some commodities. Originally paged data to/from diskette asynchronously with trackdisk.device. Changed to use DOS I/O to/from faery_disk_image.dat. If enough fastmem is available, reads entire faery_disk_image.dat into fastmem on startup and pages with CopyMemQuick(). Otherwise pages with synchronous Seek() and Read(). Removed diskchange sensing code (since now saves games to hard disk). All executable code is loaded into chipmem. I tried changing this, but it ran too fast and corrupted graphics while scrolling. So I left it the way it is. For cheats only: Added some code to save the display to an IFF file in RAM:. Patch byte 18 in a saved game file to be non-zero, then press F8 during play. Known bugs remaining: --------------------- Sometimes still gives mungwall hits on exit (if mungwall is running). Graphics for enemies are occasionally corrupted. The text log display occasionally has stray pixels corrupted on some machines, especially in the bottom status line. I still don't know why. Menu mouse buttons are unresponsive on fast Amigas while riding the swan very fast. Try slowing down first. There are still some places where return results from system calls are not checked, e.g, certain disk reads. Thanks: ------- Thanks to Lars Haugseth (larshau@ifi.uio.no) for testing the patch. Tested on: A4000/040, OS3.1, Cybergraphics A3000, 40MHz WarpEngine 68040, OS3.1, Cybergraphics A1200, 50MHz Blizzard 68030, OS3.1 A500, 33MHz MegaMidgetRacer 68030, 2Mb chipmem, OS3.1, OS2.04 and OS1.3 A500, 7MHz 68000, 2Mb chipmem, OS3.1, OS2.04 and OS1.3 CD32 + SX32, 50 MHz 68030, OS3.1