diff --git a/data/graphics.js b/data/graphics.js
index 9d6e2741a6..61e4f6b1c9 100644
--- a/data/graphics.js
+++ b/data/graphics.js
@@ -234,6 +234,10 @@ var BattleEffects = {
url: 'ultra.png', // by Pokemon Showdown user Modeling Clay
w: 113, h: 165
},
+ hitmark: {
+ url: 'hitmarker.png', // by Pokemon Showdown user Ridaz
+ w: 100, h: 100
+ },
none: {
// this is for passing to battle.pos() and battle.posT() for CSS effects
w: 100, h: 100
@@ -2873,6 +2877,21 @@ var BattleOtherAnims = {
}
};
var BattleStatusAnims = {
+ hitmark: {
+ anim: function (battle, args) {
+ var attacker = args[0];
+ battle.showEffect('hitmark', {
+ x: attacker.x,
+ y: attacker.y,
+ z: attacker.z,
+ scale: 0.5,
+ opacity: 1
+ }, {
+ opacity: 0.5,
+ time: 250
+ }, 'linear', 'fade');
+ }
+ },
brn: {
anim: function (battle, args) {
var attacker = args[0];
diff --git a/fx/hitmarker.png b/fx/hitmarker.png
new file mode 100644
index 0000000000..5a16a28923
Binary files /dev/null and b/fx/hitmarker.png differ
diff --git a/js/battle.js b/js/battle.js
index 31d718e227..325c63ffbc 100644
--- a/js/battle.js
+++ b/js/battle.js
@@ -3485,6 +3485,12 @@ var Battle = (function () {
} else if (window.Config && Config.server && Config.server.afd && move.id === 'stealthrock') {
var srNames = ['Sneaky Pebbles', 'Sly Rubble', 'Subtle Sediment', 'Buried Bedrock', 'Camouflaged Cinnabar', 'Clandestine Cobblestones', 'Cloaked Clay', 'Concealed Ore', 'Covert Crags', 'Crafty Coal', 'Discreet Bricks', 'Disguised Debris', 'Espionage Pebbles', 'Furtive Fortress', 'Hush-Hush Hardware', 'Incognito Boulders', 'Invisible Quartz', 'Masked Minerals', 'Mischievous Masonry', 'Obscure Ornaments', 'Private Paragon', 'Secret Solitaire', 'Sheltered Sand', 'Surreptitious Sapphire', 'Undercover Ultramarine'];
this.message(pokemon.getName() + ' used ' + srNames[Math.floor(Math.random() * srNames.length)] + '!');
+ } else if (window.Config && Config.server && Config.server.afd && move.id === 'extremespeed') {
+ var fastWords = ['H-Hayai', 'Masaka', 'Its fast']
+ this.message(pokemon.getName() + ' used ' + move.name + '!');
+ this.message('' + fastWords[Math.floor(Math.random() * fastWords.length)] + '!');
+ } else if (window.Config && Config.server && Config.server.afd && move.id === 'aerialace') {
+ this.message(pokemon.getName() + ' used Tsubame Gaeshi!');
// } else if (window.Config && Config.server && Config.server.afd && (move.id === 'metronome' || move.id === 'sleeptalk' || move.id === 'assist')) {
// this.message(pokemon.getName() + ' used ' + move.name + '!');
// var buttons = ["A", "B", "START", "SELECT", "UP", "DOWN", "LEFT", "RIGHT", "DEMOCRACY", "ANARCHY"];
@@ -4197,6 +4203,7 @@ var Battle = (function () {
var poke = this.getPokemon(args[1]);
for (var j = 1; !poke && j < 10; j++) poke = this.getPokemon(minors[i + j][0][1]);
if (poke) this.resultAnim(poke, 'Super-effective', 'bad');
+ if (!this.fastForward) BattleStatusAnims['hitmark'].anim(this, [poke.sprite]);
actions += "It's super effective" + (this.activeMoveIsSpread ? " on " + poke.getLowerName() : "") + "! ";
break;