diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts
index e11a0503241..b2ecd4de3e6 100644
--- a/src/field/pokemon.ts
+++ b/src/field/pokemon.ts
@@ -796,6 +796,14 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
     return !!this.getTypes(true, forDefend).find(t => t === type);
   }
 
+  /**
+   * Gets the non-passive ability of the pokemon. This accounts for fusions and ability changing effects.
+   * This should rarely be called, most of the time {@link hasAbility} or {@link hasAbilityWithAttr} are better used as
+   * those check both the passive and non-passive abilities and account for ability suppression.
+   * @see {@link hasAbility} {@link hasAbilityWithAttr} Intended ways to check abilities in most cases
+   * @param {boolean} ignoreOverride If true, ignore ability changing effects
+   * @returns {Ability} The non-passive ability of the pokemon
+   */
   getAbility(ignoreOverride?: boolean): Ability {
     if (!ignoreOverride && this.summonData?.ability)
       return allAbilities[this.summonData.ability];
@@ -811,6 +819,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
     return allAbilities[abilityId];
   }
 
+  /**
+   * Gets the passive ability of the pokemon. This should rarely be called, most of the time
+   * {@link hasAbility} or {@link hasAbilityWithAttr} are better used as those check both the passive and
+   * non-passive abilities and account for ability suppression.
+   * @see {@link hasAbility} {@link hasAbilityWithAttr} Intended ways to check abilities in most cases
+   * @returns {Ability} The passive ability of the pokemon
+   */
   getPassiveAbility(): Ability {
     if (Overrides.PASSIVE_ABILITY_OVERRIDE && this.isPlayer())
       return allAbilities[Overrides.PASSIVE_ABILITY_OVERRIDE];
@@ -838,6 +853,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
     return this.passive || this.isBoss();
   }
 
+  /**
+   * Checks whether an ability of a pokemon can be currently applied. This should rarely be
+   * directly called, as {@link hasAbility} and {@link hasAbilityWithAttr} already call this.
+   * @see {@link hasAbility} {@link hasAbilityWithAttr} Intended ways to check abilities in most cases
+   * @param {boolean} passive If true, check if passive can be applied instead of non-passive
+   * @returns {Ability} The passive ability of the pokemon
+   */
   canApplyAbility(passive: boolean = false): boolean {
     if (passive && !this.hasPassive())
       return false;
@@ -862,6 +884,15 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
     return (this.hp || ability.isBypassFaint) && !ability.conditions.find(condition => !condition(this));
   }
 
+  /**
+   * Checks whether a pokemon has the specified ability and it's in effect. Accounts for all the various
+   * effects which can affect whether an ability will be present or in effect, and both passive and
+   * non-passive. This is the primary way to check whether a pokemon has a particular ability.
+   * @param {Abilities} ability The ability to check for
+   * @param {boolean} canApply If false, it doesn't check whether the abiltiy is currently active
+   * @param {boolean} ignoreOverride If true, it ignores ability changing effects
+   * @returns {boolean} Whether the ability is present and active
+   */
   hasAbility(ability: Abilities, canApply: boolean = true, ignoreOverride?: boolean): boolean {
     if ((!canApply || this.canApplyAbility()) && this.getAbility(ignoreOverride).id === ability)
       return true;
@@ -870,6 +901,16 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
     return false;
   }
 
+  /**
+   * Checks whether a pokemon has an ability with the specified attribute and it's in effect. 
+   * Accounts for all the various effects which can affect whether an ability will be present or
+   * in effect, and both passive and non-passive. This is one of the two primary ways to check
+   * whether a pokemon has a particular ability.
+   * @param {AbAttr} attrType The ability attribute to check for
+   * @param {boolean} canApply If false, it doesn't check whether the abiltiy is currently active
+   * @param {boolean} ignoreOverride If true, it ignores ability changing effects
+   * @returns {boolean} Whether an ability with that attribute is present and active
+   */
   hasAbilityWithAttr(attrType: { new(...args: any[]): AbAttr }, canApply: boolean = true, ignoreOverride?: boolean): boolean {
     if ((!canApply || this.canApplyAbility()) && this.getAbility(ignoreOverride).hasAttr(attrType))
       return true;