SECTION "Main",ROM0 ; D671 ; Patch the current room script every time we load another room ld hl,$D374 ld de,$D670 ld a,[hld] cp $80 jr nc,alreadyPatchedScript ld [de],a dec de ld a,[hl] ld [de],a alreadyPatchedScript: ld [hl],$88 inc hl ld [hl],$D6 ld a, $C3 ; important for DMARoutine ret SECTION "Main",ROM0[$0017] ; D688 ; Patch hram code to always call the code at D671 ld hl,$ff80 ld [hl],$18 ; jr 78 (to FFFA) inc hl ld [hl],$78 ld hl,$FFFA ld [hl],$CD ; call $D671 inc hl ld [hl],$71 inc hl ld [hl],$D6 inc hl ld [hl],$18 ; jr 83 (to FF82) inc hl ld [hl],$83 ld a,[$d363] ; current map cp $5E jr z,vermilionDocks cp $EF jr z,tradeCenter returnFromRoomSpecificScript: ; return to to normal script for the room. ld hl,$D66F ld a,[hli] ld h,[hl] ld l,a jp [hl] ;;;end vermilionDocks: ld hl,$A000 jr loadExtraCodeFromSram tradeCenter: ld hl,$A200 loadExtraCodeFromSram: ld a,$0A ld [$0000],a ;enable sram ld a,$01 ld [$4000],a ;choose sram bank ld de,$C800 ld bc,$0200 call $00B5 ; CopyData ld h,$00 ld [hl],h ; disable sram call $C800 jr returnFromRoomSpecificScript SECTION "Main",ROM0[$0200] ; sram 2000 ld b,%11 waitForNonHBlank: ldh a, ($41) and b jr z, waitForNonHBlank waitForHBlank: ldh a, ($41) and b jr nz, waitForHBlank ld a,[$8142] cp $3B jr z,dontFixMewGraphics ; fix mew graphics ld de,$C940 ld hl,$80C0 ld c,4 call $1845 ; CopyVideoData ld de,$C940 ld hl,$8140 ld c,4 call $1845 ; CopyVideoData dontFixMewGraphics: ld hl,$C1FF ld a,[hl] cp $02 ret z ; have fought mew AND done the mew cleanup and a jr z,haventFoughtMewYet inc [hl] xor a ld [$d4e6],a ; wNumSprites ld [$C110],a haventFoughtMewYet: ld hl,$d371 ; text ptr ld [hl],$20 inc hl ld [hl],$C9 ld a,[$c1fe] and a jr z,dontNeedToMoveTruckAfterReload ld hl,$c731 ld a,[hl] cp $0C jr z,dontNeedToMoveTruckAfterReload ld a,$0C ld [hl],a ; remove truck ld a,3 ld [$d0a4],a ; wNewTileBlockID ld bc, $000B ; coords to right of truck ld a,$17 ; ReplaceTileBlock call $3E8A ; Predef ret dontNeedToMoveTruckAfterReload: ld a,[$D367] ; X pos cp $13 ret nz ld a,[$D72D] ;strength and $01 ret z ld a,[$CFCB] ; tile in front of player = left side of truck cp $58 ret nz ld a,[$D52D] ; pushing right cp $01 ret nz ld hl,$c1fe inc [hl] ; flag truck as pushed ld a,$02 ; dust ld [$cd60],a ld a, $A8; SFX_PUSH_BOULDER call $23AD ; PlaySound ld de,$C980 ; copy truck graphics into sprite reachable area ld hl,$8900 ld c,8 call $1845 ; CopyVideoData ld a,$0C ld [$d0a4],a ; wNewTileBlockID ld bc, $000A ; coords to truck ld a,$17 ; ReplaceTileBlock call $3E8A ; Predef ld e,$58 truckDelayLoop: ld hl,$c360 ld b,$50 ld d,$90 ld c,e truckLoop: ld [hl],b inc hl ld [hl],c ld a,c add a,$08 ld c,a inc hl ld [hl],d inc d inc hl ld [hl],$10 inc hl ld a,d cp $94 jr nz,notSecondRow ld b,$58 ld c,e notSecondRow: cp $98 jr nz,truckLoop inc e call $20AB ; DelayFrame ld a,e cp $79 jr nz,truckDelayLoop ld a,1 ld [$d4e6],a; wNumSprites ld [$c110],a ld hl,$C214 ld [hl],$04 inc hl ld [hl],$19 inc hl ld [hl],$FF ld hl,$c21e ld [hl],$02 ld hl, $C056 ;mess with music ld a,$FF ld [hli],a ld [hl],a ld l,$e9 ld [hl],$70 ld a,3 ld [$d0a4],a ; wNewTileBlockID ld bc, $000B ; coords to right of truck ld a,$17 ; ReplaceTileBlock call $3E8A ; Predef ret SECTION "Main",ROM0[$0320] ; 211C DB $22,$C9 ; pointer to this text DB $00,$8C,$A4,$B6,$E7,$50,$08 ; Mew!, terminator, asm ld a, $15 ; Mew ld [$d05e], a ; wCurOpponent call $13D0 ; PlayCry call $3765 ; WaitForSoundToFinish ld a, 50 ld [$d12c], a ; wCurEnemyLVL ld hl,$c1ff inc [hl] jp $24D3; TextScriptEnd SECTION "Main",ROM0[$0400] ; sram 21FC ld hl,$d735 res 2,[hl] ; enable use of A button ld hl,$D366 ld a,[hli] ; X pos cp $04 ret nz ld a,[hl] cp $03 jr z,dontRet cp $06 ret nz dontRet: ld hl,$d735 set 2,[hl] ; disable use of A button (for interacting with game boy) ldh a,($AA) ; check direction xor $03 ; switch 1 and 2 ld hl,$d52f cp [hl] ret nz ldh a,($B3) ; check a pressed dec a ret nz ld a,$08 ldh ($B8),a ld a,$22 ; just a moment call $3F12 ; PrintPredefTextID ld a,$02 ld [$d130],a ; link state = trade dec a ; $01 ldh ($BA),a ; enable continuous WRAM to VRAM transfer each V-blank call $3DF4 ; Delay3 xor a ldh ($B0),a ; put the window on the screen ld a,$01 ld h,$20 ld [hl],a ldh ($B8),a ; change bank ld hl,$D146 ld bc,$17FA setUpFD: ld [hl],c inc hl dec b jr nz,setUpFD ld hl,$d169 ld bc,$0161 findFirstFF: ld a,[hli] dec bc inc a jr nz,findFirstFF dec hl fillWithE3: ld a,$E3 ld [hli],a dec bc ld a,b or c jr nz,fillWithE3 ld [hl],$FC ; glitch pokemon name for blue that points to rng bytes ld a,$3B fillWithCE: inc hl ld [hl],$CE ; send red to CBD7 dec a jr nz,fillWithCE ld hl,$CBD7 ld [hl],$C3 ; jp $C8E0 inc hl ld [hl],$E0 inc hl ld [hl],$C8 ld hl,$C508 ld a,$FD ld [hli],a ld [hli],a ld [hli],a ld a,$FF ld [hli],a ld [hli],a xor a ld [hli],a ld [hli],a ld [hli],a ld [hli],a ld d,h ld e,l ld hl,$C920 ld bc,$0080 call $00B5 ; CopyData ld hl,$D14D ld [hl],$C3 ; jp $C5D8 inc hl ld [hl],$D8 inc hl ld [hl],$C5 inc hl ;next bytes - landing anywhere in this sequence will jump you back to the jp $C5DF ld [hl],$18 ; jr -5 inc hl ld [hl],$FB inc hl ld [hl],$00 ; nop inc hl ld [hl],$18 ; jr -5 inc hl ld [hl],$FB inc hl ld [hl],$18 ; jr -10 inc hl ld [hl],$F6 call $190C ; ClearScreen call $2425 ; UpdateSprites call $369D ; LoadFontTilePatterns call $5ADA ; LoadTrainerInfoTextBoxTiles ld hl,$C443 ld bc,$020C call $5AA7 ; CableClub_TextBoxBorder ld hl,$C46C ld de,$5503 call $1952 ; PlaceString pop bc jp $53C7 ; CableClub_DoBattleOrTrade - from "call Serial_SyncAndExchangeNybble" SECTION "Main",ROM0[$04E0] ; sram 22E0 ;code for red ld sp,$DFF9 ; fix broken stack ld h,$0A ld [hl],h ;enable sram ld a,$A0 loopVirus: push af ld h,a ld l,$00 ld de,$c700 ld bc,$0100 call $00B5 ; CopyData call $227B ; Serial_SyncAndExchangeNybble call $3DF4 ; Delay3 ld hl,$c6FF ld [hl],$FD ld de,$c6e8 ld bc,$0110 ld a,$08 ldh ($FF),a call $216B ; Serial_ExchangeBytes (216B) ld a,$0D ldh ($FF),a pop af inc a cp $A4 jr nz,loopVirus ld a,$51 ; LoadSAV2 - reload our corrupted party data. also disables sram call $3E8A ; Predef jp $5339 ; CableClub_DoBattleOrTradeAgain SECTION "Main",ROM0[$0520] ; sram 231C ;code for blue ld sp,$DFE7 ; fix broken stack ld h,$0A ld [hl],h ;enable sram ld h,$40 ld [hl],$01 ;choose sram bank ld a,$A0 loopVictim: push af call $227B ; Serial_SyncAndExchangeNybble call $3DF4 ; Delay3 ld hl,$0316 ld de,$C800 push de ld bc,$0110 ld a,$08 ldh ($FF),a call $216B ; Serial_ExchangeBytes (216B) ld a,$0D ldh ($FF),a pop hl checkForFD: ld a,[hli] cp $FD jr z,checkForFD dec hl pop af push af ld d,a ld e,$00 ld bc,$0100 call $00B5 ; CopyData pop af inc a cp $A4 jr nz,loopVictim ld hl,$A61A ld de,$A916 ld a,[hl] ld [hl],$88 ld [de],a inc hl inc de ld a,[hl] ld [hl],$D6 ld [de],a inc de ld hl,$A39B ld bc,$0065 call $00B5 ; CopyData ld a,$1C ld [$1FFC],a ldh ($B8),a ld hl, $A598 ld bc, $0F8B call $7856 ; SAVCheckSum ld [$b523], a ld h,$00 ld [hl],h ;disable sram ld a,$01 ld [$1FFC],a ldh ($B8),a jp $5339 ; CableClub_DoBattleOrTradeAgain