avm1: Correct depth calculation for AVM1 clips pending removal and add tests

This commit is contained in:
CUB3D 2023-01-25 18:07:50 +00:00 committed by kmeisthax
parent 6b6e07c7cb
commit 48f4df51a5
6 changed files with 22 additions and 5 deletions

View File

@ -12,7 +12,7 @@ mod callable_value;
mod debug; mod debug;
mod error; mod error;
mod fscommand; mod fscommand;
mod globals; pub(crate) mod globals;
mod object; mod object;
mod property; mod property;
mod property_map; mod property_map;

View File

@ -1168,7 +1168,7 @@ pub fn create_globals<'gc>(
/// The depth of objects placed on the timeline in the Flash IDE start from 0 in the SWF, /// The depth of objects placed on the timeline in the Flash IDE start from 0 in the SWF,
/// but are negative when queried from MovieClip.getDepth(). /// but are negative when queried from MovieClip.getDepth().
/// Add this to convert from AS -> SWF depth. /// Add this to convert from AS -> SWF depth.
const AVM_DEPTH_BIAS: i32 = 16384; pub const AVM_DEPTH_BIAS: i32 = 16384;
/// The maximum depth that the AVM will allow you to swap or attach clips to. /// The maximum depth that the AVM will allow you to swap or attach clips to.
/// What is the derivation of this number...? /// What is the derivation of this number...?

View File

@ -915,7 +915,8 @@ impl<'gc> ChildContainer<'gc> {
} }
let cur_depth = child.depth(); let cur_depth = child.depth();
child.set_depth(context.gc_context, -cur_depth); // Note that the depth returned by AS will be offset by the `AVM_DEPTH_BIAS`, so this is really `-(cur_depth+1+AVM_DEPTH_BIAS)`
child.set_depth(context.gc_context, -cur_depth - 1);
if let Some(mc) = child.as_movie_clip() { if let Some(mc) = child.as_movie_clip() {
// Clip events should still fire // Clip events should still fire

View File

@ -1,4 +1,9 @@
Frame 1: Frame 1:
clip.depth = -16383
clip2.depth = -16381
clip3.depth = 0
clip4.depth = 1
clip5.depth = -16379
clip = _level0.clip clip = _level0.clip
clip._x = 125.5 clip._x = 125.5
clip2 = _level0.clip2 clip2 = _level0.clip2
@ -15,6 +20,10 @@ clip2 = undefined
clip3 = undefined clip3 = undefined
clip4 = undefined clip4 = undefined
clip5 = _level0.clip5 clip5 = _level0.clip5
clip.depth = -16386
clip2.depth = undefined
Fixme(5492)
clip5.depth = -16390
End frame 2 End frame 2
unload clipEvent unload clipEvent
unload clipEvent 2 unload clipEvent 2
@ -25,12 +34,19 @@ clip2 = undefined
clip3 = undefined clip3 = undefined
clip4 = undefined clip4 = undefined
clip5 = undefined clip5 = undefined
clip.depth = -16386
clip2.depth = undefined
Fixme(5492)
clip5.depth = undefined
End frame 3 End frame 3
Frame 4 Frame 4
clip = undefined clip = undefined
clip._x = undefined clip._x = undefined
clip2 = undefined clip2 = undefined
clip3 = undefined Fixme(5492)
clip4 = undefined
clip5 = undefined clip5 = undefined
clip.depth = undefined
clip2.depth = undefined
Fixme(5492)
clip5.depth = undefined
End frame 4 End frame 4