add-ability
Add Pokemon abilities to the battle system. Use when implementing passive abilities that trigger on events.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Add Pokemon abilities to the battle system. Use when implementing passive abilities that trigger on events.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
| name | add-ability |
| description | Add Pokemon abilities to the battle system. Use when implementing passive abilities that trigger on events. |
Files to modify:
src/enums/battleEnums.js - Add abilityIdEnum.YOUR_ABILITY entry (ONLY if not exists)src/battle/data/abilities.js - Add the ability implementationDO NOT modify other abilities or battleConfig.js unless explicitly asked.
[abilityIdEnum.ABILITY_NAME]: new Ability({
id: abilityIdEnum.ABILITY_NAME,
name: "Ability Name",
description: "Description of what the ability does",
abilityAdd({ battle, target }) {
// Called when ability is applied (battle start)
return {
// Properties to store for later use in abilityRemove
listenerId: this.registerListenerFunction({...}),
};
},
abilityRemove({ battle, target, properties }) {
// Called when ability is removed
battle.unregisterListener(properties.listenerId);
},
}),
Return state from abilityAdd that you'll need in abilityRemove:
abilityAdd({ battle, target }) {
return {
listenerId: this.registerListenerFunction({...}),
originalValue: target.getStat("atk"),
triggered: false,
};
},
abilityRemove({ battle, target, properties }) {
battle.unregisterListener(properties.listenerId);
}
Abilities have a class-level registerListenerFunction method that automatically includes the ability instance:
abilityAdd({ battle, target }) {
return {
listenerId: this.registerListenerFunction({
battle,
target,
eventName: battleEventEnum.AFTER_DAMAGE_DEALT,
callback: ({ damage, abilityInstance }) => {
// abilityInstance.data contains the properties
// Perform ability logic
},
conditionCallback: getIsSourcePokemonCallback(target),
}),
};
},
Refer to references/pattern-* for common ability implementations.
Always Clean Up Listeners: Failing to unregister listeners causes memory leaks.
Event Argument Modification: Return modified values from callbacks:
callback: (args) => {
return { damage: Math.floor(args.damage * 0.5) };
};
abilityInstance: Access stored properties via abilityInstance.data in callbacks.
Source vs Target: Use the right condition callback:
getIsSourcePokemonCallback - when this Pokemon is dealing damage/using movesgetIsTargetPokemonCallback - when this Pokemon is receiving damage/effectsAfter implementing an ability, run the ability test suite to validate the implementation:
npm test -- src/battle/data/__tests__/abilities.test.js
This runs an e2e test that verifies all abilities can be applied and removed without throwing errors. If your new ability causes a test failure, fix the implementation and re-run until tests pass.
See the unit-test skill for more details on testing.
add-event-listener skill - Common event types and condition callbacksreferences/pattern-* - Common ability implementation patternsAdd new moves to the battle system. Use when implementing attack, status, or support moves for Pokemon.
Add a Pokemon (real or fake) to src/config/pokemonConfig.js with its moves, abilities, rarity, and evolution data. Use when the user asks to add, register, implement, or create a new Pokemon, Pokemon form, or fake/custom Pokemon in the battle system.
Find a Pokemon's Discord emoji string — canonical (e.g. `<:25:1100282072003772457>`) from `pokestar-pk-{n}`, form variants (e.g. `<:483origin:1404654211324448848>`) from `pokestar-forms-1`, or fakemon (e.g. `<:ashpikachu:1109522092283658250>`) from `pokestar-pk-extra` — via Playwright CLI. Use when the user asks for a Pokemon's emoji, emoji ID, form emoji, fakemon emoji, or needs an `<:name:snowflake>` string.
Create an implementation plan before adding one or more Pokemon via the `add-pokemon` skill. Builds Pokemon, moves, and abilities tables with all required inputs, flags unimplemented moves/abilities, and produces step-by-step implementation instructions. Use when the user asks to plan adding a Pokemon, plan a Pokemon batch, or invokes this skill before `add-pokemon`.
Verify Discord bot changes by running the bot and testing commands in Discord via Playwright CLI. Use when the user asks to test, verify, or check bot commands in Discord.
Verify a Pokemon's configuration in pokemonConfig.js by testing its moves and abilities in Discord via Playwright CLI. Use when validating a Pokemon's battle behavior after configuration changes.