Please read the history bottom-up. Note that the history might list some
features that were implemented in beta versions and removed later but are
still mentioned here. This history is a log of the programmer so that he
can look up what has been done/tried/modified. Things that were implemented
and removed later are marked with [VOID].

Version 10.0    (25-Feb-23)

- Change: Updated Hollywood documentation
- Change: Updated catalog descriptions and German translation; added new developer files required to create
  new translations
- Change: Updated the Hollywood GUI (Amiga) and IDE (Windows)
- New: Added Xcelicious example as the official Hollywood 10: Xcelicious welcome presentation
- New [OS3]: ShowNotification() supports the Ranchero system now; since apps need to register before they
  can show notifications with Ranchero it's recommended that if you intend to use ShowNotification() on
  AmigaOS3 with Ranchero you should use @APPIDENTIFIER to specify a unique ID for your app; otherwise the
  generic app name "Hollywood" will be used (requested by Michael Rupp)
- Change [GUI]: Using "Full screen (scaled)" mode will now respect the script's aspect-ratio when scaling
- New [GUI/IDE]: Added macOS ARM 64-bit target to the Hollywood GUIs on AmigaOS/Linux/macOS and to the IDE
  on Windows
- Fix [macOS/GUI]: Hollywood's GUI will now adapt its layout in case the desktop screen's height can't
  contain it in full (reported by Stefan Haubenthal)
- Fix [macOS]: Fullscreen mode didn't always work correctly on newer macOS versions, especially when using
  very low resolution like 640x480
- Fix [macOS]: Transparent windows weren't drawn correctly on macOS 11 and up
- Change [SDK]: Plugin exports can now optionally use a "hwp_" prefix; this should have been done right
  from the start because it helps to avoid clashes with system libraries, e.g. on Windows Hollywood SDK's
  FreeLibrary() and Sleep() functions clash with Windows APIs; it is now recommended that you prefix all
  your plugin exports using "hwp_" but of course only if you target Hollywood 10 or higher because plugins
  which do that obviously can't be loaded by older Hollywood versions
- Change: Moved lots of functions into their own libraries (object, serializer, time, locale, table, menu,
  plugin, and joystick); this should make it more comprehensive when examining Hollywood's standard libs
  from the GUI
- Fix [IDE]: Syntax highlighting for certain command synonyms like HasItem() or legacy command names like
  DebugStr() didn't work (reported by Ralf Gruner)
- Fix [OS3fpu/WarpOS]: Division by zero crash under rare circumstances due to a vbcc compiler bug
- Change: Removed the Cocoa-backend for x86 (32-bit) macOS and made the Carbon-backend the default one for
  x86 macOS; there are only very few x86 Macs out there and the last version of macOS that supports them
  is 10.6 so it makes sense to use Carbon instead of Cocoa for those exotic x86 Macs because Carbon is more
  efficient than Cocoa on 10.6 and earlier
- New: Added support for the macOS ARM 64-bit platform; to compile executables for macOS ARM, just pass the
  new platform definition "macosarm64" to the EXETYPE argument
- Fix [macOS/GUI]: The GUI now adapts to dark mode also on the fly while it is running
- Fix [macOS/64-bit]: Joystick support was completely broken on 64-bit macOS systems; it only worked on
  32-bit macOS systems
- Fix [macOS/Cocoa]: Leading spaces were cropped when using the native, Core Text-based macOS text engine
  (reported by Michael Rupp)
- Change: When using DrawPath() on a path whose width/height is 0, nothing will be drawn; in the case of
  PathToBrush(), you'll get a 1x1 fully transparent brush (suggested by Ralf Gruner)
- Fix: Memory access fault with the inbuilt vectorgraphics engine when constructing paths that had empty
  subpaths in them (reported by Ralf Gruner)
- Change: JoyFire() is now known as JoyButton(); the old name is still supported for compatibility, though
- New: JoyDir() also accepts an optional index parameter now which allows you to choose which joystick to
  query
- New: Added support for querying joystick hats (also known as point-of-view d-pads); call the JoyHat()
  function to query the current state of the hat; this will be -1 if the hat is in the center, otherwise
  a value between 0 and 27000 will be returned; multiple hats are supported via the optional index argument
- New: Added support for querying individual joystick axes; you can use the new JoyAxisX(), JoyAxisY(),
  and JoyAxisZ() functions to query the state of the individual axes; multiple joysticks are supported via
  an optional index parameter; the return value will be between -1000 and 1000
- New [SDK]: Added HWEXT_DISPLAYADAPTER_POPUPMENU extension flag; if this flag is set, display adapters
  can set HWSDAFLAGS_POPUPMENU to make Hollywood call the new display adapter function OpenPopupMenu()
  when a popup menu should be shown; this allows display adapters to support popup menus too
- New: IsMenuItemDisabled(), IsMenuItemSelected(), DisableMenuItem(), EnableMenuItem(), SelectMenuItem(),
  and DeselectMenuItem() accept an optional argument now that allows these functions to operate on menus
  that aren't attached to a display; this is very useful for popup menus because those aren't attached to
  the display but are manually shown by the script via calls to the new PopupMenu() function
- New [Amiga/Windows/macOS]: Added support for popup menus (context menus); to show a popup menu, simply
  call the new PopupMenu() function and pass the id of a menu object to it; this is typically done when the
  user presses the right mouse button; you can also specify the position of the popup menu; note that the
  title of the menu object passed to PopupMenu() is ignored, only its actual items are shown; just as with
  normal menus, events will be sent via the "OnMenuSelect" event handler; note that on Amiga and compatible
  popup menus require popupmenu.library (but this is a standard component on AmigaOS 4 and AROS; for OS3
  it is available on Aminet); on MorphOS, MUI is required
- Fix: Potential memory trashing when using the \u escape code in JSON files
- New: ReadTable(), WriteTable(), SerializeTable() and DeserializeTable() now support new "SrcEncoding" and
  "DstEncoding" tags in their optional table argument now; these tags allow you to pass the source and
  target encoding to serializers; this can be useful for the JSON serializer in case the JSON file you want
  to deserialize isn't in UTF-8 or you want to serialize to something different than UTF-8 (even though the
  JSON specification says that it must be UTF-8)
- New [SDK]: Added HWSERIALIZEFLAGS_KEYVAL; this will be set if a table consists only of "key" and "value"
  indices; it will be set by the element that opens and closes the table only
- New [SDK]: Added HWSERIALIZEFLAGS_NUMIDX and HWSERIALIZEFLAGS_STRIDX; HWSERIALIZEFLAGS_NUMIDX will be set
  for all tables that have keys at numeric indices and HWSERIALIZEFLAGS_STRIDX will be set for all tables
  that have string indices; note that tables can also have both, numeric and string indices
- New [SDK]: Added HWISZTAG_SERIALIZEMODE and HWISZTAG_SERIALIZEOPTS; plugin serializers can use these to
  find out the currently active serialization mode
- New: Hollywood's inbuilt JSON serializer now supports #SERIALIZEMODE_LIST; just like #SERIALIZEMODE_NAMED
  this mode allows you to deserialize any JSON data into Hollywood but it doesn't support any Hollywood
  extensions; the advantage over #SERIALIZEMODE_NAMED is that #SERIALIZEMODE_LIST preserves the original
  order of elements in the JSON by storing elements in sequential lists; thus, when serializing a table in
  list mode you can be sure that the elements will appear in the JSON exactly as they appear in the list;
  such a thing isn't guaranteed for #SERIALIZEMODE_NAMED
- New: Hollywood's inbuilt JSON serializer now supports #SERIALIZEMODE_NAMED; with this mode you should be
  able to deserialize any JSON data into Hollywood because #SERIALIZEMODE_NAMED doesn't use any Hollywood-
  specific extensions; #SERIALIZEMODE_HOLLYWOOD uses some markers to inform Hollywood about the data type
  (e.g. functions, raw data) which makes it unsuitable as a generic JSON serializer; #SERIALIZEMODE_NAMED
  solves this problem but the downside is that it won't allow you to serialize functions or binary data;
  note that like #SERIALIZEMODE_HOLLYWOOD, #SERIALIZEMODE_NAMED will convert key names to lower-case by
  default; if you don't want that set the new "NoLowerCase" option
- New: ReadTable(), WriteTable(), SerializeTable() and DeserializeTable() accept "Mode" and "Options" tags
  in their optional table argument now; they have the same function as the functions SetSerializeMode() and
  SetSerializeOptions() except that they are only effective for the respective function call
- New: Added SetSerializeOptions() to set some serialization options; currently, the only option defined is
  "NoLowerCase" which will prevent the JSON serializer from converting key names to lower case when set
  to TRUE
- New: Added SetSerializeMode(); this can be used to set the desired serialization mode; currently there
  are three available serialization modes: #SERIALIZEMODE_HOLLYWOOD (the default), #SERIALIZEMODE_NAMED and
  #SERIALIZEMODE_LIST; how these modes are interpreted is up to the (de)serializers; also added the new
  command GetSerializeMode() to get the current serialization mode
- Fix: Memory could get trashed when non-UTF-8 strings were passed to a function that converted strings to
  upper or lower case; since this is used quite a lot internally, several functions were affected by this
  bug, e.g. the JSON serializer
- New: Added FormatDate() function; this can be used to convert a Hollywood date into a new format using a
  date/time template; e.g. it is possible to convert a Hollywood date to a localized date by passing the
  a date/time template returned by GetLocaleInfo() to FormatDate()
- Change: FormatStr() no longer limits the width and precision fields in the format string to two digits
- Fix: Chr() didn't accept 0 as the codepoint when using UTF-8 encoding
- New: Added FormatNumber() function; this can be used to convert a number to a string; in contrast to the
  StrStr() function, FormatNumber() will separate the digits by the thousands and it's also possible to
  specify a custom thousand separator and decimal point; this can be useful to convert numbers to strings
  in a localized way (requested by Michael Rupp)
- Fix: Memory access fault when passing #KEEPASPRAT to one of Hollywood's scaling functions and applying
  the aspect-ratio resulted in a zero width/height; in this case, the size is now padded to 1 (reported
  by Lazar Zoltan)
- New: Added GetLocaleInfo() function; this returns several pieces of information about the current user's
  locale settings like decimal separator, thousand separator, date format, time format, weekday and month
  names, currency symbols etc. (requested by Michael Rupp)
- New: Added @APPENTRY preprocessor command; this can be used in includes to specify the script file that
  contains the entry code for the project; when Hollywood encounters @APPENTRY in a script, it will stop
  parsing that script and run the script specified in @APPENTRY instead (requested by Christos Tsaldaris)
- Fix [Windows]: ShowPointer() wasn't effective until a mouse event came in (reported by Ralf Gruner)
- New [OS4]: Added support for AmigaInput; you can activate AmigaInput support on OS4 by setting the
  "UseAmigaInput" tag to TRUE in the new ConfigureJoystick() function; the advantage of using AmigaInput
  instead of lowlevel.library is that you can query more than 7 buttons and users don't have to use the
  AmigaInput prefs to map their controllers to lowlevel.library ports (requested by Leo den Hollander)
- New: TextExtent() and TextWidth() support an optional table argument now that allows you to specify the
  desired charspacing value
- New: SetLayerStyle() and GetLayerStyle() also support the new "Charspacing" tag now
- New: Added "Charspacing" tag to TextOut() and CreateTextObject(); this can be used to define a spacing
  value for the characters of the text to be drawn; positive spacing values increase the character distance
  and negative spacing values move the characters closer together (requested by Samuli Holopainen)
- New: Added SetDefaultAdapter(); this function can be used to set default adapters for various adapter
  types supported by Hollywood (file, network, serializer); the new GetDefaultAdapter() function returns
  the current default adapter for the specified type
- New: Added SetDefaultLoader(); this function can be used to set default loaders for various file formats
  (image, anim, sound, video...); the new GetDefaultLoader() function returns the loader of the specified
  file format
- New: The following functions from Hollywood's DOS library support filesystem adapters now: MoveFile(),
  CopyFile(), Rename(), MakeDirectory(), GetCurrentDirectory(), ChangeDirectory(), SetFileAttributes(),
  and DeleteFile(); they all support a new "Adapter" and "UserTags" tag in the optional table argument now
  which can be used to specify a filesystem adapter that should be used
- New [SDK]: Added support for filesystem adapters; filesystem adapters can be used to hook into Hollywood
  functions like creating directories, renaming or moving files and directories, setting file attributes,
  etc; this allows plugins to do quite some magic, e.g. you could copy files or whole directories directly
  into a zip file using CopyFile() if the zip plugin implements Hollywood's filesystem adapter interface;
  you could also delete files or whole directories from zip files using DeleteFile(); you could even move
  files from one zip file to another using MoveFile() etc.; it's a powerful new interface; note that a
  filesystem adapter makes most sense when combined with file and directory adapters which have been
  supported since Hollywood 6.0; note that filesystem adapters are never used automatically (unless a
  plugin explicitly requests that); normally, you have to specifically address them by specifying the
  "Adapter" tag in supported functions
- Fix: Memory access fault when moving complete directories across partitions using MoveFile()
- Change: For optimized lists created using CreateList(), TableItems() behaves the same as ListItems() now
  (requested by Ralf Gruner)
- New: Added GetFreePen() function; this allows you to get an unused pen in the current palette image; if
  there is no free pen, -1 will be returned
- Fix: GetPen(), ReadPen() and SetCycleTable() couldn't be used on write-protected objects even though
  they don't modify anything
- New: CopyBrush() can now also convert palette brushes to hardware brushes (requested by Lazar Zoltan)
- New: Added WaitMusicEnd(); this will halt the script execution until the specified music has finished
  playing (requested by Juan Carlos Herran Martin)
- New: Added Sleep() function; this does the same as Wait() except that its argument is in milliseconds so
  it saves typing; for historic reasons, Wait()'s argument is in ticks and can only be switched to use
  milliseconds by passing the optional #MILLISECONDS argument but this quite inconvenient
- New: Added advanced console functions; this new library contains over 50 functions to make all your
  console dreams come true; it allows you to create all kinds of TUIs (textual user interfaces) with just
  a few function calls; the following new console functions have been added: EnableAdvancedConsole(),
  DisableAdvancedConsole(), ClearConsole(), EraseConsole(), SetConsoleCursor(), GetConsoleCursor(),
  GetConsoleSize(), GetConsoleOrigin(), ReadConsoleKey(), ReadConsoleStr(), SetConsoleOptions(),
  SetConsoleStyle(), GetConsoleStyle(), ClearConsoleStyle(), RefreshConsole(), SetConsoleColor(),
  GetConsoleColor(), InitConsoleColor(), AllocConsoleColor(), FreeConsoleColor(), SetConsolePen(),
  DeleteConsoleChr(), InsertConsoleChr(), InsertConsoleStr(), DeleteConsoleLine(), InsertConsoleLine(),
  BeepConsole(), FlashConsole(), GetConsoleChr(), GetConsoleStr(), ScrollConsole(), FormatConsoleLine(),
  SetConsoleBackground(), GetConsoleBackground(), MakeConsoleChr(), DecomposeConsoleChr(), OpenConsole(),
  CloseConsole(), HaveConsole(), DrawConsoleBorder(), DrawConsoleBox(), DrawConsoleHLine(),
  DrawConsoleVLine(), SetConsoleTitle(), CreateConsoleWindow(), FreeConsoleWindow(), TouchConsoleWindow(),
  SelectConsoleWindow(), GetConsoleWindow(), CopyConsoleWindow(), MoveConsoleWindow(), ShowConsoleCursor(),
  HideConsoleCursor(), StartConsoleColorMode(), GetConsoleControlChr(), GetConsolePen() (requested by
  Fabio Falcucci)
- Fix [Linux]: Font directories are now scanned recursively because newer Linuxes often store fonts in
  subdirectories inside the system font directories (reported by Ralf Gruner)
- Fix [Linux]: MoveFile() didn't work correctly when using backslashes instead of slashes in the source
  (reported by Dick Valk)
- New: #ATTRFONTFORMAT allows you to get the format of a font and can be queried for #FONT, #DISPLAY,
  #LAYER and #TEXTOBJECT
- New: #ATTRFORMAT can now be queried for #BRUSH, #BGPIC, #ANIM, #SAMPLE, #ICON, #FILE and #DIRECTORY as
  well; querying this attribute will return a human-readable format name string
- New [SDK]: Added HWFOPENTAG_FORMAT and HWOPENDIRTAG_FORMAT; plugins can return a human-readable format
  name using these tags
- New [SDK]: Added HWEXT_IMAGE_FORMATNAME, HWEXT_ANIM_FORMATNAME and HWEXT_ICON_FORMATNAME; those new
  extensions allow plugins to return a human-readable string describing the format of the file loaded
- New [SDK]: Added UtilityBase.CloneUserTagList() and UtilityBase.FreeUserTagList(); these two functions
  can be used to clone and free a user tag list
- New [SDK]: Added HWEXT_SAVEANIM_BEGINANIMSTREAM; if this extension tag is defined, Hollywood will call
  the BeginAnimStreamExt() function instead of the BeginAnimStream() function; this allows plugins to
  get information about the desired file adapter, user tags and also the desired output format; the
  original BeginAnimStream() is broken by design because it accepts neither a tag list nor a structure
  argument so it can't be extended
- Change: GetFileAttributes() accepts an optional table argument as the second parameter now; the only
  official tag in that table is "Adapter" but you can also use it to pass user tags to file adapter
  plugins, which was the reason for this change; the old syntax that expected an optional string in the
  second parameter is still supported for compatibility reasons
- Change [SDK]: struct hwRequireUserTagList is now known as struct hwUserTagList since many plugin types
  supported user tags now; a compatibility definition has been added to keep source code compatibility
- New [SDK]: Added HWFOPENTAG_USERTAGS for both DOSBase.FOpenExt() as well as for FOpen() implementations
  of file adapter plugins; this tag can be used to pass plugin-specific user tags to file adapters, e.g.
  the ZIP plugin for Hollywood could define a "Password" user tag so that it's possible to set a password
  that should be used when accessing files in ZIP archives; also added HWOPENDIRTAG_USERTAGS that does
  the same just for directory adapters
- New [SDK]: Added user tags support for image, anim, sound, video, icon, save image, save sample, save
  icon, display adapter, serializer and network adapter plugin types
- Change: SerializeTable() and DeserializeTable() accept an optional table in their second argument now
  to accommodate the new user tags feature; the old syntax is still supported for compatibility
- New: Added support for user tags; user tags are plugin-specific tags that can be passed inside a table
  named "UserTags" that is part of the optional table argument; all tags specified in the "UserTags" table
  are then automatically forwarded to plugins which can decide how to handle them; the following commands
  and preprocessor commands support user tags now: OpenMusic(), IsMusic(), @MUSIC, LoadSample(), IsSample(),
  @SAMPLE, LoadBrush(), @BRUSH, LoadBGPic(), @BGPIC, IsPicture(), LoadAnim(), LoadAnimFrame(), OpenAnim(),
  IsAnim(), @ANIM, LoadSprite(), @SPRITE, CreateDisplay(), @DISPLAY, OpenFile(), @FILE, DownloadFile(),
  UploadFile(), OpenConnection(), FileToString(), StringToFile(), LoadIcon(), @ICON, BeginAnimStream(),
  SaveAnim(), SaveBrush(), SaveIcon(), SavePalette(), SaveSample(), SaveSnapshot(), OpenFont(), SetFont(),
  @FONT, LoadPalette(), @PALETTE, OpenVideo(), IsVideo(), @VIDEO, OpenDirectory(), CopyFile(), ReadTable(),
  WriteTable(), SerializeTable(), DeserializeTable(), LoadPrefs(), and SavePrefs(); user tags are quite
  powerful because they also support passing raw binary data to plugins so they can be used for lots of
  different purposes
- New: DownloadFile() and UploadFile() support a new "FileAdapter" tag now in the optional table argument;
  this allows you to specify a file adapter to use when opening or saving the file
- New [SDK]: Added file adapter support for the plugin types HWPLUG_CAPS_SAVEIMAGE, HWPLUG_CAPS_SAVEANIM,
  HWPLUG_CAPS_SAVESAMPLE and HWPLUG_CAPS_SAVEICON
- New: CopyFile() supports an "Adapter" tag now in the optional table argument; this is only ever used for
  the specified file or directory source; using a file or directory adapter for the copy target is
  currently not supported
- New: SaveAnim(), SaveBrush(), SaveIcon(), SavePalette(), SaveSample(), SaveSnapshot(), BeginAnimStream(),
  StringToFile() and FileToString() support an "Adapter" tag now in the optional table argument; this
  allows you to specify a file adapter to use for saving the file
- New: Added GetRawArguments() function; this can be used to get all arguments passed to your program or
  script either via the console or via Workbench on Amiga or via the Shell API on Windows; the arguments
  will be returned in a table and will also include arguments parsed by Hollywood, e.g. "-window" or
  "-quiet"; the first table entry will always contain the name of the program; note that this will not
  necessarily contain a qualified path but just the name of the program as it was called on the console;
  GetRawArguments() can be useful if your script should be capable of handling multiple file arguments;
  GetFileArgument() will only allow you to get the very first file passed to your program but by using
  GetRawArguments() you can also support multiple file arguments (requested by Ralf Gruner and Christos
  Tsaldaris)
- New [SDK]: Added HWLOCKMODE_FILE and HWLOCKMODE_DIR for DOSBase.Lock(); these new modes allow you to make
  DOSBase.Lock() only accept a file or a directory, respectively; if both are acceptable, pass the new
  HWLOCKMODE_ANY mode constant
- Change [SDK]: HWLOCKMODE_READ is now obsolete and has been replaced with HWLOCKMODE_ANY
- New [SDK]: Added HWFOPENFLAGS_WONTSEEK flag for FOpen(); Hollywood will set this flag in case it doesn't
  need to seek the file that should be opened; this allows file adapters to use optimized I/O in case the
  file will never be seeked; note that even if HWFOPENFLAGS_WONTSEEK is set, Hollywood can still call
  FSeek() to query the current cursor position, to query the file size by seeking to position 0 with mode
  set to HWFSEEKMODE_END or to rewind the file back to 0 so your plugin must be able to handle that; there
  is also a HWFOPENMODE_WONTSEEK mode now that plugins can use to declare that they don't require seeking
- New [SDK]: Added HWEXT_VECTOR_CUSTOMFT2 extension flag; vectorgraphics plugins can set this flag to tell
  Hollywood that they're using a custom freetype2 implementation that is not compatible with the one that
  is built into Hollywood; so Hollywood will call your plugin whenever it needs to turn a font into an
  FT_Face; plugins which set HWEXT_VECTOR_CUSTOMFT2 must implement the OpenFont() and CloseFont() symbols;
  on WarpOS this must always be done because Hollywood will activate HWEXT_VECTOR_CUSTOMFT2 automatically
  for WarpOS plugins as those can only access a PPC build of freetype2 whose FT_Face handles are not
  compatible with the 68k ones expected by Hollywood
- Fix: Computation of vector paths' extent included some padding pixels; this only affected vector paths
  drawn by the vectorgraphics.hwp plugin, not the inbuilt vectorgraphics engine which is the default one
- New: Improved border positioning for scaled but non-rotated rectangles drawn with Box(); the border space
  is always distributed equally now
- Fix: Circles, ellipses, arcs or boxes with round corners weren't drawn correctly in case they were to be
  drawn with transformation, the border style was active and the anchor point was different from 0.5/0.5
- New: Added support for custom-drawn vector brushes; to create such brushes, set the new "Callback" tag in
  CreateBrush() to a function that draws the brush graphics; your callback will then be called whenever the
  dimensions of the brush change; your callback function has to redraw the brush then; this can be used to
  create custom brushes which can be scaled/transformed without any losses in quality because your callback
  redraws the brush whenever its dimensions change instead of just scaling its pixels; this is especially
  useful when using the layerscale engine with custom graphics; if you use custom-drawn vector brushes for
  a layer you can be sure that that layer will scale losslessly to all resolutions; your callback function
  has to call SelectBrush() to draw the new graphics to the brush; it will also be passed a transformation
  matrix containing the current projection of the vector brush
- New: Added RenderLayer() function; this can be used to convert a layer to a brush layer; this usually
  means sacrificing quality because brushes are rasterized and thus cannot be scaled or transformed
  without losses in quality which is why this function is probably of not much use
- New: Added RefreshLayer() function; this will simply redraw the layer and isn't of much use except for
  the new merged layers created by MergeLayers(); when called on a merged layer, RefreshLayer() will
  update the merged layer with the current graphics from the merged layer's source layers; alternatively,
  you can also call SetLayerStyle() and set the "Refresh" tag to TRUE to achieve the same effect
- New: Added MergeLayers() function; this function provides an alternative way of layer grouping; in
  contrast to GroupLayer(), MergeLayers() will merge the specified layers into a single new layer that uses
  the new special #MERGED type; layers of type #MERGED can't be transformed (except by the layer scaling
  engine) and they'll typically contain all settings of their child layers, e.g. shadow, border, filters,
  opacity settings etc. rendered into the layer; the advantage of such layers is that you could show them
  using transition effects and they would be treated as a whole whereas showing layers that are part of a
  group created by GroupLayer() using transition effects would apply the transitions to each group member
  individually; this limitation of GroupLayer() can thus be overcome by using MergeLayers(); by default,
  MergeLayers() will hide all source layers automatically; this behaviour can be changed via the optional
  table argument; note that merged layers aren't updated automatically when their child layers change
  their graphics; you need to use the new RefreshLayer() function to force an update of a merged layer
  (see above)
- Fix: Layer border was wrong for layers that used a filter that modified the shape of the layer (i.e.
  xflip, yflip, swirl, water ripple and pixelate)
- Fix: Generic layer bordering algorithm didn't take the layer transformation into account when deciding
  over whether or not anti-aliased interpolation should be applied
- Fix: Text layer borders with a size less than 8 never adapted their size when the layer was transformed
- Fix: #SNAPDISPLAY didn't work correctly with layer borders and shadows in case layerscaling was active
- New: Drawing of layers that use alpha channel and a layer transparency setting is faster now because of
  several optimizations
- New: Added GroupLayer() and UngroupLayer() to organize layers in groups and access them via a group id;
  this is a feature that was originally planned for Hollywood 4.5 and code was written back then but it was
  never completed; remnants of the code, however, have been in Hollywood from as early as version 4.5
  e.g. the #ATTRGROUP attribute for #LAYER, the "Group" tag set by GetLayerStyle() and error codes like
  #ERR_GROUPNAMEUSED; after more than 10 years, layer grouping has finally been implemented properly; the
  following functions can be used with layer groups now: ShowLayer(), HideLayer(), RemoveLayer(),
  ShowLayerFX(), HideLayerFX(), RemoveLayerFX(), MoveLayer(), RotateLayer(), ScaleLayer(), LayerToFront(),
  LayerToBack() (both only in case the swap argument is set to FALSE), SetLayerAnchor(), SetLayerBorder(),
  SetLayerFilter(), SetLayerShadow(), SetLayerStyle(), SetLayerTint(), SetLayerTransparency(),
  TransformLayer(), TranslateLayer(), RefreshLayer(), MergeLayer(); additionally, all drawing functions
  accept a new "Group" tag now that allows you to attach the layer to a group at creation time; the
  #ATTRGROUP attribute allows you to find out which group a layer is attached to; finally, there are some
  additional functions to deal with layer groups, namely GetLayerGroups(), GetLayerGroupMembers() and
  LayerGroupExists(); note that layer groups will automatically vanish as soon as no more layers are
  attached to them (requested by Samuli Holopainen)
- Fix: Shadow opacity wasn't handled correctly for single color layers which Hollywood internally stored as
  chunky pixels
- Fix: SelectLayer() and TranslateLayer() didn't set an internal modification flag which could lead to
  problems in case they were used while a transition effect in BGPic emu mode was running
- Fix: Transforming graphics was often rather imprecise; this should be much better now
- Fix: When rotating or affine transforming graphics (e.g. brushes), a pixel was sometimes cut off at the
  right or bottom edge
- Fix: When drawing rectangles with round corners and not all four corners were rounded, the non-rounded
  corners often still had very slight rounding visible when anti-aliasing was turned off
- Fix: When the layer scaling engine was active and ShowLayer() or MoveLayer() was called to move a layer
  to a certain position, the result was often a pixel off from the real position; this also affected some
  other parts of Hollywood that positioned layers like the #SCROLLXXX transition effects
- Fix: Wrong positioning of layer shadows and borders for shapes drawn using either the graphics primitive
  or the vectorgraphics library when non-proportional scaling was active; this bug was a consequence of a
  fix in 9.1 which unfortunately was only fixed in one instance in the code even though the same code was
  there multiple times; consider this a punishment for not following the DRY paradigm!
- Fix [Amiga]: Contrary to the documentation, OpenSerialPort() didn't support passing a string containing
  the device and port to open; it always opened serial.device, allowing the user to merely specify the unit
  number in portname$ (reported by Nigel Tromans)
- Fix: Once ScaleBrush(), RotateBrush(), TransformBrush(), or ScaleAnim() were called on a vector brush or
  anim, it was impossible to undo the transformation so that the vector brush/anim could be added as a
  vector layer
- Fix: ScaleAnim() was only handled correctly for vector anims that were not loaded from disk when called
  the first time; starting with the second time, the dimensions of the anim started to get messed up
- Fix: Calling ScaleBrush() on a vector brush and then RotateBrush() on the same brush wasn't handled as
  it should; it generated a rotated brush whose dimensions were incorrect
- Fix: Small memory leak when using DisplayAnimFrame() with layers turned off and transformation active
  through the standard draw tags and the anim object being loaded from disk and using a palette
- Fix: SetLayerShadow() and SetLayerBorder() didn't work correctly when the palette mode had been set to
  #PALETTEMODE_PEN using SetPaletteMode()
- Fix: TrimBrush() didn't work correctly with palette brushes
- New: Added support for disabling text object adjustment; you can set the new tag "NoAdjust" to TRUE when
  you call CreateTextObject() to disable text object adjustment; the new #ATTRADJUSTX and #ATTRADJUSTY
  attributes allow you to get the text object adjustment offset in case you want to handle this manually
- New: CreateTextObject() supports a new "Linespacing" tag now which allows you to set an additional line
  spacing value for the text object
- New: ConvertToBrush() can also convert vector brushes, animations, BGPics, layers, and text objects to
  vector brushes now; previously, all vector objects were converted to raster brushes; you can now make
  ConvertToBrush() create vector brushes for you by setting the new "Vector" tag in the optional table
  argument to TRUE
- Change: ConvertToBrush() uses a new syntax now that accepts an optional table argument instead of single
  optional parameters
- Fix: Brushes created from anti-aliased text objects using ConvertToBrush() could easily crash Hollywood
  when using certain features such as applying color filters
- New: Added TransformPoint(), TransformBox() and Matrix2D() to conveniently work with 2x2 transformation
  matrices in Hollywood
- New: Added TransformTextObject() command; this allows the transformation of a text object using a 2x2
  transformation matrix which is often more convenient than using ScaleTextObject() which expects absolute
  pixel values
- Fix: Crash when using DisplayTextObject() to show an anti-aliased text object and passing color-modifying
  filters in the standard draw tags (e.g. tint)
- Fix: DisplayTextObject() didn't handle any of the standard draw tags when layers were turned off
- Fix: Bad quality when scaling text and rotating the text by -90, -180 or -270 degrees at the same time
- Fix: CopyTextObject() didn't clone everything which could lead to problems when trying to transform a
  copy of a text object using ScaleTextObject() or RotateTextObject()
- Fix: The "AnchorX" and "AnchorY" tags in DisplayTextObject() were ignored and were always treated as 0
- Fix: Memory access fault when using the layer scale engine together with layers of type #TEXTOBJECT
- Fix: Pressing backspace on InKeyStr() when no cursor was active messed up internal state values in case
  the last character of a line was removed so that InKeyStr() skipped to the previous line; pressing a
  key after such a backspace operation would place the character on a wrong line
- New: Added #ATTRFONTHEIGHT attribute; this returns the pixel height of the font; this is often the same
  as #ATTRFONTSIZE but not if the font has been opened in points mode or if the underlying text engine
  interprets the font size as something different from the font height; in any case, #ATTRFONTHEIGHT will
  always be the same as #ATTRFONTASCENDER + #ATTRFONTDESCENDER
- New: SetLayerStyle() now also handles the "ID" tag for layers of type #PRINT and #TEXTOUT; you can pass
  the id of a font object to conveniently change the font of the layer; this is more convenient than having
  to set "Font" and "FontSize" separately
- New: Added support for vector text objects; currently, those can only be created by font plugins that set
  the HWFONTFLAGS_LAYOUT flag; you can use the new #ATTRTYPE attribute for #TEXTOBJECT to check whether a
  text object is a raster or vector one
- New [SDK]: Added HWFONTFLAGS_LAYOUT for the new font loader plugins; if this flag is set, a font plugin
  signals that it wants to take over the complete layout engine from Hollywood; this flag allows plugins
  to completely override Hollywood's inbuilt text layout engine with a custom one provided by the plugin;
  this finally makes it possible for plugins to add support for a fully Unicode capable text engine that
  supports right-to-left layouts, exotic scripts and also color emojis embeddded inside the text using
  Unicode and possibly more; this feature can be used to overcome the limitations of Hollywood's inbuilt
  text engine; plugins setting the flag must also be capable of handling 2D affine transformations so this
  new feature can also be used to work around other limitations of Hollywood's inbuilt text engine, e.g.
  the fact that it doesn't support real vector text rotation (Hollywood's inbuilt text layout engine will
  rotate text using a raster-based algorithm which leads to quality losses)
- New [SDK]: Added support for HWFILETYPE_FONT (also available as #FILETYPE_FONT from Hollywood scripts)
- New [SDK]: Added support for font loader plugins; this allows you to write plugins which add support for
  new font formats; this is the last piece in the puzzle because fonts were the only part of Hollywood that
  couldn't be extended via plugins; by adding support for font loader plugins, this is a thing of the past
  now and plugins can add support for custom font formats; usage is very similar to other Hollywood APIs
  supporting plugins, i.e. SetFont(), OpenFont(), and @FONT support new "Loader" and "Adapter" tags now
  that can be used to tell Hollywood which loaders and adapters should be used and in which order those
  should try to open the font; there's also a new #ATTRFONTLOADER attribute now which allows you to find
  out the loader that has opened a font; note that because of the introduction of the "Loader" tag, the
  "Engine" tag is now deprecated and shouldn't be used any longer; it is still supported for compatibility
  but it's recommended to use the new "Loader" tag instead; for consistency reasons, however, there is a
  new constant named #FONTENGINE_PLUGIN that is returned for #ATTRFONTENGINE in case the font was opened
  by a plugin; font plugins can be identified by looking for the new #PLUGINCAPS_FONT capability bit; the
  font plugin interface is very flexible and supports 1-bit monochrome fonts, CLUT color fonts, fonts with
  anti-alias and 32-bit color fonts
- New [MorphOS]: ShowNotification() supports the MagicBeacon system now; two different kinds are supported:
  normal and error notifications; to show an error, set the "Icon" tag in the optional table argument to
  #REQICON_ERROR; otherwise, a normal notification is shown; the notification will use app name defined in
  the @APPTITLE preprocessor command
- Fix: When compiling executables or applets, Hollywood will no longer fail in case a plugin is missing;
  this allows you to cross-compile scripts on platforms that don't have all plugins available on the target
  platform, e.g. it's now possible to compile scripts that need the Plananarama plugin on Windows even
  though Plananarama isn't available on Windows (reported by Lazar Zoltan)
- Change [Non-Amiga]: Removed all graphics routines for 16-bit displays; they weren't used but were still
  in the executable; this decreases the Hollywood executable size by about 40 kilobytes
- New: Added CreateFont() command to construct a custom font from a brush source; you have to pass the
  character dimension as well as a character mapping string; in the brush source all characters must have
  the same size but you can adjust the character width via an optional table tag; CreateFont() can come in
  useful to easily construct fonts from images as they were often used in scene demos and 1980/90s games;
  CreateFont() supports palette brushes as well as brushes with mask or alpha channel; if the source brush
  is a 1-bit palette brush, you will also be able to change the color of the font; otherwise the font is
  treated as a color font that always uses the same color no matter what the current font color is set to;
  CreateFont() is quite flexible and could also be used as a tilemapper; just map each tile to a character
  and then draw the whole tilemap using a single call to TextOut(); also added the new #FONTTYPE_BRUSH
  return value for #ATTRFONTTYPE
- Fix: #UNDERLINED text style didn't use the correct color when drawing color fonts in non-palette mode
- Fix: #SHADOW and #BORDER text styles didn't work at all for color fonts when layers were turned off
- Fix: The internal fast text draw mode didn't work correctly when drawing color fonts to palette targets
  when palette mode was set to #PALETTEMODE_REMAP (also the default)
- Fix: SetPalette() will no longer set the transparent pen when changing the palette of the current BGPic
- Fix [IDE]: Syntax parser didn't handle escaped quotes in strings correctly (reported by Anbjorn Myren)
- Fix: The digits argument in StrStr() wasn't handled correctly in case the string used the exponential
  notation (reported by Samuli Holopainen)
- Fix: Crash when the number of digits passed to StrStr() were more than the string had characters
- New: Added NearlyEqual() function for comparing floating point numbers for near equality; comparing
  floating point numbers using the equality operator can lead to problems in case there are very minimal
  differences on the bit level, e.g. caused by (de)serialization; that's why it's recommended to compare
  floating point numbers against near equality instead of absolute equality for more reliability
  (requested by Michael Rupp)
- New: Added ExtendBrush() function; this can be used to enlarge a brush; the additional pixels can be
  specified individually for each side; you can also specify a filling color/pen and whether or not the
  newly added area should be transparent or opaque in case the brush has a mask or an alpha channel
- Fix [Doc]: The optional table argument accepted by SetLayerDepth() was undocumented
- New: SetBrushDepth(), SetLayerDepth(), and SetDepth() support the "Remap" and "ClipPen" tags in their
  optional table argument now; if "Remap" is set to FALSE, out-of-range pens will not be remapped to
  existing pens but instead they will simply be set to the pen specified in the "ClipPen" tag, i.e. no
  remapping will take place; note that those tags are only effective when reducing colors; if the new
  depth has more pens than the old depth, the new tags won't do anything
- New: ReplaceColors() also supports palette brushes now; if you pass a palette brush to it, you need to
  pass pens instead of colors in the table argument
- New: CreateBrush() accepts a "Depth" tag in the optional table argument now; this allows you to create
  a palette brush without specifying the "Palette" tag; you can also specify the "Palette" tag on top of
  the "Depth" tag; if the specified palette has more colors than the specified depth, those colors will
  be discarded; if it has less colors, the unused pens will be set to black; alternatively, the "Depth"
  tag can also be set to 32 in which case a brush with alpha channel will be created
- Fix [MorphOS]: Stack size for the video and audio handler threads was too low for some hungry decoders
  (reported by Petteri Valli)
- Fix [Amiga]: Stack size for the audio decoder thread was not enough for some stack hungry decoders like
  AAC parametric stereo (reported by Petteri Valli)

Version 9.1     (23-Apr-22)

- Change: Updated Hollywood documentation
- Change: Updated catalog descriptions and German translation; added new developer files for doing
  new translations
- Change: Updated the Hollywood GUI (Amiga) and IDE (Windows)
- Fix: When Hollywood was in layerscale mode and the display size was changed to the original, unscaled
  size, layers that had a border and were shown using the #SCROLLXXX transition effect kept their scaled
  border imagery instead of using the unscaled one
- New [SDK]: Added HWOPENCONNTAG_ENCODED tag; this allows network adapters to find out if the "Encoded"
  tag has been set to TRUE in DownloadFile()
- New [SDK]: Added HWOPENCONNTAG_FAILONERROR tag; this allows network adapters to find out if the "Fail404"
  tag has been set to TRUE in DownloadFile()
- Fix [Non-Windows]: Passing values greater than 32-bits to Hollywood functions which cannot deal with
  values greater than 32-bits led to the value getting clipped to $FFFFFFFF; on Windows, however, all bits
  higher than 31 were simply discarded; the Windows behaviour is now used on all other platforms as well
  because it is consistent with how Cast() behaves, i.e. when converting a value greater than the target
  type's range Cast() won't clip the value to the maximum acceptable by the type but it will simply kill
  all bits higher than the target type's range, e.g. Cast()ing 65537 to unsigned #SHORT will result in 1
  because Cast() will simply kill bit 16 in that case making bit 0 remain (reported by Fabio Falcucci)
- Fix: Escaped slash character couldn't be deserialized from JSON (reported by Petteri Valli)
- Fix: UnmidStr() didn't sanity check the position value that was passed to it (reported by Ralf Gruner)
- Fix [IDE]: The "Default" keyword wasn't highlighted when followed by a colon (reported by Ralf Gruner)
- Fix [OS4/MorphOS]: #CROSSFADE could crash when used with chunky graphics and hardware acceleration on
- Fix: Setting ScaleX/ScaleY to 1/1 using SetLayerStyle() didn't work for layers which were scaled using
  the Width/Height tags (reported by Anbjorn Myren)
- Fix [Windows]: CanonizePath() didn't work correctly with network paths (reported by Ralf Gruner)
- New: Added #TIMESTAMP_RAW type to GetTimestamp(); this will return a raw clock value that is independent
  of the system clock and is monotonically increasing; this can be useful because #TIMESTAMP_UNIX depends
  on the system clock because it returns the number of seconds since January 1st, 1970 so you could be in
  trouble in case the system clock is changed between two GetTimestamp() calls
- Change: The parameter to GetTimestamp() has been changed into a type parameter that accepts the special
  constants #TIMESTAMP_START or #TIMESTAMP_UNIX; since those constants are 0 and 1 respectively, there are
  no compatibility issues with previous versions
- Fix [Linux/Android]: Timer functions are now independent of the system clock, i.e. they will never return
  spurious values in case the system clock changes while the script is running (reported by Ralf Gruner)
- New [Windows]: Added "Verb" tag to the optional table argument accepted by Execute() and Run(); this can
  be used to pass a special verb to Windows to tell it what to do with the file (e.g. "print", "find" etc.)
  (requested by Torgeir Vee)
- Fix: Showing single list items in layers created by TextOut() in frame mode didn't always work correctly
  when wordwrapping was involved
- New: Added "ListSpacing" and "DefListSpacing" tags to TextOut() and SetLayerStyle(); this allows you to
  set an individual line spacing value for lists; this works in the same way like the "ListBullet",
  "ListOffset" etc. tags, i.e. you have to pass a table containing line spacing values for the different
  lines
- New: Added "SimpleList" tag for TextOut(); if this is set to TRUE, TextOut() won't successively extract
  the list bullet configuration from the "ListBullet" et al. tables but just statically use the item at
  the specified tab index, i.e. tab position 1 will always use the bullet specified in ListBullet[1], tab
  position 2 will use ListBullet[2] and so on; this will restrict your flexibility but can make things
  easier if you always want to have the same configuration for each tab position
- New: Added "GlobalTransparency" standard draw tag; this is only handled when layers are enabled; if it
  is set to TRUE, the layer's transparency setting set using the "Transparency" tag or using functions
  like SetLayerTransparency() is also applied to the layer's shadow; for some reason Hollywood never did
  that by default and in order to maintain compatibility with scripts which expect the old behaviour the
  functionality has been added using a new tag; if you want to globally enable the new behaviour, just
  call SetDrawTagsDefault() with "GlobalTransparency" set to TRUE
- Fix: AddBoxToPath() crashed when the rectangle width or height was less than 1 and round corners were
  active (reported by Ralf Gruner)
- Fix [Amiga]: Hollywood is now also compatible with reqtools.library v38; previously, functions like
  StringRequest() required reqtools.library v39 to be installed
- Fix: SetLayerStyle() crashed when changing border settings for an antialiased monochrome colored layer
  and applying a color filter at the same time (reported by Tom C.)
- New: SetLayerStyle() accepts a new tag named "IgnoreAnchor" now; if that tag is set to TRUE, Hollywood
  will ignore the layer's anchor point when changing its position or style; this means that the anchor
  point will be treated as 0/0; this can be useful e.g. if you'd like to change the text of a layer whose
  anchor point is not 0/0; in such cases changing the text would also re-position the layer; this can be
  prevented by setting "IgnoreAnchor" to TRUE now; "IgnoreAnchor" can also be useful in case you want to
  position layers whose anchor point is not 0/0 relative to their top-left corner
- New: Added #BULLET_HOLLOWCIRCLE bullet type when using TextOut() in list mode 
- New: Type #LAYER supports the new #ATTRBUTTON attribute now with GetAttribute(); this allows you to get
  the id of the button associated with the layer or Nil if there is none
- Fix: The "Color" tag in SetLayerStyle() didn't work when combined with one of the transformation tags
  like "Rotate" etc.
- New: The database passed to the LINKFONTS argument or to the "Fonts" tag in the @LINKER preprocessor
  command can now also contain direct links to *.ttf/*.otf files instead of just font names
- New [SDK]: Added HWRPFTAG_X and HWRPFTAG_Y tags for GfxBase.RawPolyFill(); these allow you to specify
  the destination offset for the polygon; the destination offset can't be in the vertices themselves since
  GfxBase.RawPolyFill() will always normalize the vertices
- Fix [SDK]: GfxBase.RawPolyFill() was broken
- Change: #BIGSINE move mode looks better in higher resolutions now
- New: Line() can optionally add arrowheads now to one or both ends of the line; to do that, simply pass
  the new optional "Arrowhead" tag; this tag is also supported by SetLayerStyle() and GetLayerStyle()
- Fix [Doc]: The optional format and table arguments of SaveIcon() weren't documented
- New: Added HasItem() as a more grammatical synonym for HaveItem() (reported by Tom C.)
- Fix [Windows]: #FONTENGINE_NATIVE on Windows was also able to open raster fonts even though Hollywood
  doesn't support them through the native font engine; this could sometimes lead to a crash as well
- Fix: Calling StopMusic() or PauseMusic() on a music that wasn't playing could mess up certain internal
  states required when running Hollywood in the legacy single music mode
- Fix [MorphOS]: Improved precision when serializing and deserializing floating point values (reported by
  Petteri Valli)
- Fix [WarpOS/SDK]: All plugin functions introduced in Hollywood 9.0 weren't available to WarpOS-native
  plugins; also GfxBase.GetIconForDensity(), GfxBase.FreeIcon() and GfxBase.RawScale() didn't work on
  WarpOS
- New [SDK]: Added GfxBase.MapCoordinate() to map one of Hollywood's special coordinate constants to an
  absolute coordinate
- New [SDK]: Added HWDISPTAG_XPOSITION, HWDISPTAG_YPOSITION, and HWDISPTAG_FLAGS; display adapters can
  write to these tags in case they open their display at a different position or in a different mode than
  requested by Hollywood
- Fix: Crash when using border transparency on a non-antialiased text layer (reported by Ralf Gruner)
- Fix: The last entry in a catalog in Hollywood's platform-independent format was only handled correctly
  if it had a terminating newline character (reported by Tony Canazza)
- Fix [Amiga/SDK]: Messages sent through SendMessage() weren't correctly handled by plugins replacing
  Hollywood's inbuilt display adapter, e.g. GL Galore and Plananarama (reported by Lazar Zoltan)
- New: Added "ColorSource" tag to FloodFill(); if this is set together with the "AlphaChannel" tag, the
  area to be filled is determined by the color channels whereas all output will be written to the alpha
  channel; this means that the border color passed to FloodFill() must be an RGB color (or #NOCOLOR) and
  the fill color must be an alpha value between 0 and 255 (requested by Tony Canazza)
- Fix: Hollywood's inbuilt vector graphics renderer didn't position ellipses and arcs correctly on the
  y-axis if their radii weren't identical; this affected AddArcToPath(), AddEllipseToPath() and also
  Ellipse() and Arc() if ForcePathUse() was activated (reported by Tony Canazza)
- Fix: Removed some restrictions that Hollywood imposed on JSON key names against the specification; all
  characters are valid now in key names except the space character because Hollywood sometimes uses that
  to specify the type of the binary data (reported by Petteri Valli)
- Fix: JSON deserializer didn't recognize the \u escape sequence
- Fix: Some control characters weren't serialized/deserialized correctly when Hollywood was in UTF-8 mode
  (reported by Ralf Gruner)
- New [OS3]: On AmigaOS 3, CreatePointer() also supports palette brushes and sprites now; pointers on
  classic Amiga hardware are always palette-based because they are hardware sprites so if you pass palette
  brushes or sprites to CreatePointer() you have full control over the exact pens used by the pointer;
  previously, palette brushes/sprites were first converted to RGB on AmigaOS 3 and then mapped back to
  palette graphics; this can be avoided now by directly passing palette brushes/sprites to CreatePointer()
  (requested by Juan Carlos Herran Martin)
- Fix [IDE]: When pasting contents into plain text or XML files edited in the IDE, the text formatting was
  pasted into the IDE's edit control as well (reported by Michael Rupp)
- Fix: Borderless mode wasn't restored correctly when switching between windowed and fullscreen modes
  (reported by Juan Carlos Herran Martin)
- Fix [Non-Amiga]: Menu states weren't restored correctly when switching between windowed and fullscreen
  modes (reported by Petteri Valli)
- New: Hollywood's text renderer also supports zero-width spaces and soft hyphens now; note that those
  characters will only work when drawing text in UTF-8 because both characters, zero-width space and the
  soft hyphen character, are Unicode characters (requested by Ralf Gruner)
- Fix: Changing certain layer attributes after changing the color of a vector or text layer often reset
  the color to the original layer color (reported by Paul Bloedel)
- Fix: Changing the color to a color with alpha transparency didn't work for vector and text layers under
  certain circumstances (reported by Paul Bloedel)
- Fix: Plot() didn't draw anything if the pixel to be drawn collided with the opaque area of a sprite
  (reported by Petteri Valli)
- Fix: "Continue" didn't work correctly inside the Switch-Case statement (reported by Ralf Gruner)
- Fix: When opening a file in UTF-8 mode, ReadLine() could get confused when reading a byte that is part
  of the UTF-8 BOM ($ef, $bb, $bf) (reported by Ralf Gruner)
- Fix: When using the new JSON serializer, integers were often serialized as doubles on some platforms
  (MorphOS, AmigaOS 4, maybe more) (reported by Petteri Valli)
- Fix [Amiga]: Plugins in LIBS:Hollywood loaded by executables compiled by Hollywood that used ISO 8859-1
  encoding weren't informed about the text encoding (reported by Petteri Valli) 
- Fix [Amiga]: Ports created by CreatePort() and CreateRexxPort() often changed their names to garbage
  because Hollywood didn't preserve the memory used for storing the port name (reported by Petteri Valli)
- Fix: Hollywood crashed when loading broken GIF/IFF anims or broken MJPEG AVIs (reported by Tony Canazza)
- New: Added "AutoFullScreen" and "LayerFullScreen" display mode to the @DISPLAY tag; if this is used,
  Hollywood will use auto-scaled or layer-scaled full screen mode if the host system is powerful enough to
  handle it; this means that on slower systems like AmigaOS, a physical resolution of the monitor will
  occur and no autoscaling or layerscaling will be used whereas on faster systems that support scaling
  using the GPU full screen mode will be emulated by scaling the display to the monitor's dimensions using
  either the autoscaling or layerscaling engine; you can also activate this full screen mode by using the
  new AUTOFULLSCREEN or LAYERFULLSCREEN console argument/tooltype
- Fix: Soft styles like bold, italic and underlined are no longer applied to bullets when using TextOut()
  with list mode enabled
- Fix: Crash or gfx glitch with many transition effects when using them on a layer that had either shadow,
  border or filter enabled and was created by TextOut() in list mode
- Fix: Several problems when using #SCROLLXXX on a layer created by TextOut() with list mode set to TRUE
  (border wasn't drawn correctly, crash when aborting the effect before it's finished when layer had a
  shadow effect, start position wasn't correct for layers with an anchor point different from 0:0)
- New: MoveLayer() also accepts three arguments now; in that case, it simply moves the specified layer to
  the new position specified, i.e. it does the same as ShowLayer() but using MoveLayer() in such cases
  leads to better readable code because the layer is actually moved
- New: Added CopyLayer() command which can be used to make an identical copy of an existing layer; all
  layer attributes are cloned except the layer name (if present) because that must be unique; a new name
  for the layer can be passed in the optional table argument (requested by Samuli Holopainen)
- New: RotateTextObject() and ScaleTextObject() support a new optional parameter now which can be used to
  toggle text transformation with anti-aliased interpolation
- Fix: Subpar image quality when applying non-proportional scaling to rotated vector text
- Fix: Layer scaling engine didn't apply scaling matrices correctly to rotated layers when non-proportional
  scaling was active (this was visible for example in the rotated red box in the LayerStyle example)
- Fix: Transforming alpha channel-only graphics (e.g. text layers) could lead to a crash
- Fix: The "Edge" text formatting tag only worked if the first character of the tag name was in lower case
  (reported by Fabio Falcucci)
- Fix: The "Border" text formatting tag didn't work at all (reported by Fabio Falcucci)
- Fix: RaiseOnError() wasn't fully compatible with RapaGUI 2.0 (reported by Paul Bloedel)
- Fix [Amiga]: ROM or resident commands couldn't be executed using Execute() (reported by Petteri Valli)
- Change [IDE]: The Windows IDE uses the RichEdit control 4.1 now (where available); this will fix some
  bugs with the old control like an app freeze under very rare circumstances (reported by Ralf Gruner)
- Fix: Ror() and Rol() didn't return correct results when the rotation count was greater than the rotation
  bit length (reported by Fabio Falcucci)
- Fix: Hollywood could crash when using an "OnMusicEnd" event handler and calling CloseMusic() immediately
  after a music had finished playing (reported by Ralf Gruner)
- Fix [SDK]: Timer states could get messed up when using SysBase.RunTimerCallback() to run a timer callback
  (which RapaGUI 2.0 does, for example) (reported by Michael Rupp)
- Fix [Windows]: Hollywood didn't scan %USERPROFILE%\AppData\Local\Microsoft\Windows\Fonts when looking for
  fonts to link; on Windows 10, however, user fonts will be installed in that path instead of in the path
  C:\Windows\Fonts (reported by Lars Brmer)
- Fix [Android]: Using requester functions (e.g. SystemRequest(), StringRequest() etc.) in RapaGUI scripts
  only worked after calling WaitEvent() first
- Fix [Android]: When "KeepProportions" was set to TRUE, Hollywood also reported touch events outside the
  actual display boundaries (reported by Xabier Payet)
- Fix [Android]: Immersive mode didn't work correctly when "FitScale" and "KeepProportions" were both set
  to TRUE (reported by Xabier Payet)
- Fix [Android]: Applets that had the "Encoding" tag set to #ENCODING_ISO8859_1 in @OPTIONS didn't work
  correctly (reported by Thomas Igracki)
- Fix [IDE]: The IDE could easily crash when a Hollywood program's output contained non-UTF-8 characters
  (reported by Ralf Gruner)
- Fix [OS4/MorphOS]: Passing #NOCOLOR to FloodFill() didn't work correctly (reported by Lazar Zoltan) 

Version 9.0     (20-Mar-21)

- Change: Updated Hollywood documentation
- Change: Updated catalog descriptions and German translation; added new developer files for doing
  new translations
- Change: Updated the Hollywood GUI (Amiga) and IDE (Windows)
- New: Added Sugarcane example as the official Hollywood 9: Sugarcane welcome presentation
- New: Added "Quiet" tag for the @OPTIONS preprocessor command; if this is set to TRUE, Hollywood won't show
  its standard startup output
- Fix [macOS]: GetSystemLanguage() and GetSystemCountry() didn't work correctly when Hollywood was launched
  from the GUI on macOS 10.14+
- Fix [GUI/macOS]: Hollywood.app didn't work correctly when installed in a path with spaces
- Change [IDE]: When compiling executables or applets, the IDE's "Save executable" dialog box will not ask
  users to confirm if the destination file can be overwritten if it already exists because Hollywood will
  ask anyway (reported by Anbjorn Myren)
- Fix [IDE]: Removing the last character of preprocessor command arguments didn't cause a live refresh in
  the preprocessor command scanner window (reported by Michael Rupp)
- Fix [IDE]: "Replace all" didn't replace all occurrences but just the ones down from the current cursor
  position (reported by Ralf Gruner)
- New [IDE]: Added "Find previous" menu item to conveniently search backwards (requested by Michael Rupp)
- Fix [IDE]: The IDE will no longer allow you to save scripts as files that are currently open
- Fix [IDE]: Scrollbars sometimes weren't updated correctly when switching tabs
- Fix [IDE]: Changing some options like "Auto spelling adaptation" didn't have an effect before opening a
  new project or restarting the IDE
- New [IDE]: When typing in the name of a user-defined function the IDE now shows its declaration in the
  status bar so that you can see the parameters it expects
- New [IDE]: When "Auto spelling adaptation" is active, the IDE will also adapt the spelling of user-defined
  functions now; this can be turned off by setting the new "Adapt spelling of user functions" option in the
  settings (requested by Michael Rupp)
- New [IDE]: Pressing F2 (or selecting the "Goto function declaration" item from the edit menu) will now
  also scan all open files for the function (requested by Michael Rupp)
- Fix: Trying to draw an empty path using the inbuilt vectorgraphics engine crashed Hollywood (reported by
  Ralf Gruner)
- Fix: SetTimeout() didn't return a timeout handle when a timer adapter was installed and Nil was passed as
  the identifier (reported by Michael Rupp)
- Fix [macOS]: Hollywood, the Hollywood GUI and executables compiled by Hollywood ignored the system's dark
  mode setting and always appeared in normal mode (reported by Michael Rupp)
- Fix [IDE]: When a line was highlighted because it caused an error and the user moved the scrollbar to a
  new position and tried to change the cursor position, the scrollbar jumped back to the line containing
  the error (reported by Ralf Gruner)
- New [IDE]: Added a splitter control between the function list and the preprocessor scanner so that you
  can conveniently customize the dimensions of both controls (requested by Michael Rupp)
- New [IDE]: The IDE also scans for all includes now and adds them to a listview in the dock window on the
  right (requested by Michael Rupp)
- New [IDE]: Added commenting/uncommenting facilities; if there is no selection or if the selection is on
  a single line, the whole line is disabled using a semicolon comment; if multiple lines are selected, the
  text is commented using /* ... */ (requested by Michael Rupp)
- New [IDE]: If text is marked when opening the find dialog, it will be used as the dialog's default find
  text now (requested by Michael Rupp)
- New [IDE]: Pressing Ctrl+H now opens "Replace" as it is common on Windows (requested by Michael Rupp)
- New [IDE]: Ctrl+TAB now allows you to cycle through all open tabs, Ctrl+Shift+TAB will cycle backwards
  (requested by Michael Rupp)
- Fix: ResetTimer() will no longer accept negative values (reported by Ralf Gruner)
- Change [GUI/macOS/Linux]: The Hollywood GUI will now automatically activate SYSTEMSCALE for most of its
  example scripts so that they appear in the correct size on high-DPI monitors; this won't be done for
  user scripts, however; in your scripts, you explicitly have to request this feature by setting the
  "SystemScale" tag to TRUE in @DISPLAY
- Change [Windows]: Hollywood is no longer DPI-aware by default now; this change has the advantage that
  your programs will now automatically be adapted by the operating system to appear correctly on high-DPI
  monitors, so you don't have to care about the target system monitor's DPI setting at all and just let the
  OS handle it, which is probably what most people want because it's the most convenient solution for the
  programmer (even if the graphics will look blurry because of upscaling on high-DPI displays but that's
  still better than appearing too small which would happen to scripts on high-DPI displays before Hollywood
  9 in case the programmer didn't explicitly take care of handling high DPI displays correctly!); if you
  really want to take care of this yourself, you now have to set the new "DPIAware" tag in the @OPTIONS
  preprocessor command to TRUE to signal to Hollywood that your program is DPI-aware; alternatively, you
  can also pass the new DPIAWARE console argument when compiling your script; setting "DPIAware" to TRUE
  is mostly useful when creating GUIs with Hollywood because GUIs will look blurry when the application is
  not DPI-aware; also, when using the layer scaling engine with layers containing vector graphics, it can
  make sense to set "DPIAware" to TRUE because the layer scaling engine can then scale your script to the
  monitor's resolution without any losses in quality because of the vector graphics involved; note that you
  can also have automatic upscaling on non-Windows systems by setting the "SystemScale" tag to TRUE in the
  @DISPLAY preprocessor command
- Change: Removed "win32console" and "win64console" target types for the EXETYPE console argument; if you
  want to compile your script as a console program, you need to set the new "ConsoleMode" tag in the
  @OPTIONS preprocessor command to TRUE now and then pass just "win32" or "win64" to the EXETYPE console
  argument; alternatively, you can also pass the new CONSOLEMODE console argument when compiling scripts;
  this change finally makes it possible to easily compile Windows console programs from the Hollywood IDE
  and GUI as well
- New [SDK]: Added StatDir() function for HWPLUG_CAPS_DIRADAPTER; directory adapter plugins can choose to
  implement this function in order to enable Hollywood to get attributes like date stamps, protection flags
  or comments from directories handled by a directory adapter; note that you also have to set the new
  HWEXT_DIRADAPTER_STAT extension bit if you want to implement StatDir(); this is needed in order to keep
  compatibility with older plugins which don't implement StatDir()
- New: Added "MapVariables" tag to Eval(); if this is set to TRUE, Eval() will also take normal Hollywood
  variables into account when evaluating the expression; note that the variables must be numeric variables
  only and the ones declared in the "Variables" tag will take precedence
- New: Added "NoDeclare" tag to Eval(); if this is set to TRUE, all undeclared variables in the expression
  will simply be treated as 0 (reported by Lazar Zoltan)
- New [GUI/Amiga]: The "OK" button in the "Save executable" dialog is now active by default (requested by
  Lazar Zoltan)
- New [Linux/macOS]: Run() and Execute() accept a new optional table tag named "ForceExe" now; if this is
  set to TRUE, Run()/Execute() will always treat the file passed in argument 1 as an executable; note that
  by default on Linux and macOS, files that have an extension will be treated as data files that can only
  be opened by a viewer; thus, trying to Run() or Execute() an executable named "test.exe" will not work
  on Linux and macOS because of the *.exe extension; by setting "ForceExe" to TRUE, you can make it work
- New: Run() accepts a new optional table tag named "ReturnCode" now; set this to TRUE if your "RunFinished"
  event handler should also receive the program's return code when it terminates; note that the return code
  will only be passed if you set the "ReturnCode" tag to TRUE because on AmigaOS 4 and MorphOS, Hollywood
  can't quit before all programs started using Run() with "ReturnCode" set to TRUE have terminated; this
  restriction only applies to programs started using "ReturnCode" set to TRUE and only on AmigaOS 4 and
  MorphOS; when "ReturnCode" is FALSE, which is also the default, Hollywood can quit on those platforms
  even though programs started using Run() are still running; also note that because of a bug in MorphOS,
  retrieving the return code needs at least MorphOS 3.16 (requested by Ravn Gundersen)
- New: Added "Verbose" tag to DownloadFile() and UploadFile(); if this is set to TRUE, plugins may choose
  to log some detailed output about the connection efforts; note that "Verbose" currently only has an
  effect when a plugin handles the connection; when using Hollywood's inbuilt network adapter, "Verbose"
  won't do anything
- New [SDK]: Added new tags for HWPLUG_CAPS_NETWORKADAPTER/OpenConnection(); these tags make it possible
  for OpenConnection() to signal that it wants to take over protocol interaction completely; this makes it
  possible to write plugins which add support for custom protocols to DownloadFile() and UploadFile() so
  that they are no longer limited to HTTP and FTP (reported by Xabier Payet)
- Fix [SDK/Amiga]: DOSBase.FStat() didn't return the file's name in UTF-8; this also impacted Hollywood
  functions such as FileAttributes() which didn't return UTF-8 either
- Fix [Android]: ReadSerialData() didn't return all data when requesting less bytes than were in the queue
  (reported by Christos Tsaldaris)
- New [SDK]: SysBase.GetEncoding() supports a new tag named HWGENCTAG_STRING now which will return the
  current string encoding
- New [SDK]: SysBase.ConvertString() supports a new HWCSTAG_LENGTH tag now which allows you to specify
  the length of the input string
- Fix: Internal BMP reader didn't handle 32-bit BMPs correctly
- New: Added #ATTRINTERPOLATE for #DISPLAY; when a scaling engine is active, this will return whether or
  not interpolation is used
- Fix [Doc]: The optional argument of LayerToFront() and LayerToBack() was documented in the wrong way; it
  should be "swap" but it was documented as "noswap"
- Change: SetLayerZPos() no longer fails if both positions are the same; it will simply do nothing then
- New: The "Width" and "Height" arguments of SetLayerStyle() also accept #KEEPASPRAT now
- Change: Loaders and adapters are now handled in the order they appear in the string that is passed to a
  "Loader" and "Adapter" table argument; e.g. if you pass the string "digibooster|xmp" to OpenMusic(), it
  will first try to open the music using digibooster.hwp and only if that fails will xmp.hwp be asked to
  open the file; this also allows you to prioritize generic loaders like "native", "inbuilt", and "plugin";
  e.g. if you want native and inbuilt loaders to be used before plugin ones, you could pass the string
  "native|inbuilt|plugin" to achieve that; note that this is an API change but there are probably no
  scripts which depend on the old behaviour because it was mostly random
- New: When used with type #LAYERBUTTON, MakeButton() now supports a new table tag named "ZOrder"; if this
  is set to TRUE, the layer button will respect the layer z-order; this is useful for buttons attached to
  overlapping layers; if those buttons have the "ZOrder" tag set, they will trigger in the order defined
  by the layer stack z-order (requested by Petteri Valli)
- Change: MakeButton() accepts a new table-based syntax for type #LAYERBUTTON now
- New: FloodFill() now accepts an optional "AlphaChannel" table tag; if this is set to TRUE, FloodFill()
  will operate on the brush's alpha channel instead of on its color channels; when used in alpha channel
  mode, values in the range of 0 to 255 must be passed instead of RGB colors (requested by Tony Canazza)
- Fix [IDE]: Hollywood output that didn't contain valid UTF-8 wasn't shown in the debug window; the IDE
  will now assume that the text is ISO 8859-1 encoded in such cases (reported by Christos Tsaldaris)
- Fix [Android]: Passing a timeout value different than 0 to ReadSerialData() usually crashed Hollywood
  (reported by Christos Tsaldaris)
- New [Windows]: Hollywood's native anim loader also supports the Windows Imaging Component (WIC) now;
  this makes it possible to load WebP anims and multi-page TIFFs through Hollywood's anim interface; note
  that by default the WIC loader will be used after Hollywood's internal and plugin loaders; to prioritize
  it, pass "Native" in the "Loader" tag
- New [Windows]: Added support for image loading via the Windows Imaging Component (WIC); this makes it 
  possible for Hollywood to load all image formats you have a WIC codec for (e.g. newer versions of Win10
  ship with a WebP codec pre-installed); Hollywood will try to load images via WIC if all of its internal
  loaders and plugins have failed; alternatively, you can also force Hollywood to use WIC by setting the
  "Loader" tag to "Native"; in that case, WIC will be used directly on Windows and Hollywood's internal
  loaders and plugins will be skipped; note that WIC is not available before Windows XP Service Pack 2
- Fix: IsMusicPlaying() sometimes returned TRUE even after the "OnMusicEnd" event callback had triggered
  (reported by Juan Carlos Herran Martin)
- New [Android]: The Hollywood Player for Android has a "Keep proportions" option now
- Fix [Android]: "KeepProportions" was broken on Android (reported by Alex Carmona)
- New [SDK]: Added HWDISPFLAGS_KEEPPROPORTIONS; Hollywood will pass this flag to OpenDisplay() if the
  display has the "KeepProportions" tag set
- Fix: "OnDropFile" event handler didn't report the correct drop position when auto or layer scaling was
  active 
- Change [Windows/macOS]: Videos handled by the operating system's native video renderer (i.e. DirectShow
  and Media Foundation on Windows, AVFoundation and QuickTime on macOS) are now automatically resized and
  repositioned when a display is resized by the user, even if no scaling engine is active; this is done
  for aesthetic reasons because otherwise it looks really ugly; you can forbid this behaviour by setting
  the NOLIVERESIZE option; note that videos managed by Hollywood's inbuilt video renderer won't be resized
  and repositioned automatically, only videos managed by the OS
- Fix [macOS/Cocoa]: Paused videos handled by Hollywood's inbuilt video handler didn't refresh correctly
  when changing the display size with auto or layer scaling enabled
- Fix: Some other transition effects like #HOPENGATE were broken when used with auto- or layer-scaling and
  internal BGPicEmu and single refresh modes enabled; note that single refresh mode is only used by the
  Android backend and some plugins like RebelSDL and GL Galore which is why probably nobody ever noticed
  this bug because it only showed with lots of conditions (see above)
- Fix: Effects of the #PUSHXXX group were broken when used with auto- or layer-scaling enabled in the
  special BGPicEmu-mode which is internal and only used by Hollywood Designer
- Fix: Layer scale engine didn't work correctly when adding layers to an off-screen BGPic created using
  CopyBGPic() from a BGPic that had already been layer-scaled
- Fix [Windows]: Videos that used the OS native renderer (DirectShow) weren't positioned correctly when
  resizing a display that had the "KeepProportions" tag set
- Change: When "KeepProportions" is active for a display and DisplayBGPic() or ChangeDisplaySize() is
  called, the scaling dimensions are now re-calculated to fit the aspect-ratio of the new BGPic or display
  size; this change also affects SetDisplayAttributes() when it is called with "Width" and "Height"
  parameters (reported by Paul Bloedel)
- Change: #ATTRMODE for #DISPLAY returns #DISPMODE_FULLSCREEN now also if the display covers the whole
  screen, e.g. when FULLSCREENSCALE or FITSCALE is used or the scaling dimensions match the screen's
  dimensions etc.
- New: Added #DISPMODE_MODESWITCH; this does the same as pressing ALT+RETURN, i.e. it switches between
  windowed and fullscreen, depending on which mode is currently active; note that the only Hollywood
  commands that accepts #DISPMODE_MODESWITCH is ChangeDisplayMode()  
- Change [Windows/macOS]: On Windows and macOS (Cocoa) pressing the ALT+RETURN hotkey will now switch to
  scaled fullscreen mode instead of changing the monitor's resolution; changing the monitor's resolution
  doesn't make too much sense on modern hardware any more as it leads to a noticeable glitch, takes 
  considerable time and not all monitors support it any more (especially laptops often don't support it
  at all); so simply using fullscreen scaling instead solves all those problems but Hollywood only uses
  it by default on systems that support GPU-accelerated scaling because otherwise it's too slow; if you
  want the old behaviour back, you can set the new "ScaleSwitch" tag to FALSE; you can also use this tag
  to enable the new behaviour on systems that don't use it by default (e.g. Amiga); by default, Hollywood
  will use proportional scaling with anti-aliased interpolation; this can be turned off by setting the
  "KeepProportions" and "SmoothScale" tags to FALSE; there are also some new command line arguments that
  allow you to fine-tune the behaviour: SCALESWITCH, NOSCALESWITCH, NOKEEPPROPORTIONS, NOSMOOTHSCALE; you
  can also query #ATTRSCALESWITCH (reported by Anbjorn Myren) 
- New: ChangeDisplayMode() now supports #DISPMODE_FULLSCREENSCALE as well; this can be used to easily put
  a display into fullscreen scale mode; by default, autoscaling is used; you can change this by setting
  the new "Layerscale" table tag to TRUE; you can also specify whether or not proportional scaling should
  be used by setting the new "KeepProportions" tag and "SmoothScale" can be used to toggle anti-aliased
  interpolation when scaling  
- Change: The optional table argument of ChangeDisplayMode() can now also be passed in the 2nd argument;
  the desired dimensions can be passed in the new "Width" and "Height" table tags; the old syntax is
  still supported for compatibility of course
- Change: if the "Monitor" tag isn't set in the optional table argument, ChangeDisplayMode() will now
  always automatically detect the monitor the display is on; so if it is on a second monitor and you call
  ChangeDisplayMode(#DISPMODE_FULLSCREEN), that monitor will be put into fullscreen mode; previously,
  always the first monitor was used (except if the "Monitor" tag was set for the display)
- New [macOS/Cocoa]: BeginRefresh()/EndRefresh() are now supported for even more efficient drawing; if
  your script doesn't use a double buffer and you want to have the most efficient drawing, make sure to
  use BeginRefresh()/EndRefresh()
- Change [Windows]: Flip() will also use the new VSYNC mode now if the vsync argument is set to TRUE
  (which is also the default); this allows you to get butter-smooth double-buffered animations with
  Hollywood on Windows but note that this is only available with Direct2D, which needs Vista SP2 and up
- New [Windows]: Added "VSync" tag for @DISPLAY and CreateDisplay(); if this is enabled, the Direct2D
  renderer will be configured to never draw faster than the monitor's refresh frequency; this tag is only
  useful for projects targetting Windows only because it's not available on the other platforms; note that
  VSYNC is also available as a console argument which is probably only useful for testing purposes
- New [Windows]: Added support for Direct2D; this is very important since it allows Hollywood to use
  GPU-accelerated scaling which will radically boost scaling performance when using autoscale mode, even
  with antialiasing enabled; this is especially important when scaling Hollywood scripts to very high
  resolutions like 4K or 8K; scaling gfx to such resolutions is too much for the CPU and definitely needs
  GPU acceleration; note that Direct2D needs at least Windows Vista SP2; Hollywood will use the Direct2D
  rendering backend by default now on all systems that have Direct2D, i.e. Vista SP2 and up; on all other
  systems, the old, non-accelerated renderer will be used; you can also force the use of the old renderer
  on Windows systems that have Direct2D by setting the new SOFTWARERENDERER console argument; this is also
  available as a @DISPLAY and CreateDisplay() tag; note that if your script doesn't use a double buffer and
  you want to have the most efficient drawing, you should use BeginRefresh()/EndRefresh() now on Windows
  too because Direct2D is most efficient when drawing in full frames
- Fix: Circles and ellipses with very small radii were shaped rather oddly (reported by Tony Canazza)
- New: If you pass #NOCOLOR as the border color to FloodFill(), borderless flood filling will be used,
  i.e. all pixels matching the color of the starting pixel will be filled (requested by Tony Canazza)
- Fix: Layer border was always drawn in full during transition effects; this has been changed now but
  only for transparent layers with text or pixel graphics (not for vector graphics!); for non-transparent
  and vector graphics layers the old behaviour will still be used because the new one would lead to small
  glitches in the transition between the penultimate and the final frame because of differences in the
  border algorithms; you can force the new behaviour (or disable it) by setting the new "BorderFX" tag to
  TRUE or FALSE (reported by Enrique Mecklenburg)
- Fix [Android]: Extremely short samples weren't played correctly (reported by Anbjorn Myren)
- New: CopyFile(), DeleteFile(), and MoveFile() accept an optional table argument named "Force" now; if
  this is set to TRUE, write- or delete-protected files will automatically be unprotected without asking
  the callback function first
- Fix [Windows]: #COPYFILE_UNPROTECT is now also triggered when CopyFile() tries to overwrite a hidden file
  because those can't be overwritten by default on Windows either (reported by Torgeir Vee)
- Change [Amiga]: Executables compiled by Hollywood will no longer load all plugins from LIBS:Hollywood by
  default; scripts which want to have that behaviour need to use the new GLOBALPLUGINS argument/tooltype
  or the new "GlobalPlugins" tag in @OPTIONS now; note that plugins you @REQUIRE will still be loaded from
  LIBS:Hollywood, though (but only if they can't be found in the program directory)
- New [OS4/Windows]: MonitorDirectory() accepts a new "ReportChanges" tag now; if this is set to TRUE, your
  event callback will also be notified about what exactly has changed; there will be two new parameters:
  "Type" informing you about the type of change (add, remove, change) and "Name" will contain the name of
  the file or directory that has been changed; note that the "All" argument has no effect when setting
  "ReportChanges" to TRUE (requested by Christos Tsaldaris)
- New [OS3/OS4/MorphOS]: Linked plugins will now be loaded directly from the executable or applet without
  using temporary files; note that this only works for uncompressed executables or applets; if you activate
  compression, temporary files will be created (requested by Petteri Valli)
- New [SDK]: Added support for vector animations; anim plugins have to set the new HWEXT_ANIM_VECTOR
  extension flag to mark themselves as capable of loading vector anims; there are also some new functions
  that vector anim plugins have to implement; the actual behaviour of these functions is very similar to
  the image vector plugins
- New: Added support for vector animations; vector animations behave the same way as vector brushes, i.e.
  they can be transformed without losses in quality; currently, vector animations can only be created by
  Hollywood plugins; it's not possible to create a vector animation in Hollywood code directly; you can
  query the new #ATTRTYPE attribute on #ANIM to find out if an animation is a raster or a vector one
- Fix: CreateSprite() didn't work with disk-based animations
- Fix: @SPRITE crashed when used with animations that were loaded by a plugin
- Fix: ScaleBrush() didn't work correctly when using a vector brush and passing the brush's original size
  after it had already been scaled using ScaleBrush() before
- New: Added GetLocalInterfaces() to the network library; this will return a list of all interfaces that
  are currently available; it will return a table that contains "Name", "Address", and "Protocol" for each
  item; this allows you to conveniently determine a system's local IP address (requested by Alex Carmona) 
- Fix: Manually resizing a Hollywood display using the mouse didn't work correctly when using the new
  "ScaleFactor" scaling mode introduced in Hollywood 8.0; this also affected the "SystemScale" mode which
  uses the "ScaleFactor" mode internally
- Fix: Scripts included via the @INCLUDE preprocessor command weren't automatically converted to UTF-8 in
  case they used some different encoding (reported by Lazar Zoltan)
- Fix: The Dim and DimStr statements broke the @IF, @ELSEIF, and @ELSE preprocessor commands when used
  directly after a preprocessor command whose condition was FALSE (reported by Dick Valk) 
- Fix: When closing and reopening a display, menu states like selected and disabled items were lost; on
  AmigaOS this also happened when hiding displays and showing them again (reported by Paul Bloedel)
- Fix [Windows]: Hollywood Player didn't open its file requester when started from the Windows 10 start
  menu (reported by Tejinder Brar)
- New [Windows]: Added support for Microsoft's Media Foundation framework; this allows scripts to play MP4
  and some other video formats with full hardware acceleration in decoding, drawing, and scaling; because
  of this it is much faster with MP4 than Hollywood's AVCodec plugin and can easily be used for Full HD
  60fps playback; to make Hollywood use this video backend just pass "native" in the "Loader" argument of
  OpenVideo() or @VIDEO; note that Media Foundation needs at least Windows 7 (requested by Niels Schapke)
- Fix [IDE]: Text color wasn't correctly set for unformatted text (e.g. when opening *.xml or *.txt files
  in the Hollywood IDE) (reported by Christos Tsaldaris)
- Fix [Windows]: Hollywood will no longer try to install a menu for transparent windows; this doesn't make
  sense on Windows and caused some problems with mouse events (reported by Paul Bloedel)
- Change [OS4]: OpenURL() no longer uses openurl.library but AmigaOS4.1's launch-handler, which can be
  configured using SYS:Prefs/URL, now (reported by Jrg Renkert)
- Fix [OS3]: GetVolumeInfo() returned negative values when used with partitions that are bigger than 2 GB
  (reported by Petteri Valli)
- New: OpenFile() accepts a table tag named "WriteBOM" now; if this is set to TRUE and the IO mode is set
  to #MODE_WRITE, OpenFile() will write the UTF-8 BOM to the beginning of the file  
- New: OpenFile() accepts a new table tag named "Encoding" now; this can be used to set the encoding if
  the file contains text; if you set this to #ENCODING_ISO8859_1, functions like ReadLine(), ReadString(),
  etc. will automatically convert the ISO 8859-1 characters in the file to UTF-8 which is expected by
  Hollywood's string functions in case Hollywood is in Unicode mode (which it is by default); on writing,
  functions like WriteLine(), WriteString(), etc. will automatically convert Hollywood's UTF-8 strings
  back to ISO 8859-1 then; quite useful when dealing with non-UTF-8 text files; there's also a new
  function named SetFileEncoding() now which allows you to set the file encoding after it has been opened
  and the current encoding can be queried using #ATTRENCODING now
- Fix: ReadLine() didn't skip the UTF-8 BOM in case the default string encoding was set to #ENCODING_UTF8
  (which is the default when Hollywood is in Unicode mode)  
- Fix: ReadLine() didn't handle traditional Macintosh text files correctly (those use just a carriage
  return to break lines)
- New: Added #IO_FAKE64 for ReadInt() and WriteInt(); this can be used to read/write a 64-bit integer
  value; note that since Hollywood's numeric type is a floating point 64-bit value you can't use the whole
  64-bit integer range; that's why the flag is called "fake 64"; however, it can store numbers much bigger
  than 32-bit integers; precisely, the range is [-9007199254740992,9007199254740992] which should be
  fairly enough for everything; note that #IO_FAKE64 only supports #IO_SIGNED; you cannot use it together
  with #IO_UNSIGNED
- Change: The little endian parameter of ReadByte(), ReadShort(), ReadInt(), WriteByte(), WriteShort(),
  and WriteInt() has been changed into a generic flags parameter to make it possible to pass some more
  options to these functions; these are #IO_SIGNED and #IO_UNSIGNED; note that ReadInt() and WriteInt()
  use #IO_SIGNED by default whereas the byte and short functions use #IO_UNSIGNED by default; there's also
  the flag #IO_LITTLEENDIAN which provides full compatibility with the previous behaviour
- New: OpenFile() also accepts the special constants #STDIN, #STDOUT, and #STDERR now to open a program's
  standard input/output/error stream; this can be useful for advanced users (requested by Fabio Falcucci)
- Fix: OpenFont(), SetFont(), and @FONT crashed with #FONTENGINE_INBUILT when trying to open *.ttf files
  that didn't have a style tag set (reported by Tony Canazza)
- New: Added #ATTRFONTCHARMAP to query a font's charmap using GetAttribute()
- New: OpenFont(), SetFont(), and @FONT support a new tag named "CharMap" now; this allows you to specify
  the charmap to use; normally, this is not necessary but some fonts (e.g. Wingdings, Webdings) use custom
  charmaps that can't be consistently mapped to Unicode; note that the "CharMap" tag is only supported if
  the font engine is set to #FONTENGINE_INBUILT; to find out the charmaps supported by a font, use the new
  GetCharMaps() command (reported by Domenico Lattanzi)
- Fix [Windows]: TrueType fonts with non-ANSI encodings couldn't be opened using the Windows' native font
  engine
- New [SDK]: Display satellites can now also be notified about mouse pointer commands; to do that, you
  need to set the HWADS_MOUSEPOINTER tag to TRUE; your dispatcher will then receive HWSATOP_SETPOINTER,
  HWSATOP_SHOWHIDEPOINTER and HWSATOP_MOVEPOINTER events
- New [SDK]: Added HWEXT_DISPLAYADAPTER_TRAYICON and HWSDAFLAGS_SETTRAYICON; if those are set, display
  adapters can hook into Hollywood's SetTrayIcon() function and override it with a custom implementation;
  to post "TrayIcon" events to Hollywood's event queue, use the new HWEVT_TRAYICON type
- Fix: Constants weren't preserved correctly when compiling an applet to an applet or executable; please
  note that this affected only scripts which tried to resolve a constant by its string name, e.g. by
  using the GetConstant() function; constants used literally in the script weren't affected by this bug
- New: @DIRECTORY also supports the "Link" tag to specify whether or not the directory contents should be
  linked to the output executable or applet when compiling
- New: Added @CATALOG preprocessor command; this preprocessor command can be used to define a catalog for
  your script that is used for internationalization ("i18n"); all catalogs found inside the subdirectory
  "Catalogs" will be linked to your applet or executable when compiling your script; this is especially
  useful on Android because external file access is more difficult on mobile platforms; note that there
  can only be one catalog per script; the only additional tag supported by @CATALOG is "Link"; also note
  that catalogs linked to your script should be in Hollywood's catalog format, not in Commodore's one
  which Hollywood still supports for compatibility
- Fix: OpenCatalog() didn't handle the UTF-8 BOM correctly
- New [SDK]: Added LuaBase.luaL_getconstant() for getting information about a Hollywood constant
- New [SDK]: Added LocaleBase.OpenCatalog(), LocaleBase.CloseCatalog(), and LocaleBase.GetCatalogString();
  these allow you to deal with Hollywood catalogs from plugins; you can pass NULL to GetCatalogString() in
  order to specify the currently open catalog
- New [SDK]: Added IPC adapter support; this new plugin capability flag allows you to override Hollywood's
  inbuilt handler for inter-process communication; this is especially useful for plugins installing their
  own display adapter because Hollywood's inbuilt IPC handler is only compatible with Hollywood's inbuilt
  display adapter (except on Amiga); to replace Hollywood's inbuilt IPC handler, plugins have to set the
  HWPLUG_CAPS_IPCADAPTER bit; HWEVT_USERMESSAGE is then used to post IPC message events to Hollywood's
  event queue
- Fix: Hex numbers bigger than 2^32-1 weren't handled correctly by the parser and by Val(), ToNumber(),
  and HexStr()  
- New: Shl(), Shr(), and Sar() accept an optional parameter now that, when set to TRUE, allows you to put
  these functions into "big number" mode; this means that they will be able to operate on numbers larger
  than 2^32-1; keep in mind, though, that full 64-bit integers aren't supported in Hollywood because its
  numeric datatype is a 64-bit floating point one; while this can store very very large numbers too it's
  of course not possible to store the full 64-bit integer range because it needs some bits to store the
  fractional parts; the integer range that can be represented by Hollywood's 64-bit floating point type
  is [-9007199254740992,9007199254740992]
- Fix: The modulo (%) and integer division (\) operators as well as the Int() command always converted all
  operands to signed 32-bit; they now use signed 64-bit integers instead (reported by Fabio Falcucci)
- New [Linux/x64]: Hollywood uses GTK3 now on x64 Linux; all other Hollywood versions for Linux (x86, arm,
  ppc) still use GTK2, however, because Linux versions for those architectures are typically older and
  GTK3 might not be available on all of them; on x64, however, GTK3 has been the standard GUI toolkit for
  a very long time now so it is widely available (note, however, that at the time of this writing GIMP
  is still using GTK2!)
- Fix [OS4]: DateToTimestamp() and DateToUTC() didn't work correctly because of a bug in AmigaOS4's clib2
  (reported by Lazar Zoltan)
- New: Added IgnoreCase() command; this can be used to globally control whether or not functions like
  FindStr() should be case sensitive or not; by default they are but you can now change this default by
  using IgnoreCase(); the following functions are affected by IgnoreCase(): FindStr(), ReverseFindStr(),
  ReplaceStr(), CountStr(), CompareStr(), StartsWith(), EndsWith() 
- Fix [OS4]: Small memory leak when linking fonts loaded using the bullet.library API
- Fix [Amiga]: Requesters were shown on Workbench screen in case the current front screen wasn't a public
  screen but a custom screen  
- New [SDK]: Added HWDISPFLAGS_TRAPRMB which will be set if the "TrapRMB" tag has been set to TRUE
- New [SDK]: Added support for menu adapters; this allows display adapters to hook into Hollywood's menu
  library and replace it with custom code that fits to the respective display adapters; to install a
  menu adapter, you need to set the HWEXT_DISPLAYADAPTER_MENUADAPTER extension bit, implement all required
  functions, and then pass HWSDAFLAGS_MENUADAPTER to GfxBase.SetDisplayAdapter(); Hollywood will then pass
  menus to you via the new HWDISPTAG_MENU or by calling SetMenu(); to post menu events to Hollywood, use
  the new HWEVT_MENUITEM type
- New: Added DisableVWait() and EnableVWait(); these can be used to globally disable Hollywood's VWait()
  command; this is only useful for testing purposes; it allows you to disable internal calls to VWait()
  done by functions like the transition effect library, PlayAnim(), MoveXXX() functions, etc.; if VWait()
  is disabled, there will be no throttle on drawing and Hollywood will draw as fast as the system permits
- Change [OS3]: for usability reasons, Plananarama is now automatically activated if neither CyberGraphX
  nor Picasso96 is available; if you don't want this, pass Plananarama in the SKIPPLUGINS argument
- Fix [Amiga]: Keyfile validation during the installation didn't work on systems without CyberGraphX or
  Picasso96 (reported by Dirk Wieczorek)
- Fix [SDK]: HWLBMFLAGS_READONLY wasn't completely supported when locking mask and alpha channel bitmaps;
  also, Hollywood often accessed the raw data of such bitmaps even outside a LockBitMap()/UnLockBitMap()
  scope; now LockBitMap() and UnLockBitMap() are strictly enforced by Hollywood for mask and alpha channel
  bitmaps as well and the pointer returned by LockBitMap() will only be accessed while it is valid
- Fix: Potential memory access fault in rare cases when converting UTF-8 characters to Unicode/ISO 8859-1
- Fix: #WALLPAPERXXX and #ROLLXXX sometimes didn't refresh correctly when used in reverse mode
- Fix: #HFLOWXXX and #VFLOWXXX effects caused pixel trash when used with graphics that required clipping
  and layers were turned off (reported by Zoltan Lazar's 12 year old daughter)
- Fix: #FILLTEXTURE caused Hollywood to crash when used as the backfilling style in @BGPIC or LoadBGPic()
- New: Changing colors of layers using SetLayerStyle() is much faster now because of specially optimized
  routines that have been put in place
- New: Mono-colored shapes and text drawn using antialias is now stored in a much more memory efficient
  way; this also increases drawing performance for those layers; also layer borders are much more
  memory efficient now
- Fix [Amiga]: #SELMODE_COMBO with combomode 1 didn't work correctly when using CyberGraphX's obscure
  24-bit screen mode; nobody probably ever used this mode because it is rather inefficient because it
  stores pixels as 3 bytes
- Fix: Line() often didn't handle standard drawing tags passed to it in the optional table argument
- New: Added #ATTRFONTENGINE and #ATTRFONTTYPE to query the engine and type of a font; this is supported
  for #FONT, #DISPLAY, #TEXTOBJECT, and #LAYER
- New: #ATTRFONTDEPTH, #ATTRFONTPALETTE and #ATTRFONTTRANSPARENTPEN are supported now for type #FONT,
  #TEXTOBJECT, #LAYER, and #DISPLAY; they can be used to get color and transparency information from
  palette-based fonts, e.g. Amiga color fonts
- New: Added #BORDER style tag for SetFormStyle() and SetFontStyle(); this is a synonym for #EDGE which
  is considered a legacy style flag now; also, the text library supports a "Border" tag now which does
  the same as the "Edge" tag (which is still supported for compatibility)  
- New: Added write support for IFF ANIM; if you pass #ANMFMT_IFF to SaveAnim() or BeginAnimStream(), an
  IFF ANIM will be created for you; Hollywood will use mode 5 compression for the anim, which is the most
  common compression mode for IFF ANIM and often results in smaller anims than when using GIF; note that
  only palette-based IFF ANIMs are supported; an optional transparent pen can also be specified
- New [OS4]: ChangeApplicationIcon() can also be used with icons instead of brushes now; to do that, just
  pass #ICON in the new optional argument
- New [SDK]: Added GfxBase.Remap() for reducing colors in images or mapping images to a different set
  of colors; transparent pens and optional dithering are supported
- New: SetIconProperties() and GetIconProperties() are now also available on non-Amiga platforms and 
  support a new syntax that accepts an icon object instead of an icon file as an argument; many more
  properties are supported now when using this new syntax so that all properties are passed to and from
  this function using tables; it is also possible to access raw tooltype values using these functions
  now in case a plugin supports this
- Change: Moved the functions SetIconProperties(), GetIconProperties(), SetWBIcon(), SetTrayIcon(), and
  ChangeApplicationIcon() to Hollywood's icon library
- New [SDK]: Added two new plugin capability flags: HWPLUG_CAPS_ICON and HWPLUG_CAPS_SAVEICON; plugins can
  use these two capability flags to provide custom loaders and savers for icons, i.e. plugins can hook
  into Hollywood's LoadIcon() and SaveIcon() functions; using the new HWLD/SVICONTAG_AMIGAEXT it is also
  possible to return information stored in Amiga icons to Hollywood (e.g. tooltypes, default tool, size
  and position information...) or pass this information back to an icon saver plugin; a plugin with read/
  write support for many different icon formats is coming up!
- New: Added SetTransparentThreshold() to palette library; this can be used to specify a threshold value
  between 0 and 255 that should be used when quantizing alpha transparency to monochrome transparency;
  all pixels whose alpha value is less than or equal to the threshold value will be considered transparent
  this defaults to 0 which means that only completely invisible pixels will be considered transparent;
  depending on the actual image data you want to quantize, it might be necessary to choose a different
  threshold value here; that's why this function has been added
- New: Added missing Amiga icon types #AMIGAICON_GARBAGE, #AMIGAICON_DEVICE and #AMIGAICON_KICKSTART
- New [SDK]: Added functions DOSBase.CreateVirtualWriteFile(), DOSBase.GetVirtualWriteFileBuffer(), and 
  DOSBase.FreeVirtualWriteFile(); these can be used manage virtual files that can be written to; note
  that none of these functions must be called in your ClosePlugin() implementation because by that time
  Hollywood's writable virtual file handler is already gone
- New [SDK]: Added GfxBase.SaveImage(); this can be used to save pixel data in one of the image formats
  supported by Hollywood or its plugins; CLUT and (A)RGB pixel data are both fully supported
- New [SDK]: Added HWFILETYPE_ICON; plugins can use SysBase.RegisterFileType() to register new icon file
  formats with Hollywood and scripts can query them via GetPlugins() and the new #FILETYPE_ICON constant
- Fix: ConvertToBrush() crashed when trying to convert a vector icon to a brush
- New [SDK]: Added HWLDIMGTAG_ADAPTER and HWLDIMGTAG_LOADER for GfxBase.LoadImage(); these can be used to
  set a loader and/or adapter for loading the image; note that HWLDIMGTAG_LOADER is especially useful
  here because by default, GfxBase.LoadImage() only supports image formats that Hollywood itself can
  load, i.e. HWLDIMGTAG_LOADER defaults to "inbuilt" instead of "default"; therefore, if you want
  GfxBase.LoadImage() to support plugins and OS-native loaders as well, pass "default" or NULL
- New [SDK]: Added ZBase.compress() and ZBase.uncompress() functions from zlib
- Fix [Windows]: All file timestamps reported by Hollywood functions such as GetFileAttributes() are now
  consistent with what Explorer returns; previously, they could be one hour off because of DST settings
  (but they were consistent with the timestamps returned by "dir" in cmd.exe which doesn't seem to apply
  DST adjustments for compatibility reasons; however, for Hollywood it's more important to be consistent
  with Explorer which is the case now)
- Fix: Hollywood didn't validate the integrity of timestamps returned by the file system which could lead
  to crashes in case invalid timestamps were returned
- New [SDK]: Extended struct hwIconList and struct hwIconEntry to support additional properties needed
  for palette images (depth, transparent pen, palette); note that you may only access these fields if the
  new HWICONFLAGS_EXTENDED flag is set; alternatively, you may set your plugin to require Hollywood 9.0;
  in that case, HWICONFLAGS_EXTENDED will always be set and you may always access the new fields
- New [SDK]: Added HWGIITAG_PALETTE tag for GfxBase.GetIconImages(); if this tag is set to TRUE, palette
  images will be returned as well; this is needed to maintain compatibility; plugins need to explicitly
  signal that they are able to deal with palette images by setting the tag to TRUE
- New: #ATTRDEPTH, #ATTRTRANSPARENTPEN and #ATTRPALETTE are supported now for #ICON; note that you have
  to pass two additional arguments to GetAttribute() in that case: the first one specifies the index of
  the image inside the icon to use and the second argument specifies whether or not you want to query the
  selected state image; this defaults to FALSE which means the normal image; note that this additional
  argument is necessary because normal and selected state images can have different depth, transparency
  and palette settings 
- New: CreateIcon() and @ICON support palette-based images now too; this means that it is now possible to
  have images in multiple color resolutions inside icon containers, e.g. for each icon size you could add
  individual images in 32 bits, 8 bits, 4 bits, 1 bit monochrome, etc.; to do this, just pass brushes
  that are palette-based to CreateIcon() or set the new "LoadPalette" tag when using source type #FILE to
  make CreateIcon() or @ICON load the palette of the image file; note that when "LoadPalette" is set to
  TRUE Hollywood will also automatically load the transparency settings from the image file (if there are
  any); also note that SaveIcon() currently doesn't support palette-based images so it will fail on all
  icons that contain anything else than 32-bit images
- New: SaveAnim(), BeginAnimStream() and WriteAnimFrame() support palette-based animations now
- Change: Removed "Transparency" and "UseAlpha" optional tags from BeginAnimStream(), WriteAnimFrame()
  and SaveAnim() because they didn't really make sense; transparency settings are now determined by the
  source image data passed to these functions; there is a new "FillColor" table tag which can be used to
  fill transparent areas with the specified color but that's probably of not much use; also, there is a
  "Depth" tag now which supersedes the "Colors" tag as a more convenient way of specifying the number of
  colors for palette animations; the "Colors" tag is still supported for compatibility, though
- New: Inbuilt image savers for IFF ILBM, PNG, and BMP also support saving palette-based images now; this
  will result in images being smaller than when saved as 24-bit as it was previously always the case; but
  of course there is a maximum of 256 colors for palette-based images; furthermore, IFF ILBM and PNG
  savers also support pen-based transparency now (requested by Tony Canazza) 
- Change: SaveBrush() accepts a new, more convenient table-based syntax now that no longer requires you
  to pass the rather obscure "transcolor" argument; this is called "FillColor" now and is part of a
  larger table-based parameter structure; also, it defaults to #NOCOLOR now instead of #BLACK because
  it didn't really make sense have this default to black because in most cases you wouldn't want to have
  a fill color at all but just save whatever is there in the original graphics; furthermore, there is a
  new "Depth" tag which is probably more convenient to use than the old "Colors" tag (but that is still
  supported for compatibility); the "Depth" tag is also available to SaveSnapshot()
- Fix [SDK]: The string pointer returned by HWPLUG_CAPS_SOUND/GetFormatName() was accessed even after
  CloseStream() had been called; this happened only when using IsMusic()
- Change [Examples]: Improved HollyAmp example to support infinitely looping sound streams and also made
  it ignore non-seekable sound streams silently; additionally, it will also play Protracker modules now
  (reported by Samuel Crow)
- New: Protracker modules support #ATTRPOSITION now and will no longer returned -1 here
- Fix: For dynamic music streams created using CreateMusic(), #ATTRDURATION returned a spurious value; it
  will now return -1
- New [SDK]: Added HWSNDFLAGS_INFINITE flag; OpenStream() can set this flag to tell Hollywood that this
  stream will loop forever and will never finish; if that is the case, #ATTRDURATION will return -1 when
  a script tries to determine the length of a music
- New: Added GetProgramDirectory() function; this function returns the program's directory; when running
  scripts, it will be the directory of the Hollywood interpreter; note that this function is just here
  for convenience; the same functionality is supported by GetProgramInfo() but that one is rather hidden
  and somewhat confusing in design
- New [SDK]: Added HWSYSPATH_STARTPATH for SysBase.GetSystemPath() which returns the start directory
- New: Added GetStartDirectory() function; this returns the directory that was the current directory
  when the Hollywood script was started; this is only of use when running Hollywood scripts because in
  that case Hollywood will always change the current directory to the script's directory (unless you
  use NOCHDIR); for compiled programs, the start directory will obviously always be identical to the
  program's directory
- New: WaitTimer() accepts an alternative syntax now: if you pass a table containing a list of timers
  WaitTimer() will wait until the first timer in that list has elapsed; you can also pass an empty table
  which means WaitTimer() will check all timers that are currently running and return as soon as the
  first one elapses; in any case, the return value will be a table containing a list of all timers
  that have elapsed; the optional argument can be used to specify whether or not elapsed timers should
  be automatically reset; this defaults to TRUE
- Change: The milliseconds argument in WaitTimer() is optional now; if it is omitted (or set to -1),
  WaitTimer() will wait for the specified timer to elapse (which requires the timer to have an elapse
  value, obviously)
- New: StartTimer() accepts an optional argument now which allows you to set an elapse value for the
  timer; you can then use the new TimerElapsed() function to check when the timer has elapsed; you can
  also set the elapse value later using SetTimerElapse() and you can query it using #ATTRELAPSE
- Fix: User data associated with #TIMER objects using SetObjectData() was accidentally nuked and leaked
  by WaitTimer() in case the reset argument was set to TRUE (which is the default); the same behaviour
  happened when using StartTimer() on a timer with an id that already existed
- Fix [Amiga]: Pausing Protracker modules didn't work when using Hollywood's legacy audio driver (which
  is still the default driver on OS3); this was actually broken since Hollywood 4.0
- Fix [OS3/Non-FPU]: When converting a string to a number using Val() and an "e" followed the number, e.g.
  "16e", Val() accidentally counted the "e" as part of the number, i.e. it returned 3 as the length when
  trying to convert the string "16e" to a number but it obviously should be 2 because "16e" is not an
  exponential notation; only the non-FPU version on OS3 is affected because this is a SAS/C bug
- Fix: The text layouter stripped spaces at the end of lines; this was only visible when the font style
  was set to #UNDERLINED; now the spaces will only be stripped in case the layouter wraps lines
- New: SetMargins() accepts an optional argument now that, if set to TRUE, will allow you to set margins
  outside the current BGPic's boundaries, e.g. negative positions or positions bigger than the BGPic
  width; by default, margins are clipped to 0 and the BGPic width
- New: SetFontStyle() and SetFormStyle() alternatively accept a table in parameter 2 now; the table uses
  the same format as the one returned by GetFont/FormStyle() so you can easily save and restore all font
  or form style settings using a combination of GetFont/FormStyle() and SetFont/FormStyle(); it also
  allows you to set shadow and edge parameters at the same time
- Fix: GetFontStyle() always had the #NORMAL bit set in its return value which caused SetFontStyle() to
  disregard all other bits that were set
- Fix [OS3]: Fixed requester asking for volume JPEGTMP: when trying to load certain JPEGs
- New [Examples]: Added Palette example which demonstrates palette cycling, which is now easily possible
  with Hollywood 9's new palette library!
- New [SDK]: Added HWADS_PALETTE tag for GfxBase.AttachDisplaySatellite(); if this tag is set to TRUE, 
  HWSATOP_BLTBITMAP needs to be able to handle CLUT bitmaps as well; in that case, BitMapType will be set
  to HWSATBMTYPE_CLUTBITMAP and BitMapPixFmt will be set to HWOS_PIXFMT_ALPHA8 (but only when using the
  internal bitmap adapter; when using a custom bitmap adapter, you'll get HWSATBMTYPE_BITMAP as usual);
  in case a CLUT bitmap is posted to HWSATOP_BLTBITMAP, the new "Palette" field in hwSatelliteBltBitmap
  contains its palette
- New [SDK]: Added HWBMAHOOK_BLTCLUTBITMAP; bitmap adapters can set this flag if they want to be called
  whenever Hollywood blits CLUT bitmaps to an RGB software bitmap; note that this flag is only supported
  if HWSDAFLAGS_PALETTE is set as well
- New [SDK]: Added HWSDAFLAGS_CLUTBITMAPADAPTER; bitmap adapters can set this flag to indicate that they
  support the new HWBMTYPE_CLUT bitmap type; if this flag isn't set, HWBMTYPE_CLUT is emulated using the
  HWBMTYPE_ALPHA type; NB: when locking a bitmap of type HWBMTYPE_CLUT, the pixel format needs to be set
  to HWOS_PIXFMT_ALPHA8 (same as with HWBMTYPE_ALPHA)
- New [SDK]: GfxBase.LockBitMap() and GfxBase.GetBitMapAttr() also support CLUT bitmaps now
- New [SDK]: GfxBase.GetARGBBrush(), GfxBase.AddBrush() and GfxBase.LockBrush() support palette-based
  brushes now
- New [SDK]: Added HWBM2ARGBTAG_CLUT, HWBM2ARGBTAG_PALETTE, and HWBM2ARGBTAG_TRANSPEN; those can be used
  to make GfxBase.BitMapToARGB() convert CLUT image data to an RGB pixel array; if HWBM2ARBTAG_CLUT is
  set to TRUE, the input bitmap must be a CLUT one
- New [SDK]: Added HWSDAFLAGS_SETPALETTE flag; display adapters can set this flag to indicate that they
  can change pixel colors by changing the palette; this is very useful on classic Amiga hardware where
  you can simply modify the hardware's color registers to change pixels without drawing anything; if
  display adapters set this flag, Hollywood will call into the display adapter's SetPalette() function
  whenever the palette changes instead of re-drawing all pixels with the new palette by calling your
  BltBitMap() function; to make your display adapter support the new SetPalette() function, you also need
  to set the HWEXT_DISPLAYADAPTER_PALETTE extension bit in your plugin; note that this is only supported
  for displays that have set HWDISPTAG_PALETTEMODE to TRUE in OpenDisplay()
- New [SDK]: Added HWSDAFLAGS_PENDRAW; display adapters can set this flag to indicate that their Line(),
  RectFill(), and WritePixel() implementations can handle pen values instead of colors as well; in that
  case, the "color" argument of those functions will be set to a pen index instead but only if the
  display that is passed to the functions is a display that has set HWDISPTAG_PALETTEMODE to TRUE on
  OpenDisplay()
- New [SDK]: Added HWDISPTAG_DEPTH and HWDISPTAG_PALETTE tags which are now passed to your OpenDisplay()
  implementation; note that HWDISPTAG_PALETTE is only passed if the BGPic attached to the display is a
  CLUT one; in that case, Hollywood will also pass the new tag HWDISPTAG_PALETTEMODE to OpenDisplay();
  if you set the int pointer in the pData tag member to TRUE, you can signal to Hollywood that your
  display is a special CLUT display that can handle the new HWSDAFLAGS_PENDRAW and HWSDAFLAGS_SETPALETTE
  flags (see above); setting HWDISPTAG_PALETTEMODE to TRUE is useful on classic Amiga hardware whose
  chipset uses CLUT-based pixel data  
- New [SDK]: Added HWSDAFLAGS_PALETTE for GfxBase.SetDisplayAdapter(); display adapters can set this flag
  to tell Hollywood that they can handle CLUT graphics; if HWSDAFLAGS_PALETTE is set, display adapters
  need to be prepared to deal with the new HWBBFLAGS_SRCCLUTBITMAP flag in BltBitMap(); if this flag is
  set, the bitmap passed to BltBitMap() is a CLUT one and you need to draw it using the palette and
  transparent pen passed in the new "Palette" and "TransPen" fields of struct hwBltBitMapCtrl; note that
  the TransPen field will normally be HWPEN_NONE; it can only ever be set to a transparent pen in case
  your plugin supports custom double buffers
- New: "FillPen" is now also supported for @BGPIC and LoadBGPic(); this can be used to specify a filling
  pen in case a transparent BGPic is loaded
- New: CreateDisplay() and @DISPLAY can also create palette-based displays now by setting the "Palette"
  tag (see below for details); the filling pen can be set using the optional "FillPen" tag
- New: CreateBrush() and CreateBGPic() can also create palette images now; to do that, you need to set
  the new "Palette" tag to a palette object previously created using CreatePalette() or @PALETTE; 
  alternatively, you can also set it to one of the predefined #PALETTE_XXX palettes; the new "FillPen"
  and "TransparentPen" table tags can be used to specify a pen for filling the new object (defaults to 0)
  and a pen to be made transparent (defaults to #NOPEN); note that when creating a palette image using
  CreateBrush() or CreateBGPic(), the color argument will be ignored
- New: Added the commands SetLayerPen(), GetLayerPen(), SetLayerTransparentPen(), SetLayerPalette(), and
  SetLayerDepth(); those are shortcuts for the respective counterparts from the palette library; the same
  functionality is available through palette library functions but needs more typing
- New: Added the commands SetBrushPen(), GetBrushPen(), SetBrushTransparentPen(), SetBrushPalette(), and
  SetBrushDepth(); those are shortcuts for the respective counterparts from the palette library; the same
  functionality is available through palette library functions but needs more typing  
- Change: The color argument is CreateBrush() and CreateBGPic() can also be left out now if the last
  argument is an options table; this change is just for your convenience
- Change: The color argument in Arc(), Box(), Circle(), DrawPath(), Ellipse(), Line() and Polygon() is
  optional now also in case you pass a table as the last argument; in that case, you can leave the color
  argument out now too (previously you could only leave it out in case it was the last argument); the new
  behaviour is especially useful when using #PALETTEMODE_PEN because in that case, the color argument
  isn't needed because #PALETTEMODE_PEN will use the draw pen set using SetDrawPen() instead
- New: The standard draw tags also support "ShadowPen" and "BorderPen" tags now; these are used instead of
  "ShadowColor" and "BorderColor" when palette mode is set to #PALETTEMODE_PEN; note that when palette
  mode is set to #PALETTEMODE_PEN, antialias is automatically disabled for graphics primitives and text;
  also, the "Transparency" tag is not supported for #PALETTEMODE_PEN except when layers are active
- New: Added new font format tag named "Pen"; this can be used with all text drawing functions to change
  the drawing pen when the palette mode is set to #PALETTEMODE_PEN; note that when using the "Shadow" and
  "Edge" tags, the color value is expected to be a pen value instead now when #PALETTEMODE_PEN is active
- New: TextOut() and CreateTextObject() support a new "Pen" tag in their optional table argument; this can
  be used to specify the drawing pen that shall be used in case palette mode is set to #PALETTEMODE_PEN;
  if it is not specified, then the drawing pen set using SetDrawPen() is used
- New: SetLayerStyle() and GetLayerStyle() now allow you to set and get the palette mode, dither mode and
  drawing pens using the new "PaletteMode", "DitherMode", "DrawPen", "ShadowPen", and "BorderPen" tags
- New: GetAttribute() supports #ATTRPALETTEMODE, #ATTRDITHERMODE, #ATTRPEN, #ATTRSHADOWPEN, #ATTRBORDERPEN
  for #DISPLAY now; those will return the drawing pens as well as the palette and dither mode set using
  SetPaletteMode() and SetXXXPen(), respectively
- New: Added support for #PALETTE type for GetAttribute(); the following attributes are supported for
  #PALETTE: #ATTRCOUNT, #ATTRTRANSPARENTPEN, #ATTRDEPTH, #ATTRPALETTE, #ATTRCYCLE, #ATTRLOADER; NB: the
  new #NOPEN constant is returned by #ATTRTRANSPARENTPEN in case there is no transparent pen  
- New: Added support for CRNG color range chunks inside IFF ILBM/PBM images; if the "LoadPalette" tag in
  LoadBrush() or LoadBGPic() is TRUE, CRNG chunks are loaded automatically from IFF images and you can
  access their data using the new #ATTRCYCLE tag; this is also possible for palettes loaded using the
  @PALETTE preprocessor command or LoadPalette(); you can also manually create CRNG chunks using the
  CreatePalette() function and you can apply them to several objects using SetCycleTable()
- New: Added palette library; this library contains a lot of functions to easily deal with palettes; the
  following functions are now available: CreatePalette(), FreePalette(), LoadPalette(), SavePalette(),
  SetPalette(), TintPalette(), InvertPalette(), PaletteToGray(), SolarizePalette(), GammaPalette(),
  ContrastPalette(), ModulatePalette(), GetBestPen(), CopyPalette(), ExtractPalette(), SetPaletteMode(),
  SetDepth(), SetDrawPen(), SetPen(), GetPen(), SelectPalette(), SetTransparentPen(), ReadPen(),
  WritePen(), SetPalettePen(), GetPalettePen(), SetPaletteDepth(), SetPaletteTransparentPen(), @PALETTE,
  SetGradientPalette(), SetStandardPalette(), CyclePalette(), SetDitherMode(), CopyPens(), SetShadowPen(),
  SetBorderPen()
- New: Added RemoveBrushPalette() function; this function can be used to remove the palette from a palette
  brush, thus converting it into an RGB brush; the optional argument allows you to specify what to do
  if there is a transparent pen; it can be mapped to either a mask or an alphachannel
- New: Added RemapBrush() function which can be used to remap the colors of a (palette) brush to a new
  set of colors with optional dithering (defaults to TRUE); you have to pass the id of a palette to
  RemapBrush() which contains the new colors for the brush; the palette can contain up to 256 RGB entries;
  note that RemapBrush() will always convert the brush to a palette brush; also note that if the brush uses
  transparency, you have to use SetTransparentPen() on the palette first to define a pen that should be
  made transparent
- New: QuantizeBrush() accepts a new table-based syntax now that allows you to tell QuantizeBrush() to
  directly quantize the brush into a palette-based one; if the brush has a mask, pen 0 will be set to
  the color you specify in the new "TransparentColor" tag (defaults to #BLACK) and pen 0 will be made
  transparent; to make a different pen transparent, set the new "TransparentPen" table tag to the
  desired pen number; if the brush passed to QuantizeBrush() already has a palette, its colors can be
  further reduced
- New: GetAttribute() now supports #ATTRPALETTE, #ATTRDEPTH, and #ATTRTRANSPARENTPEN for types #DISPLAY,
  #BRUSH, #BGPIC, #SPRITE, #ANIM, #TEXTOBJECT, and #LAYER; this is mainly useful if the source objects
  have a palette; note that when used with #ANIM or #SPRITE (or anim layers) you also need to pass a frame
  parameter as each frame could have its own palette and transparency setting; for anims loaded from disk
  you can only query the data from the last frame loaded 
- New: Video recorder supports palette-based BGPics now  
- New: Video playback supports palette-based BGPics now; note that this will be quite heavy on the CPU
  because all video frames will have to be remapped to the BGPic's palette  
- New: All transition effects supported palette-based images now; all combinations are possible, e.g.
  show CLUT image on RGB BGPic, show RGB image on CLUT BGPic, show CLUT image on CLUT BGPic, and show
  RGB image on RGB BGPic; layers are fully supported and the different palette modes that can be set
  using SetPaletteMode() are also supported; lots of optimizations were put into place to make CLUT
  image drawing efficient; this was a lot of work! 
- New: ReadBrushPixel() and WriteBrushPixel() support palette-based brushes now; in that case, they'll
  read/write pen values from/to the brush
- New: BeginDoubleBuffer() can now also create palette-based double buffers; it will do so if the BGPic
  that is active when BeginDoubleBuffer() is a palette-based one  
- New: SelectBrush(), SelectBGPic(), SelectAnim(), and SelectLayer() can draw to palette-based image data
  now too; you can use SetPaletteMode() to configure the drawing mode to use (see below)  
- New: Hollywood's sprite engine supports palette-based graphics now as well  
- New: Hollywood's layer engine supports palette-based graphics now as well; all features of the layer
  engine are supported for palette-based images now too, e.g. transformations, filters, transparency,
  etc.; single-colored layers created by functions like Box(), Ellipse(), TextOut() etc. will internally
  now be stored as CLUT images to save memory
- New: Transparent BGPics can also be palette-based now  
- New: When using a palette-based BGPic, Hollywood now behaves as if it was operating on a palette-based
  output device; this means that the available colors will be limited to the BGPic's palette; by default,
  all graphics that you draw to a palette-based BGPic are remapped to the BGPic's palette; dithering is
  optionally available using the new SetDitherMode() command; note that drawing graphics like this is
  rather slow because the image data has to be remapped on-the-fly; faster drawing can be achieved by
  changing the palette mode to #PALETTEMODE_PEN using the SetPaletteMode() command; if #PALETTEMODE_PEN
  is active, Hollywood will simply copy the image data to the BGPic without adapting any colors; this will
  obviously only work if the image data to be copied is CLUT as well; RGB images of course still have to
  be remapped; furthermore, if #PALETTEMODE_PEN is active, all single color graphics like shapes and text
  will be drawn using the pen you can specify using SetDrawPen(); using palette-based BGPic's is a nice
  way of emulating old palette-based displays so it can be very convenient for porting old software 
  written for palette-based systems; also note that if #PALETTEMODE_PEN is active, the draw and text
  library will ignore the #ANTIALIAS style flag; alpha values in colors will also be ignored in case
  #PALETTEMODE_PEN is active because drawing colors will be taken from what was set using SetDrawPen(),
  SetBorderPen(), and SetShadowPen()
- New: Added PenArrayToBrush() and BrushToPenArray(); these two functions do the same as RGBArrayToBrush()
  and BrushToRGBArray() but instead of RGB colors they use pen values; this means that they can only be
  used with palette brushes
- New: All brush manipulation functions support palette brushes now too; exceptions: ReplaceColors(),
  SetBrushTransparency(), BlurBrush(), EmbossBrush(), EdgeBrush(), SharpenBrush(), SepiaToneBrush(), 
  CharcoalBrush(), BrushToMonochrome(), ChangeBrushTransparency(), OilPaintBrush(); note that the
  following brush manipulation functions will merely modify the brush's palette in case there is one
  and thus will be extremely quick: InvertBrush(), TintBrush(), BrushToGray(), SolarizeBrush(),
  GammaBrush(), ContrastBrush(), ModulateBrush()  
- New [Amiga]: The "LoadPalette" tag is now also supported for the OS native image and anim loaders via
  picture.datatype and animation.datatype; "LoadTransparency" is also supported in combination with
  "LoadPalette" through the native OS loader
- New [SDK]: Updated PCX example image loader plugin to support the new "LoadPalette" tag
- Fix [SDK]: Fixed crash in the PCX example image loader plugin when trying to load CLUT images
- New [SDK]: Added HWANMFLAGS_LOADPALETTE and Palette, Depth, and TransPen fields to struct LoadAnimCtrl;
  this allows anim plugins to support Hollywood 9.0's new "LoadPalette" functionality now as well; usage
  is exactly the same as with the image plugin API (see below)
- New [SDK]: Added HWIMGFLAGS_LOADPALETTE; Hollywood will set this flag to tell LoadImage() to load the
  image pixels as CLUT instead of RGB values; note that if this flag is set and the picture doesn't have
  a palette, your LoadImage() implementation must return NULL; new members have also been added to struct
  LoadImageCtrl (Palette, Depth, TransPen); if HWIMGFLAGS_LOADPALETTE is set, you must set those members
  to the correct values; Depth & TransPen must be set by LoadImage() and Palette must be set to a static
  buffer that contains 256 ULONGs (even if depth is less than 8!) by GetImage(); if HWIMGFLAGS_TRANSPARENCY
  is set, you must set TransPen to the transparent pen or to HWIMGTRANS_NONE if there is no transparent
  pen; a word of warning: make sure to test for Hollywood 9.0 before writing to these structure members
  or you will trash memory!     
- New: A blast from the past: Hollywood now has full support for palette-based images! Hollywood has
  already been able to load and process these images before of course but internally they were always
  stored as true colour graphics; now it's possible to tell Hollywood to store palette-based images as
  such; this saves memory and more importantly, it can be used for some nice retro effects like color
  cycling; you can tell Hollywood to store images as CLUT ones by setting the new "LoadPalette" tag to
  TRUE; this tag is available for @BRUSH, @BGPIC, @ANIM, and @SPRITE (and the respective loader commands);
  a transparent pen can be specified using the new "TransparentPen" tag or you can set "LoadTransparency"
  to TRUE to load the transparent pen information from the image file; the "LoadPalette" tag is supported
  by the following image formats: IFF ILBM, GIF, PNG, and BMP; furthermore, it is also supported by the
  following anim formats: IFF ANIM and GIF
- Fix [Amiga]: The OS native anim loader via animation.datatype didn't handle the EHB flag correctly  
- Fix [Amiga]: The OS native image and anim loaders (via picture.datatype and animation.datatype) didn't
  handle the "LoadTransparency" tag correctly  
- Fix: Some GIF anims weren't loaded correctly (reported by Paul Bloedel)  
- Fix: Plot() didn't respect sprites with no transparency and alpha transparency
- Fix: IFF ILBM extra halfbrite images weren't always loaded correctly 
- New: Hollywood can now load compressed and uncompressed IFF PBM pictures as well; those were typically
  saved by the MS-DOS version of Deluxe Paint II; in contrast to IFF ILBM they store pixels as chunky
  instead of planar data
- Fix [OS3]: GetMACAddress() now returns the correct MAC address if the TCP stack supports it; note that
  as of now, the only TCP stack on AmigaOS3 which supports the obtaining of MAC addresses is Roadshow;
  with all other TCP stacks you'll get 00:00:00:00:00:00 (reported by Tony Canazza)
- Fix: When recording a video with layer scale active, transition effects weren't recorded correctly in
  case the effect wasn't running in Hollywood's real layer mode
- New: Added RefreshDisplay() function; this can be used to force a Hollywood display to refresh itself;
  an optional table argument can be used to configure what shall be refreshed; this function is mostly
  useful for debugging purposes because it's normally not needed to manually call it
- Fix: #ATTRLOADER didn't return the correct loader in case a brush or an animation created from an image
  source was loaded from Hollywood's internal image cache that is active at preprocessor time
- Change: The frame number parameter to #ATTRFRAMEDELAY is optional now; if not specified, it defaults
  to the first frame now
- New: Added OpenAnim() and CloseAnim() functions; OpenAnim() does exactly the same as LoadAnim() except
  that it sets "FromDisk" to TRUE by default; this is for convenience and consistency to functions like
  OpenMusic(), OpenVideo(), etc. which are also disk-buffered; CloseAnim() does the same as FreeAnim()
  and was added for consistency only
- Fix [SDK]: GfxBase.RawScale() didn't work correctly if SrcX or SrcY were different from 0
- New [SDK]: struct LoadImageCtrl has a "Depth" field now which your IsImage() implementation can use to
  set the pixel depth of the image
- New: The table returned by IsPicture() contains a new "Depth" field now that indicates the pixel depth
  of the image; this is useful for detecting palette-based images which will have a depth <= 8; on top of
  that, IsPicture() will also set the table field "Transparency" now to indicate whether or not the image
  has transparent pen that can be loaded by setting "LoadTransparency" to TRUE; note that this can only
  be TRUE for palette-based images
- Change [Amiga/Player/GUI]: Text in the "description" widget of the Hollywood Player and GUI is no longer
  selectable as single lines because that doesn't make much sense (reported by Samir Hawamdeh)
- Fix: Text objects created using CreateTextObject() with wordwrapping active didn't resize correctly
  when using layer scaling mode
- Change: For consistency with TextOut(), SetLayerStyle() also accepts a "Wordwrap" tag now; this tag was
  previously named "RightMargin" in SetLayerStyle(); the old name is still supported for compatibility
- New [Examples]: Added Enumerations example which demonstrates the new list features now supported by
  TextOut() 
- New: Added SetBulletColor(), GetBulletColor(), SetBulletPen(), and a #BULLETPEN attribute; these allow
  you to set and get the bullet color; you can also use the new format tags "BulletColor" and "BulletPen"
  to change the bullet color during text layout; note that the format tags mustn't be closed; they just
  act as instructions to change the bullet color starting from the item they are placed in; "BulletColor"
  and "BulletPen" are also supported by SetLayerStyle()
- New: When using TextOut() to create an ordered or unordered list and layers are enabled, the resulting
  layer of type #TEXTOUT will have multiple frames that you can cycle through using NextFrame() or all
  other layer functions that support anim layers; this makes it possible to cycle through the list items
  one by one or show one item after the other; the first frame always contains all items; the content of
  the other frames depends on what was specified in the new "FrameMode" tag; this allows you to either
  have all list items up to the current one visible (#FRAMEMODE_FULL) or only the current one as a single
  visible entry (#FRAMEMODE_SINGLE); TextOut() also accepts a "Frame" table tag now to specify which
  frame should be shown initially; both tags are also available from SetLayerStyle()
- New: Added support for ordered and unordered lists for TextOut(); to enable list output for TextOut(),
  set the new "ListMode" tag to TRUE; you can then create lists with TextOut() by inserting tabs to
  denote leaves and nodes; the appearance of the list can be configured by using new optional tags called
  "(Def)ListBullet", "(Def)ListIndent", and "(Def)ListOffset"; "ListBullet" allows you to specify a
  bullet to use for a list item; this can be one of the predefined #BULLET_XXX symbols or a custom
  Unicode codepoint; "ListIndent" specifies the number of space characters to use for indentation and
  "ListOffset" can be used to set the start offset for numbered lists; when passing a table for these
  tags, TextOut() will extract a new value from your table for each new list that it starts; if there
  are more lists than table elements, the value specified in the "DefListXXX" tag will be used; all tags
  are also available from SetLayerStyle(); please note that the "ListMode" and "Tabs" tags are mutually
  exclusive 
- New: TextOut() supports tabs now; if you want to use them, pass a table containing a list of tabs in
  the "Tabs" tag; the tabs must be pixel values relative to the x-position passed to TextOut(); if you
  don't specify the "Tabs" tag, all tabs will be converted to spaces (which is also the default); "Tabs"
  is also available from SetLayerStyle()
- New: TextOut() now supports an additional tag named "Linespacing"; this allows you to add or remove
  space between lines; it must be set to a pixel value that specifies the space to add (positive value)
  or to remove (negative value); the tag is also accessible via SetLayerStyle() and GetLayerStyle()
- Fix [Non-Amiga]: UTF-8 to ISO-8859-1 charset conversion was broken for some ISO 8859-1 characters
- Fix [SDK]: SysBase.UnregisterCallback() was broken and messed up the internal callback lists
- New [SDK]: Added SysBase.UnregisterEventHandler(); this can be used to unregister event handlers that
  were previously registered through SysBase.RegisterEventHandler[Ex]()
- Fix: CreateBorderBrush() didn't apply the alpha transparency if it was present in the color passed to
  it (reported by Paul Bloedel)
- Fix: Using SetDisplayAttributes() to move a display using fake fullscreen mode to a new monitor, its
  shielding black window wasn't moved along with it to the new monitor (reported by Sandro Barbagelata)
- Change [macOS]: macOS's notification center will no longer show a permission request for every app
  compiled by Hollywood; instead, permission requests from the notification center will only be shown
  if a script actually calls ShowNotification()
- Change [Installer/Amiga]: Installer warns now when trying to install the 68k FPU version because it can
  show all sorts of issues on emulations because the FPU emulation is often not as precise as on real
  hardware so it's recommended to use the non-FPU-version of emulators for best compatibility
- Fix [Installer/Amiga]: Icons weren't installed correctly when the 68k FPU version or the WarpOS version
  was chosen
- New [IDE/GUI]: Added support for Android and iOS targets when compiling scripts; compiling for these
  targets will yield applets that can be used with the Hollywood APK Compiler or Hollywood Player for
  Android and Remedios for iOS but the difference from just compiling normal applets is that Hollywood
  will set the #HW_ANDROID and #HW_IOS preprocessor keywords when compiling applets specifically for
  Android or iOS (requested by Christos Tsaldaris)
- Fix [GUI/macOS]: When adding new projects to the "My projects" listview, they weren't sorted correctly
  (reported by Achim Kern)
- New [IDE]: Added "Indent block" and "Unindent block" menu items to the "Edit" menu and to the context
  menu (requested by Anbjorn Myren)
- New [Android]: Added "ShowSystemBars" and "HideSystemBars" event handlers; these will trigger when the
  system bars are shown/hidden in immersive mode; you can also query #ATTRSYSTEMBARS to learn about the
  system bars' current visibility state
- New [Android]: Added support for immersive full screen mode; if that mode is used, all Android system
  bars will be hidden completely; you can enable immersive mode by setting the "ImmersiveMode" tag either
  in @DISPLAY, CreateDisplay() or SetDisplayAttributes(); there are three different immersive modes:
  #IMMERSIVE_NORMAL, #IMMERSIVE_LEANBACK and #IMMERSIVE_STICKY; you can also query the current immersive
  mode of a display using the new #ATTRIMMERSIVEMODE attribute (requested by Niels Schapke)
- New [Android]: You can now show and hide the status bar by setting the "HideTitleBar" attribute using
  SetDisplayAttributes() (requested by Paul Bloedel)
- Fix: When changing display size and position in one SetDisplayAttributes() call, SetDisplayAttributes()
  automatically centered the display in case the coordinates passed in "X" and "Y" were identical to the
  current display position (reported by Nathan Hesterman)  
- Fix: Some TrueType fonts which contained style keywords in their face name (e.g. "Albertus Extra Bold")
  couldn't always be opened (reported by Lars Brmer)
- Change [MorphOS]: Hollywood uses timer.device's GetUTCSysTime() function now to avoid abysmal slowdowns
  on MorphOS 3.10 and 3.11; on MorphOS 3.12- the performance is better because of an optimization in
  GetSysTime() but it's still not as fast as it used to be; using GetUTCSysTime() will fix this and make
  Hollywood as fast as it used to be on MorphOS (reported by Konrad Czuba)
- Fix: #ATTRTRANSPARENTCOLOR returned #NOTRANSPARENCY as a signed value whereas it should be unsigned
  (reported by Paul Bloedel)
- New [Amiga]: OpenSerialPort() can also be passed a string in the format "<devicename>:<port>" now in
  case you want it to open an alternative serial device, e.g. "serialpl2303.device:0" will try to open
  serialpl2303.device port 0 (requested by Christos Tsaldaris)
- New [SDK]: Added HWEXT_REQUIRE_LUALESS extension; set this to indicate that your RequirePlugin()
  implementation doesn't require a Lua state pointer; this will enable Hollywood Designer to require your
  plugin as well
- Fix [Doc]: Added information about an inconsistency in #ATTRCURFRAME when used with type #LAYER
  (reported by Paul Bloedel)
- Fix: DownloadFile() didn't always handle relative redirect requests in the HTTP location header field
  correctly (reported by Petteri Valli)
- New: Added IsAbsolutePath(); this simply returns TRUE if the path passed to this function is an
  absolute one on the current operating system; otherwise, FALSE is returned
- New: Added CanonizePath() function; this can be used to turn relative paths into absolute ones, i.e.
  it can eliminate ".." from paths; on AmigaOS it will also resolve assigns in path specifications and
  replace them with the real drive; on systems with case-insensitive file systems, it will also adapt
  the spelling of the path's components to the canonical one; also, slashes and backslashes are adapted
  according to the operating system Hollywood is running on; the path passed to CanonizePath() needn't
  exist; if it doesn't exist, CanonizePath() will try to resolve as many components in the path as
  possible; note, however, that CanonizePath() doesn't perform path validation; the result is undefined
  for invalid paths
- Change: SavePrefs() will serialize the preferences to JSON now by default; if you don't want that,
  pass "inbuilt" in the "Adapter" table field to force serialization in Hollywood's proprietary table
  serialization data format; alternatively, you can also pass the name of any other serializer that
  is available on your system; LoadPrefs() features a compatibility layer that will accept preferences
  both in Hollywood's proprietary table serialization data format and in JSON; this default behaviour
  can also be overridden by the new "Adapter" tag
- New: Added JSON support; SerializeTable() and DeserializeTable() will now (de)serialize its data to/
  from the JSON format by default; you can change this behaviour by specifying the optional adapter
  argument; ReadTable() and WriteTable() will continue to use Hollywood's proprietary table serialization
  data format for compatibility reasons; you can force those functions to use JSON, however, by passing
  "default" in the "Adapter" table field; Hollywood's proprietary table serializer can be accessed by
  passing "inbuilt" in the "Adapter" table field
- New: Added GetItem() function for getting an item from a list; the only case where this is more
  convenient than just using list[idx] probably is to pass -1 to get the last item of a list
- New: Added SetListItems(); this can be used to convert an existing table to a table uses the new
  table library optimizations (see below)
- New: Major optimization for table library: InsertItem(), RemoveItem(), and ListItems() will now be
  massively faster but only if your code adheres to several rules: the table needs to have been created
  using the new CreateList() function and adding/removing items must only be done through InsertItem()
  and RemoveItem(); if you add or remove table items in any other way, the behaviour is undefined; if
  you follow the rules described above, InsertItem(), RemoveItem() and ListItems() will be massively
  faster
- New: CountDirectoryEntries() accepts a new type named #COUNTSEPARATE now; if this is specified, two
  count values will be returned: the first one specifies the number of files, the second one the number
  of directories in the specified directory
- New: CountDirectoryEntries() accepts a new argument named "Recursive" now; if this is set to TRUE, the
  directory entries will be counted recursively
- Change: Hollywood can be closed now while CopyFile(), MoveFile(), or DeleteFile() is currently in
  progress; this is possible because internally everything is implemented through the new asynchronous
  object functionality now 
- Fix: DownloadFile() and UploadFile() weren't able to handle files larger than 2 GB  
- New: Added "Async" tag to DownloadFile(), UploadFile(), CopyFile(), MoveFile(), and DeleteFile(); if
  this tag is set to TRUE, the respective function will return an asynchronous object handle that can be
  used to asynchronously execute the operation using the new ContinueAsyncOperation() function; to cancel
  an asynchronous operation, use the new CancelAsyncOperation() function; asynchronous execution is very
  useful in connection with RapaGUI or MUI Royale to update progress bars, for example, or to write GUIs
  that don't block during certain operations; asynchronous objects are stored as objects of type #ASYNCOBJ;
  you can associate user data with them using the object library functions and you can query #ATTRCOUNT
  to find out how many asynchronous objects are currently in memory
- Fix: The "Post" tag in DownloadFile() was broken since Hollywood 6.0 (reported by Alex Carmona)
- Fix: When using UploadFile() for FTP upload from a string source set in the "Data" tag and a callback
  function, the callback function's message "Total" field was set to 0 instead of the total upload size
- Fix [Android]: MakeDirectory() couldn't create directories when using absolute paths (reported by
  Anbjorn Myren)
- Fix [Doc]: MakeButton() didn't mention that buttons of type #LAYERBUTTON would receive two additional
  message parameters named "Layer" and "LayerName" since Hollywood 4.5 (reported by Michael Jurisch)
- New: Added SerializeTable() and DeserializeTable() for conveniently converting a table into a string
  and back using a serializer plugin
- New: LoadPrefs() and SavePrefs() accept a new optional table argument now which accepts an "Adapter" 
  tag which allows you to specify a plugin to be used for serializing the data
- New [SDK]: Added HWPLUG_CAPS_SERIALIZE which allows plugins to hook into Hollywood's new serializing
  capabilities offered by WriteTable() and ReadTable()
- New: WriteTable() and ReadTable() accept a new "Adapter" tag now which can be used to route those
  calls through external plugins supporting Hollywood's new serialization interface 
- Change: WriteTable() uses a table argument for its options now; the old syntax is still supported for
  compatibility
- New [SDK]: Added HWFILEREQTAG_FILTERS to interface with the new extended filter table supported by
  FileRequest() now
- New: You can also pass a table in FileRequest()'s "Filters" table tag now to specify filters for the
  file requester; the table allows you to pass a description for each filter group (e.g. "Image files",
  "Sound files", etc.) that will be shown in the file requesters on platforms which support it (that is
  currently Windows and Linux)
- New: FileRequest(), PathRequest(), StringRequest(), ListRequest(), FontRequest(), and ColorRequest()
  support "X/Y/Width/Height" tags in the new optional table argument now; this can be used to specify the
  position and size for the requester on the screen; note that not all platforms support all of those
  tags; on some platforms only positioning or nothing at all of those tags might be supported
- Change: Requester functions FileRequest(), PathRequest(), StringRequest(), ListRequest(), FontRequest(),
  and ColorRequest() alternatively accept a table-based syntax now for all their optional arguments 
- Fix [Windows]: When omitting the pattern argument, FileRequest() set up two filters for all files (*.*)
  in the requester but there should be only one
- Change [Amiga]: FileRequest() and PathRequest() are guaranteed to return fully qualified paths now
  for consistency with all other platforms
- New: ReadLine() accepts an optional argument now; if this is set to TRUE, ReadLine() will include the
  line break characters (LF or CRLF) in the returned string (if there are any)
- New: Added MakeHostPath() command; this converts a Hollywood platform-independent path to a path that
  is compatible with the current host system, e.g. on AmigaOS it'll remove things like ".." and convert
  backslashes to slashes whereas on Windows slashes will be converted to backslashes
- New: FullPath() accepts an unlimited number of arguments now; this allows you to construct a path from
  more than two components
- Fix [OS3]: StringRequest() didn't work with #NUMERICAL in case a string that didn't contain a number
  was specified as the default string (reported by Juan Carlos Herran Martin)
- Fix [Windows]: Refresh error when restoring a display that had the "RememberPosition" tag set and was
  minimized on program termination, e.g. by closing it from the taskbar (reported by Torgeir Vee)
- New [SDK]: Added HWMCP_SETFORBIDMODAL attribute; this can be used to force Hollywood to disable all
  library functions which start a modal event loop, e.g. WaitLeftMouse(), WaitSampleEnd(), InKeyStr(),
  and so on; note that Wait() isn't affected by HWMCP_SETFORBIDMODAL; you can control the behaviour of
  Wait() by implementing your own Sleep() function using HWSDAFLAGS_SLEEP
- Change: Core event handler completely rewritten; it is a much cleaner design now than the old one which
  dates back all the way to Hollywood 2.0 and had several flaws
- Fix [Amiga]: Stack overflow when a Rexx script started using RunRexxScript() made lots of calls back
  into the Hollywood script
- Fix: Hollywood crashed when using the video recorder and an error occurred before the video recorder
  wrote the very first video frame
- New: Added RunCallback() function to event library; this function can be used to push a user callback
  into the event queue; the callback won't be run immediately but the next time the event queue is emptied
  by WaitEvent() or CheckEvent() (requested by Michael Jurisch)
- Fix [Android]: Hard-coding an orientation in the "Orientation" tag of @DISPLAY didn't work correctly if
  the orientation was the same as the current device orientation (reported by Niels Schapke)
- New: Added RawDiv(); this does the same as Div() but doesn't check the divisor against 0 which allows you
  to compute machine-specific representations of NaN and Inf by computing the results of 0/0 or 1/0
- New: Added IsNan(), IsInf(), and IsFinite() to math library to check a value against NaN, infinity, and
  finiteness; also added the constants #NAN and #INF which contain the values of NaN and infinity; note
  that due to the design of the parser, you cannot use #NAN as a literal value in your scripts; instead,
  you have to use GetConstant("#NAN") to get the value of #NAN; #INF, on the other hand, can be used in
  scripts; note: do not test for NaN by comparing the number with itself, expecting to get FALSE; this
  won't work on all platforms; always use IsNan() (requested by Michael Jurisch)
- New: Added "IgnoreHandlers" argument to Run(); if you have handlers installed for "RunFinished" and/or
  "RunOutput" you can set the new "IgnoreHandlers" optional table argument to a string indicating which
  handlers to ignore, e.g. "RunFinished|RunOutput" will ignore both handlers for the respective call to
  Run()
- New: Added ReverseFindStr() command; this does the same as FindStr() but searches from the end of a
  string towards its beginning
- New: Added PRINTERROR console argument/tooltype; if this is set, Hollywood will not show a dialog box
  in case an error happened, but will print it to stdout; useful for integrating Hollywood in your
  favourite IDE; also added FORMATERROR console argument/tooltype; if this is set, errors printed to
  stdout will be formatted in a specific way so that IDEs can catch them and easily extract relevant
  error information from them
- New: Execute() and Run() accept an optional table argument now that allows you to set the current
  directory for the program that is started
- New [SDK]: Added HWDISPFLAGS_SCALEFACTOR to find out if a display has scale factor mode enabled; note
  that scale factor mode can be enabled if HWDISPATTR_SCALEFACTOR returns 1
- Fix: When using SCALEFACTOR=1 (or SYSTEMSCALE on a system whose host scale factor was 1) Hollywood 
  ignored the fact that scale factor mode was requested; it now behaves correctly
- Fix [OS4]: When running a program using Run(), its output wasn't printed to stdout at all
- Fix [OS4/MorphOS]: "RunFinished" sometimes didn't trigger when the program to be executed ran only for
  a very short time (e.g. "echo hello"); furthermore, using "RunFinished" on OS4 and MorphOS could easily
  crash the system because it had several issues that should all be fixed now
- New: Added "RunOutput" event handler; this can be used to capture the output of programs started using
  Run(); note that output will normally not be delivered in real-time because of stdio buffering but
  if the external program continually outputs text it will arrive pretty instantly at your "RunOutput"
  callback; note that due to OS limitations, this is currently unsupported on AmigaOS 3.x; MorphOS
  users require at least MorphOS 3.12; by default, the output will be converted to the current default
  encoding; if you don't want that, set the new optional "RawMode" argument to TRUE to get the program's
  raw output (requested by Petteri Valli)
- Change: Execute() and Run() accept a new syntax now that allows you to pass the program and its
  arguments separately; this is more convenient because it doesn't require you to enclose the program
  path in quotes to make sure paths with spaces work; the third argument is a table now that can be
  used to pass further options; the old syntax is still supported for compatibility, though
- Fix [Doc]: "SystemScale" was documented as its own tag whereas it is just a display mode that can
  be specified as part of the "Mode" tag (reported by Paul Bloedel)
- Fix: @REQUIRE-ing RapaGUI before other plugins made all hidden Hollywood displays visible (reported
  by Sasha Pont)
- Fix [Android]: Execute() and Run() can now be used to install APKs again; note that when using the
  Hollywood APK Compiler you need to request the "REQUEST_INSTALL_PACKAGES" permission via the manifest
  because by default apps can't install other apps and it doesn't make sense to generally request this
  permission for all apps because very few will actually need this (reported by Paul Bloedel)
- Fix [Android]: Execute() and Run() weren't able to open files from the external storage any longer
  because of new security restrictions for all apps targetting Android Nougat (7.0) or higher
- Fix [IDE]: Illegal memory access when typing non-alphabetical characters outside strings and comments
  after a colon (reported by Anbjorn Myren)
- Fix [Doc]: The return value FALSE for #COPYFILE_UNPROTECT was documented as "file shall not be
  unprotected" but it actually means that the file shall be skipped (which implies that it shall not
  be unprotected)
- New: #COPYFILE_UNPROTECT can return -2 now to signal that nothing should be done which will
  typically mean that an error will be triggered shortly thereafter because CopyFile() won't be able
  to write to the file but you can catch the error by setting "FailOnError" to FALSE
- Change: CopyFile() will no longer silently skip files that can't be copied because the destination
  file is write-protected; it will fail now; this is an API break but it is necessary because 
  otherwise CopyFile()'s new "FailOnError" mode doesn't really make sense
- New: For historical reasons, DeleteFile() never fails when it is passed a non-existing file or
  directory; since this cannot be changed without breaking existing scripts, there is now a new
  options table argument called "MustExist"; if this is set to TRUE, DeleteFile() will fail if the
  specified file or directory doesn't exist
- New: DeleteFile()/CopyFile()/MoveFile() accept a new "FailOnError" argument in their options table
  now; normally, those commands will fail when an error occurs; if you don't want that, set the new
  "FailOnError" argument to FALSE; in that case, the commands won't fail on an error but instead your
  callback, if there is one, will be notified using the new #DELETEFILE_FAILED/#COPYFILE_FAILED/
  #MOVEFILE_DELETEFAILED/#MOVEFILE_COPYFAILED messages and your callback can tell the commands how to
  proceed (retry, continue, abort); note that for DeleteFile(), "FailOnError" is not handled when
  deleting a single file, only when deleting whole directories or multiple files using patterns; for
  MoveFile(), "FailOnError" is only handled when moving files across volumes which implies copying
  and deleting them
- New: DeleteFile() accepts a new "Recursive" argument in its options table now; DeleteFile() has
  recursion into subdirectories enabled by default; if you don't want that, set this new argument to
  FALSE
- New: CopyFile() and MoveFile() accept a new "BufferSize" argument in their options table now; this
  can be used to set the buffer size to be used for copying files (defaults to 16384, i.e. 16kb)
- Change: CopyFile(), DeleteFile(), and MoveFile() accept a table-based syntax now which should make
  it easier to add new options for those powerful functions; the old syntax is still supported for
  compatibility reasons
- New [Windows]: Path specifications longer than 260 characters are supported now; the only limitation
  is that ChangeDirectory() can't handle paths longer than 260 characters, but that it is a Windows
  limitation
- Fix [Windows]: Passing drive letters without a terminating (back)slash to DOS library functions
  (e.g. "C:" instead of "C:/") didn't work correctly; this also affected MoveFile() when trying to
  move a file or directory to the root of a volume 
- Fix [Amiga/Linux/Android]: Unicode sorting in CompareStr() and Sort() didn't always work correctly
  for words only differing in their diacritics (reported by Lazar Zoltan)
- New: Added support for #BAUD_600 and #BAUD_1200; this is useful for some older devices (requested
  by Leo den Hollander)
- New [SDK]: Added HWSYSPATH_LOCALAPPDATA for SysBase.GetSystemPath(); this returns the path to the
  local (i.e. non-roaming) application data; only supported on Windows and macOS (on macOS this will
  be the same as HWSYSPATH_COMMONAPPDATA)
- New [Windows/macOS]: The table returned by GetSystemInfo() now has an additional field named
  "LocalAppData" which contains the path to the local (i.e. non-roaming) application data; on macOS
  this will be the same as "CommonAppData"
- Fix: ChangeDirectory() didn't fail on error; it does now, which is an API change but hopefully it
  won't break any scripts; for DeleteFile(), we'll keep the legacy behaviour that it doesn't fail if
  a non-existent path is specified because Designer (and probably other scripts) depend on it
- Fix [Amiga]: #ATTRPOSITION for #SAMPLE didn't return correct values with the new audio driver that
  was introduced with Hollywood 6.0 (reported by Jrg Renkert)
- New: GetFileArgument() accepts an optional parameter now; if this is set to TRUE, GetFileArgument()
  will return the full path to the file (requested by Petteri Valli)
- Fix: PathRequest() and FileRequest() didn't allow you to mix slashes and backslashes in the path that
  was passed as the default directory (reported by Sandro Barbagelata)
- Fix: When entering an empty string in InKeyStr(), the cursor position was reset to the top-left corner
  (reported by Justin Webb)
- New [SDK/Amiga]: Added HWMCP_GETAMIGASIGNALS; this new attribute allows plugins to get the Amiga
  signal mask returned by the last call to Wait()
- Change [Amiga]: HWCB_AMIGASIGNAL callback is now always called immediately before Wait(); this fixes
  certain refresh problems with MUI Royale and RapaGUI (reported by Petteri Valli)
- Change [Android]: GetAsset() will only try to access the assets directory when running APKs created
  by the Hollywood APK Compiler; when running normal applets through the Hollywood Player for Android,
  GetAsset() will behave as on desktop systems now (suggested by Paul Bloedel)
- Fix [Android]: Vertical offsets were slightly shifted when using a display that is initially set to
  "FullScreenScale" mode (reported by Christos Tsaldaris)
- Fix [Android]: "FitScale" didn't work correctly if an orientation different from the current device
  orientation was set using the "Orientation" tag, forcing Hollywood to change the device's orientation
  (reported by Gianluca Girelli)
- Fix [Android]: Scaling size wasn't calculated correctly when using "FitScale" while the action bar
  was visible as well (reported by Paul Bloedel)
- Fix [Android]: Wrong touch to mouse offset mapping when using "FullScreenScale" mode on Android
  (reported by Christos Tsaldaris)
- Fix: Starting from Hollywood 6.0 VWait() only waited if the current display was open; this was not a
  good idea because it is often used as a throttle (e.g. by Hollywood Designer) and with that design
  the CPU usage dramatically increased as soon as a display was minimized (reported by Torgeir Vee)
  
Version 8.0     (08-Feb-19)

- Change: Updated Hollywood documentation
- Change: Updated catalog descriptions and German translation; added new developer files for doing
  new translations
- Change: Updated the Hollywood GUI (Amiga) and IDE (Windows)
- New: Added Supremacy example as the official Hollywood 8: Supremacy welcome presentation
- Change: Updated the Welcome, Epiphany, and AlphaChannel examples
- Change: Changed spelling of "Mac OS X" to "macOS" as this is now the official spelling
- Change: All Hollywood commands are now defined on all platforms to make it easier to get a complete
  list of the full Hollywood command set using the EXPORTCOMMANDS option; when calling a command that is
  not available on a certain platform, e.g. CreateRexxPort() on Windows, Hollywood will show an error
  message
- Fix [Win32]: Audio driver for video playback and Protracker modules sometimes overwrote data in the ring
  buffer that hadn't been played yet
- Fix [macOS]: Borderless windows were always resizable even if "Sizeable" wasn't set to TRUE 
- New: SplitStr() also supports strings longer than one character as the splitting token (requested by
  Samuli Holopainen)
- Fix: SplitStr() didn't work with UTF-8 characters that contained more than one byte (reported by Samuli
  Holopainen)
- Fix: Inbuilt AVI MJPEG loader only supported AVISTREAMHEADER of 56 bytes in size; the 64 bytes version
  is now also supported
- Fix [Linux/arm]: Memory access fault when trying to link Hollywood plugins to an executables (reported
  by Enrique Martos)
- Change [Android/iOS]: Setting "Mode" to "FullScreen" in @DISPLAY will automatically put the display in
  "FullScreenScale" mode with autoscaling and bilinear interpolation activated; this is a sensible
  solution because mobile devices can't change their physical monitor resolution
- New [Android]: Added CallJavaMethod(); this is a very powerful function which allows you to call into
  Java code directly from the Hollywood script; most of the Java data types are supported and it is also
  possible to pass arrays to a Java method or make it return an array back to the script; finally, it's
  also possible to call into static Java methods; beware that the Hollywood VM runs on its own thread so
  your Java method will be executed on the Hollywood thread as well which means that if you want to do
  things that must be done on the UI thread you need to delegate to the UI thread first; obviously, this
  function can only be used in connection with the Hollywood APK Compiler
- Change [Android]: Plugins linked to APKs using the Hollywood APK Compiler are now loaded in a fully
  system-friendly way; no more hacks here!
- Change [Android]: Self-contained APKs created by the APK Compiler will no longer automatically load
  Hollywood plugins stored in ~/Hollywood/Plugins on the external storage because they don't have any
  permissions to do that by default; make sure to link all plugins directly to your APK!
- Change [Android]: Preferences are no longer saved to the external storage because self-contained APKs
  don't automatically have permission to read from/write to the external storage space; instead, prefs
  are now stored in the internal storage which doesn't have such restrictions
- New [Android]: Added PermissionRequest() function to request certain permissions at runtime; starting
  with Android 6.0 (Marshmallow) apps can no longer request read and write permission to the public
  external storage at install time; they need to do so at runtime; you can use PermissionRequest() to
  do that; the public external storage path can be accessed via the "SDCard" item returned in the table
  that is returned by GetSystemInfo()  
- New [Android]: Added "OnAccelerometer" and "OnGyroscope" event handlers; these will trigger whenever
  the device's sensors report new values; note that typically those event handlers will deliver lots
  of messages so you should only enable them if you really need them (requested by Xabier Payet)
- New [Android]: Added Vibrate() function; this will vibrate the device for the specified duration in
  milliseconds (requested by Xabier Payet)
- New [Android]: Added ImageRequest() function; this function can be used to ask the user to select an
  image from Android's gallery; the image will then be returned as a Hollywood brush to the script; if
  you pass the #REQ_CAMERA type, ImageRequest() will pop up the device's camera instead of the gallery
  and the user can take a picture which is then returned to the Hollywood script as a brush (requested
  by Xabier Payet)
- Fix: Hollywood's internal JPEG loader didn't handle the orientation tag of the Exif specification; all
  8 orientations are handled correctly now
- Fix: The extremely quick JPEG header analyzer used in IsPicture() to quickly return the dimensions of
  a JPEG picture didn't work correctly with JPEGs that had the Exif marker directly after the SOI marker  
- Change [GUI/Amiga]: GUI no longer stores its temporary files in the PROGDIR: but in T: so that there
  are no temp file leftovers in case the system is rebooted without closing the GUI first (reported by
  Paul Bloedel)
- New: Added MonitorDirectory() function; this allows you to monitor all changes in a directory and get
  notified as soon as something changes through the new "DirectoryChanged" listener that you can install
  using InstallEventHandler(); note that this function might not work correctly on network drives
- Fix [Doc]: #ATTRCOUNT was undocumented for several types although it is supported since Hollywood 5.0
- Change [MorphOS]: UTC time functions now use the new timezone functionality introduced with MorphOS
  3.10; if you're on 3.10 and up, all timezone and UTC functions will be completely reliable, below 3.10
  there can be deviations
- Fix [Android]: Querying file attributes on an asset or using DOSBase.FStat() on it led to a crash
  (reported by Paul Bloedel)
- Change [Examples]: The AlphaChannel example uses @LINKER now to erase all external dependencies when
  compiling the example into an applet or executable
- New: Added @LINKER preprocessor command; this preprocessor command allows you to pass some options to
  the linker; currently the tags "Files" and "Fonts" are supported by @LINKER; you can use these tags
  to pass additional files and fonts to be linked to the linker; this is the same as the LINKFILES and
  LINKFONTS options but of course it is more convenient to have those options directly in the script
- New: The FallThrough statement can now also be put directly after the Switch statement; in that case,
  you globally declare all Case sections within the Switch statement to always fall through to the next
  one in the hierarchy; saves some typing if you need lots of fall through functionality 
- New [SDK]: Added RewindDir() function for HWPLUG_CAPS_DIRADAPTER; directory adapter plugins have to
  implement this function in order to support the new RewindDirectory() command; note that you also have
  to set the new HWEXT_DIRADAPTER_REWIND extension bit if you want to implement RewindDir(); this is
  needed to keep compatibility with older plugins which don't implement RewindDir()
- New: Added RewindDirectory() command; this command can be used to reset a directory iteration session
  to the beginning; after calling RewindDirectory(), NextDirectoryEntry() will start at the beginning
  of the directory again
- New: Added CountDirectoryEntries() command which can be used to count all items in a directory (i.e.
  files, directories or both); note that you mustn't use this while iterating over the contents of a
  directory using NextDirectoryEntry(); use it only outside a NextDirectoryEntry() iteration session
- Change [Examples]: The AsyncFX example uses the new @DIRECTORY preprocessor command now; this makes
  it very easy to compile it to a standalone applet because of all images are linked into the applet at
  compile time; the Welcome example also has been reworked to use @DIRECTORY which makes it easier to
  compile it to a standalone applet (suggested by Michael Rupp)
- New: Added @DIRECTORY preprocessor command; this preprocessor command allows you to conveniently link
  all files in a directory (and optionally all files inside all subdirectories too) into applets or
  executables compiled by Hollywood; you can then use the new GetDirectoryEntry() command to access the
  individual files from your script code; note that GetDirectoryEntry() can also be used to access sub-
  directories of the directory specified in @DIRECTORY; you can then pass the result to OpenDirectory()
  to iterate over all files in the respective subdirectory; check out the documentation for an example;
  this is a very convenient feature if you have to link lots of files!; note that only datestamps,
  comments and file attributes aren't linked to applets, just the file name and its actual data; if
  you attempt to query datestamps, comments and attributes, they will be set to generic values
- Fix: Re-compiling applets as applets (or executables) didn't always link all files correctly
- Change [Doc]: Hollywood's HTML documentation is now part of the Amiga distribution of Hollywood again
  (requested by Petteri Valli)
- Change [Doc]: In the AmigaGuide documentation, the manual pages of all library functions have an
  additional "SEE ALSO" entry at the bottom now which links back to the index of functions for the
  specific library (requested by Thomas Igracki)
- Change: Hollywood will now append the version string defined in @APPVERSION to compressed applets in
  plain text; previously, the version string was only present as part of the compressed data which of
  course made it impossible to access (reported by Thomas Igracki)
- New [SDK]: Added HWEVT_MOUSEWHEEL; this allows display adapter plugins to post mouse wheel events to
  Hollywood's event queue (requested by Niels Schapke)
- New: DownloadFile(), UploadFile(), and OpenConnection() support a new tag named "SSL" now; if this is
  set to TRUE, Hollywood will set the SSL flag on any network adapters that might be installed; note that
  this tag is only effective for network adapters; Hollywood itself doesn't have any SSL support so when
  using Hollywood's inbuilt network adapter this tag doesn't have any effect; also note that you don't
  have to set this tag when the scheme already indicates SSL, e.g. by a "https://"-prefix in the URL
- New: DownloadFile(), UploadFile(), and OpenConnection() support a new "Adapter" tag now which allows
  you to explicitly route them through the specified network adapter; furthermore, you can also query the
  tag #ATTRADAPTER for objects of type #CLIENT now
- New [SDK]: Added network adapter interface (HWPLUG_CAPS_NETWORKADAPTER); this allows plugins to hook
  into Hollywood's network library and provide custom handlers; this can be very useful to provide
  support for additional technologies not supported by Hollywood itself, e.g. SSL; note that network
  adapters aren't activated automatically but you'll have to call SysBase.AddLoaderAdapter() to add
  them
- Fix [Doc]: The 3rd and 4th optional arguments of CreateServer() were undocumented since Hollywood 5.0  
- Change [Doc]: ReceiveUDPData() and SendUDPData() didn't mention that they didn't respect the timeout
  set using SetNetworkTimeout()  
- Fix: UDP connections were sometimes spuriously closed (reported by Dieter Groppe)  
- Change: GetConnectionIP() and GetConnectionPort() can now also query the remote side of a connected
  UDP object (i.e. of type #UDPCLIENT); to query an UDP object instead of a TCP one obtained from
  OpenConnection(), pass #NETWORKUDP in the new optional argument (default is #NETWORKCONNECTION); this
  is very similar to the way GetLocalIP() and GetLocalPort() work
- Change: The ip$ and port arguments are now optional for SendUDPData() in case you use it with an UDP
  object of type #UDPCLIENT; client objects are always connected to the same server so there is no
  need to pass an IP and port to SendUDPData()
- New: CreateUDPObject() supports a new 'mode' argument now which can be set to #UDPSERVER (default),
  #UDPCLIENT, or #UDPNONE; this allows you to create unconnected or client UDP objects; previously,
  all UDP objects created by CreateUDPObject() were server objects; note that when creating an
  unconnected UDP object using #UDPNONE, pass an empty string for the host name and 0 for the port;
  using #UDPCLIENT is recommended for objects which always send data to the same server; if that is
  the case, use #UDPCLIENT because it will make SendUDPData() faster
- New: Added IPv6 support; OpenConnection(), CreateServer(), CreateUDPObject(), ToIP(), DownloadFile(),
  and UploadFile() support a new argument now which allows you to set the desired protocol; this can be
  #IPV4, #IPV6 or #IPAUTO; for compatibility reasons the default is #IPV4 but this can be changed using
  the new SetNetworkProtocol() function; there are also two new functions called GetLocalProtocol() and
  GetConnectionProtocol(); these can be used to query the protocol on the remote and local side; this
  is especially useful when using #IPAUTO; additionally, there is a new function named ResolveHostName();
  this is similar to ToIP() but instead of a single IP address it will return a table containing all
  information from the resolver; this can be multiple IP addresses (e.g. one for IPv4 and one for IPv6);
  note that IPv6 isn't supported on Amiga compatible platforms because the OS doesn't support it 
- New: Added ShowNotification() function; this is the Swiss army knife notification function because
  it works on (almost) every platform; ShowNotification() will show an informational popup which will
  disappear automatically after a certain delay; on Android/iOS, ShowNotification() does the same as
  ShowToast(), on AmigaOS 4 it does the same as ShowRinghioMessage() (which is why you need to set
  "RegisterApplication" to TRUE on OS4 in order to use the function); note that on Windows notifications
  are only supported if there is a tray icon; thus, if you haven't called SetTrayIcon() explicitly,
  ShowNotification() will do this for you because it can only show a notification if there is a tray
  icon (requested by Niels Schapke and Petteri Valli)
- New [Windows]: SetTrayIcon() accepts the special constant #DEFAULTICON now; if this is passed as the
  source object identifier, the icon specified using @APPICON or, if there is none, Hollywood's inbuilt
  icon will be used  
- New [Windows]: SetTrayIcon() accepts an optional argument now which allows you to set the source
  type for the tray icon; this defaults to #BRUSH but you can set it to #ICON in order to use the new
  icon object type introduced with Hollywood 8.0 as the image source; this allows you to conveniently
  provide images for different DPI settings; make sure to set 16x16 as the standard size in the icon
  since that is the default tray icon size on Windows 
- New [IDE]: Added "Keep help window on top" option to the IDE; if this is activated, the help window
  will always stay on top of all other windows, which is also the default (requested by Christos
  Tsaldaris and Michael Jurisch)
- New: Added #SERIAL type; currently only the #ATTRCOUNT attribute is supported for #SERIAL  
- New: Added serial port support; Hollywood now comes with a dedicated library for communication on
  the serial port; the following functions are available: OpenSerialPort(), CloseSerialPort(),
  ReadSerialData(), WriteSerialData(), FlushSerialPort(), SetBaudRate(), SetStopBits(), SetParity(),
  SetDataBits(), SetFlowControl(), SetDTR(), SetRTS(), GetBaudRate(), GetStopBits(), GetDataBits(),
  GetParity(), GetFlowControl(), GetDTR(), GetRTS(), PollSerialQueue(), ClearSerialQueue(); this
  library should make it very easy and convenient to communicate with other devices using the RS/232
  standard; note that FlushSerialPort(), PollSerialQueue(), and ClearSerialQueue() aren't supported
  on Android (requested by Tony Canazza, Leo den Hollander, Christos Tsaldaris and Xabier Payet)
- Fix [Linux]: Hollywood didn't work without an X server (reported by Carl Moppett)
- Fix [Amiga]: Files ending in one or multiple dots couldn't be opened (reported by Jrg Renkert)
- Fix [Windows/Linux]: In case of overlapping drag and size regions, the size region is now given
  precedence in order to be consistent with the behaviour on Amiga compatible systems (reported by
  Radoslaw Czernik)
- Fix: Transforming brushes created by PathToBrush() crashed Hollywood (reported by Radoslaw Czernik)
- New: Added ForceSound() command and FORCESOUND console argument/tooltype; normally, Hollywood will
  fail silently if a script tries to access the audio hardware and it isn't available; by activating
  the FORCESOUND option, however, Hollywood will trigger a runtime error if a script tries to access
  the audio hardware and it can't be allocated
- New: Added OpenAudio() and CloseAudio() functions; these can be used to explicitly open and release
  the audio hardware; note that this is normally not needed because Hollywood will automatically open
  the audio hardware when it first needs it and it will be closed upon program termination; on Amiga
  systems, however, you might want to call CloseAudio() manually in case you want to allow other
  programs, which may require exclusive access, to acquire the audio hardware; note that calling
  CloseAudio() will not only stop all audio output but it will also free (!) all samples because
  samples are usually uploaded to sound card memory; musics and videos, however, aren't affected by
  CloseAudio(), though (requested by Petteri Valli)
- Fix [MacOS/x86/x64]: Mouse wheel events weren't generated reliably (reported by Petteri Valli)
- Fix [MacOS/PPC/Carbon86]: Mouse wheel events were always generated twice (reported by Petteri Valli)
- New [IDE]: Block indenting with TAB is supported now; if you mark a block and press TAB, the whole
  block is indented; if you press SHIFT+TAB, the identation is decreased (requested by Robin Hueskes
  and Michael Jurisch)
- New: Added Beep() function which can be used to play the system beep; on Windows systems, you can
  also specify which system sound you want to have played (#BEEPSYSTEM, #BEEPINFORMATION, #BEEPERROR,
  #BEEPWARNING, #BEEPQUESTION); on all other systems only #BEEPSYSTEM is supported
- New: Added ConsolePrint(), ConsolePrintNR(), and ConsolePrompt(); these do the very same thing as
  DebugPrint(), DebugPrintNR(), and DebugPrompt() except that they'll always work, i.e. even if
  "EnableDebug" is set to FALSE (which happens automatically when compiling scripts unless you set it
  explicitly to TRUE)
- New: Offsets can also be added to and subtracted from #USELAYERPOSITION now in the same way you can
  fine-tune other special constants like #CENTER or #RIGHT (requested by Michael Jurisch and Samuli
  Holopainen)
- New [Amiga]: HideDisplay() accepts a new optional argument now; if this argument is set to TRUE, the
  display will be hidden by moving it behind all other windows, i.e. to the bottom of the window stack
  (requested by Petteri Valli)
- New [Amiga]: Added GetFrontScreen() command; this will return the name of the public screen that is
  currently up front or an empty string in case a non-public screen is currently the frontmost screen;
  note that because of the multitasking environment screens managed by other programs can go away at
  any time so there is no guarantee that the screen is still there (or front) when GetFrontScreen()
  returns (requested by Petteri Valli)
- New: InKeyStr() also supports pasting text via CTRL+V (Windows/Linux) or CMD+V (all other platforms)
  now (requested by Niels Schapke)
- New: InKeyStr() supports an additional optional argument now which allows you to enable a cursor;
  if this argument is set to TRUE, InKeyStr() will show a cursor and you will also be able to move
  the cursor by pressing the left and right cursor keys; this also allows you to insert new characters
  at arbitrary positions within the string; additionally, it's also possible to delete characters at
  arbitrary positions by pressing DEL when InKeyStr() is in cursor mode (requested by Niels Schapke
  and Fabio Falcucci)
- Fix: Using backspace on non-ASCII characters didn't work correctly with InKeyStr()
- Fix: InKeyStr() simply returned a string full of asterisks when password mode was active, which is
  not quite what password mode was made for (reported by Fabio Falcucci)
- Fix [Doc]: Documentation didn't mention that "Balance" was ignored when creating multi-color conical
  gradients using the "Colors" table (reported by Tony Canazza)
- New: The table returned by IsPicture() now contains a new field named "Format" which will be set to
  the image's format; this can be #IMGFMT_BMP, #IMGFMT_PNG, #IMGFMT_JPEG, #IMGFMT_ILBM, #IMGFMT_GIF,
  #IMGFMT_TIFF, #IMGFMT_NATIVE, or #IMGFMT_PLUGIN (requested by Petteri Valli)
- Fix [Win32]: Non-alphanumerical characters as menu shortcuts didn't work (reported by Petteri Valli)
- New: Added HaveVolume() command to check if a volume is available (requested by Tony Canazza)
- New [Amiga]: Added NOCOMMODITY console argument/tooltype; this does the same as the @OPTIONS tag of
  the same name (requested by Paul Bloedel)
- New [OS4]: Added NODOCKY console argument/tooltype; this does the same as the @OPTIONS tag bearing
  the same name (requested by Paul Bloedel)
- New: Poke() and Peek() both accept an additional argument now that allow you to poke and peek in
  little endian byte order; this is probably more useful than the native endian argument because
  that isn't really portable and thus somehow contradicts Hollywood's very concept
- New: Added ByteStrStr() command; this allows you to convert a value to raw binary data; the value
  can be either an 8-bit (#BYTE), 16-bit (#SHORT), 32-bit (#INTEGER) value, or a 32/64-bit floating
  point value (#FLOAT and #DOUBLE); optionally, you can also specify if the byte order should be big
  endian or little endian (requested by Dieter Groppe)
- New: Added ByteVal() command; this allows you to read raw bytes from a string and return them as
  either an 8-bit (#BYTE), 16-bit (#SHORT), 32-bit (#INTEGER) value, or 32/64-bit floating point
  value (#FLOAT and #DOUBLE); optionally, you can also specify if the byte order is big endian or
  little endian (requested by Dieter Groppe)
- New: Added IsBrushEmpty() function; this returns TRUE in case a brush has an alpha channel or a
  mask and all pixels are invisible (requested by Tony Canazza)
- Fix [Doc]: Rnd() and RndF() were both documented as being inclusive whereas they are exclusive in
  reality; for RndF() the documentation was wrong since Hollywood 1.5, for Rnd() only Hollywood 7.1's
  manual was wrong (reported by Enrique Mecklenburg)
- Fix: ByteChr() returned an empty string when passing 0 (reported by Dieter Groppe)
- Fix [Amiga]: Several fixes in Hollywood's internal file buffering mechanism when using #MODE_READWRITE
  (reported by Petteri Valli)
- Fix [GUI/Amiga]: GUI crashed completely on systems without MUI (reported by Michael Jurisch)
- Fix [Windows]: Menu hotkeys didn't always work correctly (reported by Petteri Valli)
- New [SDK]: Added HWVBMCAPS_BLITTRANSFORM and HWVBMCAPS_BLITALPHAMOD to HWSDATAG_VIDEOBITMAPCAPS;
  if a display adapter supports one (or both) of those tags, the BltBitMap() implementation has to
  handle the new "Matrix", "AnchorX", "AnchorY" tags (for HWVBMCAPS_BLITTRANSFORM) and "AlphaMod"
  (for HWVBMCAPS_BLITALPHAMOD); note that if "Matrix" in "struct hwBltBitmapCtrl" is non-NULL, the
  coordinates passed to your BltBitMap() implementation are not clipped; they will be set to the raw
  coordinates passed to DisplayBrush() is "Matrix" is non-NULL; this is different to the case where
  "Matrix" is NULL; in that case, all coordinates are clipped to the current display boundaries
- New: When drawing a hardware brush using DisplayBrush() and one of the transformation tags (e.g.
  "ScaleX", "ScaleY", "Rotate", ...) or the "Transparency" tag, the hardware brush adapter may now
  choose to directly draw the hardware brush with the desired draw settings applied; previously, a
  new temporary hardware brush was allocated which was quite a throttle; the hardware brush adapter
  on Android supports this feature now so you can use DisplayBrush() to draw GPU-transformed graphics
  with very little overhead 
- New [SDK]: HWAVBMFLAGS_SMOOTH is now passed to AllocVideoBitMap() if the "SmoothScale" tag has been
  specified in the @BRUSH, LoadBrush(), CreateBrush(), or CopyBrush() command
- New: CreateBrush() and CopyBrush() support a new tag named "SmoothScale" now; this is only used if
  the "Hardware" tag has been set to TRUE as well; in that case, Hollywood will tell the hardware
  brush handler that linear interpolation is to be used when scaling and transforming this hardware
  brush; note that not all hardware brush implementations might handle that tag; additionally, the
  "SmoothScale" tag in LoadBrush() and @BRUSH is now also handled if "Hardware" has been set to TRUE
  (previously it was only handled if "ScaleWidth" and "ScaleHeight" had been set)
- New [Android]: Added support for hardware-accelerated drawing; Hollywood now supports hardware
  double buffers, hardware brushes, and hardware-accelerated drawing for plain rectangles and lines
  (i.e. without any additional styles applied); additionally, hardware brushes can be scaled, rotated
  and transformed using the GPU now which gives a great boost; hardware-accelerated drawing on Android
  is implemented in a very similar way to the hardware-accelerated drawing features offered by RebelSDL;
  all you have to do is start a hardware double-buffer and draw on it using hardware brushes; this
  should give a great speed boost!; NB: if you don't use fullscreen mode, make sure to call Cls() after
  every Flip(), otherwise there will be artefacts because there is some unused space around the
  Hollywood display
- Fix [Android]: ColorRequest() adapts correctly to different densities now
- New [SDK]: Added HWRBBTAG_CLIPRECT, HWRRFTAG_CLIPRECT, HWRLITAG_CLIPRECT, and HWRWPTAG_CLIPRECT for
  clipping the render output of GfxBase.RawBltBitMap(), GfxBase.RawRectFill(), GfxBase.RawLine(), and
  GfxBase.RawWritePixel(); you need to pass a pointer to a hwRect
- Fix [Android]: SetVideoVolume() wasn't implemented at all on Android
- New [SDK]: Added HWCRDSTAG_SCALEWIDTH and HWCRDSTAG_SCALEHEIGHT for GfxBase.ChangeRootDisplaySize();
  in case a scale factor has been set, these tags allow you to override the scaled dimensions of the
  root display; normally, they are calculated from the size you pass multiplied by the scale factor
- New [SDK]: Added HWLDIMGTAG_SCALE and HWLDIMGTAG_INTERPOLATE for GfxBase.LoadImage(); setting those
  will automatically return a scaled version of the image
- Fix [SDK]: When a display adapter was active and a satellite was attached to it and a video was
  playing, Hollywood wrongly generated a mask for the HWSATOP_BLTBITMAP command; this is no longer
  done because when a display adapter is active, video clipping is done internally using a single
  pseudo-sprite per video
- New: Added #ATTRHOSTSCALE for #DISPLAY object type; this returns the UI content scaling factor for
  the current display
- New [SDK]: Added HWPLUGINFLAGS_SCALEDISPLAYS and HWPLUGINFLAGS_INTERPOLATE for HWRPTAG_PLUGINFLAGS;
  if HWPLUGINFLAGS_SCALEDISPLAYS is set, Hollywood will set the display mode to "SystemScale" for all
  displays; setting the HWPLUGINFLAGS_INTERPOLATE flag will enable bilinear interpolation
- New [SDK]: Added HWGAB_FLAGS for GfxBase.GetARGBBrush(); this allows you to set some flags for the
  operation; the following flags are currently supported: HWGABFLAGS_SCALE scales the brush by the
  system's scaling coefficient and HWGABFLAGS_INTERPOLATE will activate bilinear interpolation for
  scaling; it only has an effect if HWGABFLAGS_SCALE is set as well
- New [SDK]: Added GfxBase.RawScale(); this allows you to scale raw pixel buffers with optional
  bilinear interpolation and cropping
- Fix: Slight pixel inaccuracy and memory access fault in the bilinear interpolated pixel scaler
- New [SDK]: Added HWDISPATTR_SCALEFACTOR which allows you to query whether the display is scaled by
  a hard-coded scale factor
- New: Added SYSTEMSCALE argument; setting this argument will make Hollywood query the host system's 
  DPI scaling coefficient and set it as the SCALEFACTOR; if SCALEFACTOR is specified as well, it
  will be multiplied by the system's DPI scaling coefficient; setting SYSTEMSCALE is a good way to
  make sure that your script appears large enough on high dpi displays; you can also set the scaling
  mode by passing AUTOSCALE or LAYERSCALE as an argument; if no scaling mode is specified, Hollywood
  will default to AUTOSCALE; the SYSTEMSCALE argument is also available from the CreateDisplay() and
  the @DISPLAY commands
- New: Added SCALEFACTOR argument; when setting this argument to a scaling coefficient, which may be
  fractional, the whole script is scaled by the specified coefficient; note that setting SCALEFACTOR
  will make the script behave slightly different than setting SCALEWIDTH and SCALEHEIGHT does; the
  latter will enforce a fixed display size for the script which will never be changed unless the user
  manually uses the mouse to change the display size; setting SCALEFACTOR, however, will apply the
  scale factor to all new BGPics and display sizes so the display size may change if the BGPic size
  changes or the script changes the display size; when using SCALEFACTOR, your display will also
  still receive "SizeWindow" messages which are normally not delivered when using a scaling engine;
  SCALEFACTOR's behaviour is perfect for scaling a script for a high dpi display because it makes
  sure that the script behaves exactly the same but just appears larger (or smaller if you want!);
  SCALEFACTOR is also available from the @DISPLAY preprocessor command and from CreateDisplay(); note
  that SCALEFACTOR will only have an effect when also setting either LAYERSCALE or AUTOSCALE  
- Fix: The #SCROLLXXX effects didn't work correctly with layer scaling and activated BGPic emulation
- Fix: Bug in the autoscaling engine that could trigger when using satellite displays
- New [SDK]: Added HWADS_CUSTOMSCALING tag to GfxBase.AttachDisplaySatellite(); when this is set,
  Hollywood won't do any autoscaling for the satellite but expects the dispatcher to do that; also
  added HWADS_BUFFERWIDTH and HWADS_BUFFERHEIGHT which can be used to obtain the back buffer
  dimensions of the root display (similar to HWDISPATTR_BUFFERWIDTH/HEIGHT)
- New [SDK]: Added HWICONFLAGS_OPAQUE; this is currently only used by GfxBase.GetIconForDensity()
  and GfxBase.GetIconImages()
- New [SDK]: Added GfxBase.GetIconForDensity(); this function can be used to retrieve a copy of a
  single icon for a desired density; if you pass 0 as the density, the default monitor's density
  is used; use GfxBase.FreeIcon() to free the icon returned by this function
- New [SDK]: Added GfxBase.GetIconImages(); this can be used to retrieve copies of all images inside
  an icon object; use GfxBase.FreeIcons() to free the list returned by this function
- New: @APPICON also accepts the filename of a Hollywood icon now instead of the old table argument;
  this should make icon linking much easier because you no longer have to specify all those different
  size tags; just one filename specifying an icon with different sizes is sufficient now; the old
  syntax is still supported for compatibility of course
- New: ConvertToBrush() also supports the new #ICON type; a new optional parameter allows you to
  specify whether you want to convert the selected or the normal icon to a brush
- New: Added GetAttribute() support for the new icon objects; the following attributes are now
  recognized for #ICON: #ATTRWIDTH, #ATTRHEIGHT, #ATTRNUMFRAMES, #ATTRNUMENTRIES, #ATTRSTANDARD, and
  #ATTRCOUNT
- New: Added icon support; icons are a new Hollywood object type that can store a collection of
  images in different sizes; this is very important when working with bitmap graphics and high density
  displays which are becoming more and more common; in that case, you can store several copies of
  an image for several resolutions in a single icon object; additionally, icons can contain two
  states for every size; this is important for Amiga support where icons always have two states;
  images in the icon object will always be sorted in ascending order and each size can only be
  there once inside an icon object; alternatively, you can also store a single vector graphics image
  inside the icon object; in that case, Hollywood will automatically scale the icon to the desired
  size without quality losses; the new icon library has the following functions: @ICON preprocessor
  command, CreateIcon(), LoadIcon(), SaveIcon(), FreeIcon(), AddIconImage(), RemoveIconImage(),
  SetStandardIconImage(); note that SaveIcon() will save the icons in a custom format that is compatible
  to PNG so that you can view Hollywood icons in your favourite image viewer; note, however, that you
  cannot edit those PNGs in an image processor because of some custom data stored by Hollywood; it's
  also not possible to use SaveIcon() on icons that contain vector graphics; Hollywood icons can only
  be created by the SaveIcon() function
- New [SDK]: Added HWMCP_GETDENSITY; this allows you to query the density for the default display
  device; note that different monitors can have different density settings so HWMCP_GETDENSITY will
  only be meaningful in case there is only one display device
- New [SDK]: Added SysBase.HaveObject(); this function allows you to check if the specified object
  is currently available in Hollywood
- Fix: Major bug in event handler that could cause a complete crash under very special circumstances
- Change [OS3]: The following keys are supported on OS3 now too: INSERT, PAGEUP, PAGEDOWN, F11, F12,
  PRINT, PAUSE, HOME, END; note that when running on a real OS3 system (i.e. not on OS4 and MorphOS)
  you need to use "OnRawKeyDown" and "OnRawKeyUp" to listen to them because the standard keymaps on
  OS3 don't have mappers for them so they won't be delivered through "OnKeyDown" and "OnKeyUp"
- Fix: When loading plugins at runtime using LoadPlugin(), plugin constants weren't loaded at all
  (reported by Petteri Valli)
- Fix: Fixed potential stack overflow with deeply nested tables in ReadTable() and WriteTable()
  (reported by Fabio Falcucci)
- New [Android]: Added "SingleMenu" tag to @DISPLAY; if this is set to TRUE, only the items of the
  first menu inside the menu strip are added to the Action Bar's options menu; this is useful if you
  only want to have a few menu options and avoid the hassle of the user having to navigate into a
  submenu first before being able to access a menu item
- New [Android]: Hollywood's Android backend supports menu strips now; they will be mapped to the menu
  that is opened when pressing the Action Bar's options button; Hollywood supports all menu features
  on Android, i.e. submenus as well as toggle and radio menus are fully supported on Android now
- New [Android]: Added SetSubtitle() function which allows you to set the subtitle of the Action Bar;
  pass an empty string to remove the Action Bar's subtitle; you can also set the subtitle using the
  new "Subtitle" tag available in @DISPLAY now
- New [Android]: The display's title set using the "Title" tag in @DISPLAY or using the SetTitle()
  command is now shown in the Action Bar
- New: Added Pack() function; this will conveniently pack all of its parameters into a table and return
  it to you; it is the counterpart to Unpack() (requested by Richard Lake)
- New: Added RemoveLayers() function; this will remove all layers in the current BGPic
- Fix [Doc]: An optional "keep" argument was added to FreeLayers() in Hollywood 4.0 but it was never
  properly documented
- Fix: Converting a vector brush into a BGPic didn't work correctly; it was impossible to transform
  the BGPic afterwards
- Fix: Eval() didn't correctly distinguish between variables whose first characters were identical
  and then changed after a "_", "$", or "!" token 
- Fix [Android/64-bit]: Polygons were always drawn in outline mode even when the mode was set to
  #FILLCOLOR; a hotfix for this major issue which affected lots of different parts of Hollywood
  has been uploaded to the Play Store (reported by Leo den Hollander) 
- Fix [Android]: Crash in FileRequest() and PathRequest() when trying to change to a parent directory
  that the app didn't have access to
- Change [Android]: Hollywood on Android finally exits gracefully now and doesn't just kill itself;
  this graceful exit can be seen in the fact that Hollywood will quit with a system animation now  
- Change [Android]: NOHARDWARESCALE is now obsolete; Hollywood will always use hardware scaling
  now because it is supported by all Android 4.0 and up devices
- New [Android]: Added support for right mouse button, middle mouse button, mouse wheel, and mouse
  move events when a mouse is connected to the Android device (requested by Xabier Payet)
- New [Android]: Hollywood will always show Android's Action Bar now unless you set the "HideTitleBar"
  tag to TRUE in @DISPLAY
- New [Android]: Added support for multiple displays; as soon as more than one display is open,
  Hollywood will put an item into the menu bar for every display that is open so that you can
  conveniently switch to this display; if you don't want to have a list of all open displays in the
  menu bar, set the new "NoCyclerMenu" tag to TRUE (either in CreateDisplay() or in @DISPLAY); you
  can programmatically bring a hidden display to the front by calling either ShowWindow() or
  ActivateWindow() (requested by Ulrich Beckers)
- New [Android]: Completely rewrote Hollywood's core on Android; it no longer uses NativeActivity
  now because that imposed too many limitations; instead, Hollywood uses a standard activity with an
  OpenGL ES 2.0-based renderer now; this makes it possible to use many new Android features like the
  Action Bar now; it also fixes problems with devices which didn't emulate the Android 1.x/2.x options
  menu button which Hollywood was still using even though it has been deprecated since Android 3.0;
  the downsides are that Hollywood requires at least Android 4.0 now and on very old devices Hollywood
  will be slower than the previous version because OpenGL ES 2.0 does everything in 32-bit whereas the
  previous Hollywood version also supported 16-bit modes for older devices but this is impossible with
  OpenGL ES 2.0
- Change: DebugPrint() and DebugPrintNR() now concatenate all arguments into a single string before
  sending them to the debug device; this results in better formatting on Android because previously
  every argument appeared on its own line due to the way DebugPrint() worked internally
- Fix [Linux]: #ATTRHOSTSCALEX/Y always returned 1, even on high DPI systems
- Fix [GUI/Linux]: Fixed some layout issues in the GUI on high DPI systems on Linux
- New [IDE]: The Windows IDE contains high resolution icons now which are used on systems running
  a resolution with a high DPI setting; this leads to a perfectly crisp appearance even on UltraHD
  screens; big thanks to Martin 'Mason' Merz for the hires icons!
- Change [Windows]: Hollywood's installer is now high DPI aware so the text will no longer appear
  blurry
- NEW [Android]: Ported RapaGUI to Android; this took more than 6 months to write but the result
  is stunning; creating GUI applications that run on Windows, macOS, Linux, AmigaOS, MorphOS, AROS
  and Android has never been easier! RapaGUI on Android supports almost everything from the desktop
  versions; the only thing missing entirely is a tree view widget because Android doesn't have one;
  all the other features are pretty much all supported, including dialogs, icons, toolbars, multiple
  windows and the Hollywood widget; it is also possible to combine Hollywood displays and RapaGUI
  windows in the same application, just like on the desktop platforms; since the majority of RapaGUI
  for Android has been implemented in Java with just a small bridge layer written in C/JNI, it's not
  possible to distribute it as a plugin because plugins are just shared objects containing machine code;
  instead, RapaGUI on Android is completely built into Hollywood; for compatibility reasons, you
  still need to @REQUIRE it, though, just like you do it on desktop platforms
  
Version 7.1     (10-Feb-18)

- Change: Updated Hollywood documentation
- Change: Updated catalog descriptions and German translation; added new developer files for doing
  new translations
- Change: Updated the Hollywood GUI (Amiga) and IDE (Windows)
- Fix: When setting the "Desktop" tag to TRUE in @DISPLAY, Hollywood only enforced always on top
  behaviour on Windows systems (reported by Petteri Valli)
- New: UseCarriageReturn() allows you to control whether or not WriteLine() will add a carriage
  return before the linefeed; on Windows this defaults to TRUE, whereas on all other systems it
  defaults to FALSE
- New: Added "EnableDebug" tag to the @OPTIONS preprocessor command; this tag can be used to turn
  debugging support on or off; if debugging support is turned off, functions like DebugPrint()
  or DebugOutput() will do nothing; when running scripts in Hollywood, debugging support is
  enabled by default; when compiling executables debugging support is turned off by default
- New: Added ValidateDate() which can be used to check if a given date is valid
- New: Added DateToUTC() and UTCToDate() functions to convert between local time dates and UTC
  dates; note that on AmigaOS-based systems this currently doesn't support daylight saving time
  because the OS doesn't provide this information so the results will be off by the daylight
  saving time bias when daylight saving time is active
- Change: ExitOnError() can now be used when RaiseOnError() is active too; the two are no longer
  mutually exclusive; you might want to use the new ?-syntax though (see below)
- Fix [Amiga]: When the optional argument was set to TRUE in GetTimestamp(), the timestamp that
  was returned wasn't adjusted for UTC like on the other platforms
- New: Collision() supports the new type #SPRITE_VS_BRUSH now (requested by Erlend Sakshaug)
- Fix: GetDate() and GetDateNum(#DATEYEAR) didn't return the correct year if the system date's
  year was set to a date earlier than the year 2000
- New: Added ParseDate() and MakeDate(); the former can be used to decompose a Hollywood date
  into its constituents and the latter can be used to compose a Hollywood date from a set of
  individual constituents
- New: Added TimestampToDate() and DateToTimestamp() to convert between timestamps and dates
  (requested by Achim Kern)
- Fix [Amiga/Linux/Android]: CompareStr() always returned 0 in case one of the strings was a
  substring starting at offset 0 in the other string (reported by Piotr Chmielewski)
- Fix [Android]: Added workaround for a bug in Android 8.0 which made it impossible for Hollywood
  to get the new orientation after an orientation change
- New [SDK]: Added HWCLAXXXFLAGS_MUSTREQUIRE for SysBase.ConfigureLoaderAdapter(); if this flag
  is set, the loader or adapter will only be available if @REQUIRE has been called on it; this
  can be useful if your RequirePlugin() function does some important initialization which you
  don't want to do in InitPlugin() for whatever reason; Hollywood will then make sure to only
  call your loader or adapter if it has been properly @REQUIRE'd
- New [SDK]: Added GfxBase.RawPolyFill() which can be used to draw a filled polygon to an
  arbitrary memory buffer
- New: Added syntactic sugar for greatly simplifying the way of dealing with errors generated
  by Hollywood or plugin functions; you can now prefix the function by a question mark; this
  prefix means that the function will be "asked" to return an error code in its first return
  value; this greatly simplifies extraction of an error code from a single function call;
  previously, you had to first call ExitOnError(False), then do the function call, then call
  GetLastError(), and then call ExitOnError(True) again; with the new syntax you can do all
  that in just a single line; note that if the function prefixed by a question mark returns
  values, those return values will be shifted down because the first return value will always
  be the error code
- New [SDK]: Added support for HWSATEVT_RAWKEY and HWEVT_RAWKEY; those two can be used to post
  raw key events to Hollywood's event queue
- New: IsKeyDown() and WaitKeyDown() support an additional argument now which can be used to
  force them to use raw keys instead of normal keys
- New: Introducing raw key support! This finally allows you to listen to combinations of normal
  keys and modifier keys like SHIFT, ALT, CTRL, and CMD; to get notified about raw key events,
  install the new event handlers "OnRawKeyDown" and "OnRawKeyUp"; the "Key" field of the event
  message will contain either a character in the range from A-Z (always upper case), 0-9,
  NP0-NP9, NPDEC, NPADD, NPSUB, NPMUL, NPDIV (NP = numpad), one of the Hollywood key definitions
  like UP, DOWN, RIGHT, etc. or modifier keys like LSHIFT, RSHIFT, LCONTROL, etc.; note that
  in contrast to "OnKeyDown" and "OnKeyUp", "OnRawKeyDown" and "OnRawKeyUp" will also trigger
  when a modifier key is pressed or released on its own; also note that for the space key you
  will get a key named "SPACE" instead of " " and for the return and enter keys the key that
  is generated will be "RETURN" or "ENTER" instead of a linefeed as it is the case with the
  "OnKeyDown" and "OnKeyUp" events; finally, the message that is sent to your event callback
  will also contain a field named "Modifiers" which contains a bitmask of the modifiers which
  were down at the time the key was pressed; this is just for your convenience; of course you
  can also call IsKeyDown() to check which modifiers are down (requested by Piotr Chmielewski
  and Erlend Sakshaug)
- Fix [MacOS]: Hollywood didn't distinguish between right and left shift, alt, control, and
  command keys; instead, it always reported the left modifier key even if the right one had been
  pressed
- New: NOCHDIR is now also available as a script option inside the @OPTIONS preprocessor command
- Fix [Amiga]: Text drawn through bullet.library wasn't always aligned correctly to the baseline;
  note that this only affected the original bullet.library, not the OS4/MorphOS/AROS font
  engines transplanted on top of the bullet.library interface (reported by Michael Rupp)
- Fix: GetPlugins() didn't handle ISO 8859-1 characters correctly in case a plugin returned such
  characters in the InitPlugin() return strings
- Fix [GUI/IDE]: Plugin information which was stored as ISO 8859-1 in the strings returned by
  InitPlugin() wasn't shown correctly in the GUI and the IDE
- Fix [GUI/Amiga]: Starting a second instance of the GUI when one was already running didn't work
- Fix: All of the MoveXXX() commands often applied horizontal or vertical adjustments when the
  move was diagonal and not straight; the implementation has been improved to use a line-based
  algorithm for diagonal moves now (reported by Michael Rupp)
- Fix [OS4/GUI]: Fixed plugin loader to be compatible with dos.library v54.40 and up; this was
  necessary because of a compatibility break in OS4 DOS (reported by Javier de las Rivas)
- New [SDK]: Added CRTBase.getstdin(), CRTBase.getstdout(), CRTBase.getstderr(), CRTBase.fputs(),
  CRTBase.fgets(), and CRTBase.geterrnoptr()
- Fix [MorphOS]: Hollywood crashed when trying to open a window with alpha transparency on a
  16-bit screen; it now exits cleanly and reports an error (reported by Petteri Valli)
- New: EmptyStr() returns TRUE if a string contains only whitespace characters
- New: StripStr() removes whitespace characters (space, tab, carriage return, line feed...) from
  both ends of a string
- Change: ReadChr() and ReadString() automatically skip the UTF-8 BOM now whenever they operate
  in Unicode mode (suggested by Erlend Sakshaug)
- New [SDK]: Added LocaleBase with three useful functions to obtain information about the current
  locale settings: GetSystemLanguage(), GetSystemCountry(), and GetTimeZone(); these are exact
  counterparts of the respective Hollywood functions 
- New [SDK]: Added SysBase.TmpNamNew(); this is the third of the temporary filename generation
  functions but it was necessary because the other two didn't accept a buffer size and didn't
  indicate whether the generation of a temporary filename succeeded; all these flaws are remedied
  by this third and hopefully last incarnation of hw_TmpNam()
- Fix: Fixed some potential buffer overflow errors
- Fix: Sometimes there were refresh problems when drawing non-formatted text to a double buffer
  (reported by Lazar Zoltan) 
- Fix: When setting the optional argument to FALSE, CopyTable() didn't work; nobody probably
  ever did that, though, because FALSE is also the default
- Fix: CopyTable() could easily cause a stack overflow when using more than 3 nested subtables
  (reported by Fabio Falcucci)
- New: GetDate() accepts a new #DATEUTC constant now; if this is specified, GetDate() will return
  the current UTC time; note that on AmigaOS 3, MorphOS, WarpOS, and AROS this currently doesn't
  support daylight saving time because the OS doesn't provide this information 
- Change: GetDate() accepts #DATELOCAL and #DATELOCALNATIVE now instead of a boolean value; the
  new constants reflect the old boolean value so GetDate() remains completely compatible
- New: Added GetTimeZone() command; the first return value describes the number of minutes from
  UTC and the second return value indicates whether daylight saving time is currently active;
  note that this isn't completely reliable on AmigaOS 3, MorphOS, WarpOS, and AROS  
- New [SDK]: Added CRTBase.strerror() to get a string describing an error number
- Fix: Potential memory access fault when linking files managed by a file adapter plugin which
  used the container link mode (e.g. the zip.hwp plugin does that)
- New [SDK]: Added SysBase.GetSystemPath() which can be used to obtain a path to a standard
  directory in the system from Hollywood in a platform-independent manner
- New: GetSystemInfo() returns an additional table argument named "TempFiles" now; this will be
  set to a path where you can store temporary files
- New [SDK]: Added HWMCP_GETLUASTATE; this allows you to obtain a pointer to the Lua state via a
  call to SysBase.MasterControl()
- Fix [Doc]: The range parameter in the Rnd() function was documented as being exclusive whereas
  it is inclusive in reality
- New [SDK]: Added SysBase.StrongRandom() which is a wrapper for the new RndStrong() function
- New: Added RndStrong() function which can be used to generate cryptographically secure pseudo
  random numbers; numbers returned by RndStrong() are much more random than Rnd() and RndF()
  and you can use it for encrypting data using AES or similar algorithms; note that RndStrong()
  is very slow; if you need to call it lots of times, it is much faster to first generate a
  bunch of random numbers in a string and then access those numbers from the string; also note
  that on AmigaOS 3.x and AROS RndStrong() just falls back to Rnd() so it isn't cryptography
  proof on this platform 
- Fix: Box() with a partly transparent foreground colour wasn't mixed correctly when drawn to an
  offscreen brush with #SELMODE_COMBO and combo mode 2 (reported by Fabio Falcucci)
- Fix [OS3/SDK]: CRTBase.stat() didn't set errno to ENOENT in case the file/directory could not be
  found; this led to trouble with libs explicitly checking for ENOENT
- New: SETCONSTANTS also allows you to define string constants now; just enclose the string between
  two square brackets [...]; if you need to include square brackets themselves, escape them by
  duplicating them, i.e. use [[ and ]] (requested by Samuel Crow)
- Fix: SETCONSTANTS didn't work when running scripts, only when compiling them
- New: GetSystemInfo() returns an additional table item named "Preferences" now; this will be set
  to the path Hollywood uses for storing user preferences
- Fix [IDE]: Plugin settings no longer expects settings program or file to be in a sub-directory
  named "PluginSettings" but simply uses the path returned by the plugin  
- Fix [SDK]: DOSBase.FStat() didn't return the correct file size for file-based virtual files
- New [SDK]: DOSBase.MakeVirtualFile() can be used to create a virtual file specification from a
  number of input parameters; this is the counterpart to DOSBase.TranslateFileName()
- Fix: LoadBGPic()'s undocumented palette mapper which is only there for exclusive use by Malibu
  could sometimes use wrong colors
- Fix: Transparency wasn't handled correctly for monochrome IFF ILBM images in which pen 1 was the
  transparent color and pen 0 was the jam color in internal Malibu mode (reported by Michael Rupp)
- Fix: Crash when displaying the same BGPic twice while layerscale was active
- Fix: #VFLIPCOIN, #VLOWFLIPCOIN, #HFLIPCOIN, #HLOWFLIPCOIN, #SLIDELEFT, #SLIDETOP, #SLIDEBOTTOM,
  #SLIDERIGHT, and #ZOOMIN didn't draw correctly when recording videos
- Fix: When using DisplayTransitionFX() with layers enabled the layers of the BGPic to be shown
  were always drawn on top of the effect when using the video recorder (reported by Michael Rupp)
- Change [Examples]: The MenuDemo example also demonstrates radio menu items now
- New: CreateMenu() and @MENU support the creation of radio menu items now; to create a radio menu
  item, just set the new #MENUITEM_RADIO flag; all neighbouring items which have that flag set will
  then be combined into a radio group whose items are mutually exclusive (requested by Lazar Zoltan)
- Change: StringRequest() had a limit of 1024 characters; on AmigaOS and compatibles Hollywood still
  imposes this limit but on all other platforms it has been removed (requested by Paul Bloedel)
- Fix: Adding or subtracting values from #LEFT, #RIGHT, or #CENTER and passing this value as the x
  coordinate to TextOut() didn't always work (reported by Piotr Chmielewski)
- Fix [Android]: When forcing a certain orientation using the "Orientation" tag in the @DISPLAY
  preprocessor command, the "Powered by Hollywood" logo didn't enforce this orientation but used
  the device's orientation (reported by Tapio Koivuniemi)
- Fix: CreateGradientBGPic() didn't work with types #RADIAL and #CONICAL; this bug was introduced in
  Hollywood 5.3; it worked before that (reported by Radoslaw Czernik)
- New [SDK]: Added display adapter example to the SDK distribution; this is actually a cut-down
  version of RebelSDL which shows the minimal code required for a display adapter; there is lots of
  room for optimizations but they have been deliberately left out in order to make the code as easy
  to understand as possible
- New [SDK]: Added HWDISPFLAGS_ALWAYSONTOP which is passed if the "AlwaysOnTop" flag has been set for
  a display
- New: Added "AlwaysOnTop" tag to @DISPLAY and CreateDisplay(); if this is set to TRUE, the respective
  display will always stay above all other windows on the desktop; the new tag is also available as
  a command line argument; always-on-top windows are currently only supported on MorphOS, AmigaOS 4,
  Linux, Mac OS X, and Windows (requested by Thomas Scheller)
- New: LayerToFront() and LayerToBack() accept an optional argument now; if this is set to FALSE, the
  layer isn't brought to front or back by swapping layers but by simply moving the specified layer
  to the front or the back; this is a much more logical behaviour but by default LayerToFront() and
  LayerToBack() will use the old behaviour for compatibility reasons (reported by Samuli Holopainen)
- New [SDK]: Added GfxBase.FindBrush(); this can be used to find a handle to a hardware brush allocated
  by the plugin; usage is identical to GfxBase.FindDisplay()
- New [IDE]: Added syntax highlighting and online help for methods installed by the new method APIs;
  this is used in Polybios for example and allows you to get direct help for all of Polybios' APIs
- New [SDK]: If the base table name returned by GetBaseTable() ends with a colon (:), all functions in
  the table returned by GetCommands() will be treated as methods; Hollywood will create a metatable
  in the form of "modulename.hwp.basetable" and set all functions as members of that metatable; the
  metatable's __index metamethod will also be set to the metatable itself so that you can simply set
  the metatable to your desired object and calling methods in it will work
- New: Added MoveFile() function to move files and directories; the file or directory passed as the new
  location in the second argument must not exist and the source file or directory must not be a volume
  root directory; if the file or directory is moved on the same volume, the operation will be really
  quick; when moving files or directories across volumes, the files are copied and then deleted; an
  optional callback allows you to monitor the progress of this operation; when moving around files or
  directories on the same volume, the callback won't be called since such an operation takes almost no
  time (requested by Juan Carlos Herran Martin)
- Fix [Amiga]: Using ".." or "." at the end of a path didn't work, e.g. it wasn't possible to use
  DirectoryItems() with a ".." path
- Fix: When passing a non-existing directory to DirectoryItems(), the error message didn't contain the
  right directory
- New: Hollywood's platform-independent catalog format now supports comments and the individual catalog
  entries can be spread over multiple lines by ending a line with a backslash; empty lines are also
  ignored now; to add a comment, start a line with a semicolon; if a catalog entry starts with a
  semicolon, then you need to escape it by using backslash plus semicolon; if semicolons occur at other
  positions in a catalog entry, they don't have to be escaped since comments must always start at the
  beginning of a line; all these changes allow you to create catalog files which are much better
  readable than the ones in the old format with strictly one entry per line; note that these changes
  might break compatibility with older catalogs so make sure to adapt them 
- Fix [Android]: When using FULLSCREENSCALE display mode and rotating the device, Hollywood didn't
  automatically scale the display to the new resolution
- Fix [Doc]: ConvertToBrush() didn't mention that Nil could be passed as the identifier for the new
  brush to use automatic id selection (reported by Lazar Zoltan)
- New: GetLanguageInfo() can be used to get additional information about a specific language
- New: GetCountryInfo() can be used to get additional information about a specific country
- New: GetSystemLanguage() supports almost all languages of the world now; lots of new language
  constants have been added  
- New: GetSystemCountry() supports almost all countries of the world now; lots of new country
  constants have been added
- Fix: When using TextOut() with left alignment and Hollywood deemed the text appropriate for its
  internal fast draw optimization, the AnchorX and AnchorY values weren't applied to the positioning
  (reported by Xabier Payet)
- New [SDK]: struct PathStyle contains an additional member named "MiterLimit" now which contains the
  user's current miter limit
- New: SetMiterLimit() and GetMiterLimit() allow you to set/get the miter limit for the vectorgraphics
  library; the default miter limit is 10
- Fix: Inbuilt vectorgraphics engine used a very high miter limit which led to very long line joins
  in case two lines met at a sharp angle; it now uses a miter limit of 10 which is the same as the
  external vectorgraphics plugin (reported by Lazar Zoltan)
- Fix: Crash when calling DrawPath() on an empty path while using the inbuilt vectorgraphics engine
  (reported by Lazar Zoltan)
- Fix: When using a statement which marks the end of a block like Next, Wend, EndIf, etc. without first
  having opened the corresponding block, the line number in the error message was inaccurate when the
  closing statement was not in the main script scope 
- Fix: Using a statement which marks the end of a block like Next, Wend, EndIf, etc. at the end of a
  Hollywood script included using @INCLUDE didn't trigger an error
- New: Added StartsWith() and EndsWith() commands to the string library; they're just for convenience;
  the same can be achieved with LeftStr() and RightStr() but StartsWith() and EndsWith() don't need
  you to know the string length and also can do a case insensitive comparison
- New [SDK]: Added DOSBase.AddDeleteFile(); this command allows you to add a file to be deleted by
  Hollywood immediately before it exits
- New [SDK]: Added HWEXT_LIBRARY_UPVALUES extension; this extension allows library plugins to use Lua
  upvalues; you have to implement the function PushUpvalues() in your plugin which pushes the upvalues
  required by your plugin functions and returns the number of upvalues pushed
- New: GetMemString() converts a memory block range into a string; note that Hollywood strings can
  also contain binary data so the string returned will really contain all data from the memory block;
  note that Peek() can also convert memory blocks into strings but GetMemString() is faster for
  larger blocks
- New: ByteAsc() and ByteChr() can be used to get single bytes from strings or convert a single byte
  into a string without any Unicode conversion; this is just a shortcut for calling Asc() and Chr()
  with #ENCODING_RAW
- New [IDE]: Added online help for all control structure functionality like If, For, While, Break,
  Return, Continue, Function, etc. (requested by Piotr Chmielewski)
- Fix: When saving transparent GIF images or animations from an image or animation source loaded
  with transparency, Hollywood didn't apply the transparency setting correctly and only made parts
  of the image/animation transparent (reported by Petteri Valli)
- Fix [GUI/Amiga]: DebugPrint() output is now visible when running Hollywood scripts from the GUI
  (reported by Pierre Giroux)
- Fix: Using a backslash to span a string across multiple lines didn't work when a carriage return
  instead of a newline character followed the backslash (reported by Piotr Chmielewski)
- Fix [Win32/Cocoa/iOS]: When playing a non-layered video with layerscaling enabled the video wasn't
  correctly resized to the new dimensions when changing the display's size (reported by Torgeir Vee)
- New [Amiga]: Added HideScreen() command which sends a screen to the back of the display; the
  optional argument is the name of a pubscreen; if omitted, the front-most screen is sent to the
  back which is typically what you want (requested by Petteri Valli)
- New: Added several functions to get information about the current style settings: GetFontStyle(),
  GetFontColor(), GetFillStyle(), GetFormStyle(), GetLineWidth(), GetLineJoin(), GetLineCap(),
  GetFillRule() and GetDash() (requested by Fabio Falcucci)
- Fix: Linking plugins could fail at random because of a memory buffer being one byte too small
  (reported by Juan Carlos Herran Martin)
- New [IDE]: "Open file under cursor" and the context menu as well as the lister in the "Files"
  tab recognize text files now; in case a text file is detected, it is opened directly in the
  IDE instead of in an external editor now
- New [IDE]: The file browser contains a new tab named "Files" now; all external files declared
  using the @FILE preprocessor command will be listed in this tab now
- New [IDE]: The IDE can open and save non-Hollywood scripts now too, e.g. *.txt or *.xml files;
  when opening a file that doesn't use the *.hws file extension, syntax highlighting, function
  and preprocessor command scanning, auto indenting and auto spelling correction and the
  display configurator will be disabled automatically 
- Fix: @INCLUDE didn't handle the UTF-8 BOM correctly (reported by Achim Kern and Tom C.)
- Fix [IDE]: Loading and saving empty files didn't work (reported by Samuli Holopainen)
- Fix: Loading very old *.ttf files which didn't contain a native Unicode cmap wasn't possible
  (reported by Lazar Zoltan)
- Fix: Passing a *.ttf file using an absolute path to OpenFont() or SetFont() will no longer
  result in Hollywood trying to access invalid paths in case OpenFont() or SetFont() can't
  handle the file (reported by Lazar Zoltan)
- New: SplitStr() accepts an optional argument now that, if set to TRUE, will treat multiple
  occurrences of the token as just a single occurrence; useful for stripping an arbitrary number
  of whitespace between words for example
- New [SDK]: HWMCP_GETEXITONERROR allows you to get the state of Hollywood's ExitOnError() flag
- Fix: NewIcons couldn't be used as icons for executables compiled by Hollywood because the icon
  pixels stored in the tooltypes confused Hollywood (reported by Artur Ostrowski)
- New: ValidateStr() returns a second value now that returns the number of characters in the
  string, or, in case of an error, the offset of the first invalid character
- Fix [Win32]: PlayVideo() crashed when using a display adapter with no autoscaling being active
  (this affected for example the RapaGUI video player example)
- Fix [Doc]: ReadString() documentation didn't mention that the length argument was optional
- New [GUI]: File requester filter also includes ".hwa" extension now; this is especially useful
  on Mac OS where it was previously impossible to run Hollywood applets using the GUI because
  the file requester filter didn't include it and there was no "all files" mode
- Fix [MacOS]: GUI didn't show thumbnails on Mac OS 10.6
- Fix [MacOS]: Hollywood didn't work on 32-bit Mac OS Snow Leopard (10.6); the 64-bit version
  ran fine on 10.6 though
- Fix [Amiga]: Wait task wasn't shut down correctly in the rare case that Hollywood was shut down
  right after the wait task was set up
- Fix: When saving a GIF ANIM whose frames didn't have to be quantized because they fit into
  desired number of colors, the transparency pen wasn't set correctly (reported by Petteri Valli)
- Fix: Opening IFF ANIMs using "FromDisk=True" and forcing the anim reader to skip frames by
  using non-sequential frame access messed up internal delay values (reported by Petteri Valli) 
- Fix: ModifyAnimFrames() didn't adapt the internal delay table which could lead to memory faults
  when trying to modify or query delay values of newly added frames (reported by Petteri Valli)
- Fix: Memory freed twice when a URL passed to DownloadFile() redirected to a URL that used an
  unsupported protocol like HTTPS (reported by Petteri Valli)
- New [Android]: Added 64-bit support for Android; the internal architecture name for the 64-bit
  architecture on Android is arm64-android-v8a; this is also the name you will have to use when
  linking plugins using the Hollywood APK Compiler
- Fix: CloseCatalog() didn't reset internal states which led to Hollywood trying to close the
  catalog again on exit, typically resulting in a memory access fault (reported by Lazar Zoltan)
- Fix: Wrong window refresh when changing the size of a display that used a double buffer but
  not the auto scaling engine (reported by Lazar Zoltan)
- Fix: "SizeWindow" events could get lost when using multiple windows and the size events came
  in at about the same time (reported by Lazar Zoltan)

Version 7.0     (11-Mar-17)

- Change: Updated Hollywood documentation
- Change: Updated catalog descriptions and German translation; added new developer files for doing
  new translations
- Change: Updated the Hollywood GUI (Amiga) and IDE (Windows)
- New: Amiga installer validates the keyfile now
- New: Modernized the installer on Windows; it now uses a wizard-based interface and also makes
  sure the keyfile is installed properly
- Fix [GUI/MacOS]: GUI no longer crashes if no keyfile could be found but shows an error message
- Fix [Linux/PPC]: Reducing volume of a Protracker module or a video stream didn't work correctly
  because of a big endian issue
- Fix: GIF anim saver got broken by a fix implemented in Hollywood 6.0 (reported by Petteri Valli)
- Fix [Amiga]: Wrong bitmap alignment in USEWPA mode (used by default on WinUAE and AROS); this
  could lead to drawing issues when using clip regions or monochrome masks
- New: Added Eternity, UnicodeDemo and VectorTest3 examples
- Fix [IDE]: Syntax highlighting wasn't correctly adapted when ending a multi-line comment inside
  a string, i.e. using */ inside a "..." sequence
- Fix [IDE]: Single space characters could get lost under rare conditions
- New [IDE]: Added syntax highlighting for long strings using the [[ ... ]] syntax; everything
  inside the long string is ignored like a comment; this new feature also solves problems with the
  test scripts of the XML parser plugin in which the IDE adapted the spelling of long strings which
  consequently broke the script (reported by Michael Suther)
- New: Added DirectoryItems() function; this function can be used as an iterator function of the
  generic for loop to conveniently traverse all files and sub-directories inside a directory; this
  is also possible using OpenDirectory(), NextDirectoryEntry() and CloseDirectory() but the new
  DirectoryItems() function simplies this process
- Fix: FileLines() leaked its file handle in case the general for loop was interrupted by a "Break"
  or a function throwing an error
- Fix [Doc]: DumpLayers() wasn't documented although it has been there since Hollywood 2.0
- New: PathToBrush() allows you to convert one (or more) path object(s) into a vector brush; the
  individual paths can be given different colors and drawing styles which is quite a powerful
  feature to create multi-coloured paths by combining them in a vector brush; alternatively,
  ConvertToBrush() also supports a #VECTORPATH source now; usage is similar to the new PathToBrush()
  command (requested by Lazar Zoltan)
- New: PathItems() returns an iterator function which you can use together with a generic for loop
  to iterate over all items in a path object (requested by Lazar Zoltan)
- Change [Doc]: Updated screenshots in documentation
- Fix: Wrong text layout calculation when drawing a string that ended with a bunch of white-space
  characters and a table that did not contain the "Align" field was passed to TextOut() or
  CreateTextObject() (reported by Piotr Chmielewski)
- Fix [Doc]: #DEFAULT_BITMAP and #DEFAULT_TRUETYPE weren't documented (reported by Piotr Chmielewski)
- Fix [GUI/MacOS]: Debug output window now allows horizontal scrolling if line width exceeds the
  list view's width
- Change [Android]: For consistency reasons, plugins should now be in a "Plugins" instead of a
  "_Plugins" directory inside the "Hollywood" directory on the SD card; the old "_Plugins" directory
  is still supported for reasons of compatibility, but the "Plugins" directory is given precedence
- Change [Win32/Linux/MacOS]: Plugins for the Hollywood Interpreter need to be placed inside a
  "Plugins" directory that is in the same directory as Hollywood's main executable now; for compiled
  scripts nothing has changed and plugins still can be placed next to the compiled executable;
  note that on Mac OS, the "Plugins" directory must be inside the "Resources" directory of the
  HollywoodInterpreter.app application bundle; also the "LinkerPlugins" directory must be inside
  the "Resources" directory on Mac OS
- Change [MacOS]: Hollywood.key and Hollywood.sys need to be placed inside the "Resources" directory
  of the HollywoodInterpreter.app application bundle now; note that in the standard Hollywood
  distribution HollywoodInterpreter.app is stored inside the "Resources" directory of the
  Hollywood.app application bundle; also "Catalogs" must be inside the "Resources" directory now
- Fix [Win32]: Pressing F10 or L-ALT to open a window's menu bar didn't work
- New [Win32/MacOS Cocoa]: When a display is resized, Hollywood will now use live resizing, i.e.
  the display's contents will be scaled while the user is resizing the window; you can disable
  this behaviour by passing the new NOLIVERESIZE console argument or by using the new "NoLiveResize"
  tag for @DISPLAY and CreateDisplay()
- New [Win32]: Windows renderer has been completely rewritten; the autoscaling engine uses GPU-
  accelerated scaling now which yields a huge performance boost; non-scaled drawing may also use
  the GPU now depending on the video driver's capabilities; all in all the renderer integrates much
  better with Windows now; before v7.0, the renderer on Windows was rather unorthodox
- New: Added NATIVEUNITS console argument and tag for @DISPLAY and CreateDisplay(); if this tag is
  set, Hollywood will use the host system's native coordinate space and units instead of pixels;
  this currently only has an effect on Mac OS and iOS because both operating systems use custom
  units instead of pixels when running on a Retina device; by default, Hollywood will enforce the
  use of pixels on Retina Macs and iOS devices for cross-platform compatibility reasons but you
  may want to override this setting by using the new NATIVEUNITS console argument
- New [MacOS]: Added support for Retina screens; note that in contrast to Mac OS, Hollywood will
  still operate in pixels even on Retina Macs; see above for a way to override this behaviour
- New: Added NOSCALEENGINE console argument and tag for @DISPLAY and CreateDisplay(); this tag is
  only handled if you use the new FULLSCREENSCALE display mode; if FULLSCREENSCALE is active and
  NOSCALEENGINE is set to TRUE, Hollywood will not use any scaling engine but will simply open
  your display in the same dimensions as the monitor resolution and your script can handle the
  scaling
- New: Added WINWIDTH and WINHEIGHT console arguments; these allow you to set the initial size of
  the display without activating one of the scaling engines; if you specify these, your display
  will receive a "SizeWindow" event right after Hollywood was started
- New [GUI/IDE]: Added "Plugins help" menu which allows you to view the manuals of plugins from
  the GUI
- New [GUI]: Amiga/Linux/MacOS GUI supports "Full screen (scaled)" mode now; also, when selecting
  a full screen view mode, the sizeable and scaling options are now disabled; they are only 
  available for windowed mode
- New [MacOS]: Autoscaling engine uses GPU-accelerated scaling now on all Macs running at least 10.6
- New: When using one of the ICONXXX arguments to link icons and compiling for Mac OS X, Hollywood
  will automatically include a default icon for all sizes that you didn't provide icons for
  (this currently affects icon sizes 16, 32, 64, 128, 256, 512, and 1024)
- New: Added ICON1024X1024 argument and its respective counterpart in the @APPICON preprocessor
  command; this allows you to link a 1024x1024 icon to your executable; 1024x1024 icons are currently
  only used on Retina Macs  
- Change: When compiling for Mac OS X, Hollywood no longer needs a JPEG2000 plugin to link icons
  in the sizes of 256 and 512 pixels; this is possible because starting with Mac OS 10.6, high
  resolution icons can also be in PNG format; if a JPEG2000 plugin is available, Hollywood will
  still save icons in JPEG2000 format for compatibility reasons, though
- Fix [Android]: Fixed "Detected problems with app native libraries, text relocations" error message
- New: #ATTRXDPI and #ATTRYDPI are now also supported on non-mobile platforms
- Change [Amiga]: Hollywood will now use real screen-based backfills instead of window-based ones
  when in full screen mode; this should solve all problems with backfills in full screen mode
  (reported by Tony Canazza)
- Fix: #ATTRMONITOR didn't return the correct monitor when the display was manually moved to
  another monitor (reported by Torgeir Vee)
- New: RotateBrush(), TransformBrush() as well as all other functions that rotate images now use
  dedicated code to handle the special cases of a rotation by 90, 180, 270, and 360 degrees to
  transform the image data; this is much faster and the transformation is also done in a lossless
  way (requested by Tony Canazza)
- New [IDE]: Added support for some new display features: "FitScale" and "DisableBlanker" tags
  are supported now; also, "FullScreenScale" is supported now; support for the deprecated mode
  "OwnScreen" has been removed
- Change [IDE]: The Windows IDE no longer uses the deprecated @SCREEN preprocessor command;
  instead, the display mode is now stored in the @DISPLAY preprocessor command as recommended
  since Hollywood 6.0
- New: #ATTRHOSTSCALEX and #ATTRHOSTSCALEY are now supported for GetAttribute() and #DISPLAY;
  they return the scaling coefficient currently in use in the display's monitor; normally,
  both coefficients will be 1 but they can be higher in case the user is running a very high
  resolution
- Change: FileLength() no longer does any seeking which speeds it up dramatically
- Fix: Eof() didn't work correctly with files opened in either #MODE_WRITE or #MODE_READWRITE
  (reported by Paul Bloedel)
- New: Added EXPORTHELPSTRINGS console argument; if this argument is used together with the
  EXPORTPLUGINS argument, Hollywood will write three lines for every command in the export
  file; the first line will be the command's name, the second line will be its help text and
  the third line will be the command's help node; note that both the second and the third
  line can be empty if the plugin doesn't export a help string or a help node for the
  command 
- New [IDE]: The IDE now also highlights commands and constants made available by plugins;
  if supported by the plugin, it will also show short help for plugin commands in the
  status bar and pressing F1 will open the respective page in the manual; note that plugin
  manuals in the *.chm format need to be copied to a directory named "PluginHelp" inside
  the Hollywood installation directory
- New [SDK]: Library plugins support the extension HWEXT_LIBRARY_HELPSTRINGS now; if a
  plugin supports this extension bit, it needs to implement a function named GetHelpStrings()
  which returns a table containing a help string and a node in the plugin's help file
  for each command; the table needs to have exactly the same number of items as the table
  returned by GetCommands() in exactly the same order; both help string and node can be
  NULL for commands that don't support it; if the node is NULL, Hollywood will assume the
  name of the command (minus any dots) as the default node
- Change [IDE]: Dragging docking windows on Vista and up is no longer flickery because a
  new Vista-compliant drawing mechanism is used now; on XP we still use the old mechanism
  for performance reasons
- New [IDE]: The Hollywood IDE on Windows is now DPI aware; this means that it will look
  perfectly crisp even on 4K Ultra HD screens; it will no longer uses DPI virtualization
  but will automatically adapt to all modes that are higher than 96dpi; in order to draw
  the thumbnails perfectly crisp in higher resolutions, the IDE now also supports @2x
  thumbnail images; those @2x images should be in 320x240, e.g. twice as a big as the
  default of 160x120 (requested by Tom C.)  
- New [Win32]: Hollywood is now DPI aware; this means that Windows will no longer use DPI
  virtualization when running Hollywood on resolutions with a DPI higher than 96 (thanks
  to Tom C. for the hint)
- Fix: StringRequest(), ListRequest(), ColorRequest(), and PathRequest() didn't reset the
  key states which could lead to keyboard events still being triggered after those requesters
  were closed (reported by Piotr Chmielewski)
- New: OpenFont(), SetFont(), and @FONT support a new tag named "UsePoints" now; if this
  is set to TRUE, the font size will be interpreted as a point size instead of a pixel
  size; note that point sizes are DPI-dependent and these can differ between platforms
  (e.g. Mac OS X uses 72dpi whereas Windows uses 96dpi by default, and on high resolution
  monitors the DPI are even higher); since everything else in Hollywood is pixel-based,
  using DPI alongside pixels means that fonts will appear larger on higher DPI displays;
  thus, normally you don't want to use "UsePoints" unless you also adapt your pixel
  graphics to the monitor's current DPI setting; "UsePoints" was mainly included as a way
  to bypass all the code that Hollywood uses to achieve near identical font rendering
  on all platforms; it can be used to quickly open a font in the specified point size
  without Hollywood having to run its pixel-matching font height algorithms first
- Fix: BGPics with rotated gradients or multiple color stops didn't work; this bug was
  introduced in Hollywood 6.1; it worked before (reported by Fabio Falcucci)
- New: Added FallThrough statement to the VM; this statement can be used within the scope
  of a Switch-EndSwitch statement to fall through to the next Case statement in line or
  to the Default statement
- Fix: #RIGHT and #CENTER alignment styles didn't work correctly with lines in which the
  line width was smaller than the word to be right-aligned or centered
- New: Added #JUSTIFIED alignment for TextOut() and CreateTextObject(); this will lay out
  your text in justified lines by inserting padding space between the individual words
- Fix: The logical OR operator in numeric constants evaluated by the preprocessor didn't
  work correctly if the left operand was false and the right operand was true; the Eval()
  command was also affected by this bug; the runtime logical OR operator wasn't affected
- New: You can now also specify IOS and ANDROID in the EXETYPE argument; this will just
  compile Hollywood applets which you can then convert into real apps by using the
  Hollywood APK Compiler or REMEDiOS; the advantage of using IOS or ANDROID instead
  of just APPLET is that if you use IOS or ANDROID, Hollywood will set the platform-
  specific constants #HW_IOS and #HW_ANDROID for the applet that is compiled
- New: Added SETCONSTANTS console argument; this argument allows you to define one or
  more constant(s) from the command line; multiple constants have to be separated by
  vertical bars (|); to assign a value to the constant use the "=" character; if that
  is omitted, the constant will be defined as 1; this argument is especially useful for
  doing conditional compiles with the new @IF preprocessor command
- New: Added #HW_VERSION and #HW_REVISION constants; these will contain the current
  Hollywood version; note that using #HW_VERSION and #HW_REVISION is only recommended
  for the @IF preprocessor commands or when compiling executables; do not use these
  constants when compiling applets because in that case, the constants' values will
  be written to the applet and you won't be able to detect Hollywood Player versions;
  for a safe way to detect the Hollywood version at runtime, use GetVersion()   
- New: Added a set of platform-specific constants; the following constants are only
  available if Hollywood is either running on or compiling for the respective platform:
  #HW_ANDROID, #HW_AMIGA, #HW_AMIGAOS3, #HW_AMIGAOS4, #HW_AROS, #HW_IOS, #HW_LINUX,
  #HW_MACOS, #HW_MORPHOS, #HW_WARPOS, #HW_WINDOWS, #HW_LITTLE_ENDIAN, #HW_64BIT; note
  that when compiling, only the constants for the target architecture are set, not the
  ones of build system, i.e. when compiling for AmigaOS 3 on Windows, only #HW_AMIGA
  and #HW_AMIGAOS3 will be set, #HW_WINDOWS and #HW_LITTLE_ENDIAN won't be set in this
  case; you can use the new @IF preprocessor commands to do conditional compiles with
  these constants; also note that when compiling applets, none of the constants will
  be set because applets are meant to be completely platform-agnostic  
- New: Added support for conditional compiling using the new preprocessor commands @IF,
  @ELSEIF, @ELSE, and @ENDIF; these preprocessor commands can be used to compile certain
  code only if the specified expression evaluates to TRUE; otherwise, the code will be
  completely ignored and isn't even checked for syntactical correctness; this is very
  useful when writing code for specific platforms only; by using the @IF preprocessor
  command you can make sure that the code isn't even compiled in on certain platforms;
  this is quite powerful because it operates at preprocessor level, i.e. you could also
  link different graphics for different platforms using the @IF preprocessor command etc;
  note that @IF and @ELSEIF won't complain when using non-existent constants; those
  simply evaluate to 0; this has been done to allow you to use Hollywood's new platform
  detection constants (see above)
- Fix: Potential memory fault in WriteInt() and WriteShort(); WriteTable() and SavePrefs()
  were also affected by this bug because they call WriteInt() and WriteShort() internally
- Fix: Cancelling the overwrite confirmation requester didn't work when compiling an applet
  and the destination file already existed
- New [iOS]: Hollywood's backend for iOS now sends "ShowWindow" and "HideWindow" messages
  when the app is iconified; note that this makes only sense when using REMEDiOS because
  the Hollywood Player for iOS cannot run in background; it will always quit when you
  press the home button   
- New [iOS]: ShowToast() is now also supported on iOS  
- New [iOS]: Added PerformSelector() function; when using REMEDiOS, this function allows
  your script to run a method implemented in native code; the method must be part of your
  app's delegate; it receives an NSMutableArray as its sole argument; index 1 contains the
  lua_State and index 2 contains a pointer to a hwPluginAPI structure, allowing you to
  access all public APIs and especially the Lua VM; indices 3 and 4 contain the UIViewController
  and UIView, respectively; upon return, you must set index 0 to an NSValue containing an
  int which specifies the return code of your function; keep in mind that your selector
  function will not be run on the main (UI) thread but on Hollywood's VM thread; so when
  accessing UIKit functionality you need to delegate this code to the main thread first   
- New [iOS]: Hollywood's iOS backend now runs the VM on a dedicated thread which leads to
  a better performance and flawless integration with UIKit's event loop   
- New [iOS]: Added support for iOS's native text renderer; this means that OpenFont(),
  SetFont() and @FONT can now also access iOS's system fonts; accessing system fonts is
  not possible with the platform-independent font renderer because all iOS apps run inside
  a sandbox which makes it impossible for the platform-independent renderer to access
  system fonts  
- New [iOS]: Added support for iOS's native video renderer; if you pass "Native" in @VIDEO's
  (or OpenVideo()'s) "Loader" tag Hollywood will try to load the video using the native
  video renderer on iOS; this also enables Hollywood to make use of hardware acceleration
  when decoding the video; iOS's native video renderer supports MP4 and QuickTime
- New [iOS]: Added full clipboard support; text and images can now be exchanged between apps
  via the clipboard; the "ClipboardChange" event handler is supported as well
- New [iOS]: OpenURL() is now supported on iOS too; it requires at least iOS 9.0; note that
  in contrast to other platforms, OpenURL() on iOS will block the script until the user
  has closed the browser
- Change [MacOS/iOS]: Changed audio buffering method when playing videos to avoid glitchy
  audio on iOS
- New [iOS]: Added plugin support; plugins need to be code signed and compiled as Cocoa Touch
  Frameworks; you also need to build them as fat binaries ("universal") so that they work on
  32-bit and 64-bit iOS devices
- New [iOS]: Network library is now supported on iOS too
- New [iOS]: GetSystemInfo() now returns correct paths for "MyDocuments", "AppData", and
  "AppBundle"; "MyDocuments" and "AppData" are actually the only paths where you are allowed
  to write to on iOS; use "MyDocuments" for files that should be visible to the user and
  "AppData" for private application data
- Fix [iOS]: GetTempFileName() didn't work correctly on iOS
- New [iOS]: "KeepScreenOn" is now supported on iOS as well
- New [iOS]: Added support for the "HideTitleBar" tag in @DISPLAY; just like on Android, if
  this is set, Hollywood will hide the iOS status bar
- New [iOS]: Added support for SystemRequest(), StringRequest() and ListRequest(); the other
  requester functions are still unsupported because iOS doesn't allow file and path access
  outside the application bundle
- New [iOS]: The autoscaling engine uses GPU acceleration now; this is very important because
  software scaling every frame to high resolution Retina displays would be a ridiculous waste
  of CPU cycles
- New [iOS]: Added support for Retina devices
- Change [Android]: Renamed "Auto scale" and "Layer scale" options in the Hollywood Player for
  Android as "Full screen (auto scale)" and "Full screen (layer scale)"; selecting such an
  option will automatically activate FITSCALE as well; the "Fit scale" option is thus no longer
  necessary and has been removed  
- New: All events posted by WaitEvent() or CheckEvent() now contain an additional field in their
  message named "Timestamp"; this contains the timestamp when the event was first received by
  Hollywood's event handler; you can compare this time stamp to the latest time stamp obtained
  through GetTimestamp() and filter old events (requested by Lazar Zoltan)
- New: Added GetTimestamp() function; this returns the number of seconds that have elapsed since
  Hollywood was started (or since the host system's epoch) as a fractional number
- New: You can also pass the special value -1 to SetEventTimeout() now to indicate that events
  should never time out
- Fix [Doc]: The event timeout was raised from 1500 seconds to 60000 seconds in Hollywood 6.0
  but this change wasn't documented in the SetEventTimeout() chapter in the manual
- New [Amiga]: ConvertStr() also supports #ENCODING_AMIGA now; note that you can only convert
  between #ENCODING_UTF8 and #ENCODING_AMIGA; it's not possible to convert between ISO-8859-1
  and #ENCODING_AMIGA
- New [SDK]: Added HWOS_ENCODING_AMIGA; this allows SysBase.ConvertString() to convert UTF-8
  strings to and from the system's charset on Amiga computers; on all other platforms,
  HWOS_ENCODING_AMIGA is unsupported
- New [SDK]: Added HWDISPATTR_USESATELLITE; if this tag item is included in a tag list passed
  to GfxBase.GetDisplayAttr() and set to TRUE, Hollywood will interpret the handle passed to
  GfxBase.GetDisplayAttr() as a satellite handle instead of a handle managed by a display
  adapter; this is useful for querying attributes of a satellite's parent display
- New [SDK]: Added HWDISPATTR_CANDROPFILE; this attribute can be used to query whether a display
  supports dropping files
- New [SDK]: Added HWEVT_DROPFILE and HWSATEVT_DROPFILE; these new event types allow you to
  post "OnDropFile" events to a display or a display satellite
- New [SDK]: Added HWCB_DROPFILECHANGE callback; this callback can be used by display adapter
  plugins who want to be notified when the user installs or deinstalls a listener on "OnDropFile"
  using InstallEventHandler()
- New [SDK]: Added SysBase.RaiseOnError() which invokes the error handling function installed
  by RaiseOnError(); it returns 0 if there was an error handling function and it ate the error;
  otherwise it simply returns the error you passed in; note that it's normally not needed to
  call this function manually; under normal circumstances, Hollywood handles this automatically
- New [SDK]: HWMCP_DISABLERAISEONERROR allows to temporarily disable an error handling function
  installed by RaiseOnError(); useful for doing some tricks with error codes as currently done
  internally by RapaGUI
- Change: Changed the way DownloadFile() sends the initial HTTP request to work around problems with
  certain Android versions (reported by Ulrich Beckers)
- New [IDE]: IDE now also supports opening scripts using the "Open with..." Shell functionality
  (requested by Tom C.)
- New [Doc]: Major reworking of the documentation; all variable names are now highlighted and lots
  of things have been restructured with some additions here and there; apologies to all people
  maintaining translations of the Hollywood documentation because you'll have a hard time now to
  find out what has changed; I promise not to do another restructuring in the near future but keep
  this format now :)
- Fix [MacOS]: Fixed potential memory access faults when stopping audio; commands affected by this
  bug were StopSample(), StopMusic() and StopVideo(); it could also cause a crash on program exit
  when sound was still playing because Hollywood implicitly calls the StopXXX() commands before
  termination 
- New: Added "FullscreenScale" display mode; this does the same as "FakeFullscreen" but scales the
  display to the current monitor's resolution; by default, the autoscaling engine is used; if you
  wish to use layerscaling instead, you need to activate the layerscaling engine; the new display
  mode is also available from the command line through the new FULLSCREENSCALE argument 
- Change [Win32]: If there is a backfill on a certain monitor, all displays will be opened as
  children of that backfill; this solves some problems (e.g. minimizing a display made it disappear)
  and also doesn't show multiple windows when cycling through the window list using ALT-TAB
- New: End() accepts an optional argument now which allows you to set the program's exit status
  (requested by Jean Holzammer)
- Fix: GetAttribute() wasn't able to query event handlers installed by plugins using the object
  type #EVENTHANDLER (reported by Lazar Zoltan)
- New: @DISPLAY, CreateDisplay(), ChangeDisplaySize() and SetDisplayAttributes() accept the new
  special constant #NATIVE now for their Width/Height/ScaleWidth/ScaleHeight parameters; if this
  constant is used, Hollywood will use the width or height of the display's monitor as the display
  width/height; this is especially useful on Android; #NATIVE is also accepted by the ScrWidth/Height
  parameters of CreateDisplay(), OpenDisplay() and ChangeDisplayMode() (requested by Ulrich Beckers)
- Fix: Removing a layer behind a layer associated with an asynchronous draw object allocated by
  PlayAnim() resulted in crashes in all further calls to AsyncDrawFrame() (reported by Dimitris
  Panokostas)
- Fix: ]] wasn't unescaped correctly in Print() and TextOut() when drawing a string in internal
  fast draw mode (reported by Paul Bloedel)
- Fix [Android/Linux]: Musics shorter than 1 second were either repeated (Android) or were
  followed by a short period of silence (Linux) (reported by Paul Bloedel)
- Fix [Doc]: The table illustrating the different mask modes in SetMaskMode() didn't survive
  the transition from AmigaGuide to PDF/HTML/CHM using MetaDoc; it's finally back now in all
  versions of the manual (reported by Dominic Widmer)
- Change [Android]: Updated to the latest libpng and zlib versions to make the Play Store's
  vulnerability check happy (reported by Achim Kern and Ulrich Beckers)
- Fix [Android]: On error, Hollywood could freeze under certain conditions instead of showing
  the error dialog
- Fix: With some FTP servers DownloadFile() returned a zero file size in the download callback
  (reported by Fabio Falcucci)
- Change: Fixed HollyAmp and ClipboardDemo examples to work correctly in Unicode mode
- New [MacOS]: The Mac OS GUI can now also act as a viewer and open *.hws and *.hwa files via
  double-click; this will automatically launch Hollywood instead of the GUI then
- Fix [Linux]: Fixed console mode when running Hollywood without X11; this is useful with the
  SDL plugin on the Raspberry Pi which can't be run on X11 because it accesses the hardware
  drivers and kernel services directly
- Fix [Linux/Android/SDK]: Samples created using CreateSample() or MixSample() were not always
  initialized correctly which could lead to a memory access fault during playback
- Fix [MacOS]: When using backfills or fake full screen mode menu bar and dock were not hidden
  correctly under some certain circumstances 
- New: Keyfiles support UTF-8 now too; this finally makes it possible to use people's real names
  on non-ISO 8859-1 systems
- New [SDK]: Added UnicodeBase with lots of useful functions for dealing with UTF-8 in particular
  and Unicode characters in general
- Fix [Android]: Asterisk (*) and plus (+) keys weren't sent for "OnKeyDown" and "OnKeyUp" on
  newer Android versions
- New: Added #ENCODING_RAW constant which is a synonym for #ENCODING_ISO8859_1; it is especially
  useful if you want to have raw binary access to strings with the string library; writing
  #ENCODING_RAW instead of #ENCODING_ISO8859_1 might increase the readability of your code
- Change: Multi-byte character constants are now expected to describe one Unicode character
  when Hollywood is in Unicode mode; if a multi-byte character constant doesn't describe exactly
  one Unicode character, an error will be generated; this is an API change but no one will probably
  notice because multi-byte character constants are used only very rarely
- New: Added new string functions for determining the type or formatting of a character: IsAlNum(),
  IsAlpha(), IsCntrl(), IsDigit(), IsGraph(), IsLower(), IsPrint(), IsPunct(), IsSpace(),
  IsUpper(), IsXDigit(); Unicode fully supported!
- New: Asc() accepts an optional argument now which allows you to specify an index into the
  string to get the character code of other characters than just the first (defaults to 0)
- Change: OS-independent catalog files are now expected to be in UTF-8 format; this breaks
  compatibility but since nobody ever used those OS-independent catalog files this should still
  be okay
- Fix [MacOS]: Inbuilt MJPEG AVI loader was broken and crashed Hollywood
- New [GUI]: Adapted Amiga, Linux and Mac OS X GUIs to fully support Unicode now
- New [IDE]: Added full Unicode support to the Windows IDE; this was a pile of work; this solves
  all previous problems with non-Latin 1 characters; you can use any characters you like now; in
  addition to that, all Hollywood scripts will be saved as UTF-8 with BOM by default now; if you
  don't want this, there is a new option in the settings now which allows you to reset the encoding
  to ISO 8859-1 but this isn't really recommended; scripts should always be in UTF-8 from now on;
  the Hollywood.ini files which describe the examples are now expected to be in UTF-8 format too;
  the BOM is optional in this case
- Fix [IDE]: Certain temporary files were never deleted
- New [SDK]: Added HWCB_ENCODINGCHANGE callback type to SysBase.RegisterCallback(); this callback
  will be run whenever the encoding changes (see below why this callback is useful); the default
  encoding is HWOS_ENCODING_UTF8 so your callback will only be called in case a script explicitly
  requests HWOS_ENCODING_ISO8859_1
- New [SDK]: Added SysBase.GetEncoding(); this allows you to get the encoding used by the script;
  note that this will always be HWOS_ENCODING_UTF8 when called in InitPlugin() or InitLibrary()
  because the encoding will be set when parsing the script and both InitPlugin() and InitLibrary()
  will be called before parsing the script; use HWCB_ENCODINGCHANGE if you want to be notified
  as soon as the encoding changes (see above)
- New: Added ReadBytes() and WriteBytes(); these will always operate on bytes no matter if Hollywood
  is currently in Unicode mode or not; these are substitutes for ReadString() and WriteString()
  which now operate in UTF-8 mode by default  
- New: ReadString() and WriteString() support an optional parameter now which allows you to set
  the encoding of the string to be written; note that if this is set to #ENCODING_UTF8, the length
  parameter is expected to be in characters instead of bytes
- New: Added ReadByte() and WriteByte() functions; these will always read/write just one byte no
  matter whether Hollywood is in Unicode mode or not; this is a substitute for the old ReadChr()
  and WriteChr() functions which read/write UTF-8 characters (up to 4 bytes wide) now by default
- New: ReadChr() and WriteChr() accept a new optional argument now which allows you to specify the
  encoding to use; in Unicode mode this defaults to #ENCODING_UTF8 which means that ReadChr() and
  WriteChr() will read/write one UTF-8 character which can be up to 4 bytes wide; if you use
  #ENCODING_ISO8859_1 just one byte will be read/written; note that this change might break your
  old scripts if you used ReadChr() and WriteChr() with non-ASCII characters; see the API changes
  and Unicode chapters in the manual for details on how to adapt your scripts
- New: Added IsUnicode() function which returns TRUE or FALSE depending on whether Hollywood is
  currently in Unicode mode; this is probably not of much use because scripts normally needn't worry
  about the text encoding internally used by Hollywood but it might be handy for some debugging purposes
- Change [SDK]: CRTBase.fopen(), CRTBase.stat(), CRTBase.remove(), CRTBase.rename() and all other
  plugin APIs expect filenames now in the encoding of the current script; this is typically UTF-8;
  ISO 8859-1 is only used when Hollywood is in legacy mode; this is especially convenient on Windows
  and on AmigaOS because on those platforms functions like fopen() don't support UTF-8; if you
  use the Hollywood implementations from CRTBase, however, you can just pass UTF-8 strings to them
- New [SDK]: If the buffer returned by GetScript() starts with the magic signature "::utf8", then
  Hollywood will use UTF-8 encoding for the script, otherwise it will switch to ISO 8859-1 mode
- New [SDK]: Added HWFOPENMODE_FORCEUTF8; if this is set, DOSBase.FOpen() and DOSBase.FOpenExt()
  will always expect the filename to be in UTF-8 encoding; by default, the encoding is determined
  by the encoding of the current script
- Fix: BRUSHFILE argument was broken for a long, long time
- Fix: InKeyStr() could leave some visual artefacts on the screen 
- Change: InKeyStr() uses the new vanilla key event handler now and thus can also handle Unicode
  characters or multiple key characters like French accented characters too
- Change: WaitKeyDown() and IsKeyDown() can only be used with control keys and ASCII keys now;
  if you need to query the states of non-ASCII keys, use the new "VanillaKey" event handler instead;
  this is an API break but it was necessary for Unicode support
- New [SDK]: Added HWSATEVT_VANILLAKEY and HWEVT_VANILLAKEY; these can be used to post Unicode key
  events to displays or display satellites
- New: Added "VanillaKey" event handler; this event handler allows you to listen to keys with full
  Unicode support; the "OnKeyDown" and "OnKeyUp" event handlers are limited to control keys,
  ASCII keys and certain Latin 1 keys depending on the platform and locale; using anything except
  control keys and ASCII keys with "OnKeyDown" and "OnKeyUp" is relying on undefined behaviour
  since "OnKeyDown" and "OnKeyUp" are only guaranteed to work with control keys and ASCII keys
  on all platforms and locales; so for anything else you should use "VanillaKey" for full Unicode
  support; the only downside of "VanillaKey" is that it doesn't inform you about key up and down
  events separately but you only get one event (although it will be sent again if the user keeps
  holding the key); key up and down events for "VanillaKey" are not possible because often multiple
  key presses are necessary to generate one vanilla key code (e.g. with diacritical characters);
  note that "VanillaKey" will only be triggered for printable characters including the SPACE character;
  you won't get any control keys like ESCape, backspace etc. through the "VanillaKey" event handler
- New [SDK]: Added SysBase.CompareString(); this is the same as the new Hollywood function (see below)
- New: Added CompareStr() function; this is returns the relation between two strings; this is useful
  for sorting strings  
- New: Sort() supports full Unicode collation now  
- New: PatternFindStr() and PatternReplaceStr() support a new character class named %g now; this
  character class will match all characters that have a graphical representation
- New: Added ReverseStr() function; this reverses the order of characters in a string
- New: Added ConvertStr() function which allows you to convert between UTF-8 and ISO-8859-1; this
  can be useful when reading data from files or writing data to files
- New: Added new string functions especially designed for #ENCODING_UTF8: ByteOffset(), ByteLen(),
  CharOffset(), ValidateStr(), CharWidth(); they also work with #ENCODING_ISO8859_1 but it doesn't
  really make sense to use them for ISO-8859-1 (except ByteLen() but for ISO 8859-1 this is of
  course the same as StrLen())
- New: GetDefaultEncoding() returns the two default encodings for the text and string libraries
- New: SetDefaultEncoding() accepts an optional argument now which allows you to set the default
  encoding of all the functions in the string library which support an optional encoding
  parameter now; when Hollywood is running in Unicode mode, the default encoding for the string
  library is automatically set to #ENCODING_UTF8 by default; if you do not want this, you can
  use SetDefaultEncoding() to revert it back to #ENCODING_ISO8859_1
- New: Most of the functions in the string library support an optional encoding parameter now
  which allows you to use these functions with UTF-8 strings too; when Hollywood is run in
  Unicode mode (this is the default now), all text strings are stored in UTF-8 encoding; note
  that this can lead to compatibility issues in case you use the string library functions to
  operate on binary data that is stored within a string; since all string functions expect
  valid UTF-8 data when Unicode is enabled, operating on binary string data stored within strings
  using the string library functions will only work if you explicitly tell the string functions
  not to expect UTF-8 data but raw 8-bit data by passing #ENCODING_ISO8859_1 in the optional
  encoding parameter
- Fix: Bitmap fonts didn't support #ENCODING_UTF8
- New: Introducing Unicode support! After almost 15 years, Hollywood finally has full Unicode
  support now; this was a lot of work because substantial amounts of code had to be adapted
  for Unicode for each operating system supported by Hollywood; Unicode support is automatically
  enabled for all scripts now, i.e. Hollywood automatically expects all scripts to be in UTF-8
  format (with or without BOM); if Hollywood detects an invalid UTF-8 sequence in your script,
  it will assume that the file is ISO 8859-1 encoded (on Amiga Hollywood will assume the system's
  default encoding) and convert it to UTF-8 automatically; note that this detection isn't always
  reliable because certain combinations could be both, ISO 8859-1 or UTF-8; so the best idea is
  to convert all your scripts to UTF-8 now; also note that the automatic ISO 8859-1 to UTF-8 mapping
  will lead to problems with scripts which use non-ISO-8859-1 characters; you have to manually convert
  those scripts to UTF-8 or characters won't be mapped correctly; also note that when Hollywood is
  in Unicode mode, some functions will behave differently (e.g. functions from the string library)
  so you might need to adapt your code; alternatively, it's possible to enable legacy ISO 8859-1
  mode by using the new ENCODING argument or the new "Encoding" tag for the @OPTIONS preprocessor
  command; legacy mode shouldn't be used permanently, however, because in legacy mode Hollywood can
  have problems if files or paths use non-ISO-8859-1 characters; also note that in Unicode mode,
  Hollywood will also automatically set the default encoding to #ENCODING_UTF8 so you don't have to
  call SetDefaultEncoding()
- Fix [Linux]: Hollywood didn't work on X servers which reported 32-bit depth instead of 24
  which seems to be the standard on most modern Linuxes (reported by Pascal Papara)
- Fix [Linux]: StopMusic() could trigger a segmentation fault (reported by Fabio Falcucci)   
- Fix [Linux]: Several issues in the event handler that could cause several weird problems.
  e.g. when using CheckEvent() and CheckEvents() instead of WaitEvent() interval and timeout
  functions were never triggered (reported by Fabio Falcucci)
- Fix: Contrary to the description in the documentation, Print() and NPrint() didn't respect
  the encoding that was set using SetDefaultEncoding()
- New: Added GetMACAddress() which allows you to obtain the MAC address of the host system
  (requested by Tony Canazza)
- Fix: Setting "DisableBlanker" to TRUE didn't work when desktop mode was enabled in @DISPLAY
  (reported by Petteri Valli)
- Fix [IDE]: Setting text colour to anything other than black didn't work correctly (reported by
  Moe Momayez)
- Fix [Win32/Linux/MacOS/Android]: Using Seek() to position the cursor after the end of file when
  the file is in write mode actually filled the gap with zeros; this was inconsistent with the
  behaviour on AmigaOS; now it's impossible to position to cursor after the end of file with
  Seek() (reported by Lazar Zoltan)
- Fix: When using #FILLGRADIENT fill style and #ANTIALIAS and #SHADOW form style with one of the
  Arc(), Circle(), Ellipse() or Box() with round corners commands, the gradient wasn't drawn
  correctly (reported by Tony Canazza)
- New: @REQUIRE supports a new tag named "Link" now; when set to TRUE, Hollywood will automatically
  link the specified plugin into executables when it is in compile mode; this basically does the
  same as using the LINKPLUGINS argument (requested by Dominique Vanderveken)
- Change [Amiga]: SavePrefs() and LoadPrefs() use ENVARC: instead of SYS:Prefs/Env-Archive now
  (requested by Nigel Tromans)
- New: #ATTRSPRITES can be used for #DISPLAY and #BGPIC to query the number of sprites currently
  active on a display or BGPic
- New: #ATTRZPOS can be used with #SPRITE to query the z-position of a sprite (requested by
  Fredrik Abramsson)
- New: SetSpriteZPos() can be used to modify the z-position of a sprite; this functions works
  exactly the same as its sister function SetLayerZPos() (requested by Fredrik Abramsson)
- Fix [Linux]: Initializing GTK automatically set the C runtime language to the system's default
  language which could cause problems on systems that don't use the point as the decimal mark
  (e.g. German systems); among the problems caused by this was a malfunctioning of the
  DownloadFile() function (reported by Fabio Falcucci)
- Fix [GUI/Linux]: GUI didn't show correct version information for scripts on systems not using a
  point as a decimal mark like German systems which use a comma
- Fix: Fixed memory fault in IFF ANIM16i and IFF ANIM32i decoder which could crash the system;
  only interlaced formats were affected by this bug (reported by Piotr Bandurski)
- New [Win32]: #ATTRHOSTTASKBAR allows you to query information about the taskbar on Windows; it
  returns 5 values: the position and size of the taskbar and a boolean indicating its visibility
  state (hidden or visible)
- New: #ATTRHOSTTITLEBARHEIGHT allows you to retrieve the host screen's title bar height for
  object type #DISPLAY
- New [Amiga]: Added "TrapRMB" flag to @DISPLAY and CreateDisplay(); if this is set to TRUE,
  Hollywood will deliver right mouse button events even when a menu strip is associated with a
  display; the downside is that menu access will only be possible via the screen's title bar
  then; the "TrapRMB" flag is only handled in case your display has a menu strip, otherwise it
  has no effect at all; "TrapRMB" defaults to FALSE which means that when a menu strip is associated
  with a display, right mouse button events aren't generated; this is also the original Hollywood
  6.0 behaviour which is now restored (reported by Marko Seppnen)
- Fix [Win32]: Certain JPEGs couldn't be loaded if the script, applet or program was stored
  on Windows' C:\ drive on Vista and up (reported by Paul Bloedel)
- Fix [OS4/MorphOS]: Run() crashed when no event handler for "RunFinished" was installed
  (reported by Christoph Poelzl)
- New: #ATTRRAWWIDTH and #ATTRRAWHEIGHT can be used for #DISPLAY now; they return the actual
  physical dimensions of the display, regardless of any scaling options that might be active
- Fix [SDK]: LuaBase.lua_pcall() didn't leave a balanced stack in case an error occurred; this
  usually didn't have any implications because Hollywood would quit in case an error happened
  but it could lead to trouble when turning off the automatic error handler
- Fix [Win32]: Calling ShowPointer() with the pointer already visible and without any custom
  pointer configuration hid the pointer (reported by Fredrik Abramsson)
- Fix [Win32]: "RememberPosition" also applied the window position and size when switching to
  fullscreen mode leading to only partially visible displays
- New: The length argument of ReadString() is now optional; if it is omitted, ReadString() will
  just read everything until the end of the file
- Fix [Linux]: Icons declared using @APPICON weren't shown correctly when running scripts;
  they were only shown when compiling scripts as applets or executables
- Fix: When freeing BGPics that are still attached to displays and using multiple displays
  the garbage collector could accidentally free BGPics although they were still needed by the
  display (reported by Paul Bloedel)
- Fix: Fixed several issues with the layerscale engine which only occurred under very special,
  rare circumstances
- Fix: Linehook exit is now done in a different way because the old way could leave a trashed
  VM stack which didn't have any practical implications because Hollywood didn't access the VM
  any more when shutting down except when using the "RememberPosition" display tag; this change
  should fix problems with the "RememberPosition" tag
- Fix [Doc]: Optional notime argument for CompareDates() has been available since v4.5 but wasn't
  documented at all
- New: Added MAXIMIZED argument and "Maximized" tag for @DISPLAY, CreateDisplay() and
  SetDisplayAttributes(); if this tag is specified, the display will be opened in maximized mode;
  #ATTRMAXIMIZED allows you to query if a display is currently maximized; all these features are
  currently only supported on Windows and it only works for sizeable displays of course (requested
  by Torgeir Vee)
- New [GUI]: Added 64-bit versions of the GUI for Linux and Mac OS; also added support for the
  new 64-bit targets to the Hollywood GUI
- New [IDE]: Added 64-bit version of the Windows IDE; also added support for the new 64-bit
  targets to the Windows IDE
- New [Win32/Linux/MacOS]: Added support for 64-bit CPUs; this is especially useful on Linux because
  it is quite a hassle to install 32-bit support on modern Linux distributions and there are
  often some dependency conflicts; by using the 64-bit version of Hollywood, these problems
  should be gone now and you can just run Hollywood out of the box; note that 64-bit binaries
  cannot load 32-bit plugins so if you use the 64-bit version of Hollywood, you also need to
  install 64-bit versions of all plugins you wish to use; the following new targets are now
  available for EXETYPE: win64, win64console, linux64 and macos64. 
- New [MacOS]: Cocoa backend uses AV Foundation instead of QuickTime for video playback now;
  this feature is only available when running 10.7 or better; on 10.6 the Cocoa backend supports
  video playback only through Hollywood's inbuilt video engine; AV Foundation requires at least
  10.7
- New [MacOS]: Cocoa backend uses CoreText instead of ATSUI now; ATSUI is only used by the Carbon
  backend (used on Mac OS PowerPC and optionally available for Intel, see below)
- New [MacOS]: Complete rewrite of the Hollywood backend in Cocoa; this was a lot of work but it
  is necessary for the upcoming 64-bit support; previously, Hollywood for Mac OS was written in
  Carbon but Carbon has been deprecated for a long time now (although Carbon apps still work on
  the latest OS X version) and isn't available for the 64-bit architecture; the backend for PowerPC
  Mac OS still uses Carbon for performance reasons; for Intel Macs, Hollywood will use Cocoa now
  by default but Carbon support is still available by passing "macos86carbon" in EXETYPE when
  compiling executables but it is not recommended to use Carbon any longer; you should just use
  "macos86" which will compile a Cocoa app now; note that the USEQUARTZ argument is obsolete now
  since Cocoa apps always use Quartz; only Carbon apps use QuickDraw by default for performance
  reasons; performance-wise, the Cocoa backend is usually faster than the Carbon backend because
  autoscaling is handled by the OS now and drawing is done in a more efficient way; on older Macs,
  however, scrolling might be a bit jerkier than on Carbon because Carbon disabled coalesced refresh;
  to replicate the Carbon look, you have to set the "CGDisableCoalescedUpdates" tag to TRUE in
  Info.plist but it's not recommended

Version 6.1     (05-Mar-16)

- Change: Updated Hollywood documentation
- Change [SDK]: Updated Hollywood SDK documentation and includes
- Change: Updated catalog descriptions and German translation; added new developer files for doing
  new translations
- Change: Updated the Hollywood GUI (Amiga) and IDE (Windows)
- Change: The download version of Hollywood is no longer distributed as an ISO image and it's also
  no longer necessary to run a tool that generates a personalized ISO image; instead, you can just
  download installers now and copy the keyfile manually
- New: Added NODEBUG console argument; if this argument is specified, the commands DebugPrint(),
  DebugPrintNR(), Assert(), DebugOutput(), and @WARNING will be ignored; this allows you to globally
  disable debugging functions with just a single call (requested by Dominique Vanderveken)
- Fix [Win32]: Passing an empty string to FileRequest() in the deffile$ argument prevented the file
  requester from being shown (reported by Paul Bloedel)
- New: Added "RunFinished" event handler; this event handler will trigger whenever a command started with
  Run() has terminated; Run() also accepts a new optional user data argument now which will be passed
  to the event handler if you specify it; this was quite some work because especially on AmigaOS and
  compatibles this required different implementations on every single incarnation of AmigaOS
- New: WaitKeyDown() and IsKeyDown() accept the magic word "ANY" now to check if any key is down or wait
  for any key (requested by Ulrich Beckers)
- New [Amiga]: Added OpenAmigaGuide() and CloseAmigaGuide() which allow you to view and close AmigaGuide
  files from your Hollywood script; OpenAmigaGuide() accepts an optional argument that can be used
  to specify the node which should be displayed (requested by Jean-Noel Roueste)
- Fix [Win32]: When de-minimizing a display with a menubar attached twice, Hollywood triggered a spurious
  "SizeWindow" event which could erase the display's contents (reported by Juan Carlos Herran Martin) 
- Fix: Drawing arcs, ellipses, circles, and rectangles with rounded corners with antialiasing and shadow
  and/or edge enabled and layers disabled and using the new vectorgraphics renderer introduced with
  Hollywood 6.0 resulted in a wrong calculation of the object's dimensions and some missing pixels at
  the borders of the object (reported by Xabier Payet)
- New: Improved gradient interpolation algorithm; color gradients are smoother now!
- Fix: Gradients drawn across small areas didn't look very good (reported by Tony Canazza)
- Fix: Trying to set a non-multi-stop gradient after a multi-stop gradient using SetFillStyle() didn't
  work; the multi-stop gradient stayed active (reported by Tony Canazza)
- New: "Ask" display mode now offers a fourth option to cancel Hollywood; this also fixes the problem
  that hitting the requester's close box on Windows didn't cancel Hollywood but opened the screenmode
  requester because there was no cancel button
- Fix [Win32]: When hiding a menubar SetDisplayAttributes() didn't adjust the display's new y position
  correctly so that the display jumped down (reported by Lazar Zoltan)
- Fix [Amiga]: Screenmode requester didn't work on palette screenmodes which made it impossible to use
  it with the Plananarama plugin (reported by Lazar Zoltan)
- Fix [Amiga]: Manual select mode via a screenmode requester didn't respect scaling dimensions set using
  SCALEWIDTH and SCALEHEIGHT
- Fix: FITSCALE didn't work when running scripts in full screen mode (both in best fit and manual select
  modes) (reported by Samuli Holopainen)
- Fix: FreeDisplay() forgot to close the display's backfill (reported by Ulrich Beckers)
- New: DownloadFile() and UploadFile() support a new tag named "Encoded" now; if this is set to TRUE,
  DownloadFile() and UploadFile() will assume that the URL you've passed is already percentage-encoded
  and no more encoding will be done (requested by Lazar Zoltan)
- Fix: DownloadFile() didn't handle HTTP redirect requests correctly (reported by Dominique Vanderveken)
- New: Added @WARNING and @ERROR preprocessor command; these are debug facilities meant to make your
  life easier in case you want to be warned about certain parts of your code
- New [Android]: Added GetAsset() function which allows you to load applet assets; this is only
  useful when compiling your scripts into stand-alone APKs using the Hollywood APK Compiler
- New [SDK]: Added GfxBase.FreeBrush; this allows you to easily free Hollywood brushes from plugins
- Fix [Android]: When an applet exited with an error and an interval timer was still running, the app
  wasn't shut down properly
- New: Added LINKPLUGINS compiler argument; this allows you to specify one or more plugins that should
  be linked into the executable created by the compiler; compression is supported; plugins for the linker
  must be placed inside a special location: you must copy them into architecture directories in
  Hollywood:LinkerPlugins on Amiga systems and in PROGDIR:LinkerPlugins on non-Amiga systems; note that
  plugins can only be linked into executables, not into applets because applets are platform-independent
  and linking plugins for all supported platforms into applets would bloat the applets massively; linking
  plugins is also supported for Android but this requires the Hollywood APK Compiler add-on; also make sure
  to read the plugins' license carefully before you link them, e.g. if you statically link a plugin that
  is LGPL your program will automatically become LGPL as well and you must release the source codes!
- New: Added DeletePrefs() function to kill a prefs file saved using SavePrefs()
- Change: When specifying multiple executables types using the EXETYPE argument, the individual platforms
  should be separated by a "|" now instead of a "+"; this is a change for consistency with other
  arguments; the "+" syntax is still supported for compatibility
- New [Android]: Modified Android backend to run as a link library as well; this finally allows you to
  compile stand-alone APKs with Hollywood using a custom tool that is to be released soon
- Fix [Android]: Potential memory faults when cleaning up
- New [GUI/OS3]: To celebrate the release of the Plananarama plugin, Hollywood's GUI now runs on planar
  screens again! This is the first time since Hollywood 1.93 that the GUI supports planar graphics again!
  If you want to route every Hollywood script launched from the GUI through the Plananarama plugin, just
  go to the Prefs/Hollywood... menu and enter "-requireplugins plananarama" in the "Additional interpreter
  arguments" text gadget
- New [SDK]: Added hw_GetEventHandler() which allows you to find out the registry index of plugin event
  handler functions and their user data
- New [SDK]: Added HWADS_OPTIMIZEDREFRESH; this allows display satellites to enforce optimized refresh
  of their parents
- New: Intersection() computes the intersection between two rectangles
- New [SDK]: Added HWMCP_SETAMIGASIGNALERROR; this is a glue code feature which works around the design
  problem that callbacks of type HWCB_AMIGASIGNAL can't pass an error code back to Hollywood
- New [SDK]: Added HWHEFLAGS_RUNCALLBACKS; if this flag is set, hw_HandleEvents() will also run any
  event callbacks that have triggered; this is useful on plugins which don't install a display adapter
  and hence cannot use HWMSFLAGS_RUNCALLBACKS because hw_MasterServer() must only be called by display
  adapters
- New [SDK]: Added HWSDAFLAGS_DRAWALWAYS; if this is set, the display adapter drawing functions will
  also be called for minimized/hidden displays
- Fix [SDK]: Potential refresh issues when unhiding a display managed by a display adapter on compositing
  window managers that don't send a refresh message on unhide
- Fix: VWait() no longer crashes when called when a display adapter with no visible displays was active
- New: Added CheckEvents() which is basically the same as CheckEvent() but handles all events in the
  queue instead of just the first; in contrast to CheckEvent() it doesn't return any information about
  the event(s) it handled
- Change: CheckEvent() can also be called from event callbacks now
- New [SDK]: Added SysBase.GetVMErrorInfo() which allows you to query advanced error information after
  an error in the VM
- New [SDK]: Added HWMCP_RESETERRORFLAG; set this if you want the script to continue running after
  lua_pcall() threw an error
- New [SDK]: Added HWMCP_SETLIGHTCHKEVT; if this is set Hollywood's CheckEvent() will only call the
  display adapter's HandleEvents() function and do nothing else
- Fix [Android]: Fixed Hollywood Player for Android 6: Marshmallow
- Fix [Linux]: Crash when querying monitor or screen mode information when using a display adapter
  that didn't set HWSDAFLAGS_MONITORINFO
- Fix [SDK]: Drawing graphics beneath videos led to flicker when a display adapter was active; it's
  now clipped correctly
- Fix [SDK]: Playing videos in autoscale mode didn't work when a display adapter was active
- New [SDK]: Added HWEXT_DISPLAYADAPTER_MAINLOOP extension for display adapters which are based on a
  single call for running the main loop
- New [SDK]: HWMCP_SETGLOBALQUIT can be used to set the global quit flag
- Fix [SDK]: Error returned by HWPLUG_CAPS_DISPLAYADAPTER/WaitEvents() was never handled
- Fix [OS4]: Hardware YUV decoder displayed frame data only in grayscale (reported by Richard Lake
  and Michael Brantley)
- Fix [SDK]: GfxBase.UnLockBrush() could freeze the system on platforms with hardware bitmap locking
  like OS4, MorphOS and OS3; this was only broken in 6.0; it worked in earlier versions
- Fix [Win32]: Fullscreen mode didn't work on Windows 10 (reported by Torgeir Vee and others)
- New [SDK]: Added HWLDIMGTAG_USEARGB tag to GfxBase.LoadImage(); if this tag is set to TRUE, the
  pixel data will be loaded as ARGB
- Fix [SDK]: Documentation of GfxBase.LoadImage() and GfxBase.GetImageData() stated that the returned
  pixel data was in ARGB order but in reality these functions return the pixels in RGBA order
- New [SDK]: Added HWCB_SHOWHIDEAPP callback type for SysBase.RegisterCallback(); this callback will
  trigger when the user changes the visibility of an application via commodities or application.library
  on OS4; this callback type is only supported on AmigaOS
- Fix [Win32]: Menu item toggle and enable state wasn't always preserved correctly when changing
  one of the states (reported by Dominic Widmer)
- Fix: Inbuilt JPEG loader didn't recognize files which didn't have one of the JFIF, Exif, or Lavc
  markers (reported by Achim Kern)
- New [SDK]: Added SysBase.RunEventCallback() which can be used to run an event callback outside
  Hollywood's standard event handler managed by WaitEvent() and CheckEvent(); be careful to call
  this function only in meaningful places; see the similar function SysBase.RunTimerCallback() for
  more information
- Fix: GetErrorName() crashed when called with #ERR_NONE (reported by Lazar Zoltan)
- Change [GUI/IDE]: Using a better sorting algorithm now
- Fix: LoadBrush() was broken for display-dependent hardware brushes; loading display-dependent
  hardware brushes with LoadBrush() could cause all sorts of weird behaviour and crashes; the @BRUSH
  preprocessor command was not affected by the issue, though (reported by Jesper Schultz-Pedersen) 
- Fix: MakeButton() didn't work while in double-buffer mode (reported by Jesper Schultz-Pedersen)
- Fix [AROS]: Wrong colours when taking desktop snapshots or using the "Desktop" tag with @DISPLAY;
  unfortunately, this fix will break MUI Royale versions prior to and including 1.3 in the way that
  you cannot embed Hollywood displays any more into your GUIs; this has been fixed in MUI Royale 1.4
  so make sure you use at least 1.4 on AROS
- Fix [SDK/WarpOS]: All functions from FT2Base which operated on files didn't work correctly, e.g. 
  FT2Base.FT_New_Face() or FT2Base.FT_Open_Face() when using a path source
- New: AllocMemFromVirtualFile() allows you to access the raw memory contents of a virtual file created
  by DefineVirtualFileFromString(); note that you must not write to the memory unless the virtual file
  was created as writable; also note that any write operation to the virtual file might invalidate
  the memory pointer so you must call FreeMem() first and then AllocMemFromVirtualFile() again to be
  on the safe side
- Fix: TextOut() and Print() crashed when used with a hardware doublebuffer managed by a display
  adapter plugin like GL Galore (reported by Jali Heinonen)
- New: DefineVirtualFileFromString() supports virtual files that can be written to now! To create a
  writable virtual file, simply pass TRUE in the new optional third argument; you can initialize
  the virtual file with contents by passing a string in argument 1; for an empty writable file, just
  pass an empty string in argument 1 (requested by Fabio Falcucci)
- Fix: Crash when trying to get file attributes of a virtual file created using DefineVirtualFileFromString()
  with FileAttributes()
- New: ForEach() and ForEachI() accept an optional user data argument now which will be passed as the
  third parameter to the callback function if specified (requested by Samuli Holopainen)
- Fix [IDE]: On Vista and up the IDE no longer uses owner-drawn menus but Vista-style menus; this fixes
  some gfx glitches with grayed out menu items
- New [SDK]: Added HWEXT_LIBRARY_NOAUTOINIT extension; if this is defined, the constants and commands
  of library plugins won't be added to Hollywood unless the user calls @REQUIRE on the plugin; this
  is useful for plugins which install many commands which could flood Hollywood's namespace; it makes
  more sense to install these commands and constants only if the user really wants them
- New [IDE]: Added "Jump back" menu item; this jumps back to the previous line after jumping to a 
  function or preprocessor reference (requested by Samuli Holopainen)
- Fix [IDE]: Selecting text with SHIFT+cursor key resulted in graphics glitches (reported by Ray)
- New [IDE]: @REQUIRE is now parsed as well and the plugins thus detected will be listed in an additional
  listview inside the preprocessor command tool
- New [IDE]: The preprocessor command tool contains a widget that lists all videos used by the script
  now; Hollywood's media preview supports video files now too
- Fix [IDE]: CTRL-V and CTRL-X shortcuts also triggered on ALT GR-V and ALT GR-X which could lead
  to problems with key layouts like the Hungarian one which map the @ character to ALT GR-V
  (reported by Lazar Zoltan)
- Fix [GUI]: Plugin function names weren't sorted alphabetically in the system information dialog
- Change [IDE]: The IDE no longer uses virtualization; this means that you will no longer be able to
  modify and save the examples that come with Hollywood because they're stored inside Hollywood's
  directory in program files; if you want to modify and save one of the examples, just make a local
  copy; you'll also have to reconfigure the settings because ide.ini is now stored in the application
  data folder
- Change [Win32]: Hollywood no longer uses virtualization but it will fail now when you try to write
  a file to a folder that your application doesn't have write access to; previously, Hollywood always
  ran in legacy mode which automatically redirected unauthorized writes to the virtual store; this is
  no longer done now because it can lead to all kinds of unwanted behaviour and issues; so please write
  your settings to the application data directory which you can obtain by calling GetSystemInfo()
- New: Added NOCHDIR console argument; if this is set, Hollywood won't automatically change the current
  directory to the script's directory; this is probably of not much use but it's needed by the Windows
  IDE now
- Fix: Passing start and end degrees in the wrong order in Arc() wasn't handled correctly by Hollywood
  when antialiasing was on
- New: Added OVERRIDEPLACEMENT argument; when this is set, any position and size information saved
  using the "RememberPosition" tag is ignored  
- New: Added "RememberPosition" tag for @DISPLAY; if this is set to TRUE, Hollywood will automatically
  remember the last position and size of this display and restore it when the script is started the
  next time; this only works for non-fullscreen displays with a numeric identifier; you also have to
  set @APPIDENTIFIER for this feature to work (requested by Torgeir Vee)
- New: Added LoadPrefs() and SavePrefs() functions; these can conveniently save and load a table
  containing user preferences for your script; you have to pass a table to both functions; the table
  should be initialized to default values when passing it to LoadPrefs(); LoadPrefs() will then
  replace all the default values with the keys it finds; note that these functions require a valid
  application identifier set with @APPIDENTIFIER
- New: Added @APPIDENTIFIER preprocessor command which allows you to specify a unique identifier for
  your application in reverse DNS format (e.g. com.airsoftsoftwair.Hollywood); GetApplicationInfo()
  also returns a new item named "Identifier" now and HWMCP_GETAPPIDENTIFIER in the SDK allows plugins
  to read this identifier; when compiling application bundles for Mac OS X, the identifier specified
  in @APPIDENTIFIER will automatically be written to the Info.plist file of the app bundle
- New: HaveObjectData() allows you to check whether a certain key exists inside a specified object
  (requested by Samuli Holopainen)
- Fix [SDK]: Example plugins didn't exit cleanly in case no FPU was present when building for 68881/2
  and the FPU was not initialized
- Fix [SDK]: Modified Linux and Mac OS makefiles to create position-independent code
- Change: If the third argument of MidStr() is omitted, it will automatically be set to the number of
  remaining characters in the string, starting from the offset specified in the second argument
- New: IsTableEmpty() checks whether a table is empty
- New: Added TableItems() function which returns all items inside a table; remember that ListItems()
  only counts successive integer index items
- Fix [Win32]: Fixed a long-standing bug in SetInterval(): on Windows the interval always triggered
  immediately after the call to SetInterval(); on all other platforms Hollywood first waited for the
  interval to elapse before running the callback for the first time; the Windows version is now
  consistent with the other platforms, i.e. the callback function will be run when the interval
  has elapsed for the very first time
- Fix [Amiga]: Listening to the right mouse button didn't work when a display used a menu bar
  (reported by Sandro Barbagelata)
- Fix [Amiga]: When using displays on top of a full screen borderless display, the borderless display
  could be clicked to front thus covering the other displays; this is prevented now (reported by
  Simone Monsignori)
- Fix: Multithreading fixes in PauseVideo() and ResumeVideo() that could also affect SeekVideo() when
  called right after PauseVideo(); the issues fixed were likely to occur on systems with a slow CPU
  that couldn't catch up with video decoding which could lead to a crash
- Change: StopMusic() and PauseMusic() will no longer present an error in case the music is not playing;
  this change has been done for consistency with StopSample() which doesn't fail either; it makes sense
  to have the functions behave in this way because playback might stop at any time because a music
  has finished, i.e. playback finish could happen between calls to IsMusicPlaying() and StopMusic(),
  thus the only safe way was to enclose StopMusic() in a ExitOnError(False) section; now this is no
  longer necessary because StopMusic() and PauseMusic() will just exit silently in case the music is
  not playing
- Fix: Video recorder respects the NUMCHANNELS setting correctly now
- New [Amiga]: Added fine-tuned control for app icons on the Workbench; you can manually show and hide
  Hollywood's app icon by using the new #AMIGAICON_SHOW and #AMIGAICON_HIDE constants with SetWBIcon();
  to change the app icon's title and position, you can use the new #AMIGAICON_SETTITLE and #AMIGAICON_SETPOSITION
  constants; pass -1/-1 to use the next available position; omit the optional parameters to use the
  position as specified in the *.info file (suggested by Simone Monsignori)
- Fix [Win32]: Qualifier keys weren't always detected correctly when using IsKeyDown() (reported by
  Fabio Falcucci)
- Fix [OS4]: 16-bit stereo samples weren't loaded correctly when using the loader based on sound.datatype
  (reported by Gianluca Girelli)
- Change [Amiga]: HideDisplay() can now also be called when a video is playing
- Fix: When playing a dynamic music set up by CreateMusic() the "FillMusicBuffer" callback was often not
  called regularly which could lead to audio glitches
- Fix: Several potential multithreading issues in the sound driver which in practice probably never
  occurred but in theory they could have crashed the program
- Fix: Internal RIFF WAVE reader supports the extended header format now (reported by Gianluca Girelli)
- Fix [Win32]: Potential problems when restarting a music after it finished playing
- Fix: EndDoubleBuffer() crashed when called after changing the window size with autoscaling disabled
  (reported by Fabio Falcucci)
- Fix: Setting "UseLayer" to TRUE with PlayVideo() to play the same video twice or more at the same time
  didn't work at all
- New: Introducing the new sound channel API: These functions allow you to deal with sound channels directly
  which solves the problem of running out of channels; previously, it wasn't really possible to detect
  whether there were free channels or not because a single sample or music could be playing on multiple
  channels, thus making IsSamplePlaying() and IsMusicPlaying() not precise enough; using the new APIs
  it is now possible to check the individual channels directly; the following commands have been added:
  GetChannels(), IsChannelPlaying(), HaveFreeChannel(), SetChannelVolume() and StopChannel(); additionally,
  PlaySample(), PlayMusic(), and PlayVideo() support an optional "Channel" tag now which allows you to
  specify the channel that should be used for playback (suggested by Xabier Payet)
- Change: When Hollywood is started without any arguments, a file requester asking for a script or applet
  will be opened now; if you want to see Hollywood's usage information, use the new HELP console argument
- Fix: The table returned by GetPlugins() didn't always contain the fields "URL", "Date", "Settings", and
  "HelpFile" but only if the plugin explicitly set them; now they're set to an empty string if undefined
  (reported by Richard Lake)
- New [MacOS]: GetSystemInfo() returns a new table element named "AppBundle" now; this contains a fully
  qualified path to the location of the current program's application bundle
- New [MacOS/Win32]: GetSystemInfo() sets a new table element named "CommonAppData" now which is set to
  the common (global) application support folder for all users
- Fix [MacOS]: GetSystemInfo() returned the global application support folder in "AppData" instead of
  the user's application support folder
- New [Linux/GUI]: Finally added GUIs for the Linux and Mac OS X versions of Hollywood; the GUI is
  identical to the Amiga version which has been made platform-independent now; the core of all three
  GUIs is now the same but there are different OS-dependent backends (GTK/AppKit/MUI); this change
  finally allows stand-alone distributions of Hollywood for Linux & Mac OS X as well
- Fix [MacOS]: Fixed a long-standing bug that caused refresh problems when unhiding scripts which do not
  refresh the full display for every frame they draw
- Fix [MacOS]: Opening scripts and applets from Finder was broken in 6.0
- Fix [MacOS]: Crash when selecting an item from the application's default menu bar
- New [GUI]: Added an option to suppress Hollywood's output to the preferences
- New: Added FORCEFLUSH console argument to force line buffering on stdout; this is only needed when
  redirecting Hollywood's output to a pipe or file because when in console mode, stdout will always be
  line buffered
- Fix: In contrast to the description in the documentation, Hollywood didn't treat parameters 2 and 3 in
  PlayAnim() as optional (reported by Richard Lake)
- New [MorphOS]: Added support for streaming through sound.datatype; MorphOS is the only Amiga compatible
  operating system that has an extension for sound.datatype streaming; because of bugs in earlier
  MorphOS versions you should use at least MorphOS 3.8 for this feature; seeking not supported because
  current MorphOS versions don't support it (requested by Jean Holzammer)
- New [Amiga]: Menus are now supported in fullscreen mode too (requested by Simone Monsignori)
- Fix [Amiga]: When a display is in fullscreen mode and other windowed Hollywood displays are opened on
  this screen as well and the mode is changed from fullscreen to windowed mode, Hollywood will close
  and reopen all other displays as well just as Hollywood 5.3 did (reported by Simone Monsignori)
- Fix [OS4]: Hollywood didn't work correctly with screens defined in the OS4 Screens preferences utility
  (reported by Simone Monsignori)
- Fix: Wrong layer pickup when using the MoveXXX() commands to move an object that has already been attached
  to a layer (reported by Samuli Holopainen)
- Fix [Amiga]: Refresh problems when cancelling a window dragging operation using the right mouse button
  (reported by Nick Sommer)
- New: WriteTable() and WriteFunction() accept an optional parameter now that can be used to turn off
  automatic linewrapping when saving functions or tables in text mode
- Fix: The optional 'txtmode' parameter for WriteTable() was documented but never implemented; it's working
  correctly now (reported by Rdiger Solbach)
- Fix [AROS]: Wrong calculation of date stamps for all years >= 2010; this could make SetFileAttributes()
  fail and cause other issues (reported by Nigel Tromans)  
- New: DebugPrintNR() prints a string to the current debug device without appending a carriage return or
  line feed (requested by Jali Heinonen)
- Fix: Combo mode passed to SelectBrush() wrongly affected SelectAlphaChannel() when set to either 1 or 2
  (reported by Paul Bloedel)
  
Version 6.0     (14-Feb-15)

- Change: Updated Hollywood documentation
- Change: Updated catalog descriptions and German translation; added new developer files for doing
  new translations
- Change: Updated the Hollywood GUI (Amiga) and IDE (Windows)
- New: Added Epiphany, VideoFX, DockyDemo and MenuDemo examples
- Change: Major cleanup in the example sources; removed some very old and trivial examples
- New: Public player supports non-compressed applets now, too
- Fix [Amiga]: Execute() and Run() didn't work with executables or paths that had spaces in them
- Fix [Android]: Added workaround for what seems to be a bug/incompatibility in Android Lollipop and always
  caused a crash right before Hollywood exited
- Change [Android]: Layerscale is no longer offered as an option in the menu that is available while a script
  is running; it was removed because layerscale only makes sense for some very special scripts (e.g. scripts
  that use vector graphics and text instead of pixel graphics); for all other scripts it slowed things down
  unnecessarily; that's why layerscale has been removed from the standard options menu; you can still select
  it from the main menu and from the script of course
- Change: When passing the empty string ("") to SystemRequest(), ListRequest(), StringRequest() and
  ColorRequest() in the first parameter, Hollywood will now fall back to what was specified in the @APPTITLE
  preprocessor command
- New: Added GetApplicationInfo() which allows you to query the values of the @APPXXX preprocessor commands
- Change [Win32/MacOS/Linux]: SystemRequest() uses Windows message boxes now in case the button string is
  one of the following: "OK", "OK|Cancel", "Yes|No", "Yes|No|Cancel"; in that case, icons are supported on
  Win32 as well now
- Change [GUI/IDE]: The Amiga GUI and the Windows IDE will now scan the "Examples" drawer and generate a
  tree of available examples on-the-fly; this allows 3rd party plugins (e.g. MUI Royale) to install their
  own examples into Hollywood's collection of examples and make them easily accessible from the GUI or
  IDE 
- Fix [Amiga]: Potential border overdraw when resizing a window (reported by Lazar Zoltan)
- New: Added ReduceAlphaChannel() function which can be used to scale alpha pixels of a brush's alpha
  channel (requested by Paul Bloedel)
- New: Added EndianSwap() function to easily convert numbers between big and little endian byte order
- New: Added IncreasePointer() and DecreasePointer() for simple pointer arithmetic
- New: GetVersion() returns a new table element named "BigEndian" now which will be set to TRUE in case
  Hollywood is running on a big endian CPU
- New: Peek() and Poke() accept an optional parameter which allows you to specify whether the data should
  be written in native endian byte order (defaults to FALSE)
- New: Peek(), Poke(), TableToMem(), and MemToTable() support #FLOAT (4 bytes) and #DOUBLE (8 bytes) now
- New: Added "NoDocky" tag to @OPTIONS; if this is set together with "RegisterApplication", Hollywood
  will add your script as an invisible application that doesn't appear in AmiDock
- Change: ToNumber() can also convert variables of type #LIGHTUSERDATA to a number now  
- New: Added ToUserData() function which turns a number into a light user data pointer
- New: Added GetMemPointer() which allows you to get a pointer as light user data from a memory block and
  AllocMemFromPointer() which turns a pointer into a memory block; be careful with the latter function: it
  is dangerous if you don't know what you're doing!
- New [SDK]: Added UtilityBase with some often needed checksum functions as well as a Base64 decoder/encoder
- New [SDK]: HWIMGFLAGS_TRANSPARENCY and HWANMFLAGS_TRANSPARENCY make the new "LoadTransparency" feature
  available to plugins as well
- New: IsPicture() returns another table member named "Transparency" now that will be set to TRUE in case
  the picture has a monochrome transparency channel
- New: Added "LoadTransparency" tag to @BRUSH, @BGPIC, @ANIM, @SPRITE and the respective LoadXXX() commands;
  if set to TRUE, this will attempt to load a monochrome transparency channel that is supported by many
  palette-based formats (e.g. IFF ILBM and GIF); this finally makes it possible to load transparent GIFs
  anim GIF anims conveniently without having to mess with the color-based "Transparency" tag
- Fix [SDK]: LoadAnimCtrl.ForceAlphaChannel was broken
- New: ReceiveData() accepts an optional callback argument now which can be used to have the received data
  delivered to a user callback; this is useful in case you need to receive large packets of data which
  are better stored in a file instead of a string etc. (suggested by Fabio Falcucci)
- Fix [SDK]: hw_AttachDisplaySatellite() didn't work correctly when the host display had autoscaling or
  layerscaling enabled
- Fix: Another bug fixed in DownloadFile() when downloading files from HTTP servers that do not send the
  "Content-Length" header field and do not use chunked transfer mode
- New: DownloadFile() and UploadFile() accept an optional table argument named "CustomHeaders" now that
  allows you to specify a string with custom headers that Hollywood should send when communicating with
  HTTP servers; don't forget to use the trailing carriage return and line feed characters! (requested
  by Fabio Falcucci) 
- Fix: Uncompressed 24-bit IFF ILBMs weren't handled correctly by Hollywood's inbuilt IFF ILBM reader
- New: Added "Quantize" layer filter which allows you to reduce colors in a layer with optional dithering
- New: QuantizeBrush() allows you to reduce colors in a brush with optional dithering; useful to achieve
  a retro chunky pixels look!
- Fix: Exact precision for color quantization on images that use colors that can be represented in 8bit or
  less, for example when using the #IMGFMT_GIF saver (reported by Nick Sommer)
- New: UploadFile() also supports HTTP upload now; you have to pass an array of tables to the new "FormData"
  table argument; this array must contain all form data fields (including files) that should be sent to
  the HTTP server; note that when used for HTTP uploading, UploadFile() will actually return a string and
  a byte count of the resulting HTML page generated by the server (similar to DownloadFile()'s behaviour);
  note that your callback will be called first while uploading and then while downloading the server's
  response; a new constant #UPLOADFILE_RESPONSE had to be introduced since both #DOWNLOADFILE_STATUS and
  #UPLOADFILE_STATUS are defined as 0; authentification for HTTP upload is also supported (requested by
  Matthew Leaman) 
- New: DownloadFile() supports HTTP authentification now; just pass username and password as part of the URL
  (requested by Matthew Leaman)
- New: Base64Str() allows you decode strings from Base64 or encode them into Base64
- Change [Amiga]: Changed the way the event handler works; this will dramatically improve the raw performance
  of your script; the number of instructions per second is now significantly higher in comparison to older
  versions; just compare the performances of the Pang intro in 5.3 and 6.0 and you'll see what I mean
- Change [Amiga]: VWait() uses a different method now which should prevent speed loss when the system is
  not fast enough anyway
- New [SDK]: HWMCP_GETFPSLIMIT allows you to query the FPS limit set using SetFPSLimit()
- New: ReadShort(), ReadInt(), ReadFloat(), WriteShort(), WriteInt(), and WriteFloat() accept an optional
  argument now which allows you to switch to little endian byte order
- New: ReadFloat() and WriteFloat() accept a new precision argument now which can be used to read/write
  4 and 8 bytes floats (defaults to 8 bytes)
- New: Added DisableLineHook() and EnableLineHook() functions; you can use these to increase the raw
  performance of your script; please note that the line hook should only be disabled for brief periods of
  time or your display will become unresponsive; you have to ensure that the line hook gets called at
  least several times per second for your window to stay responsive
- New [SDK]: Added hw_FFlush() and hw_TmpNamExt() functions to DOSBase; the latter is an extended version
  of hw_TmpNam() that is only interesting on Amiga since it allows you to specify whether or not the file
  should be created in RAM
- Change: Platform-specific constants like #AMIGAICON_XXX are now defined on all platforms; this should make
  cross-compiling more convenient (suggested by ilbarbax)
- Fix [MorphOS]: Wrong size calculation for files larger than 4 GB when using FileSize(), GetFileAttributes()
  or NextDirectoryEntry()
- Change [MacOS]: Hollywood no longer uses the OS to save images in JPEG and PNG format
- Fix [MacOS]: Pasting alpha channel images from clipboard didn't work correctly
- Change [Amiga/MacOS]: For better cross-platform consistency, the inbuilt image loaders are now given
  priority over the OS native image loaders; Hollywood will first try to use its inbuilt loaders and fall
  back to the OS loaders only in case the inbuilt loaders fail
- New [SDK]: Image, anim, sound, and video plugins now support the optional HWEXT_XXX_NOAUTOINIT extension;
  if this extension bit is set, Hollywood won't automatically initialize the plugin on startup; instead,
  you'll have to activate it manually using the hw_AddLoaderAdapter() functions, for example from your
  RequirePlugin() function; in that case, the image/anim/sound or video plugin will only be activated
  if the user explicitly calls @REQUIRE on it
- New [SDK]: Added new APIs to deal with the chunk loader: hw_ChunkToFile() and hw_TranslateFileNameExt()
- Change: Linker no longer checks if the files specified in the preprocessor commands are in a supported
  file format; this allows you to compile applets/executables also on systems that don't support a
  certain file format
- New: GetFileAttributes() supports an additional argument now which allows you to specify the adapter
  that should be used to examine the file system object (see below)
- New: OpenFile(), OpenDirectory(), and @FILE and all other functions and preprocessor commands dealing with
  files (image, anims, sounds, videos) support a new optional table element named "Adapter" now which allows
  you to specify the file or directory adapter that should be used to open the file system object; this is
  similar to the "Loader" tag (see below); note that the "Adapter" tag can also be used to access plugins
  which haven't been activated yet; directly specifying its name with the "Adapter" tag will use the plugin
  even if it hasn't been activated; note that image/anim/sound/video plugins won't recognize the "Adapter"
  tag automatically; they need to be adapted to support this new feature before it's going to work
- New: #ATTRLOADER can be queried for types #BRUSH, #BGPIC, #SAMPLE, #MUSIC, #VIDEO, and #ANIM now  
- New: IsPicture(), IsAnim(), IsSample(), IsVideo(), and IsMusic() accept an optional table argument now
  that allows you to specify the loader to use for checking the file (see below)
- New: Many Hollywood functions which load files now support an optional "Loader" argument that can be
  used to specify which engine should be used to load the file; this is pretty useful to minimize
  overhead on loading operations; for example, if you load an image file with LoadBrush(), Hollywood
  will ask all image plugins if they want to open the file or not, then it will ask its inbuilt
  handler, then it will ask the OS's default handler; this can be quite some overhead which you can
  avoid by setting the "Loader" tag if you already know which engine should handle the file; you can
  also set the "Loader" tag to a combination of strings separated by the vertical bar character (|);
  the following special values are supported: "inbuilt", "native", "plugin", and "default"; the
  following commands and preprocessor commands support the new tag: LoadBrush(), LoadBGPic(), LoadAnim(),
  LoadSample(), LoadSprite(), OpenVideo(), OpenMusic(), @BRUSH, @BGPIC, @ANIM, @SAMPLE, @SPRITE, @VIDEO,
  @MUSIC; note that the "Loader" tag can also be used to access plugins which haven't been activated
  yet; directly specifying its name with the "Loader" tag will use the plugin even if it hasn't
  been activated
- New: Added FileAttributes() function which is similar to GetFileAttributes() but accepts a file object
  id instead of a filename; it also supports streaming and no seek file handles introduced with
  Hollywood 6.0 by setting the new fields "Streaming" and "NoSeek"; note that in contrast to
  GetFileAttributes(), FileAttributes() doesn't set the "Virtual" field
- New: Added streaming support to I/O handler; most of Hollywood's functions that deal with files can
  now handle files whose size is unknown or files which can only be read sequentially without the
  option to reposition the read/write cursor; streaming support can be useful for plugins which install
  a file adapter; FileLength() and FileSize() will return -1 now in case Hollywood doesn't know the
  size of the file at the time of the call
- New: Seek() accepts an optional third argument now which allows you to specify the seek mode; this
  can be either #SEEK_BEGINNING (the default), #SEEK_CURRENT, #SEEK_END; if you use #SEEK_CURRENT or
  #SEEK_END you can also specify negative seek offsets
- Fix [Android]: The "Orientation" tag in SetDisplayAttributes() did not lock the orientation in case
  it was the same as the current one (reported by Paul Bloedel)
- Fix [MacOS]: Crash when taking a screenshot of the desktop or when running in "DisplayDesktop" mode
  on 10.10 and up
- Change [MacOS i386]: The i386 version of Hollywood for Mac OS X now requires at least 10.6 (aka
  "Snow Leopard"); this change was necessary because Hollywood requires a new API introduced in 10.6 
- Change: All versions compiled with gcc use different optimization parameters now that help to reduce
  Hollywood's executable size without considerably reducing performance
- Fix: When using HexStr() with numbers that do not fit into 32-bits, the behaviour will no longer
  be undefined but HexStr() will simply wrap at the upper 32-bit boundary (reported by Nick Sommer)
- Change [Win32]: Initial window refresh is done immediately now which works around some problems
  with the legacy transition effect renderer
- New: Several vectorgraphics plugins can be used side by side now; this also allows you to use the
  new inbuilt vectorgraphics engine together with external vectorgraphics plugins; if layers are
  enabled, you can check the "VectorEngine" field set by GetLayerStyle() to find out which vector
  engine has created the layer; you can also switch vector engines by setting the "VectorEngine"
  field using SetLayerStyle(); pass "default" to use the new inbuilt vectorgraphics engine
- New: Hollywood's vectorgraphics library no longer needs an external plugin but also works without
  one; the inbuilt vectorgraphics engine currently doesn't support line dashing and has some problems
  with filling complex shapes but for most use cases it should work just fine; note that this inbuilt
  vectorgraphics engine is the default one now; if you want to use a vectorgraphics engine made
  available by a plugin you have to call the new SetVectorEngine() command first
- New: Functions that draw round shapes with antialiasing finally use real Bzier splines instead of
  polygon lines; this makes antialiasing in the Circle(), Ellipse(), and Arc() functions completely
  smooth now; drawing boxes with round corners using Box() will also use real Bzier splines now;
  applets that have been compiled using previous Hollywood versions will automatically use the old
  polyline based approach; if you really want to have this old approach with Hollywood 6.0 as well,
  set the "LineBasedShapes" tag to TRUE in the new LegacyControl() function
- Fix: DrawPath() didn't draw a correct shadow for types #SHDWWEST, #SHDWNORTHWEST, #SHDWNORTH,
  #SHDWNORTHEAST, and #SHDWSOUTHWEST when layers were disabled
- New: Added NUMCHANNELS console argument which allows you to increase (or decrease) the number of
  audio channels available to Hollywood scripts; by default this is set to 8 which has been the
  standard since Hollywood 1.0 and should be enough for most uses; still, you now have the possibility
  to change this setting 
- Fix: Crash when using certain transformation parameters on layers with a #FILLTEXTURE fill style
- New: PlayMusic() is no longer limited to playing just one music at a time; you can play as many
  music streams as you want now; this is useful, for example, if you have a game that plays background
  music as well as a talkie soundtrack on top of it; PlayMusic() will now no longer stop a music that
  is already playing; this is an API break so you need to adapt your scripts; for compatibility, though,
  PlayMusic() will automatically stop a playing music unless you explicitly enable the new multi-music
  feature by setting the "SingleMusic" tag to FALSE in the new LegacyControl() function
- New: Added LegacyControl() function which allows you to enable/disable certain legacy features  
- New: Added MemToTable() and TableToMem() functions to quickly copy table data into memory blocks and
  vice versa; item sizes of #BYTE, #SHORT and #INTEGER, signed and unsigned and with an optional endian
  switch are supported
- New: FlushMusicBuffer() can be used to flush a music's sample buffer; FlushMusicBuffer() will remove
  all buffered samples and immediately call your FillMusicBuffer() function to refill the music buffer
  with new data; this allows you to play audio and have changes take effect immediately without a
  two second buffering lag or so (requested by Ulrich Beckers)
- Fix [Win32]: When loading a sound file streamed via DirectShow as a sample, Hollywood installed a
  DirectShow server thread and allocated resources for it although that is not needed in this case;
  this could conflict with music playback and left a memory leak
- New [SDK]: Finally added a full documentation of all available plugin types and the plugin interfaces
  exposed by Hollywood; it turned out to be much longer than expected: it is now over 300 pages as a
  PDF and over 700 kilobyte as an AmigaGuide; this took quite a long time to write but it's very
  important to have this documented so that people can finally start writing plugins without having
  to ask me all the time
- Change: Added documentation for previously undocumented functions GCInfo() and CollectGarbage() which
  have been there since Hollywood 2.0
- Fix: Number of subsongs was always set to 1 for music streams loaded by plugins
- New [SDK]: Added hw_MapRGB() and hw_GetRGB() functions to GfxBase for easy conversion between pixel formats
- Change [Amiga]: cybergraphics.library is no longer required for Hollywood itself; it is only required for
  the default display adapter; this makes it possible to write custom display adapters which use other
  means of drawing graphics; it is possible to write a display adapter now which allows Hollywood to run
  on planar screens again!
- New [SDK]: Added hw_GetBitMapAttr() for querying bitmap attributes
- New [SDK]: GfxBase can now conveniently convert bitmaps (including their optional external mask or alpha
  channel) into a raw ARGB buffer using the new hw_BitMapToARGB() function; useful in connection with custom
  display adapters
- New [SDK]: GfxBase has support for several graphics operations on raw pixel buffers now: hw_RawBltBitMap(),
  hw_RawRectFill(), hw_RawWritePixel(), hw_RawLine() might come in handy in some situations, especially when
  implementing a custom display adapter
- New [SDK]: Added support for audio adapters; by installing an audio adapter a plugin can replace
  Hollywood's inbuilt audio driver completely and provide a custom way of audio playback; this might be
  useful in connection with some display adapters but it can also be used without a display adapter,
  e.g. if you want to do some recording etc.
- New: Added DEBUGOUTPUT console argument to enable debug output; this has the same effect as calling
  DebugOutput(True) at the beginning of your script
- New: Added REQUIRETAGS console argument; this is useful in connection with the REQUIREPLUGINS argument
  and can be used to pass additional arguments to a plugin's require function (arguments which would normally
  be specified after @REQUIRE); the format is like this: "name1[tag1=value1,...,tagN=valueN]...nameN[...]";
  note that REQUIRETAGS can only be used for plugins which have been passed to REQUIREPLUGINS as well; note
  that if you use REQUIREPLUGINS and REQUIRETAGS for a plugin its @REQUIRE preprocessor statement in the
  script will be ignored!
- New: SelectBrush(), SelectMask(), and SelectAlphaChannel() can now also be used with hardware brushes
  for hardware accelerated offscreen drawing; as only the Amiga version of Hollywood supports hardware
  brushes by default, this feature is only available on other platforms if there's a video bitmap adapter
  that supports it; on Amiga, SelectBrush() is supported by the default hardware bitmap renderer but not
  SelectMask() and SelectAlphaChannel()
- New: CreateBrush() can also create hardware brushes now if you specify the optional "Hardware" tag; it's
  also possible to create display dependent hardware brushes by specifying the new "Display" tag  
- Fix [Win32/MacOS]: Autoscaling using antialiased pixel interpolation didn't work without a double buffer
  being active
- Fix: When drawing graphics primitives with a border with auto scaling being active, Hollywood treated the
  border as if it was in layer scale mode
- New [Amiga]: ForceVideoMode() accepts a second optional argument now which can force the video renderer
  to draw from the main thread only; this is mainly for testing/debug purposes
- New [Amiga]: The datatype image loader now falls back to Hollywood's inbuilt image loader in case there
  is an error; this is useful in the rare case that there are no PNG, JPEG, BMP, or GIF datatypes available
  or the system is using an ancient picture.datatype that doesn't support the v43 capabilities
- New: CopyTable() can also create 'shallow' copies of a table, i.e. all items are just copied by reference
  instead of creating a completely independent copy; this saves resources and can also come in handy in
  case of self-referential tables which will lead to a stack overflow in a 'deep' copy (requested by Fabio
  Falcucci)
- Fix: CopyTable() and some other lowlevel VM functions didn't exit cleanly in case of a stack overflow
  (reported by Fabio Falcucci)
- New [IDE/GUI]: Added quick links to the Hollywood forums in both the Windows IDE and Amiga GUI
- New [IDE/GUI]: Added support for compiling for Linux ARM and support for compiling compressed applets and
  executables both in the Windows IDE and Amiga GUI
- Fix: Fixed a bug with wrong escaping of percent signs when running Hollywood with the COMPRESS argument;
  on AmigaOS 3 this was responsible for a complete freeze of Hollywood while it only had a cosmetic effect
  on other platforms
- Change: Full path to original script is no longer written to applets (suggested by Matthew Leaman)
- Change [IDE]: Windows IDE now also recognizes commands and constants from all other platforms supported
  by Hollywood; useful for doing cross-platform development using the Windows IDE
- New [GUI]: Added new switch to enable antialiased scaling when in auto- or layerscale mode
- Change [GUI]: Switch to make displays sizeable is no longer activated by default to avoid confusion with
  scripts that rely on "SizeWindow" being sent which is not done in case AUTOSCALE or LAYERSCALE are active
  (reported by Jrg Renkert)
- New [Amiga]: Added support for setting the screen's title text and pubscreen name when running in fullscreen
  mode; you can use the new tags "ScreenName" and "ScreenTitle" with @DISPLAY, CreateDisplay() and
  SetDisplayAttributes() for this; "ScreenName" can also be passed to OpenDisplay(); additionally, there's
  a new command named SetScreenTitle() which allows you to quickly change the screen title
- Fix [OS4]: Hollywood's error requester was not always put to the front
- New [Amiga/Linux]: OpenDisplay()'s optional table argument supports the two new options "XServer" (Linux)
  and "PubScreen" (Amiga) now; this is just a convenience feature to save a call to SetDisplayAttributes()
- Fix [Amiga]: Backfill windows can no longer be brought to the front by double-clicking them
- Change: OWNSCREEN console argument and "OwnScreen" display mode are no longer supported; the OWNSCREEN
  display mode was useful on AmigaOS only and it can now be replicated by specifying FULLSCREEN together
  with the new NOBACKFILL and NOSTYLEOVERRIDE arguments; they allow you to run Hollywood in fullscreen
  mode without a backfill and special fullscreen window styles
- Fix [Linux]: Hollywood didn't hide the launcher panel and title bar on Ubuntu when in full screen or 
  fake full screen mode
- New [Linux]: Added NOMOUSEHOOK argument which prevents Hollywood from installing a mouse hook that
  constantly polls the position of the mouse; this is only needed if the connection to the X server is
  slow and you need to save on bandwidth; on desktop systems it isn't required; if Hollywood is running
  without the mouse hook, you won't receive any more "OnMouseMove" events once the mouse pointer leaves
  your display's boundaries
- New [Linux]: Hollywood is no longer restricted to running on a single X server; instead, the X server
  can be different for each display; you can use the new "XServer" tag with @DISPLAY, CreateDisplay()
  and SetDisplayAttributes() to specify the X server the display should try to connect to; you can also
  query #ATTRXSERVER to find out the X server of a display; the XSERVER command line argument is still
  supported but will only affect the first display (requested by Tom C.)
- New: ChangeDisplayMode() now also allows you to change the resolution of your script if it is already
  running in fullscreen mode, e.g. you could switch from a 640x480 to a 800x600 fullscreen display now
- Change [Linux]: Hollywood supports libXrandr for dealing with fullscreen modes now; libXxf86vm is still
  supported for older systems but libXrandr is given priority over it (if available)
- New: Added MONITOR console argument to specify on which monitor the display should be opened
- Fix [Linux]: On systems with more than one monitor Hollywood often did wrong position calculations, e.g.
  when using convenience constants like #CENTER, #RIGHT, etc.; this is handled correctly now (reported
  by Tom C.)
- Change: @SCREEN and @BACKFILL are deprecated now; instead, you should use the corresponding tags in
  @DISPLAY, CreateDisplay(), OpenDisplay() or ChangeDisplayMode(); the reason why @SCREEN and @BACKFILL
  have to be deprecated is that multi-monitor support allows you to have multiple displays running in
  fullscreen mode and they could also contain multiple backfills; that's why screen and backfill settings
  are part of the display settings now (again! it was already like that prior to Hollywood 4.5); the
  @SCREEN and @BACKFILL preprocessor commands are still supported for compatibility; everything you
  specify here will be mapped to the first display
- New: Added MODEREQUESTER and ASKDISPLAYMODE console arguments; these correspond to the respective tags
  that can be passed to @DISPLAY, CreateDisplay() and OpenDisplay()  
- New: OpenDisplay() and CreateDisplay() can handle the following new modes now: "Ask" and "FakeFullScreen"
- New: You can force the mode requester to be popped up by setting "Mode" in @DISPLAY to "ModeRequester"
  or passing "ModeRequester" to OpenDisplay() or CreateDisplay()
- New [Win32/MacOS/Linux]: The mode requester that allows the user to select a screen mode from all modes
  supported by the monitor is now available on non-Amiga systems too
- Change: Display attributes specified in @DISPLAY no longer override the arguments specified on the
  command line; instead, it's the other way round now; command line arguments override @DISPLAY arguments,
  but only for display #1 (see below); for all other displays the command line arguments don't have any effect;
  i.e. specifiyng {Borderless=False} in @DISPLAY but running the script using the BORDERLESS argument
  will still give you a borderless display; to prevent this, compile your script using the LOCKSETTINGS
  option 
- Change: Two changes in the console arguments for the sake of consistency: The DEPTH argument is now
  called SCRDEPTH and AUDIODEV is now called AUDIODEVICE  
- New: The new console argument ALLDISPLAYS will apply all options that affect the display's style to all
  displays instead of only the first; this argument can be used to replicate the behaviour of previous
  Hollywood versions
- Change: All the command line arguments that affect the display's style (e.g. BORDERLESS, SIZEABLE...)
  are only applied to the very first display; before v6.0 they were applied to all displays  
- Fix: Unnecessary allocation of back bitmap in case a transparent display was opened using OpenDisplay()
  on all systems except AmigaOS 3  
- New: @BACKFILL supports "SmoothScale" argument now which turns on interpolated scaling if "ScalePicture"
  has been set to TRUE  
- Fix: Picture backfill mode did not handle alpha channel brushes correctly
- New: The optional table argument of OpenDisplay() and ChangeDisplayMode() supports a new option tag
  named "Backfill" now; this table field allows you to configure the settings for the backfill window
  if the display is to be opened in fullscreen mode; the fields supported by this option are similar to the
  @BACKFILL preprocessor command  
- New: OpenDisplay() accepts a table argument in the optional argument 2 now which, among other things,
  allows you to specify whether or not the display should be opened in fullscreen mode; previously, this
  wasn't possible directly; you always had to open the display first and switch modes then using
  ChangeDisplayMode(); now this is possible within a single call to OpenDisplay(); the following other
  options are supported by this new table argument as well: "Monitor", "ScrWidth", "ScrHeight", "ScrDepth",
  "NoSelect"; the old syntax with a boolean to turn off display selection in the second argument is still
  supported for compatibility
- Change: The mode switch hotkey (CMD+RETURN) now checks which monitor the display is currently on and
  then puts this monitor into fullscreen mode; previously, always the first monitor was put into fullscreen
  mode no matter which monitor the display was currently on
- New: ChangeDisplayMode() accepts an optional table argument now which allows you to specify the target
  monitor if the display is to be put in fullscreen mode; this has the same functionality than setting
  the "Monitor" tag in @DISPLAY or CreateDisplay() 
- New: Added support for monitor-based fullscreen modes; this means that if you have multiple monitors
  installed, you can put several displays into fullscreen modes on separate monitors; to specify the target
  monitor for a display's fullscreen mode, use the new "Monitor" tag that is available in @DISPLAY or
  CreateDisplay() 
- Change: ChangeDisplayMode() no longer puts all displays into fullscreen mode but only the active one;
  this is an API break and might require you to update your scripts; the old behaviour only made sense
  on AmigaOS anyway because on all other systems fullscreen mode was restricted to one display; if you
  want to replicate the old behaviour on AmigaOS, just move all other displays to the screen that will
  be opened by ChangeDisplayMode(); the new behaviour of ChangeDisplayMode() on AmigaOS is that the command
  will open a new screen for every display you put into fullscreen mode with it  
- Change: GetDisplayModes() accepts an optional argument now which allows you to specify the monitor whose
  display modes should be queried and returned
- New: #ATTRMONITOR allows you to query the display's current monitor and #ATTRHOSTMONITORS allows you
  to query the number of available monitors  
- New: Added support for multiple monitors; you can use the new GetMonitors() command to get information
  about all available monitors and the new "Monitor" tag with @DISPLAY, CreateDisplay() and SetDisplayAttributes();
  if the "Monitor" tag is specified, all display coordinates used with MoveDisplay(), CreateDisplay(),
  ChangeDisplaySize(), SetDisplayAttributes(), etc. will be relative to the specified monitor's top-left
  corner; monitors are enumerated starting from 1 for the first monitor (this is also the default); note
  that the geometry returned here is platform dependent: on Windows monitors to the left of the primary
  monitor will be mapped to negative coordinate space so that the primary monitor always has its origin
  at (0,0) whereas on Linux negative coordinate space isn't used so that it can happen that the primary
  monitor starts at (1920,0) in case a 1920x1080 secondary monitor is aligned to the left of the primary
  monitor; Hollywood cannot take these platform dependencies away from you because they're tied to the
  whole system coordinate space  
- Change: Last two arguments of ChangeDisplayMode() are now optional if you pass #DISPMODE_FULLSCREEN; they
  default to the current display dimensions  
- Fix [OS4]: Minor datatype alpha channel handling problem (reported by Nick Sommer)
- Fix [MorphOS]: Read beyond memory boundaries when playing YUV encoded videos using hardware acceleration
- Fix: Inbuilt BMP loader didn't handle 16-bit BMPs correctly (reported by Nick Sommer)
- Fix [Win32]: DebugPrint() truncated the strings at 2048 bytes when the Win32 built of Hollywood opened
  a custom console (reported by Fabio Falcucci)
- Fix [Win32]: When working with the IDE DebugPrint() never forwarded more than 2048 bytes from Hollywood
  to the IDE (reported by Fabio Falcucci)
- Fix: Mouse pointer wasn't hidden when over backfill windows in fake fullscreen mode
- Change [Win32]: ListRequest() also accepts double-click on items now
- Fix [Win32]: Window positions and sizes are no longer messed up when switching back from fullscreen mode
- Fix [Android]: SystemRequest() didn't work correctly in case the gadget string had more than 3 different
  choices (reported by Xabier Payet)
- Fix: Memory access fault when freeing a display at a certain point of time in the WaitEvent() cycle
  (reported by Fabio Falcucci)
- New: #SELMODE_COMBO supports a new mode now: if you pass 2 as the mode argument, Hollywood will merge
  alpha and color channels of the source and destination images as if they were drawn on top of each other
  (requested by Niels Schapke and Fabio Falcucci)
- Fix: Layers with alpha channel weren't redrawn correctly while #SELMODE_COMBO was active
- New: TEMPDIR argument allows you to configure where Hollywood should store its temporary files; pass
  "." to indicate the current directory; this is especially useful on AmigaOS where Hollywood stores
  temporary files in RAM by default; if you're low on RAM or need to compile huge scripts you can use
  TEMPDIR to have temporary files stored somewhere else (e.g. on hard disk)
- New: All icons specified in @APPICON or the respective ICXXX command line arguments are now also linked
  into the applet if you compile scripts as applets; on Windows, Linux, and AmigaOS 4 these icons are
  now also loaded from the applet in case you're running an applet with Hollywood
- Fix [Win32]: Specifying an initial path in FileRequest() didn't work on Windows 7; this is actually
  an incompatibility in Windows 7; I have added a workaround for it (reported by Juan Carlos)
- Fix: Fixed a possible race condition in connection with temporary files; GetTempFileName() will now
  create an empty file instead of just returning a non-existing filename; by creating an empty file
  for you Hollywood can prevent other processes from trying to use the very same temporary filename
  (reported by Matthew Leaman)
- New: #ATTRSCALEWIDTH, #ATTRSCALEHEIGHT, and #ATTRSCALEMODE can be queried now for #VIDEO as well
- Fix: When using the "Desktop" tag in @SCREEN or @DISPLAY the initial BGPic had some wrong flags set
  which could cause trouble when trying to display it later using DisplayBGPic() or DisplayTransitionFX()
  (error could be seen by running the Intro.hws example)
- New [OS4]: Added support for hardware accelerated video scaling; this should also give older
  systems that do not support hardware accelerated YUV to RGB conversion a good speed-up when playing
  scaled videos with Hollywood
- New [OS4]: Added support for hardware accelerated video rendering; this gives a great speed-up on
  systems that support hardware accelerated YUV to RGB conversion like the new Radeon HD driver for
  the X1000
- Change [Amiga]: Dropped support for mpega.library; mpega.library caused quite some trouble because
  it usually recognized every file format as an MPEG stream leading to several unwanted effects; if
  you need to play MP3s you can just use a plugin like avcodec.hwp instead
- New [Amiga]: Audio driver completely rewritten; it now uses non-exclusive device audio by default
  which means that Hollywood's audio output will no longer block other programs' audio output; this
  feature was requested by many users so here it is; the only feature that is currently unsupported
  by the new audio driver is on-the-fly changing of volume, pitch or panning of samples that are
  currently playing; the old audio driver is still available and can be activated by using the new
  LEGACYAUDIO command line argument; note that for performance reasons, the 68k version of Hollywood
  will use the old audio driver by default; you can force the 68k version to use the new audio driver
  by specifying the NOLEGACYAUDIO command line argument
- New [OS4]: Added an alternative for specifying the initial AmiDock icon: You can specify the identifier
  of a brush in the new "DockyBrush" tag in the @OPTIONS preprocessor command; if this is specified,
  Hollywood will use this brush as the initial docky icon; your script will also get an app docky then;
  this is useful if you'd like your docky to have a custom size, i.e. different from the icon sizes
  supported by @APPICON, or if you want your script to use an app docky right from the start
- New [OS4]: Added ChangeApplicationIcon() which allows you to change the docky icon of your application
  at runtime; the command accepts one or two brushes; if you specify two brushes, your docky icon will
  have two different states; if you specify just one brush, you will get an app docky; the advantage of
  app dockies is that they can have a context menu and that you can change their image very quickly, even
  making docky animations possible; change two state docky icons, however, always requires a complete
  relayout of AmiDock which is very slow
- New [OS4]: Added support for docky context menus: You can assign a menustrip to your application's
  docky by specifying the new "DockyContextMenu" tag in the @OPTIONS preprocessor command; note that
  docky context menus are only supported by app dockies; thus, if you choose to add a context menu to
  your application's docky, Hollywood will automatically use an app docky instead of a standard docky;
  the main difference between the two is that app dockies only have a single state image in the dock
  while standard dockies support icons with two states; the specified menu strip must only contain a
  single menutree with no subitems; short cuts are not supported because it doesn't make any sense in
  dockies
- New: Object type #MENU is now available and can be used for storing custom data; you can also query
  #ATTRCOUNT on it
- New: #ATTRMENU can be queried for #DISPLAY now using GetAttribute(); it will return the id of the
  menustrip currently associated with a display or -1 for no menustrip
- New: Added some more functions to deal with menustrips: SelectMenuItem(), DeselectMenuItem(),
  IsMenuItemSelected(), DisableMenuItem(), EnableMenuItem(), IsMenuItemDisabled(); they all require
  the id of a display as their first argument because menustrips can be associated with multiple
  displays
- New: Added support for menustrips; many users have asked for that feature over the last years so here
  it is! You can use the function CreateMenu() or the new @MENU preprocessor command to create a new
  menustrip; the menustrip can then be assigned to a display by using the new "Menu" tag with the
  @DISPLAY preprocessor command or the CreateDisplay() or SetDisplayAttributes() functions; please note
  that because of limitations in AmigaOS, Hollywood generally doesn't allow any nesting levels in menu
  trees that are greater than 2; two different menu item types are supported: standard and toggle items;
  additionally, you can also define hotkeys for your menu items; to listen to menu events, install an
  event handler for the new "OnMenuSelect" event which will trigger whenever the user selects a menu item;
  note that full screen displays don't support menustrips; to remove a menustrip from a display, call
  SetDisplayAttributes() with "Menu" set to -1; this is currently not supported on Linux and Android
  because there is no easy way to get menustrips on these systems
- Change [OS4]: Hollywood no longer creates a temporary file when iconifying a script that does
  not provide a default app icon
- Change [OS4]: Default app icon uses 64x64 pixels in true colour with alpha channel now (thanks to
  Martin Merz for the icon!)
- Fix: Memory leak when assigning custom data to objects of type #TIMER using SetObjectData()
- New [OS4]: Added "OnDockyClick" event handler; this event handler will trigger if the user clicks the
  app's docky icon
- New: @APPICON preprocessor command supports a new "DefaultIcon" tag now; this allows you to specify a
  default icon size; this is currently only used on AmigaOS4; if you set "RegisterApplication" to TRUE
  and specify a default icon size, Hollywood will use this icon for AmiDock (instead of the program's
  *.info file)
- New: All size tags in @APPICON support a second icon state now, i.e. there is a now a second tag for
  each size that allows you to specify a second state image, e.g. "IC32x32S" for "IC32x32"; this is
  needed because icons on Amiga-compatibles usually have two different states
- New: Added support for 64x64 and 96x96 icon sizes through new ICONXXX arguments and tags in @APPICON
  respectively; 96x96 sized icons are currently not used on any platform but 64x64 is the default icon
  size on AmigaOS 4.1
- New [OS4]: Added ShowRinghioMessage() command which allows you to show a Ringhio notification; this
  will only work if your script is a registered OS4 application (see below); it's also possible to get
  notified through an "OnApplicationMessage" message if the user double-clicks the Ringhio notification
- New [OS4]: InstallEventHandler() supports the "OnApplicationMessage" event handler now; if you enable
  this event handler, you'll be able to receive messages from other OS4 programs registered through
  application.library
- New [OS4]: Added support for application.library; if you want your script to register as an OS4 application,
  simply set the "RegisterApplication" tag in @OPTIONS to TRUE; you'll then be able to use the following
  new functions that deal with OS4 application objects: GetApplicationList(), SendApplicationMessage()
- New [Amiga]: Added "NoCommodity" tag to the @OPTIONS preprocessor command; if you set this to TRUE,
  Hollywood won't add itself to the system's commodity list
- New: Added DISABLEBLANKER console argument and "DisableBlanker" tag for @DISPLAY; you can use these options
  to disable the screen blanker either for the specified Hollywood display or globally if you use the
  console argument (requested by Richard Lake and Rdiger Solbach)
- New: HavePlugin() allows you to check whether a certain plugin is available
- New: Added support for on-the-fly plugin loading using the new LoadPlugin() command; this command
  allows you to dynamically load plugins at runtime; additionally, LoadPlugin() can also be used to
  call the plugin's @REQUIRE constructor code; note that not all plugins support dynamic runtime loading;
  i.e. it is not possible for plugins which install a display adapter or a script parser
- New: Table returned by GetPlugins() and GetVersion().Plugins contains the new fields "ModuleName" and
  "Disabled" now for every plugin now; "ModuleName" can be used to safely identify this plugin because
  the module name is unique among all loaded plugins and "Disabled" tells you about the plugin's state
- New: Added EnablePlugin() and DisablePlugin() commands; you can use these commands to temporarily disable
  plugins; note that this is only supported for plugins that provide loaders/savers for additional formats
  or file/directory adapter plugins; it is not supported for plugins that install new commands or provide
  other lower level facilities
- New [SDK]: hw_ConvertString()/hw_FreeString() can be used for converting strings between different
  encodings
- New [Amiga]: #FILEATTR_HIDDEN is now supported for Get/SetFileAttributes(); it wasn't supported before
  because this attribute's bit definition was actually "hidden" in the AmigaOS SDK
- New [Amiga]: FileRequest() accepts a new mode flag now: #REQ_HIDEICONS will suppress the listing of
  icon files (*.info) in the requester (requested by Jrg Renkert)
- Fix [Amiga]: Requester functions didn't open on the front screen in case the current display was hidden
  (reported by Jrg Renkert)
- New [GUI]: Preferences allow you to specify additional arguments to be passed to the interpreter or
  compiler now; handy if you temporarily need to use -resourcemonitor or some other switches
- New: GetAttribute() allows you to query #ATTRADAPTER for #FILE and #DIRECTORY now; it returns the name
  of the adapter that was used to open the file/directory or "default" for no adapter
- New [SDK]: ZBase exports some more functions from zlib now
- New [SDK]: CRTBase has support for several new functions from the C runtime now (date and time functions
  and several DOS functions)
- New [SDK]: Added hwos_Stat() and hwos_Seek64() to DOSBase
- New [SDK]: Added support for file and directory adapters; these plugin interfaces allow plugins to hook
  into Hollywood's file handler and intercept IO for certain file or directory types by providing custom IO
  implementations for them; these plugin interfaces could be used to write plugins that allow all Hollywood
  functions to be able to load certain packed files "automagically" or parse archiver formats like ZIP or TAR
  like normal directories using OpenDirectory(), etc.; file and directory adapters can be registered using
  the new hw_AddLoaderAdapter() and hw_RemoveLoaderAdapter() functions in SysBase; please note you
  should only register file and dir adapters when the user explicitly requests it by calling @REQUIRE on
  your plugin; do NOT install them on InitPlugin() unless you have a very good reason!
- Change: When switching from windowed to fullscreen mode, Hollywood will memorize the old display settings
  now and restore them when switching back from fullscreen to windowed mode
- Fix: Small drawing error in WavyLogo.hws when using wave level 5
- New: @REQUIRE allows you to specify an arbitrary number of tags now using an optional {} argument; all the
  tags specified here are directly forwarded to the plugin enabling it to do some user-defined initialization;
  there is a slight syntax change: the table containing these arguments must follow directly after the
  module name; the desired version and revision numbers may be specified using the new "Version" and "Revision"
  tags; the old syntax is still supported for compatibility reasons
- New [IDE/GUI]: Number of plugins and number of functions made available by plugins is now shown in the
  system information dialog
- New [IDE/GUI]: Plugins can be enabled/disabled from the Windows IDE and the Amiga GUI now; pressing the
  new enable/disable button will just rename the plugin to include/exclude the "_" prefix
- New: Plugins that have their filename prefixed with a "_" are automatically skipped on startup but scripts
  can load them later using @REQUIRE
- Fix: SKIPPLUGINS was broken in version 5.3
- New: Hollywood supports Linux for the ARM architecture now; this allows you to compile your scripts for
  several embedded Linux systems including the popular Raspberry Pi!
- New [Linux]: 16-bit screenmodes are now supported
- Change [MacOS]: Timer scheduler runs in a separate, higher-priority thread now which should result in some 
  better precision
- New: SaveBrush() can also save hardware brushes now
- New: #ATTRADAPTER can be queried for #DISPLAY and reports the current display adapter in use or "default"
  for no adapter
- New: "ModeSwitch" event callback message contains two new fields now (Width/Height) which inform you about
  the display's width and height after the mode change
- Fix [Win32]: PauseMusic() didn't work correctly for non-seekable music objects (the music was rewinded
  instead of paused)
- Fix [SDK]: SeekStream() is no longer called if HWSNDFLAGS_CANSEEK wasn't set; exception: it is still
  called to rewind a stream; in that case 0 is passed as the new position; every sound plugin has to
  support rewinding
- Fix: Box() didn't respect the AnchorX and AnchorY tags when running in fastdraw mode (reported by Ray)
- Fix: Drawing partly transparent shapes with shadow and anti-aliasing enabled did not work correctly
  (reported by Matthias Rustler)
- Fix [Amiga]: SetWBIcon() didn't allow you to change the app icon while Hollywood was in iconified state
  (reported by Niels Schapke)
- Change [Amiga]: Hollywood is more economical in its message port usage now so that it doesn't run out of
  message ports so easily when using MUI Royale and a Rexx port for example (reported by Richard Lake)
- Fix: Possible crash in OpenConnection() and IsOnline() when trying to close Hollywood's window while
  Hollywood was trying to make a connection
- Fix: Several memory access fault fixes in DownloadFile() (reported by Richard Lake)
- Fix: AnimPlayer.hws didn't verify frame range before calling GetAnimFrame() (reported by Lazar Zoltan)
- Fix [Amiga]: IsPicture() didn't return correct alpha channel information for TIFF images
- Fix [Win32]: NextDirectoryEntry() was unable to handle files starting with a dot correctly (reported
  by Fabio Falcucci)
- New: GetAttribute() allows you to query #ATTRDISPLAY for type #BRUSH now; this will return the identifier
  of the display the specified brush is attached to or -1 if the brush is a display-independent brush
- New: Added support for display-dependent hardware brushes; to create a display dependent hardware brush
  simply specify the ID of the display in the new "Display" tag in @BRUSH, LoadBrush(), or CopyBrush();
  note that all display-dependent hardware brushes can only be drawn to the display they belong to and
  they'll be automatically freed when the display is closed; also note that display-dependent hardware
  brushes are currently only supported by plugins not by Hollywood itself; the hardware brushes supported
  on Amiga systems are not display-dependent
- Fix [OS3]: Palette-based and gray channel PNGs with alpha channel couldn't be loaded (reported by Nick Sommer)
- Fix [Amiga]: IsPicture() didn't return correct alpha channel information for palette-based and gray-channel
  PNGs with alpha channel (reported by Nick Sommer)
- New: Added REQUIREPLUGINS argument which can be used to initialize plugins from the command line instead
  of from the script; specifying a plugin here has the same effect as defining the respective @REQUIRE
  preprocessor command; if you want to specify multiple plugins, separate them using the "|" character
- Change [MacOS i386]: The i386 version of Hollywood for Mac OS X doesn't work on 10.4 any longer; it now
  requires at least Mac OS X 10.5 ("Leopard"); this change was necessary because of some upcoming plugins
  which require 10.5
- Change: Second argument in FileRequest() is optional now (defaults to "" which means show all files)
- New [SDK]: The icons installed by the script can now also be accessed by plugins using the new
  hw_GetIcons() and hw_FreeIcons() functions in GfxBase; this is useful when implementing a custom display
  adapter
- New [Win32/Linux]: The icons specified in @APPICON or using the ICONXXX command line arguments will now
  also be loaded when just running a script; previously, the icons specified here were just used by the
  linker to compile them into executables (so you could only see them when running Hollywood-compiled
  programs); now they will also be visible when you run Hollywood scripts without compiling them into
  executables
- Change [SDK]: Satellite displays will now also get a HWSATOP_VWAIT notification when Hollywood executes
  a vblank wait; closed displays will no longer run their own vblank waits; in order to maintain
  compatibility with older versions you have to request HWSATOP_VWAIT notifications explicitly by setting
  the HWADS_DISPATCHVWAIT tag when calling hw_AttachDisplaySatellite()
- Fix: Memory corruption in BeginDoubleBuffer() when autoscaling was active and the current BGPic's size
  was bigger than the destination scaling size
- New [SDK]: GfxBase provides bitmap locking functions now: hw_LockBitMap() and hw_UnLockBitMap(); note
  that these only work with normal bitmaps; video bitmaps cannot be locked
- New [SDK]: Added support for bitmap adapters; this new plugin capability allows you to completely
  replace Hollywood's inbuilt bitmap handler with your own functions; note that these normal bitmaps should
  be stored in memory that can be efficiently accessed (read/write) by the CPU because Hollywood will
  need to access the raw pixel data of normal bitmaps quite oftenly; for bitmaps that should be handled
  by the GPU, you should use a video bitmap adapter; also note that bitmap adapters (both video and normal
  bitmap adapters) can only be used in connection with a custom display adapter
- New [SDK]: Added support for double buffer adapters; if your plugin installs a custom display adapter
  and a video bitmap adapter it might also want to provide a double buffer adapter to do optimized
  drawing without having Hollywood get in the way with anything that could throttle performance; by
  providing a custom double-buffer adapter, you have complete freedom how double-buffering is handled;
  note that your custom double-buffer will only be used if the user sets "Hardware" to TRUE in
  BeginDoubleBuffer(); otherwise, Hollywood's inbuilt double-buffering technique is used
- New [SDK]: Added support for video bitmap adapters; this feature allows plugins to provide their own
  way of allocating and handling bitmaps managed by the GPU; whenever the user allocates a bitmap with the
  "Hardware" tag set to TRUE, Hollywood will ask the plugin to allocate this bitmap; this makes it possible
  to use hardware bitmaps on other platforms as well (if there's a plugin that can handle them); this is
  useful because only the Amiga version of Hollywood has inbuilt support for hardware bitmaps at this time;
  using the new plugin API, this can be extended to other platforms as well; note that if a plugin provides
  a video bitmap adapter it also has to provide a display adapter
- New [SDK]: Added support for requester adapters; a requester adapter can be used to replace Hollywood's
  inbuilt requester functions with custom ones; this can be useful in connection with some display adapters
  that have their own requester functionality etc.
- New [SDK]: Added support for timer adapters; this allows you to replace Hollywood's inbuilt timer
  functionality with a custom one; this might be useful in connection with some display adapters
- New [SDK]: hw_LogPrintF() can be used for debug output
- New [SDK]: Added hw_RegisterEventHandlerEx(); this allows you to register a custom event handler
- New [SDK]: Extended support for callbacks in SysBase: hw_DisableCallback() and hw_UnregisterCallback()
  are available now
- New [SDK]: SysBase provides functions for semaphore handling now
- New [SDK]: SysBase provides new functions now that are necessary to implement the event handler of
  display adapters
- New [SDK]: LuaBase exports several new Lua functions now
- New [SDK]: Added support for Lua gates to SysBase; this is probably of not much use for now
- New [SDK]: Added support for display adapters; this is a revolutionary feature because it allows you to
  replace Hollywood's default display adapter completely and install a custom display adapter which might
  want to use an entirely different toolkit; this opens up great new possibilities and can be used to
  adapt Hollywood to all kinds of new environments (e.g. OpenGL or other toolkits...); to install a new
  display adapter, use the new hw_SetDisplayAdapter() plugin API
- New [SDK]: Plugins can now request to be called whenever the script calls the @REQUIRE preprocessor
  command; this is useful if you do not want your plugin to be activated by default whenever Hollywood
  starts; instead, you can choose to activate your plugin only when the user calls @REQUIRE on your
  plugin
- Change: Core event system rewritten; it no longer uses an event sink that is of a static size but uses a
  garbage collecting mechanism instead; event timeout has been raised to 60 seconds from (1.5 seconds);
  you can use SetEventTimeout() to change this limit
- Fix [Win32]: Crash when "OnMusicEnd" callback caused an immediate exit, e.g. by calling End() or causing
  an error
- New: Added EXPORTPREPROCS argument which allows you to export a list of all native preprocessor commands
  to a file; useful for IDEs that want to offer syntax highlighting for preprocessor commands
- New: HaveItem() allows you to check whether a table item exists; this is a convenience function for an
  IsNil(RawGet(...)) call but in comparison to RawGet() it also does a case insensitive comparison while
  RawGet() is case sensitive
- Fix: Hollywood also recognizes standard JPEG images that use "Lavc" instead of JFIF now (reported by Paul
  Bloedel)
- Fix [Win32]: Deadlock when calling PlayMusic() after an "OnMusicEnd" notification without explicitly
  stopping the music using StopMusic()
- New: Added ArrayToStr() function as a pendant to StrToArray() which has been there since Hollywood 2.0
- Fix: Function name could not be determined correctly for functions made available by Hollywood plugins;
  their names were always presented as "?"
- New: Added PatternFindStrShort() function which basically does the same as PatternFindStrDirect() but doesn't
  return the find positions; instead, the captured strings are returned directly
- New: Added PatternFindStrDirect() function which does the same as PatternFindStr() but can be used without
  a generic For loop; PatternFindStrDirect() will return the start and end indices of the first match of the
  specified pattern and it will also return the captured strings
- Fix: RepeatStr() now also works with a count value of 0; simply returns an empty string
- New: Added IsNil() function; this is a convenience function to check a variable against Nil; previously,
  this had to be done using GetType()
- Change: GetAttribute() can access objects now which have been flagged as gone internally because they
  have been freed but are still attached to a layer; you may still access them via GetAttribute() now
  but all other commands will refuse working with them; affected types of this change are #ANIM, #BRUSH,
  #BGPIC, #TEXTOBJECT, and #VIDEO
- New: Added DisplayVideoFrame() command which works in the same way as the DisplayAnimFrame() command
  except that it inserts a video layer; currently only works with layers enabled
- Fix: Crash when using effects from the following groups in the undocumented BGPicEmu mode (for internal use
  of Hollywood Designer only) together with layerscale when layerscale was cancelled internally because
  the dimensions arrived back at the original dimensions, e.g. after maximizing a window and then undoing
  this maximization again; the following effects were affected: #PUSHLEFT, #PUSHRIGHT, #PUSHTOP, #PUSHBOTTOM,
  #HOPENGATE, #VOPENGATE, #HCLOSEGATE, #VCLOSEGATE, #ZOOMIN, #ZOOMOUT, #CRUSHLEFT, #CRUSHRIGHT, #CRUSHTOP,
  #CRUSHBOTTOM, #HFLIPCOIN, #HLOWFLIPCOIN, #VFLIPCOIN, #VLOWFLIPCOIN, #SLIDELEFT, #SLIDETOP, #SLIDEBOTTOM,
  #SLIDERIGHT, #CARDTOP, #CARDBOTTOM, #TURNDOWNLEFT, #TURNDOWNTOP, #TURNDOWNBOTTOM, #TURNDOWNRIGHT, #PIXELZOOM2;
  this bug was introduced in Hollywood 5.0
- New: Added #ATTRPLAYING and #ATTRPAUSED attributes which allow you to query the state of a video or a video
  layer; supported for types #LAYER and #VIDEO; also supported for #MUSIC and #SAMPLE (#ATTRPAUSED not
  supported for #SAMPLE because sample playback currently can't be paused)
- New: Added #ATTRID for GetAttribute() type #LAYER; this returns the identifier of the object selected into
  the specified layer (only applicable for layer types #ANIM, #BRUSH, #BRUSHPART, #BGPICPART, #TEXTOBJECT,
  #VECTORPATH, #VIDEO)
- New: GetAttribute() now supports #ATTRDURATION, #ATTRPOSITION, #ATTRCANSEEK, and #ATTRFORMAT for type #LAYER
  if the specified layer is a video layer
- New: #ATTRNUMFRAMES now also supported by video layers
- New: SetLayerStyle() and GetLayerStyle() work with video layers now; you can modify the following fields:
  PartX, PartY, PartWidth, PartHeight; GetLayerStyle() will also return the id of the video handle but you
  cannot change it using SetLayerStyle()
- New: Added several functions to deal with video layers: PlayLayer(), StopLayer(), PauseLayer(), ResumeLayer(),
  SeekLayer(), and SetLayerVolume(); these work in the same way as their counterparts in the video library
  but they expect a layer id instead of a video object id; of course, they'll only work with video layers
- New: InsertLayer() can also insert layers of type #VIDEO now; note that if you use the same video handle
  for multiple layers, Hollywood will silently clone the video handle; you can use GetLayerStyle() to find
  out the id of the video handle used for a specific layer
- New: Added support for video layers; this allows you to apply all of Hollywood's layers functions to videos
  as well, e.g. you can rotate and transform them, apply filters, transparency, show and hide videos using
  transition effects etc.; this is very powerful and requires lots of CPU power to work smoothly; to create
  a video layer, simply call PlayVideo() with the "UseLayer" field set to TRUE in the new optional table
  argument; this optional table argument also accepts Hollywood's standard drawing commands now but only in
  connection with "UseLayer" set to TRUE; note that in contrast to non-layered videos, video layers will not
  be stopped when displaying a new BGPic because they can also be selected into an off-screen BGPic using
  SelectBGPic(); also note that video layers only work with #VIDDRV_HOLLYWOOD as the video driver (but this is
  the default)
- Fix: DisplayAnimFrame() and PlayAnim() (the latter only affected when layers were disabled) didn't respect the
  scaling settings of the anim if that anim had been loaded with "FromDisk" set to TRUE and its size had been
  changed through ScaleAnim() instead of through the standard draw commands 
- New: @VIDEO and OpenVideo() accept an additional table argument named "Driver" now which allows you to specify
  the video driver to use on a per-call basis; previously it was impossible to enforce this because the
  ForceVideoDriver() command could not be called at preprocessor level [VOID; please use the new "Loader" tag
  instead]
- Fix [MacOS/Win32]: OpenVideo() no longer uses temporary files when driver is #VIDDRV_HOLLYWOOD and Hollywood's
  chunk loader is used; should speed up loading videos compiled into executables significantly
- Change: Hollywood will automatically compile an applet now if EXETYPE isn't specified and the specified output
  filename ends in *.hwa
- Fix: InsertLayer() ignored the position argument when used with #ANIM and always inserted the anim layer as
  the last layer on the stack (topmost)
- Fix: Unnecessary double refresh on internal layer regeneration under certain circumstances
- Fix: StopVideo() could also be called on a non-playing video which resulted in a massive crash
- Fix: Position inconsistency due to rounding inaccuracies between ShowLayer() and internal layer regeneration
  after a major change, e.g. after changing the contents of a brush layer
- Fix: EndSelect() didn't check if one of the SelectXXX() commands had been called earlier which could lead to
  a corrupted environment when you called EndSelect() without calling SelectXXX() before; the corrupted environment
  was then prone to random crashes
- Fix: FreeDisplay() didn't complain when trying to free a display that had a video attached which resulted in a
  crash
- Fix: Minor visual artefact when using #WALLPAPERLEFT, #WALLPAPERTOP, #ROLLLEFT, or #ROLLTOP with HideLayerFX(),
  RemoveLayerFX(), or UndoFX() in asynchronous mode
- Fix: #SUN, #STAR, and #CLOCKWIPE didn't work correctly with HideLayerFX(), RemoveLayerFX(), and UndoFX() when
  used in asynchronous mode

Version 5.3     (05-Jul-13)

- Change: Updated Hollywood documentation
- Change: Updated catalog descriptions and German translation; added new developer files for doing
  new translations
- Change: Updated the Hollywood GUI (Amiga) and IDE (Windows)
- Fix [Amiga]: Installer didn't work with paths that had spaces in them; astonishing that it took
  over 10 years for somebody to notice this bug (reported by Richard Lake)
- Fix [OS3/WarpOS]: Transparent areas of display weren't displayed correctly when the display was
  opened manually using OpenDisplay() and the initial display didn't contain any transparent areas
  (reported by Nick Sommer)
- New: Version string is now always compiled into the main program so it should always be accessible;
  this also fixes the issue that the version string specified in @APPVERSION wasn't visible when
  compiling with COMPRESS enabled
- Fix [OS4]: Version string was not compiled into the main program and thus could not be accessed by
  C:Version; this made it impossible to use Hollywood-compiled programs with AmiUpdate (reported by
  Daniel Hutchinson)
- Fix [OS3]: The version string specified in @APPVERSION wasn't stored in compiled executables in a
  way that could be detected by Workbench 3.x's the C:Version command
- Fix: Hollywood often compiled corrupted executables when COMPRESS was used together with executables
  for platforms AmigaOS3, AmigaOS3 FPU, and WarpOS (reported by Nick Sommer)
- New [SDK]: DOSBase exports hwos_TranslateFileName() now; this function can be used to convert an
  encoded filename of Hollywood's chunk reader to a valid filename with a read range defined by offset
  and length
- Change [Amiga]: File I/O is done through a custom buffered mechanism now because the buffered I/O
  functions of dos.library are still as unoptimized as on OS3 even on modern systems like OS4 and AROS;
  the custom buffered ones should result in a major speed increase on larger files (reported by Lazar
  Zoltan)
- New: LoadBrush(), LoadBGPic(), @BRUSH and @BGPIC now support the new tags "ScaleWidth", "ScaleHeight",
  and "SmoothScale"; these tags allow you to scale an image already at loading time; this can produce
  a significant speed-up if you only want to load a thumbnail from a huge image for example; but the
  image driver has to support scaled loading; otherwise there won't be any significant speed-up against
  loading the brush and then scaling it; currently, none of Hollywood's inbuilt image loader supports
  load-time scaling, but plugins might make use of this functionality (requested by Lazar Zoltan) 
- Fix: ScaleBrush() didn't work correctly when used more than once on vector brushes
- Fix [Win32]: IsKeyDown() and WaitKeyDown() didn't work correctly with non-ASCII characters (reported
  by Martin Schaffrinski)
- Change: When used on Protracker modules to skip to a certain song position, PlaySubsong() can now also
  be used when the Protracker module is not playing
- New: #ATTRNUMSUBSONGS and #ATTRCURSUBSONG can be used to query the number of subsongs in a music file
  and the currently playing subsong
- New: PlaySubsong() can now play subsongs of music files if this is supported by the music format driver;
  PlaySubsong() is actually an old Hollywood 1.0 command, so it uses a slightly different syntax: the
  second argument specifies the music identifier to play; if it is omitted, PlaySubsong() will use the
  currently playing music; all table arguments supported by PlayMusic() are also supported by PlaySubsong()
- New [SDK]: Sound plugins support several subsongs in a single music file now; useful for implementing
  plugins for ancient tracker formats
- Change [Amiga]: Hidden displays can now have an arbitrary size; this makes it possible to embed displays
  which are larger than the current screen in scrollgroups with MUI Royale (reported by Matthias Rustler)
- New [GUI]: Default viewer and editor are configurable now in a new preferences menu
- New [GUI]: "Edit" button opens the current project in a text editor now; to access the project properties,
  you have to use the "Edit..." item in the menu now (requested by Lazar Zoltan)
- New: Added "Deinterlace" tag to LoadAnim() and @ANIM which allows you to specify the deinterlace mode
  Hollywood should use on interlaced anims (ANIM16i and ANIM32i); default deinterlacing combines two
  half-frames into one full frame whereas double line deinterlacing doubles all lines in a half-frame
  to get a full frame
- Fix [Win32]: "OnMusicEnd" events could get lost under certain conditions
- New: Added "SkipLoopFrames" tag to LoadAnim() and @ANIM; if it is set to TRUE, Hollywood will assume
  that loop frames are present in the IFF ANIM and will skip them; note that Hollywood doesn't do any
  checks if the anim really has loop frames because that would be very expensive (Hollywood would have
  to decode the whole anim); thus you should only use this tag if you know that the anim's last two
  frames are loop frames
- New: Hollywood supports the following new IFF ANIM compression modes: ANIM7, ANIM8, ANIM16, and ANIM32;
  support for ANIM32 makes it possible to run the Twisted Minds wild demo from Aminet using Malibu now
  (reported by Tony Aksnes)
- Change: AnimPlayer, VideoPlayer, and HollyAmp examples now query for additional file types made available
  by plugins and add them to the file requester mask
- New: The table returned by GetPlugins() now has a "FileTypes" subtable that contains information about the
  file types made available by the individual plugins; useful for adapting the mask field of your file
  requester or for offering the user a choice of output save formats based on available plugins
- New [SDK]: Added hw_RegisterFileType() function which can be used to expose some information about the
  file types that this plugin can load
- New [SDK]: Plugins capable of saving images/anims/sounds can now expose multiple save formats by setting
  the HWSAVEXXXCAPS_MORE flag in the RegisterXXXSaver() plugin function; Hollywood will call the Register()
  function until the MORE bit is cleared
- New: System library now exports the constants #PLUGINCAPS_CONVERT, #PLUGINCAPS_LIBRARY... so that you can
  check the type of the plugin returned in the "Capabilities" field of the plugin table returned by GetPlugins()
- New: Added GetPlugins() function which returns information about all available plugins; this is the same
  as the "Plugins" table returned by GetVersion()  
- Fix: PlayAnim() no longer blocks the whole application when used on anims with long frame delays
- Fix [Linux]: On some Linux systems Hollywood didn't find the correct *.so to load (reported by Achim Kern)
- New [Win32]: SetClipboard() and GetClipboard() also support copy and paste of images with mask or alpha
  channel now if clipboard type is #CLIPBOARD_IMAGE
- New [Android]: Added support for hardware accelerated scaling when autoscale mode is used; this brings a
  great speed boost to all scripts that use autoscaling; hardware scaling is used by default now for the
  autoscale engine; some devices may have problems with it (especially older Android versions when scaling
  odd resolutions that are not divisible by 4); if you experience problems use the new NOHARDWARESCALE
  command/@DISPLAY option to disable hardware acceleration on autoscale; the NOHARDWARESCALE option is also
  accessible from the Android starter menu
- New [Android]: Sound can be disabled in starter menu now
- Change [Android]: Faster refresh for double buffers that only require a partial screen redraw
- Fix [Android/MacOS]: Potential freeze in the internal sleep timer handler
- Change: Updated Snowflakes, AsyncFX, BallsDemo, Fireworks, Infinity, Welcome, Aquarium, Animation techniques
  (Layers and Sprites), Circles, and WobbleText examples to use the new BeginRefresh() and EndRefresh()
  commands; leads to a much better performance on Android and when autoscaling is enabled!
- New: Added BeginRefresh() and EndRefresh() commands; these commands can be used to speed up drawing
  significantly on systems that have lots of overhead when drawing small graphics; Hollywood will cache all
  drawing operations that happen between BeginRefresh() and EndRefresh() and draw them in a single run
  when EndRefresh() is called; on the desktop versions of Hollywood these commands only do something if
  Hollywood is in autoscale mode; on the Android version, however, all drawing commands are collected and
  drawn in a single run which speeds up drawing significantly; BeginRefresh() and EndRefresh() were already
  present in beta versions of Hollywood 2.0 but removed in the final builds because it was deemed unnecessary
  but now with the arrival of the Android backend of Hollywood the commands are really useful 
- Fix [Win32]: When resizing a borderless window it's no longer possible to resize it to 0/0 (Windows supports
  windows that have a width and height of 0 but Hollywood can't handle this)
- Fix [Win32]: CreatePort() didn't check whether the specified port name was already in use
- Change: CreatePort() also works with hidden displays now (requested by Paul Bloedel)
- Fix [Android]: Crash when hiding the virtual keyboard on Android 4.1 and up; this is not really a fix but a
  workaround for an issue either in Android itself or in the glue code for NativeActivity; more is not known
  at this time because Android authors refuse to comment on the issue (reported by Paul Bloedel)
- Fix: DownloadFile() crashed when using very long URLs (reported by Richard Lake)
- New [Android]: Errors are now displayed in a system requester instead of a custom error screen
- New [Android]: Android player uses a native GUI now which should be much more intuitive to use than the
  pixel-based one which was difficult to use especially on high resolution devices (requested by Michael
  Jurisch and Achim Kern)
- New [MacOS]: When compiling executables for Mac OS X, ICON256x256 and ICON512x512 are now supported if you
  have a JPEG2000 plugin installed
- New [Android]: You can now force your script to use a fixed orientation by setting the "Orientation" tag
  in the @DISPLAY preprocessor command; the orientation can be changed later by using the SetDisplayAttributes()
  command; to unlock the orientation again pass #ORIENTATION_NONE in "Orientation" to SetDisplayAttributes()
  (requested by Paul Bloedel)
- New [Android]: Added "OnTouch" event handler which allows you to get detailed information about touch events
  including support for multi touch events; useful for implementing gestures in Hollywood (requested by Michael
  Jurisch)
- Fix [Android]: Touchscreen handler that maps touch events to mouse events always triggered "OnMouseUp" right
  after the first "OnMouseDown" (reported by Lazar Zoltan and Paul Bloedel)
- Fix: Memory leak when loading anims using the @SPRITE keyword
- New [SDK/WarpOS]: LuaBase and all missings stubs are exposed correctly now; this allows you to write plugins
  of type HWPLUG_CAPS_LIBRARY for WarpOS too; keep in mind though that all calls to LuaBase functions require
  a context switch so use them carefully
- Fix [SDK/WarpOS]: CRTBase.realloc() didn't work when used on a memory block allocated using CRTBase.malloc()
- New [Linux]: GetSystemInfo() also supported on Linux now; it currently returns the following two items in a
  table: UserName, UserHome
- Fix [AROS]: Hollywood checks for enough stack space now before starting; prevents random crashes with
  recursive functions like FloodFill() (reported by Matthias Rustler)
- Change [Win32]: GetSystemInfo() returns path to the user's home directory in "UserHome" and name of the
  current user in "UserName" now
- New [MacOS]: GetSystemInfo() also supports Mac OS X now and returns the following values in a table: AppData,
  ProgramFiles, UserHome, UserName, MyDocuments (requested by Richard Lake)
- Change [MacOS]: for cross-platform consistency SystemRequest(), ListRequest(), and StringRequest() are now
  centered on the screen instead of the currently active display (reported by Richard Lake)
- New [AROS]: 32-bit mouse pointers are now supported on AROS too (thanks to Matthias Rustler for letting
  me know that AROS finally supports this)
- New [Amiga]: When in iconified mode, Hollywood's app icon can now be snapshot using the Workbench menu
  (requested by Niels Schapke)
- Fix [Amiga]: "OnDropFiles" event handler never triggered when dropping files on Hollywood's app icon; why
  did nobody notice this earlier? has been present since v4.5
- Change [OS4/MOS/Android]: Removed some unnecessary FreeType2 components which makes the executable a bit
  smaller
- Fix [Android]: Hollywood is now also working on devices which fail to load apps that do not contain any
  Java code (reported by Tom C.)
- Fix [SDK]: hw_PostSatelliteEvent() didn't inject mouse coordinates into the event handler for mouse button
  events (reported by Matthias Rustler)
- Fix: When setting "ScaleMode" to #SCALEMODE_NONE using SetDisplayAttributes() and a doublebuffer that is
  only refreshed partly every frame was active, there were some refreshing problems 
- New [Android]: Hollywood allows you to toggle scaling options (autoscale and layerscale) on the fly now by
  pressing the menu button (pre-Android 3.0 devices) or the respective button in the system navigation bar;
  to prevent Hollywood from showing the options menu, use the new HIDEOPTIONSMENU argument; you can also
  use this argument from the @DISPLAY preprocessor command and together with SetDisplayAttributes()
- New [Android]: SetDisplayAttributes() is now also supported on Android
- New [Android]: Execute() and Run() can now also start other Android apps; you have to pass the package name
  of the app to these functions because the actual app name is often localized and thus different in each
  country; synchronous execution is not yet supported; thus, there is currently no difference between Run()
  and Execute()
- New [SDK]: Plugins can now create brushes (vector and raster brushes are possible) and it is also possible to
  define custom object types that are dynamically chained into Hollywood's object system; you can use all of
  the object library functions with them as well as track them via the resource monitor
- Fix [Android]: InitPlugin() function gets passed the correct path to the *.hwp file now
- New [SDK]: Plugin interface exposes some new functions of the FreeType2 library and also most common libz and
  libjpeg functions are exposed now
- Fix [Doc]: PolarDistortBrush() had the "rmin" and "rmax" parameters swapped (reported by Matthias Rustler)
- Fix [Android]: Virtual keyboard now handles non-ASCII keys correctly (if they are part of the ISO-8859-1 codeset
  which is Hollywood's internal charset)
- New [Android]: The Hollywood Player can now act as a viewer for *.hwa files too; just set Hollywood as the
  default viewer for *.hwa files and it will automatically be launched when you click on a *.hwa file; NB: when
  the applet is located in "/sdcard/Hollywood", the applet's initial current directory will be changed to
  "/sdcard/Hollywood/<appletname>" (same as when applet is launched through the Hollywood Player UI); if the
  applet is located somewhere else, the applet's initial current directory will be the applet directory itself
- New [Android]: Added ShowToast() function which can be used to pop up an Android toast with a short message;
  optionally you can change the position of the toast and you can specify the toast duration (long or short)
- New [Android]: Added support for SetClipboard(), GetClipboard(), PeekClipboard(), and ClearClipboard(); only
  #CLIPBOARD_TEXT is currently supported; the "ClipboardChange" event handler is also currently unsupported
  (requested by Paul Bloedel)
- New [Android]: Android version of Hollywood now supports the following requester functions: SystemRequest(),
  FileRequest(), PathRequest(), StringRequest(), ListRequest() and ColorRequest(); FontRequest() is not supported
  because Hollywood currently doesn't support Android's native font interface
- Fix: DefineVirtualFile() didn't work with files linked with the LINKFILES argument (reported by Fabio Falcucci)
- Fix: GetLayerStyle() didn't set the "Type" field (reported by Paul Bloedel)
- Fix [OS4]: Bug in the hardware transformation code could lead to wrong results when rotating a hardware
  brush (reported by Lazar Zoltan)
- New [Android]: #ATTRDENSITY, #ATTRXDPI, and #ATTRYDPI allow you to find out more about the actual physical
  size of the device's screen; unfortunately, many devices return spurious values here so it's probably
  not of much use (requested by Fabio Falcucci)
- New [Win32]: Implemented a new attribute named "HideFromTaskbar" which can be used with @DISPLAY,
  CreateDisplay() or SetDisplayAttributes() to hide the display from the taskbar; useful if you already have
  a tray icon for your app and don't need the taskbar button (requested by Niels Schapke)
- Fix: SetDisplayAttributes() often accidentally modified the fill style of the current BGPic (reported by
  Paul Bloedel)
- Change: Layer border now respects the "XFlip", "YFlip", "Pixelate", "WaterRipple", and "Swirl" filters; this
  change might lead to a different visual appearance if your script depends on the old behaviour and is thus
  considered an API change; it was necessary, however, to keep the consistency because the layer shadow already
  respected these settings so it doesn't make any sense for layer border to ignore them because it looked wrong
  then
- Change [Amiga]: If WinUAE is detected, Hollywood's video player will use a larger audio buffer now to prevent
  audio glitches that seem to happen even on very fast systems because Windows can't handle very small buffer sizes
- Fix [Amiga]: Workbench's current directory wasn't restored when Hollywood was started as a default tool; this
  led to a crash on AROS (reported by Matthias Rustler)
- Fix: Major bug in SendData() when trying to send large amounts of data in a single call; SendData() could get
  stuck completely (reported by Paul Bloedel)
- Fix: GetLayerAtPos() didn't respect layerscale mode (reported by Fabio Falcucci)
- New [Amiga]: GrabDesktop() accepts an optional table argument named "PubScreen" now which can be used to grab
  any screen to a brush; the specified pubscreen does not have to be the frontmost one (requested by Richard Lake)
- New [Amiga]: GetPubScreens() returns an additional table now which contains information about screen resolution
  and depth (requested by Richard Lake)
- New [Win32]: Added SOFTTIMER argument which uses a low resolution software timer instead of the high resolution
  hardware timer which sometimes leaps on older hardware with Windows XP; this option can also be accessed through
  the "SoftTimer" tag in @OPTIONS (requested by Torgeir Vee)
- Fix [Doc]: CloseServer() and "OnDisconnect" were missing some essential information (reported by Paul Bloedel)

Version 5.2     (12-Nov-12)

- Change: Updated Hollywood documentation
- Change: Updated catalog descriptions and German translation; added new developer files for doing
  new translations
- Change: Updated the Hollywood GUI (Amiga) and IDE (Windows)
- New [Android]: OpenURL() is now supported (requested by Christoph Poelzl)
- New [Android]: Execute()/Run() can now be used to view data files like pdf or image files using their default
  viewers (requested by Torgeir Vee)
- Fix [Linux]: Crash when StopSample() gets called at exactly the same time when sample playback gets
  finished (reported by Fabio Falcucci)
- Fix [Linux/Android]: Potential deadlock when using high resolution interval functions (reported by
  Fabio Falcucci)
- Fix [Amiga]: GetEnv() didn't work with global variables (reported by Niels Schapke)
- Fix: Val() didn't work correctly with floating point numbers that started with the decimal point, i.e. ".5"
  for 0.5 (reported by Lazar Zoltan)
- New [Win32]: GetShortcutPath() can be used to get the destination path from a *.lnk file; the second return
  value contains the description for the link if there is any (requested by Nick Sommer)
- New: GetFileAttributes() works with linked files now as well; additionally, the return table contains a new
  element named "Virtual" now which is set to TRUE if the file that was passed to GetFileAttributes() is a
  virtual file
- New: DownloadFile() accepts a new tag named "UserAgent" now which allows you to specify a custom user agent
  name that DownloadFile() should send to the server (requested by Niels Schapke)
- Fix [Win32]: IsVideo() no longer returns TRUE for static JPEG and BMP pictures (reported by Juan Carlos)
- Fix [Linux]: Potential memory trash in startup code on newer Linuxes
- New [IDE]: Font for the console window is user-configurable now; useful in case you want to use a monospace
  font for the debug output here (requested by Fabio Falcucci)
- Fix [Non-Amiga]: Fix in the IFF24 loader for very small images (reported by Lazar Zoltan)
- New [Win32]: SetTrayIcon() allows you to add a Hollywood brush as an icon to the Windows system tray; you can
  listen to mouse clicks on it using the "TrayIcon" event handler (requested by Paul Bloedel and Niels Schapke)
- New: SetDisplayAttributes() also supports all of the backfilling attributes now like "Color", "FillStyle",
  "TextureBrush", "GradientStartColor", etc. (requested by Fabio Falcucci)
- Fix [Doc]: Images referenced by the AmigaGuide documentation were not included in the archive
- Fix: Rnd() no longer throws a division-by-zero error when used with 0 (reported by Fabio Falcucci)
- Fix: SetVideoSize() didn't work correctly with #KEEPASPRAT (reported by Paul Bloedel)
- Fix: OpenResourceMonitor() didn't work correctly if SetFontStyle(#ANTIALIAS) had been called previously
  (reported by Nick Sommer)
- Fix [Win32]: Memory access fault when trying to load an unsupported sound file
- New: GetVersion()'s return table contains a new field named "CPU" now which contains information about
  the CPU architecture Hollywood is currently running on (requested by Fabio Falcucci)
- New: HaveObject() allows you to check whether a certain object is available
- New [SDK]: GfxBase exposes hw_GetARGBBrush() and hw_FreeARGBBrush() now; useful if you do not want to deal
  with all the different pixel formats supported by Hollywood and separate transparency channels in 1-bit
  monochrome or 8-bit masks
- Fix [Amiga]: Crash when trying to play a sound after a video has been played (reported by Thomas Blatt)
- Change: WaitEvent() also works now if current display is closed
- New [SDK]: hw_MasterControl() recognizes the following new tags: HWMCP_GETAPPTITLE, HWMCP_GETAPPAUTHOR,
  HWMCP_GETAPPCOPYRIGHT, HWMCP_GETAPPVERSION, HWMCP_GETAPPDESCRIPTION
- New [SDK]: SysBase exposes the following new vectors: hw_RegisterCallback(), hw_RegisterPluginEventHandler(),
  hw_PostEvent(), hw_PostSatelliteEvent()
- New [SDK]: Introducing support for display satellites using the vectors hw_AttachDisplaySatellite(),
  hw_DetachDisplaySatellite(), hw_RefreshDisplaySatellite(), and hw_ChangeRootDisplaySize(); can be used
  for quite some interesting purposes
- Fix: Bug in the event handler which could cause a crash (in theory at least; multiple drag'n'drop
  events would have to occur in a very short time... highly unlikely that this ever happens)
- Fix: Refresh error when displaying a BGPic that has layers attached using DisplayTransitionFX()
  (reported by Paul Bloedel)
- New: RaiseOnError() can be used to install a user function that will be called whenever a Hollywood
  function throws an error; the function will receive four arguments: the error code, a string
  describing the error, the name of the last command, and the current line number (requested by Fabio
  Falcucci)
- New [SDK]: LuaBase exposes lua_checkstack() now; required by the sqlite3.hwp plugin
- New [Amiga]: Added ShowScreen() command which allows you to switch to the specified public screen
- New [Amiga]: Added support for opening displays on individual public screens; you can define the public
  screen on which a display should open by using the "PubScreen" tag in @DISPLAY/CreateDisplay() or
  SetDisplayAttributes(); please note that the screens must use a compatible pixel format, i.e. it is
  not possible to have one display on a 16-bit screen and another display on a 32-bit screen; all screens
  that your script uses must use the same pixel format (to circumvent this limitation you can use the
  slower wpa mode by specifying USEWPA); the resolution of the screens can be different though; you
  can use the new #ATTRPUBSCREEN attribute to query the name of the public screen the specified display
  is currently on (requested by Niels Schapke)
- New [Amiga]: GetPubScreens() returns a table containing the names of all available public screens
- Fix [Amiga]: When closing the public screen Hollywood is currently running on while all Hollywood
  displays are hidden, Hollywood crashed when you tried to reopen hidden displays
- Change [Amiga]: SetWBIcon() accepts the special constant #AMIGAICON_NONE now which forces Hollywood
  to skip adding an app icon to your Workbench when it is hidden
- New [Amiga]: Added CXKEY argument/tooltype which allows you to define a hotkey for your commodity; when
  that hotkey is pressed, you will get "Hotkey" event (requested by Niels Schapke)
- New: BreakEventHandler() allows you to break out of the current event handler cycle; this is a lowlevel
  function and only here for certain rare situations; you normally do not need this function (requested
  by Lazar Zoltan)
- New: Collision() now supports hardware brushes but the collision detection will never be pixel exact
  because that would involve reading from video memory which is very slow and locks the mouse pointer;
  use software copies of your hardware brushes for pixel exact collision detection (reported by Simone
  Monsignori)
- Change: When making a copy of a hardware brush using CopyBrush(), it is no longer mandatory to set
  the optional table argument "Hardware" to TRUE; CopyBrush() will do this automatically now for you
  (requested by Lazar Zoltan)

Version 5.1     (12-Jul-12)

- ***NB***: V5.1 was only released for Android on Google Play; there was no desktop release of version 5.1!
- New [Android]: Android 2.x's menu button is now mapped to the HELP key; that is probably of not too much
  use because the menu button is gone starting with Android 3.0
- Fix [Win32/Linux/MacOS]: OpenCatalog() didn't look in the script's directory if that was different from
  the directory of Hollywood
- New [Android]: GetSystemInfo() returns three table elements for getting information about system paths:
  "ExternalStorage" contains the absolute path to the device's external storage directory, "InternalStorage"
  contains the absolute path to the device's internal storage directory, and "SDCard" contains the path
  to the SDCard
- New [Android]: Added KEEPSCREENON argument and respective @DISPLAY option; if set to TRUE, Hollywood will
  tell Android to never turn off the screen to save battery
- Fix: Very slow drawing when showing a transition effect behind a sprite with autoscaling enabled
- New [Android]: "HideWindow" and "ShowWindow" events are now triggered when the user moves Hollywood into
  the background
- New [Android]: Added user interface for the Hollywood Player which allows you to browse through your
  applets, configure some common settings and run your applets; you must copy your applets to a directory
  named "Hollywood" on your SD card; plugins go to "Hollywood/_Plugins" on the SD card; the Hollywood
  Player will create these directories automatically upon startup if they are not there already; the work
  directory for applets will be "Hollywood/<applet name>", e.g. if your applet is named "Cool Game", then
  the local directory for this applet will be "Hollywood/Cool Game" on the SD card
- Fix [Win32]: Line() didn't respect videos attached to the current display
- Fix: Potential memory leaks when using SetObjectData() with types #INTERVAL and #FUNCTION
- Fix: IsPicture(), IsSample(), IsMusic(), IsAnim(), IsVideo(), and Exists() didn't work with files linked
  to the applet/executable using the LINKFILES argument (reported by Janne Peraho)
- Fix [Linux/MacOS]: Run() didn't work with the redirection operator '>' (reported by Fabio Falcucci)
- Change: Run() and Execute() accept an optional argument now which allows you to disable the automatic
  key state reset that Hollywood does after Run() and Execute(); useful if you run programs without a
  GUI (requested by Fabio Falcucci)
- Fix [Linux/MacOS]: Run() crashed when used with non-existent files and it also didn't search in the
  PATH environment for the specified executable (reported by Fabio Falcucci)
- Change: RotateBrush(), RotateLayer(), RotateTextObject() and the "Rotate" tag of the standard draw tags
  and of SetLayerStyle() now use a floating point value instead of an integer value; this allows a greater
  precision for rotation values (requested by Lazar Zoltan)
- Fix: "ScaleWidth" and "ScaleHeight" in CreateDisplay() and SetDisplayAttributes() did not accept percent
  values (reported by Davide Palombo)
- New: GetObjects() allows you to query Hollywood's object manager for all objects of the type specified
  in argument 1 (e.g. #BRUSH); it will then return a table containing the identifiers of all loaded objects
  of that type and the object count in the second return value (requested by Fabio Falcucci)
- New: GetVersion() returns a "Plugins" table now as well that contains information about all plugins that
  are currently available
- Fix [Amiga]: ListRequest() always appeared on Workbench and didn't respect either PUBSCREEN argument or
  any screen mode changes (reported by Michael Jurisch)
- Fix: DownloadFile() didn't work with servers that used some padding space in transfer mode replies (reported
  by Richard Lake)
- Fix: Several fixes and improvements in Hollywood's platform independent video player
- Fix: Crash when calling SeekVideo() on a video that had finished playing (reported by Simone Monsignori)
- New: ForceVideoDriver() can be used to force the video library to use a certain video driver; currently defined
  are #VIDDRV_OS and #VIDDRV_HOLLYWOOD; you can query the driver used by a certain video object using the new
  #ATTRDRIVER attribute with GetAttribute()
- New: Implemented platform independent video renderer on Win32, Mac OS, Linux, iOS, and Android; this makes it
  possible to play videos loaded by video plugins on these platforms, too; native video renderers (DirectShow on
  Windows and QuickTime on Mac OS X) are still supported but by default Hollywood will try to use the platform
  independent renderer first
- New: SetVideoSize() accepts a new optional argument now that allows you to enable antialiased interpolation
  for scaling; this argument is only used when Hollywood's software renderer is used with no overlay
- Change [OS3/OS4/WarpOS]: Internal IFF ANIM reader is now given priority over the anim datatype reader;
  this way OS3 executables will no longer fail on MorphOS which has no anim datatype
- New: SaveAnim() and BeginAnimStream() can create animations with alpha channel now if you have a plugin
  that supports them; to enable alpha channel output, set the new "UseAlpha" tag to TRUE; note that the
  "UseAlpha" and "Transparency" tags are mutually exclusive
- Fix: Crash when preloading an entire animation using an animation plugin with @ANIM and "FromDisk"
  set to FALSE
- Change: LoadAnimFrame() accepts an optional table in the fourth argument now which can contain either
  the "Transparency" or "LoadAlpha" tags to specify whether the anim frame should use simple transparency
  or alpha channel; the old syntax that takes a transparent color in argument #4 is still supported for
  compatibility reasons
- Fix: Hollywood didn't respect the alpha channel in animations loaded by plugins of type HWPLUG_CAPS_ANIM
  which made it impossible for the APNG.hwp plugin to feed anims with alpha channel to Hollywood
- Fix: Memory leak and potential crash when setting "FromDisk" to TRUE when LoadAnim() or @ANIM were
  used with a single image as the source file
- New: Added SKIPPLUGINS argument which can be used to specify plugins that shouldn't be loaded
  automatically on startup; you can specify multiple plugins by separating them using the '|'
  character; if no plugins should be loaded automatically upon startup, specify the '*' wildcard in
  this argument; you can load plugins manually then using the @REQUIRE preprocessor command (requested
  by Davide Palombo)
- Fix: DownloadFile() works correctly now with servers that don't set the Content-length tag (reported
  by Niels Schapke)
- Fix: DownloadFile() didn't work with Aminet (reported by Richard Lake)
- Fix: Lockup when using a wave length smaller than 1 with WaterRippleBrush() (reported by Simone Monsignori)
- Fix: When using CreateSprite() with source type #SPRITE and source sprites that use auto ID selection
  in arguments 4 or higher, the function failed with an error (reported by Simone Monsignori)
- Fix: Memory access fault inside RemoveLayerFX() (reported by Tom C. and Lazar Zoltan)
- Fix: Crash when trying to crop a brush at load time with LoadBrush() (reported by Brian Slominski)
- Fix [Win32]: Crash when loading music or sample files linked to an applet or executable (reported by
  Brian Slominski and Ehrenfried Waidner)
- New: #ATTRZPOS can now be queried for type #LAYER with GetAttribute() (requested by Fabio Falcucci)
- Fix: GetLayerStyle() didn't set the "Z" tag (reported by Fabio Falcucci)
- Fix: WhileMouseOn(), a Hollywood 1.x compatibility function, blocked the event handler which led
  to some problems with scripts that still use the V1 API and Malibu
- Fix: Copy protection didn't recognize 4.5, 4.6 and 4.7 CD-ROMS correctly (reported by Richard Lake)

Version 5.0     (19-Feb-12)

- Change: Updated Hollywood documentation
- Change: Updated catalog descriptions and German translation; added new developer files for doing
  new translations
- Change: Updated the Hollywood GUI (Amiga) and IDE (Windows)
- Change [IDE]: IDE supports the new platform targets that have been introduced with Hollywood 5.0
  now (Linux PPC, OS3 FPU, and Win32 Console)
- New: Added several new examples: BeastScroll (demonstrates hardware double buffering), 3DCube, FilterFX,
  VideoPlayer, VectorTest, VectorTest2, Synthesizer, Infinity, Animation Techniques (Hardware double buffer)
  as well as four new cracktros contributed by Mr. X of Barracuda: Cannon Fodder, Creatures, Pinball Dreams,
  Superfrog
- New: Updated ImageLab example to show the new image effects added in Hollywood 5.0 (and there are many!)
- New: Updated Gradients example to include support for radial and conical gradients that were introduced
  in Hollywood 5.0
- Fix [MacOS]: Fixed memory leak in image loader 
- New [OS4]: ScaleBrush(), RotateBrush(), and TransformBrush() as well as the Width/Height/Rotate/
  Transform/ScaleX/ScaleY use hardware acceleration now for hardware brushes; this is extremely faster
  than software scaling, especially when using antialiased interpolation; this is currently only supported
  on OS4 because MorphOS lacks the required APIs
- Fix: AVI stream writer uses WORD chunk alignment now instead of DWORD alignment; I mistakenly thought
  that AVI chunks had to be DWORD aligned (like IFF)
- New: Hollywood can now load AVI streams that are uncompressed or use MJPEG compression as anims; this is
  useful if you need to use true colour animations which aren't supported by the IFF ANIM and GIF ANIM
  formats; you can use AVI streams for that instead (requested by Christoph Poelzl)
- Fix: Scale routines could malfunction with very small images (reported by Lazar Zoltan)
- New: IsOnline() can be used to check if an Internet connection is available (requested by Fabio Falcucci) 
- New: Added list of all error codes that Hollywood defines to the documentation and made their constants
  available to scripts, too; useful for specific error handling with GetLastError() and GetErrorName()
  (requested by Fabio Falcucci)
- New: Documentation is now maintained using a proprietary meta format which allows me to export it into
  all kinds of end formats using my tool MetaDoc; thus, the Hollywood documentation is now available
  in the formats AmigaGuide, PDF, HTML, and CHM (compiled HTML)
- New: A blast from the past: ClearScreen() is back! ClearScreen() is a function that was introduced
  with the very first Hollywood release in November 2002; it was then removed in version 1.5 but now
  it is finally back at your service!
- Fix: Another wordwrapping bug in the text renderer that even trashed memory (reported by Paul Bloedel)
- Change: Layer attributes can now also be queried when SelectXXX() is active using GetAttribute() and
  GetLayerStyle() (requested by Fabio Falcucci)
- Fix: Wordwrapping bug in the text renderer that occurred only under rare circumstances (reported by
  Paul Bloedel)
- New [OS4]: Added support for loading 16-bit samples through OS4's sound.datatype; this was not possible
  earlier because OS4's sound.datatype didn't have supported for 16-bit samples before OS4.1.2
  (reported by Gianluca Girelli)
- New [OS4/MorphOS]: Added support for hardware accelerated brushes; to create a hardware brush, use
  the new "Hardware" tag in the optional table argument of LoadBrush() or @BRUSH; alternatively, you can
  also create a hardware brush from a normal brush by using the CopyBrush() command with the "Hardware"
  tag; you can use #ATTRHARDWARE to query if a brush is using hardware acceleration; currently, you cannot
  do anything else with hardware brushes than draw them in a hardware accelerated double buffer setup
  (see below); it's not possible to manipulate hardware accelerated brushes in any way; they can really
  just be used for hardware accelerated double buffer drawing; in the future there might be more support
  for hardware brushes, e.g. hardware accelerated scaling and transformation
- New [OS4/MorphOS]: Added support for hardware accelerated double buffering; this finally allows you to
  do really fast 2D drawing with Hollywood; to enable hardware accelerated double buffering, pass TRUE
  in the new optional argument of BeginDoubleBuffer(); after that, draw to the double buffer using hardware
  accelerated brushes ONLY (other drawing functions can be a lot slower on a hardware accelerated double
  buffer, especially alpha channel drawing because this needs to read from video memory which is very
  slow); see above for information on hardware brushes
- Change: Long strings [[...]] will now ignore any carriage return characters ('\r') inside the long string;
  only linefeed characters ('\n') will be included in the string; this change has been made to prevent that
  scripts behave differently when saved on Windows and on AmigaOS/Unix/Mac
- New: Added GetObjectType() function which allows you to retrieve the type of an object that has been
  created using the auto id selector
- New: Added functions for associating private data with Hollywood objects: You can use the SetObjectData(),
  GetObjectData(), ClearObjectData(), and CopyObjectData() functions for this; every Hollywood object
  can be associated with an infinite amount of private data that is stored inside the object using a
  special access key; read the documentation for more information
- New: Added FileLines() command which returns a Generic For iterator function that allows you to easily
  iterate over all lines of a file
- New: Added some more functions for dealing with tables: ForEach(), ForEachI(), and Concat()
- New: Added @REQUIRE preprocessor command; this allows the script to check whether or not a certain
  plugin is available and abort if it is not; there are two optional arguments that can be used to
  specify a minimum version that is required; if the optional arguments are left out, any version is
  accepted
- New: Added Assert() command which will fail when the specified condition is FALSE
- New: Added ReadBrushPixel() and WriteBrushPixel() functions for fast brush pixel access; previously,
  you had to call SelectBrush() / SelectMask() / SelectAlphaChannel() before you were able to access
  the pixels of a brush; this often resulted in much overhead, especially when dealing with multiple
  brushes; using these two new functions you can read and write color and transparency channels in just
  a single call; this gives a good speed increase
- New: The WaitEvent()/CheckEvent() return table now also contains the fields "Action" and "ID" so
  that you get a little more information about the callback just executed
- New: Added EXPORTCOMMANDS, EXPORTCONSTANTS, and EXPORTPLUGINS console arguments; these can be used
  to export lists of available commands, constants, and plugins to files; this is not very useful
  for the end-user but it can be quite helpful for authors of IDEs that would like to add syntax
  highlighting for Hollywood commands etc.; prior to v5.0, the EXPORTCOMMANDS and EXPORTCONSTANTS
  arguments were available as PRIVATE1 and PRIVATE2; these are still supported for compatibility
  reasons
- Fix [Amiga]: Hollywood compiled executables didn't work correctly when put into a directory that
  is part of the PATH environment and then started from there using no path specification at all
- Change [Win32]: Changed the implementation of the timer/interval system because the old one could
  cause a deadlock under rare circumstances
- Change [Win32]: Added new workaround for the buggy DirectSound notification system which could cause
  some audio glitches under certain circumstances and certain audio drivers
- Fix [Linux]: Hollywood didn't detect optional components like GTK or ALSA on every system, e.g.
  on Linux Mint it didn't work which made Hollywood fall back to console mode for functions like
  SystemRequest() and FileRequest() (reported by Paul Bloedel)
- New: Added GetSystemCountry() function which retrieves the current user's country setting
  (e.g. #COUNTRY_GERMANY)
- Change [OS3]: The version string specified in @APPVERSION is now linked into the player code
  directly when compiling your script; this is required because OS3's C:Version command doesn't
  search debug hunks for versioning information (reported by Guido Mersmann)
- Change [Amiga]: GUI supports the new platform targets that have been introduced with Hollywood 5.0
  now (Linux PPC, OS3 FPU, and Win32 Console)
- Change [Amiga]: The GUI now allows you to compile for multiple platforms in a single run
- Fix [OS4/OS3]: CreatePointer() memory access fault when used with images that use a width that is
  not a multiple of 16 (reported by Lazar Zoltan)
- Fix: Documentation didn't mention that TextWidth() and TextExtent() support an optional parameter to
  specify the string's character encoding (reported by Paul Bloedel)
- Fix: Union initialization bug that only showed up when compiling using the latest version of vbcc (which
  is only used for the WarpOS and 68881 builds of Hollywood)
- New: Hypot() can be used to calculate the length of the hypotenuse of a right triangle
- Change: New optional argument for Flip(); if you specify TRUE in the first argument, Flip() will not
  call VWait(); otherwise Flip() will automatically VWait() after each buffer flip; overriding this behaviour
  is useful if you need to update your double buffer more often than the vertical refresh rate (reported
  by Simone Monsignori)
- New: #ATTRCANSEEK can be used for objects of type #MUSIC and #VIDEO to find out if seeking is supported
  by the file format that the object is in
- New: GetVideoFrame() supports an optional argument now that can be used to change the base from
  absolute frame indices to a timestamp in milliseconds; retrieving frames from a timestamp source
  is much faster but there might be some gfx fragments if there's no key frame at the specified
  timestamp position
- Fix [MorphOS]: Potential memory trash in CopyFile() caused by a wrong buffer size passed to function
  of MorphOS dos.library NameFromLock() which always clears the last byte even if the returned path
  fits perfectly in the passed buffer
- New: The CopyFile() and DeleteFile() functions now accept an additional optional argument that specifies
  whether or not subdirectories should only be handled when they match the specified filter pattern;
  by default this is set to TRUE; if you set it to FALSE then subdirectories will always be scanned
  even if their name does not match the filter pattern; note that this argument is obviously only handled
  when you specify a filter pattern in CopyFile() or DeleteFile()
- New: Introducing platform independent pattern matching; pattern support in MatchPattern(), CopyFile(),
  and DeleteFile() is no longer limited to the Amiga versions; it's also supported on all other platforms
  now; the downside is that this is an API break because Hollywood now uses a platform independent pattern
  matching system and no longer the one of AmigaDOS; the new pattern system supports the following wildcards:
  * (matches all characters), ? (matches just a single character), # (matches all numbers), [] (matches
  one or several characters or a range of characters if you use the hyphen, i.e. [a] matches only a,
  whereas [af] matches a and f and [a-f] matches a to f; you can also use the prefix '!' inside the
  brackets to negate the result, i.e. [!a] means every character except a); you can also combine multiple
  patterns by separating them using the ';' character
- Change: If you want to copy/delete files selectively using a filter pattern, you now have to pass this
  pattern into an additional optional argument; it must no longer be passed in the source file/dir name
  directly! This solves the problem with errors when trying to copy/delete files that used characters
  that were also used in wildcards (like '?' or '[') (reported by Simone Monsignori)
- Fix: FileSize() no longer exits with an error when passed an empty string
- Fix: When moving a layer of type #LINE to a new position using ShowLayer() and then using SetLayerStyle()
  on it to change its color or thickness, the layer would be moved back to its original position
- Fix: Moving a layer of type #LINE using SetLayerStyle() and the X,Y fields and changing its color or
  thickness at the same time didn't work (reported by Paul Bloedel)
- Fix: GetLayerStyle() didn't set X1,Y1,X2,Y2 fields for layers of type #LINE (reported by Paul Bloedel)
- Fix: Changing the "Z" position of a layer and modifying its contents by using SetLayerStyle() at the
  same time did not work under certain circumstances (reported by Paul Bloedel)
- Fix: Changing the font size of a layer that used a font that was linked into the applet/executable
  using SetLayerStyle() didn't work (reported by Paul Bloedel)
- Fix: Under certain circumstances the "Z" tag of SetLayerStyle() didn't work correctly (reported by
  Paul Bloedel)
- Change: ContrastBrush() and the "Contrast" layer filter accept an additional argument now that specifies
  the repeat count for the contrast effect
- Fix: GetIconProperties() could crash when used on an icon that had no tooltypes set (reported by Fingus)
- New: SetLayerData() can be used to associate private user data with a layer; you can use an unlimited
  number of keys to store additional data in a layer; you can retrieve the data later by using the new
  GetLayerData() function [void; merged with GetObjectData() and SetObjectData()]
- New: Added CreateMusic() command; this is a very powerful command that allows you to play audio data
  that is generated on-the-fly by a callback function that you have to install using the new
  "FillMusicBuffer" event handler with InstallEventHandler(); when WaitEvent() runs your callback you
  must feed new audio data by calling the FillMusicBuffer() function; this function must only be called
  from callbacks of type "FillMusicBuffer"; you can pass the PCM data directly to this function or you
  can simply specify a sample that should be used
- New: Added functions for editing samples: MixSample() can be used to mix the audio data of multiple
  samples into a new sample; this command is powerful and offers fine-tuned control of the sample ranges
  that shall be mixed and does also automatically adapt differing frequencies, sample formats and channel
  layouts; InsertSample() can be used to insert, prepend, and append a sample into an existing sample;
  CopySample() can be used to make a copy of a sample; CreateSample() has been extended to support new
  sources ("File" and "Memory") now and it also accepts an additional parameter that can be used to
  specify the length of the sample in PCM frames; additionally, CreateSample() can create empty samples now
- New: #ATTRNUMFRAMES can also be queried now for type #SAMPLE; it returns the number of PCM frames in the
  sample
- New: Added backend for PPC-based Linux; useful for all people who run Linux besides MorphOS or OS4 on their
  AmigaNG platform; specify LINUXPPC in the EXETYPE argument to compile for PPC-based Linuxes
- Fix: Arguments to COMPILE and the ICONXXX were not expanded to fully qualified paths which could lead to
  problems when compiling a script that resides in a different directory to which Hollywood changes while
  compiling
- New [iOS/Android]: Added ShowKeyboard() and HideKeyboard() functions; these can be used to show/hide iOS/
  Android's inbuilt software keyboard; also added the #ATTRKEYBOARD attribute for querying whether the keyboard
  is currently visible; finally, you can listen to the new "ShowKeyboard" and "HideKeyboard" events to get
  notified when the keyboard is shown/hidden
- Change [Amiga]: codesets.library (charsets.library on MorphOS) is no longer required for UTF-8 conversion
- New: Added #ATTRORIENTATION for GetAttribute(); this allows you to query to current orientation of the
  handheld device; this is only supported for mobile systems like iOS and Android; on desktop systems you
  will always get #ORIENTATION_NONE
- New: Added "OrientationChange" event handler that is triggered when the orientation of the handheld device
  changes; this event will only be triggered on mobile systems like iOS and Android
- Fix: KEEPPROPORTIONS was broken since Hollywood 4.8
- Fix: SMOOTHSCALE argument was not respected when the autoscale engine was used in double buffering mode
- New: Added backend for Android by Google; this backend is not integrated into the cross-compiler yet
  because this is quite difficult because Android apps need to be code signed; also, sound is currently not
  supported on Android; for commercial customers I can now offer solutions to get your Hollywood project
  onto Android
- New: Added backend for Apple's iOS (used on iPhone and iPad); due to restrictive policies, it's currently
  not possible for everybody to just compile their Hollywood scripts into iOS apps but for commercial
  customers I'm now able to offer solutions to get their Hollywood projects onto iOS devices; please contact
  me for more details
- New: Added CreatePort() and SendMessage() functions; Hollywood scripts can communicate with each other
  using these functions; when a message is sent to a Hollywood script using SendMessage(), the script will
  get an "OnUserMessage" event which has the same format as the "OnARexx" message in the Amiga versions
- Fix: Video recorder/BeginAnimStream() is now also able to handle unusual FPS settings like 13 or 47 etc.
  (reported by Xabier Payet and Torgeir Vee)
- Fix: Bug in the platform independent font engine's metrics cache could cause TextExtent() and
  TextWidth() to return values that were slightly off (reported by Christoph Poelzl)
- Fix: SetLayerStyle() could run out of stack space when called with more than 250 arguments; the
  stack limit for Hollywood functions has been doubled now to fix this (reported by Torgeir Vee)
  [VOID; increasing stack limit of the vm has lots of implications and instruction size limits
  maximum number of function arguments to 255; Designer should be adapted to split really large
  calls to SetLayerStyle() instead]
- New: Finally added documentation of the IDE's functionality to the Hollywood manual
- New [IDE]: Reworked online help engine; every Hollywood function appears in the table of
  contents now so that when you press F1, the table of contents will be unfolded to
  the appropriate location (requested by Michael Jurisch)
- New [IDE]: "Create executable" dialog now allows you to specify a name for the executable(s)
  to be compiled (requested by Michael Jurisch)
- New [IDE]: Added tooltips to the tab control; they will display the location of the
  script opened in the specific tab control (requested by Michael Jurisch)
- New [IDE]: Double-clicking on a tab will close it now (requested by Michael Jurisch)
- New [IDE]: Available plugins are now also shown in the "System information" dialog
- New [IDE]: Plugins can now be viewed in the new plugins dialog in the "?" menu
- New: GetKerningPair() can be used to retrieve the kerning value for two characters when drawn
  using the currently selected font
- New: GetFileArgument() allows you to retrieve the file argument passed to a compiled Hollywood
  script; useful if you want to develop an application that should be used as a default tool
  for a certain file type etc.; this function will only work correctly with compiled scripts;
  for normal scripts, it will always return "" (empty string) (requested by Alfkil Wennermark)
- Fix [Win32/MacOS/Linux]: Interlaced PNG images didn't work correctly (reported by Murmel)
- Fix: SetLayerStyle() and RemoveLayer() didn't fail when used on layers that didn't exist
- New: Added optional mode argument for #SELMODE_COMBO; if you set this to 1, alpha pixels and
  the corresponding color pixels of the source image will only be copied to the destination image
  if the pixel alpha value is not 0 (i.e. invisible!); by default (i.e. mode 0) all pixels are copied
  even if they're invisible; the mode argument is accepted by SelectBrush(), SelectBGPic(),
  SelectAnim(), and SelectLayer() but is only handled when you use #SELMODE_COMBO
- New: #ATTRLAYERSON can be used to query if layers are enabled in the current display (requested
  by Fabio Falcucci)
- New: The return table of IsPicture() contains a new element named "Vector" now; this will
  be set to TRUE if the picture is in a vector graphics format like SVG
- New [Amiga]: The GUI is now separated into two sections: Example projects and user projects;
  in the user projects section, you can add your own projects and launch them easily from
  there (requested by Achim Kern)
- Change [WarpOS]: PNG alpha channel loader, PNG saver, video recorder and dithering code
  run now on the PPC context; gives great speedup!
- Fix: When using the inbuilt fonts like #SANS, #SERIF etc. in the @FONT preprocessor command
  the linker tried to search these fonts on hard-disk which of course doesn't work; now
  they are ignored (reported by pecaN)
- Fix: LdExp() and FrExp() weren't documented although they have been present since
  Hollywood 2.0
- New: Added Eval() function which evaluates a string that contains an expression, e.g.
  "1+5*7"; all numerical operators that Hollywood recognizes are supported including
  operator priorities and parentheses; additionally, there's an optional table argument
  which allows you to define variables that should be taken into account when evaluating
  the expression
- New: AddFontPath() can be used to add alternative search paths for bitmap fonts and true
  type fonts (when using #FONTENGINE_INBUILT); this is primarily useful on non-Amiga
  platforms because on Amiga, you could simply extend the FONTS: assign to various other
  paths to achieve the same effect
- New: Added DebugPrompt() function which allows you to read a string from the console; you
  have to pass a string that shall be displayed as the prompt
- New [Win32]: Added a console version of Hollywood; Windows distinguishes between console
  and Windows programs; now Hollywood can also compile console based applications and you
  can use Hollywood from the console directly (for advanced users); pass WIN32CONSOLE in
  the EXETYPE argument to compile a console based Windows program
- New: Added string functions FormatStr(), PatternFindStr(), and PatternReplaceStr()
- New: Added documentation for the Generic For statement and the IPairs() and Pairs() function;
  all of this has been in Hollywood since version 2.0 but it wasn't documented
- New: Finally froze Hollywood's plugin API; it is now fully cross platform and can be used to
  extend several parts of Hollywood (currently available are: system library, automatic
  script conversion, vector graphics engine, video loader, anim loader, image loader, sound
  loader, image saver, anim saver, sound saver); a public SDK is coming soon!; NB: Hollywood
  5.0 is no longer compatible with old plugins; that is why the old plugin location Hollywood:Plugins
  is no longer scanned; new plugins must be put into LIBS:Hollywood now!
- Change [OS4]: Turned off shine-through transparency for windows opened by Hollywood because
  this clashed with the concept of 'shielding windows' that are used in fake fullscreen mode,
  etc.
- New [Amiga]: ActivateDisplay() accepts an optional argument now which allows you to activate
  a display without moving it to the front automatically; this is only possible on AmigaOS
  because on all other systems the active window is always moved to the front (requested by
  Fabio Falcucci)
- Change [MorphOS]: MorphOS versions no longer use codesets.library for Unicode conversions
  but charsets.library which is part of the operating system
- New [MorphOS]: Added hardware accelerated video playback supported through cgxvideo.library;
  this is much faster than the software renderer
- New: Added OnVideoEnd event that is triggered when PlayVideo() has finished playing
- New: Added GetVideoFrame() command which allows you to convert the specified video frame into
  a brush; note that this command can get very very slow if you use it in a random order;
  the only recommended way to use this command is to extract frames sequentially out of a
  video, i.e. frame 1, then 2, then 3, then 4, etc.; if you do it backwards, i.e. frame 4,
  3, 2, 1, etc. it will get very very slow because Hollywood has to search through the
  whole video for every new frame; so remember to use GetVideoFrame() only for frame extraction
  in forward direction
- New: Added support for type #VIDEO in GetAttribute(); the following attributes are
  currently recognized: #ATTRCOUNT, #ATTRWIDTH, #ATTRHEIGHT, #ATTRDURATION, #ATTRPOSITION,
  #ATTRFORMAT, #ATTRNUMFRAMES; note that #ATTRNUMFRAMES is often only an approximation because
  the real number of frames can only be determined by searching through the whole video clip which
  would take way too long; #ATTRNUMFRAMES can also return 0 if the codec doesn't support an
  approximation
- New: Added support for video seeking; you can use the SeekVideo() command to seek the video
  to a specific time position
- New: Finally added support for playing videos in your Hollywood scripts; many people requested
  this so here it is; on Windows playback is done through DirectShow so that you can play all
  videos that you have the appropriate codecs for; the same applies to Mac OS X except that on
  Mac OS the QuickTime framework is used; on Amiga systems only CDXL playback is implemented
  because most other popular video formats would require payment of licensing fees; however,
  the video interface on Amiga is publicly documented so you could create plugins which can play
  other formats, too; note that due to performance issues, videos are currently not integrated into
  the layers system; instead, they will always appear on top of everything else; it's also
  currently not possible to play videos on top of a transparent background picture; the new video
  library consists of the following commands: OpenVideo(), CloseVideo(), PlayVideo(), StopVideo(),
  PauseVideo(), ResumeVideo(), IsVideo(), SetVideoPosition(), SetVideoSize(), SetVideoVolume(),
  IsVideoPlaying(), and the @VIDEO preprocessor command
- Fix [MacOS]: Colorspace issues with PNG images; Mac OS X automatically applied gamma correction
  to PNGs which could lead to color discrepancies when displaying PNGs together with other graphics/
  images that didn't receive any gamma correction
- Change [MacOS]: libz.dylib is no longer required as we're linking statically against libz now
- New: Added functions for advanced brush transformation: PerspectiveDistortBrush(),
  ArcDistortBrush(), PolarDistortBrush(), and BarrelDistortBrush(); these functions can be
  used to achieve stunning new brush effects; the perspective distortion is especially useful
  for texture mapping
- New: Added CreateGradientBrush() and CreateTexturedBrush(); they do basically the same as
  CreateGradientBGPic() and CreateTexturedBGPic() except that the width/height argument is
  mandatory
- Change: Double buffer mode uses optimized refresh now; when you call Flip(), only the
  areas actually modified will be refreshed; only scripts which do not refresh the whole
  screen with every double buffer flip will profit from this; so if you do a Cls() for
  each frame, then there won't be any gain
- Fix: DebugPrint() did not escape printf() specification fields correctly which could lead
  to a crash when using certain fields
- New: Added alternative catalog format; when the catalog specified in the call to OpenCatalog()
  is not in IFF CTLG format, Hollywood will open it as a simple text file with one catalog
  string per line; if you want to include newline characters inside a catalog string, you
  have to write them as \n; backslashes must be written as \\
- New: OpenCatalog(), GetCatalogString(), and CloseCatalog() also work under Windows, Mac OS X,
  and Linux now; note that on non-Amiga systems, Hollywood searches for catalogs only in the
  current directory, namely in "Catalogs/<system-language>/*.catalog"
- New: Added GetSystemLanguage() function which retrieves the current system language 
- New: Added ColorRequest() function which allows you to choose a color; NB: on AmigaOS this
  requires reqtools.library to be installed
- New: Added ListRequest() function that can be used to pop up a requester that allows the
  user to select an entry from a list view gadget; this is very useful when there are lots of
  different entries to choose from
- New: FontRequest() pops up a requester that allows you to choose a font from all available
  system fonts; additionally, you can select the font style, size, and foreground color
  (depending on the functionality of the host OS's font dialog)
- New: GetSampleData() can be used to access the raw data of a sample; you can modify this and
  then convert it back into a sample using CreateSample()
- New: Added function SaveSample() which allows you to export samples from Hollywood to your
  hard-drive in the RIFF WAVE file format
- New: BrushToRGBArray() and RGBArrayToBrush() functions can be used to convert a brush into
  a table containing <width>*<height> (A)RGB values and vice versa; NB: if you work with large
  tables don't forget to set them to Nil when you no longer need them so the garbage collector
  can free the memory occupied by them
- New: MD5Str() and CRC32Str() can be used to compute the MD5/CRC32 checksum from a string
  source; note that Hollywood strings can contain binary data so you can also pass strings
  containing a null character to these functions
- New: MD5() can be used to compute the MD5 checksum of a file; the 128bit checksum is returned
  as a string containing 16 hex digits
- New: CreateSample() also accepts sample data of type #STEREO8, #MONO16, and #STEREO16
  now; all samples must be signed values (-128/127 for 8bit and -32768/32767 for 16bit);
  if you use stereo samples, the data must be passed as interleaved samples (i.e. left,
  right, left, right, ...)
- New: When drawing rectangles with round corners using Box() or AddBoxToPath(), you can now
  fine-tune the rounding factor of each individual corner by using one of the new CornerA/
  CornerB/CornerC/CornerD tags; if you use these tags instead of "RoundLevel", you can create
  rectangles that have only one or two round corners; these new tags are also accepted by
  SetLayerStyle() now
- New: SetDrawTagsDefault() allows you to change the default values of the standard
  drawing tags; this is useful, for example, if you always want to use an anchor of
  0.5/0.5 instead of 0/0 or if you want new layers to be always inserted at backmost
  position instead of frontmost etc.
- Change: When drawing text or vector graphics using an ARGB front color with layers on, the
  alpha component is automatically translated to the layer's transparency setting (if it
  is different than 0); i.e. drawing a rectangle using $80FF0000 as the color is equal to
  drawing with $FF0000 and setting the layer's transparency to $80 (128)
- New: The standard draw tags "Transparency", "Tint", and "Filters" are now also supported
  when layers are off
- New: The optional table argument of TextOut() & CreateTextObject() now accepts a "Color"
  tag which can be used to specify the drawing color; this is a convenience shortcut to
  avoid having to call SetFontColor() all the time
- Change: Adapted CreateTextObject() syntax to accept an optional table argument now (just
  as TextOut()); the old calling convention is still supported
- New: Added two convenience functions for swapping layer z positions: LayerToFront() and
  LayerToBack()
- New: SetLineWidth() can be used to change the stroke thickness when fill style is #FILLNONE;
  this function is just a shortcut for SetFillStyle(#FILLNONE, <stroke-thickness>)
- New: The transition effects library accepts a new tag called "NoBorderFade" now; when this
  is set to TRUE, the border is no longer gradually faded in/out when showing/hiding a layer
  with an effect
- New: CreateBorderBrush() can be used to create a border for a specified brush
- Change: Conceptual cleanup in the layer system, this was a pile of work: prior to v5 the
  shadow and border (edge) were always hard-rendered parts of the layer; with the introduction
  of the SetLayerShadow() and SetLayerBorder() commands, however, this concept is now obsolete;
  border and shadow are now dynamically attached to/removed from a layer without the need to remake
  the whole layer; this is a much better concept than the previous one; consequently, using
  the style #SHADOW in SetFormStyle()/SetFontStyle() has now the same effect as using
  SetLayerShadow() and using style #EDGE has the same effect as using SetLayerBorder(); of
  course, this only applies when layers are on; in case the layers system is off, the old
  behaviour is still supported; with this new border/shadow concept, Hollywood will behave
  slightly different in some cases; most prominently is a different behaviour in the transition
  effect library: displaying layers with shadow will be much slower now because the shadow
  is updated with each frame but this makes the effect look much better! Secondly, the border
  is faded in or out gradually when a bordered layer is displayed/hidden using a transition
  effect
- New: SetLayerBorder() can be used to add a border of the specified size and color to the
  specified layer; you can also do this via SetLayerStyle() using the new "Border", "BorderSize",
  and "BorderColor" tags; these tags are also recognized now by the standard drawing tags;
- Fix: Crash when transforming a layer while it is displayed asynchronously using a transition
  effect _AND_ the following condition is true: the transformation doesn't change the layer
  size (i.e. rotation by 180 degree) _AND_ the layer doesn't have a mask or an alpha channel
  (e.g. an opaque layer displayed asynchronously using #REVEALLEFT and is rotated by 180
  degrees during the effect display)
- New: ForcePathUse() command can be used to redirect all calls to the old graphics
  library to the new vector graphics library; the following calls are redirected:
  Box(), Ellipse(), Circle(), Polygon(), Arc(); note that the new vector graphics library
  requires a vectorgraphics plugin and it is also slower than the old library but the
  advantage is that curves look perfect with the new library because it is not polyline based
  as is the old library
- New: SetLayerStyle() accepts a "ClearFilters" tag now which can be used to clear all layer
  filters at once; this is a shortcut for setting all filters manually to disabled; alternatively,
  you can also call SetLayerFilter() with 0 as the argument to clear all layer filters
- New: SetLayerStyle(), GetLayerStyle() and the standard draw tags also support the new
  "Filters" table argument now; refer to SetLayerFilter() for a full description
- New: SetLayerFilter() allows you to install one or more filters for each layer; this is
  a powerful feature which can be used for great effects; if you are using multiple filters
  on a single layer, you can specify a priority between 0 and 255 for each filter; Hollywood
  will then apply the filters in the specified order; the following filters are currently
  recognized: "tint", "xflip", "yflip", "grayscale", "invert", "blur", "emboss", "edge",
  "sharpen", "solarize", "gamma", "contrast", "modulate", "sepiatone", "charcoal", "swirl",
  "pixelate", "monochrome", "waterripple", "oilpaint"; NB: the SetLayerTint() command simply
  calls SetLayerFilter() now and initializes the tint filter
- Fix: When removing/hiding a layer using HideLayerFX() or RemoveLayerFX() in asynchronous
  mode and changing the size of the display, redraw problems occurred
- New: The standard draw tags as well as the SetLayerStyle() command now also support the
  tags Shadow, ShadowColor, ShadowRadius, ShadowDir, ShadowSize for the ultimate shadow
  control; Set/GetLayerStyle() note: For text and primitive graphics layers, the ShadowColor,
  ShadowDir, and ShadowSize tags overlap with old tags; this is ok because these two types
  of shadows are mutually exclusive; either use the old-style shadows or the new ones but
  not both!
- New: Added SetLayerShadow() command which can be used to add a nice drop shadow to your
  layer; you can configure the color, opacity, direction, blur radius, and size of the
  shadow; please note that drop shadows are quite CPU intensive-- especially displaying
  transition effects on layers that use a shadow can get quite slow because in most cases
  the shadow has to be recalculated for every frame
- New: CreateShadowBrush() can be used to make a nice alphachannel drop shadow from a
  brush source
- New: ChangeBrushTransparency() can be used to convert a brush with monochrome transparency
  (= mask) to alpha transparency and vice versa; useful when using the "Transparency" tag
  on LoadBrush() because that will always create a masked brush
- Fix: Crash when resizing the display to a larger size while a transition effect in synchronous
  real-layer mode was running
- Fix: The #STAR, #WATERX, and #STRUDEL transition effects left last frame on the screen when
  using real time layers and reverse mode
- New: Added separate version of Hollywood for 68k systems with an FPU; if you are using a
  68020 or 68030, you need a 68881/68882 coprocessor; if you are on 68040 or 060, then
  the FPU is already inbuilt in your CPU; this version gives a great speedup because doing
  floating point operations in pure 68k code is slow as hell (even on emulators like WinUAE or
  MorphOS Trance); using the FPU is really lightyears faster; to compile executables with FPU
  code pass the new CLASSIC881 option in the EXETYPE argument
- New: Added lots of new image processing commands: EmbossBrush(), EdgeBrush(), SharpenBrush(),
  SolarizeBrush(), GammaBrush(), ContrastBrush(), ModulateBrush(), SepiaToneBrush(),
  CharcoalBrush(), SwirlBrush(), PixelateBrush(), BrushToMonochrome(), WaterRippleBrush(),
  OilPaintBrush()
- New: BlurBrush() function can be used to apply a Gaussian blur filter to the specified
  brush; you can optionally specify a blur radius (floating point) that shall be used
  (the larger the radius you pass, the longer the computation will take)
- Change [WarpOS]: The 68k parts of the WarpOS hybrid binary now have inlined code for the
  68881/2 FPU which is supported by every 68040/68060 CPU; makes floating point operations
  much faster
- Change [OS3]: pngalpha.library is no longer required by the 68k version of Hollywood;
  this also makes loading alpha channel PNG images faster because this is directly done
  by Hollywood now
- New: Added support for poly colored gradients; previously, Hollywood could only create
  gradients between two colors; now you can specify a whole array of colors including color
  stops (between 0 and 1); this allows the creation of impressing custom gradients!
- New: Added support for #RADIAL and #CONICAL gradients; optional table arguments "CenterX/Y",
  "Border" (radial only) and "Balance" (conical only) can be used to control the appearance;
  the gradients are supported by SetFillStyle(), CreateGradientBGPic(), LoadBGPic()/@BGPIC,
  CreateDisplay()/@DISPLAY, SetLayerStyle(); note that a gradient angle is only supported
  for types #LINEAR and #CONICAL; radial gradients will ignore the specified angle
- New: RepeatStr() repeats a string the specified number of times and returns the resulting
  string
- New: GetDisplayModes() returns a table containing all modes supported by the current
  monitor; depth is not returned because this is clearly a thing of the past... every
  system should run true colour nowadays
- New: When starting Hollywood from a console, a list with all supported arguments including
  a brief description is now presented to the user
- New: Added functions for dealing with environment variables: GetEnv(), SetEnv(), and
  UnsetEnv()
- Change [MacOS]: Backslashes in path specifications are now automatically converted to
  slashes; makes it easier when porting scripts from Windows to Mac OS X
- New: FileToString() and StringToFile() can be used to read a whole file into a string
  and write a string to a new file; these are just some useful shortcuts for the
  OpenFile()/ReadString()/WriteString()/CloseFile() commands
- New: DefineVirtualFileFromString() allows you to create a virtual file from a string source;
  this is very useful in connection with the network functions; for instance, you could
  directly load a brush from an Internet source without having to save it to a temporary
  location first; be warned though that you should always set strings that you no longer
  need to NIL to make sure the garbage collector can kill them; otherwise you can run into
  serious memory problems especially with larger strings; with strings used as virtual files,
  you also need to call the UndefineVirtualStringFile() function when you're done with the
  virtual string file
- New: Added new event handlers for dealing with the new network functionality: OnConnect,
  OnDisconnect, OnReceiveData, OnReceiveUDPData
- New: Added support for the UDP network protocol; UDP is a connectionless network protocol
  that is especially useful for exchanging data very quickly; the downside is that it
  doesn't guarantee that packets arrive error free so you should only use it when
  transferring non-critical information; new commands are CreateUDPObject(), CloseUDPObject(),
  SendUDPData(), ReceiveUDPData()
- New: Added highlevel functions for easily downloading and uploading files using the
  HTTP or FTP protocols; DownloadFile() can be used to download a file from a HTTP or
  FTP server very easily and UploadFile() can be used to upload a file to a FTP server
  very easily; download can be either directly to a file or to a Hollywood string; upload
  source can also be either a file or a Hollywood string; both functions support user
  callbacks so you can display some status information while downloading/uploading data
- New: Added TCP connection and server functions; using these functions you can finally
  connect to the Internet (or local networks) and easily exchange data with other computers;
  Hollywood supports two types of TCP objects: TCP clients and TCP servers; using the
  server API you could even create a small webserver with Hollywood :) It's a very powerful
  API, use it wisely! The following commands have been added: OpenConnection(), CloseConnection(),
  CreateServer(), CloseServer(), SendData(), ReceiveData(), GetConnectionIP(), GetConnectionPort(),
  GetHostName(), GetLocalIP(), GetLocalPort(), ToIP(), ToHostName(), SetNetworkTimeout()
- New: CreateGradientBGPic() and CreateTexturedBGPic() now create vector BGPics; when
  resized, the gradient/texture image won't be scaled but generated anew; creates much
  better looking BGPics!
- New: CreateDisplay() and @DISPLAY also accept the new background setting tags now;
  this allows you to create a display with gradient or texture background without having
  to create a BGPic first
- New: Added optional arguments for LoadBGPic() and @BGPIC which can be used to control
  the background of transparent images; this is needed because some images always have alpha
  channel transparency but in most cases you don't want the alpha channel to be used
  by the Hollywood display; by using the new optional argument you can define a background
  on which the image shall be rendered; possible tags are: "FillStyle", "FillColor",
  "GradientStartColor", "GradientEndColor", "GradientAngle", "TextureBrush", "TextureX",
  "TextureY"; usage is very similar to SetFillStyle()
- New: LoadBGPic() and @BGPIC also support vector images now; very useful for scripts that
  can run in different resolutions; by using a vector image as a BGPic you can be sure that
  the BGPic looks crisp in every resolution
- New: RasterizeBrush() can be used to convert a vector brush into a rasterized brush
  (which is the standard brush type in Hollywood)
- New: #ATTRTYPE can now be queried for #BRUSH and #BGPIC; returns either #IMAGETYPE_RASTER
  or #IMAGETYPE_VECTOR
- New: Introducing support for vector images! Yes, you got that right! Hollywood is now able
  to load these cool vector images and you can transform them in true vector graphics
  fashion without any quality losses; this is especially useful in connection with the
  new layer scaling engine because if you use vector graphics now, your project will
  always look perfectly crisp no matter in what resolution it is currently running; to
  load a vector image into Hollywood, just use LoadBrush() or @BRUSH; you will get a special
  brush then: a vector brush! Vector brushes can be transformed without quality loss
  using ScaleBrush(), RotateBrush(), TransformBrush() etc.; note though that many of the
  image manipulating functions are not available for vector brushes; if you want to use
  these functions, you need to convert the vector brush to a raster brush first; you need
  an appropriate plugin for loading vector images
- New: SetLayerStyle() can modify layers of type #VECTORPATH now; the following tags
  are currently supported: ID, Color, LineJoin, LineCap, FillRule, DashOffset, Dashes,
  as well as the standard form and fill style settings
- New: #ATTRCOUNT can be queried for #VECTORPATH; returns the number of vector paths
  currently present
- New: Introducing support for vector graphics: Hollywood finally has a fully featured
  vector drawing library including support for curves, different stroking and line join
  styles, different line cap styles and much more; the library uses a path-based drawing
  model which means that in order to draw a vector shape, you first have to create a path
  and then add vertices to it; a path can also have an infinite number of sub-paths; this
  is a very powerful library and allows you to do very cool things; the drawing style of
  the vector graphics library can be configured with SetFillStyle() and SetFormStyle() in
  just the same way than the old graphics library; please note that the vector graphics
  library requires a vectorgraphics plugin to be present; the following commands have
  been added: MoveTo(), LineTo(), CurveTo(), RelMoveTo(), RelLineTo(), RelCurveTo(),
  DrawPath(), StartPath(), StartSubPath(), ClosePath(), AddArcToPath(), AddCircleToPath(),
  AddEllipseToPath(), AddBoxToPath(), SetLineJoin(), SetLineCap(), SetDash(), SetFillRule(),
  FreePath(), ClearPath(), IsPathEmpty(), GetCurrentPoint(), GetPathExtents(), CopyPath(),
  AppendPath(), AddTextToPath(), TranslatePath(), NormalizePath()

Version 4.8     (21-Apr-11)

- Change: Updated Hollywood documentation
- Change: Updated catalog descriptions and German translation; added new developer
  files for doing new translations
- Change: Updated the Hollywood GUI
- Fix [MorphOS]: Alpha transparent displays were broken since v4.7
- Fix [Win32]: ALT-GR+C caused Hollywood to behave as if CTRL-C was pressed (reported by Lazar
  Zoltan)
- Fix: Box() didn't work correctly when #SELMODE_COMBO was used together with a color that
  contained an alpha transparency value (reported by Fabio Falcucci)
- Fix: Removing the transformation from a text layer using the Rotate/ScaleX/Y/Width/Height tags
  in SetLayerStyle() didn't work when you changed one of the layer attributes (e.g. color) at
  the same time (reported by Paul Bloedel)
- Fix [Amiga]: HideDisplay() didn't close the backfill and resource monitor windows when called
  in full screen mode (reported by Lazar Zoltan)
- Fix: RotateTextObject() crashed because of a memory access fault (reported by Nick Sommer)
- Fix: HIDEPOINTER argument didn't work in fake full screen mode (reported by Gero Birkenfeld)
- Fix: Using CopyBGPic() on a textured BGPic generated a memory fault on program exit
  (reported by Paul Bloedel)
- Fix: #ATTRMODE always returned 0 for type #DISPLAY (reported by Lazar Zoltan)
- Fix: Exists() no longer exits with an error when passed an empty string (reported by
  Lazar Zoltan)
- Fix [MacOS]: Potential stack trashing in the DOS handler due to weird behaviour of the
  realpath() POSIX function on Mac OS X (reported by Lazar Zoltan)
- Fix [Amiga]: Some joystick issues on WinUAE; lowlevel.library on WinUAE mostly returns
  JP_TYPE_UNKNOWN which Hollywood wasn't prepared to handle (reported by Marko Seppnen)
- Fix: Memory access fault in DisplayBGPic() when the previous BGPic was a special marked-
  for-deletion BGPic (rare case)
- Fix [Amiga]: IsPicture() didn't return the correct dimensions for some JPEG pictures
  (reported by Fabio Falcucci and Simone Monsignori)
- Fix: ReadLine() does no longer append a null character for empty lines
- Fix [OS4]: Some problems with OS4's SystemTags() command (reported by Nick Clover)
- Fix [Win32]: Some fixes in the string library when using strings with ASCII characters that
  have the highest bit set (signed/unsigned error)
- Fix: User-defined constants were not exported correctly to Hollywood applets which had the
  effect that they weren't accessible when including a Hollywood applet using @INCLUDE or when
  using them inside a text formatting string like [color=#MYCOLOR]Hello[/color] (reported by
  Fabio Falcucci and nexus)
- Fix: Log() didn't work correctly (reported by Paal Nygaard)
- Fix: SelectLayer() didn't work correctly on layers with an anchor point different from 0/0
  (reported by Jali Heinonen)
- Fix [AROS]: IFF 16SV samples didn't work correctly
- Fix [MacOS]: Grayscale and CMYK images did not work correctly on Mac OS (reported by Paul Bloedel)
- Fix: Upper/lower case converting did not always work correctly with the non-English characters
  in the ISO-8859-1 charset; this affected commands like LowerStr(), UpperStr(), but also
  FindStr() and ReplaceStr() when using case insensitive search mode (reported by Janne Peraho)
- Fix [MacOS]: Lines drawn by Line() were usually off by one on the y-axis when USEQUARTZ was
  active
- Fix: Out of memory error when transforming a brush/bitmap layer using very small values for
  the scalex and scaley parts of the transformation matrix
- Fix: Crash when using FITSCALE with a transparent display
- Fix [Amiga]: GetClipboard() returns #CLIPBOARD_UNKNOWN now when encountering unknown
  data on the clipboard (previously it would raise an error) (reported by Paul Bloedel)
- Fix: SetDisplayAttributes() was not able to change the window style to borderless and
  the dimensions to the desktop dimensions at the same time (reported by Simone Monsignori)
- Fix: ReplaceStr() could crash when more than ~20 strings needed to be replaced
  (reported by Paul Bloedel)
- Fix: Modifying the font size of a layer that uses a font loaded using the inbuilt font
  engine that was specified by using an absolute path to a *.ttf/*.otf file resulted
  in an error code (reported by Tom C.)
- Fix: PlayMusic() times tag did not default to 1 but to 0 (i.e. infinite looping)
- Fix: Under very special circumstances, SetLayerStyle() failed when modifying the font size
  of a text layer without specifying the font name (reported by Paul Bloedel)
- Fix: Setting the "Link" tag to False in the preprocessor commands did not work correctly
  because Hollywood always used absolute paths since v4.5; the result was that the applet
  worked just fine on the system it was compiled on but not on any other system
- New [Linux]: Added AUDIODEV argument which can be used to specify which ALSA audio device
  Hollywood should try to open for sound output
- New [Linux]: Added XSERVER argument that allows you to specify the X server that Hollywood
  should try to connect to
- New: Hollywood can now compile for i386 Linux systems, too! That was a pile of work!
  The Linux version of Hollywood has the same features as on all other platforms except
  that there is no MP3 support; great care has been undertaken to ensure that programs
  compiled by Hollywood work out of the box on all common Linux distributions; obligatory
  dependencies have been reduced to a minimum, the result being that the only mandatory
  dependency is libX11 and the standard glibc; both should really be present on every
  Linux system; of course, Hollywood supports additional components like several X11
  extensions, ALSA and GTK but this is all optional, it will only be used if it is there

Version 4.71    (10-Jun-10)

- Change: Added public demo version for Windows systems; no other changes

Version 4.7     (21-Apr-10)

- Change: Updated Hollywood documentation
- Change: Updated catalog descriptions and German translation; added new developer
  files for doing new translations
- Change: Updated the Hollywood GUI
- Change: Text example uses #SANS and platform independent font renderer now
- New: SetLayerStyle() also accepts the "Encoding" tag for text layers now; allows you to
  switch text encodings on the fly
- New: Added support for UTF-8 character encoding in the text output functions (TextOut(),
  Print(), CreateTextObject()); you can either use the new "Encoding" argument/table tag
  or change Hollywood's default encoding using SetDefaultEncoding(); by default, Hollywood
  uses ISO 8859-1 (= #ENCODING_ISO8859_1); there is a slight API break here because under
  OS4 Hollywood always used the system's current codeset instead of ISO 8859-1; this, however,
  affected portability because on all other systems Hollywood would use ISO 8859-1 so if your
  OS4 system was using a different charset, you would run into problems; but now that we
  have UTF-8 support these problems should be gone; just use UTF-8 if you need to use non
  ASCII characters and your script will be fully portable; NB: under AmigaOS, codesets.library
  is required for UTF-8 support
- Fix: DeleteButton() could cause a crash in very rare circumstances when it was called by
  an event callback with the internal wait event loop currently iterating the button list
- Change: DisableButton() and EnableButton() will reset button states
- Change: ResetKeyStates() will now also reset all button states
- Fix: Several fixes with buttons that listened to "OnMidMouseDown" and "OnMidMouseUp"
- New: GetCommandLine() returns a third value now that specifies whether or not Hollywood
  was started from a console (requested by Simone Monsignori)
- Fix [Amiga]: Hollywood refused to open displays partly outside the screen bounds (reported
  by Jesper Schultz-Pedersen and Paul Bloedel)
- Fix: Events did not time out correctly under certain circumstances
- Change [Win32/Mac]: Multiple joysticks are now also supported on Windows and Mac OS X
- Fix [Amiga]: Possible memory trash when writing very long strings to the debug device
- Change: The last argument of WriteString() can now also be omitted or set to 0 which means
  write the entire string to the file
- New: Added GetLayerAtPos() command which returns the front-most layer at the specified
  position
- Fix [AROS]: Alpha channel detection didn't work correctly
- New: Added ModifyLayerFrames() command; this does exactly the same as ModifyAnimFrames()
  except that it works with anim layers instead of anims
- Fix: ConvertToBrush() always returned the first frame of anim layer instead of the specified
  frame
- New: GetRandomColor() returns a random color
- New: Added CreateLayer() command which can be used to create an empty new layer for subsequent
  modification using SelectLayer(); CreateLayer() will either create a brush or an anim layer,
  depending on the number of frames you specify; you should always use CreateLayer() when you
  plan to modify the layer using SelectLayer() because using CreateLayer() instead of the
  standard layer creation commands will instantly prepare the layer for modification which the
  other commands don't do and thus SelectLayer() often needs to do some extra work before the
  layer is ready for modification (especially in case of anim layers, CreateLayer() is really
  to be preferred)
- New: SelectMask() and SelectAlphaChannel() also support type #LAYER now
- New: Added SelectLayer() command which allows you to draw directly to layers; if the layer
  is an anim layer, you need to specify the frame to draw to; please note that this command
  will convert all vector layers to raster layers of type #BRUSH; this will result in poor
  quality when transforming these layers because they are now pixel-based; thus, for the best
  effects SelectLayer() should only be used with pixel-based layers (requested by Lazar
  Zoltan)
- Fix [Win32]: Several requesters did not appear correctly after opening an initially hidden
  display under Win32 (reported by Paul Bloedel)
- Fix [MacOS]: IsPicture() alpha channel detection didn't work correctly with Snow Leopard
  (reported by Paul Bloedel)
- Fix: VIDEOPOINTER argument didn't work at all (reported by Tom C.)
- New: SetLayerStyle() can now also change the z-position of a layer; use the new "Z" tag
  for this
- Fix: DisplayTextObject() didn't handle negative text underhangs correctly (reported by
  Robin Hueskes)
- New: Added TranslateLayer() command; this allows you to move a layer around very easily
  using delta coordinates instead of absolute coordinates; very useful!; also supported by
  SetLayerStyle() using the "TranslateX/Y" tags
- Fix: The "RightMargin" tag was not handled correctly for layers of type #TEXTOUT by
  SetLayerStyle() (reported by Tom C.)
- Fix: IsMusicPlaying() didn't work correctly (reported by Fabio Falcucci)
- Change [Amiga]: Executable protection flag is now set explicitly by the compiler because
  some file systems (e.g. JXFS) don't set it by default (reported by Jesper Schultz-Pedersen)
- Fix [Amiga]: Graphical glitches when removing multiple layers at once using asynchronous
  crossfade effects (reported by Torgeir Vee)
- Fix: TextOut() and Print() didn't respect sprite priorities correctly (reported by Lazar
  Zoltan)
- New: Added three inbuilt TrueType fonts: #SANS, #SERIF, and #MONOSPACE; these are available
  on every system and will look exactly the same on every system thanks to the new freetype2
  backend
- New [Win32]: Some new functionality for GetSystemInfo() (private; requested by Torgeir Vee)
- New [Win32]: Added CreateShortcut() function which allows you to easily create these *.lnk
  files (requested by Torgeir Vee)
- Fix: TextOut()/Print() in fast-draw mode did not substitute layers correctly (reported by
  Lazar Zoltan)
- New: Added FITSCALE console argument that can be used to tell Hollywood to fit its window
  perfectly to the screen; only effective if AUTOSCALE or LAYERSCALE is used; if used together
  with KEEPPROPORTIONS, Hollywood will keep the proportions; it is also accessible using @DISPLAY
  or CreateDisplay() (requested by Torgeir Vee)
- New: Added KEEPPROPORTIONS console argument that can be used to tell Hollywood to keep the
  proportions when the user is resizing the window; it is only effective when used together
  with AUTOSCALE or LAYERSCALE; it is also accessible via the @DISPLAY or CreateDisplay()
  commands (requested by Torgeir Vee)
- Change [Amiga]: Backslashes are now converted into slashes and also special shortcuts like
  ".." and "." are handled correctly now; makes cross-platform script development much easier
- Change [MacOS]: Backslashes in filenames are now automatically converted into slashes so that
  Windows scripts work hassle-free under Mac OS, too
- Fix [Amiga]: Bug in display size verification could result in Hollywood refusing to open
  a display although it would fit perfectly on the screen (only in rare cases)
- New: Added @APPICON preprocessor command which can be used to link icons into executables
  without having to use the console parameters
- New: Added support for linking icons into executables generated by Hollywood; this is only
  possible for executables compiled for Windows and Mac OS X because AmigaOS keeps icons
  externally; use the new ICON16x16, ICON24x24, ICON32x32, ICON48x48, ICON128x128, ICON256x256,
  ICON512x512 arguments for it (requested by Torgeir Vee)
- Fix [MacOS]: Execute() and Run() didn't handle parameters correctly (reported by Paul Bloedel)
- New: When using #FONTENGINE_INBUILT, you may also specify a .TTF/.OTF file directly
  in SetFont(), OpenFont(), or @FONT
- New: FreeGlyphCache() can be used to free the glyph cache of all fonts or a specific
  font; note that currently only the freetype2 backend supports glyph caching
- New: Added support for glyph caching; this drastically improves text rendering performance
  and it is especially useful on AmigaOS3 because TrueType text is really slow on this
  platform; glyph caching is currently only supported by the freetype2 backend (use
  #FONTENGINE_INBUILT) and it is enabled by default; to disable it, specify FALSE in the
  "Cache" table argument
- New: Introducing support for platform independent font rendering; this is done via
  a new font backend that is based on the freetype2 library; you can enable the platform
  independent font renderer by setting the "Engine" field of the optional table argument
  in SetFont(), OpenFont(), or @FONT to #FONTENGINE_INBUILT; if you use this engine, TrueType
  fonts will look exactly the same on every system (requested by Torgeir Vee and many
  others)
- New: GetAvailableFonts() returns a table that contains information about all fonts
  available to Hollywood; it also contains information about the font type (bitmap or
  vector) and the available font sizes (only for bitmap fonts)
- New: #ATTRRAWXPOS, #ATTRRAWYPOS, #ATTRRAWWIDTH, #ATTRRAWHEIGHT can be used to query the
  real position and dimension of a layer; note that these functions operate on a pretty
  lowlevel inside the layers system and should only be used if you know what you are doing
 (requested by Tom C.)
- Change: TrimBrush() returns the number of columns/rows trimmed from the left/top of the
  brush; you can calculate the right/bottom area by comparing the brush dimensions before and
  after the trimming (requested by Alfkil Wennermark)

Version 4.6    (08-Feb-10)

- ***NB***: V4.6 was only released on Windows as a special introductory release to
  introduce the new Windows IDE of Hollywood; no Amiga version was released of version 4.6
- Change: Updated Hollywood documentation
- Change: Updated catalog descriptions and German translation; added new developer
  files for doing new translations
- Change: Updated the Hollywood GUI
- New [Win32]: Added a fully featured IDE for the Windows version of Hollywood; Hollywood
  is now available separately for this platform!
- Change: Several cosmetic changes to the Hollywood examples
- New: Added TextureScroll example
- Fix: InvertBrush() did not work for all pixel formats
- Fix: IsAnim() returned TRUE also for GIF images (reported by Simone Monsignori)
- New: SetLayerZPos() allows you to change the z position of a layer (requested by Tom
  C.)
- Fix [Win32]: "SizeWindow" event was always sent twice
- Fix [OS4]: Added another workaround for OS4 bug that reported "Out of memory!" when
  running the Snowflakes example
- New: LayerExists() can be used to check if a specified layer exists
- Fix: Table element functions and methods without arguments could not be called without
  specifying parentheses
- Fix: Memory was freed twice in case of an error in TextOut() which led to a system
  crash on OS3 (reported by Tom C.)
- New: CreateTexturedBGPic() also supports texture offsets now
- New: #FILLTEXTURE supports two additional arguments now that allow you to specify the
  offset inside the brush where texturing should start; SetLayerStyle() and GetLayerStyle()
  also support this now through the "TextureX" and "TextureY" tags; can be used for nice
  scrolling effects on a textured layer
- Fix: Some transition effects confused #SLOWSPEED with #FASTSPEED leading to #SLOWSPEED
  appear very fast and #FASTSPEED appear very slow
- New: Font embedding also works with TTC (True Type collections) and DFONT (Mac data
  fork) flavored fonts now
- Fix: When compiling an applet into an executable, embedded fonts in the applet weren't
  handled correctly
- New: Added CountJoysticks() function; returns the number of joysticks currently
  available or 0 for no joysticks
- New: Joystick support is back! Now supported on all platforms; Windows & Mac, however,
  currently only support a single joystick (requested by Lazar Zoltan)
- Fix [Win32]: DDE applications (e.g. Microsoft Word) didn't work very well with Run()
  and Execute() (reported by Torgeir Vee)
- New: CopyTable() can be used to make an independent copy of a table; metatables are
  not copied by this function (requested by Alfkil Wennermark)
- Fix: Fixed illegal memory access when writing IFF ILBM pictures; could lead to crashes
  when saving a brush to clipboard (reported by Helmut Haake)
- Fix [OS4]: Added workaround for a severe bug in OS4's BltMaskBitMapRastPort() which
  causes a complete system crash (reported by Simone Monsignori)
- Fix [Amiga]: Fixed a bug in the clipboard handler (reported by Helmut Haake, Michael
  Jurisch)
- Fix: Preloading color fonts did not work when Hollywood was in WPA mode
- Fix: "Vertices" table in SetLayerStyle() did not work correctly when using a polygon
  that was not normalized together with the "X/Y" positioning tags
- New: SetLayerStyle() accepts the new tags "X1,Y1,X2,Y2" now for use with layers of
  type #LINE only (requested by Carsten Siegner)
- Fix: SetLayerAnchor() and "AnchorX/Y" in SetLayerStyle() didn't work correctly
 (reported by Carsten Siegner)
- New: ResetKeyStates() allows you to manually clear the key & mouse button states;
  this is just here for emergency cases :-)
- Fix: SystemRequest(), FileRequest() and PathRequest() did not reset the key states
  which could lead to stuck keys and mouse buttons (reported by Alfkil Wennermark)
- New: TrimBrush() can be used to crop all transparent areas of a brush (requested by
  Alfkil Wennermark)
- Change: SetWBIcon() falls back to default icon now if the specified icon does not
  exist (suggested by Simone Monsignori)
- New: Added SCRIPTALIAS argument (currently private)
- Fix: IsPicture() slowdown with certain JPEGs (reported by Simone Monsignori)
- Fix: Some transition effects did not work when layers were used together with auto
  scaling
- Fix [Win32]: Potential deadlock when using many different timers due to a bug in
  Windows XP and below
- Fix: Crash when a window refresh occurred during SelectMask() or SelectAlphaChannel() was
  active, and a mask/alpha channel did not exist yet

Version 4.5    (02-Jan-10)

- Change: Updated Hollywood documentation
- Change: Updated catalog descriptions and German translation; added new developer
  files for doing new translations
- Change: Updated the Hollywood GUI
- Fix [OS3]: Embedded alpha channel images did not work in compiled applets/executables
- Fix: When using in StringRequest() in #NUMERICAL mode, the maxchars parameter wasn't
  respected (reported by Simone Monsignori)
- Fix [MacOS]: MovePointer() doesn't reset button down flags any more
- Fix [MacOS]: QuickDraw bitmaps are no longer limited to 4093 pixels
- Fix [Amiga]: Custom shaped clip regions didn't work when USEWPA was used
- Fix [AROS]: "Cannot lock bitmap!" problem fixed (reported by Fabio Falcucci)
- Fix: Finally fixed the long standing write protected problem that happened on
  WinUAE during the installation; all files are unprotected now during installation
- New: Added several new examples: ClipboardDemo, DisplayStyle, DragNDrop, FXTool,
  MultiDisplays, MultiDragNSize, Snowflakes, WBApple
- Change [Amiga]: "ActiveWindow" event is now sent when a display is opened with
  activation; "ShowWindow"/"HideWindow" are also sent when calling HideDisplay()/
  ShowDisplay() (requested by Fabio Falcucci)
- New: Finally added documentation about metamethods, metatables, RawGet(), RawSet(),
  RawEqual(), and some object-oriented programming techniques to the manual
- Fix [MacOS]: Loading 24-bit JPEGs didn't work under Snow Leopard (reported by Torgeir
  Vee)
- Change [MacOS]: Hollywood is now always using ISO-8859-1 instead of MacRoman; this
  is required for cross-platform compatibility because executables compiled under
  AmigaOS will always use ISO-8859-1 encoding which would then look wrong under
  Mac OS because MacRoman was used there (reported by Torgeir Vee)
- Fix: OpenCatalog()'s second argument was mandatory although the documentation said
  it would be optional (reported by Kai Stegemann)
- Fix [AROS]: Saving PNGs is working now
- Fix: CopyBGPic() will now copy scaled and unscaled versions of the specified
  BGPic (reported by Paul Bloedel)
- New: ReadDirectory() accepts an optional argument now which allows you to turn off
  automated sorting; useful if you don't need the data sorted
- Change: ReadDirectory() now uses the optimized sort algorithm; much faster now!
- Change [OS4]: libpng is used directly now for saving PNGs; increases executable
  size by 80kb but makes saving much faster than using the 68k pngalpha.library
- New: Extended CreateSprite(); when used with source type #SPRITE, you can specify
  as many sprites as you want; the graphics of the specified sprites will never be
  copied but only referenced; thus, you can easily create different animation sequences
  with very low memory footprint and very fast execution; a small API change: linked
  sprites can no longer be used as a source sprite because that would lead to possible
  endless loops (requested by Alfkil Wennermark)
- Fix: CopySprite() was broken when used on linked sprites
- Fix: FlipSprite() and ScaleSprite() can no longer be used on sprites that are
  referenced by other sprites (sprite links)
- New: Collision() can also check collisions between boxes and sprites/layers/brushes
  (requested by Lazar Zoltan and Alfkil Wennermark)
- New: SelectMask() and SelectAlphaChannel() also support #BGPIC now; exception: not
  possible for BGPics currently associated with a display
- New: SelectBGPic() accepts an optional mode argument now which can be used to change
  the graphics of the BGPic directly (without adding layers); the new combo mode is
  also supported; both new modes are available also when layers are off; restrictions:
  you cannot use SelectBGPic() on a BGPic that is currently associated with a display
  if mode <> #SELMODE_LAYERS
- Fix: FreeBGPic() and ScaleBGPic() did not check if the specified BGPic was currently
  the selected output device which could lead to crashes
- New: Added support for querying the state of the middle mouse button; you can install
  an event handler on it ("OnMidMouseDown"/"OnMidMouseUp") or use the new IsMidMouse()/
  WaitMidMouse() functions; also, MakeButton() supports OnMidMouseDown/OnMidMouseUp now
  (requested by Lazar Zoltan)
- Fix [OS4]: Opaque mouse pointers did not work correctly (reported by Eric Luczyszyn)
- Fix: CMYK JPEG images are working now under Win32 (reported by Brian Hargrove)
- New [Amiga]: Added SetWBIcon() function; you can use this function to change the icon
  that will be displayed when Hollywood is iconified on Workbench (requested by Paul Bloedel)
- New [Amiga]: Added GetIconProperties() and SetIconProperties() functions; these two allow
  you to get and set various icon attributes including tooltypes; these two functions are
  only available in the Amiga version of Hollywood
- Fix [MacOS]: PNGs using 16-bit per component didn't work under Mac OS; Hollywood now
  supports 48bit and 64bit PNGs under Mac OS X too (reported by Alfkil Wennermark)
- Fix [MacOS]: RIFF WAVE samples in 16-bit format didn't work under Mac OS PPC, and 8-bit WAVE
  samples didn't work under Mac OS Intel (reported by Alfkil Wennermark)
- Fix: #ROLLXXX and #WALLPAPERXXX didn't work in undo mode when used on a layer that had
  no transparency
- Fix: #DISSOLVE didn't work in undo mode when real layers were off
- Fix: #HFLOWXXX, #VFLOWXXX, #DISSOLVE, #PIXELZOOM1, #ROLLXXX, #WALLPAPERXXX forgot to draw
  the last frame when in undo mode (last frame = remove layer completely)
- New: Guess who's back? CheckEvent() is back after an absense of over 15 revisions (it got
  removed in v2.5); it's back now because I need it in Designer... normal users should always
  use WaitEvent() though
- New: SelectBrush() and SelectAnim() accept a new optional mode argument now that can be
  used to put Hollywood into a special combo select mode; combo select means that color and
  transparency channels are affected by any draw operations; previously, you had to choose
  between the two (color=SelectBrush(), transparency=SelectMask()/SelectAlphaChannel()); now you can
  do it all in one go; note that Hollywood will always draw in vanilla copy mode to the
  mask/alpha channel if the combo select mode is active; the settings of SetMaskMode() and
  SetAlphaIntensity() are ignored
- New: #ATTRALPHAINTENSITY and #ATTRMASKMODE can be queried in GetAttribute() for #DISPLAY;
  note that both are global settings so you can pass 0 for display id
- Change: When using #VANILLACOPY as alpha intensity, Hollywood didn't do anything at all
  when the source image didn't have an alpha channel; this is changed now; if the source
  image doesn't have an alpha channel, opaque intensity (= 255) is used now; this is an
  API break but I hope it doesn't cause any major problems
- Fix: Alpha value was not respected in Plot() when SelectBrush() was active
- New: CreateBrush() accepts an optional table argument now which allows you to specify
  whether or not the new brush shall have an alpha channel or mask; you can also specify
  if the transparency channel shall be cleared or opaque
- Fix [Amiga]: Mono streams didn't work and crashed the system
- New: #ATTRHASMASK and #ATTRHASALPHA also supported for anims now
- New: PlayMusic()'s second argument can be a table now which supports the fields "Times"
  and "Volume"
- New: IsMusicPlaying() checks whether a given music is currently playing; note that
  currently only one music may play at a time
- New: PlaySample()'s argument table accepts "Times" and "Panning" fields now
- New [Win32]: Added ReadRegistryKey() and WriteRegistryKey() functions; these functions
  allow you to work with the registry under Windows; naturally, both functions are not available
  in the Amiga and Mac OS versions of Hollywood
- Fix [Win32/Mac OS]: Drawing images with alpha channel didn't work when a custom shaped
  clip region was active
- New: Layer clip regions are now also respected by Collision() and for #LAYERBUTTON type;
  supporting clipped collisions was quite complex
- New: Added "NoClipTransform" style tag to SetLayerStyle(); set this if you do not want
  the clip region to be transformed with the layer
- Change: Fixed Welcome.hws and FormsDemo.hws to work with the new anchor point feature
- Change: Adapted LayerStyle example to make use of the new features
- New: SetLayerStyle() supports "AnchorX" & "AnchorY" now; useful if you want to change
  the anchor point and the layer's position in a single call; anchor points can be
  queried using GetLayerStyle()
- New: Added SetLayerAnchor() function; allows you to change the anchor point of a
  layer
- Fix: ScaleLayer() & RotateLayer() behaviour was inconsistent under Hollywood 4.0
  because ScaleLayer() applied the transformation using an anchor of 0/0 and RotateLayer()
  used an anchor of 0.5/0.5; note that this fix will break scripts that use RotateLayer();
  you need to move the anchor point of those layers to 0.5/0.5 to get the old behaviour
- New: Added support for anchor points for all objects; this is very useful especially
  when transforming/scaling/rotating objects because all transform operations are
  relative to the anchor point; also, the position of an object is relative to the
  anchor point; you can define an object's anchor point by specifying the "AnchorX"
  and "AnchorY" tags in the table argument of an object display call; if not specified,
  the anchor point defaults to 0.0/0.0 which means the top left corner of the object
- New: Added GetSystemInfo() - this call is currently private
- Fix: Optional interpolate argument didn't work in ScaleLayer() and RotateLayer()
- New: TransformLayer() can be used to apply any arbitrary 2D transformation to your
  layer; you can also access this feature using the new "Transform" table entry in
  SetLayerStyle() and in all functions that add layers (e.g. DisplayBrush() etc.);
  GetLayerStyle() will also return the layer's transformation matrix if present
- Change: Width/Height no longer supported for TextOut() even when layers are on;
  use ScaleX/ScaleY instead
- Fix: TextOut()'s transform table wasn't handled correctly when layers are turned off;
  it's working now but Width/Height are not supported; use ScaleX/ScaleY instead
- New: ScaleX/ScaleY also supported by SetLayerStyle() & GetLayerStyle()
- New: Transform table supports "ScaleX","ScaleY" fields now; very useful to work
  with relative scaling numbers
- Fix: Layer scale engine didn't work correctly with rotated layers
- Fix: Line() didn't work correctly with the layer scale engine
- New: TransformBrush() allows you to apply affine transformation to a brush from a 2x2
  transformation matrix source
- New: IsPicture() returns a second value now which is a table that contains information about
  the image size and whether or not there's an alpha channel; useful for quickly obtaining
  image info without loading the whole image
- New: #ATTRMODE can be queried now for type #FILE
- Fix [MacOS Intel]: Endian fixes in the IFF24 and color font loader
- Change [MacOS]: When USEQUARTZ is active, composited windows are used now; Quartz is still
  slower than QuickDraw here but who knows what the future will bring
- Fix [MacOS]: Several fixes in the Core Audio driver (reported by Janne Peraho)
- Fix [MacOS]: Intel version didn't work on Tiger (reported by Janne Peraho)
- New: Added "NoClose" tag to @DISPLAY, CreateDisplay(), and SetDisplayAttributes(); allows
  you to create windows with a border but without a close widget; you can query a display's
  close setting using #ATTRNOCLOSE
- New: Added RESOURCEMONITOR argument that can be used to put up the resource monitor add
  start time
- New: OpenResourceMonitor() and CloseResourceMonitor() functions can be used to open a
  debug window that shows constantly updated information about Hollywood's object cache;
  very useful to see if your script manages its objects efficiently (i.e. doesn't constantly
  add more objects such as layers)
- New: The following object types support #ATTRCOUNT now which returns the number of objects
  currently in memory (including gone objects): #ANIM, #BRUSH, #SPRITE, #BGPIC, #TEXTOBJECT,
  #DISPLAY, #LAYER, #SAMPLE, #MUSIC, #CLIPREGION, #POINTER, #ASYNCDRAW, #MEMORY, #FONT, #FILE,
  #DIRECTORY
- New: OpenURL() allows you to open web sites from your script (requested by Torgeir Vee)
- New: All functions that add layers accept several new attributes in the optional table
  argument now: Hidden, Transparency, Tint, TintColor, and InsertPos; this allows you to
  add and configure a layer with a single call; this is mostly useful for creating hidden
  layers directly or for inserting layers at a position different from the last
- Change: Graphics primitives like Box(), Ellipse(), etc. use a different syntax now:
  an optional table follows after the color argument; the table can be used to transform
  the image on the fly and some further options can be specified ("RoundLevel" for Box(),
  "Clockwise" for Arc(), and "Thickness" for Line()); the old syntax is still supported
  for compatibility
- Fix: DisplayBGPicPartFX() caused an illegal memory access when used with layers turned off;
  this bug was quite serious and could lead to an immediate system crash
- Change [MacOS]: OS X application bundles will no longer look for data files outside the
  application bundle but only inside the "Resources" directory because this is how it should
  be done according to OS X guidelines
- Fix [MacOS]: Mouse move event handler wasn't triggered during mouse moves with button down
- Change [MacOS]: JPEGs are saved using Core Image now; reduces executable size by 80 kb
- Change [Win32/MacOS]: When using "Ask" as "Mode" in @DISPLAY, Hollywood will no longer allow
  manual mode selection under Win32 and Mac OS X
- Fix: NextItem() didn't check for valid table argument (reported by nexus)
- New: Added #FONT type for GetAttribute(); you can query all the six #ATTRFONTXXX properties
- Fix: Potential error when refreshing a double buffered display
- New: GetAttribute() can query #EVENTHANDLER now; simply pass the name of the handler as
  id (see InstallEventHandler() for a list of supported handlers); possible attributes are:
  #ATTRFUNCTION and #ATTRUSERDATA (requested by nexus)
- New: GetAttribute() can query #INTERVAL and #TIMEOUT now; supported attributes are
  #ATTRDURATION, #ATTRFUNCTION, #ATTRUSERDATA
- New: You can now query the size of memory blocks using #ATTRSIZE with type #MEMORY
  (requested by Lazar Zoltan)
- New [MacOS]: "UseQuartz" can now be specified in @DISPLAY and CreateDisplay(); this allows
  you to mix Quartz and QuickDraw displays; if you use USEQUARTZ on the command line, it will
  be applied to all displays (except the ones that specify "UseQuartz" explicitly)
- New: [MacOS]: Full screen switching via hotkey is now supported
- Fix [MacOS]: Opaque pointer images didn't work correctly
- Change [Win32]: Added workaround for floating point inaccuracies when rendering TrueType
  text with scaling and antialiasing; Windows' font API isn't very precise here but with
  the new workaround it should always look right
- New: "Layers" tag can be used with @DISPLAY or CreateDisplay() to enable layers for a
  display at creation time
- Fix: ChangeDisplaySize() did not substitute layers of type #BGPICPART which could lead
  to gfx errors
- Change [Win32]: DebugPrint() opens a console now so you can catch debug output
- New [Win32]: Full screen switching via hotkey is now supported; use LEFT ALT + RETURN
  and Hollywood will automatically switch between windowed & full screen mode
- Change [Win32]: When hovering over drag and size regions in borderless mode, Hollywood
  will display corresponding mouse cursors
- Fix [Win32]: Resizing transparent windows didn't work correctly
- Change: StringRequest() returns a second value now indicating whether the requester
  was cancelled or not (requested by Paul Bloedel)
- New: Added #TRUETYPE_DEFAULT and #BITMAP_DEFAULT special constants; you can use them
  with SetFont() to get an appropriate font on each different system; Hollywood examples
  were also adapted to make use of this feature
- Change: Layer garbage collector is much more intelligent now
- Change: "OnMouseOut" button events are now guaranteed to be sent before any new
  "OnMouseOver" events... makes things easier for GUI programmers!
- New: Some improvements to the string library: FindStr() and ReplaceStr() accept a
  starting search position now as an optional argument; UnmidStr() removes characters
  from the middle of a string, CountStr() counts the number of occurrences of a
  substring, and InsertStr() inserts a string into another string with optional overwriting
- New: The optional X,Y table arguments in DisplayBGPic(), DisplayTransitionFX(), and
  ChangeDisplaySize() support the special constant #KEEPPOSITION now; if it is specified,
  the display will keep its current position
- Fix [Amiga]: MorphOS sound.datatype is now supported correctly (Hollywood now switches
  the datatype into extended mode)
- New: Added @OPTIONS preprocessor command; the only tag currently available here is
  "LockSettings" which has the same function as the command line version except that
  if used as a preprocessor command, "LockSettings" will also work in non compiled
  mode, i.e. Hollywood will never run your script in a different mode than the one you
  defined in your script
- Change: Fixed FormsDemo.hws to work with the new SelectBGPic() behaviour
- Fix: Writing functions with byte code > 64kb in text mode caused a crash due to
  illegal memory access
- Fix [Amiga]: Added workaround for SAS/C double to ULONG conversion trouble; the bug
  only affected huge numbers used with bit operators in the preprocessor commands so
  probably no one ever noticed the misbehaviour :)
- Fix [Amiga]: Fixed several bugs with transparent windows on AmigaOS3; the fake handler
  didn't work with autoscaled displays and it didn't handle the transparent clip region
  correctly
- New [Win32/Mac]: You can now use an *.ini file as an alternative to specifying arguments
  on the command line; this is not supported on Amiga because we've tooltypes on the
  Amiga so an additional ini file would be somewhat redundant; but under Win32 & Mac
  this is quite useful; note that for compiled Mac OS X app bundles, the ini file has
  to be in the Resources directory of the app bundle
- New: CompareDates() compares two date specifications in the Hollywood time format
  and returns the one that is newer (1 or 2) or 0 if both have the same time
- Change: GetDate() accepts an optional argument now which allows you to get the
  current date & time in Hollywood's standard format dd-mmm-yyyy hh:mm:ss instead of
  the current locale's format
- New: Added lightning speed sorting algorithm; the old one was really a pain and slow
  as hell; now you can sort arrays incredibly faster and you can even specify a custom
  sort function which allows you to customize the sort and/or sort custom structures
  (requested by Lazar Zoltan)
- New: GrabDesktop() can be used to grab the desktop (or a portion of it) directly into
  a brush (requested by Fabio Falcucci, Paul Bloedel)
- Fix: @INCLUDE didn't change the current directory to the location of the included
  file which could lead to errors when the included file needed to load further resources
  (e.g. another include file or graphics etc.) (reported by Michael Jurisch)
- New: GetCurrentDirectory() returns the full path to the current directory
- New: Added "ClipboardChange" event handler which you can use to get notified whenever
  the clipboard contents change; very useful to enable/disable "Paste" buttons etc.
- New: Added support for reading, writing, and peeking the clipboard; you can now easily
  import text & graphics from the clipboard into Hollywood or export to the clipboard;
  use the functions PeekClipboard(), GetClipboard(), SetClipboard(), and ClearClipboard()
  (requested by Dominic Widmer)
- New: Added support for writing IFF ILBM images; use the new #IMGFMT_ILBM constant for
  that; pictures are written out in planar IFF24 format :-)
- New: Added support for drag'n'drop; you can now install the "OnDropFile" event handler
  and then you will be notified whenever the user drops an item (or multiple items) onto
  your display
- Fix [Win32]: IFF24 loader was broken under Windows (reported by Lazar Zoltan)
- New [Amiga]: Hardware acceleration for #CROSSFADE is now also supported on AmigaOS 4.1;
  unfortunately, the Sam440ep has only 64MB of chip memory so you can't really blend
  huge screens but smaller areas are possible now and the speed up is incredible :)
- Change [Amiga]: MorphOS versions use jfif.library and z.library now; reduces Hollywood's
  size by about 120kb; furthermore, MorphOS versions use png.library instead of
  pngalpha.library; gives a speed up because pngalpha is only available for 68k
- Change [Amiga]: MODEID argument removed; display mode ids are not very useful because
  they change from gfx board to gfx board; use SCRWIDTH, SCRHEIGHT, SCRDEPTH instead
  or the @SCREEN preprocessor command
- Change: Removed BESTFIT argument because it's gotten pretty useless; bye bye...
- Change: Cleaned up the @DISPLAY preprocessor command: the tags "ScrWidth", "ScrHeight",
  "ScrDepth", "HideTitleBar", "Desktop", and "Mode" are now considered obsolete in
  @DISPLAY; instead, you should use them in the newly implemented @SCREEN preprocessor
  command! Note that the tags don't use the "Scr" prefix when specified in the @SCREEN
  preprocessor command
- Change: Added @BACKFILL preprocessor command; please use this command now to specify
  backfill settings; specifying backfill settings in @DISPLAY is still supported for
  compatibility but you shouldn't use it any more
- Change: When including applets, Hollywood will no longer show the data it loads from
  this applet
- Change: MorphOS versions also use stream based datatype access now; speeds up applet
  loading (MorphOS 2 only)
- New: Added new event handler "ModeSwitch"; will be triggered when the user switches
  display modes using CMD+RETURN
- Fix: When calling ChangeDisplaySize() in autoscale mode but with no scalewidth/height
  set, an internal scaling factor was messed up which could cause wrong behaviour
- Change: InstallEventHandler()'s user data item is no longer a global setting for all
  event handlers but can also be applied locally; simply call InstallEventHandler() with
  just one event type
- New: Added ChangeDisplayMode() command which can be used to switch to full screen
  or windowed mode from the script; very useful for games!
- Change: HollyAmp example uses a custom drag region now; this allows us to include a
  close button in the title bar that would've normally been fully occupied by Hollywood's
  default drag region
- New: Added support for user defined drag and size regions; very useful for advanced
  users; use the "DragRegion" and "SizeRegion" tags in @DISPLAY or CreateDisplay() for
  that; note that custom drag & size regions will only be used for borderless displays
- New: Added new attributes for GetAttribute()'s type #DISPLAY: #ATTRPOINTER, #ATTRSTATE,
  #ATTRACTIVE, #ATTRMODE, #ATTRSCALEMODE, #ATTRSCALEWIDTH, #ATTRSCALEHEIGHT, #ATTRBORDERLESS,
  #ATTRSIZEABLE, #ATTRFIXED, #ATTRNOHIDE, #ATTRNOMODESWITCH, #ATTRTITLE, #ATTRMARGINLEFT,
  #ATTRMARGINRIGHT, #ATTRDOUBLEBUFFER, #ATTROUTPUTDEVICE
- New: Added SetDisplayAttributes() command; this is a very powerful command which
  allows you to change a display's style with just a single function call; nearly all
  display attributes can be easily changed with this call! SetDisplayAttributes() also
  gives you direct access to the scaling engine; you can modify the scaling engine and
  dimension settings with it!
- New: Added "Active" tag to @DISPLAY; allows you to create initially inactive displays;
  you can use the new ActivateDisplay() command to activate your display
- New: Displays can now also be initially hidden by using the "Hidden" tag in @DISPLAY;
  very useful if you want to modify the position or look of your display dynamically
  before opening it; note that some functions such as WaitLeftMouse() need an open
  display to work
- New: Introducing support for multiple displays in a single script; many people have
  been asking for this one so here it is! You can create new displays using the new
  CreateDisplay() function; alternatively, you can create the displays using the
  @DISPLAY preprocessor command which has now been extended to accept an id; further
  new functions that you need for working with multiple displays: OpenDisplay(),
  CloseDisplay(), SelectDisplay(), FreeDisplay()
- New: #ATTRCLIPREGION can be queried now for #BGPIC
- New: #ATTRHASMASK and #ATTRHASALPHA also supported for #BGPIC now
- New: Added support for BGPics with alpha transparency; yes, that's correct: You can
  now create these cool ultramodern 32-bit windows with Hollywood! Simply set LoadAlpha
  to TRUE just as you do with brushes
- New [Amiga]: MorphOS and OS4 versions now have an iconify gadget in the title bar
  (except when NOHIDE is used)
- New: Window manager completely rewritten; this was a lot of work but it was really
  necessary because cool new things are possible now, stay tuned! The display handler
  is now fully abstracted from the script; this means that your script can continue
  running when the display is hidden; even size changes are possible when the display
  is hidden!
- Fix: Window resizing didn't work for transparent BGPics without layerscale/autoscale
  (reported by Paul Bloedel)
- Fix: Potential crash when cloning bgpics that have a palette attached (internal; only
  used by Malibu)
- New: SaveAnim()/BeginAnimStream() also supports the creation of AVI streams using Motion
  JPEG compression; just specify #ANMFMT_MJPEG; create your own videos with Hollywood now!
- New: SetAnimFrameDelay() allows you to set the delay (in milliseconds) for each
  frame of an animation
- Fix: ConvertToBrush() and GetBrushLink() crashed when trying to obtain frames of disk
  animations
- New: SaveBrush() and SaveSnapshot() can write GIF images now, too; use #IMGFMT_GIF;
  a new optional table allows you to configure the desired color resolution and whether
  or not dithering shall be used
- New: Added API for sequential anim creation: BeginAnimStream(), WriteAnimFrame(),
  FinishAnimStream() can be used to write frames to an anim continously; using these APIs
  you can create very large animations with a low memory footprint; note that you shouldn't
  mix transparent and non-transparent frames within an anim
- New: Added SaveAnim() command; currently, only #ANMFMT_GIF is supported; transparency
  is supported; some straight-forward optimizations are also included but don't expect
  miracles; note that GIF is a CLUT based format and graphics have to be quantized;
  you can specify the number of colors as well as whether or not dithering shall be used
- New: Frame delay is now supported for IFF ANIMs too
- New: Added #DEFAULTSPEED constant which can be specified with PlayAnim() or MoveAnim()
  to tell Hollywood to play the anims at the speed defined in the anim (i.e. to use a
  variable speed because frame display time can vary from frame to frame)
- New: #ATTRFRAMEDELAY can be used to query the delay time for every frame of an anim;
  note that not all anim formats carry such a delay information and that this information
  might only be available for loaded frames (when using "FromDisk"); also available for
  type #LAYER; in that case, it returns the delay for the frame currently displayed by
  the layer
- New: Introducing support for GIF anims; you can easily load them via LoadAnim() or
  LoadSprite() now! Now you can use all those cool little anims right in Hollywood!
- New: SelectMask() and SelectAlphaChannel() can also draw to animation frames now;
  use the second & third optional arguments to select the mask/alpha channel of a
  anim as the output device
- New: SelectAnim() allows you to draw directly to single frames of an animation; this
  works only with anims that are loaded into memory of course
- New: ModifyAnimFrames() can be used to add or remove one or multiple anim frames
- New: LoadSprite()/@SPRITE can also load animation files now
- New: Extended the LoadAnim() command; it can now also create animations dynamically
  from image files (just as the LoadSprite() command); the new functionality is also
  supported by the @ANIM preprocessor command; because IFF ANIM doesn't support alpha
  channels, you could create an alpha channel anim now by generating the anim from an
  image source
- Fix: Serious bug when using a transparent disk anim with PlayAnim() (wrong memory
  block was freed)
- New: SetLayerStyle() can be used to change the clip region of a layer (use the
  "ClipRegion" field); GetLayerStyle() can be used to get the current clip region
  of a layer
- New: Clip regions can now be also used when layers are enabled; this is a very
  powerful feature because every layer can have its own clipping region, i.e. you can
  have several clip regions on the display at the same time; clip regions will
  automatically be transformed when the layer gets transformed
- Fix: Long standing bug when freeing a clip region, Hollywood would automatically
  kill the clip regions of all sprites instead of only the affected sprites
- Fix: Bug in SetLayerStyle() when modifying attributes of multiple text layers &
  memory leak
- New: SetLayerStyle() can now be used to change the type of the layer; this really
  gives you the utmost flexibility; e.g. you can transform a brush into an anim layer
  now and vice versa; much more comfortable than removing & inserting; note that
  you must provide some compulsory information when doing a layer type change; see
  doc for more details
- New: SetLayerStyle() can now also be used to change the cursor position and
  tabulator settings for #PRINT layers; use the new "CursorX", "CursorY", and "Tabs"
  table fields for that; note that "CursorX/Y" and "X/Y" are mutually exclusive
- Change: Layers of type #TEXTOBJECT were accidentally treated in the same way as
  #TEXTOUT and #PRINT although the latter two are fundamentally different; this has
  been changed now; the consequence is that the only attribute of a #TEXTOBJECT
  layer you can change with SetLayerStyle() is the "ID" element to assign a new
  text object to the layer; modifying the text or font is no longer possible; use
  a #TEXTOUT layer for that!
- Fix: SetLayerStyle() didn't refresh all necessary areas when just moving a layer
  without modification of any other styles (i.e. when only x & y styles are used)
- Change: Removed all layer locking mechanisms of async draw objects; layers are
  no longer locked while assigned to an async draw object; i.e. you can change
  color, orientation etc. while an async draw is in progress
- New: Implemented capability to change the contents and size of an async draw layer
  on the fly; this is a very cool feature which can be used to create cool effects;
  you can also use this to display an anim with transition effects
- New: Implemented seamless frame seeking for asynchronous drawing objects; you can
  pass the frame to draw to AsyncDrawFrame() in the optional argument; please note
  that this currently requires layers to be enabled; not possible for PlayAnim()
  and MoveXXX()
- New: GetConstant() can be used to retrieve a constant's value from its name passed
  as a string
- Change: Passing 0 to SetLayerName() assigns a name to the last layer added
- New: #ASYNCDRAW type can now be queried by GetAttribute(); supported attributes:
  #ATTRTYPE, #ATTRNUMFRAMES, and #ATTRCURFRAME; note that #ATTRNUMFRAMES returns the
  number of frames but you need to make one additional call to AsyncDrawFrame() to
  finish the effect; the last call to AsyncDrawFrame() doesn't draw anything, it will
  just finish the effect (that's why it's not counted as a frame); so, if you're
  looping over the number of frames, you need to add 1 or alternatively, you could
  also call FinishAsyncDraw() instead of calling AsyncDrawFrame() numframes+1 times
- New: #POINTER type is now recognized by GetAttribute(); you can query #ATTRWIDTH,
  #ATTRHEIGHT and #ATTRTYPE
- Change: #PUZZLE uses different algorithm now
- Change: File requesters in the GUI remember their paths now (requested by Philippe
  Ferrucci, Brian Carpignano)
- Change: When compiling executables for Windows, the file name automatically gets
  a ".exe" appended in case it is not already there (suggested by Brian Carpignano)
- New: Alpha channel is now also supported for animations; IFF ANIM doesn't support
  alpha channels but you can use CreateAnim() to convert an alpha channel brush to
  an animation
- Fix: Drawing error in #QUARTERS
- New: #CROSSFADE is using hardware acceleration now if possible (depends on some
  factors); currently only supported under MorphOS 2.0; hardware alpha blending
  is about twice as fast; on the Pegasos 2, smooth blending of a 1280x1024 pixel
  screen is possible! (requested by Torgeir Vee)
- New: Major speed up for all transition effects displayed in the new real layers
  mode that was introduced in Hollywood 4.0; should be almost as fast as without
  layers now!
- Fix: As documented, #PIXELZOOM2 is now a BGPIC-only transition effect
- Fix: #WALLPAPERTOP and #WALLPAPERLEFT didn't work correctly in reverse mode when
  layers were opaque
- Fix: #HOPENGATE left a line on the display if height was uneven; #VOPENGATE left
  a row on the display if width was uneven
- Fix: Fixed another major bug in the generic for statement: using Continue inside
  a generic for did not work; all generic for issues should be solved now because
  I've removed the OP_TFORPREP opcode which used less bits for the dest pc than the
  OP_JMP opcode; OP_JMP is now always used
- Fix: Fixed severe bug in the byte code compiler: the byte code generated for the
  generic for statement was always broken, i.e. scripts containing a generic for
  statement could not be properly used in compiled form; seems like nobody is using
  the generic for statement because nobody noticed it and this bug has been in Hollywood
  since version 2.0 :)
- New: Added workaround for a bug in the OS4 diskfont.library that prevents some fonts
  from being opened (reported by Chris Handley, Fabio Falcucci)
- Fix: Graphics primitives that used #FILLTEXTURE as fill style did not get their patterns
  scaled correctly when in layer scale mode (reported by Torgeir Vee)
- New: Added @FONT preprocessor command; this is especially useful for easily linking
  fonts into the final executable/applet; all fonts specified in @FONT will be linked to
  the executable except when the optional table argument "Link" is set to FALSE
- New: Added functions to load several fonts at the same time: OpenFont() and CloseFont()
  allow you to keep several fonts open which you can then easily select for text output
  by calling UseFont() which has been added for that purpose
- New: Added fast text renderer that will be used when possible; certain conditions need
  to be given: no wordwrapping, no soft styles (except anti alias), no style tags
  inside the string, no irregular clipping region, no tabs, no right or center alignment
  and some more...
- Fix: TextWidth() and TextExtent() failed under Mac OS when used with an empty string
  (reported by Dominic Widmer)
- Fix: GetVolumeInfo() did not work correctly with volumes > 4 GB (reported by Fabio
  Falcucci)
- New: Execute() and Run() also support the chunk loader now which allows you to run
  executables that have been linked into your applet/executable (requested by Torgeir
  Vee); this won't work under Mac, however, because Mac OS executables are not single
  files but whole directory bundles
- Fix [Mac]: File extensions were not added correctly for sound files that were saved
  in a temporary place for the chunk loader (used only in the rare case that OS X can't
  recognize a sound file from memory block)
- Change: Active mouse pointer can be freed now; Hollywood will mark it then as gone and
  free it as soon as it is no longer on the screen
- Fix: Potential crash in the wordwrapping code that occurred only in very special
  circumstances
- New: Added "Clockwise" tag for #ARC layers in SetLayerStyle() and GetLayerStyle()
- New: Implemented font caching mechanism which should speed up font loading especially
  for fonts that are linked into the executable/applet
- Fix: Text commands did always reload the font which caused significant performance
  loss (reported by Fabio Falcucci)
- Fix: Several gone marked objects (brushes, anims, text objects) were not freed before
  Hollywood terminates (reported by Torgeir Vee)
- Fix: Documentation of DisplayBGPicPart() was wrong
- New: Specifying 0 as insert position in InsertLayer() will insert the layer as the
  last one
- Change: WaitEvent() will now always immediately return to the user once it has called
  a function; additionally, it will return a table that contains information about the
  event that has just happened and it also contains the return values of the function
  that was just called
- New: ShowLayer() can emulate BGPIC-only transition effects now by setting "BGPicEmu" to
  TRUE; this function is currently undocumented because it is considered private for
  Hollywood Designer only
- New: EXETYPE argument accepts multiple platforms now; allows you to create executables
  for all platforms with just a single run; simply combine platforms via a '+' character;
  if more than one platform is specified, the file specified in COMPILE is regarded as a
  template
- Fix [Amiga]: Potentially fatal memory access when drawing graphics in hidden mode caused
  HideDisplay() to crash
- Change [MorphOS]: Added work-around for wrong behaviour of screen mode requester which
  caused Hollywood to display a "Can't run on palette screens" error
- New: NOHIDE can also be used via @DISPLAY preprocessor command now
- New: Finalized the SelectBGPic() API at last; after searching for the best implementation
  since version 1.5 of Hollywood, I finally found the best behaviour for SelectBGPic()
  in case it is called on the current BGPic: when SelectBGPic() is called on the
  current BGPic, all layer operations are cached and won't be drawn until EndSelect();
  this allows you to draw very efficiently! If you have lots of things to draw, it
  could be cheaper to do it in a SelectBGPic()-EndSelect() block; this is an API break
  because formerly, a SelectBGPic() on the current BGPic would insert special hidden
  layers that would automatically become visible on the next DisplayBGPic() call; this
  is now longer the case; the layers will become visible when you call EndSelect(); if
  you don't want that, use HideLayer() in the SelectBGPic()-EndSelect() block
- Fix: Removed an optimization of the For loop and Switch selector statements; both
  didn't work in Hollywood 1.x compatibility mode (using Gosub() didn't work from these
  statements)
- Fix: When drawing to a brush with objects enabled, DisplayBGPicPart() could crash the
  program
- New: ResetTimer() can be used to reset a timer to 0 or to a specific milliseconds state
- New: Added LINKFONTS arguments which allows you to link fonts into the executable/applet;
  usage is the same as with the LINKFILES argument; this is a very cool feature which
  should solve all your font worries (and there have been many as I was told :))
- Fix: Cursor and margin positions were not updated on SizeWindow
- Change: Hollywood searches in the current directory now first for fonts under Windows
  and Mac OS before resorting to the system fonts; fixes some problems with bitmap fonts
  and system fonts that share their names (reported by Michael Jurisch)
- New: LOCKSETTINGS argument allows you to create executables/applets that do not allow
  the user to change display settings via the command line or tooltypes; if you use
  LOCKSETTINGS the script will always use the look you specified; can only be used in
  connection with the COMPILE argument
- New: Added "ScaleMode", "ScaleWidth, "ScaleHeight", and "SmoothScale" tags to the
  @DISPLAY preprocessor command; allows you to specify a scaling engine from within the
  script
- Fix [Amiga]: MODEID argument didn't work
- New: FinishAsyncDraw() is an extended version of CancelAsyncDraw(); FinishAsyncDraw()
  skips to the last frame of an async draw object and executes the finishing code (e.g.
  hiding or removing a layer using HideLayerFX() and RemoveLayerFX())
- Fix: #SCROLLXXX fx and MoveXXX() did not work correctly with rotated layers
- Fix: It's no longer possible to show a locked layer with fx
- Fix: Crash when a Hollywood function that is passed as an argument to a user function
  and called from that user function returned an error :)
- Fix: When showing hidden layers using asynchronous fx the layer is not made visible before
  the first call to AsyncDrawFrame()

Version 4.0    (28-Feb-09)

- Change: Updated Hollywood documentation
- Change: Updated catalog descriptions and German translation; added new developer
  files for doing new translations
- Change: Updated the Hollywood GUI; it now supports video export!
- New: Added PointerDemo, MouseWheelDemo, AsyncFX, and LayerStyle examples
- New: Added a nice little color matching game named Katica by Lazar Zoltan
- New: Added SCUI Lib demos done by Fabio Falcucci
- New: Added three new cracktros supplied by Mr. X of Barracuda; I find them really
  impressive and they surely show what you can do with Hollywood. Mr. X has ported
  the cracktros of PP Hammer, Moonstone, and Super Stardust. Big thanks mate!
- Change: Added workaround for some strange behaviour in Windows Vista which could lead
  to Execute() failing on an existing program (reported by Torgeir Vee)
- Fix: Pointer settings were lost after full screen switch via CMD+RETURN (reported by
  Lazar Zoltan)
- New: Added VIDEOFPS argument for controlling the frames per second when in video recording
  mode
- New: Added support for different video strategies using the VIDEOSTRATEGY argument
- Fix: Ror() and Rol() were broken for #BYTE and #SHORT operand sizes
- New: SetMaskMode() supports several new modes now: #MASKVANILLACOPY, #MASKOR, #MASKAND,
  #MASKXOR; can be used to achieve certain effects
- Fix: Printing a string with newline characters only resulted in wrong cursor y position
- Change: TextOut() uses a table as optional argument 4 now; old syntax still supported
  for compatibility
- New: RotateTextObject() can be used to rotate text objects; currently, lossless vector
  transformation for true type fonts is not supported so rotating true type fonts doesn't
  deliver the best quality yet
- New: DisplayBrush(), DisplayBrushPart(), DisplayAnimFrame(), TextOut() and PlayAnim()
  support a new optional filter argument now; if layers are enabled, the specified filters
  will automatically be applied to the layer
- New: DisplayAnimFrame() allows you to display a single frame of an animation; if layers
  are enabled you will get layer of type #ANIM
- Fix: GetAnimFrame() did not create independent graphics for non-disk anims
- Fix [Amiga]: DEPTH argument was not always handled correctly (reported by Lazar Zoltan)
- New: Attributes #ATTRFONTSCALABLE and #ATTRFONTAA can be used to query capabilities of
  the current font (requested by Lazar Zoltan)
- New: AddMove() for type #LAYER now accepts a visibility flag (requested by Paul E. Bloedel)
- Fix: ReplaceStr() could trash memory under certain circumstances (reported by Paul E.
  Bloedel)
- Change: If Hollywood detects WinUAE USEWPA will be automatically enabled because it is
  faster under WinUAE
- Change: ScaleLayer(), RotateLayer(), SetLayerTransparency(), SetLayerTint() simply call
  SetLayerStyle() now internally
- New: Added RotateLayer() which allows you to rotate a layer
- New: Added SetLayerStyle(); this is a very powerful function which allows you to change
  nearly all attributes of an existing layer on-the-fly; it can also scale and move layers;
  furthermore, you can change the style of multiple layers with only a single call; the
  attributes that can be specified depend on the type of the layer; see the documentation;
  you can use the new function GetLayerStyle() to query the current style flags of a layer
- Fix: #ATTRWIDTH and #ATTRHEIGHT returned wrong values for #DISPLAY when SelectBrush(),
  SelectAlphaChannel() or SelectMask() were in use
- New [Amiga]: DEBUGDEVICE argument can redirect output now to stdout or an ARexx Port (use
  @stdout or @rexx:PORTNAME)
- Fix: ReadMem() and WriteMem() didn't advance file cursor correctly
- New [Amiga]: StringRequest() uses requester.class now instead of reqtools.library (under OS4)
- New: SystemRequest() accepts an optional argument now which allows you to specify
  an icon for the requester (not on all systems!)
- New: [Amiga]: Added USEWPA and WPAMODE arguments; these arguments can be used to force
  Hollywood to work with pixel arrays instead of bitmaps; these are included mainly for
  overriding default settings that Hollywood chooses; you shouldn't use them unless you
  experience problems with the standard mode
- Change [Amiga]: Datatype objects (pictures, samples, anims) are now loaded directly from
  memory using DTST_MEMORY if datatypes.library >= 44; speeds up things especially in compiled
  programs
- Change [Amiga]: Hollywood's screen is now opened in the new OS4 style (reported by Paul E.
  Bloedel)
- Change: F11, F12, Page Up, Page Down, Insert, Pause, Home, End keys are now also supported
  under OS4
- New: ChangeDisplaySize(), DisplayBGPic(), and DisplayTransitionFX() accept new optional
  arguments now that allow you to specify a new x & y position for the display (requested by
  Fabio Falcucci and Paul E. Bloedel)
- New: IsKeyDown() also supports modifier keys like alt, control, shift etc. now
- New: Added "OnWheelUp" and "OnWheelDown" event handlers for InstallEventHandler() (requested
  by Paul E. Bloedel)
- New: Added WriteTable() and ReadTable() functions which allow for easily saving a whole
  table (including subtables and even user functions) to a file; ReadTable() can be used
  to load the table from disk (NB: if there are entries of type #USERDATA and #LIGHTUSERDATA
  they're written as #NUMBER with value 0)
- New: GetRandomFX() returns a random effect from Hollywood's palette; this is useful if
  you cannot use #RANDOMEFFECT because you want to apply a filter
- Change: Layer substitution mechanism is more sophisticated now & anim layers still work
  now even if their source anim is freed or scaled etc.
- Change: CopyAnim() can also clone disk anims now
- New: Added CopyTextObject() command
- New: Added CopyBGPic() command; NB: this will only copy the graphics of the specified
  bgpic; layers, buttons, sprites etc. will not be copied
- Fix: Layer substitution did not account for ScaleBGPic()
- New: DefineVirtualFile() allows you to define virtual files that actually occupy a
  certain area in a real file; this is useful for reading from huge resource files;
  DefineVirtualFile() can be used with all Hollywood functions that take a filename
- Change: All DOS functions work with files > 4 gigabyte now (except on AmigaOS Classic)
- Fix [Amiga]: Harmless enforcer hit in the GUI (reported by Christian Kummerow)
- Fix [Amiga]: Dead pointer access on music stream finish (reported by Janne Peraho)
- New: Added WriteFunction() and ReadFunction() commands which can be used to save and
  load Hollywood functions to/from files; this is a very cool feature and opens up a wide
  variety of possible uses; it is especially interesting for larger game projects which
  need a scripting engine; code from this engine could now be loaded from external files;
  functions can be saved to files using standard binary data or base64 encoding for
  embedding them in a text files
- New: Added support for alpha blended 32-bit pointers; you can make these new pointers by
  converting brushes or sprites; simply use the function CreatePointer() to make a pointer
  from a brush/sprite source; FreePointer() frees pointers; NB: an API break was necessary:
  SetPointer() no longer accepts a file name but only a pointer id and you have to use
  CreatePointer() also for system & busy pointers (requested by Fabio Falcucci)
- New: All commands that create new Hollywood objects (brushes, samples, files, text objects
  and many other types) accept NIL now in the object id parameter; if you pass NIL to
  an object creation function, it will automatically choose a vacant id for you and return
  it to you; this is very useful when working with larger scripts that use lots of different
  objects and ids
- New: GetType() supports lua types #USERDATA, #LIGHTUSERDATA, and #THREAD now (#THREAD
  currently not available in Hollywood)
- New: Added video recording mode! This is a very cool feature which allows you to record
  your Hollywood scripts as an AVI video; you can use the VIDEOOUT argument to activate
  the video recorder; you will get a fully featured AVI video file complete with video
  and audio stream; you can use one of the scaling engines to define the dimensions of
  your video (e.g. 720*576 for DVD)
- New: The MoveXXX() functions and PlayAnim() also use a different syntax now and accept
  a table which allows you to use these functions asynchronously
- New: Added support for asynchronous transition effects; all the commands that deal with
  transition effects use a different syntax now; a table is used to configure the effect
  and you can specify a table element "Async" which - if set to TRUE - returns a handle
  to a async draw object which you can then draw using AsyncDrawFrame(); this is useful
  if you want to do other things while displaying a transition effect; in particular, this
  opens many new possibilities for Hollywood Designer; to stop an async draw object you
  call CancelAsyncDraw()
- New: Major rework of the transition fx library; transparency and tint settings are fully
  supported now; additionally, effects are displayed correctly now even if the layers are
  in background; layerscale and autoscale are fully supported
- New: Added layerscale engine; this is powerful and required major rewritings of several
  essential parts of Hollywood but the layerscale engine paves the way for many cool
  features; in contrast to the autoscale engine, the layerscale engine will scale the
  individual layers on the display; this is much faster than the autoscale engine which
  always has to scale the whole screen even if only a few pixels have been modified; but the
  greatest advantage of the layerscale engine is that vector layers (vector text, gfx
  primitives) can be scaled infinitely without loss of quality; this is very useful e.g.
  to promote your presentation to large screenmodes etc.; you can activate the engine by
  using the LAYERSCALE argument; note that it's not possible to disable layers when the
  layerscale engine is active
- New: Added autoscale engine; this engine allows you to promote your scripts to any
  dimensions you want without changing a single line of your code; Hollywood will mock your
  script into thinking that it is running in the usual dimensions but in reality, the
  script will be promoted to a new dimension; use the AUTOSCALE argument to activate
  this new mode; the SCALEWIDTH and SCALEHEIGHT arguments can be used to specify the
  desired dimensions (notation in percent also allowed); if you don't specify SCALEWIDTH
  and SCALEHEIGHT, autoscale will stay inactive until the user sizes the window; use the
  SMOOTHSCALE argument to toggle smooth scaling on and off
- Fix: Special speed constants were not handled correctly when passed to PlayAnim(),
  PlayAnimDisk() and the "animspeed" parameter in MoveAnim()
- Change: If the Hollywood window gets resized while a transition effect is in progress,
  the effect will be restarted (in case it's an object effect) or aborted (in case it's a
  BGPic transition); in previous versions, garbage was left on the screen if a window
  resize occurred during transition fx
- Change [Amiga]: Alpha byte is always cleared out now; this is necessary because OS 4.1 seems
  to set it even if the image doesn't have an alpha channel (reported by Paul E. Bloedel)
- Fix: RIFF WAVE streams were not closed correctly (reported by Lazar Zoltan)
- Fix: Several fixes in connection with layers of type #BRUSHPART and #BGPICPART: Collision()
  did not work correctly with them; layer buttons that used pixel-exact collision detection
  did not work; ConvertToBrush() and GetBrushLink() did not work with layers of these types
  either
- Change: Faster, non-copying SwapLayers() mechanism
- New: Added OpenDirectory(), CloseDirectory() and NextDirectoryEntry() functions; you
  can use these for a more sophisticated control over directories (the old ReadDirectory()
  function can get quite slow with vast directories because it sorts all entries
  alphabetically); with NextDirectoryEntry() you'll receive files and directories in the
  order as returned by the file system
- Fix: When used with a global iterator variable, the FOR statement did not work correctly
  in recursive functions (reported by Fabio Falcucci)
- Fix [Win32]: HidePointer() and ShowPointer() did not work (reported by Lazar Zoltan)
- Fix [Win32]: Mode setting specified in @DISPLAY was not handled correctly in applets/
  executables (reported by Lazar Zoltan)
- Fix [Win32]: #ATTRPOSITION did not return the correct time for musics after their
  first loop
- Fix [MacOS]: CreateSample() did not work correctly
- New: SaveBrush() and SaveSnapshot() can save JPEG images now; simply pass #IMGFMT_JPEG
  in the format parameter; there's an optional parameter which specifies the quality
  (ranging from 1 to 100)
- Fix: #RANDOMEFFECT could accidentally choose the obsolete #TYPEWRITER effect which
  caused an error
- Fix: #BLEND/#FADE reverse fx modes did not work correctly with HideLayerFX() and
  RemoveLayerFX()
- New: Added funky reverse fx mode for #HSTRANGEPUSH and #VSTRANGEPUSH (finally...)
- Fix: #STRETCHRIGHT and #STRETCHBOTTOM were broken since Hollywood 2.5
- Change: #HSTRANGEPUSH and #VSTRANGEPUSH look now much better when used with transparent
  objects (mask or alpha)
- Change: When using DisplayTransitionFX() to switch to a BGPic that has a different size
  than the current BGPic, the current BGPic got automatically scaled to the dimensions of
  the new BGPic; this is no longer done in this way; of course, the current BGPic is still
  scaled to match the dimensions of the new one but this scaling is only temporary and
  doesn't change the BGPic
- Change: Removed auto-scaling for double buffers; brand-new scaling engine is coming up!
- Fix: Moving a layer using ShowLayer() or NextFrame() did not work while SelectBGPic()
  was active
- New: FreeLayers() accepts an optional argument now which specifies whether to "keep"
  layers or not; defaults to TRUE for compatibility
- Fix: FreeLayers() trashed Hollywood's internal refresh bitmap when used while SelectBGPic()
  was active
- New: ScaleTextObject() allows you to scale text objects; text objects that use vector
  fonts can be scaled freely to any size including x/y distortion; note however that
  the desired pixel dimension you pass to ScaleTextObject() denotes only an approximation
  in case of vector fonts; the real resulting dimension might be a little bit bigger
  or smaller
- New: A happy welcome to the 400th function of Hollywood: ScaleLayer()!
- Fix: When using #NEXTFRAME with DoMove() on a non-existing anim layer the current frame
  argument was not handled correctly
- Fix: DisplayTextObject() aligns the text now correctly taking any underhangs of characters
  into account
- New: #ATTRTEXT returns the text of text objects or text layers
- New: #ATTRFONTNAME, #ATTRFONTSIZE, #ATTRFONTASCENDER, #ATTRFONTDESCENDER can now be used
  with text objects as well as with text layers (layer types PRINT, TEXTOUT, TEXTOBJECT)
- Change: SetLayerTint() does not cache the tinted graphics any longer but tints on the
  fly when needed; this is slower than the previous implementation but makes the source
  code much clearer :)
- New: CompressFile() and DecompressFile() functions can be used to handle packed files
  easily; each function accepts two arguments which specify source and destination file;
  the return value is the size of the destination file
- Fix [Win32]: Body text dimensions were not calculated correctly in the SystemRequest()
  and StringRequest() functions
- Fix [MacOS]: Alpha channel was not always loaded correctly under Mac OS (reported by Janne
  Peraho)
- New: Added support for the Intel version of Mac OS X; You can compile executables for
  this platform by using "-exetype macos86"
- Fix [Win32]: Sound buffer for playing Protracker was probably too small for some
  sound cards because there were glitches under Windows Vista; I've now doubled its
  size to 19200 bytes which is enough to carry 100 milliseconds of 48000hz, stereo,
  16bit sampled Protracker sound; still very strange that the 50 milliseconds buffer
  was sufficient on my old PC but on my brand-new iMac using Vista it's too small
- New: DisplayBGPicPart() can now also be used to copy the current display graphics to
  a brush; useful for saving certain areas in order to restore them later; just pass
  TRUE in the last parameter and make sure layers are off (requested by Fabio Falcucci)
- New: Added OVERWRITE argument which forces Hollywood to always overwrite old files and
  directories when in compile mode
- Change: When in compile mode, Hollywood will ask now before overwriting existing files;
  when creating Mac OS programs and the program already exists, Hollywood will delete the
  whole application bundle, so be careful!
- Fix: ".app" is not appended twice to Mac OS programs any more; if it was already specified
  with -compile, it is no longer appended again
- Fix [Amiga]: Switching between full screen and windowed modes using the hot key resulted
  in a crash inside a call to VWait(); this could happen quite often because Hollywood calls
  VWait() also internally
- New: Added "Transparency", "ScalePicture", and "BrushFile" tags for the "Backfill"
  setting in @DISPLAY; the file specified in "BrushFile" will be linked to the applet/
  executable unless "LinkBrushFile" is set to FALSE
- Fix: "Mode" setting in @DISPLAY could be overridden by using tooltypes/command line
  (reported by Paul E. Bloedel)
- Change [Win32]: Temporary files are now stored in the current user's temporary folder
  instead of in the root directory of the current drive
- New: Added support for compressed applets; specify the COMPRESS argument to make Hollywood
  compress your applet
- New: @INCLUDE can also import whole Hollywood applets into your script; applet objects
  like brushes, samples, etc. are imported too
- Fix [Amiga]: Hollywood no longer tries to open keymap.library v39; it should work
  again now with Kickstart 3.0 which still contains a v37 keymap.library (reported
  by Lazar Zoltan)
- Fix [Amiga]: Loading sounds through sound.datatype from applet or executable did not
  work (reported by Lazar Zoltan)
- Fix [Win32]: Saving PNGs did not work
- New: Added truetype font support for Win32 and Mac OS

Version 3.1    (22-Mar-08)

- Change: Updated Hollywood documentation
- Change: Updated the Hollywood GUI
- Fix [Win32/Mac]: Relative path names using "." and ".." are now resolved correctly when
  retrieving the "path" field of GetFileAttributes(); in v3.0 "path" still contained "." and
  ".."; now they are resolved correctly
- New: Implemented userdata functionality; all functions that work with callback functions
  will now accept an additional parameter called "userdata" which will then be passed to the
  callback function as table field "userdata"; this parameter can be of any type; userdata
  is useful if you want to avoid to work with global variables; the following functions
  accept the userdata parameter: MakeButton(), InstallEventHandler(), SetTimeout(), SetInterval(),
  CopyFile(), DeleteFile()
- New: Implemented a convenient way to use methods: When you define and call functions using
  a colon (:) instead of a dot (.) the function will receive an invisible parameter called
  "self" which refers to the object that the function belongs to; this is very useful for
  object oriented programming with Hollywood; unfortunately, this change conflicts with the
  Hollywood 1.x emulator which uses the colon to separate multiple commands on the same line
  so you will need to adapt your 1.x scripts if you are still using the colon in that way
  (requested by Dwayne L. Jarvis)
- Fix: Severe bug in the virtual machine caused an endless loop when a generic for that ended
  with a conditional statement was used (reported by Dwayne L. Jarvis)
- Fix: OP_NOT and OP_TEST did not accept tables and functions as arguments which could lead to
  problems when trying to use stuff like "o = o OR {}" with "o" being a table
- New: #ATTRFONTNAME and #ATTRFONTSIZE can be queried by passing them to GetAttribute() together
  with #DISPLAY (requested by Jesper Schultz-Pedersen)
- Change: MakeButton() now chains new buttons to the top of the button list; this means that in
  case of overlapping buttons the last created button will be triggered first (requested by
  Fabio Falcucci)
- New: Added "OnMouseDown", "OnMouseUp", "OnRightMouseDown", "OnRightMouseUp" event handler for
  InstallEventHandler() (requested by Lazar Zoltan)
- Fix: Some font bug fixes and tweaks for floating point inaccuracies
- Fix: TextExtent() did not return the correct metrics
- Fix [Amiga]: Crash when starting a Hollywood script/executable that contained no tooltypes from
  Workbench (reported by Lazar Zoltan)
- Fix: When trying to save an executable to a non-existent place, the temporary input applet file
  was closed twice which led to a program crash
- Fix [Win32/Mac]: Amiga bitmap fonts of type TFCH_ID (using a TFontContents instead of
  FontContents) could not be loaded (reported by Dirk Riegler)
- Fix: ReplaceStr() did not work in all cases (reported by Paul E. Bloedel)
- Fix: Crash when specifying huge coordinates for PICXPOS/PICYPOS
- Fix: Execute() crashed when used to start a program without any arguments
- Fix: Second return value for Val() was wrong in some cases
- Fix: Hollywood generated executables with a space in their file name could not be started from
  Workbench
- Fix: Global table _G is now accessible from the script language as it should be (reported by
  Dwayne L. Jarvis)
- Change [Mac]: Mac OS executables created by Hollywood will now use the location of the
  application bundle as the active directory on startup; previously, the program directory inside
  the application bundle (i.e. xxx.app/Contents/MacOS) was used as the active directory on startup
  which caused some confusion
- Fix: Exists() works with directories again now (reported by Paul E. Bloedel)
- New: LINKFILES argument allows you to link all files specified in a separate file to
  your applet or executable; all Hollywood commands that load files (e.g. LoadBrush(), OpenFile(),
  OpenMusic() etc) will load these files directly from your applet or executable then; this is an
  alternative to using the preprocessor commands; you now no longer have to use the preprocessor
  commands to link your files with your applet/executable
- New: #ATTRFONTASCENDER and #ATTRFONTDESCENDER can be used with #DISPLAY to query the current
  font's ascender and descender information
- Change: Removed #TYPEWRITER transition effect; use a sequence of Print() calls if you really
  need to emulate it :)
- Fix [Mac]: Non-ASCII characters in Amiga bitmap fonts work correctly now (MacRoman is mapped to
  ISO-8859-1)
- Change: ".font" suffix is now optional; you can specify it or leave it out
- Fix [Mac]: Changed all text routines to use "Mac Roman" text encoding instead of UTF8; non-ASCII
  characters are now handled correctly and files/directories with non-ASCII characters work too
- Fix: ReadLine() also stored carriage return characters ($0d) in the string; this is no longer
  done; carriage return is ignored by ReadLine()

Version 3.0    (26-Jan-08)

- Change: Updated Hollywood documentation
- Change: Updated catalog descriptions and German translation; added new developer
  files for doing new translations
- Change: Updated the Hollywood GUI and added an interface for the Hollywood command
  line demonstration
- New: CommandLine example demonstrates how to pass arguments to Hollywood (very cool:
  tooltypes are supported!)
- New: AnimPlayer example demonstrates how to use the new animation API of Hollywood3
- New: Added a Hollywood 3 Intro example which was inspired by the Lotus 3 intro
- New: Added four new cracktros supplied by Mr. X of Barracuda; I find them really
  impressive and they surely show what you can do with Hollywood. Mr. X has ported
  the cracktros of Steel Empire, Dynablaster, Turrican 2, Turrican 3. Big thanks mate!
- Fix: Conversion from C double to C ULONG was not handled correctly for negative
  doubles under AmigaOS3 because of weird casting behaviour of SAS/C; a work-around
  is now used (this fix affects the bit-wise operators and some math commands)
- Fix: The automatic full screen mode selector should no longer select modes that are
  not available
- Fix: HAM6 and HAM8 animations are now handled correctly
- New: GetAnimFrame() command allows you to copy an anim frame from an opened anim
  into a brush; scaling and disk anims supported
- Change: The third argument of OpenFile() defaults to #MODE_READ now; this is a
  vanity API break; I think that it makes the most sense to have this function
  default to read-only
- New: FileLength() returns the current length of an open file; this length is dynamic
  because the file is open and write operations could follow
- Fix: Internal cursor was not adapted correctly on write operations in the dos
  library; could lead to pseudo errors in Seek()
- New: BinStr() accepts an optional argument now which specifies how many bits it
  shall take into account (can be #BYTE, #SHORT, or #INTEGER)
- New: Cast() function allows you to cast a value to specific type; this is very
  useful for signing and unsigning values
- New: Rol() and Ror() can be used to perform a bit rotation; operator length can be
  specified (#BYTE, #SHORT, or #INTEGER)
- New: Sar() performs an arithmetic right shift (the most significant bit is used for
  padding)
- New: GetProgramInfo() returns information about the program currently running in
  Hollywood; you can obtain information about the program type (script, applet,
  program) and the file name of the program
- New: GetCommandLine() allows you to retrieve all arguments from the command line
  which have not been eaten by Hollywood; this is a very flexible function as it
  also parses tooltypes when a script/applet/program is launched via Workbench; on
  Mac OS it parses "CFBundleExecutableArgs" entry if Hollywood is started via Finder
- New: Pressing the command key and return will switch between full screen and window
  mode; this is currently only supported by the AmigaOS version; to disable this
  feature set the NOMODESWITCH argument or the "NoModeSwitch" in the @DISPLAY
  preprocessor command
- New: HIDEPOINTER argument can be used to have the mouse pointer automatically
  hidden when Hollywood goes into full screen or fake full screen mode; you can
  also specify HidePointer in the @DISPLAY preprocessor command
- New: RemoveLayerFX() command added; why didn't I implement this earlier? Previously,
  one had to use HideLayerFX() and then RemoveLayer()
- New: FileRequest() and PathRequest() accept additional arguments now that allow
  you to specify the initial path and file state of the requesters (requested by
  Lazar Zoltan)
- Fix: Last path and file were not remembered correctly in FileRequest() function
  (Hollywood 2.5 only; prior versions remembered it correctly)
- Change: PlayAnim() speed is now relative to the time it takes to load and display
  a frame; if you specify 10 ticks as the speed and it takes 7 ticks to load and
  display the frame, Hollywood will only delay execution for 3 ticks
- New: MorphOS and AROS versions now use Hollywood's stdlib anim driver because
  they don't have an animation.datatype yet (and probably never will because
  the animation.datatype's design is quite awkward)
- New: IFF 8SVX, IFF 16SV and RIFF WAVE is now supported by LoadSample() on Amiga
  builds independent of the datatypes system; this is because sound.datatype is
  a real pain; sound.datatype in MorphOS 1.4 seems to be broken, in OS4 it doesn't
  work with 16 bit sounds and OS3 often uses experimental replacements; thus, these
  popular sound formats can now be loaded independent of the sound.datatype
- New: Sound part on the Amiga side is now adapted to Hollywood's stdlib and uses
  the same design as the Win32 and Mac OS builds
- New: The OS4, MorphOS, and AROS builds use a different Protracker replayer now
  which does not rely on AHI's PlayerFunc interrupt any more; this code is a little
  bit slower (that's why it is not used on OS3), but much cleaner and reliable;
  thus all the trouble with lowlevel.library under OS4 is a thing of the past now
- New: The MorphOS build now supports the non-Amiga keys on the PC-style keyboards
  now (e.g. F11, F12, Page down, Page up...); currently not possible under OS4 and
  AROS because we currently don't get IDCMP_RAWKEY for these keys
- Fix: Some animations were accidentally loaded without the last two frames (reported
  by Lazar Zoltan)
- New: "FromDisk" argument is now also supported for @ANIM preprocessor command
- New: Because the AmigaOS API does not allow for a minimize/collapse gadget in the
  window's border (like on Mac OS X or Windows), Hollywood installs a hotkey which
  allows you to do that; just press left command (or right) and 'h' and the Hollywood
  window will be minimized; this behaviour can be suppressed by using the NOHIDE
  argument
- New: Hollywood opens as a commodity now; this means you can show and hide it from
  Exchange (this will post the HideWindow & ShowWindow events) and you can also kill
  it using Exchange; the name displayed in Exchange's list is taken from @APPTITLE;
  if this is not specified, the initial display title will be used; the title text
  displayed in Exchange is taken from @APPVERSION; the description displayed in
  Exchange is taken from @APPDESCRIPTION; the Exchange Show/Hide feature can be
  suppressed by using the NOHIDE argument
- Fix: StringRequest() with type #NUMERICAL was horribly broken (thanks to Juan Carlos
  Herran Martin for the bug report)
- Change: SetPanning() accepts the special coordinate constants #LEFT, #CENTER, and
  #RIGHT now; the old (& undocumented) constants #PANLEFT, #PANRIGHT and #PANCENTER
  were removed
- Change: FileRequest() uses a new format for the filter pattern now; just pass a
  string with all acceptable extensions separated by | to the function, e.g.
  "wav|8svx|16sv|iff|aiff" etc.; the old Amiga style pattern is still supported
  on Amiga compatibles, but the pattern must start with a "#" character; to display
  all files, specify either an empty string, an "*" or "#?"
- New: GetTempFileName() returns a file name that can be used as a temporary file;
  this is important for multi-platform scripts because each platform stores its temp
  files in different locations (e.g. "T:" on Amiga compatibles)
- Fix: ReplaceStr() did only replace the first occurrence of the search string
- New: GetAttribute() supports type #CLIPREGION now; you can query the attributes
  #ATTRXPOS, #ATTRYPOS, #ATTRWIDTH, #ATTRHEIGHT using this type (requested by Kai
  Stegemann)
- New: SetFPSLimit() and GetFPSLimit() are back but you normally should not find any
  reason to use them; they do not globally restrict the drawing fps but they only affect
  certain commands which call VWait() to restrict drawing speed; these commands are:
  PlayAnim(), MoveBrush() etc, DisplayTransitionFX() etc, Flip() and of course VWait()
  itself; by default, the FPS will be set to the monitor's refresh rate; thus, the
  commands listed before will run at different speeds with different refresh rates; if
  you want a constant speed, you can use SetFPSLimit(), but normally it is not necessary
- Fix: Using PlayMusic() on a paused Protracker module did not play the Protracker module
  right from the start but resumed playback from the paused position
- Fix: "Time" field of the PlaySample() argument table was handled incorrectly if used
  together with a custom pitch
- Fix: #ATTRDURATION for #SAMPLE returned wrong time if used after a call to SetPitch()
- New: The Mac OS X version of the HollywoodPlayer will look for command line
  arguments in the CFBundleExecutableArgs key of the Info.plist property list inside
  the generated application bundle if started from Finder; it you launch Hollywood
  applications from the Terminal, arguments will be taken from the command line
  instead
- New: Mode argument of @DISPLAY preprocessor command accepts "FakeFullScreen" and
  "OwnScreen" types now, too; additionally, the @DISPLAY preprocessor command also
  recognizes the "ScrWidth," "ScrHeight," and "ScrDepth" tags (they are only used
  when display mode is set to "OwnScreen")
- New: FAKEFULLSCREEN argument added; this is a convenience argument which configures
  Hollywood to open on the desktop, but make it look like it was a full screen mode
  by setting backfill to black and using a fixed borderless window
- New: OWNSCREEN, SCRWIDTH and SCRHEIGHT arguments can be specified to make Hollywood
  open on its own screen; the advantage of the OWNSCREEN argument over the FULLSCREEN
  argument is that OWNSCREEN does not set any further flags; you still have full control
  over all the additional window settings like BORDERLESS, FIXED, BACKFILL etc.;
  SCRWIDTH and SCRHEIGHT can be used to specify the dimensions of the screen; if not
  specified, Hollywood will try to use the best fitting mode; if you specify 0 for
  SCRWIDTH or SCRHEIGHT, the dimensions of the desktop are used for the new screen;
  finally, you can use the DEPTH argument to specify the desired depth for the new
  screen; if DEPTH is not specified, the desktop's depth is used
- Change: If Hollywood is started without arguments, it will automatically open in
  windowed mode now; previously it opened in full screen mode if started without arguments
- Change: Data is now streamed directly from the applet/executable instead of written to
  a temporary file; only in the Amiga built it is sometimes still necessary to write
  the data to a temporary file because some functions of the AmigaOS API don't allow
  custom file functions (e.g. datatypes.library)
- New: Added NOHIDE argument; if you pass this argument to Hollywood, the user won't
  be able to minimize the display (Hollywood will disable the minimize button, but
  you can still minimize the display by calling HideWindow())
- New: Added event handlers "HideWindow" and "ShowWindow"; they will be sent to your
  script when the user minimizes the window (or expands it again); in order to have
  those events sent to your script, you need to install a listener via the command
  InstallEventHandler()
- New: Added commands HideDisplay() and ShowDisplay() which allow you to show and hide
  the Hollywood display; the script execution will continue in hidden mode, but there
  will be no more gfx output
- New: USEQUARTZ console argument allows you to force gfx output using Quartz 2D; by
  default, QuickDraw is used because it is much faster on my system than Quartz; this
  argument only effects the Mac OS version of Hollywood
- New: GetVersion() allows you to retrieve information about the Hollywood version in
  use; this is especially useful to determine on which platform your script is running
- New: GetFileAttributes() and SetFileAttributes() can be used to get/set several file
  attributes including file dates, comments, and flags (e.g. permissions etc.); some
  differences between the supported platforms apply; please see the documentation for
  information on what is supported on which platform; can also be used with directories
- New: #ATTRHOSTWIDTH and #ATTRHOSTHEIGHT return the dimensions of the host desktop screen
  on which the Hollywood display is opened (use it with #DISPLAY as the super class)
- New: #ATTRBORDERLEFT, #ATTRBORDERTOP, #ATTRBORDERRIGHT, #ATTRBORDERBOTTOM can be queried
  for #DISPLAY; they will return the left, top, right, or bottom sizes of the display
  border (if there is any); this is useful for advanced users who need to obtain that info
  for example to position the cursor using MovePointer() or for moving the display using
  MoveDisplay()
- New: #ATTRXPOS and #ATTRYPOS can also be used with #DISPLAY now; queries the position of
  the display on the desktop
- Fix: Memory leak in ARexx event handler (reported by Richard de Rivaz)
- Fix: Under very rare circumstances, a wrong button event could be triggered (reported
  by Lazar Zoltan)
- Fix: #STRUDEL effect could cause a complete system crash under certain circumstances
  (reported by Rafal Chyla)
- New: Hollywood has landed on two new platforms: Win32 and Mac OS X are now supported!
  This is made possible by the new OS abstracted design of Hollywood. The kernel of
  Hollywood has been fully OS abstracted since version 2.5. Supporting new platforms
  is now only a matter of writing a driver for it. No changes to the Hollywood kernel
  are necessary!

Version 2.5 R1 (19-Mar-07)

- Change: Hollywood uses the charset of the system now under AmigaOS4; so you can also
  create text objects with Polish characters etc. (reported by Rafal Chyla)
- Fix: CTRL-C in the CLI window spawning the Hollywood task is now handled correctly
  (reported by Lazar Zoltan)
- Fix: Increased alpha map allocation for thick anti-aliased lines by 1 so that OpenCV
  has enough space to draw (memo: it subtracts 5 from the alpha map dimensions so we need
  to allocate at least 6 pixels)
- Fix: Position of #DISPLAY and #ANIMDISK constants was in the wrong order which led
  to compatibility problems with applets that have been compiled with Hollywood 2.0
- Fix: The Hollywood Player did not respect the tooltype settings in the icon
  (reported by Marco Fogli)
- Fix: MoveDisplay() did not work correctly after ChangeDisplaySize() (reported by
  Paul Bloedel); +further fixes, Hollywood does no longer access the window structure
  directly to avoid these problems
- Fix: If SetTimeout() and SetInterval() needed to free an old timer before starting
  the new one a wrong pointer was used which led to a system crash (reported by Paul
  Bloedel)
- Change: Added some more true type fonts to the distribution (AmigaOS3 and WarpOS only)

Version 2.5    (08-Mar-07)

- Change: Updated Hollywood documentation
- Change: Updated catalog descriptions and German translation; added new developer
  files for doing new translations
- Change: Updated the Hollywood GUI and added a remote control for the Hollywood ARexx
  demonstration
- New: Added Text example script which demonstrates the features of the new text engine
  in a resizable window
- New: Added FormsDemo example script which demonstrates the completely new drawing
  library of Hollywood 2.5
- Change: FontsDemo uses a system true type font now instead of a custom true type
  font loaded via ttengine.library (ttengine is no longer supported as of Hollywood 2.5!)
- Change: PolygonTest example now also demonstrates the new Hollywood 2.5 form styles
  (#ANTIALIAS, #SHADOW, #EDGE); SizeWindow capability removed; would be too complicated
  because the border can get quite huge with odd window sizes
- Change: The Zool and Pang cracktros will stream the sound now; this is possible now
  because OpenMusic() can stream sample formats
- Change: The HollyAmp example script supports the new music streaming formats of
  Hollywood 2.5 now (IFF 8SVX, IFF 16SV, RIFF WAVE); also fixed a bug in HollyAmp
- Fix: Lens.iff from the Lens example was a GIF file in reality; I have now converted it
  to IFF
- Fix: BallsDemo example used a corrupt Protracker module; the replayer did not have
  any problem with it but it was still corrupt
- Change: Adapted ImageLab for Hollywood 2.5
- New: Added a groovy new example that communicates with the Hollywood GUI to
  demonstrate the ARexx library of Hollywood 2.5!
- Fix: Not all libraries were shown in the "system information" dialog in the GUI
- New: Attributes #ATTRXPOS, #ATTRYPOS and #ATTRONSCREEN can now be queried for type
  #SPRITE (requested by Kai Stegemann)
- Fix: Wrong error message if sprite could not be found by GetAttribute()
- Fix: Functions which also accepted percent values as arguments did not handle numbers
  specified as strings correctly
- New: FlushFile() can be used to flush all pending buffers; this is needed if you
  switch between buffered/unbuffered IO on the same file; for advanced users
- New: SetIOMode() allows you to switch between buffered and unbuffered IO; by default
  all functions of the DOS library will use buffered IO and that's okay for most uses;
  some advanced users, however, might prefer to use unbuffered IO which can be used to
  send data directly to DOS filehandles; for example if you open a console window with
  OpenFile() or you access the parallel port through the file system, unbuffered IO is
  clearly a better choice because it passes all data directly to the file system; all
  DOS functions will respect the setting made with SetIOMode()
- New: ConvertToBrush() supports type #LAYER now
- Fix: If there were overlapping buttons on the BGPic, hover was not handled correctly
  (reported by Simon Neumann)
- Fix: Several fixes so that Hollywood works with the final version of OS4
- New: Polygon() now uses double precision for the vertices; they're rounded to integer
  right before rendering the pixel data
- Change: Hollywood.sys uses a new modular format now; the old format was still a relic
  from Hollywood 1.0 and not really suitable for all the different changes that have
  been made in the meantime
- Fix: FreeSprite(0) freed all sprites on the display (reported by Nathan Hesterman);
  please note that you should not use IDs < 1 for your objects; the ID system needs to
  be reworked in order to allow that
- Fix: Hollywood 1.x style ONKEYDOWN events were not emulated correctly in Hollywod 2.0
- Change: Removed the second compatibility hack for Hollywood Designer 1.01; this hack
  is not required by Designer 2.0 either
- New: Implemented a brand-new gfx driver for the AROS version; the Hollywood OS abstraction
  layer makes it possible; the standard gfx driver relied heavily on locking bitmaps
  which is not possible under every hosted AROS version and thus caused a HUGE slowdown;
  the new gfx driver for AROS does not need to lock bitmaps any more and hence is so
  much faster than the old one. This is as fast as it gets. Run Hollywood on AROS on
  a modern PC and enjoy the lightning speed!
- Change: Usage of a table as the sixth argument to Polygon() is now deprecated; the
  6th argument is now reserved as a rotation argument; the table synopsis from Hollywood
  2.0 is still supported for compatibility's sake
- New: Unified object types #ANIM and #ANIMDISK; to play an animation from disk just use
  LoadAnim() now with the new table argument "FromDisk" set to TRUE; you can use all
  the functions from the anim library with "FromDisk" anims then; the functions for
  anim layers with also work; the command PlayAnimDisk() still works but does nothing
  else than calling LoadAnim(), PlayAnim() and FreeAnim()
- Fix: Round() did not work correctly on negative numbers
- Fix: Wrong error message when changing the display size to a size larger than the host
  screen
- New: RotateBrush() can also do anti-aliased rotations now; use the fifth optional
  argument to enable anti-aliased rotation mode
- New: RotateBrush() can also zoom brushes; you can do a rotzoom by using the new two
  optional arguments factorx & factory; these are scaling factors which specify to much
  extent the brush shall be scaled
- New: ScaleBrush(), ScaleAnim(), ScaleBGPic(), ScaleSprite() and ChangeDisplaySize()
  all accept an optional argument now which specifies whether or not the scaled gfx
  data shall be anti-aliased; alpha channel anti-aliasing supported for brushes and
  sprites
- Fix: Improved scaling algorithm (old one had some issues; reported by Lazar Zoltan)
- Fix: ExitOnError(FALSE) did not work correctly in user callback functions; Hollywood
  did not throw any errors but left the callback function
- New: Added type #LAYERBUTTON to the MakeButton() function; this new type allows you
  to define layers as buttons; the fourth argument specifies whether or not the collision
  detection for the button shall be pixel-exact; this is useful for creating irregular
  shaped buttons now); the fifth argument specifies whether the button shall be hidden
  if the layer is hidden; the sixth argument is a function table with the same entries
  as in #SIMPLEBUTTON; if you free a layer, its button will also be killed
- Fix: Freeing buttons or the current bgpic in OnMouseOver and OnMouseOut user functions
  could lead to a crash
- New: All gfx primitives can now also be drawn using rotation; the following commands
  accept an optional argument now which specifies the rotation angle in degrees: Arc(),
  Box(), Ellipse(), Polygon(); the Circle() command does not support rotation because
  circles look the same with every rotation angle; this argument defaults to 0 which
  means no rotation
- New: Arc() accepts a new parameter now which allows you to specify whether the arc
  shall be drawn in clockwise or anti-clockwise direction (defaults to TRUE which
  means clockwise drawing)
- Change: HUNK_DEBUG information is no longer included the in the hunk header for
  68k/WarpOS executables; this saves memory because the OS loader won't load the data
  attached to the executable into memory now (thanks to Gunter Nikl for the hint!)
- Fix: Using the THEN identifier after ELSEIF resulted in a crash of Hollywood; now
  the parser reports the error to the user instead of freezing the system (reported
  by Christoph Gutjahr)
- Fix: Registering constants during parsing could invoke the garbage collector which
  could lead to random crashes at exit (reported by Lazar Zoltan)
- Change: Polygon() also accepts negative coordinates in the vertices array now; also
  slightly changed the alignment of rotated polygons
- Fix: Polygon was not closed correctly if the start coordinates were not explicitly
  specified as the end coordinates
- Fix: RemoveItem() did not work correctly when trying to remove the last remaining
  element of a table (reported by Nathan Hesterman)
- New: SetFormStyle() allows you to configure the style for the drawing primitives: The
  command accepts the styles #SHADOW, #EDGE, and #ANTIALIAS; the following commands support
  all three styles: Arc(), Box(), Circle(), Ellipse(), Polygon(); the Line() command
  only supports #ANTIALIAS style. #EDGE and #SHADOW are not supported for lines; usage
  of this command is similar to SetFontStyle(); the edge and shadow colors can also contain
  an inverted alpha value; anti-aliasing is fully implemented here including support for
  all fill styles (#FILLNONE, #FILLCOLOR, #FILLGRADIENT, #FILLTEXTURE); the implementation
  of SetFormStyle() required an almost complete rewrite of the drawing library; the new
  version is not nearly as fast as the old version of 2.0 was, but it is much more flexible
  now and the anti-aliased routines look great for line based polygons; the round forms
  are not perfect yet but still good
- Fix: Line() function did not accept special coordinate constants as start/end points
- New: The Line() function accepts a new argument now which specifies the line thickness
- New: Alpha drawing now also supported for #FILLGRADIENT and #FILLTEXTURE; just pass the
  alpha value in the color argument of the functions of the drawing library (the rest of
  the color argument is ignored on #FILLGRADIENT or #FILLTEXTURE)
- Change: When you draw gfx primitives with alpha blending and layers are enabled, the
  specified alpha value will no longer be used as the new layer's transparency; you will
  get a new layer that has no transparency setting
- Change: Plot() can no longer be used with layers enabled; plot layers just don't make
  sense; if you really need a pixel layer, use Box() with width/height = 1
- Fix: Plot() did not respect sprites at all
- Fix: Plot() and ReadPixel() did not work correctly if a custom shaped clip region on a
  position different than 0:0 was active
- New: TextOut() accepts a new optional argument which you can use to output word-wrapped
  text: just pass a width parameter in argument 5 and the text printed by TextOut() will
  not exceed this width; defaults to 0 which means no width restriction
- New: TextOut() accepts a new optional argument now which specifies the text alignment;
  this change breaks with the old API; in previous versions the alignment was automatically
  set to #CENTER if x was #CENTER and to #RIGHT if x was #RIGHT; this is no longer supported
  now; you have to use the new optional argument now; this argument defaults to #LEFT
- Fix: Evaluation of constant expressions in table arguments of preprocessor commands was
  horribly broken (reported by Nathan Hesterman)
- Change: Removed a compatibility hack for Hollywood Designer in PlayAnim() and PlayAnimDisk().
  With the latest version of Designer, this hack is no longer necessary.
- New: NextFrame() and InsertLayer() can now also be used with layers of type #ANIMDISK.
  This allows you to use huge animations that are played from this as anim layers, too.
  Quite useful. For AddMove() there is a new type called #NEXTFRAME2 which takes a layer
  id as source, thus allowing you to address both #ANIM and #ANIMDISK layers (whereas
  #NEXTFRAME only allows you to address #ANIM layers). #ATTRCURFRAME and #ATTRNUMFRAMES
  can also be used on layers of type #ANIMDISK now. [addendum Feb-07: #ANIMDISK now completely
  removed; to play anims from disk just use LoadAnim() with the new "FromDisk" tag]
- New: Animations that use multiple palettes are now handled correctly
- Change: The IFF ANIM loader now checks the DPAN chunk first to find out the number
  of frames in the animation
- Fix: If OnSampleLoop or OnSampleEnd was set up before Hollywood opened ahi.device,
  then those event handlers were not installed at all
- Fix: Freeing a sprite during preprocessor loading resulted in a crash
- Fix: The "Time" argument of the PlaySample() command did not work correctly if the
  following two conditions were present: 1) time shorter than the sample duration &
  2) single sample frame size greater than 1 byte (e.g. stereo or 16-bit samples)
- New: Peek() accepts an optional argument now, which can be used to peek a string with
  of a fixed length instead of auto-termination
- Fix: When peeking a string using Peek(), the string returned had one character too many
- Fix: UnrightStr() and Poke() did not handle strings with null character correctly
- Fix: #BLEND, #FADE, #VFLOWLEFT, #VFLOWRIGHT, #HFLOWTOP, #HFLOWBOTTOM, #WALLPAPERLEFT,
  #WALLPAPERTOP, #ROLLLEFT, #ROLLTOP, #PIXELZOOM1, #PIXELZOOM2 did not work correctly
  on objects with alpha channel
- Fix: Wrong behaviour of SetMusicVolume() when a stream was playing and SetMusicVolume()
  was used to modify the volume of a Protracker module
- Fix: When SetMusicVolume() was used on a playing music, the new volume was applied but not
  memorized; thus, after ResumeMusic() the music would play in the old volume
- Fix: MakeButton() did not accept special coordinate constants (reported by Kai Stegemann)
- Fix: OpenMusic() could fail to open files if the path specification was relative and the
  current directory was changed
- New: All music files declared using the @MUSIC preprocessor command will now be linked to
  the applet; even audio streams can be included in your executables this way; if you do not
  want to have them linked, use the Link=False option
- New: OpenMusic() can stream IFF 8SVX, IFF 16SV, and RIFF WAVE sound files now. Sample data
  can be in 8 or 16 bit, mono or stereo; compression is not supported yet. Because there is
  no datatype API for streaming yet, Hollywood employs custom code to do it
- New: PlayMusic() can loop the music now automatically; you can tell the function how many
  times the music shall be played through the second argument; use 0 for infinite looping;
  does currently not work with Protracker modules
- New: ConvertToBrush() allows you to convert various objects to brushes. Sprites are
  supported here too. The Hollywood 1.x function GetBrushLink() simply calls ConvertToBrush()
  now, too. Brush link support was already removed in version 2.0.
- New: SaveBrush() and SaveSnapshot() can save PNG files now, too. This is especially
  useful for SaveBrush() because, if the brush has an alpha channel, a PNG with alpha
  transparency will be written. The PNG datatypes of the various Amiga systems do not
  support file writing yet, so you will need pngalpha.library for this feature.
- New: ARexx interface. Many people have asked me to add ARexx support to Hollywood
  so here it is. You can now address ARexx by using the commands SendRexxCommand() and
  RunRexxScript() - remember that the first line of an ARexx script must always be a
  comment! Furthermore, you can also receive messages from other applications by
  installing your own ARexx port. You can do this with CreateRexxPort(). After you have
  created a rexx port, you have to install the new "OnARexx" event handler using the
  InstallEventHandler() function. Every time an ARexx command is received, this handler
  will be called then with "action" initialized to "OnARexx". You will also receive the
  command in the "command" field and the fields "args" and "argc". "args" is a string
  containing "argc" arguments pre-parsed by Hollywood and delimited by null characters;
  use SplitStr() to convert them to single strings; you may also access the unparsed
  arguments; they will be stored in the "rawargs" field
- Fix: When many timeouts returned at the same time, some were usually lost because
  Hollywood was limited to 16 timeouts per vm cycle; this limit has been removed now
  so there's virtually no limit of timeouts and every timeout function should be
  executed (reported by Alexander Weber)
- Change: Hollywood scheduler does no longer run as its own task; gives about 10% more
  performance on expensive scripts
- Change: CheckEvent() removed. Please use WaitEvent() instead.
- New: You can also copy raw alpha channel data with Hollywood now. To achieve this
  special mode, set SetAlphaIntensity() to the special mode #VANILLACOPY; this mode
  will do a vanilla copy of the alpha channel data; if you call a drawing command
  which does not contain any alpha data, nothing will be written to the brush's alpha
  channel
- Fix: Possible memory access fault in CopyFile()
- Fix: When SelectXXX() was active, and a window resize occurred, and a double buffer was
  set up, Hollywood forgot to scale the double buffer
- Change: #TYPEWRITER effect looks much better now due to the new text engine. Expect
  some cool new text effects soon.
- New: Text engine completely rewritten. Now much better than the old one! You can now
  change font styles on-the-fly using format tags. The following format tags are
  currently implemented: [b], [u], [i], [color], [edge], [shadow]. Edge and shadow support
  for anti-aliased fonts is now fully implemented and looks great. Edge and shadow
  transparency on anti-alias fonts also supported. This is powerful. Use it wisely.
- New: CreateTextObject() accepts an additional argument now that allows you to give
  the object a specified width; the text will be wordwrapped then
- New: #ATTRCURSORX and #ATTRCURSORY can be used to find out the current cursor
  position (#DISPLAY is the super class of these attributes)
- New: TextExtent() allows you to retrieve detailed information about the boundaries
  of a string; remember that TextWidth() only returns the cursor advancement of a string
- New: Italic soft style for anti-aliased fonts now supported!
- New: Just like the functions of the draw library, the text library supports
  transparent text now, too. Just specify an inverted alpha value before the color!
  (0 = solid, 128 = 50% transparency, 255 = 100% transparency). You could also use
  this feature to create an outline text font style: To do this set the transparency
  of the font color to full ($ff) and use the new edge style. Hollywood will only
  draw the text edges then, resulting in nice outlined text.
- New: Introducing new soft styles for text: #SHADOW and #EDGE. You can configure
  the shadow color, size and direction as well as the edge color and size. Use
  SetFontStyle() to install them.
- Change: ttengine.library no longer supported. The text engine is about to undergo
  a major change and I'm concentrating now on the bullet interface (ft2.library on
  OS4, freetype2.library on MOS/AROS). For AmigaOS 3.x there's a back-port of
  freetype2.library available, or you can use ttf.library but the latter does not
  support anti-aliased glyph output.
- Fix: Plot() did not handle alpha value correctly
- Fix: When drawing an alpha-blended rectangle with #FILLNONE, the four edges
  were alpha-blended twice
- Fix: Cursor position will be reset to 0:0 on a display size change and to the
  top-left of a clip region on SetClipRegion()
- Fix: When SelectXXX() was active and a display size occurred, the margin and
  cursor settings were not adapted correctly
- Fix: luaV_tostring() always returned a random value instead of 1
- Fix: Hollywood could crash the system on window refresh when SelectMask()
  or SelectAlphaChannel() were active
- Fix: WriteString() was broken
- New: Hollywood is completely OS abstracted now; all OS dependent functions have
  been abstracted from the main source code so that it is possible to write
  Hollywood backends for other platforms now

Version 2.0 R1 (10-Jun-06)
- Fix: On some OS4 systems Protracker modules that tried to change the tempo could
  crash (reported by Rev. Bloedel)
- Fix: Hollywood tried to write to const* memory several times; this causes a crash
  with the latest beta OS4 kernel which protects those areas (reported by Tony Wyatt)
- only the AmigaOS4 interpreter and player binaries got an update; the rest are kept
  at revision 0 from 30-Dec-05

Version 2.0:   (30-Dec-05)
- Change: Updated Hollywood documentation; now twice as big!
- Change: Updated catalog descriptions and German translation
- Change: Removed Settings tool; no longer supported; you can use @DISPLAY
  with Mode="Ask" instead
- Change: OnSampleEnd event is only sent when the sample has finished playing;
  it is not sent when StopSample() was called
- New: Added a funky new Welcome 2.0 script!
- New: Added many new examples: AlphaChannel, HollyPac, ClipRegions, FloodFill,
  Bouncing ball, Melt, HollyAmp, Collision, Aladdin cracktro (original by Prodigy),
  Zool ECS cracktro (original by Melon), Pang! cracktro (original by Horizon),
  Lemmings cracktro (original by Skid Row), Badger Badger Badger; the cracktros
  and the Badger dance were contributed by Mr.X of Barracuda; thanks mate!
- Change: Vectorballs example now bears the name "AnimationTechniques"; I also
  removed the BGPic Vectorballs script and added a version that uses sprites
- Change: Renamed RainbowCreator example to Gradients
- Change: removed MoveAnim, WinFileCopy, Scroller and WBFadeOut examples
- Change: APPTITLE, APPVERSION, APPCOPYRIGHT, APPAUTHOR, APPDESCRIPTION arguments
  (only present in internal 2.0 betas) are now implemented as preprocessor commands,
  i.e. @APPTITLE, @APPVERSION and son. These preprocessor commands allow you to
  store some information about your program in your applet/executable
- Change: Removed STAYACTIVE argument/tooltype; no longer required; the background
  window will take care of the matter automatically
- New: Optimized loading for graphics specified in @SPRITE and @BRUSH. Hollywood
  will cache the image now if it is to be loaded multiple times so that loading
  goes much faster now
- Change: LoadSprite() uses a table for the optional arguments now (just like
  LoadBrush() does)
- New: TrimStr() can be used to strip leading or trailing characters from a string
- Change: All functions of the string library work correctly now with strings that
  have embedded zeros ("\0"); for instance, StrLen("\0\0\0\0") returns 4 now and
  you can also do wild stuff like SplitStr("Hello\0World\0Hello\0Hollywood", "\0")
- New: #ATTRTYPE and #ATTRPITCH can be used with audio streams now, too
- New: #ATTRBITRATE can be used to find out the bitrate of a compressed audio file; note
  that if the file is encoded using a VBR, you will get the bitrate of the current
  frame
- New: OnMusicEnd event handler is triggered when a music has reached the end or
  is stopped! Doesn't work with Protracker modules because they'll loop infinitely
- New: Completely rewrote the Hollywood GUI! Now has a showcase for all examples
  and some other cool features!
- New: Pairs() and IPairs() return common iterators for the generic for loop
- New: NextItem() allows you to traverse a table; be careful with the return
  value which is Nil when the traversal is done! You cannot use "While r <> Nil"
  because that would also terminate the loop on r:=0. Use "While GetType(r) <> #NIL"
  instead which is the only reliable way to check a variable against Nil in
  Hollywood because in expressions, Hollywood regards Nil as 0! Don't expect
  that NextItem() returns the items in the order you initialized them!
- Change: Different Protracker timer is now used on OS4. This had to be changed
  because Davy Wentzler's sound drivers are buggy and he refuses to fix it.
- New: If double buffering is active and the size of the display is changed, the
  double buffer will automatically draw its graphics scaled so that it fits the
  display
- New: The commands of the drawing library (graphics primitives) can draw alpha
  blended graphics now, too. Simply specify an alpha value in the highest 8 bits
  of the RGB color, e.g. $80ffff00 will draw yellow with 50% alpha transparency
  (50% = 128 = $80). Note that the alpha value is inverted as in SetLayerTransparency():
  0 means no transparency, 255 means full transparency. Normally it is just the other
  way round (cf. SelectAlphaChannel). Alpha drawing is highly optimized and supported
  by Polygon(), Arc(), Ellipse(), Circle(), Box(), Line() and Plot(). Use ARGB() to
  easily combine a RGB color with alpha, e.g. ARGB(128, #AQUA).
- New: ARGB() combines a RGB color with an alpha value
- New: Every preprocessor command which preloads files accepts an optional argument
  "Link" now which specifies if the corresponding file shall be linked into an
  applet/executable when a script is compiled; NODATALINK is obsolete now (was only
  present in internal 2.0 betas); link defaults to TRUE, so you only have to set
  it when you do not want a certain file to be linked into the applet/executable
- New: Many of the command line options can also be specified in your script now.
  For instance, you can now specify in your script whether it shall run in full screen
  or windowed mode. The disadvantage here is, that if you hard-code the settings in
  your script, it is not possible to change those settings from the command line.
  All arguments have to be specified in the @DISPLAY preprocessor command. Currently
  supported are: Mode (can be "Windowed", "FullScreen" or "Ask"), Borderless, Sizeable,
  Fixed, HideTitleBar, Backfill. Backfill expects an other table which can contain the
  following arguments: Type ("Color", "Gradient", "Texture" or "Picture"), X, Y, Color,
  StartColor, EndColor, Brush. FIXSETTINGS is now obsolete (was only present in internal
  2.0 betas)
- Change: Backfill mode RAINBOW is now called GRADIENT; RAINBOW is still accepted, though
- New: @FILE preprocessor command allows you to preload files for read-only access.
  The cool feature here is that files specified in @FILE will also be linked to your
  applets/executables and you can work with them as if they were normal files
- New: Polygon(), Circle(), Ellipse() and Arc() are much faster now in many cases
- New: WaitTimer() call waits until a timer has reached the specified time, then
  resets it and continues with the script; useful in loops that must not run faster
  than a specified limit!
- New: RemoveSprites() removes all sprites that are on the display; if the optional
  argument "keep" is set to true, the sprites will be removed internally but not
  from the display. In case keep=True, they will remain on the display but as normal
  gfx, not as sprites.
- New: ToNumber(). Basically does the same as Val() but takes an additional base
  argument which can be used to convert strings to numbers with bases 2-36
- Change: LoadBrush() accepts a table as argument 3 now which can be used to specify
  the transparent color, whether an alpha channel shall be loaded, global alpha
  setting and brush cropping; everything can also be specified in the new @BRUSH
  preprocessor command
- Change: Compiler recognizes identical files and links them in the applet/executable
  only once
- Change: FramesPerRow arguments in CreateSprite(), @SPRITE and CreateAnim() are
  optional now; number of frames used as default
- Change: Transparent windows on OS3 do not get a clip region installed any longer
  because that would prevent them from using layers
- New: Polygon() accepts an optional table argument now which can be used to scale
  or rotate the polygon before it is drawn
- New: ChangeInterval() can be used to change the frequency of a running interval!
- New: Error() allows you to make Hollywood quit with a custom error message
- New: GCInfo() and CollectGarbage() allow control over Hollywood's garbage collector;
  not necessary normally
- New: Print(), NPrint() and DebugPrint() use ToString() now, too
- New: ToString() function in Hollywood's system library; if a table is passed to
  this function, ToString() will look for a __tostring metamethod and call it if
  present
- New: RawEqual(), RawGet() and RawSet() can be used to query a table without
  invoking a metamethod
- New: Metatable support added! Use the functions SetMetaTable() and GetMetaTable()
  to deal with them. The following metamethods are supported: __index, __newindex,
  __add (+), __sub (-), __mul (*), __div (/), __divint (\), __mod (%), __lsh (<<),
  __rsh (>>), __or (|), __and (&),  __xor (~), __pow (^), __unm (-), __not (~),
  __eq (=), __lt (<), __le (<=), __concat (..), __call ()
- Change: When creating an applet/executable, Hollywood checks if the files are
  in a supported format before linking them
- New: @MUSIC preprocessor command. @MODULE command removed because Protracker
  modules are only a sub-class of the music class now. Please note that @MUSIC
  currently does not link audio streams into applets/executables; those files will
  always be kept external. Protracker modules, however, are linked to the applet/
  executable if specified in @MUSIC (unless NODATALINK is active)
- New: #ATTRFORMAT can be used to find out the type of an open music; returns a
  string
- Change: Merged Protracker module playback with the new music commands: OpenMusic(),
  PlayMusic() and so on should now also be used when playing Protracker modules.
  The old LoadModule(), PlayModule()... functions are still supported for compatibility
  but are likely to be removed in one of the next versions!
- Change: GetSamplePosition() removed (command was only available in internal
  beta versions); please use #ATTRPOSITION together with #SAMPLE instead
- New: #ATTRDURATION and #ATTRPOSITION can be used to find out the duration and
  position (in milliseconds) of a music
- New: Introducing audio stream support! Many people have asked me to implement support
  for stream playback, so here it is. The following functions are implemented: OpenMusic(),
  CloseMusic(), PlayMusic(), StopMusic(), PauseMusic(), ResumeMusic(), SeekMusic(),
  SetMusicVolume(), IsMusic(). Currently, you can only open audio files with
  OpenMusic(). In the future, I might add support for other formats like ogg vorbis
  etc. Limitations: Only one music can play at a time & music and Protracker modules
  cannot be played at the same time
- New: Introducing special functions for double buffered graphics! It is no secret
  that double buffering with Hollywood could already be achieved by using two brushes
  and drawing to them using SelectBrush() but the new functions can do this faster
  and easier! There are just three functions: BeginDoubleBuffer(), EndDoubleBuffer()
  and Flip(). See the examples and documentation to learn more; restrictions: Double
  buffering does not work with transparent displays, layers and sprites! Clip regions
  supported!
- New: Box() and Line() can draw their graphics very fast now in most cases; I've
  added special code for straight-forward drawing that can be used if the following
  conditions are met: 1) layers are off, 2) there's no custom shaped clipping rectangle,
  3) the gfx object does not collide with a sprite, 4) output device is either the main
  display or a brush or double buffer
- Change: CreditsRoll example displays Hollywood Designer credits now
- New: Added a small gfx toolbox for the sprite library: CopySprite(), ScaleSprite()
  and FlipSprite() should be enough to get you started with sprites; if you need
  more advanced functions, use the brush functions to manipulate the gfx and then
  use CreateSprite() to convert the brush to a sprite
- Change: 3DText uses a sprite now instead of an IFF ANIM; good for systems without
  a correct datatype, i.e. MorphOS and AROS
- New: Attributes #ATTRHASMASK and #ATTRHASALPHA allows you to query sprites and
  brushes to check if they have a mask or an alpha channel
- New: GetAttribute() supports #SPRITE now (attributes: #ATTRWIDTH, #ATTRHEIGHT,
  #ATTRTRANSPARENTCOLOR, #ATTRNUMFRAMES, #ATTRCURFRAME)
- Change: Clip regions don't work together with layers any longer! Layers should only
  be used for presentations... most applications do better without layers now
- Change: Sprites don't work together with layers any longer!
- Change: MixBrush() takes alpha channel of the source brush into account now
- Change: Mask and alpha channel in a brush are now mutually exclusive, i.e. you cannot
  have a mask that carries both a mask and an alpha channel; SelectAlphaChannel()
  will delete a possible mask and SelectMask() a possible alpha channel
- New: Introducing a replacement for the so called "keywords": Preprocessor commands!
  Preprocessor commands are basically the same as the keywords, but they have a
  different, more flexible syntax. Each command has to be prefixed by an at character (@)
  and accepts a number of arguments that must be separated by commas (keyword arguments
  were separated by slashes). The new syntax allows the usage of (constant!) expressions
  in arguments and also tables can be specified, which is useful for more complex symbols
  like @SPRITE. The following preprocessor commands are implemented: @BGPIC, @BRUSH, @ANIM,
  @SAMPLE, @MODULE, @SPRITE, @VERSION (replaces %HOLLYWOOD), @DISPLAY (combines the
  keywords %TITLE, %DISPLAYPOSITION, %DISPLAYDESKTOP, %DISPLAYCOLOR and %DISPLAYSIZE),
  @INCLUDE. Preprocessor commands can be placed anywhere in the script but for readability
  reasons they should be at the beginning of the script. Also, it is strongly advised to
  use the @VERSION symbol in the first line of your code, so Hollywood can check if the
  installed Hollywood interpreter can handle this script. All 1.9 keywords are still
  supported for compatibility reasons of course. Please read the documentation.
- Change: %DISPLAYPOSITION, %INCLUDE, %SPRITE keywords removed. Preprocessor commands
  are coming up!
- Fix: Small memory leak in FreeAnim()
- New: Collision() can detect collision between sprites (use type #SPRITE)
- New: Introducing sprites! Hollywood now has functions for you to work with sprites.
  Sprites are graphic objects that are always on the front of the display and can easily
  be moved around. A sprite can only be on the display once. E.g. if you display sprite 1
  at 100:100 and then display it again at 200:200, the sprite will be moved from 100:100
  to 200:200. Hollywood sprites are implemented completely in software; hence, there
  are no limits in size, number, whatsoever. Sprites can also have a mask or alpha channel. A
  sprite can also have multiple frames of animation. This is all perfect for games. Be
  sure to check out the documentation and examples to see what can be done. Hollywood's
  sprite library currently offers the following functions: CreateSprite(), DisplaySprite(),
  FreeSprite(), RemoveSprite(), MoveSprite(), LoadSprite(), %SPRITE keyword
- New: Hollywood's window is now of simple refresh type
- New: Collision() now also detects collisions between objects that have an alpha channel
- Change: Added emulation for GetBrushLink(); the new version will not obtain a link
  to the brush but copy it; type #LAYER not supported; this is mainly because Designer
  uses GetBrushLink()
- Change: Senso uses Arc() now instead of prepared brushes
- Change: SelectMask() and SelectAlphaChannel() create the mask/alpha channel not
  before the first drawing operation to the brush; e.g. SelectMask(1) EndSelect
  does not create a mask for brush 1 any longer
- New: Function DeleteMask() kills the mask of a brush; this command does basically
  the same SetBrushTransparency(brush, #NOTRANSPARENCY)
- New: DumpLayers() prints info of all layers in the system (private)
- Change: Because of the removal of the "quiet" argument, the optional x&y arguments
  (new in Hollywood 2.0) for ShowLayer() are now on position 2 and 3 for ShowLayer()
- Change: Removed optional "quiet" argument in: SetLayerTransparency(), SetLayerTint(),
  SwapLayers(), RemoveLayer(), ShowLayer(), HideLayer()  ---> Designer 1.01 uses
  HideLayer() with the "quiet" argument --> adaption necessary! e.g. you could use
  SelectBGPic() with the current bgpic as a workaround. In this way the layer will be
  hidden but not redrawn...
- New: Introducing substitute layers! If you free/modify a brush/anim/etc that is
  on the display, the gfx data will be saved so that refresh is still possible!
- Change: If SelectBGPic() is used on the current background picture, all layers
  will be inserted in hidden mode; you can bring them to the front with ShowLayer()
- Change: SelectBGPic() can only be used with layers on; in internal beta versions
  of Hollywood 2.0 it was possible to use it with layers off (direct render mode);
  not possible anymore
- Change: Removed BeginRefresh(), EndRefresh() and SetRefreshMode(); these commands
  were only available in internal beta versions; Sprites are coming up!
- Change: Removed GetBrushLink(); this command just made things too complicated!
- Change: SetClipRegion() splitted in CreateClipRegion(), SetClipRegion() and
  FreeClipRegion()
- Change: FloodFill() can only be used on a brush now; alpha channel and mask flooding
  no longer supported; it does not make much sense IMHO; memo: sources for alpha & mask
  flooding are still available in ppc_support.c in the last smart refresh back-up
- Change: Implementation of Cls(): If output mode is BRUSH/ALPHACHANNEL/MASK, the
  Cls() command will clear the area with the specified color (BRUSH) or alpha intensity
  or mask mode; if output type is BGPIC or MAINWINDOW, Cls() will remove all layers
  and refresh objects and will leave an empty bgpic on the display
- New: APPTITLE, APPVERSION, APPCOPYRIGHT, APPAUTHOR, APPDESCRIPTION arguments
  allow you to place some information about your program in your applet/executable.
  Especially the APPVERSION argument is useful to put version strings in your
  program, e.g. APPVERSION "$VER: MyProgram 1.0 (12-06-05)". These arguments make
  only sense when used with COMPILE! [VOID; use @APPTITLE, @APPVERSION... instead]
- New: FIXSETTINGS argument allows you to fix the display settings in your
  applet/executable. For example, if you execute "Hollywood myscript.hws COMPILE
  ram:myprg.exe FULLSCREEN FIXSETTINGS", then myprg.exe will _always_ be started
  in fullscreen mode. Even if the user executes "myprg.exe WINDOW", your program
  will be started in fullscreen mode because you fixed that setting in the executable!
  Useful. This argument makes only sense when used with COMPILE! [VOID; specify
  settings in @DISPLAY instead]
- New: NODATALINK argument will prevent the compiler from linking all data files
  specified in the keywords into the applet/executable. This argument is useful
  if you have different executables for let's say AmigaOS3, AmigaOS4, MorphOS and
  WarpOS. In this case it would not make much sense to have all data linked into
  each of the executables. It's much better to keep the data extern in this case!
  This argument makes only sense when used with COMPILE! [VOID; use the Link
  argument which all preprocessor commands support now]
- New: Introducing Hollywood applets! You can compile your scripts into applets
  now by using EXETYPE=APPLET. Hollywood applets can be started by Hollywood
  or the freely available HollywoodPlayer which is a special version of Hollywood
  that can run applets only! Applets are platform independent, all versions of
  Hollywood/HollywoodPlayer can run your applets no matter on which platform
  they were compiled!
- New: Keywords can now be anywhere in the script! The %CODE keyword is no
  longer necessary! However, it is advised that you use the keywords at the
  beginning of the script (for readability reasons)
- New: Hollywood is now also available in a i386 native version for AROS (the
  Amiga Research Operating System); this closes the circle: Hollywood is now
  available for all major Amiga compatible operating systems
- Change: Using keymap.library instead of console.device now
- Fix: FULLSCREEN/BESTFIT did not always choose the best screenmode available
- New: StrToArray() converts a string to an array of characters (0 - 255)
- Change: Migrated the 68k assembler Protracker replayer in ptahiplay.library to
  clean, portable C in a 12+ hours coding shift on Christi Himmelfahrt 2005; this
  means that ptahiplay.library is no longer required by Hollywood! (whoa, finally...)
- Change: Senso example plays cool sounds now (made by CreateSample)
- New: CreateSample() allows you to create your own samples from raw wavedata
- New: Added event handlers OnSampleLoop and OnSampleEnd; these allow you to
  create scripts that are exactly timed with samples; you can install the handlers
  by using InstallEventHandler(); be careful with OnSampleLoop in connection with
  very short, looped samples; they can easily block your program
- Change: PlaySample() implementation changed; playback is now started immediately
  without the 50-100 milliseconds delay; additionally, you can start up to 4 samples
  at the same time by adding them as optional arguments; playback will be exactly
  synchronized then; read the doc
- Change: Puzzle example shows a clock now; no problem with SetInterval()
- New: PadNum() converts a number to string and pads it with leading zeros
- Change: Default mode of GetTimer() is always milliseconds now; optional
  argument is ignored; this is an API break but noone used #SECONDS for GetTimer()
  anyway so this is harmless
- Change: Adapted all examples to the new Hollywood 2.0 design; they would have
  worked without the rewrite too but the examples shall be role models for good
  Hollywood programming and therefore I decided to rewrite them completely to
  show you how to program Hollywood correctly
- Change: Welcome example shows a spinning Commodore logo now
- Change: WavyLogo example has now additional buttons for selecting a FPS rate;
  this demonstrates SetInterval() with different rates; additionally, the
  actual FPS are shown in the upper right corner of the display
- Change: Removed CrossfadeTest example; cannot work any longer because
  transparent windows have clip regions which prevent blitting to transparent
  areas
- Fix: Some Protracker issues when using more than one module and/or PauseModule()/
  ResumeModule()
- New: ClearTimeout() can be used to stop a timeout function previously installed
  via SetTimeout()
- New: SetTimeout() can be used to tell Hollywood that it shall call the
  specified function after the specified time has passed; this is very useful if
  your scripts needs specific timing (e.g. timing to music); you can use as
  many timeouts as you like; Hollywood's internal timer scheduler will manage
  all that for you
- New: ClearInterval() deinstalls an interval that was installed using SetInterval()
- New: SetInterval() allows you to install a function that is called in regular
  intervals (e.g. 40 milliseconds for 25fps [40 = 1000/25]); please use this
  function instead of polling loops! Using SetInterval() guarantees that your
  scripts run everywhere at the same speed! This is important because the new
  computers like AmigaOne, Pegasos have much more power than 68k systems; you
  can use as many intervals as you like; Hollywood's internal timer scheduler will
  manage all that for you
- New: InstallEventHandler() allows you to specify functions that should be called
  when a specific event occurs, e.g. CloseWindow, OnMouseMove, OnKeyDown etc.
- New: Added DeleteButton(), DisableButton(), EnableButton() which allow you to
  manage the new buttons
- New: MakeButton() is the new, universal function to create v2.0-style buttons;
  they can monitor different events and call a function with a message instead
  of skipping to a label; this command supersedes CreateButton() and the %BUTTON
  keyword; buttons created with MakeButton() are attached to the current bgpic!
- Change: Removed support for ONJOYXXX events; noone used them so I do not want
  to support them any longer because they do not fit in the new concept
- New: The table passed to PlaySample() as argument 2 can also contain the fields
  "volume" and "pitch"; this is easier than to call SetVolume() or SetPitch() for
  the sample
- New: PlaySample() can play a sample now for an exactly specified duration;
  just pass a table as the second argument with the field "time" initialized to
  the number of milliseconds the sample shall be played
- Change: Removed the internal fps limiter; SetFPSLimit() and GetFPSLimit() as
  well as the FPSLIMIT argument/tooltype do not have a function any longer;
  timing should be done by the scripts
- Change: Terminator -1/$FFFFFFFF in ReplaceColors() is optional now
- Change: AddTab() can be called with any number of arguments now; this allows
  you to add multiple tabs with just one call
- New: CopyFile() lets you use a callback function now which can be used to
  display a progress bar, confirm the overwriting of existing files and confirm
  the unprotection of write/delete protected files
- New: GetAttribute() can also retrieve information about samples now. Attributes
  supported for samples are currently #ATTRTYPE, #ATTRDURATION and #ATTRPITCH
- New: Unpack() unpacks a table
- New: MatchPattern() returns TRUE if a string matches the specified pattern
- Change: Val() can convert binary values now; simply prefix them with a '%'
- New: As it does not make much sense to make InvertBrush() invert the mask and alpha
  channel information also, I have added two new commands which will do that:
  InvertMask() and InvertAlphaChannel()
- New: FloodFill() command allows you to flood a bordered area in the current output
  device with a fill color; alpha channel and mask flooding are fully supported
- Change: ReadDirectory() returns two values now: The first specifies the number of files
  in the directory, the second specifies the number of dirs in the directory
- New: Support for percentage arguments; you can specify percent values instead
  of absolute values with the following functions: SetLayerTint(), SetLayerTransparency(),
  ScaleBrush(), ScaleAnim(), ScaleBGPic(), ChangeDisplaySize(), TintBrush(), MixBrush(),
  SetAlphaIntensity(), SetVolume(), SetMasterVolume(), MixRGB() simply pass the percent
  value as a string, e.g. "50%"
- Change: Better error messages are displayed now if Hollywood cannot find
  a specified object; it will tell you the exact type and the id of the object it
  could not find
- New: StringRequest() allows you to ask the user for a string or number in an
  easy way; requires reqtools.library
- New: Hollywood's coordinate constants can be fine-tuned now, i.e. you can add
  or subtract values from them; e.g. DisplayBrush(1, #CENTER, #CENTER - 20) will
  display brush 1 slightly above the vertical center
- New: GetRealColor() returns the real representation color of a given color on
  the current screen; e.g. $FFFFFF becomes $F8FCF8 on a 16-bit screen as we have
  only 5 bits for red and blue and 6 bits for green; this command is useful in
  connection with ReadPixel(); read the doc; GetRealColor() was already added in
  version 1.5 as a private command, now it's public and documented
- Change: Rnd() generates 'better' random numbers now
- New: SplitStr() parts a string into pieces; you need to specify a separator
  token (e.g. "|"); SplitStr() returns a table with the pieces as well as the
  number of created pieces
- New: GetSamplePosition() allows you to determine the position (in milliseconds)
  of a currently playing sample; good for sync'ing gfx with sound; the second
  value returned specifies the loop counter of the sample
- Change: When calling one of the SelectXXX() functions, Hollywood will preserve
  the following settings now: cursor position, margins and clip region; they
  will be restored when you call EndSelect()
- Change: When displaying a transparent bgpic on AmigaOS3, Hollywood will
  install a clip region that matches the shape of the bgpic; so you can't
  display gfx on the transparent part of the window any longer => AmigaOS3
  pseudo-transparent windows behave the same way as the real transparent
  windows under MorphOS now [VOID]
- Fix: Optional argument of StrStr() was never documented; it specifies how
  many decimal places a float shall have and defaults to 2
- New: SetClipRegion() allows you to define a clip region for all graphics
  functions of Hollywood; you can use a rectangle clip region or even a custom
  shaped clip region by using the #SHAPE argument together with a brush whose
  mask will be used for the clip region then; if you use custom shaped clip
  regions, the drawing routines will be slower but the speed is still good
  (PPC supported clip routines)
- New: Arc() allows you to draw partial ellipses/circles; if layers are
  enabled, the command will add an #ARC layer; this command is useful if you
  want to draw pie charts etc.
- Change: DisplayTransitionFX() can no longer be used to display transparent
  bgpics and you can also not display a non-transparent bgpic if the current
  picture is transparent
- Change: Hollywood uses real transparent windows now on MorphOS; looks much
  better but is kind of slow
- New: ALPHACHANNEL prefix for the %BRUSH keyword can be used to import the
  alpha channel from a png image; with LoadBrush() you will have to use
  the optional argument number 4 to specify if you want to import alpha
  channel information; loading alpha channel from png pictures does currently
  only work with MorphOS because the OS3.9 picture.datatype does not support
  alpha channel; I still need to find a solution for that [ALPHACHANNEL prefix
  is VOID:use @BRUSH 1, "test.iff", {LoadAlpha = True} instead]
- New: Effects are now negated when using UndoFX() or HideLayerFX(); e.g.
  #REVEALLEFT becomes #REVEALRIGHT. Certain special effects like the
  zoom/stretch, roll & wallpaper effects use new custom reverse effects
  which look much better than the ones that were used before
- Change: #WALLPAPERx, #ROLLx & #PIXELZOOMx effects work with transparent
  objects now correctly too; looks great!
- New: CropBrush() allows you to crop a brush with ease; mask and alpha
  channel cropping fully supported
- Change: ShowLayerFX() can show all layers now (was restricted to brush
  and text object layers in v1.9)
- Fix: Effects from the #FLOW group did not work correctly with text objects
  (was only broken in 1.9; it worked in 1.5)
- New: MixRGB() can be used to mix two RGB colors together at a specified
  ratio
- Change: Multiple font styles can be set with a single call to SetFontStyle()
  by OR'ing them into the bitmask, e.g. SetFontStyle(#ITALIC|#BOLD)
- New: Anti-aliasing is back! Now fully implemented and compatible with all
  Hollywood functions (layers, effects etc.); Use the new #ANTIALIAS font
  style to activate it. Bitmap fonts can also be pseudo anti-aliased now
  but it is advised to use true type fonts for the real eye candy
- New: DeleteAlphaChannel() removes the alpha channel from a brush
- New: SetAlphaIntensity() allows you to set the intensity for rendering
  into a brush's alpha channel (0=100% transparency - 255=0% transparency)
- New: Introducing support for alpha channels! Use SelectAlphaChannel()
  to render into a brush's alpha channel! Hollywood uses highly optimized
  routines for drawing alpha channel images which should give you
  satisfactory results even on 68k
- New: SetRefreshMode() can be used to define the refresh mode during
  BeginRefresh()/EndRefresh(). Please read the documentation about it. [VOID]
- New: Introducing a new animation technique: BeginRefresh()/EndRefresh().
  All graphics calls that are executed after BeginRefresh() will not be
  drawn until EndRefresh() is called. The graphics will be cached and will
  be drawn by EndRefresh() without flickering. This technique can only be
  used with layers switched off! [VOID:use sprites]
- New: Added some functions to use arrays as lists: InsertItem(),
  RemoveItem() and ListItems()
- New: FilePos() returns a file's current cursor position
- New: ReadShort(), ReadInt(), ReadFloat(), WriteShort(), WriteInt(),
  WriteFloat() can be used to write numbers to a file
- Change: Break() and Continue() accept an optional argument now which
  you can use to break/continue loops in higher levels than the current
  one; optional argument must be specified in brackets (like Return()...)
- Change: While(), For() and the If() statement now have short forms:
  While <expr> Do <stat>, For <...> Do <stat> and If <expr> Then <stat>
  ElseIf <stat> ... Else <stat>; saves some typing :-) - Important note for
  the short if statement: All branches must be on a single line so that
  the compiler does not confuse them with a previous if statement!
- Change: If a function returns one or more values, they must be enclosed
  in brackets so that the compiler does not confuse them with following
  statements
- Change: SelectBGPic() can now be used to render into a background picture
  directly (just like SelectBrush() does); this only works when layers
  are switched off; with layers enabled SelectBGPic() just adds layers as
  you know it [VOID:removed]
- New: Added Cls() command which can be used to clear the screen very fast;
  some restrictions apply (no layer support etc.); optional argument can
  be used to specify a color
- New: Collision() command accepts the types #BRUSH and #LAYER now. So you
  can easily detect collisions between brushes and layers now. The
  collision detection is implemented pixel-exact with full respect to
  transparent areas!
- New: Added %INCLUDE keyword which allows you to include code from other
  script files in your main project [VOID:use @INCLUDE]
- New: #ATTRLAYERID allows you to find out the id of a named layer using
  GetAttribute()
- New: You can assign names to layers now using the command SetLayerName();
  this is more convenient than using layer numbers which are not constant;
  every command that works with layers will also accept strings now besides
  layer numbers
- New: Added Dim() and DimStr() for easy array creation & initialization;
  if used in a function, they create local arrays
- New: Added With ... EndWith statement for easy access to data members
  [VOID; not going to be supported; you can use metatables for that purpose
  (__index metamethod; also takes a table as argument)]
- New: SaveSnapshot() allows you to create snapshots of your scripts
  easily; you can make snapshots of your display, the host window and
  even of the whole desktop screen with this function
- New: SaveBrush() can save brushes to a file
- New: Added a function for easy detection of collisions: Collision();
  it currently supports only the type #BOX but there is more to come
- New: Added the popular "immediate if" statement IIf(). This is a very
  compact version of the if-statement. Please keep in mind that both true
  and false values are evaluated in every case - no matter if the condition
  is true or false: IIf(a <> 0, 5 / a, 0) --> this won't work for a:=0
  (division by zero error)
- Change: ShowLayer() accepts two optional arguments which can be used to
  re-position the layer
- New: Added %DISPLAYPOSITION keyword which can be used to set the position
  where the Hollywood display shall be opened on the screen (defaults to
  #CENTER/#CENTER) [VOID:use @DISPLAY {X=<pos>, Y=<pos>}]
- New: CopyAnim() can be used to copy a whole animation to a new anim
  object; useful e.g. in connection with ScaleAnim()
- New: CreateAnim() allows you to create animations from brush sources;
  very useful if you do not want to use IFF ANIMs because they only work with
  a correct animation.datatype (which MorphOS does not have currently)
- New: #NEXTFRAME type is now supported by AddMove(). This makes animation
  via DoMove() much easier because you do not have to do all the #BRUSH/#HIDEBRUSH
  stuff with many different brushes any more. Just use one anim layer and
  change its frames!
- Change: InsertLayer() can insert #ANIM layer types now too
- New: #ATTRNUMFRAMES allows you to find out how many frames the specified
  anim object has; #ATTRCURFRAME can be used to find out the frame which
  is currently displayed in the specified anim layer
- New: NextFrame() displays the next frame of the specified anim layer or
  jumps to a specific frame (if the optional argument is specified)
- New: Real anim layers are supported now! This means that you can display
  all frames of an animation in one single layer. Very useful!
- Change: Brush links are now fully dynamic; if the source object of a brush
  link changes, the linked brush will be updated also [VOID:brush link support
  was completely removed; emulation provided]
- Fix: Several fixes in connection with brush links
- Change: Extended the PolygonTest example script with some fill style
  buttons to demonstrate this new feature
- Fix: #USELAYERPOSITION was added but not documented in Hollywood 1.9
- New: Added two new fill styles for the graphics primitives draw functions:
  #FILLGRADIENT and #FILLTEXTURE allow you to draw gfx primitives filled with
  a gradient or textured
- New: Rewrote the whole image processing kernel of Hollywood. Expect DRAMATIC
  speed increases on classic Amigas (like 10 times faster...); modifying images
  is now done without any overhead; on WarpOS the PPC is used to compute the
  new images. Try the ImageLab example with Hollywood 2.0 and you'll see what
  I mean! Also, many of the transition fx which include zooming run more than
  twice as fast now...enjoy! It doesn't get any faster.
- Change: guigfx.library and render.library are not required by Hollywood any
  longer (because palette support is gone now)
- Change: Hollywood does not run on palette screenmodes any longer. This step
  was long overdue; palette screens are a thing of the past. Get over it :)
- Change: #BLEND fx can be used with BGPics now again (was already possible in
  v1.0 but not in v1.5 - v1.9)
- New: CreateGradientBGPic() accepts an optional argument now which specifies
  the rotation in degrees for the gradient; argument #2 specifies the gradient
  type now (currently defined is #LINEAR only); compatible with Hollywood 1.x
- Change: Data files declared in the keywords section will be loaded now
  after the script was compiled successfully; so if you want to check for
  syntax errors, you do not have to wait the whole time until the data is loaded
- Change: ReadPixel() returns only 0 or 1 if SelectMask() is in use (0 means
  pixel is transparent, 1 = non transparent)
- Change: Color parameter of Box(), Plot(), Circle(), Ellipse() and Polygon()
  is optional now because if SelectMask() is active, we do not need it
- New: SetMaskMode() can be used to choose the render mode for SelectMask();
  two arguments are possible: #MASKVISIBLE and #MASKINVISIBLE
- New: SelectMask() allows you to render into the mask of a brush; this makes
  nice custom transparency effects possible
- Change: RotateBrush() creates a mask automatically now for every brush you
  rotate; if the brush already has a mask, RotateBrush() will rotate it too;
  no need to call SetBrushTransparency() any longer after calling RotateBrush()
- Change: MixBrush() respects transparent area in the second brush now
- New: MoveDisplay() allows you to change the position of the display window
- Fix: Cursor position will be reset to 0:0 now when you display a new BGPIC
- New: Added some functions to manipulate memory directly (only for advanced
  users): AllocMem(), FreeMem(), Peek(), Poke(), FillMem(), CopyMem(), ReadMem(),
  WriteMem() and DumpMem(); but there are no pointers! These functions are
  designed to work with memory handles so they are safe in every case
- New: CRC32() calculates the CRC-32 checksum of a given file
- New: IsDirectory() checks if the given argument is a file or a directory
- New: Rename() command added to change the name of files or directories
- New: CopyFile() command allows you to copy single files or even whole
  directories (full recursion!); Comments, attributes and date stamps are
  copied also; patterns can also be specified
- New: DeleteFile() can also delete whole directories now; patterns can be
  specified and callback functions are supported also; read the documentation
- New: OpenFile() can now open a file also in read- or write-exclusive mode
- Fix: The #SCROLLxxx effects will add now a #BGPICPART layer instead
  of #BRUSH layer when using DisplayBGPicPartFX()
- Change: FreeBrush(), FreeAnim(), FreeTextObject() and FreeBGPic()
  will free all layers that refer to the object now also [VOID:layers will
  be substituted instead; reason:compatibility]
- Change: DisplayBGPicPartFX() accepts now destination x,y and layers
  arguments just like DisplayBGPicPart() does
- Fix: Layers that are not visible because their coordinates were out of
  the display could cause an error with some commands
- New: GetType() returns the type of the variable passed in
- Change: Hollywood's window is no longer a GZZ (gimme zero zero) window
- Change: InKeyStr() leaves only one #PRINT layer on the display instead
  of separate layers for all chars
- Change: WaitKeyDown() waits now until the key is up again
- Change: Print() and NPrint() accept any number of arguments now
- Change: SetLayerLight() is now called SetLayerTint() because light is
  a bit confusing; the old command still works for compatibility
- Change: FileRequest() accepts an optional mode argument now which allows
  you to open the requester in save or multiselect mode
- New: PathRequest() pops a requester which allows the user to select a
  path
- New: FullPath() combines filename and directory to a fully qualified path
- New: BinStr() converts a value to a string with 32 bits
- Change: CreateRainbowBGPic() is now called CreateGradientBGPic() because
  a gradient is not always a rainbow ;-) The old name can still be used
  but is considered obsolete now
- New: ScaleBGPic(), ScaleBrush(), ScaleAnim() and ChangeDisplaySize() accept
  the new constant #KEEPASPRAT now which calculates the missing size automatically
  according to the aspect ratio of the bgpic/brush/anim/display
- Fix: DisplayBrushPart() did not accept special coordinate constants
- Change: DebugPrint() superseded DebugVal() and DebugStr(); supports
  any number of arguments now
- New: CtrlCQuit() allows you to turn the control-c quit option on and
  off
- New: #HOLLYWOOD constant holds the Hollywood version string now
- Change: String and float values for constants are now possible too
- Change: Val() returns another argument now which tells you how
  many characters it converted
- New: Min() and Max() accept any number of arguments now
- New: Constant #PI
- New: Added math functions ASin(), ACos(), ATan(), ATan2(), Ceil(),
  Floor(), Exp(), Deg(), Rad(), BitTest(), BitSet(), BitClear(), BitXor(),
  BitComplement(), Sgn(), Limit(), LdExp(), FrExp()
- Change: SetVarType() is obsolete now; there are easier ways to work
  with arrays now
- New: Rewrote several integral parts of Hollywood for better performance
  and less memory consumption
- New: Colon between commands on one line is no longer necessary
- New: Constants can be defined after the %CODE keyword now using the
  identifier Const
- New: Local variables. Do not use them together with GOTO/GOSUB!
- New: Support for character constants using 'x' (up to 4 bytes)
- New: Hex numbers can be prefixed with 0x also now
- New: Support for long strings (strings split over multiple lines)
- New: Functions, multi-dimensional arrays & structures are possible now
- New: Continue() can be used to jump to the end of a loop
- New: Break() can be used to break loops and the Switch-Case statement
- New: Added new statements for controlling the program flow: Switch-Case-
  EndSwitch, Repeat-Until, Repeat-Forever, Block-EndBlock, For-In-Next
  (Generic For using iterator functions)
- New: Expression support. Operators: + (plus), - (minus), * (multiply),
  / (divide), \ (integer divide), % (integer modulo), << (left shift), >> (right shift),
  & (bit and), ~ (bit xor), | (bit or), AND (logical and), OR (logical or),
  NOT (logical not), ^ (power), .. (concatenate), - (negation), ~ (bit negation)
- New: Hollywood uses 64-bit variables now. This allows you to store really
  big numbers and floats!
- New: Added a fully-featured, state of the art programming language for
  Hollywood. The new language is based on the kernel of the light-weight
  application extension language Lua. The syntax and functionality however
  is in many ways different from Lua but the most powerful features like
  dynamically-typed scripts are kept of course. You will soon notice
  the power of this new language which allows you to create full-blown
  applications now with Hollywood. Please read the Hollywood documentation
  for an introduction to the new language. Compatibility with the Hollywood 1.x
  is almost fully guaranteed. Please read API-Changes.txt for more information.
  This is what you have been waiting for. Hollywood finally has a modern
  scripting language suitable for all purposes.
- Started work on Hollywood 2.0 (April 2004).

Version 1.93  (18-Mar-05)
- Change: Updated GUI
- Change: Updated Settings tool and documentation
- New: Added PPC-native AmigaOS4 version and cross-compiler so that you can
  create AmigaOS4 executables on each Hollywood platform
- Change: Slightly changed the Protracker implementation because of problems
  with AHI on OS4 (now using ptahiplay.library v2.0)
- Fix: Illegal memory access which caused a crash on OS4
- Fix: Redraw problems with transparent windows on OS4/MorphOS when moving
  them out of the screen
- Fix: Several AHI fixes/improvements
- Fix: #CLOSEWINDOW event was not activated upon startup (only in 1.9)
- Fix: When using a borderless window together with the SIZEABLE argument,
  the size gadget got lost after the first manual resize operation
- Fix: Chr() did not always work as expected
- Fix: #DIAGONAL did not always work because a variable initialization
  had been forgotten
- Fix: Width calculation was not correct for all font types
- Fix: TextOut() and CreateTextObject() sometimes created a broken
  text object when alignment was #RIGHT
- Fix: Sort() was broken

Version 1.92  (20-Aug-04)
- Change: Updated Hollywood documentation
- Change: Updated GUI
- Change: Updated Settings tool and documentation
- Fix: StrLen() was not documented in the German guide file
- Fix: #STAR wipe caused a crash on some Amithlon systems; uses a work-around
  now because I do not really know what caused the crash (reported by Don Cox)
- New: Added STAYACTIVE argument/tooltype which forces the window to stay
  always active. This is useful with a borderless window on an own screen.
  The user could accidentally deactivate the window without noticing it
  and then the window would not receive any more messages which could confuse
  the user
- New: Added FULLSCREEN argument/tooltype which turns on all the options you
  need for a nice, professional full screen display
- Fix: Loading an IFF picture (or something else) as a sample crashed Hollywood
  after displaying the error message (reported by Don Cox)
- New: In the Settings tool, you can specify the optional tooltype AMIGAOS3,
  MORPHOS and WARPOS. This allows you to include only ONE Settings tool which can
  be used to configure ALL of your executables for different platforms
- Change: GUI displays Scala scripts now too in the file requester (requested
  by Don Cox)
- Fix: Wait() does no longer eat up all your CPU power (reported by Anarka)
- Fix: Another SetBrushTransparency() bug when the screen is using BGRA32 pixels
  (reported by hooligan/dcs)
- Fix: CreateTextObject() leaked a few bytes per call (reported by Robin)
- Fix: When Hollywood cannot obtain its exclusive pen on RTG screens it
  will use a shared pen now (reported by Don Cox)
- New: Hollywood can be interrupted now by pressing CTRL-C
- Fix: Some error messages were too long to be displayed correctly
  (reported by Costel Mincea)
- Fix: Window contents of the GUI and the Settings tool were not always
  refreshed (reported by Jacek Piszczek)
- Fix: SetBrushTransparency() did not work correctly on graphics boards
  using BGRA32 pixel format (reported by Mahendra Tallur, Costel Mincea)
- Fix: Some commands did not wait for the blitter to be finished which
  could cause a broken display on native graphics.library systems and also
  on Picasso96 which still seems to use the blitter (!)

Version 1.9   (08-Apr-04)
- New: Added GetSongPosition() and GetPatternPosition()
- New: Added four new examples: BallsDemo (high-end), Circle Text,
  Polygon Test and Wavy Logo
- Change: Updated CreditsRoll, Da Cool Quiz, Object Transition FX,
  WinFileCopy, Fireworks, Puzzle, Rainbow Creator, Welcome, Transition FX
  examples for Hollywood 1.9
- New: Added catalog descriptions for developing your own catalogs.
  Hollywood.cd, Settings.cd and GUI.cd can be used to translate
  Hollywood into your language
- Change: Updated the Settings tool
- Change: Reworked the GUI a bit and added support for WarpOS in
  the GUI too (when compiling a script)
- Change: PlayAnimDisk() supports an additional argument now which
  specifies how many times the animation shall be played
- New: Italic, bold and underline styles are supported now also for
  color, truetype and intelli fonts
- New: A lot of new transition effects have made their way into
  Hollywood 1.9. Here's a list: #CLOCKWIPE, #STAR, #HSTRANGEPUSH,
  #VSTRANGEPUSH, #SLIDELEFT, #SLIDERIGHT, #SLIDETOP, #SLIDEBOTTOM,
  #SPIRAL, #SWISS, #QUADRECT, #HSPLIT, #VSPLIT, #UPNDOWN, #CARDTOP,
  #CARDBOTTOM, #SUN, #WATER1, #WATER2, #WATER3, #WATER4, #STRUDEL,
  #DISSOLVE, #PIXELZOOM1, #PIXELZOOM2, #ZOOMIN, #ZOOMOUT, #CRUSHLEFT,
  #CRUSHRIGHT, #CRUSHTOP, #CRUSHBOTTOM, #VFLIPCOIN, #VLOWFLIPCOIN,
  #HFLIPCOIN, #HLOWFLIPCOIN, #TURNDOWNTOP, #TURNDOWNBOTTOM, #TURNDOWNLEFT,
  #TURNDOWNRIGHT, #WALLPAPERLEFT, #ROLLLEFT, #TYPEWRITER (this is a text
  object only effect!); please note that the following effects are
  considered "high-end" and are therefore very slow on 68k: #WATER 1-4,
  #STRUDEL, #WALLPAPERLEFT; if you use #RANDOMEFFECT with the 68k version
  of Hollywood, the program will not choose any high-end effects
- New: Hollywood is now available in a separate version for WarpOS
  and it can also create executables for WarpOS now!
- New: Box() accepts an additional argument now that allows you to
  create a rectangle with rounded corners
- New: Polygon() allows you to draw polygons
- Change: Precalculation is no longer supported. Get a faster Amiga.
- Fix: Generated executables did not work from Workbench when they had
  a space in the filename
- Change: When using the screenmode requester, Hollywood will suggest
  a screenmode now that would fit
- New: If STARTCOLOR and ENDCOLOR are specified together with BACKFILL=PICTURE,
  you will get a gradient as the background with the picture on top
- New: PICTRANS argument allows you to give your picture a transparency
  setting (only applicable if BACKFILL=PICTURE)
- Fix: STARTCOLOR and ENDCOLOR were in the wrong order when using
  BACKFILL=RAINBOW
- Fix: MoveXXX() and the #SCROLLXXX effects were not always exact
- New: PICXPOS & PICYPOS arguments/tooltypes allow you to position the
  picture in the backfill window (only applicable if BACKFILL=PICTURE);
  special constants like #LEFT, #RIGHT... may be specified
- New: SCALEPICTURE argument/tooltype scales the picture to the dimensions
  of the backfill window (only applicable if BACKFILL=PICTURE)
- New: BESTFIT argument/tooltype will select the screenmode automatically
  for you (DEPTH may be specified too)
- New: HideLayerFX() allows you to hide layers with a transition
  effect
- New: Added BreakWhileMouseOn() which is useful in some cases
  (see documentation)
- Change: WhileMouseOn() did not really work as it was meant to
  be. This change could lead to an incompatibility with old
  scripts! Please read APIChanges.txt for more information
- Fix: Moving a box that was created with #FILLNONE and has a
  transparency assigned did not work correctly
- New: You can use Hollywood with FBlit now! If you have lots of
  fast memory but no graphics board, install FBlit with the
  AllocBitMap() patch activated and Hollywood will use your fast
  memory for all graphics data. Very useful. But never ever use FBlit
  if you have a graphics board!
- Fix: Hollywood could crash totally when running out of memory
  during the display setup. Sorry for that.
- Change: Improved the way of color handling on RTG systems
- New: Added commands Red(), Green(), Blue() and RGB() for easy
  access to RGB values
- Change: You can free the BGPIC that is currently displayed now
  with FreeBGPic(); Hollywood will install a temporary picture then
  which will only be visible if areas need to be redrawn
- Change: Optimized the DoMove() command for more speed. It requires
  more memory now but is possibly a lot faster by using a new technique
- Change: Box() command improved + speed-up
- Change: Wait() accepts an optional argument now which specifies
  the wait precision; so you can have real precise waits now (by
  using #MILLISECONDS as the optional argument)
- New: SetPanning() allows you to define where samples are played
  (ranges from 0 to 255; left speaker only = 0, both speakers = 128,
  right speaker only = 255)
- New: ShowLayerFX() can show layers with a transition effect
  (currently only works with BRUSH and TEXTOBJECT layer types)
- New: InsertLayer() supports type #TEXTOBJECT now and can insert
  hidden layers
- Fix: InsertLayer() was totally broken in v1.5
- Fix: Enforcer hit when calling WhileMouseOn() with no active
  button
- Change: Roll transition effects work now with objects also
- Fix: StopTimer() works now (reported by Telemar Rosenberger)
- New: Added CheckEvent() as a much more flexible replacement for
  the removed EventHandler() functions
- Change: As announced in previous versions: EnableEventHandler() and
  DisableEventHandler() are gone now
- Change: Rewrote the whole event handler part; most events are now
  cached for a specified time. Use SetEventTimeOut() to define it.
- Change: New technique for redrawing portions of the old background
  picture when using DisplayTransitionFX(); avoids some problems
- Change: #HOPENGATE, #HCLOSEGATE, #VOPENGATE & #VCLOSEGATE effects
  do not work with objects any longer; they did not really fit to
  objects
- New: German catalog for Hollywood
- New: Added German guide! Big thanks to Alexander Pfau for doing this
  really huge work!
- New: Finally added locale.library support! Experience Hollywood in
  your language now!
- Fix: Program crash when trying to display a transparent picture with
  a transition effect (when switching from a non-transparent picture)
- Fix: Running multiple versions of Hollywood did not work in full
  screen mode
- Fix: When compiling a script in the GUI, the GUI did always say "success"
  even if an error occurred (reported by Jean-Yves Auger)
- Change: GUI can be controlled now by keyboard
- Fix: GUI works now also on 640x480 screens
- New: MoveLayer() allows you to smoothly scroll layers across the
  display; the function works exactly like the other MoveXXX() functions
- New: The MoveXXX() function group accepts a new optional argument for
  some special effect like bouncing, damped, sine, curve, smooth out etc.
- New: Added #SCROLLNORTHEAST, #SCROLLSOUTHEAST, #SCROLLSOUTHWEST and
  #SCROLLNORTHWEST transition effects
- Change: Reimplemented the #SCROLLXXX transition effects group; it allows
  now the scrolling of brushes and other objects too and it can also be
  undone properly (runs the effect in reverse mode!)
- Change: Rewrote some transition effects for more speed on 68k
- Fix: Margin settings were not adapted after a display resize (reported
  by Jrg Renkert)
- Fix: Dragbar and size gadget could disappear after a display resize
  (reported by Jrg Renkert)
- Fix: Hollywood works on DraCo now (thanks to Michael Burkhardt)
- Change: lowlevel.library is no longer opened at the start; it will only
  be loaded when joystick input is required
- Change: Rewrote some input handling code to decrease CPU usage in idle
  mode
- Fix: GUI no longer eats up all your chip memory
- Fix: ptahiplay.library could not be flushed from memory in version 1.5
- Fix: Most of the sample control functions were broken under certain
  conditions (reported by Telemar Rosenberger)
- Change: MakeDirectory() will scan the whole path now and create all
  directories that do not exist
- Fix: Confusing transition effect names in the #RECTBACKXXX group
- Fix: Removed useless code which was only required in Hollywood 1.0 but
  I forgot to remove it in 1.5 and it slowed down color font loading
- Fix: Special event labels like ACTIVEWINDOW, INACTIVEWINDOW,
  ONBUTTONCLICKALL, ... did not work in compiled scripts (reported
  by Robin Hueskes and Telemar Rosenberger)

Version 1.5   (19-Jun-03)
- New: Added free settings tool and the GUI uses MUI now and has some
  extended features
- New: Added new examples: Fireworks, WBFadeOut, WobbleText, TextZoom,
  Vectorballs, SinusScroller, Blanker, Lens, ImageLab, Amiquarium; updated
  all the old ones to work with Hollywood 1.5
- Change: Hollywood will switch now automatically to BORDERLESS mode if
  the script cannot be displayed just because of the window borders size
- Change: identify.library is no longer required
- Change: Removed GetSystemInfo() as it did no longer fit in the concept
- Change: MorphOS compiled scripts use now a PPC-native startup code
  instead of 68k code
- New: EXETYPE argument/tooltype lets you specify which executable type the
  compiler shall output; currently supported: CLASSIC and MORPHOS
- New: %DISPLAYDESKTOP keyword starts with the desktop (Workbench) as the
  initial BGPic
- New: GetAttribute() recognizes type #LAYER now with attributes #ATTRTYPE,
  #ATTRWIDTH, #ATTRHEIGHT, #ATTRVISIBLE, #ATTRXPOS & #ATTRYPOS
- Fix: Some arrays were not imported correctly when using a compiled
  script (reported by Wil Haslup, Jrg Renkert)
- Change: MoveXXX() rewritten; about 50% faster now
- New: Added some additional arguments/tooltypes: NOSOUND globally disables
  all sound routines, PRECALCULATION turns on precalculation for cpu intensive
  effects and FIXED opens Hollywood's window as not movable
- New: Introducing support for Intellifonts!
- New: 16-bit samples are supported now through sound.datatype v41 by Stephan
  Rupprecht (optional; if you only use 8-bit samples you can keep the old one!)
- New: RndF() returns a random float between 0 and 1 just like in many other
  languages
- New: MakeDirectory() creates new directories
- New: EscapeQuit() works the same way like LeftMouseQuit() but Hollywood will
  quit when the user presses ESCape at any time
- New: ScaleBGPic() can scale your background pictures
- New: Added various operations for brushes: ReplaceColors(), InvertBrush(),
  RotateBrush(), BrushToGray(), FlipBrush(), MixBrush(), TintBrush()
- New: SetPointer() can replace the default mouse pointer with your own
  one (requested by Telemar Rosenberger)
- New: SetLayerTransparency() and SetLayerLight() allow you to change the
  way a layer is displayed (this is very slow because heavy calculations
  are necessary)
- Change: Removed #CROSSFADEPRECALC, #BLENDPRECALC & #FADEPRECALC. Precalculation
  should be specified by using EnablePrecalculation()
- Change: SetPitch() and SetVolume() work also now when the sample is not
  playing
- Change: Documentation was updated
- New: GetBrushLink() supports #BGPIC and #TEXTOBJECT now
- Change: GetTimer() supports now an additional argument which specifies if
  you want the time in seconds or milli-seconds
- New: AddMove() supports now #UNDO and #REMOVELAYER
- New: Master volume control implemented through the commands GetMasterVolume()
  and SetMasterVolume() and the argument MASTERVOLUME
- New: InKeyStr() allows you to read full strings, numbers etc. from the
  keyboard (requested by Christoph Gutjahr)
- New: Improved keyboard support: WhileKeyDown(), WaitKeyDown(), IsKeyDown()
- New: AddMove() supports now new types: #LAYER, #HIDELAYER, #HIDEBRUSH
  and #INSERTBRUSH
- New: RemoveLayer(), SwapLayers(), ShowLayer(), HideLayer(), FreeLayers()
  and InsertLayer() implemented for the ultimate layer control
- New: Attribute #ATTRLAYERS returns number of layers for a specified BGPic
  or for the display
- New: Undo() accepts an additional boolean for silent undo
- New: You can declare your own constants now by using the keyword %CONSTANT
- New: Constants for 16 basic colors: #BLACK, #MAROON, #GREEN, #OLIVE, #NAVY,
  #PURPLE, #TEAL, #GRAY, #SILVER, #RED, #LIME, #YELLOW, #BLUE, #FUCHSIA,
  #AQUA, #WHITE
- New: GetBrushLink() can get links to other brushes also
- New: Keyword %DISPLAYCOLOR allows you to specify a background color when
  using a blank display
- New: HexStr() converts a value to a hex string
- New: Even more new math functions: Abs(), Min(), Max(), Mod(), Shl(), Shr(),
  Pow(), Sqrt(), Round(), Int(), Frac(), Log(), Ld(), Ln(), Rt()...enjoy!
- Change: Undo system is now fully integrated with layers; you can enable
  and disable the whole system by just calling EnableLayers() / DisableLayers()
- Change: Constants must be accessed now by using the '#' prefix; I'm sorry
  but this change was absolutely necessary. I wish I would have implemented
  it this way right from the start but I didn't. Therefore you will have
  to adapt your scripts now.
- New: Hollywood will load now MS-DOS formatted scripts also (with carriage
  return + linefeed)
- New: ClearEvents() kills all defined events
- New: Correct support of loop frames for Anim5 animations and Deluxe Paint
  anim brushes
- New: TextHeight() returns height of a string rendered with the currently
  selected font
- Fix: Big String array bug fixes which caused a lot of trouble (reported
  by Christoph Gutjahr, Andreas Laaser, Marco Reuters)
- New: GetAttribute() can return the transparent color of objects now
  by using #ATTRTRANSPARENTCOLOR. And it can also return the currently
  displayed BGPic by using GetAttribute(#DISPLAY, 0, #ATTRBGPIC)
- New: You can use the events ONBUTTONCLICKALL, ONBUTTONRIGHTCLICKALL,
  ONBUTTONOVERALL and ONKEYDOWNALL to query global input through these
  few labels; the id of the event can be retrieved by calling GetEventCode()
- Change: Reprogrammed event handler; more flexible now and it can also disable
  events like SIZEWINDOW, CLOSEWINDOW...
- New: You can also query the Joystick state by using JoyDir() and JoyFire()
- New: Introducing Joystick support: Use labels ONJOYUP[x], ONJOYUPRIGHT[x],
  ONJOYRIGHT[x], ONJOYDOWNRIGHT[x], ONJOYDOWN[x], ONJOYDOWNLEFT[x], ONJOYLEFT[x],
  ONJOYUPLEFT[x], ONJOYFIRE[x] to catch Joystick input. [x] is the port
  number (normally you will want to use 1 which is the game port)
- New: You can specify one of the following constants for transition effect
  speed: #SLOWSPEED, #NORMALSPEED, #FASTSPEED. Hollywood will choose the
  correct speed setting then by itself
- New: A lot of cool new transition effects: #RECTCENTER, #RECTNORTH, #RECTNORTHEAST,
  #RECTEAST, #RECTSOUTHEAST, #RECTSOUTH, #RECTSOUTHWEST, #RECTWEST, #RECTNORTHWEST,
  #SCROLLLEFT, #SCROLLRIGHT, #SCROLLTOP, #SCROLLBOTTOM, #STRETCHLEFT, #STRETCHRIGHT,
  #STRETCHTOP, #STRETCHBOTTOM, #HSTRETCHCENTER, #VSTRETCHCENTER, #ZOOMCENTER, #ZOOMNORTH,
  #ZOOMNORTHEAST, #ZOOMEAST, #ZOOMSOUTHEAST, #ZOOMSOUTH, #ZOOMSOUTHWEST, #ZOOMWEST,
  #ZOOMNORTHWEST, #HFLOWTOP, #HFLOWBOTTOM, #VFLOWLEFT, #VFLOWRIGHT, #HOPENGATE, #HCLOSEGATE,
  #VOPENGATE, #VCLOSEGATE, #PUSHLEFT, #PUSHRIGHT, #PUSHTOP, #PUSHBOTTOM, #PUZZLE,
  #DIAGONAL, #ROLLTOP, #WALLPAPERTOP, #RECTBACKCENTER, #RECTBACKNORTH, #RECTBACKNORTHEAST,
  #RECTBACKEAST, #RECTBACKSOUTHEAST, #RECTBACKSOUTH, #RECTBACKSOUTHWEST, #RECTBACKWEST,
  #RECTBACKNORTHWEST
- New: Introducing Hollywood moves: Use AddMove(), DoMove(), ClearMove()
  to move as many objects as you want in one drawing operation (requires
  layers)
- New: ReadPixel() reads a single pixel from the current render device
- Change: Backfill code is more flexible now
- New: STARTCOLOR can also be used now together with BACKFILL=PICTURE
- New: BRUSHFILE can be specified instead of BRUSH in argument list
- New: BACKFILL can now be used also on Workbench
- Change: Better algorithm for CreateRainbowBGPic()
- Fix: Box() drawed the box too large (+1 width, +1 height)
- New: EnablePrecalculation() + DisablePrecalculation() - global control
  over precalculation
- Fix: Crash with variables that used long names
- New: LoadAnimFrame() and PlayAnimDisk() for the ultimate anim control
  PlayAnimDisk() graphics can be undone by using #ANIMDISK object
- New: SetBrushTransparency() and CopyBrush()
- Change: DisplayBGPicPart() has more functions now
- Fix: WriteLine(), WriteChr() and WriteString() could cause problems
- New: SetFillStyle() allows you to specify a filling style for the
  drawing functions (Ellipse(), Circle(), Box())
- New: Protracker modules are also played now using AHI; this allows you
  to play samples and modules at the same time using full channel mixing!
  Support for P61, THX & MED modules has been dropped; might be re-implemented
  later using a plugin
- New: AHI is now used for playing samples; syntax of PlaySample()
  has changed, check the documentation
- New: Frames per second are limited now to 30 to keep the timing
  upright on PPC machines; you can modify this limit by using the
  SetFPSLimit() command. I never thought that such a limit would be
  needed but Hollywood on the Pegasos is really too fast :-)
- Change: Removed Rainboot emulation; will be re-implemented later using
  a plugin
- Change: Removed IsAnimPlaying() and WaitAnimEnd(); they are no longer
  necessary because PlayAnim() runs synchronously now
- Change: PlayAnim() runs synchronously now; this had to be changed because
  the old PlayAnim() from Hollywood 1.0 did not really fit into the concept
- New: Introducing off-screen rendering with SelectBGPic() and SelectBrush();
  some restrictions apply; read the documentation
- New: GetBrushLink() command allows easy access to single anim frames
  by linking them to a brush id; please read the documentation about
  brush links
- New: #PRINT, #BGPICPART, #BRUSHPART, #BOX, #CIRCLE, #ELLIPSE, #PLOT, #ANIM
  support for Undo() and UndoFX()
- Change: Reworked Print(), TextOut() and CreateTextObject(). They are slower
  now but fully compatible with layers and undo and just everything!!
- Fix: Shift key no longer raises false events (reported by Andreas Laaser)
- New: Create blank gfx objects of any size with CreateBrush() and CreateBGPic()
- New: Right mouse support - IsRightMouse(), WaitRightMouse(), WhileRightMouseDown()
  and ONBUTTONRIGHTCLICK (requested by Christoph Gutjahr)
- Change: Improved float support
- New: MouseX() and MouseY() return the current mouse position (requested
  by several users)
- New: More math functions - Sin(), Cos(), Tan() and Wrap()
- New: PUBSCREEN argument which allows Hollywood to appear on any public
  screen (requested by Andreas Laaser)
- New: Layers support! Call EnableLayers() to install it (recommended)
- Change: Improved the handling of transparent windows
- Change: Removed ClearScreen() command; did no longer fit in the concept
- Fix: MidStr() started at character 1 and not at 0
- Change: Faster memory allocation for large scripts
- New: Undo() & UndoFX() allow user to specify an undo-level
- New: CreateTextObject() accepts now an optional argument which specifies
  the text alignment for new lines
- Fix: "Line 1004" bug which caused a guru at Hollywood's termination
- Fix: Bug in ResetTabs()

Version 1.0   (04-Nov-02)
- First Release

