The settings of the menu engine that the application compiles into the JAR. Its sub-page is Advanced. To understand how these settings work, we recommend enabling the Save generated script option.
Main mosaic prefix - lets you specify the prefix of the mosaic files, which are numbered from 1 (the default "m" gives m1.png, m2.png and so on).
Load mosaic prefix - lets you specify the prefix of the loading mosaic files, followed by the index of the JAR (the default "load" gives load0.png for the first JAR).
Split mosaic into separate files memory limit - if you use "Split into separate files" for the Mosaic, more than one image file can be loaded at the same time. To avoid exceeding the memory limit, the application limits the size of each file. 50% (the default) means half of the memory limit of the profile per file. Do not change this value unless you know what you are doing.
Title visibility - lets you specify the visibility of the title(s) in the disc index: "Search permitted, visible", "Search prohibited, visible" or "Search prohibited, invisible" (the default). Both "Search prohibited" options also mask the Title Search user operation, so the player ignores the numeric title selection while the title is running.
Show menu after video starts - uses the media time to check that the video has started. Normally a menu is shown as soon as the player reports that its playlist has started, and on some players this comes before the first frame is on the screen. With this option the menu is shown only once the media time of the menu playlist has started to run. This is checked on every command queue tick; if the time does not start within 48 ticks, the menu is shown anyway. It has no effect in Simulate.
Action Every Second - lets you specify how often the Action Every Second is executed: every second (the default), every 1/2 second or every 1/4 second. All the times counted in these ticks change with it, for example "Numeric select scenes seconds" below.
Numeric select scenes seconds - the delay in seconds after which "Numeric select scenes" performs the jump to the chapter if no further buttons are pressed (def: 2).
Command queue timer, frames - lets you specify how often, in animation frames, the application checks the command queue (the commands coming from the player: the start and the end of a playlist, a chapter reached, a Top Menu call). The default is 6. The same timer drives the Top Menu call check, the asynchronous title switch, the "Show menu after video starts" check and the replay of deferred keys (one key per tick), so a larger value also makes those react more slowly.
Allow defer keys - remembers the keys pressed while the show is in a step that does not react to the remote control and applies them as soon as a step that does react to it is up. Normally a menu that is animating in ignores the remote control completely, so a viewer who already knows where to go has to wait for the animation to end before the first press counts. With this option the animation still does not react to the presses - nothing moves while it runs - but up to 32 of them are remembered and replayed the moment the menu is ready. The presses are also replayed when the movie screen comes up, and they are discarded if the disc switches the title, if a Top Menu call comes in, or if nothing has used them for about five seconds.
No (the default) - the keys pressed while the menu cannot react to them are lost.
During animations - the keys are remembered while an animation is running: the menu enter animations, the button animations and the animation that closes a popup menu. The short step the show passes through while the menu itself is being set up is included as well, so a press is not lost in the gap between the end of the animation and the menu becoming ready.
During animations and transitions - the keys are additionally remembered in the steps that carry no animation but still ignore the remote control: the start of a movie, the first run of a menu, the pause after an activated button and the pre-cache before the end of a movie. Choose this if a press should survive the whole way from one menu to the next and not only the animation itself.
Animation engine FPS - sets the frame rate for the animation engine (def: 23.976). We recommend using the frame rate of the main movie/menu. All the values given in frames (animations, the Activated state delay, the command queue timer) are counted in these frames. The simulation and the animation preview in the designer use the same frame rate.
Reset clipping after clipping animation to left, top, width, height (on by default). Clipping animation is performed by setting the clipping effect for each state of the object. This means that once the animation has ended, the object still has a clipping effect applied to it. The clipping effect cannot be removed, but it can be reset to a predefined state. If all the objects used in the clipping animation are inside the screen, you can leave these fields at their default values (0, 0 → 1920, 1080). If your objects are outside the screen, however, you have to specify values that cover them. For example, suppose the leftmost object is at position -400 and the rightmost object is at position 2000 and is 300 pixels wide. In this case you have to specify -400 in the left field and 2700 (2000 + 300 + 400) in the width field.
These options remove duplicates and unused parts from the GRIN script (menu.grin) and from the Java code that the application generates for the menus. They never change your project, only what is compiled into the JAR. A smaller menu.grin uses less of the player's memory, and some players cannot cope with a large one (the PlayStation 3 halts if it exceeds 2.33 MB, see How to avoid problems).
Most of the options merge or remove items of the generated script, so some features, groups and handlers end up under a different name or do not exist at all. This only matters for your own Java code in the actions if it refers to these items by name (see the naming rules). The descriptions below say which names are affected. The examples use the full names; "Minimize internal names" shortens them further. To see exactly what an option changes, enable Save generated script and compare the scripts compiled with and without it.
Optimize objects (on by default) - a state that is identical to a state of another menu is not compiled again. The menu uses the feature that was already compiled for the other menu.
Only image states take part: images, and texts and boxes rendered to an image. A state takes part only if it has no effects (no scaling, fading, transparency, clipping or move container), is not linked to a button state and has no linked objects of its own. A state with the Global effect takes part in any case.
Two states are identical if they are drawn at the same position, their image files have the same content and their effects are the same. The content is compared by a checksum, so two copies of a picture under different file names count as identical. On an Ultra HD disc, a state of a menu that is converted to HDR never matches a state of a menu that is not.
A state is matched only with the states of other menus, so two identical objects in the same menu both get their own features. A state is also not matched with a feature that the menu already uses for another of its objects.
The image itself is always stored only once in the mosaic, with or without this option. The option saves the GRIN features of the state (the image and the feature that draws it), not image memory.
The Optimization property of a menu or popup switches this option off for that menu: its states always get their own features. Other menus can still use the features of this menu.
Global text objects that are not rendered to an image are shared between the menus by a rule of their own (see Text); this option does not affect them.
Side effects:
- a merged state has no feature under its own name. For example, the popup PM_scenes may use F:MM_main.background instead of F:PM_scenes.background. The application updates its own references to the state, but your own code that refers to F:PM_scenes.background does not find it;
- disable this option (or the Optimization property of the menu) if you change the order of the objects between menus.
Optimize anim-objects (on by default) - an animated state (an .anim file) that uses the same animation file at the same position as a state compiled before it uses the image sequence of that state.
Only the name of the .anim file and the position are compared, nothing else - not even the effects. Unlike "Optimize objects", this also applies within one menu, and the Optimization property of the menu does not switch it off.
A merged state gets no features of its own: neither its image sequence nor its effects (scaling, fading, clipping, move container) are compiled, and it is drawn exactly like the first state, with the effects of the first state. The only exception is a state with linked objects - it shares just the image sequence, and everything else is compiled for it.
The frames of an animation are stored only once in the mosaic, with or without this option.
Side effects:
- if two objects use the same animation at the same position but with different effects, one of them silently gets the effects of the other. To keep them apart, use a copy of the .anim file under another name for one of them - the frames are still stored only once;
- both states are one and the same image sequence, so wherever both are visible at the same time, they show the same frame;
- a merged state has no feature under its own name, so your own code that refers to it does not find it;
- disable this option if you change the order of the objects between menus or if the anim objects misbehave.
Optimize RC Handlers (off by default) - a menu whose handler for a remote control key is identical to a handler compiled before uses that handler instead of getting its own.
Every menu and popup gets one handler for each remote control key it reacts to: the keys that have an action in the menu, and the other keys that the Key Interest Table of the JAR passes to the application. A handler is named after the menu and the key, for example H:MM_main.Listener.Red.
With this option, the complete generated code of each handler (the key and the whole action) is compared with the handlers compiled before it. If an identical one exists, the handler is not written, and the menu lists the existing handler instead. The code has to match character for character, so an action that depends on its menu (for example one that returns to it) is never merged, and the disc behaves the same as without the option. The number keys of a popup with Numeric select scenes are never merged.
The saving is largest in projects with many menus that handle the same keys in the same way - for example, the keys of the Key Interest Table that have no action of their own get the same code in every menu.
Side effect: a merged handler does not exist under the name of its menu, so your own code that refers to it (for example H:PM_scenes.Listener.Red) does not find it.
Optimize commands (off by default) - removes duplicates from the Java code that is generated for the menus.
The GRIN compiler turns every piece of Java code in the script into a separate method of one Java class (XletShowCommands) and calls these methods by their numbers. The same code is often repeated many times, for example the same action on several buttons, keys or menus. After the GRIN compiler has run, the application compares the methods, keeps one method for each distinct piece of code, makes all the calls use it and deletes the copies.
This makes the Java class, and so the JAR, smaller; menu.grin itself does not change. Methods are merged only if their code is identical, so the behavior of the disc does not change.
Side effect: every method is compared with every other one, so in a large project this step can slow down the compilation noticeably.
Remove unused groups (on by default) - deletes the groups that the generated script never uses.
The application prepares several groups for every menu in advance, whether they are needed or not - for example the groups that an animation of all objects or of an animation group would play, and, for the draw methods in which one state replaces another, a group for each button. Each time the script uses a group, the application marks it as used. Once the whole script has been generated, every group that has never been marked is deleted.
Only groups are deleted - never images, animations or other features, and never a group that the script uses.
Side effect: a group that only your own code refers to by name, for example F:MM_main.animall, is deleted as well, and your code does not find it. Disable this option in this case.
Remove empty groups (off by default) - removes the groups that contain no objects and replaces the groups that contain a single object with that object.
Depending on its draw method, every menu gets groups of the objects that are drawn below, between and above the buttons (F:MM_main.obj_btm, F:MM_main.obj_mid, F:MM_main.obj_top), and a group for each of its animation groups (F:MM_main.animgroup1 and so on). With this option:
- an empty group of objects is not written at all, and the menu leaves it out;
- a group with a single object is not written, and the menu and its animations use that object directly;
- an empty animation group is kept, because the animations refer to it - for animation groups, only the single-object case applies.
Unlike "Remove unused groups", this option removes groups that the script does use.
Side effect: the removed groups do not exist in the compiled script, so your own code that refers to them, for example F:MM_main.obj_top, does not find them. For a group with a single object, use the name of the object instead.
Minimize internal names - replaces internal names with short (1-2 letters) versions. Safe - replaces only internal names, which should not affect the scripts. All - replaces all names, including those used inside scripts (such as 'animate', 'show_menu', 'Handler', etc.).