If you appreciate the work done within the wiki, please consider supporting The Cutting Room Floor on Patreon. Thanks for all your support!
Development:Pokémon Ruby and Sapphire
This page details development materials of Pokémon Ruby and Sapphire.
This page or section details content from the May 2020 Nintendo Leak. Check the May 2020 Nintendo Leak category for more pages also sourced from this material. |
This page or section details content from the October 2024 Game Freak Leak. Check the October 2024 Game Freak Leak category for more pages also sourced from this material. |
The source code for Pokémon Ruby and Sapphire was leaked onto the internet, alongside other files containing data for maps and Pokemon...but a full early prototype hasn't surfaced yet.
Contents
Sub-Pages
In the May 2020 source code leak for the games were a handful of files from earlier stages in development, dating from 4 to 9 months before the games' release in Japan.
In the October 2024 leak, further date ranges from summer 2001 till final 2002 also compound this
Sprites Early sprites, scratchpads, and a ton of unused Pokémon. |
Concept Art Found inside of the October 2024 leaks, with many of them showing an interesting experimentation phase during early development. |
Graphic Mockups Photoshop mockups of the battle interface and more. |
Pokémon Data Changes to the data pertaining to the Pokémon. |
Early Maps A look at earlier maps. |
Unused Graphics Graphics not present in the final build. |
Early Pokemon List Spreadsheets from May and June 2002 that list the new Pokemon. |
Jun 11-Dec 25, 2001 Logs Developer weekly logs from June 11 to December 25, 2001 |
Jan 08-Jun 24, 2002 Logs Developer weekly logs from January 8 to June 24, 2002 |
Jul 01-Nov 18, 2002 Logs Developer weekly logs from July 1 to November 18, 2002 |
Miscellaneous Findings
Early Version Names
A script file for Route 102 (field_c102.ev in the source code) reveals that the games were planned to have different names early on in development. This is the first route to have version exclusive Pokémon, and Game Freak likely worked on the routes in chronological order, which is why the comments were left there.
Japanese | Translation |
---|---|
flag_change_field_c102: //藍バージョンの場合の処理を記述 #if ( PM_VERSION == VERSION_SAPPHIRE ) //敵の団をセットする _LDVAL OBJCHRWORK1,AQUALF1 _LDVAL OBJCHRWORK2,AQUALM1 //朱バージョンの場合の処理を記述 #elif ( PM_VERSION == VERSION_RUBY ) |
flag_change_field_c102: //Describes processing for Indigo Version. #if ( PM_VERSION == VERSION_SAPPHIRE ) //Sets enemy team. _LDVAL OBJCHRWORK1,AQUALF1 _LDVAL OBJCHRWORK2,AQUALM1 //Describes processing for Crimson Version. #elif ( PM_VERSION == VERSION_RUBY ) |
Early Villain Team Names
Script files (saveflag.h and common.ev in the source code) reveal early names for the games' evil teams.
Japanese | Translation |
---|---|
flag_change_field_c102: //<pre>//#define FV_SEAMAN1_01_FIELD_C104 (FV_FLAG_START+30) //マリン団1(ポケモン盗難事件) _FLAG_SET FV_EVILM1_01_CAVE_D0601 //トンネル団 |
//#define FV_SEAMAN1_01_FIELD_C104 (FV_FLAG_START+30) //Team Marine 1 (Pokémon theft) _FLAG_SET FV_EVILM1_01_CAVE_D0601 //Team Tunnel |
Early Method To Enter Secret Bases
Some unused event flags (in saveflag.h) and part of the code for checking whether the player can create a secret base from their current location (in fe_base.c) reveal that the way of creating secret bases changed. Originally, the way to get inside the bases would've been with tools instead of the Secret Power (TM43) move. Rope would've been found from Route 114 and would've been used to climb the trees; shovel would've been found from Route 115 and would've been used to dig inside the caves; and lastly, the sickle would've been found from Route 119 and would've been used to enter the hedges.
Japanese | Translation |
---|---|
#define FE_SCOOP_01_P01_FIELD_R115 (FE_FLAG_START+11) //スコップ入手 #define FE_ROPE_01_P01_FIELD_R114 (FE_FLAG_START+12) //ロープ入手 #define FE_KAMA_01_P01_FIELD_R119 (FE_FLAG_START+13) //カマ入手 // 洞窟 if( ATR_IsMakeScoopBaseCheck( atb ) == TRUE ){ ListUseSetBaseNo(); pFieldRecoverFunc = StartExtraInit; ExtraInit = SetFeCaveBase; return TRUE; } // 木 if( ATR_IsMakeRopeBaseCheck( atb ) == TRUE ){ ListUseSetBaseNo(); pFieldRecoverFunc = StartExtraInit; ExtraInit = SetFeTreeBase; return TRUE; } // 草 if( ATR_IsMakeKamaBaseCheck( atb ) == TRUE ){ ListUseSetBaseNo(); pFieldRecoverFunc = StartExtraInit; ExtraInit = SetFeGrassBase; return TRUE; } |
#define FE_SCOOP_01_P01_FIELD_R115 (FE_FLAG_START+11) //Obtain Shovel #define FE_ROPE_01_P01_FIELD_R114 (FE_FLAG_START+12) //Obtain Rope #define FE_KAMA_01_P01_FIELD_R119 (FE_FLAG_START+13) //Obtain Sickle // Cave if( ATR_IsMakeScoopBaseCheck( atb ) == TRUE ){ ListUseSetBaseNo(); pFieldRecoverFunc = StartExtraInit; ExtraInit = SetFeCaveBase; return TRUE; } // Tree if( ATR_IsMakeRopeBaseCheck( atb ) == TRUE ){ ListUseSetBaseNo(); pFieldRecoverFunc = StartExtraInit; ExtraInit = SetFeTreeBase; return TRUE; } // Grass if( ATR_IsMakeKamaBaseCheck( atb ) == TRUE ){ ListUseSetBaseNo(); pFieldRecoverFunc = StartExtraInit; ExtraInit = SetFeGrassBase; return TRUE; } |
Stern's Shipyard
Team Aqua/Magma
The saveflag.h file has five unused event flags, with a comment revealing that the Team Aqua/Magma events of the Oceanic Museum were originally meant to take place in Stern's Shipyard.
#define FV_EVIL_ALL_FIELD_C102 (FV_FLAG_START+182) //造船所前のアクア団達 #define FV_AQUA_ALL_C102_R0501 (FV_FLAG_START+183) //造船所1階のアクア団達 #define FV_AQUAM1_01_C102_R0502 (FV_FLAG_START+184) //造船所2階のアクア団 #define FV_AQUAM1_02_C102_R0502 (FV_FLAG_START+185) //造船所2階のアクア団 #define FV_AQUABOSS_01_C102_R0502 (FV_FLAG_START+186) //造船所2階のアクア団ボス
#define FV_EVIL_ALL_FIELD_C102 (FV_FLAG_START+182) // Team Aqua in front of the shipyard #define FV_AQUA_ALL_C102_R0501 (FV_FLAG_START+183) // Team Aqua on the first floor of the shipyard #define FV_AQUAM1_01_C102_R0502 (FV_FLAG_START+184) // Team Aqua on the 2nd floor of the shipyard #define FV_AQUAM1_02_C102_R0502 (FV_FLAG_START+185) // Team Aqua on the 2nd floor of the shipyard #define FV_AQUABOSS_01_C102_R0502 (FV_FLAG_START+186) // Team Aqua boss on the 2nd floor of the shipyard
Battle Summary Box Flashing Animation
Game Freak commented out code in the battle animation WEST_FeLvUP
(Special_LevelUp
in the pret disassembly) which would flash the current Pokémon in battle's summary and experience bar, and play sound effect SE_W025
(SE_M_MEGA_KICK
).
WEST_FeLvUP: SEPLAY_PAN SE_EXPMAX,0 ADD_TASK LvUpGaugePaletteSet,PRI2,0 WAIT 0 ADD_TASK LvUpEffColorFade,PRI5,2, 0,0 /* WAIT_FLAG SEPLAY_PAN SE_W025,0 ADD_TASK LvUpEffColorFade,PRI5,2, 1,5 ADD_TASK LvUpEffTask,PRI5,0 */ WAIT_FLAG ADD_TASK LvUpGaugePaletteRecover,PRI2,0 SEQEND
Unused Trainer Dialogue
The message file battle03.mes defines dialogue for three trainers assigned to an unknown area ("field_r999"), possibly a placeholder given the name. None of these lines are present in the final games' script. (Note that the trainers being identified by their class and a number rather than by name is standard for this sort of file.)
Trainer | Pre-battle | Translation | On defeat | Translation | Post-battle | Translation |
---|---|---|---|---|---|---|
Hiker 52 | けわしい やまのなかで たよれるのは じぶん ひとりだけ! さあ! だいしぜんの なかで |
In the rugged mountains, the only one I can rely on is myself.
Alright! Let’s have a fair and square battle in the heart of nature! |
そうか‥‥
じぶん ひとり じゃなくて |
I see now…
I'm not all by myself. |
ポケモンと てを とりあえば どんなに けわしい やまも のぼれるね |
With the help of Pokémon, you can climb even the steepest mountain. |
Fisherman 47 | きょうは さっぱり つれないなぁ‥‥
てぶらじゃ かえれない から |
Today I haven't caught anything…
I can't go home empty-handed, |
むむぅ‥‥ きょうは しおの かげんが わるい! |
Grr… The tide isn't in my favor today! |
さっき にがした おおものを つりあげて いれば‥‥ きみに かてた はず なんだけどな! |
If only I had reeled in that big one I let go earlier…
I would have beaten you for sure! |
Beauty 42 | カレシに もらった この ポケモン
どれくらい つよいのか |
Let me see just how strong the Pokémon my boyfriend gave me is! | えー がっかりー! | Eh? How disappointing! | あたらしい カレシでも さがそっかなー | Maybe I should look for a new boyfriend… |
Early Hoenn Dex
The message file for Pokédex evaluation messages (hyouka.mes) has a comment indicating that the Hoenn Dex was at one point planned to contain far fewer returning Pokémon from the previous two generations. (For reference, the final games' Dex contains 135 new Pokémon and 67 returning, for a total of 202.)
// ●図鑑評価メッセージ // ● 新規のポケモン 134 // ● 既出のポケモン 28 // ● 合計 162(隠しポケモン2匹)
// ● Pokédex evaluation messages // ● New Pokémon: 134 // ● Already-released Pokémon: 28 // ● Total: 162 (2 hidden Pokémon)
Because of this smaller Dex size, several of the evaluation messages from the final games are missing from the source's list (specifically, those used for counts of 130-139, 150-159, 160-169, and 190-199 Pokémon registered).
Pokédex Evaluation Rewards
Also in hyouka.mes is a set of messages for awarding the player with items upon reaching certain evaluation benchmarks, a feature that doesn't appear in the final games.
Requirement | Item rewarded | Message (1) | Translation | Message (2) | Translation |
---|---|---|---|---|---|
10 Pokémon registered | Great Ball | なかなか がんばって おるな!
[playername][honorific] には |
You've done well!
[playername][honorific], I'll give you some Great Balls! |
オダマキ『モンスターボールには いろいろ しゅるいが あるからな つかまえたい ポケモンによって |
PROF. BIRCH: There are a number of kinds of Poké Balls.
It might be good to use different ones |
30 Pokémon registered | Exp. Share | けっこう がんばって おるな!
おれいとして [playername][honorific] には |
You've really done well!
As a reward, [playername][honorific], |
オダマキ『がくしゅうそうちを もたせた ポケモンは たたかわなくても けいけんちを わけて もらえるんだぞ! |
PROF. BIRCH: Pokémon who are made to hold the Exp. Share can get a share of EXP even if they don't fight! |
50 Pokémon registered | Itemfinder | とっても がんばって おるな!
そんな [playername][honorific] には |
You've really done your best!
I'll give someone like you |
オダマキ『ダウジングマシンを つかうと みえないけれど おちている どうぐの そんざいを たしかめ られるのだよ! |
PROF. BIRCH: When you use the Itemfinder, items that you can't see on the ground can be detected! |
Additionally, commented-out event flags for having received these items can be found in saveflag.h:
//#define FE_HYOUKA_GET_ITEM01 (FE_FLAG_START+76) //評価アイテム //#define FE_HYOUKA_GET_ITEM02 (FE_FLAG_START+77) //評価アイテム //#define FE_HYOUKA_GET_ITEM03 (FE_FLAG_START+78) //評価アイテム
//#define FE_HYOUKA_GET_ITEM01 (FE_FLAG_START+76) //Evaluation item //#define FE_HYOUKA_GET_ITEM02 (FE_FLAG_START+77) //Evaluation item //#define FE_HYOUKA_GET_ITEM03 (FE_FLAG_START+78) //Evaluation item
The Pokémon series development pages
| |
---|---|
Generation I | Red, Green, & Blue (Debug ROM) • Yellow (Debug ROM) |
Generation II | Gold & Silver (Prototypes) • Crystal (Prototypes) |
Generation III | Ruby & Sapphire (Debug ROM) • FireRed & LeafGreen (Debug ROMs) • Emerald (Debug ROM) |
Generation IV | Diamond & Pearl (Prototypes) • Platinum (Prototypes) • HeartGold & SoulSilver (Prototypes) |
Generation V | Black & White (Prototypes) • Black 2 & White 2 |
Generation VI | X & Y (Prototypes) • Omega Ruby & Alpha Sapphire (Prototypes) |
Generation VII | Sun & Moon • Ultra Sun & Ultra Moon (Debug ROM) • Let's Go, Pikachu & Eevee! (Let's Go, Eevee! Prototypes) |
Other | |
Nintendo 64 | Pokémon Snap |