Skip to content

Development

As Platinum Five grew, I gradually changed the way I worked on it. Each addition brought interactions with existing systems, making purely manual verification increasingly impractical. The process became more structured: describe the intention, investigate the game, make a change, check what can be checked automatically, then review the result in play. That approach developed over time, alongside the adventure itself.

Working from Platinum's source

Platinum Five is built from the pret/pokeplatinum decompilation and reconstruction project. I work with the game's source rather than directly hex-editing a finished ROM. That foundation makes existing Nintendo DS game logic accessible for investigation and modification, while retaining the engine and its expectations.

The project combines C and assembly with structured resources such as JSON. Scripts describe events and other game behavior. Graphics, text and binary resources must be converted and packaged into formats the DS engine expects. A readable source file is therefore only one part of the journey from an idea to something working on screen.

One recurring lesson was that changing source data is only part of the work. The result must also survive packaging, engine assumptions and runtime behavior. An entry can look correct in a data file while the game reads a different index, uses another resource or expects a particular layout.

Making additions work together

Generation V integration made those relationships especially visible. Adding Pokémon involved more than extending a Pokédex: species data connects to moves, abilities, learnsets, evolutions, encounters and trainer teams. Graphics and interface presentation must recognize the same identities. Existing assumptions about species ranges and runtime or saved records also need attention when the roster expands.

These were connected integration problems rather than independent additions. A Pokémon could have correct battle data and still need work on its icon or presentation. An evolution change could affect team development as well as the family relationships used by other systems. Selected Generation V elements had to fit Platinum's engine; this was not a wholesale transfer of another game's mechanics.

Difficulty and Nuzlocke brought similar interactions. Their behavior depends on existing encounters, battles, acquisitions and persistent state. As changes accumulated, I increasingly checked relationships between systems, including whether a local correction preserved behavior already approved elsewhere.

From an intention to a verified change

A recurring workflow gradually emerged. I identified a problem or intended behavior, investigated how the current game handled it, and refined the specification before implementation. Where expectations could be expressed deterministically, checks accompanied the change. I reviewed or tested the result where human judgment was needed, then protected approved behavior against accidental regression. Individual tasks did not always follow every stage or the same order.

ChatGPT became a central tool for exploring solutions, challenging and refining design decisions, structuring specifications, interpreting Codex investigations, preparing audits and validation strategies, and maintaining coherence across long workstreams. Codex increasingly worked directly in the repository on investigation, implementation, scripts, validators, compilation, technical documentation and verification. I retained responsibility for design intentions, priorities, accepting or rejecting solutions and final human approval. This describes an evolving collaboration, not the authorship of every commit. Reproducible checks were executed by scripts and harnesses, with in-game review where needed.

Portable Box illustrates why specifying boundaries mattered: opening storage was only part of defining its use and return to the overworld. Description layout offered another lesson. Text needed to fit the actual font and windows, so source corrections, compiled-resource checks and visual review addressed different parts of the same problem.

Repeatable tests and human playtesting

Automated validation grew around questions that would otherwise need repeated investigation. Source checks examine data relationships and expected rules. Native harnesses exercise selected game functions, with surrounding services simulated where necessary. Compiled-resource checks verify that packaged results agree with their sources. These layers answer different questions; none alone certifies the whole experience.

Some validators are deliberately tested against known-bad changes to ensure they fail when they should. Once behavior or public documentation receives human approval, focused freeze guards help detect accidental later changes. This makes it easier to revisit one area without silently losing an earlier correction.

Canonical save generation creates reproducible game states at different progression points and across difficulty variants. This made it possible to return to later situations without manually replaying dozens of hours for each change. These are generated QA states, not automatically played campaigns. Reloading checks state and serialization, not whether the associated battle is good or balanced. They support human gameplay testing rather than replace it, and belong to the project's QA infrastructure.

I completed a Normal playthrough that became a major playtest pass. It exposed issues static validation could not and prompted trainer balancing and post-playtest polish before final release-candidate work. That playthrough did not exhaustively validate the final build or every subsequent change. Targeted human testing also covered systems and presentation, with documented QA using DeSmuME. This does not establish complete Easy or Challenge playthroughs or general emulator and hardware compatibility.

Keeping documentation close to the game

The wiki became part of the development process. Large factual references for Pokémon, moves, abilities, machines, encounters, battles and progression derive substantially from game sources and reviewed presentation metadata. Generating these references reduces the risk of maintaining separate lists that silently drift apart as the game changes.

Introductions, FAQ, Changelog and Design Philosophy are authored and reviewed editorially. Their explanations require judgment about scope, clarity and what a new player needs to know. Source-driven facts and editorial interpretation have different responsibilities, even when they appear on the same site.

Canonical generation is checked, approved prose and data presentation can be frozen, and local links are validated. Strict MkDocs builds and browser layout checks help catch publishing and readability problems. I use automation to keep factual material synchronized while retaining human review for interpretation. The Design Philosophy explains the intentions behind the adventure; the Changelog describes its changes.

Consolidating the project for 1.0

The work toward 1.0 shifted toward consolidation: targeted audits, playtest-driven corrections, presentation fixes, documentation and regression protection. Freezing approved behavior made the boundaries of later work explicit. A focused correction could then be assessed against what it was allowed to change and what it needed to preserve.

Automated checks can verify known invariants, data relationships and expected behavior that can be expressed precisely. They cannot alone decide whether a battle feels satisfying, an animation looks right, or the overall balance is enjoyable. Human review remains necessary for those judgments. The process brings both forms of evidence together: repeatable checks help preserve what is understood, and playtesting helps reveal what still needs attention.