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 Brämer) - 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 Jörg 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 Brämer) - 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 Jörg 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 Jörg 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 Seppänen) - 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 Rüdiger 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 Bézier 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 Bézier 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 Jörg 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 Rüdiger 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 Jörg Renkert) - Fix [Amiga]: Requester functions didn't open on the front screen in case the current display was hidden (reported by Jörg 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 Peräaho) - 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 Seppänen) - 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 Peräaho) - 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 Peräaho) - Fix [MacOS]: Intel version didn't work on Tiger (reported by Janne Peräaho) - 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 Peräaho) - 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 Peräaho) - 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 Jörg Renkert) - Fix: Dragbar and size gadget could disappear after a display resize (reported by Jörg 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, Jörg 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