Skip to content

Releases: lvcabral/brs-engine

v1.2.3 - Improved Control Simulation

20 Jan 03:17
Compare
Choose a tag to compare

What's Changed

  • Fixed issue that allowed API to unmute a video when App had it muted by @lvcabral in #221
  • Added new API methods to enable/disable dynamically both keyboard or game pad controllers by @lvcabral in #222
    • setControlMode()
    • getControlMode()
    • setCustomPadButtons()
  • Improvements on Remote Control simulation by @lvcabral in #223
    • Added support for different control types
    • Added a key buffer on the API side to avoid losing key events

Full Changelog: v1.2.2...v1.2.3

v1.2.2 - Implemented FindMemberFunction()

18 Jan 03:02
Compare
Choose a tag to compare

Release Changes

  • Fixed #190 - Implemented global function FindMemberFunction() by @lvcabral in #216
  • Improved Example web app by @lvcabral in #217
    • Removed unecessary content policy
    • Replaced usage of prompt() by an HTML5 dialog
    • Updated execution source using the button to match Roku side load with "auto-run-dev"

Full Changelog: v1.2.1...v1.2.2

v1.2.1 - Mute Audio and Video in Sync

16 Jan 01:29
Compare
Choose a tag to compare

Release Changes

  • Fixed API to handle mute in sync for both Audio and Video by @lvcabral in #215
  • Fixed bad performance when in full screen mode on 4K monitors by @lvcabral in #214
  • build(deps): bump follow-redirects from 1.15.3 to 1.15.4 by @dependabot in #212
  • Added new demo app to the example web application: custom-video-player
  • Updated documentation

Full Changelog: v1.2.0...v1.2.1

v1.2.0 - Video Playback and GamePad customization

15 Jan 03:03
Compare
Choose a tag to compare

Release Changes

  • Implemented roVideoPlayer component by @lvcabral in #213
  • Added support to customize GamePad buttons mapping by @lvcabral in #210
  • Control queue modes: Single Key Events and Multi Key Events by @lvcabral in #211
    • Add the entry multi_key_events=1 to the manifest to enable support for simultaneous keys.

Full Changelog: v1.1.11...v1.2.0

v1.1.11 - Improved roRegex and fixed Sound issues

05 Jan 23:17
Compare
Choose a tag to compare

Release Changes

  • Added support for g flag on roRegex by @lvcabral in #209
  • Fixed sound related issues by @lvcabral in #208
    • Home Button sound was not always being triggered
    • The roAudioResource was with the old DataType enum configuration
    • Sound will totally pause now both on stop and pause states.

Full Changelog: v1.1.10...v1.1.11

v1.1.10 - Fixed DBG Command conflict with WAV

05 Jan 05:07
Compare
Choose a tag to compare

What's Changed

  • Fixed wav stream conflict with Debug command by @lvcabral in #207
    • Extracted enumerators from util.js into enums.js to reuse inside the worker
    • Fixed issue that was restarting a sound when returning from pause or break, when the app already had stopped it.

Full Changelog: v1.1.9...v1.1.10

v1.1.9 - GamePad support and FPS Limitation

04 Jan 04:52
Compare
Choose a tag to compare

What's Changed

  • Updated package name on README.md badges by @lvcabral in #200
  • Fixed #201 - Prevent Exception when SharedArrayBuffer is not supported by @lvcabral in #202
  • Implementing features to remove limitations by @lvcabral in #205
    • Fixed #164 - Allowing usage of explicit interfaces when calling methods @lvcabral in #206
    • Fixed #159 - Properly casting numeric values on Math functions and other scenarios
    • Added support to have the variable name after next statement in a for...next loop
  • Implemented GamePad support by @lvcabral in #204
    • Added support for the GamePad API
    • Added a new feature simulation_engine to the roDeviceInfo.hasFeature() method, allowing apps to adapt when under brs-engine
    • Added new option to define maxFps on deviceData and limit framerate inside the worker
    • Reduced web app default framerate to prevent issues on iOS
    • Added icon dimentions to css
    • Fixed CLI to not show start event
    • Fixed high framerate performance issue
    • Fixed loading encrypted package
  • Added new debug command pause to allow interrupt the interpreter when app loses focus

Full Changelog: v1.0.0...v1.1.9

v1.0.0 - Simulation Engine Release

