Skip to content

Releases: lvcabral/brs-engine

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!

v0.8.1 - Fixes and Security Patches

09 Jun 16:46
Compare
Choose a tag to compare

Release Notes

This release brings bug fixes, support for new Chrome security policies and the desktop application has upgraded dependencies including Electron's bump to v9.

  • (brs)Added new message "getVersion" to allow request library version to the WebWorker
  • (brs) Revert "fix(interp): Automatically box as object function parameters (sjbarag#365)"
  • (brs) Fixed support for Retaliate game that was not working properly on v0.8
  • (web) Shows dynamically the library version using new message "getVersion"
  • (web) Added support to Chrome 92+ that will force self.crossOriginIsolated
  • (app) Upgraded several dependencies to patch security vulnerabilities.

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!

v0.8 - Localization Support

11 Mar 05:53
Compare
Choose a tag to compare

Release Notes

This release brings full support for channel localization. The desktop application has a new menu with the locales with the same options available on Roku devices.

  • (brs)Added support to localize texts using TS or XLIFF files #67
  • (brs)Implemented support for localization of images #66
  • (brs)Added missing method setAdPrefs() for Roku_Ads.brs #68
  • (brs)Removed BRS original manifest handler
  • (app) Added option on Device menu to change localization
  • (app) Refactored app code into several front-end modules
  • Merged BRS v0.18.2
    • fix(stdlib): Implement RoAssociativeArray.items() correctly (#371)
    • fix(interp): Automatically box as object function parameters (#35)
    • fix(stdlib): Allow formatJson to serialize boxed types (#364)
    • feat(stdlib): Implement getString() and toStr() on RoString (#362)
    • feat(stdlib): Implement GetInterface (#352)
    • fix(interp): Automatically box return values for 'as object' return types (#360)
    • feat(parse): Allow . before indexed property access (#357)
    • chore(cruft): Remove unused AutoBox.ts

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!

v0.7 - First Beta Release

17 Nov 09:12
Compare
Choose a tag to compare

Release Notes

  • (brs) Library now supports roUrlTransfer and roUrlEvent
  • (brs) Added support to bmp images, and better file type detection
  • (brs) Emulator File System is now case insensitive (like Roku)
  • (brs) Finished roXMLElement implementation with XML creation methods
  • (brs) Mocked roAppManager component with working GetUpTime() method
  • (brs) Support to global functions: RebootSystem(), UpTime(), Tr()
  • (brs) Fixed scope of the m object inside global functions (v0.7.2)
  • (brs) Fixed support for fonts with spaces and numbers on the family name (v0.7.2)
  • (brs) Fixed issues related to if..then..else on a single line (v0.7.2)
  • (app,web) Added support to play downloaded audio files
  • (app,web) Added support to show downloaded images
  • (app,web) Updated default sound effects with the original Roku audio resources
  • (app) Web Installer (port 80 or custom) to allow remote installation and screenshot
  • (app) ECP server (port 8060) with SSDP detection implemented
  • (app) Remote Console (port 8085) is available for remote monitoring
  • (app) Status bar now changes color if errors or warnings are raised
  • (app) New clickable status bar icons for errors, ECP and web installer
  • (web) Shows animated gif to indicate a channel is being downloaded
  • (doc) Updated list of emulator limitations
  • (doc,app) Added desktop app build documentation

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

Desktop Application

  • v0.7.0 - Initial Release
  • v0.7.1 - Added: Always on Top option on View menu and support to roku-deploy v2.6.0+
  • v0.7.2 - Fixed command line option to change installer port that was requiring restart to work, updated emulator library with fixes.

Notes:

  1. Download installers for Windows, Linux and macOS from the Assets section below
  2. Linux users can also install the application from the Snap Store at: https://snapcraft.io/brs-emu-app
  3. The source code of the desktop application is at: https://github.com/lvcabral/brs-emu-app
  4. Now is possible to use it integrated with VSCode BrightScript Language Extension

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!

v0.6 - Audio Playback and new Display Modes

24 Oct 09:15
Compare
Choose a tag to compare

Release Notes

  • (app,web) Support for audio playback from roAudioResource and roAudioPlayer
  • (app,web) Support for SD and FHD display modes
  • (app) Added TV over-scan emulation options: disabled, only guide lines, enabled
  • (app) Added Open Recent sub-menu
  • (app) Added Close Channel menu option
  • (app) Added macOS standard app menu
  • (brs) Implemented roAudioPlayerEvent and updated roMessagePort to support it
  • (doc) Updated list of emulator limitations

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

Desktop Application

  1. Download installers for Windows, Linux and macOS from the Assets section below
  2. Linux users can also install the application from the Snap Store at: https://snapcraft.io/brs-emu-app
  3. The source code of the desktop application is at: https://github.com/lvcabral/brs-emu-app

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!

v0.5 - Desktop Applications and Library Fixes

05 Oct 05:03
Compare
Choose a tag to compare

Release Notes

This version brings the first release of the desktop application and several fixes and improvements:

  • (app) Desktop app for Windows, Linux and macOS
  • (brs) Fixed issues with inline if statements on Parser #252 #253 #309
  • (brs) Implemented global function GetInterface() #42
  • (brs) Added support for an optional parameter on Main() #44
  • (brs) Added RunUserInterface() as alternative for Main() #44
  • (brs) Added missing method maxSimulStreams() on roAudioResource component #26
  • (web) Reduced the app html to be simple, adding links to documentation on the repository
  • (web) Detect and inform user about unsupported browser #40
  • (doc) Reorganized repository folders and documentation for v0.5.0 #43
  • Merged BRS v0.15.0
    • fix(types): Return true for invalid values on RoAssociativeArray#doesExist (#323)
    • fix(types,interp): Automatically convert between Int and Float (#291)
    • feat(extension): Add brs.runInScope (#326)
    • chore(naming): rename src/mocks/ -> src/extensions/ (#325)

You can test the web app of release online at https://lvcabral.com/brs/

Desktop Apps

  • v0.5.0 - Initial Release
  • v0.5.1 - Fixes on menu (macOS), full screen mode (macOS) and installation artifacts (all)
  • v0.5.2 - Status bar icons, Linux x64 (amd64) binaries and new debian (.deb) package.

Notes

  1. Linux users can also install the application from the Snap Store at: https://snapcraft.io/brs-emu-app
  2. The source code of the desktop application is at: https://github.com/lvcabral/brs-emu-app

Dowload Games to Test

Below a list of tested games that are publicly available with source code, download the zip files and have fun!

v0.4 - Support for rgba on Draw Object methods

25 Sep 06:58
Compare
Choose a tag to compare

This release has the following changes:

  • Implemented method IsEmpty() for both roArray and roAssociativeArray #316
  • Fixed #320 Making sure DoesExist() returns true even when value of the existing item is invalid
  • Implemented mock components roChannelStore and roChannelStoreEvent #39
  • Implemented mock of Roku_Ads() object #25
  • Implemented support for rgba on DrawObject* methods #27
  • Added option to configure device font,
  • Added new font family "Roboto"
  • Added new font family "Asap" that is similar to Roku default
  • Implemented missing methods for RoUniversalControlEvent #37
  • Changed DrawText to get string from value property of BrsString
  • fix(parse): Include surrounding whitespace in Block nodes(#257)
  • Finished Collision detection implementation (rectangle and circle)
  • Updated roRegion to handle offset properly based on SetWrap() flag
  • Implemented roScreen methods SetPort(), GetPng() and GetByteArray()
  • Fixed for loop issue that should not process loop when step is on the wrong direction of the start-end parameters #310 (#311)

The website https://lvcabral.com/brs/ is updated with this release with new games, and you can also get the package below to run the emulator locally.

v0.3 - Several fixes and improvements

16 Sep 05:15
Compare
Choose a tag to compare
Pre-release

This releases adds a few font related features as follows:

  • Updated website and added new demo channels
  • Added parameter rgba to roScreen.DrawObject() (only alpha opacity supported) #27
  • Fixed for loop to correctly handle steps sjbarag#315
  • Fixed issue that roCompositor was not clearing the canvas properly
  • Implemented channel close detection
  • Fixed roSprite animation when frame time was configured on roRegion
  • Implemented double buffer support for roScreen and roRegion
  • Added method DrawText() to roRegion
  • Implemented string Tokenize() method
  • Added boxing to the numeric types
  • Merged roBoolean, roDouble, roFloat and roInt implementation #35
  • Made file type identification case-insensistive
  • Added support for .csv extension on zip package
  • Removed roSGNode as RSG is out of scope for the emulator
  • Added support for .gif and .jpeg image extensions
  • Fixed #32 Changed default font loading code to use relative path
  • Fixed #30 Moved the screen clear code to run before the splash

The website https://lvcabral.com/brs/ is updated with this release and a new game, and you can also get the package below to run the emulator locally.