Commit Graph

1886 Commits

Author SHA1 Message Date
Mike Welsh 0482d1c290 avm1: Stop execution if base clip is removed (fix #893)
Stop execution of the current stack frame if the base clip was
removed (for example, due to a goto).
2020-10-14 18:30:42 -07:00
Nathan Adams 6d9155477c core: Add flashvars support - #312 2020-10-12 15:28:16 -07:00
Mike Welsh a6b952e44e core: Switch from libflate to flate2 2020-10-12 13:47:35 -07:00
Mike Welsh 2c2aa82730 chore: Remove debug message 2020-10-12 13:30:03 -07:00
Nathan Adams fd6431f724 core: Don't use std Instant as it doesn't work for web, use a wrapper 2020-10-11 13:34:15 -07:00
Nathan Adams 4abd02e2f7 core: Implement a timeout for script execution, defaulting to 15 seconds. Fixes #554 2020-10-11 13:34:15 -07:00
Mike Welsh 137ac2887e core: Don't mouse pick children when invisible (fix #1242) 2020-10-11 04:10:25 -07:00
Mike Welsh 2c9cf6802d core: Squelch false AS3 error before initial SWF loads 2020-10-10 19:28:01 -07:00
Mike Welsh 5c3dd25638 avm1: Avoid unwrap in Sound constructor
At least avoid the panic in this case, but it can possibly fail
(see #701).
2020-10-10 18:13:08 -07:00
dependabot-preview[bot] 2c2a70e714 build(deps): bump syn from 1.0.43 to 1.0.44
Bumps [syn](https://github.com/dtolnay/syn) from 1.0.43 to 1.0.44.
- [Release notes](https://github.com/dtolnay/syn/releases)
- [Commits](https://github.com/dtolnay/syn/compare/1.0.43...1.0.44)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-10 16:35:50 -07:00
Mike Welsh 23660e49c9 core: Avoid panic due to invalid style IDs
If the shape converter encountered a fill/line style with an
ID > the number of styles, Ruffle would panic as it tried to grab
the non-existent style. This could occur if we mis-parsed some
shape data, or the SWF contained incorrect data. Now we the invalid
style is gracefully ignored.
2020-10-10 16:35:37 -07:00
Mike Welsh 10aaae9247 chore: Appease nightly clippy 2020-10-10 00:03:25 -07:00
dependabot-preview[bot] 4af9632761 build(deps): bump syn from 1.0.42 to 1.0.43
Bumps [syn](https://github.com/dtolnay/syn) from 1.0.42 to 1.0.43.
- [Release notes](https://github.com/dtolnay/syn/releases)
- [Commits](https://github.com/dtolnay/syn/compare/1.0.42...1.0.43)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-09 12:22:43 -07:00
David Wendt 5abebd5433 avm2: Yield an error if the caller specifies a label/scene pair and the label is not present within the scene. 2020-10-06 06:03:22 -07:00
David Wendt 1a10f1e004 avm2: Lock old movies (SWFv8 and earlier) to always use AVM1 2020-10-06 06:03:22 -07:00
David Wendt 693e56dc67 core: Always instantiate a new movie's library before creating it's root movieclip. 2020-10-06 06:03:22 -07:00
David Wendt 7c719bfb0c Only the first tag in a SWF file should be trusted to deliver file attributes. 2020-10-06 06:03:22 -07:00
David Wendt ddccede9d3 avm2: Make VM type non-optional.
This has the side effect of forcing the AVM check to happen at the time of library construction, which is already very early on in movie loading.
2020-10-06 06:03:22 -07:00
David Wendt ef665acaec avm2: Movie clips not explicitly granted a `symbol_class` should be constructed using the `MovieClip` class directly 2020-10-06 06:03:22 -07:00
David Wendt 12cf8022cd core: Remove useless uses of `matches!`. 2020-10-06 06:03:22 -07:00
David Wendt 007d54b389 avm2: Remove redundant implementations of `prev_frame` and `next_frame` 2020-10-06 06:03:22 -07:00
David Wendt 4c44ca8e77 avm2: Non-integer numbers should be handled as strings and integer-parsible strings should be handled as numbers. 2020-10-06 06:03:22 -07:00
David Wendt e2f21d0a7d avm2: Retire old references to the "VM tendency" nomenclature 2020-10-06 06:03:22 -07:00
David Wendt 896a5b37a5 avm2: Implement `new MovieClip()`. 2020-10-06 06:03:22 -07:00
David Wendt d399811eb8 avm2: Allow `MovieClip` to be constructed by users. 2020-10-06 06:03:22 -07:00
David Wendt 50dd9a6733 avm2: Implement the programmatically-playing flag that governs `isPlaying` behavior. 2020-10-06 06:03:22 -07:00
David Wendt 035c841eb5 tests: Add tests for `gotoAndStop` and rename the `gotoAndPlay` one 2020-10-06 06:03:22 -07:00
David Wendt 1f29497b8c tests: Add test for AS3 movieclip play 2020-10-06 06:03:22 -07:00
David Wendt 8152400a39 avm2: Implement `MovieClip.scenes`. 2020-10-06 06:03:22 -07:00
David Wendt c682868205 avm2: Implement `MovieClip.currentScene` 2020-10-06 06:03:22 -07:00
David Wendt 2483201bcd avm2: Store the lengths of each scene in a movie. 2020-10-06 06:03:22 -07:00
David Wendt 8a13d5fe10 avm2: Implement `Scene` object. 2020-10-06 06:03:22 -07:00
David Wendt 5e31c44b81 All objects should default to `toString`ing with their own classname. 2020-10-06 06:03:22 -07:00
David Wendt de186ed5f3 avm2: Implement `MovieClip.currentLabels` 2020-10-06 06:03:22 -07:00
David Wendt 77a86aef9b avm2: Implement `FrameLabel`. 2020-10-06 06:03:22 -07:00
David Wendt 86b07c0007 tests: Add tests for `prevScene` and `nextScene`. 2020-10-06 06:03:22 -07:00
David Wendt 542147d657 avm2: Run all AVM2 frame scripts on the action queue.
This is the same way that AVM1 actions run and it appears that frame scripts work exactly the same way. It fixes all outstanding bugs with movie clip navigation in AVM2 and allows me to remove a lot of weird workarounds I was writing for the old, incorrect behavior.

I'm also removing the "last run script frame" rule as `run_frame_internal` already had rules to prevent stopped clips from rerunning actions.
2020-10-06 06:03:22 -07:00
David Wendt 996d7528d5 avm2: Implement `prevScene` and `nextScene`. 2020-10-06 06:03:22 -07:00
David Wendt 864c6a37f9 avm2: Dynamic properties should be retrievable before they are actually set. 2020-10-06 06:03:22 -07:00
David Wendt 6d0befad97 avm2: Implement `prevFrame` and `nextFrame`, with tests. 2020-10-06 06:03:22 -07:00
David Wendt bcf08b5bf7 avm2: Frame scripts should run when the frame number has changed, regardless of playhead state. 2020-10-06 06:03:22 -07:00
David Wendt 97048fb8bd avm2: Implement `stop` and `play`, with tests for the former. 2020-10-06 06:03:22 -07:00
David Wendt c8cd4d09cd core: Don't run frame scripts on stopped movie clips. 2020-10-06 06:03:22 -07:00
David Wendt 556c951b1c avm2: Implement `gotoAndPlay`/`gotoAndStop`, with test. 2020-10-06 06:03:22 -07:00
David Wendt 3513918149 avm2: Allow typechecking by prototype, rather than just by constructor. 2020-10-06 06:03:22 -07:00
David Wendt e837840bba core: Always skip frames after the current frame when getting the current scene or label. 2020-10-06 06:03:22 -07:00
David Wendt 5b83f6b4cc avm2: Add test for movieclip-specific properties. 2020-10-06 06:03:22 -07:00
David Wendt 3b6f8cff4e avm2: Implement `framesLoaded`, `isPlaying`, and `totalFrames`. 2020-10-06 06:03:22 -07:00
David Wendt 7ca34452a1 avm2: Implement `currentFrameLabel` and `currentFrame`. 2020-10-06 06:03:22 -07:00
David Wendt 6124ed468f core: Add `current_label` for getting the current label on a given clip.
This also fixes `current_scene` as well.
2020-10-06 06:03:22 -07:00