Merge remote-tracking branch 'YamaArashi/master'

Conflicts:
	constants/misc_constants.asm
	engine/battle/core.asm
	engine/menu/pokedex.asm
	engine/town_map.asm
	home.asm
	hram.asm
This commit is contained in:
yenatch 2014-09-20 00:57:27 -04:00
commit dff0cdeb5a
224 changed files with 15213 additions and 4665 deletions

View file

@ -1,4 +1,4 @@
Func_2307:: ; 2307 (0:2307)
PlayDefaultMusic:: ; 2307 (0:2307)
call WaitForSoundToFinish
xor a
ld c, a
@ -17,7 +17,7 @@ Func_2312:: ; 2312 (0:2312)
ld c, $8
ld d, c
asm_2324:: ; 2324 (0:2324)
ld a, [wd700]
ld a, [wWalkBikeSurfState]
and a
jr z, .asm_2343
cp $2

View file

@ -5,11 +5,11 @@ FarCopyData::
push af
ld a, [wBuffer]
ld [H_LOADEDROMBANK], a
ld [MBC3RomBank], a
ld [MBC1RomBank], a
call CopyData
pop af
ld [H_LOADEDROMBANK], a
ld [MBC3RomBank], a
ld [MBC1RomBank], a
ret
CopyData::

View file

@ -6,11 +6,11 @@ FarCopyData2::
push af
ld a,[$ff8b]
ld [H_LOADEDROMBANK],a
ld [MBC3RomBank],a
ld [MBC1RomBank],a
call CopyData
pop af
ld [H_LOADEDROMBANK],a
ld [MBC3RomBank],a
ld [MBC1RomBank],a
ret
FarCopyData3::
@ -20,7 +20,7 @@ FarCopyData3::
push af
ld a,[$ff8b]
ld [H_LOADEDROMBANK],a
ld [MBC3RomBank],a
ld [MBC1RomBank],a
push hl
push de
push de
@ -32,7 +32,7 @@ FarCopyData3::
pop hl
pop af
ld [H_LOADEDROMBANK],a
ld [MBC3RomBank],a
ld [MBC1RomBank],a
ret
FarCopyDataDouble::
@ -43,7 +43,7 @@ FarCopyDataDouble::
push af
ld a,[$ff8b]
ld [H_LOADEDROMBANK],a
ld [MBC3RomBank],a
ld [MBC1RomBank],a
.loop
ld a,[hli]
ld [de],a
@ -56,7 +56,7 @@ FarCopyDataDouble::
jr nz,.loop
pop af
ld [H_LOADEDROMBANK],a
ld [MBC3RomBank],a
ld [MBC1RomBank],a
ret
CopyVideoData::
@ -74,7 +74,7 @@ CopyVideoData::
ld a, b
ld [H_LOADEDROMBANK], a
ld [MBC3RomBank], a
ld [MBC1RomBank], a
ld a, e
ld [H_VBCOPYSRC], a
@ -96,7 +96,7 @@ CopyVideoData::
call DelayFrame
ld a, [$ff8b]
ld [H_LOADEDROMBANK], a
ld [MBC3RomBank], a
ld [MBC1RomBank], a
pop af
ld [H_AUTOBGTRANSFERENABLED], a
ret
@ -123,7 +123,7 @@ CopyVideoDataDouble::
ld a, b
ld [H_LOADEDROMBANK], a
ld [MBC3RomBank], a
ld [MBC1RomBank], a
ld a, e
ld [H_VBCOPYDOUBLESRC], a
@ -145,7 +145,7 @@ CopyVideoDataDouble::
call DelayFrame
ld a, [$ff8b]
ld [H_LOADEDROMBANK], a
ld [MBC3RomBank], a
ld [MBC1RomBank], a
pop af
ld [H_AUTOBGTRANSFERENABLED], a
ret

View file

@ -1,7 +1,7 @@
; These routines manage gradual fading
; (e.g., entering a doorway)
LoadGBPal::
ld a, [wd35d] ;tells if cur.map is dark (requires HM5_FLASH?)
ld a, [wMapPalOffset] ;tells if cur.map is dark (requires HM5_FLASH?)
ld b, a
ld hl, FadePal4
ld a, l
@ -18,16 +18,16 @@ LoadGBPal::
ld [rOBP1], a
ret
GBFadeOut1::
GBFadeInFromBlack::
ld hl, FadePal1
ld b, 4
jr GBFadeOutCommon
jr GBFadeIncCommon
GBFadeOut2::
GBFadeOutToWhite::
ld hl, FadePal6
ld b, 3
GBFadeOutCommon::
GBFadeIncCommon:
ld a, [hli]
ld [rBGP], a
ld a, [hli]
@ -37,19 +37,19 @@ GBFadeOutCommon::
ld c, 8
call DelayFrames
dec b
jr nz, GBFadeOutCommon
jr nz, GBFadeIncCommon
ret
GBFadeIn1::
GBFadeOutToBlack::
ld hl, FadePal4 + 2
ld b, 4
jr GBFadeInCommon
jr GBFadeDecCommon
GBFadeIn2::
GBFadeInFromWhite::
ld hl, FadePal7 + 2
ld b, 3
GBFadeInCommon::
GBFadeDecCommon:
ld a, [hld]
ld [rOBP1], a
ld a, [hld]
@ -59,7 +59,7 @@ GBFadeInCommon::
ld c, 8
call DelayFrames
dec b
jr nz, GBFadeInCommon
jr nz, GBFadeDecCommon
ret
FadePal1:: db %11111111, %11111111, %11111111

View file

@ -25,7 +25,7 @@ rLCDC_DEFAULT EQU %11100011
ld [rIE], a
ld [$ff43], a
ld [$ff42], a
ld [$ff01], a
ld [rSB], a
ld [$ff02], a
ld [$ff4b], a
ld [$ff4a], a
@ -61,11 +61,11 @@ rLCDC_DEFAULT EQU %11100011
ld a, Bank(WriteDMACodeToHRAM)
ld [H_LOADEDROMBANK], a
ld [MBC3RomBank], a
ld [MBC1RomBank], a
call WriteDMACodeToHRAM
xor a
ld [$ffd7], a
ld [hTilesetType], a
ld [$ff41], a
ld [$ffae], a
ld [$ffaf], a
@ -74,7 +74,7 @@ rLCDC_DEFAULT EQU %11100011
ld [rIE], a
ld a, 144 ; move the window off-screen
ld [$ffb0], a
ld [hVBlankWY], a
ld [rWY], a
ld a, 7
ld [rWX], a
@ -105,7 +105,7 @@ rLCDC_DEFAULT EQU %11100011
xor a
ld [$ffbc], a
dec a
ld [wcfcb], a
ld [wUpdateSpritesEnabled], a
predef PlayIntro

