diff --git a/core/src/loader.rs b/core/src/loader.rs index 3c6064249..0b93c08b7 100644 --- a/core/src/loader.rs +++ b/core/src/loader.rs @@ -431,6 +431,8 @@ impl<'gc> Loader<'gc> { .upgrade() .expect("Could not upgrade weak reference to player"); + let mut replacing_root_movie = false; + Box::pin(async move { player .lock() @@ -448,6 +450,10 @@ impl<'gc> Loader<'gc> { _ => unreachable!(), }; + if let Some(root) = uc.levels.get(&0).copied() { + replacing_root_movie = DisplayObject::ptr_eq(clip, root); + } + clip.as_movie_clip().unwrap().unload(uc); clip.as_movie_clip() @@ -476,6 +482,10 @@ impl<'gc> Loader<'gc> { }); if let Ok((length, movie)) = data { let movie = Arc::new(movie); + if replacing_root_movie { + player.lock().unwrap().set_root_movie(movie); + return Ok(()); + } player .lock() diff --git a/core/src/player.rs b/core/src/player.rs index c8432c88c..7fce080c5 100644 --- a/core/src/player.rs +++ b/core/src/player.rs @@ -415,12 +415,14 @@ impl Player { context.levels.insert(0, root); // Load and parse the device font. - let device_font = - Self::load_device_font(context.gc_context, DEVICE_FONT_TAG, context.renderer); - if let Err(e) = &device_font { - log::error!("Unable to load device font: {}", e); + if context.library.device_font().is_none() { + let device_font = + Self::load_device_font(context.gc_context, DEVICE_FONT_TAG, context.renderer); + if let Err(e) = &device_font { + log::error!("Unable to load device font: {}", e); + } + context.library.set_device_font(device_font.ok()); } - context.library.set_device_font(device_font.ok()); // Set the version parameter on the root. let mut activation = Activation::from_stub(