summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engine/events/mom.asm2
-rwxr-xr-xengine/events/overworld.asm2
-rwxr-xr-xengine/gfx/cgb_layouts.asm2
-rwxr-xr-xengine/gfx/color.asm2
-rw-r--r--engine/gfx/load_pics.asm1
-rwxr-xr-xengine/gfx/sgb_layouts.asm4
-rw-r--r--engine/menus/intro_menu.asm2
-rw-r--r--engine/menus/main_menu.asm6
-rw-r--r--engine/menus/menu.asm3
-rw-r--r--engine/menus/save.asm4
-rw-r--r--engine/menus/start_menu.asm4
-rw-r--r--engine/overworld/overworld.asm4
-rwxr-xr-xengine/overworld/player_object.asm2
-rw-r--r--engine/pokemon/breeding.asm8
-rw-r--r--home/audio.asm1
-rw-r--r--home/copy.asm1
-rw-r--r--home/init.asm4
-rw-r--r--home/map.asm513
-rw-r--r--home/palettes.asm14
-rwxr-xr-xhome/pokemon.asm1
-rw-r--r--home/serial.asm12
-rw-r--r--home/text.asm5
-rwxr-xr-xhome/tilemap.asm4
-rw-r--r--home/vblank.asm2
-rw-r--r--home/warp_connection.asm506
-rw-r--r--home/window.asm6
-rwxr-xr-xhram.asm1
-rw-r--r--main.asm4
-rw-r--r--vram.asm1
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
diff --git a/hram.asm b/hram.asm
index 61f43bf0..8e28fc11 100755
--- a/hram.asm
+++ b/hram.asm
@@ -22,6 +22,7 @@ hSeconds:: db ; ff9a
hVBlankCounter:: db ; ff9d
+; hDMATransfer?
hFF9E:: db ; ff9e
hROMBank:: db ; ff9f
diff --git a/main.asm b/main.asm
index 65b0ef5f..83a77985 100644
--- a/main.asm
+++ b/main.asm
@@ -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
diff --git a/vram.asm b/vram.asm
index f16ba37c..aff170ca 100644
--- a/vram.asm
+++ b/vram.asm
@@ -6,6 +6,7 @@ vTiles2:: ds $800
vBGMap0:: ds $400
vBGMap1:: ds $400
+
SECTION "VRAM1", VRAM
vTiles3:: ds $800