1 Speed up the start of the game
Sha0den edited this page 2025-10-08 23:31:47 -04:00

Pokémon Trading Card Game for the Game Boy Color certainly has its fair share of flaws, and one of the more obvious ones is that it takes quite a long time after starting a new game before you can actually begin playing. Most of this is because of the mandatory tutorial with Sam, but there are a few other things that can be sped up as well.

Contents

  1. Adjust the Default Text Speed
  2. Decrease Wait Time During the Opening Cutscene
  3. Make the Practice Duel Optional

1. Adjust the Default Text Speed

First, let's adjust the default text speed. There are five options in the configuration menu, and the default value when starting a new game is TEXT_SPEED_3, which adds a 2 frame delay after every tile of dialogue text that's printed on the screen. If you're looking to speed things up, that means changing this to either TEXT_SPEED_4, which uses a 1 frame delay, or TEXT_SPEED_5, which eliminates the delay altogether. Regardless of which option you choose, you'll only need to edit a single line in src/engine/starter_deck.asm.

 InitSaveData:
	...
 ; saved configuration options
	ld a, 2
	ld [sPrinterContrastLevel], a
-	ld a, TEXT_SPEED_3
+	ld a, TEXT_SPEED_4
	ld [sTextSpeed], a
	ld [wTextSpeed], a
	...

Note that if you wish to change the default value to TEXT_SPEED_5, then you should use xor a ; TEXT_SPEED_5 instead of ld a, TEXT_SPEED_5; the value of that constant happens to be 0, and "xor a" is a more efficient way to load 0 into the a register.

Regardless of whether or not you decide to change the default text speed, you should also consider adjusting which text speeds can have their delay cancelled by pressing the B button. Currently, this only applies to TEXT_SPEED_4, but you could easily have the game include TEXT_SPEED_3 as well. Just edit the following sections in src/home/print_text.asm.

 PrintScrollableText::
	...
.nonzero_text_speed
	ld a, [wTextSpeed]
-	cp TEXT_SPEED_3
+	cp TEXT_SPEED_2
	jr nc, .apply_delay
-	; if TEXT_SPEED_4, pressing b ignores the delay
+	; if TEXT_SPEED_3 or TEXT_SPEED_4, pressing B ignores the delay
	ldh a, [hKeysHeld]
	and PAD_B
	jr nz, .skip_delay
	...
 PrintText::
	...
	ld a, [wTextSpeed]
	inc a
-	cp TEXT_SPEED_3 + 1
+	cp TEXT_SPEED_2 + 1
	jr nc, .apply_delay
-	; if TEXT_SPEED_4, pressing B ignores the delay
+	; if TEXT_SPEED_3 or TEXT_SPEED_4, pressing B ignores the delay
	bit B_PAD_B, b
	jr nz, .skip_delay
	...

2. Decrease Wait Time During the Opening Cutscene

There's a rather long delay before and after moving the player's sprite to Mason Laboratory during the opening cutscene (3 seconds in total). This can be considerably reduced if you're looking to speed up the game's intro. The delay is handled within the first few lines of src/scripts/mason_laboratory.asm. For the purposes of this tutorial, we'll make each of these delays 20 frames (or 1/3 of a second), but you can change them to whatever value you feel is best.

Script_BeginGame:
	start_script
-	do_frames 60
+	do_frames 20
	walk_player_to_mason_lab
-	do_frames 120
+	do_frames 20
	enter_map $02, MASON_LABORATORY, 14, 26, NORTH
	quit_script_fully
	...

3. Make the Practice Duel Optional

The most time-consuming aspect of starting a new game is without a doubt having to learn how to play the Pokémon TCG by participating in a practice duel with Sam and Dr. Mason. While it's a useful feature to have for people who are either unfamiliar with the Pokémon TCG or else could benefit from a refresher course, it would be better for everyone if it wasn't mandatory. Most of what will need to be changed to make it optional is in src/scripts/mason_laboratory.asm, which is the same file that we edited during the previous step. Start by making the following changes to Script_EnterLabFirstTime.

 Script_EnterLabFirstTime:
	start_script
	move_player NORTH, 2
	move_player NORTH, 2
	move_player NORTH, 2
	move_player NORTH, 2
	move_player NORTH, 2
	move_player NORTH, 2
	move_player NORTH, 2
	move_player NORTH, 2
	move_player NORTH, 2
	print_npc_text Text05e3
	close_advanced_text_box
+	move_npc NPC_SAM, NPCMovement_d880
+	ask_question_jump Text05e4, .accepted_practice_duel
+	
+; declined practice duel
+	print_npc_text DeclinedPracticeDuelText
+	close_advanced_text_box
+	move_npc NPC_SAM, NPCMovement_d882
+	script_jump Script_AfterPracticeDuel.building_the_starter_deck
+
+.accepted_practice_duel
	set_next_npc_and_script NPC_SAM, .ows_d779
	end_script
	ret

 .ows_d779
	start_script
-	move_active_npc NPCMovement_d880
-	print_npc_text Text05e4
-	set_dialog_npc NPC_DRMASON
	print_npc_text Text05e5
	close_text_box
	move_active_npc NPCMovement_d882
	...

Next, we'll need to set up the label for the script jump that occurs when the practice duel is declined. Scroll down to Script_AfterPracticeDuel, and add the following line.

 Script_AfterPracticeDuel:
	start_script
	print_npc_text Text05eb
	print_npc_text Text05ef
	close_text_box
	move_active_npc NPCMovement_d896
	set_player_direction NORTH
	move_player NORTH, 1
	move_player NORTH, 1
	move_player NORTH, 1
	set_player_direction EAST
	move_player EAST, 1
	move_player EAST, 1
	set_player_direction NORTH
+.building_the_starter_deck
	print_npc_text Text05f0
	close_text_box
	print_text Text05f1
	...

Well, that takes care of the complicated part, but we'll still need to edit some of the game's text to match the changes that we just made to the scripts. Begin by opening src/text/text7.asm and scrolling down to Text05e3 and Text05e4. I suggest the following changes, but feel free to edit or delete even more of the original text. Just remember that Text05e4 can only be a single line since the "Yes" and "No" options will be printed in the second half of the text box. You might also want to get rid of the extra spaces at the ends of some of the lines (like the one in line "What? "); every one you delete frees up another byte in that text bank.

Text05e3:
	text "Oh! Why the rush, <RAMNAME>?"
	line "What? "
	line "You want to learn how to play"
	line "the Pokémon Trading Card Game?"
	line "So you, too, finally want to "
	line "start playing the card game. "
	line "Well, dueling is more fun than "
	line "just collecting cards!"
	line "First, you should try playing "
	line "with a Practice Deck. "
-	line "Here, I'll give you this Deck. "
-	line "And now you need an opponent..."
	line "Hey, Sam!"
-	line "Play with him for a while!"
+	line "Come over here for a minute!"
	done

Text05e4:
-	text "Yes, Dr. Mason."
-	line "Hello, <RAMNAME>."
+	text "Do you want to try a practice game?"
	done

Last but not least, the final text we referenced isn't in the original game. You can either replace one of the unused texts or add it to any of the text files that isn't yet full; you may want to take a look at the How to add a new text tutorial if you're still unfamiliar with the process. As with the previous texts, I'll provide my recommendation, but you can type whatever you prefer.

DeclinedPracticeDuelText:
	text "Well, if you change your mind,"
	line "Sam would be happy to help you."
	line "He can answer a lot of questions"
	line "that you might have about the game,"
	line "and he's always up for a match"
	line "using the practice decks."
	line "Sam can usually be found near"
	line "the card table to your left."
	done