Releases: lvcabral/brs-engine
v1.2.3 - Improved Control Simulation
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()
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 HTML5dialog
- 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
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
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.
- Add the entry
Full Changelog: v1.1.11...v1.2.0
v1.1.11 - Improved roRegex and fixed Sound issues
Release Changes
- Added support for
g
flag onroRegex
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
andpause
states.
Full Changelog: v1.1.10...v1.1.11
v1.1.10 - Fixed DBG Command conflict with WAV
What's Changed
- Fixed wav stream conflict with Debug command by @lvcabral in #207
- Extracted enumerators from
util.js
intoenums.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.
- Extracted enumerators from
Full Changelog: v1.1.9...v1.1.10
v1.1.9 - GamePad support and FPS Limitation
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
- Implemented GamePad support by @lvcabral in #204
- Added support for the GamePad API
- Added a new feature
simulation_engine
to theroDeviceInfo.hasFeature()
method, allowing apps to adapt when underbrs-engine
- Added new option to define
maxFps
ondeviceData
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
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
andbrs.worker.js
- Reorganized
src
folder by library, subfolders:api
,cli
andworker
- Added new CLI with REPL (
bin/brs.cli.js
) (#181) - Added support for Conditional Compilation (#93)
- Added support for
webp
file format inroBitmap
(#166) - Added support for interfaces
ifGetArray
andifSetArray
(#170) - Added support for
.bpk
encrypted package file (#188) - Added support optional chaining operators:
?.
,?(
,?[
, and.@
(#176) - Moved
models
list to API library and updatedserialNumber
format - Added new API event
registry
- Added check for
break
debug command during theroMessagePort
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
androDeviceInfo.enableLowGeneralMemory
(#196) - Added new method
getAllPurchases
and changeddoOrder
to returnfalse
(#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 considerroDeviceInfo.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 whensetWrap
wastrue
(#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
byday.js
onroDateTime
androTimespan
(#193) - Replaced module
jszip
by the lighterfflate
- 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
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
inroRegion
#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()
inroString
#133 - Implemented
end
command to terminate app without crash - Improved casting on
roBitmap
,roRegion
androScreen
- 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
onroScreen
androBitmap
- Fixed:
ifDraw2d
drawing methods onroRegion
#120 - Fixed: return
invalid
whenroCompositor
doesn't receive valid regions creating sprites #125 - Fixed: Edge case of comparing
invalid
withroInvalid
- 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 theSharedArrayBuffer
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
- The source code of the desktop application is at: https://github.com/lvcabral/brs-emu-app
- Download installers for Windows, Linux and macOS from the brs-emu-app release page
- You can use it integrated with VSCode BrightScript Language Extension using the implementation of Roku Remote Access Services
v0.9.0 - Improvements on ECP and BrightScript support
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)
inifDraw2D.DrawObject()
andifDraw2D.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 alongsideelse
(#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 installers for Windows, Linux and macOS from the Assets section below
- Linux users can also install the application from the Snap Store at: https://snapcraft.io/brs-emu-app
- New Linux Arm build (compat. with Raspberry Pi) available for the first time, download file
brsEmuApp-0.9.1-linux-armv7l.AppImage
below - The source code of the desktop application is at: https://github.com/lvcabral/brs-emu-app
- Now is possible to use it integrated with VSCode BrightScript Language Extension using the implementation of Roku Remote Access Services
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!
- Prince of Persia for Roku port by Marcelo Lv Cabral - Download zip file
- Lode Runner for Roku remake by Marcelo Lv Cabral - Download zip file
- Retaliate game by Romans I XVI - Download zip file