[GBA教程]跳过开头动画、卡车、取名以及默认固定男女主

[GBA教程]跳过开头动画、卡车、取名以及默认固定男女主

修改这个src\main_menu.c文件的函数Task_NewGameBirchSpeech_BoyOrGirl

static void Task_NewGameBirchSpeech_BoyOrGirl(u8 taskId)
{
    // 直接设置男主性别
    gSaveBlock2Ptr->playerGender = MALE;
    // 设置默认男主名字(使用第一个预设名字)
    NewGameBirchSpeech_SetDefaultPlayerName(0);
    // 跳过性别选择和取名流程,直接进入游戏
    BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK);
    gTasks[taskId].func = Task_NewGameBirchSpeech_Cleanup;
}

修改Task_HandleMainMenuAPressed函数,当选择”从头开始”时,跳过博士介绍的初始剧情,直接设置男主性别和名字,然后调用CB2_NewGame函数进入游戏。

switch (action)
        {
            case ACTION_NEW_GAME:
            default:
                gPlttBufferUnfaded[0] = RGB_BLACK;
                gPlttBufferFaded[0] = RGB_BLACK;
                // 直接设置男主性别
                gSaveBlock2Ptr->playerGender = MALE;
                // 设置默认男主名字(使用第一个预设名字)
                NewGameBirchSpeech_SetDefaultPlayerName(0);
                // 跳过博士介绍的初始剧情,直接进入游戏
                SetMainCallback2(CB2_NewGame);
                DestroyTask(taskId);
                break;

这里删除了gTasks[taskId].func = Task_NewGameBirchSpeech_Init;

这个文件src\overworld.c,修改CB2_NewGame函数

void CB2_NewGame(void)
{
    FieldClearVBlankHBlankCallbacks();
    StopMapMusic();
    ResetSafariZoneFlag_();
    NewGameInitData();
    ResetInitialPlayerAvatarState();
    PlayTimeCounter_Start();
    ScriptContext_Init();
    UnlockPlayerFieldControls();
    gFieldCallback = NULL; // 跳过卡车动画
    gFieldCallback2 = NULL;
    DoMapLoadLoop(&gMain.state);
    SetFieldVBlankCallback();
    SetMainCallback1(CB1_Overworld);
    SetMainCallback2(CB2_Overworld);

修改SetUpCopyrightScreen函数,让它在版权封面结束后直接跳转到标题屏幕,而不是继续播放介绍动画。

case COPYRIGHT_START_INTRO:
        if (UpdatePaletteFade())
            break;
        // 跳过介绍动画,直接进入标题屏幕
        SetMainCallback2(CB2_InitTitleScreen);
        if (gMultibootProgramStruct.gcmb_field_2 != 0)
        {
            if (gMultibootProgramStruct.gcmb_field_2 == 2)
            {
                // check the multiboot ROM header game code to see if we already did this
                if (*(u32 *)(EWRAM_START + 0xAC) == COLOSSEUM_GAME_CODE)
                {
                    CpuCopy16(&gMultiBootProgram_PokemonColosseum_Start, (void *)EWRAM_START, sizeof(gMultiBootProgram_PokemonColosseum_Start));
                    *(u32 *)(EWRAM_START + 0xAC) = COLOSSEUM_GAME_CODE;
                }
                GameCubeMultiBoot_ExecuteProgram(&gMultibootProgramStruct);
            }
        }
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容