diff --git a/src/data/move.ts b/src/data/move.ts index 7233fc1516f..78b554fdf16 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -2440,6 +2440,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 { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { return false; @@ -5812,7 +5833,7 @@ export function initMoves() { .unimplemented(), new AttackMove(Moves.REVELATION_DANCE, Type.NORMAL, MoveCategory.SPECIAL, 90, 100, 15, -1, 0, 7) .danceMove() - .partial(), + .attr(MatchUserTypeAttr), new AttackMove(Moves.CORE_ENFORCER, Type.DRAGON, MoveCategory.SPECIAL, 100, 100, 10, -1, 0, 7) .target(MoveTarget.ALL_NEAR_ENEMIES) .partial(), diff --git a/src/data/type.ts b/src/data/type.ts index 14f9f932a2a..35c56aecd32 100644 --- a/src/data/type.ts +++ b/src/data/type.ts @@ -543,4 +543,4 @@ export function getTypeRgb(type: Type): [ integer, integer, integer ] { default: return [ 0, 0, 0 ]; } -} \ No newline at end of file +} diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 36dc4265efc..2242b1ee694 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -778,9 +778,16 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { types.splice(flyingIndex, 1); } - if (!types.length) + if (!types.length) // become UNKNOWN if no types are present 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; } diff --git a/src/utils.test.ts b/src/utils.test.ts index 8dc46371abd..22ccbfc6320 100644 --- a/src/utils.test.ts +++ b/src/utils.test.ts @@ -1,5 +1,5 @@ import { expect, describe, it } from "vitest"; -import { randomString } from "./utils"; +import { randomString, padInt } from "./utils"; import Phaser from "phaser"; @@ -19,4 +19,26 @@ describe("utils", () => { 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') + }) + }); });