We just reached 30,000 articles on this wiki! 🥳
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

From The Cutting Room Floor
Jump to navigation Jump to search

This page details development materials of Pokémon Ruby and Sapphire.

How about a nice leek in this trying time?
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.
How about a nice leek in this trying time?
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.

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

Pm3f 339 エルホーク.png
Sprites
Early sprites, scratchpads, and a ton of unused Pokémon.
PRS-Dev-ConceptIcon.png
Concept Art
Found inside of the October 2024 leaks, with many of them showing an interesting experimentation phase during early development.
PKMNRS 戦闘001004.png
Graphic Mockups
Photoshop mockups of the battle interface and more.
Pm3f 335 ソーナノ.png
Pokémon Data
Changes to the data pertaining to the Pokémon.
PKMNRS-base01 1 map collision.png
Early Maps
A look at earlier maps.
PKMNRS BW Brandon.png
Unused Graphics
Graphics not present in the final build.
PKMN RS Question Mark.png
Early Pokemon List
Spreadsheets from May and June 2002 that list the new Pokemon.
DevTextIcon.png
Jun 11-Dec 25, 2001 Logs
Developer weekly logs from June 11 to December 25, 2001
TextIcon.png
Jan 08-Jun 24, 2002 Logs
Developer weekly logs from January 8 to June 24, 2002
NotesIcon.png
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 )


(Source: Farore, N. Onymous (translation)

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


(Source: Farore & Wobbuu, N. Onymous (translation)

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;
	}


(Source: Farore, N. Onymous (translation), Zyxyz)

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


(Source: Farore, Xiartic)

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


(Source: Flametix)

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.
My Pokémon are by my side too…

ポケモンと てを とりあえば
どんなに けわしい やまも のぼれるね
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,
so how about battling me?

むむぅ‥‥
きょうは しおの かげんが わるい!
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…
(Source: Original TCRF research)

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
depending on the Pokémon you want to catch!

30 Pokémon registered Exp. Share けっこう がんばって おるな!

おれいとして [playername][honorific] には
この がくしゅうそうちを あげよう!

You've really done well!

As a reward, [playername][honorific],
I'll give you this Exp. Share.

オダマキ『がくしゅうそうちを もたせた
ポケモンは たたかわなくても
けいけんちを わけて もらえるんだぞ!
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
an Itemfinder!

オダマキ『ダウジングマシンを つかうと
みえないけれど おちている どうぐの
そんざいを たしかめ られるのだよ!
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
(Source: Original TCRF research)