@@ -370,7 +370,7 @@ export const Moves: {[k: string]: ModdedMoveData} = {
370
370
onSideStart ( side ) {
371
371
this . add ( '-sidestart' , side , 'move: Light Screen' ) ;
372
372
} ,
373
- onSideResidualOrder : 21 ,
373
+ onSideResidualOrder : 9 ,
374
374
onSideEnd ( side ) {
375
375
this . add ( '-sideend' , side , 'move: Light Screen' ) ;
376
376
} ,
@@ -516,6 +516,21 @@ export const Moves: {[k: string]: ModdedMoveData} = {
516
516
accuracy : true ,
517
517
ignoreAccuracy : false ,
518
518
} ,
519
+ perishsong : {
520
+ inherit : true ,
521
+ condition : {
522
+ duration : 4 ,
523
+ onEnd ( target ) {
524
+ this . add ( '-start' , target , 'perish0' ) ;
525
+ target . faint ( ) ;
526
+ } ,
527
+ onResidualOrder : 4 ,
528
+ onResidual ( pokemon ) {
529
+ const duration = pokemon . volatiles [ 'perishsong' ] . duration ;
530
+ this . add ( '-start' , pokemon , 'perish' + duration ) ;
531
+ } ,
532
+ } ,
533
+ } ,
519
534
petaldance : {
520
535
inherit : true ,
521
536
onMoveFail ( target , source , move ) {
@@ -565,7 +580,7 @@ export const Moves: {[k: string]: ModdedMoveData} = {
565
580
onSideStart ( side ) {
566
581
this . add ( '-sidestart' , side , 'Reflect' ) ;
567
582
} ,
568
- onSideResidualOrder : 21 ,
583
+ onSideResidualOrder : 9 ,
569
584
onSideEnd ( side ) {
570
585
this . add ( '-sideend' , side , 'Reflect' ) ;
571
586
} ,
@@ -606,6 +621,46 @@ export const Moves: {[k: string]: ModdedMoveData} = {
606
621
} ,
607
622
priority : - 1 ,
608
623
} ,
624
+ safeguard : {
625
+ inherit : true ,
626
+ condition : {
627
+ duration : 5 ,
628
+ durationCallback ( target , source , effect ) {
629
+ if ( source ?. hasAbility ( 'persistent' ) ) {
630
+ this . add ( '-activate' , source , 'ability: Persistent' , effect ) ;
631
+ return 7 ;
632
+ }
633
+ return 5 ;
634
+ } ,
635
+ onSetStatus ( status , target , source , effect ) {
636
+ if ( ! effect || ! source ) return ;
637
+ if ( effect . id === 'yawn' ) return ;
638
+ if ( effect . effectType === 'Move' && effect . infiltrates && ! target . isAlly ( source ) ) return ;
639
+ if ( target !== source ) {
640
+ this . debug ( 'interrupting setStatus' ) ;
641
+ if ( effect . id === 'synchronize' || ( effect . effectType === 'Move' && ! effect . secondaries ) ) {
642
+ this . add ( '-activate' , target , 'move: Safeguard' ) ;
643
+ }
644
+ return null ;
645
+ }
646
+ } ,
647
+ onTryAddVolatile ( status , target , source , effect ) {
648
+ if ( ! effect || ! source ) return ;
649
+ if ( effect . effectType === 'Move' && effect . infiltrates && ! target . isAlly ( source ) ) return ;
650
+ if ( ( status . id === 'confusion' || status . id === 'yawn' ) && target !== source ) {
651
+ if ( effect . effectType === 'Move' && ! effect . secondaries ) this . add ( '-activate' , target , 'move: Safeguard' ) ;
652
+ return null ;
653
+ }
654
+ } ,
655
+ onSideStart ( side ) {
656
+ this . add ( '-sidestart' , side , 'Safeguard' ) ;
657
+ } ,
658
+ onSideResidualOrder : 8 ,
659
+ onSideEnd ( side ) {
660
+ this . add ( '-sideend' , side , 'Safeguard' ) ;
661
+ } ,
662
+ } ,
663
+ } ,
609
664
selfdestruct : {
610
665
inherit : true ,
611
666
noSketch : true ,
0 commit comments