Die Geschichte ist nur auf Englisch verfügbar.
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