showModifierProvokedChanges(modifier, forRemove) {
    const showDuration = 0.0;

    if (this.canChangeState() && modifier != null && modifier instanceof SDK.ModifierProvoked) {
      const provokeModifier = modifier.getAppliedByModifier();
      if (provokeModifier instanceof SDK.ModifierProvoke) {
        const sourceSdkCard = provokeModifier.getCardAffected();
        const targetSdkCard = this.getSdkCard();
        const lifeDuration = 0.6;
        const travelDuration = 0.1;

        // re-set the unit's state so it grabs the idle state since the unit is provoked
        if (!this.getHasActiveState()) {
          this.showNoState();
          this.showBaseState();
        }

        if (!forRemove) {
          this.whenResourcesReady(this.getCardResourceRequestId()).then((cardResourceRequestId) => {
            if (!this.getAreResourcesValid(cardResourceRequestId)) return; // card has changed

            const colorForOwnerTint = this._getColorForOwnerTint() || cc.color(255, 255, 255);
            this.entitySprite.runAction(cc.sequence(
              cc.delayTime(lifeDuration),
              cc.tintTo(0.2, 0, 0, 0),
              cc.delayTime(0.2),
              cc.tintTo(0.2, colorForOwnerTint.r, colorForOwnerTint.g, colorForOwnerTint.b),
            ));
          });

          const sourceScreenPosition = UtilsEngine.transformBoardToTileMap(sourceSdkCard.getPosition());
          const targetScreenPosition = UtilsEngine.transformBoardToTileMap(targetSdkCard.getPosition());

          // show particles
          const particleSystem = BaseParticleSystem.create(RSX.ptcl_soot_ball.plist);
          particleSystem.setAutoRemoveOnFinish(false);
          particleSystem.setNeedsDepthTest(true);
          particleSystem.setPixelGridAligned(true);
          particleSystem.setPositionType(cc.ParticleSystem.TYPE_FOLLOW);
          particleSystem.setDuration(0.0);
          particleSystem.setScale(0.8);
          particleSystem.setPosition(sourceScreenPosition);
          this.getScene().getGameLayer().addNodes(particleSystem);

          // move fx sprites
          particleSystem.runAction(cc.sequence(
            cc.delayTime(lifeDuration),
            cc.moveTo(travelDuration, targetScreenPosition),
            cc.delayTime(lifeDuration),
            cc.callFunc(function () {
              this.destroy(CONFIG.FADE_MEDIUM_DURATION);
            }.bind(particleSystem)),
          ));
        }
      }
    }

    return showDuration;
  }
Shows predefined fx for the application or removal of provoked modifiers.
@param {SDK.ModifierProvoked} modifier
@param {Boolean} [forRemove=false]
@returns {Number} show duration