Changelog for UrqW
(Changes to the game catalog is not recorded in this document.)
Version 1.1 (in development)
- URQL interpreter:
- Added: UTF-8 encoding support for games and plugins.
- Added: Ability to add a drop-down menu with a list of actions to links in the text and hide individual menu items depending on the values ??of special variables with the
hide_ prefix.
- Added: Ability to execute JavaScript code from URQL code and retrieve its result using the javascript system variable.
- Added: Exponentiation operator
^ (right-associative).
- Added: Compound assignment operators, such as
+=, -=, *= and /=.
- Added: System variables:
- date - get the current date (only when urq_mode specific rules are absent).
- file_content - get the contents of a file from a game package as text by its internal path.
- file_url - get the relative URL of a file from a game package by its internal path.
- image_caption - set or get the visible caption for an image.
- instr_leave_spc - set or get the space handling mode for the instr operator.
- last_btn_caption - get the name of the last activated choice button or link in the text.
- location - get the name of the current location, regardless of the method of transition to this location (only for compatibility mode with akURQ).
- quest_path - always has a value of an empty string (only for compatibility mode with akURQ).
- time - get the current time.
- urq_inv - get the number of items in the inventory.
- urq_type - always has a value 1 (only for compatibility mode with akURQ).
- urqw_game_ifid - get the game’s IFID (or an empty string if it lacks one).
- urqw_game_lang - set or get the game content language.
- urqw_title - set or get the UrqW page title.
- urqw_version - get the UrqW version.
- Added: The clst operator to clear the screen of text.
- Added: The clsl operator to clear links from the text.
- Added: The varkill operator (a direct counterpart of the perkill operator).
- Added: Ability to set arbitrary names for inventory items, for inventory item usage options, and for drop-down menu items of links in text instead of names based on variable and labels names (special variables with the
display_ prefix are used).
- Added: Support for custom alternative text descriptions for images added using either the image system variable or the image operator.
- Added: Ignore whitespace characters at the beginning of any lines.
- Added: Automatic normalization of internal file paths: reverse soliduses (backslashes are replaced with soliduses (slashes), and all soliduses at the beginning of the path are removed.
- Added: more reliable loading of interpreted game files in Windows-1251 encoding in case of large data volumes.
- Added: Compatibility mode with AkURQ.
- Added: Automatic HTML escaping (enabled by default in compatibility modes with RipURQ and URQ_DOS).
- Changed: The clsb operator now only removes buttons, but does not clear text from links.
- Changed: Any non-zero number and non-empty string in a boolean context (e.g., in the condition of the
if operator) is now interpreted as true.
- Changed: The values of the system variables
hide_* and instr_leave_spc are now implicitly converted to a boolean value during evaluation, according to URQL standard coercion rules.
- Changed: Initializing a variable using the
instr operator without assigning a value now results in the variable being initialized with a value of an empty string rather than being ignored.
- Changed: When assigning a string value to a variable using the instr operator, leading and trailing whitespace characters in the value string are now removed. You can restore the previous behavior of preserving spaces using the instr_leave_spc system variable.
- Fixed: Incorrect handling of unary operators
- and + to the left of variables and parentheses.
- Fixed: If an inventory item has an underscore character in its name (e.g.,
inventory_item), it has a use label without specifying an action (e.g., use_inventory_item), and the hide action variable has a positive value (e.g., hide_use_inventory_item = 1), then clicking on the item’s link in the inventory panel will still trigger the action.
- Fixed: If there is a space before the equal sign when assigning a value to the image or the music system variables, the construct is mistakenly interpreted as executing the operators of the same name with an incorrect file path.
- Fixed: The not operator immediately after the left parenthesis is processed incorrectly.
- Fixed: Incorrect processing of the tokens_delim variable.
- Fixed: Incorrect processing of the goto operator in compatibility mode with URQ_DOS.
- Game player:
- Added: Customizable internationalization support and interface translations into English, Armenian, Belarusian, Esperanto, Interslavic (Latin), Russian, Spanish, and Ukrainian.
- Added: Differentiated language markup corresponding to the interface language and the game content language.
- Added: Game encoding configuration when opening from the main page.
- Added: Ability to rename and clear save slots via the additional actions menu, as well as download and upload saves as files.
- Added: Customizable game loading with automatic progress saving between sessions.
- Added: Customizable warning about possible errors when loading a save for a different version of the game.
- Added: Date field in the game catalog.
- Added: Ability to filter games in the catalog by language and title, and sort by date and alphabetically.
- Added: Menu with additional information and settings in the toolbar.
- Added: RSS feed for new games in the catalog.
- Added: Games added to the catalog have separate URLs for identification and indexing by search engines.
- Added: Tag with canonical URL (separate URLs for the main page with a game catalog and for each game launched by identifier).
- Added: Sitemap for search engines.
- Added: Ability to set a game to load on any opening of index.html or index-dev.html.
- Added: New keys of a game object in the games.json file:
- date - to specify the game’s first publication date.
- lang - to specify one or more game languages.
- Added: Ability to set player settings using GET parameters:
- Identifier of a game to launch - id (value: identifier).
- Interface language - lang (value: localization code).
- URQ mode - mode (value: “urqw”, “ripurq”, “dosurq” or “akurq”).
- Game encoding - encoding (value: “UTF-8” or “CP1251”).
- URL for game opening - url (value: URL string).
- Display of the game debugging section in the menu - debug with value “1”.
- Added: Support for the manifest.json file in the game package, which is used to define player parameters and game metadata, as well as initial values for some system variables.
- Added: Support for the iFiction record from the Treaty of Babel in the game package, which is used to store extended game metadata in a unified format.
- Added: Automatic focusing of controls when working with dialog boxes (menu, save and load game).
- Added: Volume level setting for game sounds.
- Added: Assigning an empty string value to the music variable stops the audio file from playing in a loop.
- Added: The music and game sounds that are playing are remembered when the game is saved, and they resume from the same point when loading from the save.
- Added: Customizable automatic focusing the first control on the game screen, as well as inscription about waiting for pressing any key and game over notification.
- Added: Ability to configure a request to confirm page closure.
- Added: Disabled hotkeys for activating choice buttons, quick actions, and cluster navigation through interface areas (see help in menu).
- Added: Numbering of choice buttons when hotkeys are enabled.
- Added: Ability to collapse and expand sections on the main page.
- Added: Display detailed information about UrqW on the main page.
- Added: Display of UrqW version in the player interface.
- Added: Display information about unsupported game format and the process of unpacking the uploaded game.
- Added: Titles for save and load game dialog boxes.
- Added: Support for opening games in .qs1, .qs2 and .qsz formats.
- Changed: Inventory item usage options are now displayed when the item receives system focus, not just when the mouse is hovering over it.
- Changed: Inventory item usage options generated from use labels names are now displayed with spaces instead of underscores.
- Changed: When the game over through the quit operator, links and buttons are now deleted instead of just stopping response to user actions.
- Changed: When launching a game by identifier, preference is now given to the game identifier from the id get parameter (support for launching a game by fragment identifier (hash) is retained, but only if the id GET parameter is absent).
- Changed: When loading a game from an archive, files named style.css and script.js are now read and loaded as plugins (as documented), rather than all .css and .js files (as was actually the case).
- Changed: When launching a game by identifier from a folder, the player now searches for the urqw/main.qst file and, if not found, then main.qst, instead of the quest.qst file. The directory where main.qst is located is considered the game directory.
- Changed: When launching a game by identifier from a folder, the manifest.json and iFiction record files, as well as plugin files (style.css and script.js) are now loaded and processed first, and only then is the main.qst game file loaded.
- Changed: A new sound played using the play operator now stops the previous one (the original behavior of RipURQ, URQ_DOS (WCL), and AkURQ), rather than playing in parallel.
- Changed: Game sounds initiated via the play operator at zero volume now begin playing at zero volume instead of being ignored.
- Changed: UI areas for text and choice buttons are now only redrawn when the content being displayed changes, rather than every time the game state changes.
- Changed: Now, keypress tracking by key code instead of character code.
- Changed: Layout optimization, including for HTML validity and search engine optimization.
- Changed: Minor adjustment to informative window indentation.
- Fixed: Links disappear from the text when loading a saved game.
- Fixed: Text output containing line breaks is always displayed as a block element.
- Fixed: Paragraphs containing text output with block elements do not have left padding.
- Fixed: Music and game sounds do not stop playing when restarting or loading from a save.
- Fixed: When the music operator is executed again with the same audio file, the file is not played again.
- Removed: Separate UrqW cursor for choosing and activating buttons (caused issues with simultaneous activation of two controls and was replaced with cluster navigation based on standard system focus).
- Accessibility improvements:
- Added: Text labels for controls of the toolbar.
- Added: Text label for inventory button in XS-sized interface.
- Added: Text prefix to visually highlighted autosave slot
- Added: Customizable announcement description updates using assistive technology.
- Added: Customizable announcement choice button updates using assistive technology.
- Added: Customizable announcement description using assistive technology when pressing a hotkey (see help in menu).
- Added: Customizable announcement description using assistive technology when shaking device.
- Added: Customizable images focusability using the keyboard.
- Added: Inventory panel links that do not perform any actions have the aria-disabled attribute, which indicates that there is no associated action but does not suppress the element focusability.
- Added: Designation for assistive technologies whether an inventory item has a drop-down menu.
- Changed: Each link in the drop-down menu of an inventory item now has the role of a menu item.
- Changed: Text labels for player graphic icons.
- Fixed: Links in game text are not focusable with keyboard, and do not have link role.
- Fixed: Incorrect paragraph representation in game text for screen readers.
- Fixed: The inventory button in XS-sized interface does not change its semantic state (collapsed/expanded) after the first activation.
- Documentation:
- Added: Preparation of new documentation in Russian and English has begun.
- Added: The guide for contributors (see the CONTRIBUTING.md file in the repository).
- Changed: Updating the main Russian-language documentation.
- Development and maintenance infrastructure:
- Added: Automate the build and deployment of UrqW with a game catalog via GitHub Actions on GitHub Pages when changes are made to master.
- Added: build-urqw script to building the production version of the engine.
- Added: check-locale script to check completeness of localization.
- Added: valid-json script to validate the games.json file.
- Added: pack-games script to package games from the games directory for the catalog.
- Added: gen-rss script to generate RSS feed for new games in the catalog.
- Added: gen-license-report script to generate report on third-party component licenses.
- Added: gen-docs script to generate documentation in HTML format.
- Added: gen-sitemap script to generate a sitemap for search engines.
- Added: pack-release script to package a release build of UrqW.
- Added:
npm run build command to build UrqW for production environments with the games catalog.
- Added:
npm run release command to build UrqW for release without the games catalog.
- Added: Expanded test coverage for the game player functionality and programming language constructs.
- Changed: For production builds of the engine, all separately included .css style files and .js script files are now minified and combined into single bundles, the index.html file is also minified. Development is carried out in separate .css and .js files, as well as in the index-dev.html file.
- Changed: All games in the catalog are now added as submodules from separate repositories and repackaged with manifest.json and iFiction record files.
- Changed: Supported plugins with usage examples (functional tests) are now added as submodules from separate repositories and placed in the quests directory as game packages.
- Changed: Tests to ensure the engine is working correctly have been moved to the quests/tests directory.
Version 1.0 (from 2017-01-20)
- The first stable release.
2015-10-12
- The first publicly presented working version.
2015-09-21
- Start of development (first commit).