diff --git a/core/src/avm1/activation.rs b/core/src/avm1/activation.rs index f881dae22..bd96ddb82 100644 --- a/core/src/avm1/activation.rs +++ b/core/src/avm1/activation.rs @@ -1340,6 +1340,29 @@ impl<'a, 'gc: 'a> Activation<'a, 'gc> { context.navigator.spawn_future(process); } + return Ok(FrameControl::Continue); + } else if window_target.starts_with("_level") && url.len() > 6 { + // target of `_level#` indicates a `loadMovieNum` call. + match window_target[6..].parse::() { + Ok(level_id) => { + let fetch = context.navigator.fetch(&url, RequestOptions::get()); + let level = self.resolve_level(level_id, context); + + let process = context.load_manager.load_movie_into_clip( + context.player.clone().unwrap(), + level, + fetch, + None, + ); + context.navigator.spawn_future(process); + } + Err(e) => log::warn!( + "Couldn't parse level id {} for action_get_url_2: {}", + url, + e + ), + } + return Ok(FrameControl::Continue); } else { let vars = match NavigationMethod::from_send_vars_method(swf_method) { @@ -1353,7 +1376,6 @@ impl<'a, 'gc: 'a> Activation<'a, 'gc> { vars, ); } - Ok(FrameControl::Continue) } diff --git a/core/tests/swfs/avm1/loadmovienum/output.txt b/core/tests/swfs/avm1/loadmovienum/output.txt index 5b75abd83..09b8f1d67 100644 --- a/core/tests/swfs/avm1/loadmovienum/output.txt +++ b/core/tests/swfs/avm1/loadmovienum/output.txt @@ -1,2 +1,3 @@ -Loading movie +Loading movies +Child movie loaded! Child movie loaded! diff --git a/core/tests/swfs/avm1/loadmovienum/test.fla b/core/tests/swfs/avm1/loadmovienum/test.fla index d10618bf1..30f37787c 100644 Binary files a/core/tests/swfs/avm1/loadmovienum/test.fla and b/core/tests/swfs/avm1/loadmovienum/test.fla differ diff --git a/core/tests/swfs/avm1/loadmovienum/test.swf b/core/tests/swfs/avm1/loadmovienum/test.swf index ca376356f..bafc5ab1d 100644 Binary files a/core/tests/swfs/avm1/loadmovienum/test.swf and b/core/tests/swfs/avm1/loadmovienum/test.swf differ