diff --git a/data/maps/PalletTown_ProfessorOaksLab/scripts.inc b/data/maps/PalletTown_ProfessorOaksLab/scripts.inc
index c23534df8..2a8f9bda2 100644
--- a/data/maps/PalletTown_ProfessorOaksLab/scripts.inc
+++ b/data/maps/PalletTown_ProfessorOaksLab/scripts.inc
@@ -1078,7 +1078,7 @@ PalletTown_ProfessorOaksLab_EventScript_BulbasaurBall::
lock
faceplayer
setvar PLAYER_STARTER_NUM, 0
- setvar PLAYER_STARTER_SPECIES, SPECIES_BULBASAUR
+ special RandomGrassStarter
setvar RIVAL_STARTER_SPECIES, SPECIES_CHARMANDER
setvar RIVAL_STARTER_ID, LOCALID_CHARMANDER_BALL
goto_if_ge VAR_MAP_SCENE_PALLET_TOWN_PROFESSOR_OAKS_LAB, 3, PalletTown_ProfessorOaksLab_EventScript_LastPokeBall
@@ -1221,7 +1221,7 @@ PalletTown_ProfessorOaksLab_EventScript_SquirtleBall::
lock
faceplayer
setvar PLAYER_STARTER_NUM, 1
- setvar PLAYER_STARTER_SPECIES, SPECIES_SQUIRTLE
+ special RandomWaterStarter
setvar RIVAL_STARTER_SPECIES, SPECIES_BULBASAUR
setvar RIVAL_STARTER_ID, LOCALID_BULBASAUR_BALL
goto_if_ge VAR_MAP_SCENE_PALLET_TOWN_PROFESSOR_OAKS_LAB, 3, PalletTown_ProfessorOaksLab_EventScript_LastPokeBall
@@ -1234,7 +1234,7 @@ PalletTown_ProfessorOaksLab_EventScript_CharmanderBall::
lock
faceplayer
setvar PLAYER_STARTER_NUM, 2
- setvar PLAYER_STARTER_SPECIES, SPECIES_CHARMANDER
+ special RandomFireStarter
setvar RIVAL_STARTER_SPECIES, SPECIES_SQUIRTLE
setvar RIVAL_STARTER_ID, LOCALID_SQUIRTLE_BALL
goto_if_ge VAR_MAP_SCENE_PALLET_TOWN_PROFESSOR_OAKS_LAB, 3, PalletTown_ProfessorOaksLab_EventScript_LastPokeBall
diff --git a/data/specials.inc b/data/specials.inc
index d880bf6b9..4ffddc50c 100644
--- a/data/specials.inc
+++ b/data/specials.inc
@@ -452,4 +452,7 @@ gSpecials::
def_special UpdateLoreleiDollCollection
def_special LoopWingFlapSound
def_special CreateEnemyEventMon
+ def_special RandomGrassStarter
+ def_special RandomWaterStarter
+ def_special RandomFireStarter
gSpecialsEnd::
diff --git a/src/field_specials.c b/src/field_specials.c
index d7dbb6f81..a1d3bc1a7 100644
--- a/src/field_specials.c
+++ b/src/field_specials.c
@@ -2553,3 +2553,21 @@ static void Task_WingFlapSound(u8 taskId)
if (data[0] == gSpecialVar_0x8004 - 1)
DestroyTask(taskId);
}
+
+void RandomGrassStarter(void)
+{
+ static const u16 sRandomSpecies[] = { SPECIES_BULBASAUR, SPECIES_ODDISH, SPECIES_BELLSPROUT, SPECIES_EXEGGCUTE, SPECIES_TANGELA };
+ VarSet(VAR_TEMP_2, sRandomSpecies[Random() % ARRAY_COUNT(sRandomSpecies)]);
+}
+
+void RandomWaterStarter(void)
+{
+ static const u16 sRandomSpecies[] = { SPECIES_CHARMANDER, SPECIES_VULPIX, SPECIES_GROWLITHE, SPECIES_PONYTA, SPECIES_MAGMAR };
+ VarSet(VAR_TEMP_2, sRandomSpecies[Random() % ARRAY_COUNT(sRandomSpecies)]);
+}
+
+void RandomFireStarter(void)
+{
+ static const u16 sRandomSpecies[] = { SPECIES_SQUIRTLE, SPECIES_PSYDUCK, SPECIES_POLIWAG, SPECIES_TENTACOOL, SPECIES_SLOWPOKE };
+ VarSet(VAR_TEMP_2, sRandomSpecies[Random() % ARRAY_COUNT(sRandomSpecies)]);
+}