Merge branch 'main' into move/stockpile
commit
43d46c07bf
|
@ -146,14 +146,14 @@
|
||||||
"spriteSourceSize": {
|
"spriteSourceSize": {
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 0,
|
"y": 0,
|
||||||
"w": 3,
|
"w": 66,
|
||||||
"h": 3
|
"h": 55
|
||||||
},
|
},
|
||||||
"frame": {
|
"frame": {
|
||||||
"x": 132,
|
"x": 0,
|
||||||
"y": 0,
|
"y": 112,
|
||||||
"w": 3,
|
"w": 66,
|
||||||
"h": 3
|
"h": 55
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
@ -3453,7 +3453,8 @@ export function initAbilities() {
|
||||||
.attr(UncopiableAbilityAbAttr)
|
.attr(UncopiableAbilityAbAttr)
|
||||||
.attr(UnswappableAbilityAbAttr)
|
.attr(UnswappableAbilityAbAttr)
|
||||||
.attr(NoTransformAbilityAbAttr)
|
.attr(NoTransformAbilityAbAttr)
|
||||||
.attr(NoFusionAbilityAbAttr),
|
.attr(NoFusionAbilityAbAttr)
|
||||||
|
.condition((pokemon) => !pokemon.isTerastallized()),
|
||||||
new Ability(Abilities.QUICK_DRAW, 8)
|
new Ability(Abilities.QUICK_DRAW, 8)
|
||||||
.unimplemented(),
|
.unimplemented(),
|
||||||
new Ability(Abilities.UNSEEN_FIST, 8)
|
new Ability(Abilities.UNSEEN_FIST, 8)
|
||||||
|
|
|
@ -2526,6 +2526,27 @@ export class HiddenPowerTypeAttr extends VariableMoveTypeAttr {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class MatchUserTypeAttr extends VariableMoveTypeAttr {
|
||||||
|
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
|
||||||
|
const type = (args[0] as Utils.IntegerHolder);
|
||||||
|
|
||||||
|
const userTypes = user.getTypes(true);
|
||||||
|
|
||||||
|
if(userTypes.includes(Type.STELLAR)) { // will not change to stellar type
|
||||||
|
const nonTeraTypes = user.getTypes();
|
||||||
|
type.value = nonTeraTypes[0];
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (userTypes.length > 0) {
|
||||||
|
type.value = userTypes[0];
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export class VariableMoveTypeMultiplierAttr extends MoveAttr {
|
export class VariableMoveTypeMultiplierAttr extends MoveAttr {
|
||||||
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
|
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
|
||||||
return false;
|
return false;
|
||||||
|
@ -5980,7 +6001,7 @@ export function initMoves() {
|
||||||
.unimplemented(),
|
.unimplemented(),
|
||||||
new AttackMove(Moves.REVELATION_DANCE, Type.NORMAL, MoveCategory.SPECIAL, 90, 100, 15, -1, 0, 7)
|
new AttackMove(Moves.REVELATION_DANCE, Type.NORMAL, MoveCategory.SPECIAL, 90, 100, 15, -1, 0, 7)
|
||||||
.danceMove()
|
.danceMove()
|
||||||
.partial(),
|
.attr(MatchUserTypeAttr),
|
||||||
new AttackMove(Moves.CORE_ENFORCER, Type.DRAGON, MoveCategory.SPECIAL, 100, 100, 10, -1, 0, 7)
|
new AttackMove(Moves.CORE_ENFORCER, Type.DRAGON, MoveCategory.SPECIAL, 100, 100, 10, -1, 0, 7)
|
||||||
.target(MoveTarget.ALL_NEAR_ENEMIES)
|
.target(MoveTarget.ALL_NEAR_ENEMIES)
|
||||||
.partial(),
|
.partial(),
|
||||||
|
|
|
@ -778,9 +778,16 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
||||||
types.splice(flyingIndex, 1);
|
types.splice(flyingIndex, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!types.length)
|
if (!types.length) // become UNKNOWN if no types are present
|
||||||
types.push(Type.UNKNOWN);
|
types.push(Type.UNKNOWN);
|
||||||
|
|
||||||
|
if (types.length > 1 && types.includes(Type.UNKNOWN)) { // remove UNKNOWN if other types are present
|
||||||
|
const index = types.indexOf(Type.UNKNOWN);
|
||||||
|
if (index !== -1) {
|
||||||
|
types.splice(index, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return types;
|
return types;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@ export const battle: SimpleTranslationEntries = {
|
||||||
"attackHitsCount": `Touché {{count}} fois !`,
|
"attackHitsCount": `Touché {{count}} fois !`,
|
||||||
"expGain": "{{pokemonName}} gagne\n{{exp}} Points d’Exp !",
|
"expGain": "{{pokemonName}} gagne\n{{exp}} Points d’Exp !",
|
||||||
"levelUp": "{{pokemonName}} monte au\nN. {{level}} !",
|
"levelUp": "{{pokemonName}} monte au\nN. {{level}} !",
|
||||||
"learnMove": "{{pokemonName}} apprend \n{{moveName}} !",
|
"learnMove": "{{pokemonName}} apprend\n{{moveName}} !",
|
||||||
"learnMovePrompt": "{{pokemonName}} veut apprendre\n{{moveName}}.",
|
"learnMovePrompt": "{{pokemonName}} veut apprendre\n{{moveName}}.",
|
||||||
"learnMoveLimitReached": "Cependant, {{pokemonName}} connait\ndéjà quatre capacités.",
|
"learnMoveLimitReached": "Cependant, {{pokemonName}} connait\ndéjà quatre capacités.",
|
||||||
"learnMoveReplaceQuestion": "Voulez-vous oublier une capacité\net la remplacer par {{moveName}} ?",
|
"learnMoveReplaceQuestion": "Voulez-vous oublier une capacité\net la remplacer par {{moveName}} ?",
|
||||||
|
@ -33,7 +33,7 @@ export const battle: SimpleTranslationEntries = {
|
||||||
"learnMoveForgetSuccess": "{{pokemonName}} oublie comment\nutiliser {{moveName}}.",
|
"learnMoveForgetSuccess": "{{pokemonName}} oublie comment\nutiliser {{moveName}}.",
|
||||||
"levelCapUp": "La limite de niveau\na été augmentée à {{levelCap}} !",
|
"levelCapUp": "La limite de niveau\na été augmentée à {{levelCap}} !",
|
||||||
"moveNotImplemented": "{{moveName}} n’est pas encore implémenté et ne peut pas être sélectionné.",
|
"moveNotImplemented": "{{moveName}} n’est pas encore implémenté et ne peut pas être sélectionné.",
|
||||||
"moveNoPP": "There's no PP left for\nthis move!",
|
"moveNoPP": "Il n’y a plus de PP pour\ncette capacité !",
|
||||||
"moveDisabled": "{{moveName}} est sous entrave !",
|
"moveDisabled": "{{moveName}} est sous entrave !",
|
||||||
"noPokeballForce": "Une force mystérieuse\nempêche l’utilisation des Poké Balls.",
|
"noPokeballForce": "Une force mystérieuse\nempêche l’utilisation des Poké Balls.",
|
||||||
"noPokeballTrainer": "Le Dresseur détourne la Ball\nVoler, c’est mal !",
|
"noPokeballTrainer": "Le Dresseur détourne la Ball\nVoler, c’est mal !",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { expect, describe, it } from "vitest";
|
import { expect, describe, it } from "vitest";
|
||||||
import { randomString } from "./utils";
|
import { randomString, padInt } from "./utils";
|
||||||
|
|
||||||
import Phaser from "phaser";
|
import Phaser from "phaser";
|
||||||
|
|
||||||
|
@ -19,4 +19,26 @@ describe("utils", () => {
|
||||||
expect(str1).toBe(str2);
|
expect(str1).toBe(str2);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("padInt", () => {
|
||||||
|
it("should return a string", () => {
|
||||||
|
const result = padInt(1, 10);
|
||||||
|
expect(typeof result).toBe('string');
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should return a padded result with default padWith", () => {
|
||||||
|
const result = padInt(1, 3);
|
||||||
|
expect(result).toBe('001');
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should return a padded result using a custom padWith", () => {
|
||||||
|
const result = padInt(1, 10, 'yes')
|
||||||
|
expect(result).toBe('yesyesyes1');
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should return inputted value when zero length is entered", () => {
|
||||||
|
const result = padInt(1, 0);
|
||||||
|
expect(result).toBe('1')
|
||||||
|
})
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue