@@ -175,7 +175,7 @@ pub struct MovieClipData<'gc> {
175
175
/// trigger on this clip rather than any input-eligible children.
176
176
button_mode : Cell < bool > ,
177
177
last_queued_script_frame : Option < FrameNumber > ,
178
- queued_script_frame : FrameNumber ,
178
+ queued_script_frame : Option < FrameNumber > ,
179
179
queued_goto_frame : Option < FrameNumber > ,
180
180
drop_target : Option < DisplayObject < ' gc > > ,
181
181
@@ -220,7 +220,7 @@ impl<'gc> MovieClip<'gc> {
220
220
avm2_use_hand_cursor : Cell :: new ( true ) ,
221
221
button_mode : Cell :: new ( false ) ,
222
222
last_queued_script_frame : None ,
223
- queued_script_frame : 0 ,
223
+ queued_script_frame : None ,
224
224
queued_goto_frame : None ,
225
225
drop_target : None ,
226
226
hit_area : None ,
@@ -263,7 +263,7 @@ impl<'gc> MovieClip<'gc> {
263
263
avm2_use_hand_cursor : Cell :: new ( true ) ,
264
264
button_mode : Cell :: new ( false ) ,
265
265
last_queued_script_frame : None ,
266
- queued_script_frame : 0 ,
266
+ queued_script_frame : None ,
267
267
queued_goto_frame : None ,
268
268
drop_target : None ,
269
269
hit_area : None ,
@@ -309,7 +309,7 @@ impl<'gc> MovieClip<'gc> {
309
309
avm2_use_hand_cursor : Cell :: new ( true ) ,
310
310
button_mode : Cell :: new ( false ) ,
311
311
last_queued_script_frame : None ,
312
- queued_script_frame : 0 ,
312
+ queued_script_frame : None ,
313
313
queued_goto_frame : None ,
314
314
drop_target : None ,
315
315
hit_area : None ,
@@ -365,7 +365,7 @@ impl<'gc> MovieClip<'gc> {
365
365
avm2_use_hand_cursor : Cell :: new ( true ) ,
366
366
button_mode : Cell :: new ( false ) ,
367
367
last_queued_script_frame : None ,
368
- queued_script_frame : 0 ,
368
+ queued_script_frame : None ,
369
369
queued_goto_frame : None ,
370
370
drop_target : None ,
371
371
hit_area : None ,
@@ -432,7 +432,7 @@ impl<'gc> MovieClip<'gc> {
432
432
avm2_use_hand_cursor : Cell :: new ( true ) ,
433
433
button_mode : Cell :: new ( false ) ,
434
434
last_queued_script_frame : None ,
435
- queued_script_frame : 0 ,
435
+ queued_script_frame : None ,
436
436
queued_goto_frame : None ,
437
437
drop_target : None ,
438
438
hit_area : None ,
@@ -1571,7 +1571,7 @@ impl<'gc> MovieClip<'gc> {
1571
1571
write. current_frame += 1 ;
1572
1572
}
1573
1573
1574
- write. queued_script_frame = write. current_frame ;
1574
+ write. queued_script_frame = Some ( write. current_frame ) ;
1575
1575
if write. last_queued_script_frame != Some ( write. current_frame ) {
1576
1576
// We explicitly clear this variable since AS3 may later GOTO back
1577
1577
// to the already-ran frame. Since the frame number *has* changed
@@ -2631,16 +2631,16 @@ impl<'gc> TDisplayObject<'gc> for MovieClip<'gc> {
2631
2631
let avm2_object = write. object . and_then ( |o| o. as_avm2_object ( ) ) ;
2632
2632
2633
2633
if let Some ( avm2_object) = avm2_object {
2634
- let frame_id = write. queued_script_frame ;
2635
- {
2634
+ if let Some ( frame_id) = write. queued_script_frame {
2636
2635
// If we are already executing frame scripts, then we shouldn't
2637
2636
// run frame scripts recursively. This is because AVM2 can run
2638
2637
// gotos, which will both queue and run frame scripts for the
2639
2638
// whole movie again. If a goto is attempting to queue frame
2640
2639
// scripts on us AGAIN, we should allow the current stack to
2641
2640
// wind down before handling that.
2642
2641
if !write. contains_flag ( MovieClipFlags :: EXECUTING_AVM2_FRAME_SCRIPT ) {
2643
- let is_fresh_frame = write. last_queued_script_frame != Some ( frame_id) ;
2642
+ let is_fresh_frame =
2643
+ write. queued_script_frame != write. last_queued_script_frame ;
2644
2644
2645
2645
if is_fresh_frame {
2646
2646
if let Some ( Some ( callable) ) =
0 commit comments