View file

@ -10,26 +10,26 @@ EnterMap::
ld a, $ff
ld [wJoyIgnore], a
call LoadMapData
callba Func_c335 ; initialize map variables
callba ClearVariablesAfterLoadingMapData
ld hl, wd72c
bit 0, [hl]
jr z, .doNotCountSteps
ld a, 3
ld [wd13c], a ; some kind of step counter (counts up to 3 steps?)
.doNotCountSteps
bit 0, [hl] ; has the player already made 3 steps since the last battle?
jr z, .skipGivingThreeStepsOfNoRandomBattles
ld a, 3 ; minimum number of steps between battles
ld [wNumberOfNoRandomBattleStepsLeft], a
.skipGivingThreeStepsOfNoRandomBattles
ld hl, wd72e
bit 5, [hl] ; did a battle happen immediately before this?
res 5, [hl] ; unset the "battle just happened" flag
call z, Func_12e7
call z, ResetUsingStrengthOutOfBattleBit
call nz, MapEntryAfterBattle
ld hl, wd732
ld a, [hl]
and 1 << 4 | 1 << 3
jr z, .didNotFlyOrTeleportIn
and 1 << 4 | 1 << 3 ; fly warp or dungeon warp
jr z, .didNotEnterUsingFlyWarpOrDungeonWarp
res 3, [hl]
callba Func_70510 ; display fly/teleport in graphical effect
callba EnterMapAnim
call UpdateSprites
.didNotFlyOrTeleportIn
.didNotEnterUsingFlyWarpOrDungeonWarp
callba CheckForceBikeOrSurf ; handle currents in SF islands and forced bike riding in cycling road
ld hl, wd72d
res 5, [hl]
@ -53,7 +53,7 @@ OverworldLoopLessDelay::
jp nz,.moveAhead ; if the player sprite has not yet completed the walking animation
call JoypadOverworld ; get joypad state (which is possibly simulated)
callba SafariZoneCheck
ld a,[wda46]
ld a,[wSafariZoneGameOver]
and a
jp nz,WarpFound2
ld hl,wd72d
@ -61,8 +61,8 @@ OverworldLoopLessDelay::
res 3,[hl]
jp nz,WarpFound2
ld a,[wd732]
and a,$18
jp nz,HandleFlyOrTeleportAway
and a,1 << 4 | 1 << 3 ; fly warp or dungeon warp
jp nz,HandleFlyWarpOrDungeonWarp
ld a,[W_CUROPPONENT]
and a
jp nz,.newBattle
@ -78,7 +78,7 @@ OverworldLoopLessDelay::
jr z,.startButtonNotPressed
; if START is pressed
xor a
ld [$ff8c],a ; the $2920 ID for the start menu is 0
ld [hSpriteIndexOrTextID],a ; start menu text ID
jp .displayDialogue
.startButtonNotPressed
bit 0,a ; A button
@ -87,19 +87,19 @@ OverworldLoopLessDelay::
ld a,[wd730]
bit 2,a
jp nz,.noDirectionButtonsPressed
call Func_30fd
call IsPlayerCharacterBeingControlledByGame
jr nz,.checkForOpponent
call Func_3eb5 ; check for hidden items, PC's, etc.
call CheckForHiddenObjectOrBookshelfOrCardKeyDoor
ld a,[$ffeb]
and a
jp z,OverworldLoop
call IsSpriteOrSignInFrontOfPlayer ; check for sign or sprite in front of the player
ld a,[$ff8c] ; $2920 ID for NPC/sign text, if any
jp z,OverworldLoop ; jump if a hidden object or bookshelf was found, but not if a card key door was found
call IsSpriteOrSignInFrontOfPlayer
ld a,[hSpriteIndexOrTextID]
and a
jp z,OverworldLoop
.displayDialogue
predef Func_c586 ; check what is in front of the player
call UpdateSprites ; move sprites
predef GetTileAndCoordsInFrontOfPlayer
call UpdateSprites
ld a,[wFlags_0xcd60]
bit 2,a
jr nz,.checkForOpponent
@ -117,8 +117,8 @@ OverworldLoopLessDelay::
jr z,.changeMap
predef LoadSAV
ld a,[W_CURMAP]
ld [wd71a],a
call Func_62ce
ld [wDestinationMap],a
call SpecialWarpIn
ld a,[W_CURMAP]
call SwitchToMapRomBank ; switch to the ROM bank of the current map
ld hl,W_CURMAPTILESET
@ -133,7 +133,7 @@ OverworldLoopLessDelay::
.noDirectionButtonsPressed
ld hl,wFlags_0xcd60
res 2,[hl]
call UpdateSprites ; move sprites
call UpdateSprites
ld a,$01
ld [wcc4b],a
ld a,[wd528] ; the direction that was pressed last time
@ -225,18 +225,20 @@ OverworldLoopLessDelay::
.noDirectionChange
ld a,[wd52a] ; current direction
ld [wd528],a ; save direction
call UpdateSprites ; move sprites
ld a,[wd700]
call UpdateSprites
ld a,[wWalkBikeSurfState]
cp a,$02 ; surfing
jr z,.surfing
; not surfing
call CollisionCheckOnLand
jr nc,.noCollision
; collision occurred
push hl
ld hl,wd736
bit 2,[hl]
bit 2,[hl] ; standing on warp flag
pop hl
jp z,OverworldLoop
; collision occurred while standing on a warp
push hl
call ExtraWarpCheck ; sets carry if there is a potential to warp
pop hl
@ -259,7 +261,7 @@ OverworldLoopLessDelay::
.moveAhead2
ld hl,wFlags_0xcd60
res 2,[hl]
ld a,[wd700]
ld a,[wWalkBikeSurfState]
dec a ; riding a bike?
jr nz,.normalPlayerSpriteAdvancement
ld a,[wd736]
@ -276,36 +278,36 @@ OverworldLoopLessDelay::
bit 7,a
jr nz,.doneStepCounting ; if button presses are being simulated, don't count steps
; step counting
ld hl,wd13b ; step counter
ld hl,wStepCounter
dec [hl]
ld a,[wd72c]
bit 0,a
jr z,.doneStepCounting
ld hl,wd13c
ld hl,wNumberOfNoRandomBattleStepsLeft
dec [hl]
jr nz,.doneStepCounting
ld hl,wd72c
res 0,[hl]
res 0,[hl] ; indicate that the player has stepped thrice since the last battle
.doneStepCounting
ld a,[wd790]
bit 7,a ; in the safari zone?
jr z,.notSafariZone
callba SafariZoneCheckSteps
ld a,[wda46]
ld a,[wSafariZoneGameOver]
and a
jp nz,WarpFound2
.notSafariZone
ld a,[W_ISINBATTLE]
and a
jp nz,CheckWarpsNoCollision
predef Func_c69c ; decrement HP of poisoned pokemon
predef ApplyOutOfBattlePoisonDamage ; also increment daycare mon exp
ld a,[wd12d]
and a
jp nz,HandleBlackOut ; if all pokemon fainted
.newBattle
call NewBattle
ld hl,wd736
res 2,[hl]
res 2,[hl] ; standing on warp flag
jp nc,CheckWarpsNoCollision ; check for warps if there was no battle
.battleOccurred
ld hl,wd72d
@ -316,7 +318,7 @@ OverworldLoopLessDelay::
set 5,[hl]
set 6,[hl]
xor a
ld [hJoyHeld],a ; clear joypad state
ld [hJoyHeld],a
ld a,[W_CURMAP]
cp a,CINNABAR_GYM
jr nz,.notCinnabarGym
@ -327,8 +329,8 @@ OverworldLoopLessDelay::
set 5,[hl]
ld a,[W_CURMAP]
cp a,OAKS_LAB
jp z,.noFaintCheck
callab AnyPartyAlive ; check if all the player's pokemon fainted
jp z,.noFaintCheck ; no blacking out if the player lost to the rival in Oak's lab
callab AnyPartyAlive
ld a,d
and a
jr z,.allPokemonFainted
@ -348,45 +350,45 @@ NewBattle:: ; 0683 (0:0683)
ld a,[wd72d]
bit 4,a
jr nz,.noBattle
call Func_30fd
jr nz,.noBattle
call IsPlayerCharacterBeingControlledByGame
jr nz,.noBattle ; no battle if the player character is under the game's control
ld a,[wd72e]
bit 4,a
jr nz,.noBattle
ld b, BANK(InitBattle)
ld hl, InitBattle
jp Bankswitch ; determines if a battle will occur and runs the battle if so
jp Bankswitch
.noBattle
and a
ret
; function to make bikes twice as fast as walking
BikeSpeedup:: ; 06a0 (0:06a0)
ld a,[wcc57]
ld a,[wNPCMovementScriptPointerTableNum]
and a
ret nz
ld a,[W_CURMAP]
cp a,ROUTE_17 ; Cycling Road
jr nz,.goFaster
ld a,[hJoyHeld] ; current joypad state
and a,%01110000 ; bit mask for up, left, right buttons
ld a,[hJoyHeld]
and a,D_UP | D_LEFT | D_RIGHT
ret nz
.goFaster
jp AdvancePlayerSprite
; check if the player has stepped onto a warp after having not collided
CheckWarpsNoCollision:: ; 06b4 (0:06b4)
ld a,[wd3ae] ; number of warps
ld a,[wNumberOfWarps]
and a
jp z,CheckMapConnections
ld a,[wd3ae] ; number of warps
ld b,$00
ld a,[wNumberOfWarps]
ld b,0
ld c,a
ld a,[W_YCOORD]
ld d,a
ld a,[W_XCOORD]
ld e,a
ld hl,wd3af ; start of warp entries
ld hl,wWarpEntries
CheckWarpsNoCollisionLoop:: ; 06cc (0:06cc)
ld a,[hli] ; check if the warp's Y position matches
cp d
@ -398,14 +400,14 @@ CheckWarpsNoCollisionLoop:: ; 06cc (0:06cc)
push hl
push bc
ld hl,wd736
set 2,[hl]
callba Func_c49d ; check if the player sprite is standing on a "door" tile
set 2,[hl] ; standing on warp flag
callba IsPlayerStandingOnDoorTileOrWarpTile
pop bc
pop hl
jr c,WarpFound1 ; if it is, go to 0735
jr c,WarpFound1 ; jump if standing on door or warp
push hl
push bc
call ExtraWarpCheck ; sets carry if the warp is confirmed
call ExtraWarpCheck
pop bc
pop hl
jr nc,CheckWarpsNoCollisionRetry2
@ -418,16 +420,16 @@ CheckWarpsNoCollisionLoop:: ; 06cc (0:06cc)
call Joypad
pop bc
pop de
ld a,[hJoyHeld] ; current joypad state
and a,%11110000 ; bit mask for directional buttons
ld a,[hJoyHeld]
and a,D_DOWN | D_UP | D_LEFT | D_RIGHT
jr z,CheckWarpsNoCollisionRetry2 ; if directional buttons aren't being pressed, do not pass through the warp
jr WarpFound1
; check if the player has stepped onto a warp after having collided
CheckWarpsCollision:: ; 0706 (0:0706)
ld a,[wd3ae] ; number of warps
ld a,[wNumberOfWarps]
ld c,a
ld hl,wd3af ; start of warp entries
ld hl,wWarpEntries
.loop
ld a,[hli] ; Y coordinate of warp
ld b,a
@ -440,7 +442,7 @@ CheckWarpsCollision:: ; 0706 (0:0706)
cp b
jr nz,.retry2
ld a,[hli]
ld [wd42f],a ; save target warp ID
ld [wDestinationWarpID],a
ld a,[hl]
ld [$ff8b],a ; save target map
jr WarpFound2
@ -462,12 +464,12 @@ CheckWarpsNoCollisionRetry2:: ; 0730 (0:0730)
WarpFound1:: ; 0735 (0:0735)
ld a,[hli]
ld [wd42f],a ; save target warp ID
ld [wDestinationWarpID],a
ld a,[hli]
ld [$ff8b],a ; save target map
WarpFound2:: ; 073c (0:073c)
ld a,[wd3ae] ; number of warps
ld a,[wNumberOfWarps]
sub c
ld [wd73b],a ; save ID of used warp
ld a,[W_CURMAP]
@ -484,8 +486,8 @@ WarpFound2:: ; 073c (0:073c)
cp a,ROCK_TUNNEL_1
jr nz,.notRockTunnel
ld a,$06
ld [wd35d],a
call GBFadeIn1
ld [wMapPalOffset],a
call GBFadeOutToBlack
.notRockTunnel
call PlayMapChangeSound
jr .done
@ -496,16 +498,16 @@ WarpFound2:: ; 073c (0:073c)
jr z,.goBackOutside
; if not going back to the previous map
ld [W_CURMAP],a ; current map number
callba Func_70787 ; check if the warp was a Silph Co. teleporter
callba IsPlayerStandingOnWarpPadOrHole
ld a,[wcd5b]
dec a
jr nz,.notTeleporter
; if it's a Silph Co. teleporter
dec a ; is the player on a warp pad?
jr nz,.notWarpPad
; if the player is on a warp pad
ld hl,wd732
set 3,[hl]
call LeaveMapAnim
jr .skipMapChangeSound
.notTeleporter
.notWarpPad
call PlayMapChangeSound
.skipMapChangeSound
ld hl,wd736
@ -517,11 +519,11 @@ WarpFound2:: ; 073c (0:073c)
ld [W_CURMAP],a
call PlayMapChangeSound
xor a
ld [wd35d],a
ld [wMapPalOffset],a
.done
ld hl,wd736
set 0,[hl]
call Func_12da
set 0,[hl] ; have the player's sprite step out from the door (if there is one)
call IgnoreInputForHalfSecond
jp EnterMap
ContinueCheckWarpsNoCollisionLoop:: ; 07b5 (0:07b5)
@ -562,9 +564,9 @@ CheckMapConnections:: ; 07ba (0:07ba)
jr nz,.pointerAdjustmentLoop1
.savePointer1
ld a,l
ld [wd35f],a ; pointer to upper left corner of current tile block map section
ld [wCurrentTileBlockMapViewPointer],a ; pointer to upper left corner of current tile block map section
ld a,h
ld [wd360],a
ld [wCurrentTileBlockMapViewPointer + 1],a
jp .loadNewMap
.checkEastMap
ld b,a
@ -598,9 +600,9 @@ CheckMapConnections:: ; 07ba (0:07ba)
jr nz,.pointerAdjustmentLoop2
.savePointer2
ld a,l
ld [wd35f],a ; pointer to upper left corner of current tile block map section
ld [wCurrentTileBlockMapViewPointer],a ; pointer to upper left corner of current tile block map section
ld a,h
ld [wd360],a
ld [wCurrentTileBlockMapViewPointer + 1],a
jp .loadNewMap
.checkNorthMap
ld a,[W_YCOORD]
@ -624,9 +626,9 @@ CheckMapConnections:: ; 07ba (0:07ba)
srl c
add hl,bc
ld a,l
ld [wd35f],a ; pointer to upper left corner of current tile block map section
ld [wCurrentTileBlockMapViewPointer],a ; pointer to upper left corner of current tile block map section
ld a,h
ld [wd360],a
ld [wCurrentTileBlockMapViewPointer + 1],a
jp .loadNewMap
.checkSouthMap
ld b,a
@ -651,9 +653,9 @@ CheckMapConnections:: ; 07ba (0:07ba)
srl c
add hl,bc
ld a,l
ld [wd35f],a ; pointer to upper left corner of current tile block map section
ld [wCurrentTileBlockMapViewPointer],a ; pointer to upper left corner of current tile block map section
ld a,h
ld [wd360],a
ld [wCurrentTileBlockMapViewPointer + 1],a
.loadNewMap ; load the connected map that was entered
call LoadMapHeader
call Func_2312 ; music
@ -678,10 +680,10 @@ PlayMapChangeSound:: ; 08c9 (0:08c9)
ld a,(SFX_02_5c - SFX_Headers_02) / 3
.playSound
call PlaySound
ld a,[wd35d]
ld a,[wMapPalOffset]
and a
ret nz
jp GBFadeIn1
jp GBFadeOutToBlack
CheckIfInOutsideMap:: ; 08e1 (0:08e1)
; If the player is in an outside map (a town or route), set the z flag
@ -719,37 +721,37 @@ ExtraWarpCheck:: ; 08e9 (0:08e9)
cp PLATEAU ; Indigo Plateau tileset
jr z, .useFunction2
.useFunction1
ld hl, Func_c3ff
ld hl, IsPlayerFacingEdgeOfMap
jr .doBankswitch
.useFunction2
ld hl, Func_c44e
ld hl, IsWarpTileInFrontOfPlayer
.doBankswitch
ld b, BANK(Func_c44e)
ld b, BANK(IsWarpTileInFrontOfPlayer)
jp Bankswitch
MapEntryAfterBattle:: ; 091f (0:091f)
callba Func_c35f ; function that appears to disable warp testing after collisions if the player is standing on a warp
ld a,[wd35d]
callba IsPlayerStandingOnWarp ; for enabling warp testing after collisions
ld a,[wMapPalOffset]
and a
jp z,GBFadeIn2
jp z,GBFadeInFromWhite
jp LoadGBPal
HandleBlackOut::
; For when all the player's pokemon faint.
; Does not print the "blacked out" message.
call GBFadeIn1
call GBFadeOutToBlack
ld a, $08
call StopMusic
ld hl, wd72e
res 5, [hl]
ld a, Bank(Func_40b0) ; also Bank(Func_62ce) and Bank(Func_5d5f)
ld a, Bank(ResetStatusAndHalveMoneyOnBlackout) ; also Bank(SpecialWarpIn) and Bank(SpecialEnterMap)
ld [H_LOADEDROMBANK], a
ld [MBC3RomBank], a
call Func_40b0
call Func_62ce
ld [MBC1RomBank], a
call ResetStatusAndHalveMoneyOnBlackout
call SpecialWarpIn
call Func_2312
jp Func_5d5f
jp SpecialEnterMap
StopMusic::
ld [wMusicHeaderPointer], a
@ -762,23 +764,23 @@ StopMusic::
jr nz, .wait
jp StopAllSounds
HandleFlyOrTeleportAway::
HandleFlyWarpOrDungeonWarp::
call UpdateSprites
call Delay3
xor a
ld [wcf0b], a
ld [wd700], a
ld [wBattleResult], a
ld [wWalkBikeSurfState], a
ld [W_ISINBATTLE], a
ld [wd35d], a
ld [wMapPalOffset], a
ld hl, wd732
set 2, [hl]
res 5, [hl]
set 2, [hl] ; fly warp or dungeon warp
res 5, [hl] ; forced to ride bike
call LeaveMapAnim
ld a, Bank(Func_62ce)
ld a, Bank(SpecialWarpIn)
ld [H_LOADEDROMBANK], a
ld [$2000], a
call Func_62ce
jp Func_5d5f
call SpecialWarpIn
jp SpecialEnterMap
LeaveMapAnim::
ld b, BANK(_LeaveMapAnim)
@ -792,11 +794,11 @@ LoadPlayerSpriteGraphics::
; 1: biking
; 2: surfing
ld a, [wd700]
ld a, [wWalkBikeSurfState]
dec a
jr z, .ridingBike
ld a, [$ffd7]
ld a, [hTilesetType]
and a
jr nz, .determineGraphics
jr .startWalking
@ -809,12 +811,12 @@ LoadPlayerSpriteGraphics::
.startWalking
xor a
ld [wd700], a
ld [wd11a], a
ld [wWalkBikeSurfState], a
ld [wWalkBikeSurfStateCopy], a
jp LoadWalkingPlayerSpriteGraphics
.determineGraphics
ld a, [wd700]
ld a, [wWalkBikeSurfState]
and a
jp z, LoadWalkingPlayerSpriteGraphics
dec a
@ -1056,16 +1058,16 @@ LoadEastWestConnectionsTileMap:: ; 0b02 (0:0b02)
ret
; function to check if there is a sign or sprite in front of the player
; if so, it is stored in [$FF8C]
; if not, [$FF8C] is set to 0
; if so, it is stored in [hSpriteIndexOrTextID]
; if not, [hSpriteIndexOrTextID] is set to 0
IsSpriteOrSignInFrontOfPlayer:: ; 0b23 (0:0b23)
xor a
ld [$ff8c],a
ld [hSpriteIndexOrTextID],a
ld a,[wd4b0] ; number of signs in the map
and a
jr z,.extendRangeOverCounter
; if there are signs
predef Func_c586 ; get the coordinates in front of the player in de
predef GetTileAndCoordsInFrontOfPlayer ; get the coordinates in front of the player in de
ld hl,wd4b1 ; start of sign coordinates
ld a,[wd4b0] ; number of signs in the map
ld b,a
@ -1090,7 +1092,7 @@ IsSpriteOrSignInFrontOfPlayer:: ; 0b23 (0:0b23)
dec c
add hl,bc
ld a,[hl]
ld [$ff8c],a ; store sign text ID
ld [hSpriteIndexOrTextID],a ; store sign text ID
pop bc
pop hl
ret
@ -1099,7 +1101,7 @@ IsSpriteOrSignInFrontOfPlayer:: ; 0b23 (0:0b23)
jr nz,.signLoop
; check if the player is front of a counter in a pokemon center, pokemart, etc. and if so, extend the range at which he can talk to the NPC
.extendRangeOverCounter
predef Func_c586 ; get the tile in front of the player in c
predef GetTileAndCoordsInFrontOfPlayer ; get the tile in front of the player in c
ld hl,W_TILESETTALKINGOVERTILES ; list of tiles that extend talking range (counter tiles)
ld b,$03
ld d,$20 ; talking range in pixels (long range)
@ -1111,7 +1113,7 @@ IsSpriteOrSignInFrontOfPlayer:: ; 0b23 (0:0b23)
jr nz,.counterTilesLoop
; part of the above function, but sometimes its called on its own, when signs are irrelevant
; the caller must zero [$FF8C]
; the caller must zero [hSpriteIndexOrTextID]
IsSpriteInFrontOfPlayer:: ; 0b6b (0:0b6b)
ld d,$10 ; talking range in pixels (normal range)
IsSpriteInFrontOfPlayer2:: ; 0b6d (0:0b6d)
@ -1193,7 +1195,7 @@ IsSpriteInFrontOfPlayer2:: ; 0b6d (0:0b6d)
ld l,a
set 7,[hl]
ld a,e
ld [$ff8c],a ; store sprite ID
ld [hSpriteIndexOrTextID],a
ret
; function to check if the player will jump down a ledge and check if the tile ahead is passable (when not surfing)
@ -1203,18 +1205,18 @@ CollisionCheckOnLand:: ; 0bd1 (0:0bd1)
bit 6,a ; is the player jumping?
jr nz,.noCollision
; if not jumping a ledge
ld a,[wcd38]
ld a,[wSimulatedJoypadStatesIndex]
and a
jr nz,.noCollision
jr nz,.noCollision ; no collisions when the player's movements are being controlled by the game
ld a,[wd52a] ; the direction that the player is trying to go in
ld d,a
ld a,[wSpriteStateData1 + 12] ; the player sprite's collision data (bit field) (set in the sprite movement code)
and d ; check if a sprite is in the direction the player is trying to go
jr nz,.collision
xor a
ld [$ff8c],a
ld [hSpriteIndexOrTextID],a
call IsSpriteInFrontOfPlayer ; check for sprite collisions again? when does the above check fail to detect a sprite collision?
ld a,[$ff8c]
ld a,[hSpriteIndexOrTextID]
and a ; was there a sprite collision?
jr nz,.collision
; if no sprite collision
@ -1239,8 +1241,8 @@ CollisionCheckOnLand:: ; 0bd1 (0:0bd1)
; function that checks if the tile in front of the player is passable
; clears carry if it is, sets carry if not
CheckTilePassable:: ; 0c10 (0:0c10)
predef Func_c586 ; get tile in front of player
ld a,[wcfc6] ; tile in front of player
predef GetTileAndCoordsInFrontOfPlayer ; get tile in front of player
ld a,[wTileInFrontOfPlayer] ; tile in front of player
ld c,a
ld hl,W_TILESETCOLLISIONPTR ; pointer to list of passable tiles
ld a,[hli]
@ -1263,7 +1265,7 @@ CheckTilePassable:: ; 0c10 (0:0c10)
; sets carry if there is a collision and unsets carry if not
CheckForJumpingAndTilePairCollisions:: ; 0c2a (0:0c2a)
push hl
predef Func_c586 ; get the tile in front of the player
predef GetTileAndCoordsInFrontOfPlayer ; get the tile in front of the player
push de
push bc
callba HandleLedges ; check if the player is trying to jump a ledge
@ -1276,12 +1278,12 @@ CheckForJumpingAndTilePairCollisions:: ; 0c2a (0:0c2a)
ret nz
; if not jumping
Func_c44:: ; 0c44 (0:0c44)
CheckForTilePairCollisions2:: ; 0c44 (0:0c44)
aCoord 8, 9 ; tile the player is on
ld [wcf0e],a
CheckForTilePairCollisions:: ; 0c4a (0:0c4a)
ld a,[wcfc6] ; tile in front of the player
ld a,[wTileInFrontOfPlayer]
ld c,a
.tilePairCollisionLoop
ld a,[W_CURMAPTILESET] ; tileset number
@ -1357,9 +1359,9 @@ LoadCurrentMapView:: ; 0caa (0:0caa)
ld a,[W_TILESETBANK] ; tile data ROM bank
ld [H_LOADEDROMBANK],a
ld [$2000],a ; switch to ROM bank that contains tile data
ld a,[wd35f] ; address of upper left corner of current map view
ld a,[wCurrentTileBlockMapViewPointer] ; address of upper left corner of current map view
ld e,a
ld a,[wd360]
ld a,[wCurrentTileBlockMapViewPointer + 1]
ld d,a
ld hl,wTileMapBackup
ld b,$05
@ -1465,7 +1467,7 @@ AdvancePlayerSprite:: ; 0d27 (0:0d27)
cp a,$01
jr nz,.checkIfMovingWest
; moving east
ld a,[wd526]
ld a,[wMapViewVRAMPointer]
ld e,a
and a,$e0
ld d,a
@ -1473,13 +1475,13 @@ AdvancePlayerSprite:: ; 0d27 (0:0d27)
add a,$02
and a,$1f
or d
ld [wd526],a
ld [wMapViewVRAMPointer],a
jr .adjustXCoordWithinBlock
.checkIfMovingWest
cp a,$ff
jr nz,.checkIfMovingSouth
; moving west
ld a,[wd526]
ld a,[wMapViewVRAMPointer]
ld e,a
and a,$e0
ld d,a
@ -1487,36 +1489,36 @@ AdvancePlayerSprite:: ; 0d27 (0:0d27)
sub a,$02
and a,$1f
or d
ld [wd526],a
ld [wMapViewVRAMPointer],a
jr .adjustXCoordWithinBlock
.checkIfMovingSouth
ld a,b
cp a,$01
jr nz,.checkIfMovingNorth
; moving south
ld a,[wd526]
ld a,[wMapViewVRAMPointer]
add a,$40
ld [wd526],a
ld [wMapViewVRAMPointer],a
jr nc,.adjustXCoordWithinBlock
ld a,[wd527]
ld a,[wMapViewVRAMPointer + 1]
inc a
and a,$03
or a,$98
ld [wd527],a
ld [wMapViewVRAMPointer + 1],a
jr .adjustXCoordWithinBlock
.checkIfMovingNorth
cp a,$ff
jr nz,.adjustXCoordWithinBlock
; moving north
ld a,[wd526]
ld a,[wMapViewVRAMPointer]
sub a,$40
ld [wd526],a
ld [wMapViewVRAMPointer],a
jr nc,.adjustXCoordWithinBlock
ld a,[wd527]
ld a,[wMapViewVRAMPointer + 1]
dec a
and a,$03
or a,$98
ld [wd527],a
ld [wMapViewVRAMPointer + 1],a
.adjustXCoordWithinBlock
ld a,c
and a
@ -1531,9 +1533,9 @@ AdvancePlayerSprite:: ; 0d27 (0:0d27)
; moved into the tile block to the east
xor a
ld [hl],a
ld hl,wd4e3
ld hl,wXOffsetSinceLastSpecialWarp
inc [hl]
ld de,wd35f
ld de,wCurrentTileBlockMapViewPointer
call MoveTileBlockMapPointerEast
jr .updateMapView
.checkForMoveToWestBlock
@ -1542,9 +1544,9 @@ AdvancePlayerSprite:: ; 0d27 (0:0d27)
; moved into the tile block to the west
ld a,$01
ld [hl],a
ld hl,wd4e3
ld hl,wXOffsetSinceLastSpecialWarp
dec [hl]
ld de,wd35f
ld de,wCurrentTileBlockMapViewPointer
call MoveTileBlockMapPointerWest
jr .updateMapView
.adjustYCoordWithinBlock
@ -1557,9 +1559,9 @@ AdvancePlayerSprite:: ; 0d27 (0:0d27)
; moved into the tile block to the south
xor a
ld [hl],a
ld hl,wd4e2
ld hl,wYOffsetSinceLastSpecialWarp
inc [hl]
ld de,wd35f
ld de,wCurrentTileBlockMapViewPointer
ld a,[W_CURMAPWIDTH]
call MoveTileBlockMapPointerSouth
jr .updateMapView
@ -1569,9 +1571,9 @@ AdvancePlayerSprite:: ; 0d27 (0:0d27)
; moved into the tile block to the north
ld a,$01
ld [hl],a
ld hl,wd4e2
ld hl,wYOffsetSinceLastSpecialWarp
dec [hl]
ld de,wd35f
ld de,wCurrentTileBlockMapViewPointer
ld a,[W_CURMAPWIDTH]
call MoveTileBlockMapPointerNorth
.updateMapView
@ -1692,18 +1694,18 @@ MoveTileBlockMapPointerNorth:: ; 0e85 (0:0e85)
ScheduleNorthRowRedraw:: ; 0e91 (0:0e91)
hlCoord 0, 0
call ScheduleRowRedrawHelper
ld a,[wd526]
call CopyToScreenEdgeTiles
ld a,[wMapViewVRAMPointer]
ld [H_SCREENEDGEREDRAWADDR],a
ld a,[wd527]
ld a,[wMapViewVRAMPointer + 1]
ld [H_SCREENEDGEREDRAWADDR + 1],a
ld a,REDRAWROW
ld [H_SCREENEDGEREDRAW],a
ret
ScheduleRowRedrawHelper:: ; 0ea6 (0:0ea6)
CopyToScreenEdgeTiles:: ; 0ea6 (0:0ea6)
ld de,wScreenEdgeTiles
ld c,$28
ld c,2 * 20
.loop
ld a,[hli]
ld [de],a
@ -1714,10 +1716,10 @@ ScheduleRowRedrawHelper:: ; 0ea6 (0:0ea6)
ScheduleSouthRowRedraw:: ; 0eb2 (0:0eb2)
hlCoord 0, 16
call ScheduleRowRedrawHelper
ld a,[wd526]
call CopyToScreenEdgeTiles
ld a,[wMapViewVRAMPointer]
ld l,a
ld a,[wd527]
ld a,[wMapViewVRAMPointer + 1]
ld h,a
ld bc,$0200
add hl,bc
@ -1734,7 +1736,7 @@ ScheduleSouthRowRedraw:: ; 0eb2 (0:0eb2)
ScheduleEastColumnRedraw:: ; 0ed3 (0:0ed3)
hlCoord 18, 0
call ScheduleColumnRedrawHelper
ld a,[wd526]
ld a,[wMapViewVRAMPointer]
ld c,a
and a,$e0
ld b,a
@ -1743,7 +1745,7 @@ ScheduleEastColumnRedraw:: ; 0ed3 (0:0ed3)
and a,$1f
or b
ld [H_SCREENEDGEREDRAWADDR],a
ld a,[wd527]
ld a,[wMapViewVRAMPointer + 1]
ld [H_SCREENEDGEREDRAWADDR + 1],a
ld a,REDRAWCOL
ld [H_SCREENEDGEREDRAW],a
@ -1772,9 +1774,9 @@ ScheduleColumnRedrawHelper:: ; 0ef2 (0:0ef2)
ScheduleWestColumnRedraw:: ; 0f08 (0:0f08)
hlCoord 0, 0
call ScheduleColumnRedrawHelper
ld a,[wd526]
ld a,[wMapViewVRAMPointer]
ld [H_SCREENEDGEREDRAWADDR],a
ld a,[wd527]
ld a,[wMapViewVRAMPointer + 1]
ld [H_SCREENEDGEREDRAWADDR + 1],a
ld a,REDRAWCOL
ld [H_SCREENEDGEREDRAW],a
@ -1835,28 +1837,27 @@ JoypadOverworld:: ; 0f4d (0:0f4d)
ld a,[W_CURMAP]
cp a,ROUTE_17 ; Cycling Road
jr nz,.notForcedDownwards
ld a,[hJoyHeld] ; current joypad state
and a,%11110011 ; bit mask for all directions and A/B
ld a,[hJoyHeld]
and a,D_DOWN | D_UP | D_LEFT | D_RIGHT | B_BUTTON | A_BUTTON
jr nz,.notForcedDownwards
ld a,%10000000 ; down pressed
ld a,D_DOWN
ld [hJoyHeld],a ; on the cycling road, if there isn't a trainer and the player isn't pressing buttons, simulate a down press
.notForcedDownwards
ld a,[wd730]
bit 7,a
ret z
; if simulating button presses
ld a,[hJoyHeld] ; current joypad state
ld a,[hJoyHeld]
ld b,a
ld a,[wcd3b] ; bit mask for button presses that override simulated ones
ld a,[wOverrideSimulatedJoypadStatesMask] ; bit mask for button presses that override simulated ones
and b
ret nz ; return if the simulated button presses are overridden
ld hl,wcd38 ; index of current simulated button press
ld hl,wSimulatedJoypadStatesIndex
dec [hl]
ld a,[hl]
cp a,$ff
jr z,.doneSimulating ; if the end of the simulated button presses has been reached
ld hl,wccd3 ; base address of simulated button presses
; add offset to base address
ld hl,wSimulatedJoypadStatesEnd
add l
ld l,a
jr nc,.noCarry
@ -1872,9 +1873,9 @@ JoypadOverworld:: ; 0f4d (0:0f4d)
; if done simulating button presses
.doneSimulating
xor a
ld [wcd3a],a
ld [wcd38],a
ld [wccd3],a
ld [wWastedByteCD3A],a
ld [wSimulatedJoypadStatesIndex],a
ld [wSimulatedJoypadStatesEnd],a
ld [wJoyIgnore],a
ld [hJoyHeld],a
ld hl,wd736
@ -1906,8 +1907,8 @@ CollisionCheckOnWater:: ; 0fb7 (0:0fb7)
ld hl,TilePairCollisionsWater
call CheckForJumpingAndTilePairCollisions
jr c,.collision
predef Func_c586 ; get tile in front of player (puts it in c and [wcfc6])
ld a,[wcfc6] ; tile in front of player
predef GetTileAndCoordsInFrontOfPlayer ; get tile in front of player (puts it in c and [wTileInFrontOfPlayer])
ld a,[wTileInFrontOfPlayer] ; tile in front of player
cp a,$14 ; water tile
jr z,.noCollision ; keep surfing if it's a water tile
cp a,$32 ; either the left tile of the S.S. Anne boarding platform or the tile on eastern coastlines (depending on the current tileset)
@ -1942,9 +1943,9 @@ CollisionCheckOnWater:: ; 0fb7 (0:0fb7)
ret
.stopSurfing
xor a
ld [wd700],a
ld [wWalkBikeSurfState],a
call LoadPlayerSpriteGraphics
call Func_2307
call PlayDefaultMusic
jr .noCollision
.checkIfVermilionDockTileset
ld a, [W_CURMAPTILESET] ; tileset
@ -1957,16 +1958,16 @@ RunMapScript:: ; 101b (0:101b)
push hl
push de
push bc
callba Func_f225 ; check if the player is pushing a boulder
callba TryPushingBoulder
ld a,[wFlags_0xcd60]
bit 1,a ; is the player pushing a boulder?
bit 1,a ; play boulder dust animation
jr z,.afterBoulderEffect
callba Func_f2b5 ; displays dust effect when pushing a boulder
callba DoBoulderDustAnimation
.afterBoulderEffect
pop bc
pop de
pop hl
call Func_310e
call RunNPCMovementScript
ld a,[W_CURMAP] ; current map number
call SwitchToMapRomBank ; change to the ROM bank the map's data is in
ld hl,W_MAPSCRIPTPTR
@ -2012,7 +2013,7 @@ LoadPlayerSpriteGraphicsCommon:: ; 1063 (0:1063)
; function to load data from the map header
LoadMapHeader:: ; 107c (0:107c)
callba Func_f113
callba MarkTownVisitedAndLoadMissableObjects
ld a,[W_CURMAPTILESET]
ld [wd119],a
ld a,[W_CURMAP]
@ -2090,12 +2091,12 @@ LoadMapHeader:: ; 107c (0:107c)
ld a,[hli]
ld [de],a ; save background tile ID
.loadWarpData
ld a,[hli] ; number of warps
ld [wd3ae],a ; save the number of warps
and a ; are there any warps?
jr z,.loadSignData ; if not, skip this
ld a,[hli]
ld [wNumberOfWarps],a
and a
jr z,.loadSignData
ld c,a
ld de,wd3af ; base address of warps
ld de,wWarpEntries
.warpLoop ; one warp per loop iteration
ld b,$04
.warpInnerLoop
@ -2259,8 +2260,8 @@ LoadMapHeader:: ; 107c (0:107c)
dec b
jp nz,.loadSpriteLoop
.finishUp
predef Func_c754 ; load tileset data
callab LoadWildData ; load wild pokemon data
predef LoadTilesetHeader
callab LoadWildData
pop hl ; restore hl from before going to the warp/sign/sprite data (this value was saved for seemingly no purpose)
ld a,[W_CURMAPHEIGHT] ; map height in 4x4 tile blocks
add a ; double it
@ -2306,14 +2307,14 @@ LoadMapData:: ; 1241 (0:1241)
push af
call DisableLCD
ld a,$98
ld [wd527],a
ld [wMapViewVRAMPointer + 1],a
xor a
ld [wd526],a
ld [wMapViewVRAMPointer],a
ld [$ffaf],a
ld [$ffae],a
ld [wWalkCounter],a
ld [wd119],a
ld [wd11a],a
ld [wWalkBikeSurfStateCopy],a
ld [W_SPRITESETID],a
call LoadTextBoxTilePatterns
call LoadMapHeader
@ -2342,13 +2343,13 @@ LoadMapData:: ; 1241 (0:1241)
dec b
jr nz,.vramCopyLoop
ld a,$01
ld [wcfcb],a
ld [wUpdateSpritesEnabled],a
call EnableLCD
ld b,$09
call GoPAL_SET
call LoadPlayerSpriteGraphics
ld a,[wd732]
and a,$18 ; did the player fly or teleport in?
and a,1 << 4 | 1 << 3 ; fly warp or dungeon warp
jr nz,.restoreRomBank
ld a,[W_FLAGS_D733]
bit 1,a
@ -2382,16 +2383,16 @@ SwitchToMapRomBank:: ; 12bc (0:12bc)
pop hl
ret
Func_12da:: ; 12da (0:12da)
ld a, $1e
ld [wd13a], a
IgnoreInputForHalfSecond: ; 12da (0:12da)
ld a, 30
ld [wIgnoreInputCounter], a
ld hl, wd730
ld a, [hl]
or $26
ld [hl], a
ld [hl], a ; set ignore input bit
ret
Func_12e7:: ; 12e7 (0:12e7)
ResetUsingStrengthOutOfBattleBit: ; 12e7 (0:12e7)
ld hl, wd728
res 0, [hl]
ret
@ -2400,4 +2401,4 @@ ForceBikeOrSurf:: ; 12ed (0:12ed)
ld b, BANK(RedSprite)
ld hl, LoadPlayerSpriteGraphics
call Bankswitch
jp Func_2307 ; update map/player state?
jp PlayDefaultMusic ; update map/player state?

