Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsCommunityBlog
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Authors
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

ProTermsPrivacyRefunds
Back to skills

Species Forms

ASecurity

A form is its own species, numbered in the band past a million, and it is its own row in the dex record while sharing one row in the printed dex. Applies whenever adding an alternate form, or writing code that turns a species id into a dex number, a region or a sheet.

3 stars
0 votes
0 copies
1 views
Added 9/20/2026
toolsgo

Security Analysis

A100/100

Scanned 9/20/2026

Install to Claude Code

$npx -y skills add lxsmnsyc/overwander --skill species-forms --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Species Forms?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for Species Forms
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/lxsmnsyc-species-forms/badge)](https://www.skillsdirectory.com/skills/lxsmnsyc-species-forms)

More formats (shields.io, HTML) on the badges page.

Download with Pro
Files
SKILL.md
---
name: species-forms
description: >
  A form is its own species, numbered in the band past a million, and
  it is its own row in the dex record while sharing one row in the
  printed dex. Applies whenever adding an alternate form, or writing
  code that turns a species id into a dex number, a region or a sheet.
---

An alternate form (an unown letter, and later an Alolan Vulpix or a Mega) is a **full species** here: its own `Species` id, its own registration in `src/data/species/`, its own sprite folder, its own dex tallies. What makes it a form is `baseForm: false` and the id it was given.

## The numbering

```
form id = 1000000 + dexNumber * 100 + formIndex
```

The default form is **not** in the band: its id is its dex number, which is what keeps `Species === dexNumber` true everywhere that relies on it. So Unown A is `201` and Unown B is `1020101`.

The scheme buys three things: a hundred slots per species (Alcremie's 63 is the largest set the mainline prints), a species' forms sorting straight after it, and the base form recoverable from the id by arithmetic alone. The helpers in [`src/data/ids/species.ts`](../../../src/data/ids/species.ts) are `speciesDexNumber`, `speciesFormIndex` and `getBaseFormSpecies`.

**An id is stored player data**, so nothing in the band may be renumbered once it ships. The same rule the family ids keep.

## What reads the base form

- **Region and sheets.** `getSpeciesRegion` asks the dex number, so a form is filed beside its species: `johto/1020101`. The folder is still named after the id.
- **The printed dex.** `getBaseForms` backs the dex grid and `dexOrder`, and both list the default form alone: twenty-eight rows all numbered 201 and all called Unown is not a dex. The row lights up when **any** of its forms has been met.
- **The dex record.** `pokedex_entries` is keyed on the concrete species, so each form is seen and caught on its own. A read that counts pokemon rolls that up (`countDexSpecies`, `readCaughtDexCount`); a read that shows which forms were found does not.

## The two dialogs

Pressing a dex row with several forms behind it opens `SpeciesFormsDialog`, not the entry: the row stands for the pokemon, and which form was meant has not been said yet. That dialog is only the grid of forms, labelled by `formLabel` rather than by the number they share, and pressing one hands over to `DexEntryDialog` for that form alone.

So a form's entry is an ordinary species page. It answers for itself, and its arrows walk the **forms** rather than the dex, since that is the list it was reached through. The default form has no page of its own beyond the one its first square opens.

## A form's own ability

A shape worn in battle (an Origin forme with its orb, Sky Shaymin with a Gracidea) brings its own ability as a **bonus**. The form item grants it with `unit.wearAbility` when the holder takes the shape, on top of whatever the catch carries. The list lives in `SHAPE_ABILITIES` in [`src/battle/items/forms.ts`](../../../src/battle/items/forms.ts).

- It takes no ability slot, and Role Play, Skill Swap, Gastro Acid and Worry Seed cannot touch it, the way Shadow is exempt.
- It never trades away one of the catch's abilities mid-fight.
- It never goes in the base species' pool: a base species is not handed its form's ability.

## Adding one

1. An id in `Species`, written directly after the species' own and inside the band.
2. `baseForm: false` on the registration, and the same `dexNumber` and `family` as the default form.
3. A name that tells it apart in a box. The default keeps the plain name; a variant is marked (`Unown Q`).
4. The species' dex number in `FORMS` in [`scripts/import-sprites.ts`](../../../scripts/import-sprites.ts), with how many forms the game now has ids for. Anything past the count is skipped rather than imported under an id nothing knows.
5. `pnpm import-sprites && pnpm compact-sprites`.

Attribution

lxsmnsyclxsmnsyc
View sourceMore from lxsmnsyc →
SSkills DirectorySkills Directory

Know which skills are safe — weekly.

Best new skills + every skill we flagged as malicious. From the team that scanned 103,619.

Join free

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Know which skills are safe — weekly.

Best new skills + every skill we flagged as malicious. From the team that scanned 103,619.

Join free

Related Skills

ucoz-landing-skill

Playbook for creating and editing uCoz landing pages via MCP tools (`templates_tool`, `ftp_tool`, `modules_tool`). Use for tasks such as: "build a landing page", "update the homepage as a landing page", "create a promo page on the homepage", "add a lead form / menu / SEO to the homepage". Homepage: `page_list`, `page_get`; first publish — `page_update` with full `page_tmpl`; HTML edits after generation — `patch_template` (module_id=2, template_id=1), not `update_template`. Activate the mail f...

107 votes

Paperclip

Interact with the Paperclip control plane API for task coordination and governance. Use when checking assignments, updating issue status, posting comments, delegating work, managing routines, or calling Paperclip API endpoints.

813271 votes

Instantly Rdsthomas Mission Control

Instantly.ai cold email outreach API - manage campaigns, leads, accounts, and analytics. Use for cold email automation, lead management, campaign creation/monitoring, and email account warmup.

761 votes

Daw Music

Digital Audio Workstation usage, music composition, interactive music systems, and game audio implementation for immersive soundscapes.

761 votes

Caveman Compress

Compress natural language memory files (CLAUDE.md, todos, preferences) into caveman format to save input tokens. Preserves all technical substance, code, URLs, and structure. Compressed version overwrites the original file. Human-readable backup saved as FILE.original.md. Trigger: /caveman-compress FILEPATH or "compress memory file"

1074700 votes
View all in tools →