FightingDojo_Script: call EnableAutoTextBoxDrawing ld hl, FightingDojoTrainerHeaders ld de, FightingDojo_ScriptPointers ld a, [wFightingDojoCurScript] call ExecuteCurMapScriptInTable ld [wFightingDojoCurScript], a ret FightingDojoScript_5cd70: xor a ld [wJoyIgnore], a ld [wFightingDojoCurScript], a ld [wCurMapScript], a ret FightingDojo_ScriptPointers: dw FightingDojoScript1 dw DisplayEnemyTrainerTextAndStartBattle dw EndTrainerBattle dw FightingDojoScript3 FightingDojoScript1: call CheckFightingMapTrainers ld a, [wTrainerHeaderFlagBit] and a ret nz CheckEvent EVENT_BEAT_KARATE_MASTER ret nz xor a ldh [hJoyHeld], a ld [wcf0d], a ld a, [wYCoord] cp 2 ret nz ld a, [wXCoord] cp 4 ret nz ld a, $1 ld [wcf0d], a ld a, PLAYER_DIR_UP ld [wPlayerMovingDirection], a ld a, $1 ldh [hSpriteIndex], a ld a, SPRITE_FACING_DOWN ldh [hSpriteFacingDirection], a call SetSpriteFacingDirectionAndDelay ld a, $1 ldh [hSpriteIndexOrTextID], a call DisplayTextID ret FightingDojoScript3: ld a, [wIsInBattle] cp $ff jp z, FightingDojoScript_5cd70 ld a, [wcf0d] and a jr z, .asm_5cde4 ld a, PLAYER_DIR_UP ld [wPlayerMovingDirection], a ld a, $1 ldh [hSpriteIndex], a ld a, SPRITE_FACING_DOWN ldh [hSpriteFacingDirection], a call SetSpriteFacingDirectionAndDelay .asm_5cde4 ld a, $f0 ld [wJoyIgnore], a SetEventRange EVENT_DEFEATED_FIGHTING_DOJO, EVENT_BEAT_FIGHTING_DOJO_TRAINER_3 ld a, $9 ldh [hSpriteIndexOrTextID], a call DisplayTextID xor a ld [wJoyIgnore], a ld [wFightingDojoCurScript], a ld [wCurMapScript], a ret FightingDojo_TextPointers: dw FightingDojoText1 dw FightingDojoText2 dw FightingDojoText3 dw FightingDojoText4 dw FightingDojoText5 dw FightingDojoText6 dw FightingDojoText7 dw FightingDojoTextHitmontop dw FightingDojoText8 FightingDojoTrainerHeaders: def_trainers 2 FightingDojoTrainerHeader0: trainer EVENT_BEAT_FIGHTING_DOJO_TRAINER_0, 4, FightingDojoBattleText1, FightingDojoEndBattleText1, FightingDojoAfterBattleText1 FightingDojoTrainerHeader1: trainer EVENT_BEAT_FIGHTING_DOJO_TRAINER_1, 4, FightingDojoBattleText2, FightingDojoEndBattleText2, FightingDojoAfterBattleText2 FightingDojoTrainerHeader2: trainer EVENT_BEAT_FIGHTING_DOJO_TRAINER_2, 3, FightingDojoBattleText3, FightingDojoEndBattleText3, FightingDojoAfterBattleText3 FightingDojoTrainerHeader3: trainer EVENT_BEAT_FIGHTING_DOJO_TRAINER_3, 3, FightingDojoBattleText4, FightingDojoEndBattleText4, FightingDojoAfterBattleText4 db -1 ; end FightingDojoText1: ; gym scaling can be removed to make space text_asm CheckEvent EVENT_POST_GAME_ATTAINED ; No need to view previous stuff, technically you can skip Bide this way but I think that's hilarious jp z, .normalProcessing CheckEvent EVENT_DEFEATED_FIGHTING_DOJO jp z, .normalProcessing ld hl, KoichiRematchPreBattleText ; Rematch functionality. Just loads pre-battle text and his trainer. call PrintText ld c, BANK(Music_MeetMaleTrainer) ld a, MUSIC_MEET_MALE_TRAINER call PlayMusic ld hl, wd72d set 6, [hl] set 7, [hl] ldh a, [hSpriteIndex] ld [wSpriteIndex], a ld hl, KoichiRematchDefeatedText ld de, KoichiRematchDefeatedText call SaveEndBattleTextPointers call EngageMapTrainer ld a, OPP_KOICHI ld [wCurOpponent], a ld a, 10 ; Silph Gauntlet lineup. ld [wTrainerNo], a ld a, 1 ld [wIsTrainerBattle], a jr .asm_9dba4 .normalProcessing CheckEvent EVENT_DEFEATED_FIGHTING_DOJO jp nz, .continue1 CheckEventReuseA EVENT_BEAT_KARATE_MASTER jp nz, .continue2 CheckEvent EVENT_GOT_HITMON ; failsafe jp nz, .continue2 ld hl, FightingDojoText_5ce8e call PrintText ld hl, wd72d set 6, [hl] set 7, [hl] ld hl, FightingDojoText_5ce93 ld de, FightingDojoText_5ce93 call SaveEndBattleTextPointers ldh a, [hSpriteIndexOrTextID] ld [wSpriteIndex], a call EngageMapTrainer ; call InitBattleEnemyParameters ; put this back if you mess up ; gym scaling spaghetti code begins here - remove initial parameters as we're making our own ld a, OPP_KOICHI ld [wCurOpponent], a ld hl, wObtainedBadges ; Picking the team based on badge count. Need +1 so it loads the right team: remember, you're fighting for the badge! Thanks to Chatot4444 for the help. ld b, 1 call CountSetBits ld a, [wNumSetBits] inc a ld [wTrainerNo], a ld a, 1 ld [wIsTrainerBattle], a ;ends here ld a, $3 ld [wFightingDojoCurScript], a ld [wCurMapScript], a jr .asm_9dba4 .continue1 ld hl, FightingDojoText_5ce9d call PrintText jr .asm_9dba4 .continue2 ld hl, FightingDojoText8 call PrintText .asm_9dba4 jp TextScriptEnd FightingDojoText_5ce8e: text_far _FightingDojoText_5ce8e text_end FightingDojoText_5ce93: text_far _FightingDojoText_5ce93 text_end FightingDojoText8: text_far _FightingDojoText_5ce98 text_end FightingDojoText_5ce9d: text_far _FightingDojoText_5ce9d text_end FightingDojoText2: text_asm ld hl, FightingDojoTrainerHeader0 call TalkToTrainer jp TextScriptEnd FightingDojoBattleText1: text_far _FightingDojoBattleText1 text_end FightingDojoEndBattleText1: text_far _FightingDojoEndBattleText1 text_end FightingDojoAfterBattleText1: text_far _FightingDojoAfterBattleText1 text_end FightingDojoText3: text_asm ld hl, FightingDojoTrainerHeader1 call TalkToTrainer jp TextScriptEnd FightingDojoBattleText2: text_far _FightingDojoBattleText2 text_end FightingDojoEndBattleText2: text_far _FightingDojoEndBattleText2 text_end FightingDojoAfterBattleText2: text_far _FightingDojoAfterBattleText2 text_end FightingDojoText4: text_asm ld hl, FightingDojoTrainerHeader2 call TalkToTrainer jp TextScriptEnd FightingDojoBattleText3: text_far _FightingDojoBattleText3 text_end FightingDojoEndBattleText3: text_far _FightingDojoEndBattleText3 text_end FightingDojoAfterBattleText3: text_far _FightingDojoAfterBattleText3 text_end FightingDojoText5: text_asm ld hl, FightingDojoTrainerHeader3 call TalkToTrainer jp TextScriptEnd FightingDojoBattleText4: text_far _FightingDojoBattleText4 text_end FightingDojoEndBattleText4: text_far _FightingDojoEndBattleText4 text_end FightingDojoAfterBattleText4: text_far _FightingDojoAfterBattleText4 text_end ; So get this, the game had an EVENT_GOT_HITMONCHAN and EVENT_GOT_HITMONLEE here. ; However, in the way it was being used... ; You can just make it EVENT_GOT_HITMON and be outright better off. ; So when implementing the new stuff, I made this optimisation. ; Oh, and because of the new Dojo structure, I had to rework the EVENT_DEFEATED_FIGHTING_DOJO system, to ensure people don't grab their prizes early. FightingDojoText6: ; Hitmonlee Poké Ball text_asm CheckEvent EVENT_DEFEATED_FIGHTING_DOJO jr z, .Oi CheckEvent EVENT_GOT_HITMON jr z, .GetMon ld hl, OtherHitmonText call PrintText jr .done .GetMon ld a, HITMONLEE call DisplayPokedex ld hl, WantHitmonleeText call PrintText call YesNoChoice ld a, [wCurrentMenuItem] and a jr nz, .done ld a, [wcf91] ld b, a ld c, 30 call GivePokemon jr nc, .done ; once Poké Ball is taken, hide sprite ld a, HS_FIGHTING_DOJO_GIFT_1 ld [wMissableObjectIndex], a predef HideObject SetEvents EVENT_GOT_HITMON jr .done .Oi ld hl, OiMateText call PrintText ;fallthrough .done jp TextScriptEnd WantHitmonleeText: text_far _WantHitmonleeText text_end FightingDojoText7: ; Hitmonchan Poké Ball text_asm CheckEvent EVENT_DEFEATED_FIGHTING_DOJO jr z, .Oi CheckEvent EVENT_GOT_HITMON jr z, .GetMon ld hl, OtherHitmonText call PrintText jr .done .GetMon ld a, HITMONCHAN call DisplayPokedex ld hl, WantHitmonchanText call PrintText call YesNoChoice ld a, [wCurrentMenuItem] and a jr nz, .done ld a, [wcf91] ld b, a ld c, 30 call GivePokemon jr nc, .done SetEvent EVENT_GOT_HITMON ; once Poké Ball is taken, hide sprite ld a, HS_FIGHTING_DOJO_GIFT_2 ld [wMissableObjectIndex], a predef HideObject jr .done .Oi ld hl, OiMateText call PrintText ;fallthrough .done jp TextScriptEnd FightingDojoTextHitmontop: ; Hitmontop Poké Ball text_asm CheckEvent EVENT_DEFEATED_FIGHTING_DOJO jr z, .Oi CheckEvent EVENT_GOT_HITMON jr z, .GetMon ld hl, OtherHitmonText call PrintText jr .done .GetMon ld a, HITMONTOP call DisplayPokedex ld hl, WantHitmontopText call PrintText call YesNoChoice ld a, [wCurrentMenuItem] and a jr nz, .done ld a, [wcf91] ld b, a ld c, 30 call GivePokemon jr nc, .done SetEvent EVENT_GOT_HITMON ; once Poké Ball is taken, hide sprite ld a, HS_FIGHTING_DOJO_GIFT_3 ld [wMissableObjectIndex], a predef HideObject jr .done .Oi ld hl, OiMateText call PrintText ;fallthrough .done jp TextScriptEnd WantHitmonchanText: text_far _WantHitmonchanText text_end WantHitmontopText: text_far _WantHitmontopText text_end OtherHitmonText: text_far _GreedyBastardText text_end OiMateText: text_far _OiMateText text_end KoichiRematchPreBattleText: text_far _KoichiRematchPreBattleText text_end KoichiRematchDefeatedText: text_far _KoichiRematchDefeatedText text_end