[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;</code></pre><p>这里删除了gTasks[taskId].func = Task_NewGameBirchSpeech_Init;</p><p>这个文件src\overworld.c,修改CB2_NewGame函数</p><pre class="enlighter-pre"><code class="gl">void CB2_NewGame(void)

{

FieldClearVBlankHBlankCallbacks();
StopMapMusic();
ResetSafariZoneFlag_();
NewGameInitData();
ResetInitialPlayerAvatarState();
PlayTimeCounter_Start();
ScriptContext_Init();
UnlockPlayerFieldControls();
gFieldCallback = NULL; // 跳过卡车动画
gFieldCallback2 = NULL;
DoMapLoadLoop(&amp;gMain.state);
SetFieldVBlankCallback();
SetMainCallback1(CB1_Overworld);
SetMainCallback2(CB2_Overworld);</code></pre><p>修改SetUpCopyrightScreen函数,让它在版权封面结束后直接跳转到标题屏幕,而不是继续播放介绍动画。</p><pre class="enlighter-pre"><code class="gl">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(&amp;gMultiBootProgram_PokemonColosseum_Start, (void *)EWRAM_START, sizeof(gMultiBootProgram_PokemonColosseum_Start));
                *(u32 *)(EWRAM_START + 0xAC) = COLOSSEUM_GAME_CODE;
            }
            GameCubeMultiBoot_ExecuteProgram(&amp;gMultibootProgramStruct);
        }
    }</code></pre></div>
支持这篇文章点赞、收藏或分享给朋友
DISCUSSION

发表评论

留下你的想法

输入 @用户名 可以提及站内用户0 / 5000