diff options
author | luckytyphlosion <alan.rj.huang@gmail.com> | 2015-07-10 15:51:14 -0400 |
---|---|---|
committer | luckytyphlosion <alan.rj.huang@gmail.com> | 2015-07-10 15:51:14 -0400 |
commit | 9d56570f8295ba2d37e176ac104fa10424af00eb (patch) | |
tree | a6b7b1683d90c1b5e17138a766afb47ea52d4106 | |
parent | 992bdfe53740858eae7e40f1380b05fe4cd75d9d (diff) |
Some bank1c documentation.
gamefreak.asm, hall_of_fame.asm, palettes.asm.
Also new hram/wram.asm labels.
-rwxr-xr-x | engine/gamefreak.asm | 139 | ||||
-rwxr-xr-x | engine/hall_of_fame.asm | 123 | ||||
-rwxr-xr-x | engine/palettes.asm | 785 | ||||
-rw-r--r-- | hram.asm | 3 | ||||
-rwxr-xr-x | wram.asm | 25 |
5 files changed, 830 insertions, 245 deletions
diff --git a/engine/gamefreak.asm b/engine/gamefreak.asm index d0f1bbac..10765ced 100755 --- a/engine/gamefreak.asm +++ b/engine/gamefreak.asm @@ -3,6 +3,8 @@ LoadShootingStarGraphics: ; 70000 (1c:4000) ld [rOBP0], a ; $ff48 ld a, $a4 ld [rOBP1], a ; $ff49 + call Func_3040 + call Func_3061 ld de, AnimationTileset2 + $30 ; $471e ; star tile (top left quadrant) ld hl, vChars1 + $200 ld bc, (BANK(AnimationTileset2) << 8) + $01 @@ -24,16 +26,16 @@ LoadShootingStarGraphics: ; 70000 (1c:4000) ld bc, $10 jp CopyData -AnimateShootingStar: ; 70044 (1c:4044) +AnimateShootingStar: ; 7004a (1c:404a) call LoadShootingStarGraphics ld a, (SFX_1f_67 - SFX_Headers_1f) / 3 call PlaySound ld hl, wOAMBuffer ld bc, $a004 -.asm_70052 +.asm_70058 push hl push bc -.asm_70054 +.asm_7005a ld a, [hl] add $4 ld [hli], a @@ -43,7 +45,7 @@ AnimateShootingStar: ; 70044 (1c:4044) inc hl inc hl dec c - jr nz, .asm_70054 + jr nz, .asm_7005a ld c, $1 call CheckForUserInterruption pop bc @@ -51,44 +53,45 @@ AnimateShootingStar: ; 70044 (1c:4044) ret c ld a, [hl] cp $50 - jr nz, .asm_70070 - jr .asm_70052 -.asm_70070 + jr nz, .asm_70076 + jr .asm_70058 +.asm_70076 cp b - jr nz, .asm_70052 + jr nz, .asm_70058 ld hl, wOAMBuffer ld c, $4 ld de, $4 -.asm_7007b +.loop ld [hl], $a0 add hl, de dec c - jr nz, .asm_7007b + jr nz, .loop ld b, $3 -.asm_70083 +.asm_70089 ld hl, rOBP0 ; $ff48 rrc [hl] rrc [hl] + call Func_3040 ld c, $a call CheckForUserInterruption ret c dec b - jr nz, .asm_70083 + jr nz, .asm_70089 ld de, wOAMBuffer ld a, $18 -.asm_70098 +.asm_700a1 push af - ld hl, OAMData_700ee ; $40ee + ld hl, OAMData_70101 ; $40ee ld bc, $4 call CopyData pop af dec a - jr nz, .asm_70098 + jr nz, .asm_700a1 xor a ld [wWhichTrade], a ; wWhichTrade - ld hl, PointerTable_700f2 ; $40f2 + ld hl, PointerTable_70105 ; 1c:4105 ld c, $6 -.asm_700af +.asm_700b8 ld a, [hli] ld e, a ld a, [hli] @@ -97,26 +100,35 @@ AnimateShootingStar: ; 70044 (1c:4044) push hl ld hl, wOAMBuffer + $50 ld c, $4 -.asm_700ba +.asm_700c3 ld a, [de] cp $ff - jr z, .asm_700d5 + jr z, .asm_700e8 ld [hli], a inc de ld a, [de] ld [hli], a inc de inc hl + push bc + ld a, [de] + ld b,a + ld a, [hl] + and $f0 + or b + ld [hl], a + inc de + pop bc inc hl dec c - jr nz, .asm_700ba + jr nz, .asm_700c3 ld a, [wWhichTrade] ; wWhichTrade cp $18 - jr z, .asm_700d5 + jr z, .asm_700e8 add $6 ld [wWhichTrade], a ; wWhichTrade -.asm_700d5 - call Func_7011f +.asm_700e8 + call Func_70142 push af ld hl, wOAMBuffer + $10 ld de, wOAMBuffer @@ -127,72 +139,81 @@ AnimateShootingStar: ; 70044 (1c:4044) pop bc ret c dec c - jr nz, .asm_700af + jr nz, .asm_700b8 and a ret -OAMData_700ee: ; 700ee (1c:40ee) +OAMData_70101: ; 70101 (1c:4101) db $00,$00,$A2,$90 -PointerTable_700f2: ; 700f2 (1c:40f2) - dw OAMData_700fe - dw OAMData_70106 - dw OAMData_7010e - dw OAMData_70116 - dw OAMData_7011e - dw OAMData_7011e +PointerTable_70105: ; 70105 (1c:4105) + dw OAMData_70111 + dw OAMData_7011d + dw OAMData_70129 + dw OAMData_70135 + dw OAMData_70141 + dw OAMData_70141 ; each entry is only half of an OAM tile -OAMData_700fe: ; 700fe (1c:40fe) +OAMData_70111: ; 70111 (1c:4111) db $68,$30 - db $68,$40 + db $05,$68 + db $40,$05 db $68,$58 - db $68,$78 + db $04,$68 + db $78,$07 -OAMData_70106: ; 70106 (1c:4106) +OAMData_7011d: ; 7011d (1c:411d) db $68,$38 - db $68,$48 + db $05,$68 + db $48,$06 db $68,$60 - db $68,$70 + db $04,$68 + db $70,$07 -OAMData_7010e: ; 7010e (1c:410e) +OAMData_70129: ; 70129 (1c:4129) db $68,$34 - db $68,$4C + db $05,$68 + db $4c,$06 db $68,$54 - db $68,$64 + db $06,$68 + db $64,$07 -OAMData_70116: ; 70116 (1c:4116) - db $68,$3C - db $68,$5C - db $68,$6C - db $68,$74 +OAMData_70135: ; 70135 (1c:4135) + db $68,$3c + db $05,$68 + db $5c,$04 + db $68,$6c + db $07,$68 + db $74,$07 -OAMData_7011e: ; 7011e (1c:411e) +OAMData_70141: ; 70141 (1c:4141) db $FF -Func_7011f: ; 7011f (1c:411f) +Func_70142: ; 70142 (1c:4142) ld b, $8 -.asm_70121 +.asm_70144 ld hl, wOAMBuffer + $5c ld a, [wWhichTrade] ; wWhichTrade ld de, $fffc ld c, a -.asm_7012b +.asm_7014e inc [hl] add hl, de dec c - jr nz, .asm_7012b + jr nz, .asm_7014e ld a, [rOBP1] ; $ff49 xor $a0 ld [rOBP1], a ; $ff49 + call Func_3061 ld c, $3 call CheckForUserInterruption ret c dec b - jr nz, .asm_70121 + jr nz, .asm_70144 ret -GameFreakLogoOAMData: ; 70140 (1c:4140) +GameFreakLogoOAMData: ; 70166 (1c:4166) db $48,$50,$8D,$00 db $48,$58,$8E,$00 db $50,$50,$8F,$00 @@ -210,11 +231,11 @@ GameFreakLogoOAMData: ; 70140 (1c:4140) db $60,$70,$81,$00 db $60,$78,$86,$00 -GameFreakShootingStarOAMData: ; 70180 (1c:4180) - db $00,$A0,$A0,$10 - db $00,$A8,$A0,$30 - db $08,$A0,$A1,$10 - db $08,$A8,$A1,$30 +GameFreakShootingStarOAMData: ; 701a6 (1c:41a6) + db $00,$A0,$A0,$14 + db $00,$A8,$A0,$34 + db $08,$A0,$A1,$14 + db $08,$A8,$A1,$34 -FallingStar: ; 70190 (1c:4190) +FallingStar: ; 701b6 (1c:41b6) INCBIN "gfx/falling_star.2bpp" diff --git a/engine/hall_of_fame.asm b/engine/hall_of_fame.asm index 30979118..179fcc82 100755 --- a/engine/hall_of_fame.asm +++ b/engine/hall_of_fame.asm @@ -1,5 +1,5 @@ -AnimateHallOfFame: ; 701a0 (1c:41a0) - call Func_70423 +AnimateHallOfFame: ; 701c6 (1c:41c6) + call Func_7047b call ClearScreen ld c, 100 call DelayFrames @@ -28,9 +28,9 @@ AnimateHallOfFame: ; 701a0 (1c:41a0) ld hl, wd5a2 ld a, [hl] inc a - jr z, .asm_701eb + jr z, .asm_70211 inc [hl] -.asm_701eb +.asm_70211 ld a, $90 ld [hWY], a ld c, BANK(Music_HallOfFame) @@ -38,10 +38,10 @@ AnimateHallOfFame: ; 701a0 (1c:41a0) call PlayMusic ld hl, wPartySpecies ld c, $ff -.asm_701fb +.asm_70221 ld a, [hli] cp $ff - jr z, .asm_70241 + jr z, .asm_70266 inc c push hl push bc @@ -53,13 +53,12 @@ AnimateHallOfFame: ; 701a0 (1c:41a0) call AddNTimes ld a, [hl] ld [wTrainerFacingDirection], a - call Func_70278 - call Func_702e1 + call Func_702a2 + call Func_7030e ld c, $50 call DelayFrames hlCoord 2, 13 - ld b, $3 - ld c, $e + ld b, $30e call TextBoxBorder hlCoord 4, 15 ld de, HallOfFameText @@ -69,32 +68,32 @@ AnimateHallOfFame: ; 701a0 (1c:41a0) call GBFadeOutToWhite pop bc pop hl - jr .asm_701fb -.asm_70241 + jr .asm_70221 +.asm_70266 ld a, c inc a ld hl, wHallOfFame ld bc, HOF_MON call AddNTimes ld [hl], $ff - call SaveHallOfFameTeams + callab SaveHallOfFameTeams ; useless since in same bank xor a ld [wWhichTrade], a ; wWhichTrade inc a ld [wTrainerScreenY], a - call Func_70278 - call Func_70377 - call Func_70423 + call Func_702a2 + call Func_703d1 + call Func_7047b xor a ld [hWY], a ld hl, rLCDC ; $ff40 res 3, [hl] ret -HallOfFameText: ; 7026b (1c:426b) +HallOfFameText: ; 70295 (1c:4295) db "HALL OF FAME@" -Func_70278: ; 70278 (1c:4278) +Func_702a2: ; 702a2 (1c:42a2) call ClearScreen ld a, $d0 ld [hSCY], a @@ -107,56 +106,72 @@ Func_70278: ; 70278 (1c:4278) ld [wcf1d], a ld a, [wTrainerScreenY] and a - jr z, .asm_7029d - call Func_7033e - jr .asm_702ab -.asm_7029d + jr z, .asm_702c7 + call Func_70390 + jr .asm_702d5 +.asm_702c7 hlCoord 12, 5 call GetMonHeader call LoadFrontSpriteByMonIndex predef LoadMonBackPic -.asm_702ab +.asm_702d5 ld b, $b ld c, $0 call GoPAL_SET ld a, $e4 ld [rBGP], a ; $ff47 + call Func_3021 ld c, $31 - call Func_7036d + call Func_703c7 ld d, $a0 ld e, $4 ld a, [wOnSGB] and a - jr z, .asm_702c7 + jr z, .asm_702f4 sla e .asm_702c7 - call .asm_702d5 + call .asm_70302 xor a ld [hSCY], a ld c, a - call Func_7036d + call Func_703c7 ld d, $0 ld e, $fc -.asm_702d5 +.asm_70302 call DelayFrame ld a, [hSCX] add e ld [hSCX], a cp d - jr nz, .asm_702d5 + jr nz, .asm_70302 ret -Func_702e1: ; 702e1 (1c:42e1) +Func_7030e: ; 7030e (1c:430e) ld a, [wTrainerEngageDistance] ld hl, wPartyMonNicks ; wPartyMonNicks call GetPartyMonName - call Func_702f0 - jp Func_70404 - -Func_702f0: ; 702f0 (1c:42f0) + call Func_70348 + ld a, [wTrainerEngageDistance] + ld [wcf91], a + callab Func_fce18 ; 3f:4e18 + jr nc, .asm_70336 + ld e,$22 + callab Func_f0000 + jr .asm_7033c +.asm_70336 + ld a,[wWhichTrade] + call PlayCry +.asm_7033c + jp Func_7045c + +Func_7033f: ; 7033f (1c:433f) + call Func_70348 + ld a,[wWhichTrade] + jp PlayCry + +Func_70348: ; 70348 (1c:4348) hlCoord 0, 2 - ld b, $9 - ld c, $a + ld bc, $90a call TextBoxBorder hlCoord 2, 6 ld de, HoFMonInfoText @@ -171,22 +186,26 @@ Func_702f0: ; 702f0 (1c:42f0) ld [wd0b5], a hlCoord 3, 9 predef PrintMonType - ld a, [wWhichTrade] ; wWhichTrade - jp PlayCry + ret + ;ld a, [wWhichTrade] ; wWhichTrade + ;jp PlayCry -HoFMonInfoText: ; 70329 (1c:4329) +HoFMonInfoText: ; 7037b (1c:437b) db "LEVEL/" next "TYPE1/" next "TYPE2/@" -Func_7033e: ; 7033e (1c:433e) +Func_70390: ; 70390 (1c:433e) ld de, RedPicFront ; $6ede ld a, BANK(RedPicFront) call UncompressSpriteFromDE + ld a,$0 + call SwitchSRAMBankAndLatchClockData ld hl, S_SPRITEBUFFER1 ld de, $a000 ld bc, $310 call CopyData + call PrepareRTCDataAndDisableSRAM ld de, vFrontPic call InterlaceMergeSpriteBuffers ld de, RedPicBack ; $7e0a @@ -197,22 +216,20 @@ Func_7033e: ; 7033e (1c:433e) call InterlaceMergeSpriteBuffers ld c, $1 -Func_7036d: ; 7036d (1c:436d) +Func_703c7: ; 703c7 (1c:43c7) ld b, $0 hlCoord 12, 5 predef_jump CopyTileIDsFromList -Func_70377: ; 70377 (1c:4377) +Func_703d1: ; 703d1 (1c:43d1) ld hl, wd747 set 3, [hl] predef DisplayDexRating hlCoord 0, 4 - ld b, $6 - ld c, $a + ld bc, $60a call TextBoxBorder hlCoord 5, 0 - ld b, $2 - ld c, $9 + ld b, $209 call TextBoxBorder hlCoord 7, 2 ld de, wPlayerName ; wd158 @@ -242,26 +259,26 @@ Func_70377: ; 70377 (1c:4377) call Func_703e2 ld hl, wcc5d -Func_703e2: ; 703e2 (1c:43e2) +Func_7043a: ; 7043a (1c:443a) call PrintText ld c, $78 jp DelayFrames -HoFPlayTimeText: ; 703ea (1c:43ea) +HoFPlayTimeText: ; 70442 (1c:4442) db "PLAY TIME@" -HoFMoneyText: ; 703f4 (1c:43f4) +HoFMoneyText: ; 7044c (1c:444c) db "MONEY@" -DexSeenOwnedText: ; 703fa (1c:43fa) +DexSeenOwnedText: ; 70452 (1c:4452) TX_FAR _DexSeenOwnedText db "@" -DexRatingText: ; 703ff (1c:43ff) +DexRatingText: ; 70457 (1c:4457) TX_FAR _DexRatingText db "@" -Func_70404: ; 70404 (1c:4404) +Func_7045c: ; 7045c (1c:445c) ld hl, wHallOfFame ld bc, HOF_MON ld a, [wTrainerEngageDistance] @@ -276,7 +293,7 @@ Func_70404: ; 70404 (1c:4404) ld bc, $b jp CopyData -Func_70423: ; 70423 (1c:4423) +Func_7047b: ; 7047b (1c:447b) ld a, $a ld [wcfc8], a ld [wcfc9], a diff --git a/engine/palettes.asm b/engine/palettes.asm index ed06cf4e..c87959f7 100755 --- a/engine/palettes.asm +++ b/engine/palettes.asm @@ -1,40 +1,48 @@ -Func_71ddf: ; 71ddf (1c:5ddf) +Func_71eb3: ; 71eb3 (1c:5eb3) call GetPredefRegisters ld a, b cp $ff - jr nz, .asm_71dea + jr nz, .asm_71ebe ld a, [wcf1c] -.asm_71dea +.asm_71ebe cp $fc - jp z, Func_71fc2 + jp z, Func_7218b ld l, a ld h, $0 add hl, hl - ld de, PointerTable_71f73 + ld de, PointerTable_7206b add hl, de ld a, [hli] ld h, [hl] ld l, a - ld de, Func_72156 + ld de, Func_72328 push de jp [hl] -SendPalPacket_Black: ; 71dff (1c:5dff) +SendPalPacket_Black: ; 71ed3 (1c:5ed3) ld hl, PalPacket_Black ld de, BlkPacket_Battle ret ; uses PalPacket_Empty to build a packet based on mon IDs and health color -BuildBattlePalPacket: ; 71e06 (1c:5e06) +BuildBattlePalPacket: ; 71eda (1c:5eda) ld hl, PalPacket_Empty ld de, wcf2d ld bc, $10 call CopyData - ld a, [W_PLAYERBATTSTATUS3] + ;ld a, [W_PLAYERBATTSTATUS3] ld hl, wBattleMonSpecies + ld a, [hl] + and a + jr z, .asm_71ef9 + ld hl, wPartyMon1 + ld a, [wPlayerMonNumber + ld bc, wPartyMon2 - wPartyMon1 + call AddNTimes +.asm_71ef9 call DeterminePaletteID ld b, a - ld a, [W_ENEMYBATTSTATUS3] + ;ld a, [W_ENEMYBATTSTATUS3] ld hl, wEnemyMonSpecies2 call DeterminePaletteID ld c, a @@ -58,13 +66,13 @@ BuildBattlePalPacket: ; 71e06 (1c:5e06) ld [wcf1c], a ret -SendPalPacket_TownMap: ; 71e48 (1c:5e48) +SendPalPacket_TownMap: ; 71f26 (1c:5f26) ld hl, PalPacket_TownMap ld de, BlkPacket_WholeScreen ret ; uses PalPacket_Empty to build a packet based the mon ID -BuildStatusScreenPalPacket: ; 71e4f (1c:5e4f) +BuildStatusScreenPalPacket: ; 71f2d (1c:5f2d) ld hl, PalPacket_Empty ld de, wcf2d ld bc, $10 @@ -87,12 +95,12 @@ BuildStatusScreenPalPacket: ; 71e4f (1c:5e4f) ld de, BlkPacket_StatusScreen ret -SendPalPacket_PartyMenu: ; 71e7b (1c:5e7b) +SendPalPacket_PartyMenu: ; 71f59 (1c:5f59) ld hl, PalPacket_PartyMenu ld de, wcf2e ret -SendPalPacket_Pokedex: ; 71e82 (1c:5e82) +SendPalPacket_Pokedex: ; 71f60 (1c:5f60) ld hl, PalPacket_Pokedex ld de, wcf2d ld bc, $10 @@ -105,28 +113,28 @@ SendPalPacket_Pokedex: ; 71e82 (1c:5e82) ld de, BlkPacket_Pokedex ret -SendPalPacket_Slots: ; 71e9f (1c:5e9f) +SendPalPacket_Slots: ; 71f7d (1c:5f7d) ld hl, PalPacket_Slots ld de, BlkPacket_Slots ret -SendPalPacket_Titlescreen: ; 71ea6 (1c:5ea6) +SendPalPacket_Titlescreen: ; 71f84 (1c:5f84) ld hl, PalPacket_Titlescreen ld de, BlkPacket_Titlescreen ret ; used mostly for menus and the Oak intro -SendPalPacket_Generic: ; 71ead (1c:5ead) +SendPalPacket_Generic: ; 71f8b (1c:5f8b) ld hl, PalPacket_Generic ld de, BlkPacket_WholeScreen ret -SendPalPacket_NidorinoIntro: ; 71eb4 (1c:5eb4) +SendPalPacket_NidorinoIntro: ; 71f92 (1c:5f92) ld hl, PalPacket_NidorinoIntro ld de, BlkPacket_NidorinoIntro ret -SendPalPacket_GameFreakIntro: ; 71ebb (1c:5ebb) +SendPalPacket_GameFreakIntro: ; 71f99 (1c:5f99) ld hl, PalPacket_GameFreakIntro ld de, BlkPacket_GameFreakIntro ld a, $8 @@ -134,7 +142,7 @@ SendPalPacket_GameFreakIntro: ; 71ebb (1c:5ebb) ret ; uses PalPacket_Empty to build a packet based on the current map -BuildOverworldPalPacket: ; 71ec7 (1c:5ec7) +BuildOverworldPalPacket: ; 71fa5 (1c:5fa5) ld hl, PalPacket_Empty ld de, wcf2d ld bc, $10 @@ -155,6 +163,10 @@ BuildOverworldPalPacket: ; 71ec7 (1c:5ec7) jr z, .Lorelei cp BRUNOS_ROOM jr z, .caveOrBruno + cp BATTLE_CENTER + jr z,.asm_71ffd + cp TRADE_CENTER + jr z,.asm_71ffd .normalDungeonOrBuilding ld a, [wLastMap] ; town or route that current dungeon or building is located .townOrRoute @@ -178,10 +190,13 @@ BuildOverworldPalPacket: ; 71ec7 (1c:5ec7) .Lorelei xor a jr .town - +.asm_71ffd + ld a,$18 + jr .town + ; used when a Pokemon is the only thing on the screen ; such as evolution, trading and the Hall of Fame -SendPokemonPalette_WholeScreen: ; 71f17 (1c:5f17) +SendPokemonPalette_WholeScreen: ; 72001 (1c:6001) push bc ld hl, PalPacket_Empty ld de, wcf2d @@ -191,16 +206,16 @@ SendPokemonPalette_WholeScreen: ; 71f17 (1c:5f17) ld a, c and a ld a, $1e - jr nz, .asm_71f31 + jr nz, .asm_7201b ld a, [wcf1d] call DeterminePaletteIDOutOfBattle -.asm_71f31 +.asm_7201b ld [wcf2e], a ld hl, wcf2d ld de, BlkPacket_WholeScreen ret -BuildTrainerCardPalPacket: ; 71f3b (1c:5f3b) +BuildTrainerCardPalPacket: ; 72025 (1c:6025) ld hl, BlkPacket_TrainerCard ld de, wcc5b ld bc, $40 @@ -209,36 +224,46 @@ BuildTrainerCardPalPacket: ; 71f3b (1c:5f3b) ld hl, wcc5d ld a, [W_OBTAINEDBADGES] ld c, $8 -.asm_71f52 +.asm_7203c srl a push af - jr c, .asm_71f62 + jr c, .asm_7204c push bc ld a, [de] ld c, a xor a -.asm_71f5b +.asm_72045 ld [hli], a dec c - jr nz, .asm_71f5b + jr nz, .asm_72045 pop bc - jr .asm_71f67 -.asm_71f62 + jr .asm_72051 +.asm_7204c ld a, [de] -.asm_71f63 +.asm_7204d inc hl dec a - jr nz, .asm_71f63 -.asm_71f67 + jr nz, .asm_7204d +.asm_72051 pop af inc de dec c - jr nz, .asm_71f52 + jr nz, .asm_7203c ld hl, PalPacket_TrainerCard ld de, wcc5b ret -PointerTable_71f73: ; 71f73 (1c:5f73) +SendUnknownPalPacket_7205d:: ; 7205d (1c:605d) + ld hl,UnknownPalPacket_72811 + ld de,UnknownPacket_72611 + ret + +SendUnknownPalPacket_72064:: ; 72064 (1c:6064) + ld hl,UnknownPalPacket_72821 + ld de,UnknownPacket_72751 + ret + +PointerTable_7206b: ; 7206b (1c:606b) dw SendPalPacket_Black dw BuildBattlePalPacket dw SendPalPacket_TownMap @@ -253,17 +278,20 @@ PointerTable_71f73: ; 71f73 (1c:5f73) dw SendPokemonPalette_WholeScreen dw SendPalPacket_GameFreakIntro dw BuildTrainerCardPalPacket + dw SendUnknownPalPacket_7205d + dw SendUnknownPalPacket_72064 ; each byte is the number of loops to make in .asm_71f5b for each badge -LoopCounts_71f8f: ; 71f8f (1c:5f8f) +LoopCounts_7208b: ; 7208b (1c:608b) db $06,$06,$06,$12,$06,$06,$06,$06 -DeterminePaletteID: ; 71f97 (1c:5f97) - bit 3, a ; bit 3 of battle status 3, set if current Pokemon is transformed - ld a, PAL_GREYMON ; if yes, use Ditto's palette - ret nz +;DeterminePaletteID: ; 71f97 (1c:5f97) + ;bit 3, a ; bit 3 of battle status 3, set if ;current Pokemon is transformed + ;ld a, PAL_GREYMON ; if yes, use Ditto's palette + ;ret nz +DeterminePaletteID: ; 72093 (1c:6093) ld a, [hl] -DeterminePaletteIDOutOfBattle: ; 71f9d (1c:5f9d) +DeterminePaletteIDOutOfBattle: ; 72094 (1c:6094) ld [wd11e], a and a jr z, .idZero @@ -279,13 +307,132 @@ DeterminePaletteIDOutOfBattle: ; 71f9d (1c:5f9d) ld a, [hl] ret -SendBlkPacket_PartyMenu: ; 71fb6 (1c:5fb6) +Func_720ad:: ; 720ad (1c:60ad) + ld a,e + and a + jr nz,.asm_720bd + ld hl,Pointer_727e1 + ld a,[hGBC] + and a + jp z,Func_721b4 + jp Func_72346 + +Func_720bd :: ; 720bd (1c:60bd) + ld hl,Func_72811 + ld a,[hGBC] + and a + jp z,Func_721b4 + call Func_72346 + ld hl,Pointer_727e1 + inc hl + ld a,[hli] + call Func_723fe + ld a,e + ld [wdee4],a + ld a,d + ld [wdee5],a + xor a + call Func_7240f + ld a,$1 + call Func_72470 + ret + +Func_720e3:: ; 720e3 (1c:60e3) + ld hl,Pointer_72761 + ld de,wcf2d + ld bc,$10 + call CopyData + call Func_7213b + ld hl,wcf2e + ld [hl],a + ld hl,wcf30 + ld a,$26 + ld [hl],a + ld hl,wcf2d + ld a,[hGBC] + and a + jr nz,.asm_72109 + call Func_721b4 + jr .asm_7210c +.asm_72109 + call Func_72346 + ld hl,UnknownPacket_72611 + ld de,wcf2d + ld bc,$10 + call CopyData + ld hl,wcf30 + ld a,$5 + ld [hli],a + ld a,$7 + ld [hli],a + ld a,$6 + ld [hli],a + ld a,$b + ld [hli],a + ld a,$a + ld [hl],a + ld hl,wcf2d + ld a,[hGBC] + and a + jr nz,.asm_72137 + call Func_721b4 + jr .asm_7213a +.asm_72137 + call Func_72346 +.asm_7231a + ret + +Func_7213b:: ; 7213b (1c:613b) +; similar to BuildOverworldPalPacket + ld a, [W_CURMAPTILESET] + cp CEMETERY + jr z, .PokemonTowerOrAgatha + cp CAVERN + jr z, .caveOrBruno + ld a, [W_CURMAP] + cp REDS_HOUSE_1F + jr c, .townOrRoute + cp UNKNOWN_DUNGEON_2 + jr c, .normalDungeonOrBuilding + cp NAME_RATERS_HOUSE + jr c, .caveOrBruno + cp LORELEIS_ROOM + jr z, .Lorelei + cp BRUNOS_ROOM + jr z, .caveOrBruno + cp BATTLE_CENTER + jr z,.battleOrTradeCenter + cp TRADE_CENTER + jr z,.battleOrTradeCenter +.normalDungeonOrBuilding + ld a, [wLastMap] ; town or route that current dungeon or building is located +.townOrRoute + cp SAFFRON_CITY + 1 + jr c, .town + ld a, PAL_ROUTE - 1 +.town + inc a ; a town's pallete ID is its map ID + 1 + ret +.PokemonTowerOrAgatha + ld a, PAL_GREYMON - 1 + jr .town +.caveOrBruno + ld a, PAL_CAVE - 1 + jr .town +.Lorelei + xor a + jr .town +.battleOrTradeCenter + ld a,$18 + jr .town + +SendBlkPacket_PartyMenu: ; 7217f (1c:617f) ld hl, BlkPacket_PartyMenu ; $62f4 ld de, wcf2e ld bc, $30 jp CopyData -Func_71fc2: ; 71fc2 (1c:5fc2) +Func_71fc2: ; 7218b (1c:618b) ld hl, wcf1f ld a, [wcf2d] ld e, a @@ -296,12 +443,12 @@ Func_71fc2: ; 71fc2 (1c:5fc2) ld a, [de] and a ld e, $5 - jr z, .asm_71fdb + jr z, .asm_721a4 dec a ld e, $a - jr z, .asm_71fdb + jr z, .asm_721a4 ld e, $f -.asm_71fdb +.asm_721a4 push de ld hl, wcf37 ld bc, $6 @@ -311,6 +458,17 @@ Func_71fc2: ; 71fc2 (1c:5fc2) ld [hl], e ret +Func_721b4: ; 721b4 (1c:61b4) + ld a,$1 +; load a non-zero value in $fff9 to disable the routine that checks actual +; joypad input (said routine, located at $15f, does nothing if $fff9 is not +; zero) + ld [hReadJoypad],a + call SendSGBPacket + xor a + ld [hReadJoypad],a + ret + SendSGBPacket: ; 71feb (1c:5feb) ;check number of packets ld a,[hl] @@ -321,11 +479,6 @@ SendSGBPacket: ; 71feb (1c:5feb) .loop2 ; save B for later use push bc -; load a non-zero value in $fff9 to disable the routine that checks actual -; joypad input (said routine, located at $15f, does nothing if $fff9 is not -; zero) - ld a,$01 - ld [$fff9],a ; send RESET signal (P14=LOW, P15=LOW) xor a ld [$ff00],a @@ -366,10 +519,11 @@ SendSGBPacket: ; 71feb (1c:5feb) ; set P14=HIGH,P15=HIGH ld a,$30 ld [$ff00],a - xor a - ld [$fff9],a + call Wait7000 +; xor a +; ld [$fff9],a ; wait for about 70000 cycles - call Wait7000 +; call Wait7000 ; restore (previously pushed) number of packets pop bc dec b @@ -378,44 +532,45 @@ SendSGBPacket: ; 71feb (1c:5feb) ; else send 16 more bytes jr .loop2 -LoadSGB: ; 7202b (1c:602b) +LoadSGB: ; 721f8 (1c:61f8) xor a ld [wOnSGB], a call CheckSGB - ret nc + jr c, .onSGB + ld a, [hGBC] + and a + jr z, .onDMG ld a, $1 ld [wOnSGB], a - ld a, [wGBC] - and a - jr z, .asm_7203f +.onDMG ret -.asm_7203f +.onSGB di - call Func_72075 + call Func_72247 ei ld a, $1 ld [wcf2d], a ld de, ChrTrnPacket ld hl, SGBBorderGraphics - call Func_7210b + call Func_722d7 xor a ld [wcf2d], a ld de, PctTrnPacket ld hl, BorderPalettes - call Func_7210b + call Func_722d7 xor a ld [wcf2d], a ld de, PalTrnPacket ld hl, SuperPalettes - call Func_7210b + call Func_722d7 call ClearVram ld hl, MaskEnCancelPacket jp SendSGBPacket -Func_72075: ; 72075 (1c:6075) +Func_72247: ; 72247 (1c:6247) ld hl, PointerTable_72089 ld c, $9 -.asm_7207a +.loop push bc ld a, [hli] push hl @@ -426,10 +581,10 @@ Func_72075: ; 72075 (1c:6075) inc hl pop bc dec c - jr nz, .asm_7207a + jr nz, .loop ret -PointerTable_72089: ; 72089 (1c:6089) +PointerTable_7225b: ; 7225b (1c:625b) dw MaskEnFreezePacket dw DataSnd_72548 dw DataSnd_72558 @@ -440,18 +595,14 @@ PointerTable_72089: ; 72089 (1c:6089) dw DataSnd_725a8 dw DataSnd_725b8 -CheckSGB: ; 7209b (1c:609b) +CheckSGB: ; 7226d (1c:626d) ld hl, MltReq2Packet - di - call SendSGBPacket - ld a, $1 - ld [$fff9], a - ei + call Func_721b4 call Wait7000 ld a, [rJOYP] ; $ff0 and $3 cp $3 - jr nz, .asm_720fd + jr nz, .asm_722c9 ld a, $20 ld [rJOYP], a ; $ff0 ld a, [rJOYP] ; $ff0 @@ -482,60 +633,62 @@ CheckSGB: ; 7209b (1c:609b) ld a, [rJOYP] ; $ff0 and $3 cp $3 - jr nz, .asm_720fd - call Func_72102 + jr nz, .asm_722c9 + call Func_722ce and a ret -.asm_720fd - call Func_72102 +.asm_722c9 + call Func_722ce scf ret -Func_72102: ; 72102 (1c:6102) +Func_722ce: ; 722ce (1c:62ce) ld hl, MltReq1Packet call SendSGBPacket jp Wait7000 -Func_7210b: ; 7210b (1c:610b) +Func_722d7: ; 722d7 (1c:62d7) di push de call DisableLCD ld a, $e4 ld [rBGP], a ; $ff47 + call Func_72520 ld de, vChars1 ld a, [wcf2d] and a - jr z, .asm_72122 - call Func_72188 - jr .asm_72128 -.asm_72122 + jr z, .asm_722f1 + call Func_725fb + jr .asm_722f7 +.asm_722f1 ld bc, $1000 call CopyData -.asm_72128 +.asm_722f7 ld hl, vBGMap0 ld de, $c ld a, $80 ld c, $d -.asm_72132 +.asm_72301 ld b, $14 -.asm_72134 +.asm_72303 ld [hli], a inc a dec b - jr nz, .asm_72134 + jr nz, .asm_72303 add hl, de dec c - jr nz, .asm_72132 + jr nz, .asm_72301 ld a, $e3 ld [rLCDC], a ; $ff40 pop hl call SendSGBPacket xor a ld [rBGP], a ; $ff47 + call Func_72520 ei ret -Wait7000: ; 7214a (1c:614a) +Wait7000: ; 7231c (1c:631c) ; Each loop takes 9 cycles so this routine actually waits 63000 cycles. ld de, 7000 .loop @@ -548,71 +701,441 @@ Wait7000: ; 7214a (1c:614a) jr nz, .loop ret -Func_72156: ; 72156 (1c:6156) - ld a, [wGBC] +Func_72328: ; 72328 (1c:6328) + ld a, [hGBC] and a - jr z, .asm_72165 + jr z, .asm_7233e push de - call Func_7216d + call Func_72346 pop hl - call Func_72187 + call Func_72346 + ld a,[rLCDC] + and rLCDC_ENABLE_MASK + ret z + call Delay3 ret -.asm_72165 +.asm_7233e push de call SendSGBPacket pop hl jp SendSGBPacket -Func_7216d: ; 7216d (1c:616d) - ld a, $80 - ld [$ff68], a +Func_72346: ; 72346 (1c:6346) + ld a,[hl] + and $f8 + cp $20 + jp z,Func_7265e inc hl - ld c, $20 -.asm_72174 - ld a, [hli] + ld a,[hli] + inc hl + push hl + call Func_723fe + ld a,e + ld [wdee2],a + ld a,d + ld [wdee3],a + + xor a + call Func_7240f + ld a,$0 + call Func_72470 + ld a,$1 + call Func_7240f + ld a,$0 + call Func_724df + ld a,$2 + call Func_7240f + ld a,$4 + call Func_724df + + pop hl + ld a,[hli] + inc hl + push hl + call Func_723fe + ld a,e + ld [wdee4],a + ld a,d + ld [wdee5],a + + xor a + call Func_7240f + ld a,$1 + call Func_72470 + ld a,$1 + call Func_7240f + ld a,$1 + call Func_724df + ld a,$2 + call Func_7240f + ld a,$5 + call Func_7240f + + pop hl + ld a,[hli] inc hl + push hl + call Func_723fe + ld a,e + ld [wdee6],a + ld a,d + ld [wdee7],a + + xor a + call Func_7240f + ld a,$2 + call Func_72470 + ld a,$1 + call Func_7240f + ld a,$2 + call Func_724df + ld a,$2 + call Func_7240f + ld a,$6 + call Func_724df + + pop hl + ld a,[hli] + inc hl + call Func_723fe + ld a,e + ld [wdee8],a + ld a,d + ld [wdee9],a + + xor a + call Func_7240f + ld a,$3 + call Func_72470 + ld a,$1 + call Func_7240f + ld a,$3 + call Func_724df + ld a,$2 + call Func_7240f + ld a,$7 + call Func_724df + + ret + +Func_723fe:: ; 723fe (1c:63fe) + push hl + ld l,a + xor a + ld h,a + add hl,hl + add hl,hl + add hl,hl + ld de,SuperPalettes ; not exactly sure if actually super palettes + add hl,de + ld a,l + ld e,a + ld a,h + ld d,a + pop hl + ret + +Func_7240f:: ; 7240f (1c:640f) + and a + jr nz,.asm_72419 + ld a,[rBGP] + ld [wdef2],a + jr .asm_72428 +.asm_72419 + dec a + jr nz,.asm_72423 + ld a,[rOBP0] + ld [wdef3],a + jr .asm_72428 +.asm_72423 + ld a,[rOBP1] + ld [wdef4],a +.asm_72428 + ld b,a + and $3 + call Func_7246a + ld a,[hli] + ld [wdeea],a + ld a,[hl] + ld [wdeeb],a + ld a,b + rrca + rrca + ld b,a + and $3 + call Func_7246a + ld a,[hli] + ld [wdeec],a + ld a,[hl] + ld [wdeed],a + ld a,b + rrca + rrca + ld b,a + and $3 + call Func_7246a + ld a,[hli] + ld [wdeee],a + ld a,[hl] + ld [wdeef],a + ld a,b + rrca + rrca + ld b,a + and $3 + call Func_7246a + ld a,[hli] + ld [wdef0],a + ld a,[hl] + ld [wdef1],a + ret + +Func_7246a:: ; 7246a (1c:646a) + add a + ld l,a + xor a + ld h,a + add hl,de + ret + +Func_72470:: ; 72470 (1c:6470) + push de add a add a add a - ld de, SuperPalettes - add e - jr nc, .asm_72180 - inc d -.asm_72180 - ld a, [de] - ld [$ff69], a + or $80 + ld [rBGPI],a + ld de,rBGPD + ld hl,wdeea + ld b,$2 + ld a,[rLCDC] + and rLCDC_ENABLE_MASK + jr nz,.lcdenabled + rept 4 + call Func_7251b + endr + jr .done +.lcdenabled + rept 4 + call Func_72511 + endr +.done + pop de + ret + +Func_724a2:: ; 724a2 (1c:64a2) + push de + add a + add a + add a + ld l,a + xor a + ld h,a + ld de,wdef6 + add hl,de + ld de,wdee9 + ld c,$8 +.loop + ld a,[de] + ld [hli],a + inc de dec c - jr nz, .asm_72174 + jr nz,.loop + pop de ret -Func_72187: ; 72187 (1c:6187) +PreparePalDataTransfer:: ; 724ba (1c:64ba) +; wait for vblank period unless LCD is disabled + ld a,[rLCDC] + and rLCDC_ENABLE_MASK + jr z,.lcddisabled + di +.waitloop + ld a,[rLY] + cp 144 + jr c,.waitloop +.lcddisabled + call TransferPalData + ei ret -Func_72188: ; 72188 (1c:6188) - ld b, $80 -.asm_7218a - ld c, $10 -.asm_7218c - ld a, [hli] - ld [de], a - inc de - dec c - jr nz, .asm_7218c - ld c, $10 +TransferPalData: ; 724cc (1c:64cc) xor a -.asm_72195 - ld [de], a - inc de + or $80 + ld [rBGPI], a + ld de,rBGPD + ld hl,wdef6 + ld c,$20 +.loop + ld a,[hli] + ld [de],a dec c - jr nz, .asm_72195 - dec b - jr nz, .asm_7218a + jr nz,.loop + ret + +Func_724df: ; 724df (1c:64df) + push de + add a + add a + add a + or $80 + ld [rOBPI],a + ld de,rOBPD + ld hl,wdeea + ld b,$2 ; searching oam STAT mode + ld a,[rLCDC] + and rLCDC_ENABLE_MASK + jr nz,.lcdenabled + rept 4 + call Func_7251b + endr + jr .done +.lcdenabled + rept 4 + call Func_72511 + endr +.done + pop de + ret + +Func_72511: ; 72511 (1c:6511) + ld a,[rSTAT] + and b + jr z,Func_72511 ; wait if either in hblank or vblank period +.notinhblank + ld a,[rSTAT] + and b + jr nz,.notinhblank ; wait if transferring oam or data to lcd driver +Func_7251b: ; 7251b (1c:651b) + ld a,[hli] + ld [de],a + ld a,[hli] + ld [de],a ret +Func_72520:: ; 72520 (1c:6520) + ld a,[hGBC] + and a + ret z +; fallthrough +Func_72524:: ; 72524 (1c:6524) + ld a,[wdee2] + ld e,a + ld a,[wdee3] + ld d,a + xor a + call Func_7240f + ld a,$0 + call Func_724a2 + ld a,[wdee4] + ld e,a + ld a,[wdee5] + ld d,a + xor a + call Func_7240f + ld a,$1 + call Func_724a2 + ld a,[wdee5] + ld e,a + ld a,[wdee6] + ld d,a + xor a + call Func_7240f + ld a,$2 + call Func_724a2 + ld a,[wdee8] + ld e,a + ld a,[wdee9] + ld d,a + xor a + call Func_7240f + ld a,$3 + call Func_724a2 + call PreparePalDataTransfer + ret + +Func_7265c:: ; 7265c (1c:656c) + ld a,[wdee2] + ld e,a + ld a,[wdee3] + ld d,a + ld a,c + call Func_7240f + ld a,c + dec a + rlca + rlca + call Func_724df + ld a,[wdee4] + ld e,a + ld a,[wdee5] + ld d,a + ld a,c + call Func_7240f + ld a,c + dec a + rlca + rlca + inc a + call Func_724df + ld a,[wdee6] + ld e,a + ld a,[wdee7] + ld d,a + ld a,c + call Func_7240f + ld a,c + dec a + rlca + rlca + add $2 + call Func_724df + ld a,[wdee8] + ld e,a + ld a,[wdee9] + ld d,a + ld a,c + call Func_7240f + ld a,c + dec a + rlca + rlca + add $3 + call Func_724df + ret + +Func_725be:: ; 725be (1c:65be) + push hl + pop de + ld hl,Pointer_725e2 + ld a,[hli] + ld c,a + ld a,e +.loop + cp [hl] + jr z,.asm_725cf + inc hl + inc hl + dec c + jr nz,.loop + ret +.asm_725cf + inc hl + ld a,d + cp [hl] + jr z,.asm_725d9 + inc hl + dec c + jr nz,.asm_725c5 + ret +.asm_725d9 + callba Func_bf450 ; 2f:7250 + ret + INCLUDE "data/sgb_packets.asm" INCLUDE "data/mon_palettes.asm" INCLUDE "data/super_palettes.asm" -INCLUDE "data/sgb_border.asm" +INCLUDE "data/sgb_border.asm"
\ No newline at end of file @@ -164,6 +164,9 @@ hLCDCPointer EQU $FFF4 hJoyInput EQU $FFF5 +hReadJoypad EQU $FFF8 ; 0 to read joypad, anything else skips joypad check + ; written to in palettes.asm + ; bit 0: draw HP fraction to the right of bar instead of below (for party menu) ; bit 1: menu is double spaced hFlags_0xFFF6 EQU $FFFA @@ -2312,8 +2312,29 @@ wBoxMon2:: ds box_struct_length * (MONS_PER_BOX + -1) ; dab7 wBoxMonOT:: ds 11 * MONS_PER_BOX ; dd2a wBoxMonNicks:: ds 11 * MONS_PER_BOX ; de06 -wBoxMonNicksEnd:: ; dee2 - +wBoxMonNicksEnd:: ; dee1 + +wdee2:: ds 1 ; dee1 +wdee3:: ds 1 ; dee2 +wdee4:: ds 1 +wdee5:: ds 1 +wdee6:: ds 1 +wdee7:: ds 1 +wdee8:: ds 1 +wdee9:: ds 1 +wdeea:: ds 1 +wdeeb:: ds 1 +wdeec:: ds 1 +wdeed:: ds 1 +wdeee:: ds 1 +wdeef:: ds 1 +wdef0:: ds 1 +wdef1:: ds 1 +wdef2:: ds 1 +wdef3:: ds 1 +wdef4:: ds 1 +wdef5:: ds 1 +wdef6:: ds 1 SECTION "Stack", WRAMX[$dfff], BANK[1] wStack:: ; dfff |