A Flash Player emulator written in Rust

Overview

Ruffle

Rust Build Status Web Build Status Ruffle Discord
website | demo | nightly builds | wiki

Ruffle

Ruffle is an Adobe Flash Player emulator written in the Rust programming language. Ruffle targets both the desktop and the web using WebAssembly.

Project status

Ruffle is in the proof-of-concept stage and can currently run early Flash animations and games. Basic ActionScript 1.0/2.0 support is in place and improving; ActionScript 3.0 support is forthcoming. For more info, read the project roadmap.

Using Ruffle

The easiest way to try out Ruffle is to visit the web demo page, then click the "Browse..." button to load an SWF file of your choice.

Nightly builds of Ruffle are available for desktop and web platforms including the browser extension.

For more detailed instructions, see our wiki page.

Building from source

Follow the official guide to install Rust for your platform.

Desktop

  • cargo run --package=ruffle_desktop -- test.swf

Web or Extension

Follow the instructions in the web directory for building either the web or browser extension version of Ruffle.

Scanner

If you have a collection of "real world" SWFs to test against, the scanner may be used to benchmark ruffle's parsing capabilities. Provided with a folder and an output filename, it will attempt to read all of the flash files and report on the success of such a task.

  • cargo run --package=ruffle_scanner -- folder/with/swfs/ results.csv

Exporter

If you have a swf and would like to capture an image of it, you may use the exporter tool. This currently requires hardware acceleration, but can be run headless (with no window).

  • cargo run --package=exporter -- path/to/file.swf
  • cargo run --package=exporter -- path/to/file.swf path/to/screenshots --frames 5

Structure

  • core contains the core emulator and common code
  • desktop contains the desktop client (uses wgpu-rs)
  • web contains the web client and browser extension (uses wasm-bindgen)
  • scanner contains a utility to bulk parse swf files
  • exporter contains a utility to generate PNG screenshots of a swf file

Sponsors

You can support the development of Ruffle via GitHub Sponsors. Your sponsorship will help to ensure the accessibility of Flash content for the future. Thank you!

Sincere thanks to the diamond level sponsors of Ruffle:

Newgrounds.com CPMStar Sébastien Bénard Crazy Games Cool Math Games The New York Times Armor Games Onda Educa TwoPlayerGames.org

License

Ruffle is licensed under either of

at your option.

Ruffle depends on third-party libraries under compatible licenses. See LICENSE.md for full information.

Contribution

Ruffle welcomes contribution from everyone. See CONTRIBUTING.md for help getting started.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you shall be dual licensed as above, without any additional terms or conditions.

The entire Ruffle community, including the chat room and GitHub project, is expected to abide by the Code of Conduct that the Rust project itself follows.

