• Just a reminder that providing specifics on, sharing links to, or naming websites where ROMs can be accessed is against the rules. If your post has any of this information it will be removed.
  • Ever thought it'd be cool to have your art, writing, or challenge runs featured on PokéCommunity? Click here for info - we'd love to spotlight your work!
  • Our weekly protagonist poll is now up! Vote for your favorite Conquest protagonist in the poll by clicking here.
  • Welcome to PokéCommunity! Register now and join one of the best fan communities on the 'net to talk Pokémon and more! We are not affiliated with The Pokémon Company or Nintendo.

[Pokered] [Help] Need help with my custom Sudowoodo event

  • 12
    Posts
    259
    Days
    • Seen Apr 26, 2025
    I implemented a custom Sudowoodo overworld event for my Pokered hack where players use a key item to trigger a battle with a wild Sudowoodo, similar to how the Snorlax battle works in Routes 12 and 16, but when I implemented this to route 25 I run into an issue with battles looping over and over again.

    This is my current script file for pokered/scripts/Route25.asm:

    Route25_Script:
    ld hl, wCurrentMapScriptFlags
    bit BIT_CUR_MAP_LOADED_2, [hl]
    res BIT_CUR_MAP_LOADED_2, [hl]
    call nz, Route25ResetScripts
    call EnableAutoTextBoxDrawing
    ld hl, Route25TrainerHeaders
    ld de, Route25_ScriptPointers
    ld a, [wRoute25CurScript]
    call ExecuteCurMapScriptInTable
    ld [wRoute25CurScript], a
    ret

    Route25ResetScripts:
    xor a ; SCRIPT_ROUTE25_DEFAULT
    ld [wJoyIgnore], a
    ld [wRoute25CurScript], a
    ld [wCurMapScript], a
    ld hl, wCurrentMapScriptFlags
    set BIT_CUR_MAP_LOADED_2, [hl]
    Route25ShowHideBillScript:
    ld hl, wCurrentMapScriptFlags
    bit BIT_CUR_MAP_LOADED_2, [hl]
    res BIT_CUR_MAP_LOADED_2, [hl]
    ret z
    CheckEventHL EVENT_LEFT_BILLS_HOUSE_AFTER_HELPING
    ret nz
    CheckEventReuseHL EVENT_MET_BILL_2
    jr nz, .met_bill
    ResetEventReuseHL EVENT_BILL_SAID_USE_CELL_SEPARATOR
    ld a, HS_BILL_POKEMON
    ld [wMissableObjectIndex], a
    predef_jump ShowObject
    .met_bill
    CheckEventAfterBranchReuseHL EVENT_GOT_SS_TICKET, EVENT_MET_BILL_2
    ret z
    SetEventReuseHL EVENT_LEFT_BILLS_HOUSE_AFTER_HELPING
    ld a, HS_NUGGET_BRIDGE_GUY
    ld [wMissableObjectIndex], a
    predef HideObject
    ld a, HS_BILL_1
    ld [wMissableObjectIndex], a
    predef HideObject
    ld a, HS_BILL_2
    ld [wMissableObjectIndex], a
    predef_jump ShowObject

    Route25_ScriptPointers:
    def_script_pointers
    dw_const Route25DefaultScript, SCRIPT_ROUTE25_DEFAULT
    dw_const DisplayEnemyTrainerTextAndStartBattle, SCRIPT_ROUTE25_START_BATTLE
    dw_const EndTrainerBattle, SCRIPT_ROUTE25_END_BATTLE
    dw_const Route25SudowoodoPostBattleScript, SCRIPT_ROUTE25_SUDOWOODO_POST_BATTLE

    Route25DefaultScript:
    CheckEventHL EVENT_BEAT_ROUTE25_SUDOWOODO
    jp nz, CheckFightingMapTrainers
    CheckEventReuseHL EVENT_FIGHT_ROUTE25_SUDOWOODO
    ResetEventReuseHL EVENT_FIGHT_ROUTE25_SUDOWOODO
    jp z, CheckFightingMapTrainers
    ld a, TEXT_ROUTE25_SUDOWOODO_ATTACKED
    ldh [hTextID], a
    call DisplayTextID
    ld a, SUDOWOODO
    ld [wCurOpponent], a
    ld a, 20
    ld [wCurEnemyLevel], a
    xor a
    ld [wIsTrainerBattle], a
    ld a, HS_ROUTE_25_SUDOWOODO
    ld [wMissableObjectIndex], a
    predef HideObject
    call UpdateSprites
    ld a, SCRIPT_ROUTE25_SUDOWOODO_POST_BATTLE
    ld [wRoute25CurScript], a
    ld [wCurMapScript], a
    ret

    Route25SudowoodoPostBattleScript:
    ld a, [wIsInBattle]
    cp $ff
    jp z, Route25ResetScripts
    call UpdateSprites
    ld a, [wBattleResult]
    cp $2
    jr z, .caught
    ld a, TEXT_ROUTE25_SUDOWOODO_FLED
    ldh [hTextID], a
    call DisplayTextID
    .caught
    SetEvent EVENT_BEAT_ROUTE25_SUDOWOODO
    call Delay3
    ld a, SCRIPT_ROUTE25_DEFAULT
    ld [wRoute25CurScript], a
    ld [wCurMapScript], a
    ret

    Route25_TextPointers:
    def_text_pointers
    dw_const Route25Youngster1Text, TEXT_ROUTE25_YOUNGSTER1
    dw_const Route25Youngster2Text, TEXT_ROUTE25_YOUNGSTER2
    dw_const Route25CooltrainerMText, TEXT_ROUTE25_COOLTRAINER_M
    dw_const Route25CooltrainerF1Text, TEXT_ROUTE25_COOLTRAINER_F1
    dw_const Route25Youngster3Text, TEXT_ROUTE25_YOUNGSTER3
    dw_const Route25CooltrainerF2Text, TEXT_ROUTE25_COOLTRAINER_F2
    dw_const Route25Hiker1Text, TEXT_ROUTE25_HIKER1
    dw_const Route25Hiker2Text, TEXT_ROUTE25_HIKER2
    dw_const Route25Hiker3Text, TEXT_ROUTE25_HIKER3
    dw_const PickUpItemText, TEXT_ROUTE25_TM_SEISMIC_TOSS
    dw_const Route25SudowoodoText, TEXT_ROUTE25_SUDOWOODO
    dw_const Route25BillSignText, TEXT_ROUTE25_BILL_SIGN
    dw_const Route25SudowoodoAttackedText, TEXT_ROUTE25_SUDOWOODO_ATTACKED
    dw_const Route25SudowoodoFledText, TEXT_ROUTE25_SUDOWOODO_FLED

    Route25TrainerHeaders:
    def_trainers
    Route25TrainerHeader0:
    trainer EVENT_BEAT_ROUTE_25_TRAINER_0, 2, Route25Youngster1BattleText, Route25Youngster1EndBattleText, Route25Youngster1AfterBattleText
    Route25TrainerHeader1:
    trainer EVENT_BEAT_ROUTE_25_TRAINER_1, 3, Route25Youngster2BattleText, Route25Youngster2EndBattleText, Route25Youngster2AfterBattleText
    Route25TrainerHeader2:
    trainer EVENT_BEAT_ROUTE_25_TRAINER_2, 3, Route25CooltrainerMBattleText, Route25CooltrainerMEndBattleText, Route25CooltrainerMAfterBattleText
    Route25TrainerHeader3:
    trainer EVENT_BEAT_ROUTE_25_TRAINER_3, 2, Route25CooltrainerF1BattleText, Route25CooltrainerF1EndBattleText, Route25CooltrainerF1AfterBattleText
    Route25TrainerHeader4:
    trainer EVENT_BEAT_ROUTE_25_TRAINER_4, 4, Route25Youngster3BattleText, Route25Youngster3EndBattleText, Route25Youngster3AfterBattleText
    Route25TrainerHeader5:
    trainer EVENT_BEAT_ROUTE_25_TRAINER_5, 4, Route25CooltrainerF2BattleText, Route25CooltrainerF2EndBattleText, Route25CooltrainerF2AfterBattleText
    Route25TrainerHeader6:
    trainer EVENT_BEAT_ROUTE_25_TRAINER_6, 3, Route25Hiker1BattleText, Route25Hiker1EndBattleText, Route25Hiker1AfterBattleText
    Route25TrainerHeader7:
    trainer EVENT_BEAT_ROUTE_25_TRAINER_7, 2, Route25Hiker2BattleText, Route25Hiker2EndBattleText, Route25Hiker2AfterBattleText
    Route25TrainerHeader8:
    trainer EVENT_BEAT_ROUTE_25_TRAINER_8, 2, Route25Hiker3BattleText, Route25Hiker3EndBattleText, Route25Hiker3AfterBattleText
    db -1 ; end

    Route25Youngster1Text:
    text_asm
    ld hl, Route25TrainerHeader0
    call TalkToTrainer
    jp TextScriptEnd

    Route25Youngster2Text:
    text_asm
    ld hl, Route25TrainerHeader1
    call TalkToTrainer
    jp TextScriptEnd

    Route25CooltrainerMText:
    text_asm
    ld hl, Route25TrainerHeader2
    call TalkToTrainer
    jp TextScriptEnd

    Route25CooltrainerF1Text:
    text_asm
    ld hl, Route25TrainerHeader3
    call TalkToTrainer
    jp TextScriptEnd

    Route25Youngster3Text:
    text_asm
    ld hl, Route25TrainerHeader4
    call TalkToTrainer
    jp TextScriptEnd

    Route25CooltrainerF2Text:
    text_asm
    ld hl, Route25TrainerHeader5
    call TalkToTrainer
    jp TextScriptEnd

    Route25Hiker1Text:
    text_asm
    ld hl, Route25TrainerHeader6
    call TalkToTrainer
    jp TextScriptEnd

    Route25Hiker2Text:
    text_asm
    ld hl, Route25TrainerHeader7
    call TalkToTrainer
    jp TextScriptEnd

    Route25Hiker3Text:
    text_asm
    ld hl, Route25TrainerHeader8
    call TalkToTrainer
    jp TextScriptEnd

    Route25Youngster1BattleText:
    text_far _Route25Youngster1BattleText
    text_end

    Route25Youngster1EndBattleText:
    text_far _Route25Youngster1EndBattleText
    text_end

    Route25Youngster1AfterBattleText:
    text_far _Route25Youngster1AfterBattleText
    text_end

    Route25Youngster2BattleText:
    text_far _Route25Youngster2BattleText
    text_end

    Route25Youngster2EndBattleText:
    text_far _Route25Youngster2EndBattleText
    text_end

    Route25Youngster2AfterBattleText:
    text_far _Route25Youngster2AfterBattleText
    text_end

    Route25CooltrainerMBattleText:
    text_far _Route25CooltrainerMBattleText
    text_end

    Route25CooltrainerMEndBattleText:
    text_far _Route25CooltrainerMEndBattleText
    text_end

    Route25CooltrainerMAfterBattleText:
    text_far _Route25CooltrainerMAfterBattleText
    text_end

    Route25CooltrainerF1BattleText:
    text_far _Route25CooltrainerF1BattleText
    text_end

    Route25CooltrainerF1EndBattleText:
    text_far _Route25CooltrainerF1EndBattleText
    text_end

    Route25CooltrainerF1AfterBattleText:
    text_far _Route25CooltrainerF1AfterBattleText
    text_end

    Route25Youngster3BattleText:
    text_far _Route25Youngster3BattleText
    text_end

    Route25Youngster3EndBattleText:
    text_far _Route25Youngster3EndBattleText
    text_end

    Route25Youngster3AfterBattleText:
    text_far _Route25Youngster3AfterBattleText
    text_end

    Route25CooltrainerF2BattleText:
    text_far _Route25CooltrainerF2BattleText
    text_end

    Route25CooltrainerF2EndBattleText:
    text_far _Route25CooltrainerF2EndBattleText
    text_end

    Route25CooltrainerF2AfterBattleText:
    text_far _Route25CooltrainerF2AfterBattleText
    text_end

    Route25Hiker1BattleText:
    text_far _Route25Hiker1BattleText
    text_end

    Route25Hiker1EndBattleText:
    text_far _Route25Hiker1EndBattleText
    text_end

    Route25Hiker1AfterBattleText:
    text_far _Route25Hiker1AfterBattleText
    text_end

    Route25Hiker2BattleText:
    text_far _Route25Hiker2BattleText
    text_end

    Route25Hiker2EndBattleText:
    text_far _Route25Hiker2EndBattleText
    text_end

    Route25Hiker2AfterBattleText:
    text_far _Route25Hiker2AfterBattleText
    text_end

    Route25Hiker3BattleText:
    text_far _Route25Hiker3BattleText
    text_end

    Route25Hiker3EndBattleText:
    text_far _Route25Hiker3EndBattleText
    text_end

    Route25Hiker3AfterBattleText:
    text_far _Route25Hiker3AfterBattleText
    text_end

    Route25SudowoodoText:
    text_far _Route25SudowoodoText
    text_end

    Route25SudowoodoAttackedText:
    text_far _Route25SudowoodoAttackedText
    text_end

    Route25SudowoodoFledText:
    text_far _Route25SudowoodoFledText
    text_end

    Route25BillSignText:
    text_far _Route25BillSignText
    text_end

    This works almost perfectly, but I am not able to clear battles. If you run into a trainer, you will be stuck in an infinite loop where you battle the same trainer over and over again, and the Sudowoodo object is never cleared, whether you beat them or catch them, which is the same as having infinitely many Sudowoodo available, which is not good.

    Any help would be greatly appreciated.
     
    It's clear to me that I made some mistake with my scripting and the EndTrainerBattle script is interrupted, causing the infinite loop, but I haven't been able to find exactly what is interrupting it. Any help with this would be appreciated.
     
    Back
    Top