-
Notifications
You must be signed in to change notification settings - Fork 4.4k
Have Only One Starter Pokemon In Birch's Bag
original source: LeMajaw
Have only one starter pokemon in Birch's bag
This code removes two of the pokeballs in Birch's bag and prevents the hand cursor moving to the positiions they used to be in
pull from the branch or add manually using the code below
git remote add tenaya15 https://github.com/tenaya15/tenaya15emerald.git
git pull tenaya15 only_one_starter_pokemon
in section static const u16 sStarterMon[STARTER_MON_COUNT] =
change all three starters to the same chosen starter (Eevee in this example)
every slot is Eevee, so the chosen starter is always Eevee
regardless of which Poké Ball index the UI reports back
SPECIES_EEVEE,
SPECIES_EEVEE,
SPECIES_EEVEE,
__
in section void CB2_ChooseStarter(void)
delete the following lines (lines 449 to 452)
this removes the other 2 pokeballs from the bag
// Create three Poké Ball sprites
spriteId = CreateSprite(&sSpriteTemplate_Pokeball, sPokeballCoords[0][0], sPokeballCoords[0][1], 2);
gSprites[spriteId].sTaskId = taskId;
gSprites[spriteId].sBallId = 0;
and also delete the following lines (now lines 453 to 455)
spriteId = CreateSprite(&sSpriteTemplate_Pokeball, sPokeballCoords[2][0], sPokeballCoords[2][1], 2);
gSprites[spriteId].sTaskId = taskId;
gSprites[spriteId].sBallId = 2;
so the whole section should be:
void CB2_ChooseStarter(void)
{
u8 taskId;
u8 spriteId;
SetVBlankCallback(NULL);
SetGpuReg(REG_OFFSET_DISPCNT, 0);
SetGpuReg(REG_OFFSET_BG3CNT, 0);
SetGpuReg(REG_OFFSET_BG2CNT, 0);
SetGpuReg(REG_OFFSET_BG1CNT, 0);
SetGpuReg(REG_OFFSET_BG0CNT, 0);
ChangeBgX(0, 0, BG_COORD_SET);
ChangeBgY(0, 0, BG_COORD_SET);
ChangeBgX(1, 0, BG_COORD_SET);
ChangeBgY(1, 0, BG_COORD_SET);
ChangeBgX(2, 0, BG_COORD_SET);
ChangeBgY(2, 0, BG_COORD_SET);
ChangeBgX(3, 0, BG_COORD_SET);
ChangeBgY(3, 0, BG_COORD_SET);
DmaFill16(3, 0, VRAM, VRAM_SIZE);
DmaFill32(3, 0, OAM, OAM_SIZE);
DmaFill16(3, 0, PLTT, PLTT_SIZE);
LZ77UnCompVram(gBirchBagGrass_Gfx, (void *)VRAM);
LZ77UnCompVram(gBirchBagTilemap, (void *)(BG_SCREEN_ADDR(6)));
LZ77UnCompVram(gBirchGrassTilemap, (void *)(BG_SCREEN_ADDR(7)));
ResetBgsAndClearDma3BusyFlags(0);
InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates));
InitWindows(sWindowTemplates);
DeactivateAllTextPrinters();
LoadUserWindowBorderGfx(0, 0x2A8, BG_PLTT_ID(13));
ClearScheduledBgCopiesToVram();
ScanlineEffect_Stop();
ResetTasks();
ResetSpriteData();
ResetPaletteFade();
FreeAllSpritePalettes();
ResetAllPicSprites();
LoadPalette(GetOverworldTextboxPalettePtr(), BG_PLTT_ID(14), PLTT_SIZE_4BPP);
LoadPalette(gBirchBagGrass_Pal, BG_PLTT_ID(0), sizeof(gBirchBagGrass_Pal));
LoadCompressedSpriteSheet(&sSpriteSheet_PokeballSelect[0]);
LoadCompressedSpriteSheet(&sSpriteSheet_StarterCircle[0]);
LoadSpritePalettes(sSpritePalettes_StarterChoose);
BeginNormalPaletteFade(PALETTES_ALL, 0, 0x10, 0, RGB_BLACK);
EnableInterrupts(DISPSTAT_VBLANK);
SetVBlankCallback(VblankCB_StarterChoose);
SetMainCallback2(CB2_StarterChoose);
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR);
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ);
SetGpuReg(REG_OFFSET_WIN0H, 0);
SetGpuReg(REG_OFFSET_WIN0V, 0);
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_DARKEN);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
SetGpuReg(REG_OFFSET_BLDY, 7);
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
ShowBg(0);
ShowBg(2);
ShowBg(3);
taskId = CreateTask(Task_StarterChoose, 0);
gTasks[taskId].tStarterSelection = 1;
// Create hand sprite
spriteId = CreateSprite(&sSpriteTemplate_Hand, 120, 56, 2);
gSprites[spriteId].data[0] = taskId;
spriteId = CreateSprite(&sSpriteTemplate_Pokeball, sPokeballCoords[1][0], sPokeballCoords[1][1], 2);
gSprites[spriteId].sTaskId = taskId;
gSprites[spriteId].sBallId = 1;
sStarterLabelWindowId = WINDOW_NONE;
}
__
in section static void Task_HandleStarterChooseInput(u8 taskId)
replace the entire section with
{
u8 selection = gTasks[taskId].tStarterSelection;
if (JOY_NEW(A_BUTTON))
{
u8 spriteId;
ClearStarterLabel();
// Create white circle background
spriteId = CreateSprite(&sSpriteTemplate_StarterCircle, sPokeballCoords[selection][0], sPokeballCoords[selection][1], 1);
gTasks[taskId].tCircleSpriteId = spriteId;
// Create Pokémon sprite
// only one Poké Ball is shown, so left/right movement is
// disabled - the cursor stays on the lone ball.
spriteId = CreatePokemonFrontSprite(GetStarterPokemon(gTasks[taskId].tStarterSelection), sPokeballCoords[selection][0], sPokeballCoords[selection][1]);
gSprites[spriteId].x2 = 4;
gSprites[spriteId].y2 = 2;
gSprites[spriteId].affineAnims = &sAffineAnims_StarterPokemon;;
gSprites[spriteId].callback = SpriteCB_StarterPokemon;
gTasks[taskId].tPkmnSpriteId = spriteId;
gTasks[taskId].func = Task_WaitForStarterSprite;
}
// only one Poké Ball is shown, so left/right movement is
// disabled - the cursor stays on the lone ball.
}