From 7af91e2360b60aee712b0f022c609967106ae13d Mon Sep 17 00:00:00 2001 From: Shriansh Chari <30420527+shrianshChari@users.noreply.github.com> Date: Wed, 24 Jul 2024 10:47:54 -0700 Subject: [PATCH 1/4] Add Temper Flare anim --- .../src/battle-animations-moves.ts | 189 ++++++++++++++++++ 1 file changed, 189 insertions(+) diff --git a/play.pokemonshowdown.com/src/battle-animations-moves.ts b/play.pokemonshowdown.com/src/battle-animations-moves.ts index adb2406a24..40013d285e 100644 --- a/play.pokemonshowdown.com/src/battle-animations-moves.ts +++ b/play.pokemonshowdown.com/src/battle-animations-moves.ts @@ -35885,6 +35885,195 @@ export const BattleMoveAnims: AnimTable = { BattleOtherAnims.contactattack.anim(scene, [attacker, defender]); }, }, + temperflare: { + anim(scene, [attacker, ...defenders]) { + scene.backgroundEffect('#B84038', 600, 0.3) + attacker.anim({ + y: attacker.y + 20, + time: 175, + }, 'swing'); + attacker.anim({ + y: attacker.y, + time: 125, + }, 'accel'); + attacker.anim({ + y: attacker.y - 10, + yscale: 1, + time: 75, + }); + attacker.anim({ + y: attacker.y + 10, + yscale: 0.9, + time: 100, + }); + attacker.anim({ + y: attacker.y - 5, + yscale: 1, + time: 100, + }); + attacker.anim({ + y: attacker.y + 5, + time: 100, + }); + attacker.anim({ + y: attacker.y - 5, + time: 100, + }); + attacker.anim({ + y: attacker.y + 5, + time: 100, + }); + attacker.anim({ + y: attacker.y - 5, + time: 100, + }); + attacker.anim({ + y: attacker.y + 5, + time: 100, + }); + attacker.anim({ + y: attacker.y - 2, + time: 100, + }); + attacker.anim({ + y: attacker.y + 2, + time: 100, + }); + attacker.anim({ + y: attacker.y, + time: 100, + }); + + scene.showEffect('fireball', { + x: attacker.x, + y: attacker.y, + z: attacker.z, + scale: 0.4, + opacity: 1, + time: 400 + }, { + x: attacker.x - 50, + y: attacker.y, + z: attacker.z, + scale: 0.8, + opacity: 1, + time: 500, + }, 'decel', 'fade'); + + scene.showEffect('fireball', { + x: attacker.x, + y: attacker.y, + z: attacker.z, + scale: 0.4, + opacity: 1, + time: 400 + }, { + x: attacker.x - 30, + y: attacker.y - 40, + z: attacker.z, + scale: 0.8, + opacity: 1, + time: 500, + }, 'decel', 'fade'); + + scene.showEffect('fireball', { + x: attacker.x, + y: attacker.y, + z: attacker.z, + scale: 0.4, + opacity: 1, + time: 400 + }, { + x: attacker.x, + y: attacker.y - 50, + z: attacker.z, + scale: 0.8, + opacity: 1, + time: 500, + }, 'decel', 'fade'); + + scene.showEffect('fireball', { + x: attacker.x, + y: attacker.y, + z: attacker.z, + scale: 0.4, + opacity: 1, + time: 400 + }, { + x: attacker.x + 30, + y: attacker.y - 40, + z: attacker.z, + scale: 0.8, + opacity: 1, + time: 500, + }, 'decel', 'fade'); + + scene.showEffect('fireball', { + x: attacker.x, + y: attacker.y, + z: attacker.z, + scale: 0.4, + opacity: 1, + time: 400 + }, { + x: attacker.x + 50, + y: attacker.y, + z: attacker.z, + scale: 0.8, + opacity: 1, + time: 500, + }, 'decel', 'fade'); + + for (const defender of defenders) { + defender.delay(275); + defender.anim({ + y: defender.y - 10, + time: 75, + }); + defender.anim({ + y: defender.y + 10, + time: 100, + }); + defender.anim({ + y: defender.y - 5, + time: 100, + }); + defender.anim({ + y: defender.y + 5, + time: 100, + }); + defender.anim({ + y: defender.y - 5, + time: 100, + }); + defender.anim({ + y: defender.y + 5, + time: 100, + }); + defender.anim({ + y: defender.y - 5, + time: 100, + }); + defender.anim({ + y: defender.y + 5, + time: 100, + }); + defender.anim({ + y: defender.y - 2, + time: 100, + }); + defender.anim({ + y: defender.y + 2, + time: 100, + }); + defender.anim({ + y: defender.y, + time: 100, + }); + } + scene.wait(325); + }, + }, }; // placeholder animations From 708ca3bdf9724d181ea438f70dd82bd71512c3a0 Mon Sep 17 00:00:00 2001 From: Shriansh Chari <30420527+shrianshChari@users.noreply.github.com> Date: Tue, 6 Aug 2024 15:45:46 -0700 Subject: [PATCH 2/4] Modify animations for Stomping Tantrum and Temper Flare --- .../src/battle-animations-moves.ts | 397 +++++++++++------- 1 file changed, 251 insertions(+), 146 deletions(-) diff --git a/play.pokemonshowdown.com/src/battle-animations-moves.ts b/play.pokemonshowdown.com/src/battle-animations-moves.ts index 40013d285e..91ab37eadc 100644 --- a/play.pokemonshowdown.com/src/battle-animations-moves.ts +++ b/play.pokemonshowdown.com/src/battle-animations-moves.ts @@ -35885,9 +35885,10 @@ export const BattleMoveAnims: AnimTable = { BattleOtherAnims.contactattack.anim(scene, [attacker, defender]); }, }, - temperflare: { - anim(scene, [attacker, ...defenders]) { - scene.backgroundEffect('#B84038', 600, 0.3) + stompingtantrum: { + anim(scene, [attacker, defender]) { + BattleOtherAnims.anger.anim(scene, [attacker, defender]) + attacker.anim({ y: attacker.y + 20, time: 175, @@ -35897,181 +35898,286 @@ export const BattleMoveAnims: AnimTable = { time: 125, }, 'accel'); attacker.anim({ - y: attacker.y - 10, - yscale: 1, - time: 75, - }); - attacker.anim({ - y: attacker.y + 10, - yscale: 0.9, - time: 100, - }); - attacker.anim({ - y: attacker.y - 5, - yscale: 1, - time: 100, - }); - attacker.anim({ - y: attacker.y + 5, - time: 100, - }); - attacker.anim({ - y: attacker.y - 5, - time: 100, - }); - attacker.anim({ - y: attacker.y + 5, - time: 100, - }); - attacker.anim({ - y: attacker.y - 5, - time: 100, - }); - attacker.anim({ - y: attacker.y + 5, - time: 100, - }); - attacker.anim({ - y: attacker.y - 2, - time: 100, - }); - attacker.anim({ - y: attacker.y + 2, - time: 100, - }); + y: attacker.y + 40, + time: 175, + }, 'swing'); attacker.anim({ y: attacker.y, - time: 100, - }); + time: 75, + }, 'accel'); - scene.showEffect('fireball', { - x: attacker.x, - y: attacker.y, - z: attacker.z, + let xf = [1, -1, 1, -1]; + let yf = [1, -1, -1, 1]; + let xf2 = [1, 0, -1, 0]; + let yf2 = [0, 1, 0, -1]; + + scene.backgroundEffect('#000000', 1000, 0.3); + for (let i = 0; i < 4; i++) { + scene.showEffect('flareball', { + x: attacker.x, + y: attacker.y, + z: attacker.z, + scale: 0.3, + opacity: 0.8, + time: 500, + }, { + x: attacker.x + 120 * xf[i], + y: attacker.y, + z: attacker.z + 68 * yf[i], + scale: 0.5, + opacity: 0, + time: 800, + }, 'decel', 'fade', {filter: 'hue-rotate(-15deg) brightness(0.5) saturate(0.7)'}); + scene.showEffect('flareball', { + x: attacker.x, + y: attacker.y, + z: attacker.z, + scale: 0.3, + opacity: 0.8, + time: 500, + }, { + x: attacker.x + 113 * xf2[i], + y: attacker.y + 5, + z: attacker.z + 97 * yf2[i], + scale: 0.5, + opacity: 0, + time: 800, + }, 'decel', 'fade', {filter: 'hue-rotate(-15deg) brightness(0.5) saturate(0.7)'}); + } + + defender.delay(500); + + scene.showEffect('rock1', { + x: defender.x, + y: defender.y - 5, + z: defender.z, + scale: 0.2, + opacity: 1, + time: 800, + }, { + x: defender.x, + y: defender.y + 20, + z: defender.z, scale: 0.4, + opacity: 0, + time: 1100, + }, 'ballistic', 'fade') + + scene.showEffect('rock2', { + x: defender.x + 20, + y: defender.y - 5, + z: defender.z, + scale: 0.2, opacity: 1, - time: 400 + time: 800, }, { - x: attacker.x - 50, - y: attacker.y, - z: attacker.z, - scale: 0.8, + x: defender.x + 80, + y: defender.y + 20, + z: defender.z, + scale: 0.4, + opacity: 0, + time: 1100, + }, 'ballistic', 'fade') + + scene.showEffect('rock3', { + x: defender.x - 20, + y: defender.y - 5, + z: defender.z, + scale: 0.2, opacity: 1, - time: 500, - }, 'decel', 'fade'); + time: 800, + }, { + x: defender.x - 80, + y: defender.y + 20, + z: defender.z, + scale: 0.4, + opacity: 0, + time: 1100, + }, 'ballistic', 'fade') - scene.showEffect('fireball', { + scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, - scale: 0.4, - opacity: 1, - time: 400 + opacity: 0.3, + time: 550, }, { - x: attacker.x - 30, - y: attacker.y - 40, + x: defender.x, + y: defender.y, + z: defender.behind(-5), + time: 850, + }, 'accel', 'fade'); + scene.showEffect(attacker.sp, { + x: attacker.x, + y: attacker.y, z: attacker.z, - scale: 0.8, - opacity: 1, + opacity: 0.3, + time: 600, + }, { + x: defender.x, + y: defender.y, + z: defender.behind(-5), + time: 900, + }, 'accel', 'fade'); + attacker.anim({ + x: defender.x, + y: defender.y, + z: defender.behind(-5), + time: 300, + }, 'accel'); + attacker.anim({ time: 500, - }, 'decel', 'fade'); + }, 'ballistic2Back'); + defender.delay(280); + defender.anim({ + z: defender.behind(20), + time: 100, + }, 'swing'); + defender.anim({ + time: 300, + }, 'swing'); + } + }, + temperflare: { + anim(scene, [attacker, defender]) { + BattleOtherAnims.anger.anim(scene, [attacker, defender]) - scene.showEffect('fireball', { - x: attacker.x, + attacker.anim({ + y: attacker.y + 20, + time: 175, + }, 'swing'); + attacker.anim({ y: attacker.y, - z: attacker.z, + time: 125, + }, 'accel'); + attacker.anim({ + y: attacker.y + 40, + time: 175, + }, 'swing'); + attacker.anim({ + y: attacker.y, + time: 75, + }, 'accel'); + defender.delay(500); + + let xf = [1, -1, 1, -1]; + let yf = [1, -1, -1, 1]; + let xf2 = [1, 0, -1, 0]; + let yf2 = [0, 1, 0, -1]; + + scene.backgroundEffect('linear-gradient(#390000 30%, #B84038)', 1000, 0.3); + for (let i = 0; i < 4; i++) { + scene.showEffect('flareball', { + x: attacker.x, + y: attacker.y, + z: attacker.z, + scale: 0.3, + opacity: 0.8, + time: 500, + }, { + x: attacker.x + 120 * xf[i], + y: attacker.y, + z: attacker.z + 68 * yf[i], + scale: 0.5, + opacity: 0, + time: 800, + }, 'decel', 'fade', {filter: 'hue-rotate(-15deg)'}); + scene.showEffect('blackwisp', { + x: attacker.x + 120 * xf[i], + y: attacker.y, + z: attacker.z + 68 * yf[i], + scale: 0.5, + opacity: 0.5, + time: 650, + }, { + x: attacker.x + 120 * xf[i], + y: attacker.y + 30, + z: attacker.z + 68 * yf[i], + scale: 0.5, + opacity: 0, + time: 950, + }, 'decel', 'explode'); + scene.showEffect('flareball', { + x: attacker.x, + y: attacker.y, + z: attacker.z, + scale: 0.3, + opacity: 0.8, + time: 500, + }, { + x: attacker.x + 113 * xf2[i], + y: attacker.y + 5, + z: attacker.z + 97 * yf2[i], + scale: 0.5, + opacity: 0, + time: 800, + }, 'decel', 'fade', {filter: 'hue-rotate(-15deg)'}); + } + + scene.showEffect('fireball', { + x: defender.x + 20, + y: defender.y - 5, + z: defender.z, scale: 0.4, opacity: 1, - time: 400 + time: 800, }, { - x: attacker.x, - y: attacker.y - 50, - z: attacker.z, + x: defender.x + 80, + y: defender.y + 20, + z: defender.z, scale: 0.8, - opacity: 1, - time: 500, - }, 'decel', 'fade'); + opacity: 0, + time: 1100, + }, 'ballistic', 'fade') scene.showEffect('fireball', { - x: attacker.x, - y: attacker.y, - z: attacker.z, + x: defender.x, + y: defender.y - 5, + z: defender.z, scale: 0.4, opacity: 1, - time: 400 + time: 800, }, { - x: attacker.x + 30, - y: attacker.y - 40, - z: attacker.z, + x: defender.x, + y: defender.y + 20, + z: defender.z, scale: 0.8, - opacity: 1, - time: 500, - }, 'decel', 'fade'); + opacity: 0, + time: 1100, + }, 'ballistic', 'fade') scene.showEffect('fireball', { - x: attacker.x, - y: attacker.y, - z: attacker.z, + x: defender.x - 20, + y: defender.y - 5, + z: defender.z, scale: 0.4, opacity: 1, - time: 400 + time: 800, }, { - x: attacker.x + 50, - y: attacker.y, - z: attacker.z, + x: defender.x - 80, + y: defender.y + 20, + z: defender.z, scale: 0.8, - opacity: 1, + opacity: 0, + time: 1100, + }, 'ballistic', 'fade') + attacker.anim({ + x: defender.x, + y: defender.y, + z: defender.behind(-5), + time: 300, + }, 'accel'); + attacker.anim({ time: 500, - }, 'decel', 'fade'); - - for (const defender of defenders) { - defender.delay(275); - defender.anim({ - y: defender.y - 10, - time: 75, - }); - defender.anim({ - y: defender.y + 10, - time: 100, - }); - defender.anim({ - y: defender.y - 5, - time: 100, - }); - defender.anim({ - y: defender.y + 5, - time: 100, - }); - defender.anim({ - y: defender.y - 5, - time: 100, - }); - defender.anim({ - y: defender.y + 5, - time: 100, - }); - defender.anim({ - y: defender.y - 5, - time: 100, - }); - defender.anim({ - y: defender.y + 5, - time: 100, - }); - defender.anim({ - y: defender.y - 2, - time: 100, - }); - defender.anim({ - y: defender.y + 2, - time: 100, - }); - defender.anim({ - y: defender.y, - time: 100, - }); - } - scene.wait(325); + }, 'ballistic2Back'); + defender.delay(280); + defender.anim({ + z: defender.behind(20), + time: 100, + }, 'swing'); + defender.anim({ + time: 300, + }, 'swing'); }, }, }; @@ -36232,7 +36338,6 @@ BattleMoveAnims['gastroacid'] = {anim: BattleMoveAnims['toxic'].anim}; BattleMoveAnims['magnitude'] = {anim: BattleMoveAnims['earthquake'].anim}; BattleMoveAnims['fissure'] = {anim: BattleMoveAnims['earthquake'].anim}; BattleMoveAnims['landswrath'] = {anim: BattleMoveAnims['earthquake'].anim}; -BattleMoveAnims['stompingtantrum'] = {anim: BattleMoveAnims['bulldoze'].anim}; BattleMoveAnims['mindblown'] = {anim: BattleMoveAnims['iceball'].anim}; From fc7ffd7fab8619410a357eae666a4dafb8e74632 Mon Sep 17 00:00:00 2001 From: Shriansh Chari <30420527+shrianshChari@users.noreply.github.com> Date: Tue, 6 Aug 2024 15:48:20 -0700 Subject: [PATCH 3/4] Satisfy linter, move smoke after fireballs --- .../src/battle-animations-moves.ts | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/play.pokemonshowdown.com/src/battle-animations-moves.ts b/play.pokemonshowdown.com/src/battle-animations-moves.ts index 91ab37eadc..7aad3323f6 100644 --- a/play.pokemonshowdown.com/src/battle-animations-moves.ts +++ b/play.pokemonshowdown.com/src/battle-animations-moves.ts @@ -35887,7 +35887,7 @@ export const BattleMoveAnims: AnimTable = { }, stompingtantrum: { anim(scene, [attacker, defender]) { - BattleOtherAnims.anger.anim(scene, [attacker, defender]) + BattleOtherAnims.anger.anim(scene, [attacker, defender]); attacker.anim({ y: attacker.y + 20, @@ -35961,7 +35961,7 @@ export const BattleMoveAnims: AnimTable = { scale: 0.4, opacity: 0, time: 1100, - }, 'ballistic', 'fade') + }, 'ballistic', 'fade'); scene.showEffect('rock2', { x: defender.x + 20, @@ -35977,7 +35977,7 @@ export const BattleMoveAnims: AnimTable = { scale: 0.4, opacity: 0, time: 1100, - }, 'ballistic', 'fade') + }, 'ballistic', 'fade'); scene.showEffect('rock3', { x: defender.x - 20, @@ -35993,7 +35993,7 @@ export const BattleMoveAnims: AnimTable = { scale: 0.4, opacity: 0, time: 1100, - }, 'ballistic', 'fade') + }, 'ballistic', 'fade'); scene.showEffect(attacker.sp, { x: attacker.x, @@ -36036,11 +36036,11 @@ export const BattleMoveAnims: AnimTable = { defender.anim({ time: 300, }, 'swing'); - } + }, }, temperflare: { anim(scene, [attacker, defender]) { - BattleOtherAnims.anger.anim(scene, [attacker, defender]) + BattleOtherAnims.anger.anim(scene, [attacker, defender]); attacker.anim({ y: attacker.y + 20, @@ -36082,21 +36082,6 @@ export const BattleMoveAnims: AnimTable = { opacity: 0, time: 800, }, 'decel', 'fade', {filter: 'hue-rotate(-15deg)'}); - scene.showEffect('blackwisp', { - x: attacker.x + 120 * xf[i], - y: attacker.y, - z: attacker.z + 68 * yf[i], - scale: 0.5, - opacity: 0.5, - time: 650, - }, { - x: attacker.x + 120 * xf[i], - y: attacker.y + 30, - z: attacker.z + 68 * yf[i], - scale: 0.5, - opacity: 0, - time: 950, - }, 'decel', 'explode'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y, @@ -36112,6 +36097,21 @@ export const BattleMoveAnims: AnimTable = { opacity: 0, time: 800, }, 'decel', 'fade', {filter: 'hue-rotate(-15deg)'}); + scene.showEffect('blackwisp', { + x: attacker.x + 120 * xf[i], + y: attacker.y, + z: attacker.z + 68 * yf[i], + scale: 0.5, + opacity: 0.5, + time: 650, + }, { + x: attacker.x + 120 * xf[i], + y: attacker.y + 30, + z: attacker.z + 68 * yf[i], + scale: 0.5, + opacity: 0, + time: 950, + }, 'decel', 'explode'); } scene.showEffect('fireball', { @@ -36144,7 +36144,7 @@ export const BattleMoveAnims: AnimTable = { scale: 0.8, opacity: 0, time: 1100, - }, 'ballistic', 'fade') + }, 'ballistic', 'fade'); scene.showEffect('fireball', { x: defender.x - 20, @@ -36160,7 +36160,7 @@ export const BattleMoveAnims: AnimTable = { scale: 0.8, opacity: 0, time: 1100, - }, 'ballistic', 'fade') + }, 'ballistic', 'fade'); attacker.anim({ x: defender.x, y: defender.y, From 3c28cfd437d7570f4fb6a4340892e07283d306f4 Mon Sep 17 00:00:00 2001 From: Shriansh Chari <30420527+shrianshChari@users.noreply.github.com> Date: Tue, 6 Aug 2024 15:54:26 -0700 Subject: [PATCH 4/4] Fix linter again --- play.pokemonshowdown.com/src/battle-animations-moves.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/play.pokemonshowdown.com/src/battle-animations-moves.ts b/play.pokemonshowdown.com/src/battle-animations-moves.ts index 7aad3323f6..a54122b02c 100644 --- a/play.pokemonshowdown.com/src/battle-animations-moves.ts +++ b/play.pokemonshowdown.com/src/battle-animations-moves.ts @@ -36128,7 +36128,7 @@ export const BattleMoveAnims: AnimTable = { scale: 0.8, opacity: 0, time: 1100, - }, 'ballistic', 'fade') + }, 'ballistic', 'fade'); scene.showEffect('fireball', { x: defender.x,