Issues
  • Add VP6 video decoding by utilizing an external crate that bundles parts of FFmpeg

    Add VP6 video decoding by utilizing an external crate that bundles parts of FFmpeg

    This is very much a ~~WIP POC RFC OMG~~ PR.

    (With https://github.com/ruffle-rs/ruffle/pull/3117 merged, there aren't any "extra" commits in here anymore.)

    Because this is (I feel like) a fairly heavy change set (both in technical and legal aspects), I'd like to get some feedback about it, before fully polishing it, and hopefully together an acceptable state for merging can be achieved. While rough around the edges, it's already complete enough that it can be seen working on z0r.de: 7055, 7340, 7617, 7872, and many others. (I'm hoping that deploying "unofficial forks" like this in the public is not problematic?)

    Most functionality is in an external crate. The rest of the description applies to the contents of that separate crate. At the moment, that crate lives in this repository: https://github.com/torokati44/vp6-dec-rs In the future, this will be migrated under the Ruffle organization.

    The C code is built by a fairly straightforward build.rs using the cc crate, which automatically handles native compilation or targeting WASM for the extension/selfhosted variant, using a static config. For the WASM target, instead of relying on Emscripten or something similar, a (handmade) tiny fraction of a libc is included as well, just enough to make the decoder compile and work. ~This same libc stub is also utilized on Windows - it was easier this way than supporting compilation with MSVC as well.~ - EDIT: This is no longer true.

    Binding declarations are based on those generated by bindgen, but in the end, only a tiny portion of those were kept - and some other parts didn't work well then targeting WASM. This adds clang as an additional dev dependency, which hopefully isn't too big an issue. Version 7 is for sure too old, 11 is confirmed recent enough - but at least not a whole Emscripten SDK is required. I opted not to use any of the already available ffmpeg binding crates, because they all seemed to have issues with cross-compilation, and doing this without them wasn't that bad after all.

    Some things that should be fairly straightforward to add, but aren't done yet:

    • [X] Reporting which frames are and aren't keyframes, for artifact-free seeking.
      • EDIT: This turned out to be really easy to do.
    • [X] Support for videos with transparency - ffmpeg has VP6A variant as well; or the two streams can be easily merged by hand.
      • EDIT: I have wired this up, it was fortunately only a matter of selecting a different codec, no manual merging needed. The only file I found containing VP6WithAlpha is the (slightly NSFW?) z0r.de/3926, but this one doesn't look like it is actually transparent anywhere at all. And one can build a test file from this example from Adobe as well.
    • [X] ~~Trimming the "padding pixels" off from the right and bottom edges, they are needed only for compression.~~
      • EDIT: When noting this, I mistakenly looked at the FLV tag spec instead of the SWF one. In the SWF tag header, the HorizontalAdjustment and VerticalAdjustment fields are not present. ~Also, I've checked, and even if the size in the header is not an integer multiple of 8 or 16 (the block sizes), the results already match that of Flash Player nicely. Most likely, the actual frame size is also part of the frame data fed to the decoder in FFmpeg, which then handles it properly.~
      • UPDATE: I was wrong with the edit above, and it was only a coincidence that all the videos I looked at were fullscreen, so they were in fact cropped by the player window itself. #4154 exposed this issue, and made the garbage pixels visible. These are now cropped manually, for reasons explained in 2ac4acf3f18d0699e8596f847b8922e8804aa667.
    • [X] Supporting the different post-processing (deblocking/deringing/smoothing) options
      • EDIT: Judging by the header parsing code, I believe that at least the deblocking filter is also configured by the encoded data itself, and FFmpeg applies it as requested.
    • [ ] Triple-checking that nothing in the countless unsafe blocks can crash or leak or do anything nasty.
    opened by torokati44 52
  • Initial extension settings page

    Initial extension settings page

    A lot of the work was done by @kmeisthax . I just rebased & added an official extension settings page. We should probably allow the user to add a blacklist of bad pages and a whitelist of good pages at some point.

    opened by Justin-CB 29
  • Does not work

    Does not work

    Your bug reporting is worthless. The plugin crashes.

    opened by wolfe4656 28
  • swf is not loaded

    swf is not loaded

    Hello,

    First of all many thanks for ruffle.js.

    I have created an example, but it does not work. My example can be found here: http://lena91567.bplaced.net/Hellblau/ why does my example not work? Am I using the wrong ruffle.js?

    Please help me. Thanks a lot!

    question 
    opened by Wahrheit26 25
  • Web servers often serve WASM with incorrect MIME type; better docs/errors needed

    Web servers often serve WASM with incorrect MIME type; better docs/errors needed

    Hello,

    I get an error when using a Web build on my site. Here is what is logged in the console in Firefox (Windows):

    Loading SWF file images/file.swf TypeError: Response has unsupported MIME type Got SWF data TypeError: Response has unsupported MIME type Serious error loading Ruffle: TypeError: Response has unsupported MIME type Serious error occured loading SWF file: TypeError: Response has unsupported MIME type

    Chrome (Windows) is a bit more explicit:

    TypeError: Failed to execute 'compile' on 'WebAssembly': Incorrect response MIME type. Expected 'application/wasm'.

    It turns out the server interpreted the .wasm file as being of type "octet-stream". However, testing the build locally with WampServer has not solved the issue, despite the correct mime type being returned.

    There is no issue on iPad (iPadOS 13 - Safari and Chrome), Ruffle runs as expected.

    Thanks.


    UPDATE:

    Actually Apache needed an extra line in the .htaccess (even in the local server):

    AddType application/wasm wasm

    ... and clearing browser's cache after this.

    web docs 
    opened by Toad06 24
  • Add support for capturing images during tests

    Add support for capturing images during tests

    This PR extends regression_test.rs with the ability to capture an image of the final frame of a test (based on the code in exporter). This will allow for automated 'rendering tests' which compare the rendered output of a frame to a reference image on disk.

    The largest change in this PR is the creation of a new tests package. All of the existing SWF test files are moved from core to this package. This allows the test code to depend on ruffle_render_wgpu, which is needed to render an image.

    opened by Aaron1011 19
  • two issues with SetBackgroundColor

    two issues with SetBackgroundColor

    https://github.com/ousia/ruffle-demo/blob/master/006699.swf contains:

    SETBACKGROUNDCOLOR (00/66/99)
    

    It is displayed in https://ousia.github.io/ruffle-demo/.

    But if background color is blue, there should be no black bars.

    opened by ousia 19
  • MovieClip.hittest with shapeflag is not yet implemented

    MovieClip.hittest with shapeflag is not yet implemented

    Opening this so that we can track that hittest isn't fully done yet.

    To implement this we will likely need to ask down to the backend to perform hit testing for us, as inside core we don't have any idea where a shape is actually visible on the screen.

    rendering 
    opened by Dinnerbone 19
  • Flash files with multiple sound tracks are played at the same time

    Flash files with multiple sound tracks are played at the same time

    I'm trying to use Ruffle to run a logic tutorial for my students (I have to resort to online teaching this year, with no access to the computer lab), which was programmed in old Macromedia Flash. However, the sound gets garbled under Chrome because all sound gets played at the same time). This is not the case for the offline desktop player, under which this works fine.

    An example file is added.

    1101.zip

    bug avm1 
    opened by milekpl 18
  • slow or distorted sound playing

    slow or distorted sound playing

    @Herschel,

    this comes from #183 & #203:

    1. Sound is played too slow in https://www.free-culture.tk/lfc-presentation.swf (downloaded and played with Linux desktop program [since now standard Firefox extension or web, #98]).

      I already reported this in lightspark/lightspark#381. The root of the problem was that (as @dbluelle kindly explained to me):

      Just FYI: your MP3 has a sampling rate of 16 kHz, but the DefineSoundTag only has flags for 5.5, 11, 22 or 44 kHz.

      This is the reason why this is played too slow. The player from Adobe has no problems with the sound in that SWF file.

    2. Sound in https://randomfoo.net/oscon/2002/lessig/free_culture.swf is played distorted. Playing speed is fine and my poor command of the English language doesn’t allow me a more accurate description (I’m afraid you have to listen to it).

      The sound is MP3, mono, 22kHz and 32kbps.

      Pressing any of the buttons (code in #203) removes distortion. I wonder whether this is related to Sound.stop() or Sound.play(time).

    Many thanks for your excellent work and your help.

    audio 
    opened by ousia 18
  • Ruffle Error on https://learn.genetics.utah.edu/content/addiction/mouse/

    Ruffle Error on https://learn.genetics.utah.edu/content/addiction/mouse/

    Error Info

    Error name: TypeError Error message: Failed to execute 'compile' on 'WebAssembly': HTTP status code is not ok Error stack:

    TypeError: Failed to execute 'compile' on 'WebAssembly': HTTP status code is not ok
    

    Player Info

    Allows script access: false

    Page Info

    Page URL: https://learn.genetics.utah.edu/content/addiction/mouse/

    Browser Info

    Useragent: Mozilla/5.0 (X11; CrOS x86_64 14092.77.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.107 Safari/537.36 OS: Linux x86_64

    Ruffle Info

    Version: 0.1.0 Name: nightly 2020-12-22 Channel: nightly Built: 2020-12-22T00:39:03.522Z Commit: f7797f85d6a2c340b0dfb97c42a3cc04be32b997

    opened by Mogee15 0
  • Ruffle Error on https://learn.genetics.utah.edu/content/cloning/clickandclone/

    Ruffle Error on https://learn.genetics.utah.edu/content/cloning/clickandclone/

    Error Info

    Error name: TypeError Error message: Failed to execute 'compile' on 'WebAssembly': HTTP status code is not ok Error stack:

    TypeError: Failed to execute 'compile' on 'WebAssembly': HTTP status code is not ok
    

    Player Info

    Allows script access: false

    Page Info

    Page URL: https://learn.genetics.utah.edu/content/cloning/clickandclone/

    Browser Info

    Useragent: Mozilla/5.0 (X11; CrOS x86_64 14150.74.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.114 Safari/537.36 OS: Linux x86_64

    Ruffle Info

    Version: 0.1.0 Name: nightly 2020-12-22 Channel: nightly Built: 2020-12-22T00:39:03.522Z Commit: f7797f85d6a2c340b0dfb97c42a3cc04be32b997

    opened by campbellschm 0
  • Weird behavior in Vector TD

    Weird behavior in Vector TD

    Describe the bug

    In the game Vector TD, there seems to be an issue where the towers will destroy one enemy and then not stop firing, causing money and points to be racked up quickly in this glitched state. This is on the most recent web extension version of Ruffle, which is 2021-11-23 at the time of writing this.

    https://user-images.githubusercontent.com/55714746/143133468-44d41ba6-8d3a-4e5f-9235-626f4f29d648.mp4

    Expected behavior

    The tower is supposed to stop firing and target another enemy, awarding the player with a normal amount of points and money.

    https://user-images.githubusercontent.com/55714746/143133874-31601950-44a6-4b07-b166-37d6376e97d3.mp4

    Affected platform

    Browser's extension

    Operating system

    Windows 10 21H1

    Browser

    Chrome 96

    Additional information

    No response

    bug 
    opened by Computerdude77 1
  • Third mouse wheel doesn't work correctly in ruffle.....

    Third mouse wheel doesn't work correctly in ruffle.....

    Describe the bug

    UPDATE: The Bug for the code Moves all timelines in a .swf file instead of the ones where the code is located.

    image

    Older post: image

    Third mouse wheel doesn't work correctly in ruffle. The code below shows how it works correctly in Flash Player using ActionScript 2:

    var mouseListener:Object = new Object(); mouseListener.onMouseWheel = function(delta) { if (delta < 0) { nextFrame(); } else if (delta > 0) { prevFrame(); }} Mouse.addListener(mouseListener);

    What this code above does in AS2 is tell the Main Timeline, or any MovieClip you put the code in on the first Frame, to scroll through the timeline either Forward or Backward (as in: using the mouse wheel to scroll up to go forward in the timeline or scrolling down to go backward in the timeline). Another way to tweek this code to make it directly work specifically in a certain movie clip is:

    var mouseListener:Object = new Object(); mouseListener.onMouseWheel = function(delta) { if (delta < 0) { _root.MovieClip.nextFrame(); } else if (delta > 0) { _root.MovieClip.prevFrame(); }} Mouse.addListener(mouseListener);

    Note: This code also helps with using your finger on a smartphone, tablet or touchscreen to scroll up and down on webpages that use AS2. Hopefully in a future update of ruffle the DEV's will fix this by implementing this code setup in the ruffle JavaScript.

    Expected behavior

    Everything is explained in "Describe the bug"

    Affected platform

    Self-hosted version

    Operating system

    Windows XP, Windows Vista, Windows 8, Windows 8.1, Windows 10, Android 8.1.0, Android 9, Android 11

    Browser

    Latest versions of Mozilla Firefox, Google Chrome, Puffin Web Browser

    Additional information

    No response

    bug 
    opened by NewhereDigitalToys 0
  • Error on https://f.kbhgames.com/RS/game.php

    Error on https://f.kbhgames.com/RS/game.php

    Error Info

    Error name: Error Error message: panicked at 'called Option::unwrap() on a None value', core/src/display_object/container.rs:849:18 Error stack:

    Error: panicked at 'called `Option::unwrap()` on a `None` value', core/src/display_object/container.rs:849:18
        at c.wbg.__wbg_new_df6e6ab7a65c4c4d (https://f.kbhgames.com/RS/asset/ruffle.js:1:7036)
        at std::sync::once::Once::call_once::{{closure}}::h5387044f596cf17b (wasm://wasm/018b815a:wasm-function[1003]:0x2f5687)
        at std::sync::once::Once::call_inner::h02a6489b0ecfb269 (wasm://wasm/018b815a:wasm-function[1322]:0x363092)
        at core::ops::function::FnOnce::call_once{{vtable.shim}}::h4461033b8c8249d8 (wasm://wasm/018b815a:wasm-function[4587]:0x4ebe27)
        at std::panicking::rust_panic_with_hook::h364974e717ed59ec (wasm://wasm/018b815a:wasm-function[3245]:0x4a7005)
        at rust_begin_unwind (wasm://wasm/018b815a:wasm-function[4647]:0x4ee093)
        at core::panicking::panic_fmt::hf69c8b08bc9d2ee5 (wasm://wasm/018b815a:wasm-function[4844]:0x4f8ac2)
        at core::panicking::panic::hceae0c79b0247f98 (wasm://wasm/018b815a:wasm-function[4583]:0x4eb658)
        at core::ops::function::FnOnce::call_once::hf99a08a7a8d58165 (wasm://wasm/018b815a:wasm-function[1045]:0x310c9e)
        at ruffle_core::avm1::function::Executable::exec::hc98df77004cccb4f (wasm://wasm/018b815a:wasm-function[425]:0x168b95)
    

    Player Info

    Allows script access: true

    Page Info

    Page URL: https://f.kbhgames.com/RS/game.php?r=//f.kbhgames.com/2018/swf/electricalman2.swf&w=640&h=400 SWF URL: https://f.kbhgames.com/2018/swf/electricalman2.swf

    Browser Info

    Useragent: Mozilla/5.0 (X11; CrOS aarch64 14150.87.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.124 Safari/537.36 OS: Linux aarch64

    Ruffle Info

    Version: 0.1.0 Name: nightly 2021-11-03 Channel: nightly Built: 2021-11-03T00:13:12.329Z Commit: 6c7d10e4d49ef0e155bc8027b6371c1217031796 Is extension: false

    opened by Goldenfredbear72 0
  • Error on https://fgn.cdn.serverable.com/common/flashes/nf/room_to_rent/index.html?d=20211113011651?e=MTYzNzc5MjQwNw%3D%3D

    Error on https://fgn.cdn.serverable.com/common/flashes/nf/room_to_rent/index.html?d=20211113011651?e=MTYzNzc5MjQwNw%3D%3D

    Error Info

    Error name: Error Error message: panicked at 'assertion failed: (left == right) left: true, right: false: cannot recursively acquire mutex', /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b/library/std/src/sys/wasm/../unsupported/mutex.rs:23:9 Error stack:

    Error: panicked at 'assertion failed: `(left == right)`
      left: `true`,
     right: `false`: cannot recursively acquire mutex', /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b/library/std/src/sys/wasm/../unsupported/mutex.rs:23:9
        at a.wbg.__wbg_new_df6e6ab7a65c4c4d (https://fgn.cdn.serverable.com/common/flashes/js/ruffle210214/ruffle.js:1:6799)
        at std::sync::once::Once::call_once::{{closure}}::hce6501f6f20767e4 (https://fgn.cdn.serverable.com/common/flashes/js/ruffle210214/4d640ad5aa95d1360f7c8c38e9c8b0d8.wasm:wasm-function[1327]:0x26ba91)
        at std::sync::once::Once::call_inner::hd3d269a4946f2df2 (https://fgn.cdn.serverable.com/common/flashes/js/ruffle210214/4d640ad5aa95d1360f7c8c38e9c8b0d8.wasm:wasm-function[1604]:0x29efac)
        at core::ops::function::FnOnce::call_once{{vtable.shim}}::h6ed7686ed76cb258 (https://fgn.cdn.serverable.com/common/flashes/js/ruffle210214/4d640ad5aa95d1360f7c8c38e9c8b0d8.wasm:wasm-function[4639]:0x3823e3)
        at std::panicking::rust_panic_with_hook::h4f753dc70b771d8e (https://fgn.cdn.serverable.com/common/flashes/js/ruffle210214/4d640ad5aa95d1360f7c8c38e9c8b0d8.wasm:wasm-function[3509]:0x357cb7)
        at std::panicking::begin_panic_handler::{{closure}}::h5c9fc29957309ae8 (https://fgn.cdn.serverable.com/common/flashes/js/ruffle210214/4d640ad5aa95d1360f7c8c38e9c8b0d8.wasm:wasm-function[4146]:0x37594f)
        at std::sys_common::backtrace::__rust_end_short_backtrace::h92808941d97e9b21 (https://fgn.cdn.serverable.com/common/flashes/js/ruffle210214/4d640ad5aa95d1360f7c8c38e9c8b0d8.wasm:wasm-function[4985]:0x387ab4)
        at rust_begin_unwind (https://fgn.cdn.serverable.com/common/flashes/js/ruffle210214/4d640ad5aa95d1360f7c8c38e9c8b0d8.wasm:wasm-function[4870]:0x3863b1)
        at core::panicking::panic_fmt::hbd8a975261a5f466 (https://fgn.cdn.serverable.com/common/flashes/js/ruffle210214/4d640ad5aa95d1360f7c8c38e9c8b0d8.wasm:wasm-function[4986]:0x387aea)
        at ruffle_web::Ruffle::new_internal::{{closure}}::{{closure}}::h15f929c1b068f5d3 (https://fgn.cdn.serverable.com/common/flashes/js/ruffle210214/4d640ad5aa95d1360f7c8c38e9c8b0d8.wasm:wasm-function[1339]:0x26e509)
    

    Player Info

    Allows script access: true Player type: Object SWF URL: start.swf Param movie: start.swf Param quality: high Param bgcolor: #000000 Param play: true Param loop: true Param wmode: window Param scale: showall Param menu: true Param devicefont: false Param allowScriptAccess: sameDomain Attribute 0: undefined Attribute 1: undefined Attribute 2: undefined Attribute 3: undefined Attribute 4: undefined

    Page Info

    Page URL: https://fgn.cdn.serverable.com/common/flashes/nf/room_to_rent/index.html?d=20211113011651?e=MTYzNzc5MjQwNw%3D%3D SWF URL: https://fgn.cdn.serverable.com/common/flashes/nf/room_to_rent/start.swf

    Browser Info

    Useragent: Mozilla/5.0 (Linux; Android 9; HTC U12+) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Mobile Safari/537.36 OS: Linux armv8l

    Ruffle Info

    Version: 0.1.0 Name: nightly 2021-02-14 Channel: nightly Built: 2021-02-14T00:19:03.523Z Commit: ecd873eb39c141f9bf2e41454c7a47d5f7e9507c

    opened by SimaoPedro010 0
  • aperturescience.com: DefineVideoStream, got Invalid data: Invalid video codec.

    aperturescience.com: DefineVideoStream, got Invalid data: Invalid video codec.

    Describe the bug

    https://www.aperturescience.com uses an old SWF file made in 2010.

    In Mozilla Firefox, the first frame of the video shows but nothing else happens. In Google Chrome, the Flash window shows a PLAY button, clicking it causes a black render.

    The website's SWF file is hosted at https://www.aperturescience.com/aperturescience.swf

    Also provided below. aperturescience.zip .

    Expected behavior

    The SWF's video should play normally.

    Affected platform

    Browser's extension

    Operating system

    Microsoft Windows 10 LTSC 2019 (1809)

    Browser

    Mozilla Firefox 91.3.0esr

    Additional information

    Firefox's JavaScript console log is attached below. console-export-2021-11-22_21-27-39.txt

    bug 
    opened by FoxMcCloud45 1
  • Re-entering fullscreen after exiting fullscreen with the escape button does nothing

    Re-entering fullscreen after exiting fullscreen with the escape button does nothing

    Describe the bug

    Pretty self-explanatory in the title, right click the game. Click "Enter fullscreen". Then press escape to exit fullscreen.

    Re-entering fullscreen will do nothing

    Expected behavior

    The Enter fullscreen button will stop functioning

    Affected platform

    Self-hosted version

    Operating system

    Windows 10

    Browser

    Opera GX 81

    Additional information

    No response

    bug web regression 
    opened by EmK530 6
  • Dragon Ball Devolution no download option in context menu

    Dragon Ball Devolution no download option in context menu

    Describe the bug

    I manually installed the extension in Microsoft Edge, then opened the game. When I right clicked it, there was no download option in the context menu. I made sure to toggle it on in the settings menu. The game's official website is https://www.txori.com/index.php?static5/dbdevolution. Context menu: screenshot (95) My settings: screenshot (96) Someone on Ruffle's official discord (nosamu#3385) stated that they "think it must be a conflict between the selfhosted and extension versions of Ruffle, since the website is self-hosting" and that they "think that even though the extension version of Ruffle is loaded, the preferences are loaded from the webpage instead of from the extension". You can see the full Discord conversation here: https://discord.com/channels/610531541889581066/722872096002408529/911812753604378634.

    Expected behavior

    I expected there to be a download option in the context menu.

    Affected platform

    Browser's extension

    Operating system

    Windows 10

    Browser

    Microsoft Edge Version 96.0.1054.29 (Official build) (64-bit)

    Additional information

    No response

    bug extension 
    opened by MaverickHunter07 3
  • Problem displaying image at http://buyingtime.webcomic.ws/comics/30/

    Problem displaying image at http://buyingtime.webcomic.ws/comics/30/

    Describe the bug

    image

    The webpage pictured above is from a webcomic that uses Flash animation. It seems what was intended to be a filter or background effect is instead covering the entire image.

    Expected behavior

    The image should be of a cinema audience as they are reacting to the film showing offscreen but instead a flashing colored square is shown.

    Affected platform

    Browser's extension

    Operating system

    Windows 10

    Browser

    Google Chrome

    Additional information

    No response

    bug 
    opened by jonathancreedon 0
Releases(nightly-2021-11-24)
Owner
Ruffle
Flash Player emulator written in Rust
Ruffle
Chip8 emulator written in pure rust, using rust-sdl2 for graphics

Rust-8 chip8 emulator written in rust, using rust-sdl2 for graphics. Features Fully implemented all 35 original chip8 opcodes. This emulator does NOT

Chris Hinson 2 Nov 28, 2021
Commodore 64 emulator written in Rust

Rust64 - a C64 emulator written in Rust This is my attempt to study the Rust programming language and have fun at the same time. The goal is to presen

Krzysztof Kondrak 191 Nov 29, 2021
A Game Boy research project and emulator written in Rust

Mooneye GB Mooneye GB is a Game Boy research project and emulator written in Rust. The main goals of this project are accuracy and documentation. Some

Joonas Javanainen 696 Nov 24, 2021
RustBoyAdvance-NG is a Nintendo™ Game Boy Advance emulator and debugger, written in the rust programming language.

RustBoyAdvance-NG Nintendo GameBoy Advance ™ emulator and debugger, written in rust. WebAssembly Demo: https://michelhe.github.io/rustboyadvance-ng/ P

MishMish 418 Nov 18, 2021
An NES emulator written in Rust

Pinky Pinky is an NES emulator written in Rust completely from scratch based only on publicly available documentation. You can run it in your Web brow

Koute 648 Nov 17, 2021
NES emulator written in Rust

sprocketnes is an emulator for the Nintendo Entertainment System written in the Rust programming language. Its purpose is to serve as a technology dem

Patrick Walton 691 Nov 22, 2021
ZX Spectrum emulator written in Rust

rustzx ZX Spectrum emulator which I writing in rust. I develop this project just for fun and for learning the basics of computer architecture. License

Vladislav Nikonov 95 Nov 22, 2021
CHIP-8 emulator written in Rust

CHIP-8 emulator written in Rust. This is intended to be a project for gaining experience writing emulators and practice Rust.

Pedro Rodrigues 4 May 21, 2021
A 6502 emulator written in Rust.

v6502 This package contains an emulator for the 6502 microprocessor. It doesn't support binary decimal (BCD) mode yet. To run the debug version: cargo

Andrew Young 4 Nov 14, 2021
Spaghetti Chip8 Emulator Written In Rust

How to run? Command is simple: cargo run FILENAME. files are stored in the /c8games folder, use one of them. Example: cargo run INVADERS Keymap use 1

Can 3 Aug 19, 2021
Non cycle-accurate emulator of the 6502 cpu, written in pure rust

CPU 6502 A non cycle-accurate emulator implementing all legal 6502 opcodes. What does non cycle-accurate mean? Every instruction on the 6502 takes a n

Pietro 8 Nov 16, 2021
Experimental Nintendo Switch Emulator written in Rust

Kaminari Experimental Nintendo Switch Emulator written in Rust Usage You'll need to install Rust. rusc >= 1.55.0 rustup >= 1.24.3 Disclaimer Kaminari

SSebigo 5 Oct 18, 2021
A barely functional terminal emulator written in Rust. For nothing but fun.

Nothing much to say now. The basic architecture (kind of) so far is: ┌────────┐ ┌──────────────────┐ │ ptm │◀──────▶│ device::Shell │ └─┬

Huy 4 Oct 15, 2021
A Chip8 Emulator written in Rust

Chipper: Chipper is a Chip8 Emulator written in Rust. It currently supports a few known quirks of the Chip8 varieties. I intend on making it support t

Elijah Hartvigsen 2 Nov 29, 2021
A Gameboy Emulator in Rust

RBoy A Gameboy Color Emulator written in Rust Implemented CPU All instructions correct All timings correct Double speed mode GPU Normal mode Color mod

Mathijs van de Nes 444 Nov 22, 2021
RGB (Rust Game Boy) is a simple emulator for the original game boy

RGB RGB (Rust Game Boy) is a simple emulator for the original game boy and the color game boy. Warning: This no longer compiles in the latest versions

Niven Achenjang 17 Nov 14, 2021
Full featured Cross-platform GameBoy emulator by Rust. Forever boys!.

Gameboy Full featured Cross-platform GameBoy emulator. Forever boys!. You can start a game with the following command, here with a built-in game "Boxe

Mohanson 979 Nov 25, 2021
NES emulator in rust

NES emulator in Rust plastic is a NES emulator built from scratch using Rust. This is a personal project for fun and to experience emulating hardware

Amjad Alsharafi 22 Nov 8, 2021
Intel 8080 cpu emulator by Rust

i8080 i8080 is a emulator for Intel 8080 cpu. 8080 Programmers Manual 8080 opcodes [dependencies] i8080 = { git = "https://github.com/mohanson/i8080"

Mohanson 56 Nov 22, 2021