16 Dec 19:35
581dfc0
Compare
Choose a tag to compare

After 4 years of Alpha and Beta stages, the project is stable and performant enough to finally be released as version 1.0 and with that, we decided to give it a new name:

brs-engine - BrightScript Simulation Engine

The term simulation engine was chosen instead of the former emulator to better represent the nature and purpose of the project, as there is no intention to fully emulate a Roku device (OS and Hardware), but rather simulate the behavior, as a development tool and as an engine/framework to run BrightScript apps in different platforms.

In this release the new CLI was introduced, still with some limitations (e.g. no OffScreenCanvas support), but allowing basic BrightScript code to be executed, either via REPL or files. It also performs the encryption of a .zip file into a .bpk package to protect the source code.

Release Changes

  • Renamed package to brs-engine
  • Renamed libraries to brs.api.js and brs.worker.js
  • Reorganized src folder by library, subfolders: api, cli and worker
  • Added new CLI with REPL (bin/brs.cli.js) (#181)
  • Added support for Conditional Compilation (#93)
  • Added support for webp file format in roBitmap (#166)
  • Added support for interfaces ifGetArray and ifSetArray (#170)
  • Added support for .bpk encrypted package file (#188)
  • Added support optional chaining operators: ?., ?(, ?[, and .@ (#176)
  • Moved models list to API library and updated serialNumber format
  • Added new API event registry
  • Added check for break debug command during the roMessagePort loop
  • Added code to pause sound when Micro Debugger is triggered (does not affect wav)
  • Added option to stop on Micro Debugger when a crash happens (#198)
  • Added partial try/catch implementation (#195)
  • Improved error handling and added warning for RSG usage
  • Added stub roAppMemoryMonitor and roDeviceInfo.enableLowGeneralMemory (#196)
  • Added new method getAllPurchases and changed doOrder to return false (#178)
  • Added formatLocation method in the Interpreter to help show location in warning messages
  • Added Bundle Stats Analyzer and replaced dependencies to reduce package size
  • Updated default firmware to 11.0 and added new models to the list
  • Updated images and layout of sample Web application
  • Updated roDateTime.GetTimeZoneOffset() to consider roDeviceInfo.GetTimeZone() (#94)
  • Finished implementation of ifEnum on all array/list objects (#171)
  • Fixed multiple cascading calls for dot-chained methods (#55)
  • Fixed roRegion offset not being properly applied when setWrap was true (#194)
  • Fixed Val() function not compliant with Roku (#162)
  • Fixed duplication of exception handling messages (#126)
  • Fixed code smells and bugs based on Sonar Cloud recommendations (#169)
  • Replaced luxon by day.js on roDateTime and roTimespan (#193)
  • Replaced module jszip by the lighter fflate
  • Removing ua-parser-js dependency for the API
  • Bumped version of several dependencies
  • Removed Node 14.x from the build (#182)

Full Changelog: v0.10.22...v1.0.0

v0.10.22 - New API and Boosted Performance

10 Sep 02:23
268efe9
Compare
Choose a tag to compare

Release Notes

This release was a result of months of refactoring work and performance improvements.

  • Implemented new API to simplify usage of the brs-emu package, see new documentation @lvcabral
  • Implemented the Roku MicroDebugger (including stop statement, back trace and debug commands) #127
  • Added support for Firefox and Safari browsers
  • Added option to execute a channel without audio
  • Added support for both Windows and MacOS keyboard names
  • Multiple performance improvements on handling Canvas 2D, big thanks for @markwpearce #139
  • Implemented roInput #57
  • Implemented roAppInfo #104
  • Implemented support for ScaleMode in roRegion #62
  • Implemented missing methods to roRegion #120
  • Implemented missing methods to roUrlTransfer as mocks to avoid channel crash. #104
  • Implemented missing roDeviceInfo methods #134
  • Implemented missing roChannelStore methods #137
  • Implemented a mock of RunGarbageCollector() #119
  • Implemented numeric type auto cast in function parameters and return value #122
  • Implemented support for external input parameters #123
  • Implemented support for format parameter on toStr() #132
  • Implemented method format() in roString #133
  • Implemented end command to terminate app without crash
  • Improved casting on roBitmap, roRegion and roScreen
  • Improved Function call performance #141
  • Changed to show icon when no splash exist in zip file
  • Changed to only enable keyboard control when channel is running
  • Changed to make sure audio do not play if stop() is called during load
  • Fixed: drawRotatedObject on roScreen and roBitmap
  • Fixed: ifDraw2d drawing methods on roRegion #120
  • Fixed: return invalid when roCompositor doesn't receive valid regions creating sprites #125
  • Fixed: Edge case of comparing invalid with roInvalid
  • Fixed: Prevent crash with invalid collection with for each #118
  • Fixed: Added missing audio files to the npm package
  • Added option to show and overlay with display performance indicators #129
  • Implemented use of Atomics with the SharedArrayBuffer and other small improvements.
  • Adding a python script to allow testing on newer browsers with COOP and COEP enabled.
  • Upgraded to TypeScript 4, Webpack 5 and several other dependencies
  • [sonar] Code smell and complexity fixes #153
  • Merged brs v0.45.0 below cherry picked commits:
    • feat(stdlib): Add lookupCI for assocarray (#639) resolves #629
    • fix(interp): allow functions to be typed as objects (#659)

Full Changelog: v0.9.0-emu...v0.10.22

Web Applications

You can test the this release using:

Desktop Application

v0.9.0 - Improvements on ECP and BrightScript support

28 Jun 05:07
Compare
Choose a tag to compare

Release Notes

This release brings the integration of improvements and fixes from the brs interpreter up to their v0.43. Also several improvements

  • (app) Implemented ECP-2 WebSocket API to support official Roku mobile apps (iOS and Android)
  • (app) Implemented support for keyboard characters sent via ECP
  • (app) Added support for new control keys: Backspace, Enter, PlayOnly and Stop
  • (app) Restore the app window, if minimized, when a channel is loaded remotely via the Installer
  • (app) Added Ctrl+R shortcut to reload most recent channel
  • (app) Added current locale on the Status bar
  • (app) Made path length on the status bar proportional to the app window's width
  • (app) Fixed status bar Resolution label that was showing "width" twice
  • (app,web) Now emulator loads all files from the zip package even ones with custom extension.
  • (app,web) Made Key8 to behave as the Info (*) control key, for keyboards that lacks the numeric keypad
  • (app,web) Upgraded several dependencies to patch security vulnerabilities.
  • (brs) Implemented support for Dot (.) and Attribute (@) operators for XML objects
  • (brs) Implemented several missing methods to roDeviceInfo
  • (brs) Added check for valid parameters on roRegion constructor
  • (brs) Ignore Label statements when parsing the code
  • (brs) Fixed roRegion.SetWrap(true) in ifDraw2D.DrawObject() and ifDraw2D.DrawScaledObject()
  • (brs) Fixed roString.Tokenize() that was sometimes returning an empty string at the end of the list
  • (brs) Fixed roAppManager.updateLastKeyPressTime() definition typo and implemented actual time reset
  • (brs) Fixed issues with roTimespan
  • (brs) Fixed roRegion.offset() to accept float parameters
  • (doc) Updated list of emulator limitations
  • Merged brs v0.43.0 below some key commits:
    • fix(lexer): Add support for explicit integer literals (#637)
    • feat(stdlib): add isEmpty method to roString (#636)
    • fix(parse,interp): Support unary + operator for numbers (#615)
    • fix(lex): Allow JS object properties as identifiers (#614)
    • feat(stdlib): Implement RoLongInteger and cast int to LongInt, float to Double (#600)
    • fix(stdlib): Correct sorting issues with mixed arrays (#592)
    • feat(parse,interp): Implement dim statement (#531)
    • fix(rsg): Adds optional arg to RoString constructor (#533)
    • fix(parse): Restore nested block parsing (#514)
    • fix(parse): Allow multiple statements in single-line if branches
    • feat(stdlib): Added case sensitive support to roAssociativeArray (#509)
    • fix(parser): make if statements with 'not' work (#443)
    • bug(parse): Capture EndIf token when used alongside else (#393)
    • bug(interp): Allow Float parameters passed into function signatures expecting Double (#394)
    • fix(interp): Allow invalid returns for signatures that return object (brs#395)

You can test the web app from this release at https://lvcabral.com/brs/

Desktop Application

Download Games to Test

Below you can find a list of games tested with the emulator, that are publicly available with source code. Just download the zip files and have fun!