diff options
-rw-r--r-- | engine/events/mom.asm | 2 | ||||
-rwxr-xr-x | engine/events/overworld.asm | 2 | ||||
-rwxr-xr-x | engine/gfx/cgb_layouts.asm | 2 | ||||
-rwxr-xr-x | engine/gfx/color.asm | 2 | ||||
-rw-r--r-- | engine/gfx/load_pics.asm | 1 | ||||
-rwxr-xr-x | engine/gfx/sgb_layouts.asm | 4 | ||||
-rw-r--r-- | engine/menus/intro_menu.asm | 2 | ||||
-rw-r--r-- | engine/menus/main_menu.asm | 6 | ||||
-rw-r--r-- | engine/menus/menu.asm | 3 | ||||
-rw-r--r-- | engine/menus/save.asm | 4 | ||||
-rw-r--r-- | engine/menus/start_menu.asm | 4 | ||||
-rw-r--r-- | engine/overworld/overworld.asm | 4 | ||||
-rwxr-xr-x | engine/overworld/player_object.asm | 2 | ||||
-rw-r--r-- | engine/pokemon/breeding.asm | 8 | ||||
-rw-r--r-- | home/audio.asm | 1 | ||||
-rw-r--r-- | home/copy.asm | 1 | ||||
-rw-r--r-- | home/init.asm | 4 | ||||
-rw-r--r-- | home/map.asm | 513 | ||||
-rw-r--r-- | home/palettes.asm | 14 | ||||
-rwxr-xr-x | home/pokemon.asm | 1 | ||||
-rw-r--r-- | home/serial.asm | 12 | ||||
-rw-r--r-- | home/text.asm | 5 | ||||
-rwxr-xr-x | home/tilemap.asm | 4 | ||||
-rw-r--r-- | home/vblank.asm | 2 | ||||
-rw-r--r-- | home/warp_connection.asm | 506 | ||||
-rw-r--r-- | home/window.asm | 6 | ||||
-rwxr-xr-x | hram.asm | 1 | ||||
-rw-r--r-- | main.asm | 4 | ||||
-rw-r--r-- | vram.asm | 1 |
29 files changed, 564 insertions, 557 deletions
diff --git a/engine/events/mom.asm b/engine/events/mom.asm index c1374fa6..18572296 100644 --- a/engine/events/mom.asm +++ b/engine/events/mom.asm @@ -450,7 +450,7 @@ Mom_ContinueMenuSetup: lb bc, PRINTNUM_MONEY | PRINTNUM_LEADINGZEROS | 3, 6 call PrintNum call UpdateSprites - call OpenAndCloseMenu_HDMATransferTilemapAndAttrmap + call CGBOnly_CopyTilemapAtOnce ret Mom_Wait10Frames: diff --git a/engine/events/overworld.asm b/engine/events/overworld.asm index 441f38b0..4f2ba801 100755 --- a/engine/events/overworld.asm +++ b/engine/events/overworld.asm @@ -608,7 +608,7 @@ FlyFunction: callasm FlyToAnim special WaitSFX special ReplaceChrisSprite - callasm _RefreshSprites + callasm _ClearSprites end WaterfallFunction: diff --git a/engine/gfx/cgb_layouts.asm b/engine/gfx/cgb_layouts.asm index 34cb2350..a9a2038a 100755 --- a/engine/gfx/cgb_layouts.asm +++ b/engine/gfx/cgb_layouts.asm @@ -59,7 +59,7 @@ LoadSGBLayoutCGB: dw _CGB_PlayerOrMonFrontpicPals dw _CGB_TradeTube dw _CGB_TrainerOrMonFrontpicPals - dw Function9a94 + dw _CGB_MysteryGift dw _CGB1e dw _CGB_Pokedex_5_5 diff --git a/engine/gfx/color.asm b/engine/gfx/color.asm index 2bc553f2..b60acac8 100755 --- a/engine/gfx/color.asm +++ b/engine/gfx/color.asm @@ -409,7 +409,7 @@ INCLUDE "gfx/mail/mail.pal" INCLUDE "engine/gfx/cgb_layouts.asm" -Function9a94: +_CGB_MysteryGift: ld hl, .Palette ld de, wBGPals1 ld bc, 1 palettes diff --git a/engine/gfx/load_pics.asm b/engine/gfx/load_pics.asm index a4d88111..c9ee98b7 100644 --- a/engine/gfx/load_pics.asm +++ b/engine/gfx/load_pics.asm @@ -146,7 +146,6 @@ GetMonBackpic: jr nz, .ok ld a, [wUnownLetter] ld d, BANK(UnownPicPointers) - .ok dec a ld bc, 6 diff --git a/engine/gfx/sgb_layouts.asm b/engine/gfx/sgb_layouts.asm index f50835fa..db4e929f 100755 --- a/engine/gfx/sgb_layouts.asm +++ b/engine/gfx/sgb_layouts.asm @@ -53,7 +53,7 @@ LoadSGBLayout: dw .SGB_TrainerOrMonFrontpicPals dw .SGB_MysteryGift dw .SGB1e - dw .SGB1f + dw .SGB_Pokedex_5_5 .SGB_BattleGrayscale: ld hl, PalPacket_BattleGrayscale @@ -224,7 +224,7 @@ LoadSGBLayout: ld de, BlkPacket_Pokedex_PC ret -.SGB1f: +.SGB_Pokedex_5_5: call .SGB_Pokedex ld de, BlkPacket_9f65 ret diff --git a/engine/menus/intro_menu.asm b/engine/menus/intro_menu.asm index 414c733f..6be015cb 100644 --- a/engine/menus/intro_menu.asm +++ b/engine/menus/intro_menu.asm @@ -1,4 +1,5 @@ MainMenu_NewGame: +NewGame: xor a ld [wDebugFlags], a call ResetWRAM @@ -242,6 +243,7 @@ LoadOrRegenerateLuckyIDNumber: jp CloseSRAM MainMenu_Continue: +Continue: farcall TryLoadSaveFile jr c, .FailToLoad call LoadStandardMenuHeader diff --git a/engine/menus/main_menu.asm b/engine/menus/main_menu.asm index 97ac8ed6..4e9113a8 100644 --- a/engine/menus/main_menu.asm +++ b/engine/menus/main_menu.asm @@ -171,7 +171,7 @@ MainMenu_PrintCurrentTimeAndDay: jp nz, .PrintTimeNotSet call UpdateTime hlcoord 1, 13 - ld bc, IncGradGBPalTable_11 + 1 + lb bc, 4, 13 call ClearBox call GetWeekday ld b, a @@ -241,11 +241,13 @@ ClearTilemapEtc: ret MainMenu_MysteryGift: +MysteryGift: call UpdateTime farcall DoMysteryGiftIfDayHasPassed farcall DoMysteryGift ret MainMenu_Options: - farcall OptionsMenu +OptionsMenu: + farcall _OptionsMenu ret diff --git a/engine/menus/menu.asm b/engine/menus/menu.asm index 2073e5ca..b678d714 100644 --- a/engine/menus/menu.asm +++ b/engine/menus/menu.asm @@ -559,8 +559,7 @@ _ExitMenu:: ld a, [wSpriteUpdatesEnabled] cp 0 ret z - - call Functiond2a + call ReloadPalettes ret Function2434b: diff --git a/engine/menus/save.asm b/engine/menus/save.asm index 1eafbe46..f8207204 100644 --- a/engine/menus/save.asm +++ b/engine/menus/save.asm @@ -19,7 +19,7 @@ SaveMenu: .refused call ExitMenu - call Functiond2a + call ReloadPalettes farcall SaveMenu_CopyTilemapAtOnce scf ret @@ -204,7 +204,7 @@ SaveTheGame_yesorno: dec a call CloseWindow push af - call Functiond2a + call ReloadPalettes pop af and a ret diff --git a/engine/menus/start_menu.asm b/engine/menus/start_menu.asm index fa574d07..dbadf637 100644 --- a/engine/menus/start_menu.asm +++ b/engine/menus/start_menu.asm @@ -151,7 +151,7 @@ StartMenu:: call DrawVariableLengthMenuBox call .DrawBugContestStatus call UpdateSprites - call Functiond2a + call ReloadPalettes call FinishExitMenu ret @@ -444,7 +444,7 @@ StartMenu_Option: ; Game options. call FadeToMenu - farcall MainMenu_Options + farcall OptionsMenu ld a, 6 ret diff --git a/engine/overworld/overworld.asm b/engine/overworld/overworld.asm index ea1f6c28..05b15ea9 100644 --- a/engine/overworld/overworld.asm +++ b/engine/overworld/overworld.asm @@ -7,7 +7,7 @@ _ReplaceChrisSprite:: call GetUsedSprite ret -_ClearSprites:: +_RefreshSprites:: ld hl, wSpriteFlags ld a, [hl] push af @@ -18,7 +18,7 @@ _ClearSprites:: ld [wSpriteFlags], a ret -_RefreshSprites:: +_ClearSprites:: ld hl, wSpriteFlags ld a, [hl] push af diff --git a/engine/overworld/player_object.asm b/engine/overworld/player_object.asm index 339f7ee0..cd886bc3 100755 --- a/engine/overworld/player_object.asm +++ b/engine/overworld/player_object.asm @@ -510,7 +510,7 @@ CopyTempObjectToObjectStruct: ld [hl], a ret -TrainerWalkToPlayer: +TrainerWalkToPlayer:: ldh a, [hLastTalked] call InitMovementBuffer ld a, movement_step_sleep diff --git a/engine/pokemon/breeding.asm b/engine/pokemon/breeding.asm index fd5d9a82..ee1afd25 100644 --- a/engine/pokemon/breeding.asm +++ b/engine/pokemon/breeding.asm @@ -428,7 +428,7 @@ GetEggMove: ld a, BANK(EggMovePointers) call GetFarHalfword .loop - ld a, BANK(EggMovePointers) + ld a, BANK("Egg Moves") call GetFarByte cp -1 jr z, .reached_end @@ -617,7 +617,7 @@ GetBreedmonMovePointer: ld hl, wBreedMon2Moves ret -GetHatchlingFrontpic: +GetEggFrontpic: push de ld [wCurPartySpecies], a ld [wCurSpecies], a @@ -677,10 +677,10 @@ EggHatch_AnimationSequence: farcall ClearSpriteAnims ld de, vTiles2 tile $00 ld a, [wJumptableIndex] - call GetHatchlingFrontpic + call GetEggFrontpic ld de, vTiles2 tile $31 ld a, EGG - call GetHatchlingFrontpic + call GetEggFrontpic ld de, MUSIC_EVOLUTION call PlayMusic call EnableLCD diff --git a/home/audio.asm b/home/audio.asm index 726d758c..9e982331 100644 --- a/home/audio.asm +++ b/home/audio.asm @@ -333,6 +333,7 @@ PlayMapMusic:: ret PlayMapMusicBike:: +; If the player's on a bike, play the bike music instead of the map music push hl push de push bc diff --git a/home/copy.asm b/home/copy.asm index 5f4ea079..c623d335 100644 --- a/home/copy.asm +++ b/home/copy.asm @@ -54,7 +54,6 @@ GetFarHalfword:: rst Bankswitch ret - ByteFill:: ; fill bc bytes with the value of a, starting at hl inc b ; we bail the moment b hits 0, so include the last run diff --git a/home/init.asm b/home/init.asm index e5f57e1c..497e13c7 100644 --- a/home/init.asm +++ b/home/init.asm @@ -108,9 +108,9 @@ Init:: ld a, CONNECTION_NOT_ESTABLISHED ldh [hSerialConnectionStatus], a - ld h, $98 + ld h, HIGH(vBGMap0) call BlankBGMap - ld h, $9c + ld h, HIGH(vBGMap1) call BlankBGMap callfar InitCGBPals diff --git a/home/map.asm b/home/map.asm index 5f34070e..d3a67c71 100644 --- a/home/map.asm +++ b/home/map.asm @@ -213,512 +213,7 @@ ReturnToMapFromSubmenu:: ldh [hMapEntryMethod], a ret -HandleNewMap:: - call ClearUnusedMapBuffer - call ResetMapBufferEventFlags - call ResetFlashIfOutOfCave - call GetCurrentMapSceneID - call ResetBikeFlags - ld a, MAPCALLBACK_NEWMAP - call RunMapCallback -HandleContinueMap:: - farcall ClearCmdQueue - ld a, MAPCALLBACK_CMDQUEUE - call RunMapCallback - call GetMapTimeOfDay - ld [wMapTimeOfDay], a - ret - -LoadMapTimeOfDay:: - ld a, $1 - ld [wSpriteUpdatesEnabled], a - farcall ReplaceTimeOfDayPals - farcall UpdateTimeOfDayPal - call OverworldTextModeSwitch - call .ClearBGMap - call .PushAttrmap - ret - -.ClearBGMap: - ld a, HIGH(vBGMap0) - ld [wBGMapAnchor + 1], a - xor a ; LOW(vBGMap0) - ld [wBGMapAnchor], a - ldh [hSCY], a - ldh [hSCX], a - farcall ApplyBGMapAnchorToObjects - - ld a, "■" - ld bc, vBGMap1 - vBGMap0 - hlbgcoord 0, 0 - call ByteFill - ret - -.PushAttrmap: - decoord 0, 0 - call .copy - ldh a, [hCGB] - and a - ret z - - decoord 0, 0, wAttrmap - ld a, $1 - ldh [rVBK], a -.copy - hlbgcoord 0, 0 - ld c, SCREEN_WIDTH - ld b, SCREEN_HEIGHT -.row - push bc -.column - ld a, [de] - inc de - ld [hli], a - dec c - jr nz, .column - ld bc, BG_MAP_WIDTH - SCREEN_WIDTH - add hl, bc - pop bc - dec b - jr nz, .row - ld a, $0 - ldh [rVBK], a - ret - -LoadMapGraphics:: - call LoadMapTileset - call LoadTilesetGFX - xor a - ldh [hMapAnims], a - xor a - ldh [hTileAnimFrame], a - farcall RefreshSprites - call LoadFontsExtra - ret - -LoadMapPalettes:: - ld b, $9 - jp GetSGBLayout - -RefreshMapSprites:: - call ClearSprites - call ResetBGWindow - call GetMovementPermissions - farcall RefreshPlayerSprite - farcall CheckReplaceChrisSprite - ld hl, wPlayerSpriteSetupFlags - bit PLAYERSPRITESETUP_SKIP_RELOAD_GFX_F, [hl] - jr nz, .skip - ld hl, wVramState - set 0, [hl] - call SafeUpdateSprites -.skip - xor a - ld [wPlayerSpriteSetupFlags], a - ret - -CheckMovingOffEdgeOfMap:: - ld a, [wPlayerStepDirection] - cp STANDING - ret z - and a ; DOWN - jr z, .down - cp UP - jr z, .up - cp LEFT - jr z, .left - cp RIGHT - jr z, .right - and a - ret - -.down - ld a, [wPlayerStandingMapY] - sub 4 - ld b, a - ld a, [wMapHeight] - add a - cp b - jr z, .ok - and a - ret - -.up - ld a, [wPlayerStandingMapY] - sub 4 - cp -1 - jr z, .ok - and a - ret - -.left - ld a, [wPlayerStandingMapX] - sub 4 - cp -1 - jr z, .ok - and a - ret - -.right - ld a, [wPlayerStandingMapX] - sub 4 - ld b, a - ld a, [wMapWidth] - add a - cp b - jr z, .ok - and a - ret - -.ok - scf - ret - -EnterMapConnection:: -; Return carry if a connection has been entered. - ld a, [wPlayerStepDirection] - and a ; DOWN - jp z, .south - cp UP - jp z, .north - cp LEFT - jp z, .west - cp RIGHT - jp z, .east - ret - -.west - ld a, [wWestConnectedMapGroup] - ld [wMapGroup], a - ld a, [wWestConnectedMapNumber] - ld [wMapNumber], a - ld a, [wWestConnectionStripXOffset] - ld [wXCoord], a - ld a, [wWestConnectionStripYOffset] - ld hl, wYCoord - add [hl] - ld [hl], a - ld c, a - ld hl, wWestConnectionWindow - ld a, [hli] - ld h, [hl] - ld l, a - srl c - jr z, .skip_to_load - ld a, [wWestConnectedMapWidth] - add 6 - ld e, a - ld d, 0 - -.loop - add hl, de - dec c - jr nz, .loop - -.skip_to_load - ld a, l - ld [wOverworldMapAnchor], a - ld a, h - ld [wOverworldMapAnchor + 1], a - jp .done - -.east - ld a, [wEastConnectedMapGroup] - ld [wMapGroup], a - ld a, [wEastConnectedMapNumber] - ld [wMapNumber], a - ld a, [wEastConnectionStripXOffset] - ld [wXCoord], a - ld a, [wEastConnectionStripYOffset] - ld hl, wYCoord - add [hl] - ld [hl], a - ld c, a - ld hl, wEastConnectionWindow - ld a, [hli] - ld h, [hl] - ld l, a - srl c - jr z, .skip_to_load2 - ld a, [wEastConnectedMapWidth] - add 6 - ld e, a - ld d, 0 - -.loop2 - add hl, de - dec c - jr nz, .loop2 - -.skip_to_load2 - ld a, l - ld [wOverworldMapAnchor], a - ld a, h - ld [wOverworldMapAnchor + 1], a - jp .done - -.north - ld a, [wNorthConnectedMapGroup] - ld [wMapGroup], a - ld a, [wNorthConnectedMapNumber] - ld [wMapNumber], a - ld a, [wNorthConnectionStripYOffset] - ld [wYCoord], a - ld a, [wNorthConnectionStripXOffset] - ld hl, wXCoord - add [hl] - ld [hl], a - ld c, a - ld hl, wNorthConnectionWindow - ld a, [hli] - ld h, [hl] - ld l, a - ld b, 0 - srl c - add hl, bc - ld a, l - ld [wOverworldMapAnchor], a - ld a, h - ld [wOverworldMapAnchor + 1], a - jp .done - -.south - ld a, [wSouthConnectedMapGroup] - ld [wMapGroup], a - ld a, [wSouthConnectedMapNumber] - ld [wMapNumber], a - ld a, [wSouthConnectionStripYOffset] - ld [wYCoord], a - ld a, [wSouthConnectionStripXOffset] - ld hl, wXCoord - add [hl] - ld [hl], a - ld c, a - ld hl, wSouthConnectionWindow - ld a, [hli] - ld h, [hl] - ld l, a - ld b, 0 - srl c - add hl, bc - ld a, l - ld [wOverworldMapAnchor], a - ld a, h - ld [wOverworldMapAnchor + 1], a -.done - scf - ret - -CheckWarpTile:: - call GetDestinationWarpNumber - ret nc - - push bc - farcall CheckDirectionalWarp - pop bc - ret nc - - call CopyWarpData - scf - ret - -WarpCheck:: - call GetDestinationWarpNumber - ret nc - call CopyWarpData - ret - -GetDestinationWarpNumber:: - farcall CheckWarpCollision - ret nc - - ldh a, [hROMBank] - push af - - call SwitchToMapScriptsBank - call .GetDestinationWarpNumber - - pop de - ld a, d - rst Bankswitch - ret - -.GetDestinationWarpNumber: - ld a, [wPlayerStandingMapY] - sub 4 - ld e, a - ld a, [wPlayerStandingMapX] - sub 4 - ld d, a - ld a, [wCurMapWarpCount] - and a - ret z - - ld c, a - ld hl, wCurMapWarpsPointer - ld a, [hli] - ld h, [hl] - ld l, a -.loop - push hl - ld a, [hli] - cp e - jr nz, .next - ld a, [hli] - cp d - jr nz, .next - jr .found_warp - -.next - pop hl - ld a, WARP_EVENT_SIZE - add l - ld l, a - jr nc, .okay - inc h - -.okay - dec c - jr nz, .loop - xor a - ret - -.found_warp - pop hl - call .IncreaseHLTwice - ret nc ; never encountered - - ld a, [wCurMapWarpCount] - inc a - sub c - ld c, a - scf - ret - -.IncreaseHLTwice: - inc hl - inc hl - scf - ret - -CopyWarpData:: - ldh a, [hROMBank] - push af - - call SwitchToMapScriptsBank - call .CopyWarpData - - pop af - rst Bankswitch - scf - ret - -.CopyWarpData: - push bc - ld hl, wCurMapWarpsPointer - ld a, [hli] - ld h, [hl] - ld l, a - ld a, c - dec a - ld bc, WARP_EVENT_SIZE - call AddNTimes - ld bc, 2 ; warp number - add hl, bc - ld a, [hli] - cp -1 - jr nz, .skip - ld hl, wBackupWarpNumber - ld a, [hli] - -.skip - pop bc - ld [wNextWarp], a - ld a, [hli] - ld [wNextMapGroup], a - ld a, [hli] - ld [wNextMapNumber], a - - ld a, c - ld [wPrevWarp], a - ld a, [wMapGroup] - ld [wPrevMapGroup], a - ld a, [wMapNumber] - ld [wPrevMapNumber], a - scf - ret - -EnterMapWarp:: - call .SaveDigWarp - call .SetSpawn - ld a, [wNextWarp] - ld [wWarpNumber], a - ld a, [wNextMapGroup] - ld [wMapGroup], a - ld a, [wNextMapNumber] - ld [wMapNumber], a - ret - -.SaveDigWarp:: - call GetMapEnvironment - call CheckOutdoorMap - ret nz - ld a, [wNextMapGroup] - ld b, a - ld a, [wNextMapNumber] - ld c, a - call GetAnyMapEnvironment - call CheckIndoorMap - ret nz - -; MOUNT_MOON_SQUARE and TIN_TOWER_ROOF are outdoor maps within indoor maps. -; Dig and Escape Rope should not take you to them. - ld a, [wPrevMapGroup] - cp GROUP_MOUNT_MOON_SQUARE ; aka GROUP_TIN_TOWER_ROOF - jr nz, .not_mt_moon_or_tin_tower - ld a, [wPrevMapNumber] - cp MAP_MOUNT_MOON_SQUARE - ret z - cp MAP_TIN_TOWER_ROOF - ret z -.not_mt_moon_or_tin_tower - - ld a, [wPrevWarp] - ld [wDigWarpNumber], a - ld a, [wPrevMapGroup] - ld [wDigMapGroup], a - ld a, [wPrevMapNumber] - ld [wDigMapNumber], a - ret - -.SetSpawn: - call GetMapEnvironment - call CheckOutdoorMap - ret nz - ld a, [wNextMapGroup] - ld b, a - ld a, [wNextMapNumber] - ld c, a - call GetAnyMapEnvironment - call CheckIndoorMap - ret nz - ld a, [wNextMapGroup] - ld b, a - ld a, [wNextMapNumber] - ld c, a - -; Respawn in Pokémon Centers. - call GetAnyMapTileset - ld a, c - cp TILESET_POKECENTER - ret nz - -.pokecenter - ld a, [wPrevMapGroup] - ld [wLastSpawnMapGroup], a - ld a, [wPrevMapNumber] - ld [wLastSpawnMapNumber], a - ret +INCLUDE "home/warp_connection.asm" CheckOutdoorMap:: cp ROUTE @@ -2277,7 +1772,7 @@ CloseSubmenu:: call ReloadTilesetAndPalettes call UpdateSprites call Call_ExitMenu - call Functiond2a + call ReloadPalettes jr FinishExitMenu ExitAllMenus:: @@ -2285,7 +1780,7 @@ ExitAllMenus:: call Call_ExitMenu call ReloadTilesetAndPalettes call UpdateSprites - call Functiond2a + call ReloadPalettes FinishExitMenu:: ld b, SCGB_MAPPALS call GetSGBLayout @@ -2320,7 +1815,7 @@ ReturnToMapWithSpeechTextbox:: ReloadTilesetAndPalettes:: call DisableLCD call ClearSprites - farcall _ClearSprites + farcall _RefreshSprites call LoadStandardFont call LoadFontsExtra ldh a, [hROMBank] diff --git a/home/palettes.asm b/home/palettes.asm index 665a86ae..41cbbde9 100644 --- a/home/palettes.asm +++ b/home/palettes.asm @@ -257,22 +257,22 @@ ClearVBank1:: ldh [rVBK], a ret -Functiond2a:: +ReloadPalettes:: hlcoord 0, 0 - ld de, wAttrmap + decoord 0, 0, wAttrmap ld bc, SCREEN_WIDTH * SCREEN_HEIGHT -.asm_d33 +.loop ld a, [hli] cp $60 - jr c, .asm_d3b - ld a, $7 + jr c, .pal_map + ld a, 7 ld [de], a -.asm_d3b +.pal_map inc de dec bc ld a, b or c - jr nz, .asm_d33 + jr nz, .loop ret ReloadSpritesNoPalettes:: diff --git a/home/pokemon.asm b/home/pokemon.asm index 9bc54b2d..d035a2e4 100755 --- a/home/pokemon.asm +++ b/home/pokemon.asm @@ -64,6 +64,7 @@ PrepMonFrontpic:: _PrepMonFrontpic:: ld a, [wCurPartySpecies] +; is a pokemon? and a jr z, .not_pokemon cp EGG diff --git a/home/serial.asm b/home/serial.asm index f2924384..78814317 100644 --- a/home/serial.asm +++ b/home/serial.asm @@ -57,7 +57,6 @@ Serial:: bit 7, a jr nz, .wait_bit_7 - ; Cycle the serial controller ld a, (0 << rSC_ON) | (0 << rSC_CLOCK) ldh [rSC], a ld a, (1 << rSC_ON) | (0 << rSC_CLOCK) @@ -82,7 +81,7 @@ Serial:: reti Serial_ExchangeBytes:: - ld a, 1 + ld a, $1 ldh [hSerialIgnoringInitialData], a .loop ld a, [hl] @@ -121,20 +120,19 @@ Serial_ExchangeByte:: xor a ldh [hSerialReceivedNewData], a ldh a, [hSerialConnectionStatus] - cp 2 + cp USING_INTERNAL_CLOCK jr nz, .not_player_2 ld a, (0 << rSC_ON) | (1 << rSC_CLOCK) ldh [rSC], a ld a, (1 << rSC_ON) | (1 << rSC_CLOCK) ldh [rSC], a - .not_player_2 .loop2 ldh a, [hSerialReceivedNewData] and a jr nz, .reset_ffcc ldh a, [hSerialConnectionStatus] - cp 1 + cp USING_EXTERNAL_CLOCK jr nz, .not_player_1_or_wLinkTimeoutFrames_zero call CheckwLinkTimeoutFramesNonzero jr z, .not_player_1_or_wLinkTimeoutFrames_zero @@ -166,7 +164,7 @@ Serial_ExchangeByte:: ld [wce5d + 1], a jr nz, .loop2 ldh a, [hSerialConnectionStatus] - cp 1 + cp USING_EXTERNAL_CLOCK jr z, .reset_ffcc ld a, 255 @@ -256,7 +254,7 @@ Serial_ExchangeLinkMenuSelection:: inc hl ldh a, [hSerialIgnoringInitialData] and a - ld a, 0 + ld a, FALSE ldh [hSerialIgnoringInitialData], a jr nz, .asm_7f8 ld a, b diff --git a/home/text.asm b/home/text.asm index 5af9f921..61cc371e 100644 --- a/home/text.asm +++ b/home/text.asm @@ -166,7 +166,8 @@ PlaceNextChar:: ld c, l pop hl ret - pop de + + pop de ; unused NextChar:: inc de @@ -399,10 +400,12 @@ LineChar:: Paragraph:: push de + ld a, [wLinkMode] cp LINK_COLOSSEUM jr z, .linkbattle call LoadBlinkingCursor + .linkbattle call Text_WaitBGMap call PromptButton diff --git a/home/tilemap.asm b/home/tilemap.asm index 981dd95c..176d5be2 100755 --- a/home/tilemap.asm +++ b/home/tilemap.asm @@ -52,11 +52,11 @@ ApplyTilemap:: call DelayFrames ret -OpenAndCloseMenu_HDMATransferTilemapAndAttrmap:: +CGBOnly_CopyTilemapAtOnce:: ldh a, [hCGB] and a jr z, WaitBGMap - +; fall through CopyTilemapAtOnce:: ldh a, [hBGMapMode] push af diff --git a/home/vblank.asm b/home/vblank.asm index ce82f2cd..d6dfc825 100644 --- a/home/vblank.asm +++ b/home/vblank.asm @@ -38,7 +38,7 @@ VBlank:: dw VBlank3 dw VBlank4 dw VBlank5 - dw VBlank0 + dw VBlank0 ; just in case dw VBlank0 ; just in case VBlank0:: diff --git a/home/warp_connection.asm b/home/warp_connection.asm new file mode 100644 index 00000000..7207208e --- /dev/null +++ b/home/warp_connection.asm @@ -0,0 +1,506 @@ +HandleNewMap:: + call ClearUnusedMapBuffer + call ResetMapBufferEventFlags + call ResetFlashIfOutOfCave + call GetCurrentMapSceneID + call ResetBikeFlags + ld a, MAPCALLBACK_NEWMAP + call RunMapCallback +HandleContinueMap:: + farcall ClearCmdQueue + ld a, MAPCALLBACK_CMDQUEUE + call RunMapCallback + call GetMapTimeOfDay + ld [wMapTimeOfDay], a + ret + +LoadMapTimeOfDay:: + ld a, $1 + ld [wSpriteUpdatesEnabled], a + farcall ReplaceTimeOfDayPals + farcall UpdateTimeOfDayPal + call OverworldTextModeSwitch + call .ClearBGMap + call .PushAttrmap + ret + +.ClearBGMap: + ld a, HIGH(vBGMap0) + ld [wBGMapAnchor + 1], a + xor a ; LOW(vBGMap0) + ld [wBGMapAnchor], a + ldh [hSCY], a + ldh [hSCX], a + farcall ApplyBGMapAnchorToObjects + + ld a, "■" + ld bc, vBGMap1 - vBGMap0 + hlbgcoord 0, 0 + call ByteFill + ret + +.PushAttrmap: + decoord 0, 0 + call .copy + ldh a, [hCGB] + and a + ret z + + decoord 0, 0, wAttrmap + ld a, $1 + ldh [rVBK], a +.copy + hlbgcoord 0, 0 + ld c, SCREEN_WIDTH + ld b, SCREEN_HEIGHT +.row + push bc +.column + ld a, [de] + inc de + ld [hli], a + dec c + jr nz, .column + ld bc, BG_MAP_WIDTH - SCREEN_WIDTH + add hl, bc + pop bc + dec b + jr nz, .row + ld a, $0 + ldh [rVBK], a + ret + +LoadMapGraphics:: + call LoadMapTileset + call LoadTilesetGFX + xor a + ldh [hMapAnims], a + xor a + ldh [hTileAnimFrame], a + farcall RefreshSprites + call LoadFontsExtra + ret + +LoadMapPalettes:: + ld b, $9 + jp GetSGBLayout + +RefreshMapSprites:: + call ClearSprites + call ResetBGWindow + call GetMovementPermissions + farcall RefreshPlayerSprite + farcall CheckReplaceChrisSprite + ld hl, wPlayerSpriteSetupFlags + bit PLAYERSPRITESETUP_SKIP_RELOAD_GFX_F, [hl] + jr nz, .skip + ld hl, wVramState + set 0, [hl] + call SafeUpdateSprites +.skip + xor a + ld [wPlayerSpriteSetupFlags], a + ret + +CheckMovingOffEdgeOfMap:: + ld a, [wPlayerStepDirection] + cp STANDING + ret z + and a ; DOWN + jr z, .down + cp UP + jr z, .up + cp LEFT + jr z, .left + cp RIGHT + jr z, .right + and a + ret + +.down + ld a, [wPlayerStandingMapY] + sub 4 + ld b, a + ld a, [wMapHeight] + add a + cp b + jr z, .ok + and a + ret + +.up + ld a, [wPlayerStandingMapY] + sub 4 + cp -1 + jr z, .ok + and a + ret + +.left + ld a, [wPlayerStandingMapX] + sub 4 + cp -1 + jr z, .ok + and a + ret + +.right + ld a, [wPlayerStandingMapX] + sub 4 + ld b, a + ld a, [wMapWidth] + add a + cp b + jr z, .ok + and a + ret + +.ok + scf + ret + +EnterMapConnection:: +; Return carry if a connection has been entered. + ld a, [wPlayerStepDirection] + and a ; DOWN + jp z, .south + cp UP + jp z, .north + cp LEFT + jp z, .west + cp RIGHT + jp z, .east + ret + +.west + ld a, [wWestConnectedMapGroup] + ld [wMapGroup], a + ld a, [wWestConnectedMapNumber] + ld [wMapNumber], a + ld a, [wWestConnectionStripXOffset] + ld [wXCoord], a + ld a, [wWestConnectionStripYOffset] + ld hl, wYCoord + add [hl] + ld [hl], a + ld c, a + ld hl, wWestConnectionWindow + ld a, [hli] + ld h, [hl] + ld l, a + srl c + jr z, .skip_to_load + ld a, [wWestConnectedMapWidth] + add 6 + ld e, a + ld d, 0 + +.loop + add hl, de + dec c + jr nz, .loop + +.skip_to_load + ld a, l + ld [wOverworldMapAnchor], a + ld a, h + ld [wOverworldMapAnchor + 1], a + jp .done + +.east + ld a, [wEastConnectedMapGroup] + ld [wMapGroup], a + ld a, [wEastConnectedMapNumber] + ld [wMapNumber], a + ld a, [wEastConnectionStripXOffset] + ld [wXCoord], a + ld a, [wEastConnectionStripYOffset] + ld hl, wYCoord + add [hl] + ld [hl], a + ld c, a + ld hl, wEastConnectionWindow + ld a, [hli] + ld h, [hl] + ld l, a + srl c + jr z, .skip_to_load2 + ld a, [wEastConnectedMapWidth] + add 6 + ld e, a + ld d, 0 + +.loop2 + add hl, de + dec c + jr nz, .loop2 + +.skip_to_load2 + ld a, l + ld [wOverworldMapAnchor], a + ld a, h + ld [wOverworldMapAnchor + 1], a + jp .done + +.north + ld a, [wNorthConnectedMapGroup] + ld [wMapGroup], a + ld a, [wNorthConnectedMapNumber] + ld [wMapNumber], a + ld a, [wNorthConnectionStripYOffset] + ld [wYCoord], a + ld a, [wNorthConnectionStripXOffset] + ld hl, wXCoord + add [hl] + ld [hl], a + ld c, a + ld hl, wNorthConnectionWindow + ld a, [hli] + ld h, [hl] + ld l, a + ld b, 0 + srl c + add hl, bc + ld a, l + ld [wOverworldMapAnchor], a + ld a, h + ld [wOverworldMapAnchor + 1], a + jp .done + +.south + ld a, [wSouthConnectedMapGroup] + ld [wMapGroup], a + ld a, [wSouthConnectedMapNumber] + ld [wMapNumber], a + ld a, [wSouthConnectionStripYOffset] + ld [wYCoord], a + ld a, [wSouthConnectionStripXOffset] + ld hl, wXCoord + add [hl] + ld [hl], a + ld c, a + ld hl, wSouthConnectionWindow + ld a, [hli] + ld h, [hl] + ld l, a + ld b, 0 + srl c + add hl, bc + ld a, l + ld [wOverworldMapAnchor], a + ld a, h + ld [wOverworldMapAnchor + 1], a +.done + scf + ret + +CheckWarpTile:: + call GetDestinationWarpNumber + ret nc + + push bc + farcall CheckDirectionalWarp + pop bc + ret nc + + call CopyWarpData + scf + ret + +WarpCheck:: + call GetDestinationWarpNumber + ret nc + call CopyWarpData + ret + +GetDestinationWarpNumber:: + farcall CheckWarpCollision + ret nc + + ldh a, [hROMBank] + push af + + call SwitchToMapScriptsBank + call .GetDestinationWarpNumber + + pop de + ld a, d + rst Bankswitch + ret + +.GetDestinationWarpNumber: + ld a, [wPlayerStandingMapY] + sub 4 + ld e, a + ld a, [wPlayerStandingMapX] + sub 4 + ld d, a + ld a, [wCurMapWarpCount] + and a + ret z + + ld c, a + ld hl, wCurMapWarpsPointer + ld a, [hli] + ld h, [hl] + ld l, a +.loop + push hl + ld a, [hli] + cp e + jr nz, .next + ld a, [hli] + cp d + jr nz, .next + jr .found_warp + +.next + pop hl + ld a, WARP_EVENT_SIZE + add l + ld l, a + jr nc, .okay + inc h + +.okay + dec c + jr nz, .loop + xor a + ret + +.found_warp + pop hl + call .IncreaseHLTwice + ret nc ; never encountered + + ld a, [wCurMapWarpCount] + inc a + sub c + ld c, a + scf + ret + +.IncreaseHLTwice: + inc hl + inc hl + scf + ret + +CopyWarpData:: + ldh a, [hROMBank] + push af + + call SwitchToMapScriptsBank + call .CopyWarpData + + pop af + rst Bankswitch + scf + ret + +.CopyWarpData: + push bc + ld hl, wCurMapWarpsPointer + ld a, [hli] + ld h, [hl] + ld l, a + ld a, c + dec a + ld bc, WARP_EVENT_SIZE + call AddNTimes + ld bc, 2 ; warp number + add hl, bc + ld a, [hli] + cp -1 + jr nz, .skip + ld hl, wBackupWarpNumber + ld a, [hli] + +.skip + pop bc + ld [wNextWarp], a + ld a, [hli] + ld [wNextMapGroup], a + ld a, [hli] + ld [wNextMapNumber], a + + ld a, c + ld [wPrevWarp], a + ld a, [wMapGroup] + ld [wPrevMapGroup], a + ld a, [wMapNumber] + ld [wPrevMapNumber], a + scf + ret + +EnterMapWarp:: + call .SaveDigWarp + call .SetSpawn + ld a, [wNextWarp] + ld [wWarpNumber], a + ld a, [wNextMapGroup] + ld [wMapGroup], a + ld a, [wNextMapNumber] + ld [wMapNumber], a + ret + +.SaveDigWarp:: + call GetMapEnvironment + call CheckOutdoorMap + ret nz + ld a, [wNextMapGroup] + ld b, a + ld a, [wNextMapNumber] + ld c, a + call GetAnyMapEnvironment + call CheckIndoorMap + ret nz + +; MOUNT_MOON_SQUARE and TIN_TOWER_ROOF are outdoor maps within indoor maps. +; Dig and Escape Rope should not take you to them. + ld a, [wPrevMapGroup] + cp GROUP_MOUNT_MOON_SQUARE ; aka GROUP_TIN_TOWER_ROOF + jr nz, .not_mt_moon_or_tin_tower + ld a, [wPrevMapNumber] + cp MAP_MOUNT_MOON_SQUARE + ret z + cp MAP_TIN_TOWER_ROOF + ret z +.not_mt_moon_or_tin_tower + + ld a, [wPrevWarp] + ld [wDigWarpNumber], a + ld a, [wPrevMapGroup] + ld [wDigMapGroup], a + ld a, [wPrevMapNumber] + ld [wDigMapNumber], a + ret + +.SetSpawn: + call GetMapEnvironment + call CheckOutdoorMap + ret nz + ld a, [wNextMapGroup] + ld b, a + ld a, [wNextMapNumber] + ld c, a + call GetAnyMapEnvironment + call CheckIndoorMap + ret nz + ld a, [wNextMapGroup] + ld b, a + ld a, [wNextMapNumber] + ld c, a + +; Respawn in Pokémon Centers. + call GetAnyMapTileset + ld a, c + cp TILESET_POKECENTER + ret nz + +.pokecenter + ld a, [wPrevMapGroup] + ld [wLastSpawnMapGroup], a + ld a, [wPrevMapNumber] + ld [wLastSpawnMapNumber], a + ret diff --git a/home/window.asm b/home/window.asm index 9dda3479..41893a98 100644 --- a/home/window.asm +++ b/home/window.asm @@ -36,7 +36,7 @@ CloseText:: call SafeUpdateSprites ld a, $90 ldh [hWY], a - farcall _RefreshSprites + farcall _ClearSprites call ReplaceChrisSprite ld hl, wEnteredMapFromContinue res 7, [hl] @@ -62,10 +62,10 @@ OpenText:: _OpenAndCloseMenu_HDMATransferTilemapAndAttrmap:: ldh a, [hOAMUpdate] push af - ld a, 1 + ld a, $1 ldh [hOAMUpdate], a - call OpenAndCloseMenu_HDMATransferTilemapAndAttrmap + call CGBOnly_CopyTilemapAtOnce pop af ldh [hOAMUpdate], a @@ -22,6 +22,7 @@ hSeconds:: db ; ff9a hVBlankCounter:: db ; ff9d +; hDMATransfer? hFF9E:: db ; ff9e hROMBank:: db ; ff9f @@ -750,7 +750,7 @@ TitleScreenGFX3:: dr $e41e0, $e4260 TitleScreenGFX4:: dr $e4260, $e4608 -OptionsMenu:: +_OptionsMenu:: dr $e4608, $e49a8 ELIF DEF(_SILVER) @@ -758,7 +758,7 @@ TitleScreenGFX3:: dr $e41e0, $e4220 TitleScreenGFX4:: dr $e4220, $e4450 -OptionsMenu:: +_OptionsMenu:: dr $e4450, $e47f0 ENDC @@ -6,6 +6,7 @@ vTiles2:: ds $800 vBGMap0:: ds $400 vBGMap1:: ds $400 + SECTION "VRAM1", VRAM vTiles3:: ds $800 |