View file

@ -7,7 +7,7 @@ Predef::
ld [wPredefID], a
; A hack for LoadDestinationWarpPosition.
; See Func_c754 (predef $19).
; See LoadTilesetHeader (predef $19).
ld a, [H_LOADEDROMBANK]
ld [wPredefParentBank], a

View file

@ -8,15 +8,15 @@ VBlank::
ld a, [H_LOADEDROMBANK]
ld [wd122], a
ld a, [$ffae]
ld a, [hVBlankSCX]
ld [rSCX], a
ld a, [$ffaf]
ld a, [hVBlankSCY]
ld [rSCY], a
ld a, [wd0a0]
and a
jr nz, .ok
ld a, [$ffb0]
ld a, [hVBlankWY]
ld [rWY], a
.ok
@ -29,7 +29,7 @@ VBlank::
call $ff80 ; hOAMDMA
ld a, Bank(PrepareOAMData)
ld [H_LOADEDROMBANK], a
ld [MBC3RomBank], a
ld [MBC1RomBank], a
call PrepareOAMData
; VBlank-sensitive operations end.
@ -54,7 +54,7 @@ VBlank::
ld a, [wc0ef] ; music ROM bank
ld [H_LOADEDROMBANK], a
ld [MBC3RomBank], a
ld [MBC1RomBank], a
cp BANK(Music2_UpdateMusic)
jr nz, .notbank2
@ -72,7 +72,7 @@ VBlank::
call Music1f_UpdateMusic
.afterMusic
callba Func_18dee ; keep track of time played
callba TrackPlayTime ; keep track of time played
ld a, [$fff9]
and a
@ -80,7 +80,7 @@ VBlank::
ld a, [wd122]
ld [H_LOADEDROMBANK], a
ld [MBC3RomBank], a
ld [MBC1RomBank], a
pop hl
pop de

View file

@ -376,9 +376,9 @@ UpdateMovingBgTiles::
; Animate water and flower
; tiles in the overworld.
ld a, [$ffd7]
ld a, [hTilesetType]
and a
ret z
ret z ; no animations if indoors (or if a menu set this to 0)
ld a, [$ffd8]
inc a
@ -412,9 +412,10 @@ UpdateMovingBgTiles::
dec c
jr nz, .left
.done
ld a, [$ffd7]
ld a, [hTilesetType]
rrca
ret nc
; if in a cave, no flower animations
xor a
ld [$ffd8], a
ret