Break up engine/events_3.asm

This commit is contained in:
Remy Oukaour 2018-01-11 23:50:44 -05:00
parent 2085ebcc61
commit af4001132e
11 changed files with 828 additions and 872 deletions

View File

@ -56,7 +56,7 @@ VRAM_BANK_1 EQU 1 << OAM_TILE_BANK ; $08
OBP_NUM EQU 1 << OAM_OBP_NUM ; $10
X_FLIP EQU 1 << OAM_X_FLIP ; $20
Y_FLIP EQU 1 << OAM_Y_FLIP ; $40
BEHIND_BG EQU 1 << OAM_PRIORITY ; $80
PRIORITY EQU 1 << OAM_PRIORITY ; $80
; Other useful constants
LCDC_DEFAULT EQU %11100011

View File

@ -143,7 +143,7 @@ BattleAnimObjects: ; ccb56
battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_87, BATTLEANIMFUNC_39, PAL_BATTLE_OB_GRAY, $1f ; ANIM_OBJ_7A
battleanimobj RELATIVE_X, $80, BATTLEANIMFRAMESET_30, BATTLEANIMFUNC_3A, PAL_BATTLE_OB_YELLOW, $11 ; ANIM_OBJ_7B
battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_34, BATTLEANIMFUNC_00, PAL_BATTLE_OB_YELLOW, $05 ; ANIM_OBJ_7C
battleanimobj RELATIVE_X | X_FLIP | BEHIND_BG, $88, BATTLEANIMFRAMESET_88, BATTLEANIMFUNC_3B, PAL_BATTLE_OB_BLUE, $13 ; ANIM_OBJ_7D
battleanimobj RELATIVE_X | X_FLIP | PRIORITY, $88, BATTLEANIMFRAMESET_88, BATTLEANIMFUNC_3B, PAL_BATTLE_OB_BLUE, $13 ; ANIM_OBJ_7D
battleanimobj RELATIVE_X, $80, BATTLEANIMFRAMESET_76, BATTLEANIMFUNC_25, PAL_BATTLE_OB_RED, $23 ; ANIM_OBJ_HEART
battleanimobj RELATIVE_X, $98, BATTLEANIMFRAMESET_10, BATTLEANIMFUNC_34, PAL_BATTLE_OB_RED, $03 ; ANIM_OBJ_7F
battleanimobj RELATIVE_X, $a8, BATTLEANIMFRAMESET_0F, BATTLEANIMFUNC_3C, PAL_BATTLE_OB_RED, $03 ; ANIM_OBJ_80

View File

@ -162,10 +162,10 @@ SpriteAnimOAMData: ; 8d94d
.OAMData_TradePokeBall1:
db 4
dsprite -1, 0, -1, 0, $00, 0 | BEHIND_BG
dsprite -1, 0, 0, 0, $00, 0 | X_FLIP | BEHIND_BG
dsprite 0, 0, -1, 0, $01, 0 | BEHIND_BG
dsprite 0, 0, 0, 0, $01, 0 | X_FLIP | BEHIND_BG
dsprite -1, 0, -1, 0, $00, 0 | PRIORITY
dsprite -1, 0, 0, 0, $00, 0 | X_FLIP | PRIORITY
dsprite 0, 0, -1, 0, $01, 0 | PRIORITY
dsprite 0, 0, 0, 0, $01, 0 | X_FLIP | PRIORITY
.OAMData_IntroUnownF2_1:
db 4
@ -183,10 +183,10 @@ SpriteAnimOAMData: ; 8d94d
; unused
db 4
dsprite -1, 0, -1, 0, $00, 0 | BEHIND_BG
dsprite -1, 0, 0, 0, $00, 0 | X_FLIP | BEHIND_BG
dsprite 0, 0, -1, 0, $00, 0 | Y_FLIP | BEHIND_BG
dsprite 0, 0, 0, 0, $00, 0 | X_FLIP | Y_FLIP | BEHIND_BG
dsprite -1, 0, -1, 0, $00, 0 | PRIORITY
dsprite -1, 0, 0, 0, $00, 0 | X_FLIP | PRIORITY
dsprite 0, 0, -1, 0, $00, 0 | Y_FLIP | PRIORITY
dsprite 0, 0, 0, 0, $00, 0 | X_FLIP | Y_FLIP | PRIORITY
.OAMData_TradePoofBubble:
db 16
@ -353,10 +353,10 @@ SpriteAnimOAMData: ; 8d94d
.OAMData_MagnetTrainRed:
db 4
dsprite -1, 0, -1, 0, $00, PAL_OW_RED | BEHIND_BG
dsprite -1, 0, 0, 0, $01, PAL_OW_RED | BEHIND_BG
dsprite 0, 0, -1, 0, $02, PAL_OW_RED | BEHIND_BG
dsprite 0, 0, 0, 0, $03, PAL_OW_RED | BEHIND_BG
dsprite -1, 0, -1, 0, $00, PAL_OW_RED | PRIORITY
dsprite -1, 0, 0, 0, $01, PAL_OW_RED | PRIORITY
dsprite 0, 0, -1, 0, $02, PAL_OW_RED | PRIORITY
dsprite 0, 0, 0, 0, $03, PAL_OW_RED | PRIORITY
.OAMData_PartyMonWithMail1:
db 4
@ -410,22 +410,22 @@ SpriteAnimOAMData: ; 8d94d
dsprite -1, 0, -1, 0, $22, 0
dsprite -1, 0, 0, 0, $23, 0
dsprite -1, 0, 1, 0, $24, 0
dsprite 0, 0, -3, 0, $30, 0 | BEHIND_BG
dsprite 0, 0, -2, 0, $31, 0 | BEHIND_BG
dsprite 0, 0, -1, 0, $32, 0 | BEHIND_BG
dsprite 0, 0, 0, 0, $33, 0 | BEHIND_BG
dsprite 0, 0, 1, 0, $34, 0 | BEHIND_BG
dsprite 1, 0, -3, 0, $40, 0 | BEHIND_BG
dsprite 1, 0, -2, 0, $41, 0 | BEHIND_BG
dsprite 1, 0, -1, 0, $42, 0 | BEHIND_BG
dsprite 1, 0, 0, 0, $43, 0 | BEHIND_BG
dsprite 1, 0, 1, 0, $44, 0 | BEHIND_BG
dsprite 1, 0, 2, 0, $45, 0 | BEHIND_BG
dsprite 2, 0, -2, 0, $51, 0 | BEHIND_BG
dsprite 2, 0, -1, 0, $52, 0 | BEHIND_BG
dsprite 2, 0, 0, 0, $53, 0 | BEHIND_BG
dsprite 2, 0, 1, 0, $54, 0 | BEHIND_BG
dsprite 2, 0, 2, 0, $55, 0 | BEHIND_BG
dsprite 0, 0, -3, 0, $30, 0 | PRIORITY
dsprite 0, 0, -2, 0, $31, 0 | PRIORITY
dsprite 0, 0, -1, 0, $32, 0 | PRIORITY
dsprite 0, 0, 0, 0, $33, 0 | PRIORITY
dsprite 0, 0, 1, 0, $34, 0 | PRIORITY
dsprite 1, 0, -3, 0, $40, 0 | PRIORITY
dsprite 1, 0, -2, 0, $41, 0 | PRIORITY
dsprite 1, 0, -1, 0, $42, 0 | PRIORITY
dsprite 1, 0, 0, 0, $43, 0 | PRIORITY
dsprite 1, 0, 1, 0, $44, 0 | PRIORITY
dsprite 1, 0, 2, 0, $45, 0 | PRIORITY
dsprite 2, 0, -2, 0, $51, 0 | PRIORITY
dsprite 2, 0, -1, 0, $52, 0 | PRIORITY
dsprite 2, 0, 0, 0, $53, 0 | PRIORITY
dsprite 2, 0, 1, 0, $54, 0 | PRIORITY
dsprite 2, 0, 2, 0, $55, 0 | PRIORITY
.OAMData_GSIntroNote:
db 2
@ -749,10 +749,10 @@ SpriteAnimOAMData: ; 8d94d
.OAMData_MagnetTrainBlue:
db 4
dsprite -1, 0, -1, 0, $00, PAL_OW_BLUE | BEHIND_BG
dsprite -1, 0, 0, 0, $01, PAL_OW_BLUE | BEHIND_BG
dsprite 0, 0, -1, 0, $02, PAL_OW_BLUE | BEHIND_BG
dsprite 0, 0, 0, 0, $03, PAL_OW_BLUE | BEHIND_BG
dsprite -1, 0, -1, 0, $00, PAL_OW_BLUE | PRIORITY
dsprite -1, 0, 0, 0, $01, PAL_OW_BLUE | PRIORITY
dsprite 0, 0, -1, 0, $02, PAL_OW_BLUE | PRIORITY
dsprite 0, 0, 0, 0, $03, PAL_OW_BLUE | PRIORITY
.OAMData_MobileTradeCableBulge:
db 1
@ -1060,26 +1060,26 @@ SpriteAnimOAMData: ; 8d94d
.OAMData_IntroSuicuneAway:
db 20
dsprite 0, 0, 1, 0, $00, 1 | BEHIND_BG
dsprite 1, 0, 2, 0, $00, 1 | BEHIND_BG
dsprite 2, 0, 3, 0, $00, 1 | BEHIND_BG
dsprite 3, 0, 4, 0, $00, 1 | BEHIND_BG
dsprite 4, 0, 5, 0, $00, 1 | BEHIND_BG
dsprite 3, 0, 6, 0, $00, 1 | BEHIND_BG
dsprite 2, 0, 7, 0, $00, 1 | BEHIND_BG
dsprite 1, 0, 8, 0, $00, 1 | BEHIND_BG
dsprite 0, 0, 9, 0, $00, 1 | BEHIND_BG
dsprite 1, 0, 10, 0, $00, 1 | BEHIND_BG
dsprite 2, 0, 11, 0, $00, 1 | BEHIND_BG
dsprite 3, 0, 12, 0, $00, 1 | BEHIND_BG
dsprite 4, 0, 13, 0, $00, 1 | BEHIND_BG
dsprite 3, 0, 14, 0, $00, 1 | BEHIND_BG
dsprite 2, 0, 15, 0, $00, 1 | BEHIND_BG
dsprite 1, 0, 16, 0, $00, 1 | BEHIND_BG
dsprite 0, 0, -15, 0, $00, 1 | BEHIND_BG
dsprite 1, 0, -14, 0, $00, 1 | BEHIND_BG
dsprite 2, 0, -13, 0, $00, 1 | BEHIND_BG
dsprite 3, 0, -12, 0, $00, 1 | BEHIND_BG
dsprite 0, 0, 1, 0, $00, 1 | PRIORITY
dsprite 1, 0, 2, 0, $00, 1 | PRIORITY
dsprite 2, 0, 3, 0, $00, 1 | PRIORITY
dsprite 3, 0, 4, 0, $00, 1 | PRIORITY
dsprite 4, 0, 5, 0, $00, 1 | PRIORITY
dsprite 3, 0, 6, 0, $00, 1 | PRIORITY
dsprite 2, 0, 7, 0, $00, 1 | PRIORITY
dsprite 1, 0, 8, 0, $00, 1 | PRIORITY
dsprite 0, 0, 9, 0, $00, 1 | PRIORITY
dsprite 1, 0, 10, 0, $00, 1 | PRIORITY
dsprite 2, 0, 11, 0, $00, 1 | PRIORITY
dsprite 3, 0, 12, 0, $00, 1 | PRIORITY
dsprite 4, 0, 13, 0, $00, 1 | PRIORITY
dsprite 3, 0, 14, 0, $00, 1 | PRIORITY
dsprite 2, 0, 15, 0, $00, 1 | PRIORITY
dsprite 1, 0, 16, 0, $00, 1 | PRIORITY
dsprite 0, 0, -15, 0, $00, 1 | PRIORITY
dsprite 1, 0, -14, 0, $00, 1 | PRIORITY
dsprite 2, 0, -13, 0, $00, 1 | PRIORITY
dsprite 3, 0, -12, 0, $00, 1 | PRIORITY
.OAMData_Celebi:
db 4

View File

@ -1472,145 +1472,145 @@ ENDM
.SingleTile: ; e0a41
db 6
dsprite 0, 0, -1, 7, $00, 0 | BEHIND_BG
dsprite 0, 0, 0, 0, $02, 0 | BEHIND_BG
dsprite 0, 0, 1, 0, $03, 0 | BEHIND_BG
dsprite 0, 5, -1, 7, $00, 0 | Y_FLIP | BEHIND_BG
dsprite 0, 5, 0, 0, $02, 0 | Y_FLIP | BEHIND_BG
dsprite 0, 5, 1, 0, $03, 0 | BEHIND_BG
dsprite 0, 0, -1, 7, $00, 0 | PRIORITY
dsprite 0, 0, 0, 0, $02, 0 | PRIORITY
dsprite 0, 0, 1, 0, $03, 0 | PRIORITY
dsprite 0, 5, -1, 7, $00, 0 | Y_FLIP | PRIORITY
dsprite 0, 5, 0, 0, $02, 0 | Y_FLIP | PRIORITY
dsprite 0, 5, 1, 0, $03, 0 | PRIORITY
.PokeGroup: ; e0a5a
db 26
dsprite 0, 0, -1, 7, $00, 0 | BEHIND_BG
dsprite 0, 0, 0, 0, $02, 0 | BEHIND_BG
dsprite 0, 0, 1, 0, $00, 0 | X_FLIP | BEHIND_BG
dsprite 1, 0, -1, 7, $01, 0 | BEHIND_BG
dsprite 1, 0, 1, 0, $01, 0 | X_FLIP | BEHIND_BG
dsprite 2, 0, -1, 7, $01, 0 | BEHIND_BG
dsprite 2, 0, 1, 0, $03, 0 | BEHIND_BG
dsprite 3, 0, -1, 7, $01, 0 | BEHIND_BG
dsprite 3, 0, 1, 0, $03, 0 | BEHIND_BG
dsprite 4, 0, -1, 7, $01, 0 | BEHIND_BG
dsprite 4, 0, 1, 0, $03, 0 | BEHIND_BG
dsprite 5, 0, -1, 7, $01, 0 | BEHIND_BG
dsprite 5, 0, 1, 0, $03, 0 | BEHIND_BG
dsprite 6, 0, -1, 7, $01, 0 | BEHIND_BG
dsprite 6, 0, 1, 0, $03, 0 | BEHIND_BG
dsprite 7, 0, -1, 7, $01, 0 | BEHIND_BG
dsprite 7, 0, 1, 0, $03, 0 | BEHIND_BG
dsprite 8, 0, -1, 7, $01, 0 | BEHIND_BG
dsprite 8, 0, 1, 0, $03, 0 | BEHIND_BG
dsprite 9, 0, -1, 7, $01, 0 | BEHIND_BG
dsprite 9, 0, 1, 0, $03, 0 | BEHIND_BG
dsprite 10, 0, -1, 7, $01, 0 | BEHIND_BG
dsprite 10, 0, 1, 0, $03, 0 | BEHIND_BG
dsprite 10, 1, -1, 7, $00, 0 | Y_FLIP | BEHIND_BG
dsprite 10, 1, 0, 0, $02, 0 | Y_FLIP | BEHIND_BG
dsprite 10, 1, 1, 0, $03, 0 | BEHIND_BG
dsprite 0, 0, -1, 7, $00, 0 | PRIORITY
dsprite 0, 0, 0, 0, $02, 0 | PRIORITY
dsprite 0, 0, 1, 0, $00, 0 | X_FLIP | PRIORITY
dsprite 1, 0, -1, 7, $01, 0 | PRIORITY
dsprite 1, 0, 1, 0, $01, 0 | X_FLIP | PRIORITY
dsprite 2, 0, -1, 7, $01, 0 | PRIORITY
dsprite 2, 0, 1, 0, $03, 0 | PRIORITY
dsprite 3, 0, -1, 7, $01, 0 | PRIORITY
dsprite 3, 0, 1, 0, $03, 0 | PRIORITY
dsprite 4, 0, -1, 7, $01, 0 | PRIORITY
dsprite 4, 0, 1, 0, $03, 0 | PRIORITY
dsprite 5, 0, -1, 7, $01, 0 | PRIORITY
dsprite 5, 0, 1, 0, $03, 0 | PRIORITY
dsprite 6, 0, -1, 7, $01, 0 | PRIORITY
dsprite 6, 0, 1, 0, $03, 0 | PRIORITY
dsprite 7, 0, -1, 7, $01, 0 | PRIORITY
dsprite 7, 0, 1, 0, $03, 0 | PRIORITY
dsprite 8, 0, -1, 7, $01, 0 | PRIORITY
dsprite 8, 0, 1, 0, $03, 0 | PRIORITY
dsprite 9, 0, -1, 7, $01, 0 | PRIORITY
dsprite 9, 0, 1, 0, $03, 0 | PRIORITY
dsprite 10, 0, -1, 7, $01, 0 | PRIORITY
dsprite 10, 0, 1, 0, $03, 0 | PRIORITY
dsprite 10, 1, -1, 7, $00, 0 | Y_FLIP | PRIORITY
dsprite 10, 1, 0, 0, $02, 0 | Y_FLIP | PRIORITY
dsprite 10, 1, 1, 0, $03, 0 | PRIORITY
.NumGroup: ; e0ac3
db 20
dsprite 0, 0, -1, 7, $00, 0 | BEHIND_BG
dsprite 0, 0, 0, 0, $02, 0 | BEHIND_BG
dsprite 0, 0, 1, 0, $02, 0 | BEHIND_BG
dsprite 0, 0, 2, 0, $03, 0 | BEHIND_BG
dsprite 0, 0, 3, 0, $02, 0 | BEHIND_BG
dsprite 0, 0, 4, 0, $03, 0 | BEHIND_BG
dsprite 0, 0, 5, 0, $02, 0 | BEHIND_BG
dsprite 0, 0, 6, 0, $03, 0 | BEHIND_BG
dsprite 0, 0, 7, 0, $02, 0 | BEHIND_BG
dsprite 0, 0, 8, 0, $03, 0 | BEHIND_BG
dsprite 0, 5, -1, 7, $00, 0 | Y_FLIP | BEHIND_BG
dsprite 0, 5, 0, 0, $02, 0 | Y_FLIP | BEHIND_BG
dsprite 0, 5, 1, 0, $02, 0 | Y_FLIP | BEHIND_BG
dsprite 0, 5, 2, 0, $03, 0 | BEHIND_BG
dsprite 0, 5, 3, 0, $02, 0 | Y_FLIP | BEHIND_BG
dsprite 0, 5, 4, 0, $03, 0 | BEHIND_BG
dsprite 0, 5, 5, 0, $02, 0 | Y_FLIP | BEHIND_BG
dsprite 0, 5, 6, 0, $03, 0 | BEHIND_BG
dsprite 0, 5, 7, 0, $02, 0 | Y_FLIP | BEHIND_BG
dsprite 0, 5, 8, 0, $03, 0 | BEHIND_BG
dsprite 0, 0, -1, 7, $00, 0 | PRIORITY
dsprite 0, 0, 0, 0, $02, 0 | PRIORITY
dsprite 0, 0, 1, 0, $02, 0 | PRIORITY
dsprite 0, 0, 2, 0, $03, 0 | PRIORITY
dsprite 0, 0, 3, 0, $02, 0 | PRIORITY
dsprite 0, 0, 4, 0, $03, 0 | PRIORITY
dsprite 0, 0, 5, 0, $02, 0 | PRIORITY
dsprite 0, 0, 6, 0, $03, 0 | PRIORITY
dsprite 0, 0, 7, 0, $02, 0 | PRIORITY
dsprite 0, 0, 8, 0, $03, 0 | PRIORITY
dsprite 0, 5, -1, 7, $00, 0 | Y_FLIP | PRIORITY
dsprite 0, 5, 0, 0, $02, 0 | Y_FLIP | PRIORITY
dsprite 0, 5, 1, 0, $02, 0 | Y_FLIP | PRIORITY
dsprite 0, 5, 2, 0, $03, 0 | PRIORITY
dsprite 0, 5, 3, 0, $02, 0 | Y_FLIP | PRIORITY
dsprite 0, 5, 4, 0, $03, 0 | PRIORITY
dsprite 0, 5, 5, 0, $02, 0 | Y_FLIP | PRIORITY
dsprite 0, 5, 6, 0, $03, 0 | PRIORITY
dsprite 0, 5, 7, 0, $02, 0 | Y_FLIP | PRIORITY
dsprite 0, 5, 8, 0, $03, 0 | PRIORITY
.NumGroupPair: ; e0b14
db 30
dsprite 0, 0, 0, 0, $00, 0 | BEHIND_BG
dsprite 0, 0, 1, 0, $02, 0 | BEHIND_BG
dsprite 0, 0, 2, 0, $02, 0 | BEHIND_BG
dsprite 0, 0, 3, 0, $03, 0 | BEHIND_BG
dsprite 0, 0, 4, 0, $02, 0 | BEHIND_BG
dsprite 0, 0, 5, 0, $03, 0 | BEHIND_BG
dsprite 0, 0, 6, 0, $02, 0 | BEHIND_BG
dsprite 0, 0, 7, 0, $03, 0 | BEHIND_BG
dsprite 0, 0, 8, 0, $02, 0 | BEHIND_BG
dsprite 0, 0, 9, 0, $03, 0 | BEHIND_BG
dsprite 1, 0, 0, 0, $01, 0 | BEHIND_BG
dsprite 1, 0, 3, 0, $03, 0 | BEHIND_BG
dsprite 1, 0, 5, 0, $03, 0 | BEHIND_BG
dsprite 1, 0, 7, 0, $03, 0 | BEHIND_BG
dsprite 1, 0, 9, 0, $03, 0 | BEHIND_BG
dsprite 2, 0, 0, 0, $01, 0 | BEHIND_BG
dsprite 2, 0, 3, 0, $03, 0 | BEHIND_BG
dsprite 2, 0, 5, 0, $03, 0 | BEHIND_BG
dsprite 2, 0, 7, 0, $03, 0 | BEHIND_BG
dsprite 2, 0, 9, 0, $03, 0 | BEHIND_BG
dsprite 2, 1, 0, 0, $00, 0 | Y_FLIP | BEHIND_BG
dsprite 2, 1, 1, 0, $02, 0 | Y_FLIP | BEHIND_BG
dsprite 2, 1, 2, 0, $02, 0 | Y_FLIP | BEHIND_BG
dsprite 2, 1, 3, 0, $03, 0 | BEHIND_BG
dsprite 2, 1, 4, 0, $03, 0 | BEHIND_BG
dsprite 2, 1, 5, 0, $03, 0 | BEHIND_BG
dsprite 2, 1, 6, 0, $03, 0 | BEHIND_BG
dsprite 2, 1, 7, 0, $03, 0 | BEHIND_BG
dsprite 2, 1, 8, 0, $03, 0 | BEHIND_BG
dsprite 2, 1, 9, 0, $03, 0 | BEHIND_BG
dsprite 0, 0, 0, 0, $00, 0 | PRIORITY
dsprite 0, 0, 1, 0, $02, 0 | PRIORITY
dsprite 0, 0, 2, 0, $02, 0 | PRIORITY
dsprite 0, 0, 3, 0, $03, 0 | PRIORITY
dsprite 0, 0, 4, 0, $02, 0 | PRIORITY
dsprite 0, 0, 5, 0, $03, 0 | PRIORITY
dsprite 0, 0, 6, 0, $02, 0 | PRIORITY
dsprite 0, 0, 7, 0, $03, 0 | PRIORITY
dsprite 0, 0, 8, 0, $02, 0 | PRIORITY
dsprite 0, 0, 9, 0, $03, 0 | PRIORITY
dsprite 1, 0, 0, 0, $01, 0 | PRIORITY
dsprite 1, 0, 3, 0, $03, 0 | PRIORITY
dsprite 1, 0, 5, 0, $03, 0 | PRIORITY
dsprite 1, 0, 7, 0, $03, 0 | PRIORITY
dsprite 1, 0, 9, 0, $03, 0 | PRIORITY
dsprite 2, 0, 0, 0, $01, 0 | PRIORITY
dsprite 2, 0, 3, 0, $03, 0 | PRIORITY
dsprite 2, 0, 5, 0, $03, 0 | PRIORITY
dsprite 2, 0, 7, 0, $03, 0 | PRIORITY
dsprite 2, 0, 9, 0, $03, 0 | PRIORITY
dsprite 2, 1, 0, 0, $00, 0 | Y_FLIP | PRIORITY
dsprite 2, 1, 1, 0, $02, 0 | Y_FLIP | PRIORITY
dsprite 2, 1, 2, 0, $02, 0 | Y_FLIP | PRIORITY
dsprite 2, 1, 3, 0, $03, 0 | PRIORITY
dsprite 2, 1, 4, 0, $03, 0 | PRIORITY
dsprite 2, 1, 5, 0, $03, 0 | PRIORITY
dsprite 2, 1, 6, 0, $03, 0 | PRIORITY
dsprite 2, 1, 7, 0, $03, 0 | PRIORITY
dsprite 2, 1, 8, 0, $03, 0 | PRIORITY
dsprite 2, 1, 9, 0, $03, 0 | PRIORITY
.PokeGroupPair: ; e0b8d
db 38
dsprite 0, 0, -1, 7, $00, 0 | BEHIND_BG
dsprite 0, 0, 3, 0, $00, 0 | X_FLIP | BEHIND_BG
dsprite 1, 0, -1, 7, $01, 0 | BEHIND_BG
dsprite 1, 0, 3, 0, $01, 0 | X_FLIP | BEHIND_BG
dsprite 2, 0, -1, 7, $01, 0 | BEHIND_BG
dsprite 2, 0, 3, 0, $01, 0 | X_FLIP | BEHIND_BG
dsprite 3, 0, -1, 7, $01, 0 | BEHIND_BG
dsprite 3, 0, 1, 0, $03, 0 | BEHIND_BG
dsprite 3, 0, 3, 0, $03, 0 | BEHIND_BG
dsprite 4, 0, -1, 7, $01, 0 | BEHIND_BG
dsprite 4, 0, 1, 0, $03, 0 | BEHIND_BG
dsprite 4, 0, 3, 0, $03, 0 | BEHIND_BG
dsprite 5, 0, -1, 7, $01, 0 | BEHIND_BG
dsprite 5, 0, 1, 0, $03, 0 | BEHIND_BG
dsprite 5, 0, 3, 0, $03, 0 | BEHIND_BG
dsprite 6, 0, -1, 7, $01, 0 | BEHIND_BG
dsprite 6, 0, 1, 0, $03, 0 | BEHIND_BG
dsprite 6, 0, 3, 0, $03, 0 | BEHIND_BG
dsprite 7, 0, -1, 7, $01, 0 | BEHIND_BG
dsprite 7, 0, 1, 0, $03, 0 | BEHIND_BG
dsprite 7, 0, 3, 0, $03, 0 | BEHIND_BG
dsprite 8, 0, -1, 7, $01, 0 | BEHIND_BG
dsprite 8, 0, 1, 0, $03, 0 | BEHIND_BG
dsprite 8, 0, 3, 0, $03, 0 | BEHIND_BG
dsprite 9, 0, -1, 7, $01, 0 | BEHIND_BG
dsprite 9, 0, 1, 0, $03, 0 | BEHIND_BG
dsprite 9, 0, 3, 0, $03, 0 | BEHIND_BG
dsprite 10, 0, -1, 7, $01, 0 | BEHIND_BG
dsprite 10, 0, 1, 0, $03, 0 | BEHIND_BG
dsprite 10, 0, 3, 0, $03, 0 | BEHIND_BG
dsprite 11, 0, -1, 7, $01, 0 | BEHIND_BG
dsprite 11, 0, 1, 0, $03, 0 | BEHIND_BG
dsprite 11, 0, 3, 0, $03, 0 | BEHIND_BG
dsprite 11, 1, -1, 7, $00, 0 | Y_FLIP | BEHIND_BG
dsprite 11, 1, 0, 0, $02, 0 | Y_FLIP | BEHIND_BG
dsprite 11, 1, 1, 0, $03, 0 | Y_FLIP | BEHIND_BG
dsprite 11, 1, 2, 0, $02, 0 | Y_FLIP | BEHIND_BG
dsprite 11, 1, 3, 0, $03, 0 | X_FLIP | Y_FLIP | BEHIND_BG
dsprite 0, 0, -1, 7, $00, 0 | PRIORITY
dsprite 0, 0, 3, 0, $00, 0 | X_FLIP | PRIORITY
dsprite 1, 0, -1, 7, $01, 0 | PRIORITY
dsprite 1, 0, 3, 0, $01, 0 | X_FLIP | PRIORITY
dsprite 2, 0, -1, 7, $01, 0 | PRIORITY
dsprite 2, 0, 3, 0, $01, 0 | X_FLIP | PRIORITY
dsprite 3, 0, -1, 7, $01, 0 | PRIORITY
dsprite 3, 0, 1, 0, $03, 0 | PRIORITY
dsprite 3, 0, 3, 0, $03, 0 | PRIORITY
dsprite 4, 0, -1, 7, $01, 0 | PRIORITY
dsprite 4, 0, 1, 0, $03, 0 | PRIORITY
dsprite 4, 0, 3, 0, $03, 0 | PRIORITY
dsprite 5, 0, -1, 7, $01, 0 | PRIORITY
dsprite 5, 0, 1, 0, $03, 0 | PRIORITY
dsprite 5, 0, 3, 0, $03, 0 | PRIORITY
dsprite 6, 0, -1, 7, $01, 0 | PRIORITY
dsprite 6, 0, 1, 0, $03, 0 | PRIORITY
dsprite 6, 0, 3, 0, $03, 0 | PRIORITY
dsprite 7, 0, -1, 7, $01, 0 | PRIORITY
dsprite 7, 0, 1, 0, $03, 0 | PRIORITY
dsprite 7, 0, 3, 0, $03, 0 | PRIORITY
dsprite 8, 0, -1, 7, $01, 0 | PRIORITY
dsprite 8, 0, 1, 0, $03, 0 | PRIORITY
dsprite 8, 0, 3, 0, $03, 0 | PRIORITY
dsprite 9, 0, -1, 7, $01, 0 | PRIORITY
dsprite 9, 0, 1, 0, $03, 0 | PRIORITY
dsprite 9, 0, 3, 0, $03, 0 | PRIORITY
dsprite 10, 0, -1, 7, $01, 0 | PRIORITY
dsprite 10, 0, 1, 0, $03, 0 | PRIORITY
dsprite 10, 0, 3, 0, $03, 0 | PRIORITY
dsprite 11, 0, -1, 7, $01, 0 | PRIORITY
dsprite 11, 0, 1, 0, $03, 0 | PRIORITY
dsprite 11, 0, 3, 0, $03, 0 | PRIORITY
dsprite 11, 1, -1, 7, $00, 0 | Y_FLIP | PRIORITY
dsprite 11, 1, 0, 0, $02, 0 | Y_FLIP | PRIORITY
dsprite 11, 1, 1, 0, $03, 0 | Y_FLIP | PRIORITY
dsprite 11, 1, 2, 0, $02, 0 | Y_FLIP | PRIORITY
dsprite 11, 1, 3, 0, $03, 0 | X_FLIP | Y_FLIP | PRIORITY
.Impossible: ; e0c26
db 4
dsprite 0, 0, 0, 0, $00, 0 | BEHIND_BG
dsprite 0, 0, 1, 0, $00, 0 | X_FLIP | BEHIND_BG
dsprite 1, 0, 0, 0, $00, 0 | Y_FLIP | BEHIND_BG
dsprite 1, 0, 1, 0, $00, 0 | X_FLIP | Y_FLIP | BEHIND_BG
dsprite 0, 0, 0, 0, $00, 0 | PRIORITY
dsprite 0, 0, 1, 0, $00, 0 | X_FLIP | PRIORITY
dsprite 1, 0, 0, 0, $00, 0 | Y_FLIP | PRIORITY
dsprite 1, 0, 1, 0, $00, 0 | X_FLIP | Y_FLIP | PRIORITY
; e0c37
CardFlip_InitAttrPals: ; e0c37 (38:4c37)

View File

@ -1106,4 +1106,5 @@ ChangeDirectionScript: ; 9
; 96c56
INCLUDE "engine/scripting.asm"
INCLUDE "engine/events_2.asm"

View File

@ -0,0 +1,85 @@
CheckForHiddenItems: ; b8172
; Checks to see if there are hidden items on the screen that have not yet been found. If it finds one, returns carry.
call GetMapScriptHeaderBank
ld [Buffer1], a
; Get the coordinate of the bottom right corner of the screen, and load it in Buffer3/Buffer4.
ld a, [XCoord]
add SCREEN_WIDTH / 4
ld [Buffer4], a
ld a, [YCoord]
add SCREEN_HEIGHT / 4
ld [Buffer3], a
; Get the pointer for the first BG event header in the map...
ld hl, wCurrMapBGEventHeaderPointer
ld a, [hli]
ld h, [hl]
ld l, a
; ... before even checking to see if there are any BG events on this map.
ld a, [wCurrMapBGEventCount]
and a
jr z, .nobgeventitems
; For i = 1:wCurrMapBGEventCount...
.loop
; Store the counter in Buffer2, and store the BG event header pointer in the stack.
ld [Buffer2], a
push hl
; Get the Y coordinate of the BG event.
call .GetFarByte
ld e, a
; Is the Y coordinate of the BG event on the screen? If not, go to the next BG event.
ld a, [Buffer3]
sub e
jr c, .next
cp SCREEN_HEIGHT / 2
jr nc, .next
; Is the X coordinate of the BG event on the screen? If not, go to the next BG event.
call .GetFarByte
ld d, a
ld a, [Buffer4]
sub d
jr c, .next
cp SCREEN_WIDTH / 2
jr nc, .next
; Is this BG event a hidden item? If not, go to the next BG event.
call .GetFarByte
cp BGEVENT_ITEM
jr nz, .next
; Has this item already been found? If not, set off the Itemfinder.
ld a, [Buffer1]
call GetFarHalfword
ld a, [Buffer1]
call GetFarHalfword
ld d, h
ld e, l
ld b, CHECK_FLAG
call EventFlagAction
ld a, c
and a
jr z, .itemnearby
.next
; Restore the BG event header pointer and increment it by the length of a BG event header.
pop hl
ld bc, 5
add hl, bc
; Restore the BG event counter and decrement it. If it hits zero, there are no hidden items in range.
ld a, [Buffer2]
dec a
jr nz, .loop
.nobgeventitems
xor a
ret
.itemnearby
pop hl
scf
ret
; b81e2
.GetFarByte: ; b81e2
ld a, [Buffer1]
call GetFarByte
inc hl
ret
; b81ea

View File

@ -0,0 +1,274 @@
MAP_NAME_SIGN_START EQU $60
ReturnFromMapSetupScript:: ; b8000
xor a
ld [hBGMapMode], a
farcall .inefficient_farcall ; this is a waste of 6 ROM bytes and 6 stack bytes
ret
; b800a
; should have just been a fallthrough
.inefficient_farcall ; b800a
ld a, [MapGroup]
ld b, a
ld a, [MapNumber]
ld c, a
call GetWorldMapLocation
ld [wCurrentLandmark], a
call .CheckNationalParkGate
jr z, .nationalparkgate
call GetMapEnvironment
cp GATE
jr nz, .not_gate
.nationalparkgate
ld a, -1
ld [wCurrentLandmark], a
.not_gate
ld hl, wEnteredMapFromContinue
bit 1, [hl]
res 1, [hl]
jr nz, .dont_do_map_sign
call .CheckMovingWithinLandmark
jr z, .dont_do_map_sign
ld a, [wCurrentLandmark]
ld [wPreviousLandmark], a
call .CheckSpecialMap
jr z, .dont_do_map_sign
; Display for 60 frames
ld a, 60
ld [wLandmarkSignTimer], a
call LoadMapNameSignGFX
call InitMapNameFrame
farcall HDMATransfer_OnlyTopFourRows
ret
.dont_do_map_sign
ld a, [wCurrentLandmark]
ld [wPreviousLandmark], a
ld a, $90
ld [rWY], a
ld [hWY], a
xor a
ld [hLCDCPointer], a
ret
; b8064
.CheckMovingWithinLandmark: ; b8064
ld a, [wCurrentLandmark]
ld c, a
ld a, [wPreviousLandmark]
cp c
ret z
cp SPECIAL_MAP
ret
; b8070
.CheckSpecialMap: ; b8070
; These landmarks do not get pop-up signs.
cp -1
ret z
cp SPECIAL_MAP
ret z
cp RADIO_TOWER
ret z
cp LAV_RADIO_TOWER
ret z
cp UNDERGROUND_PATH
ret z
cp INDIGO_PLATEAU
ret z
cp POWER_PLANT
ret z
ld a, $1
and a
ret
; b8089
.CheckNationalParkGate: ; b8089
ld a, [MapGroup]
cp GROUP_ROUTE_35_NATIONAL_PARK_GATE
ret nz
ld a, [MapNumber]
cp MAP_ROUTE_35_NATIONAL_PARK_GATE
ret z
cp MAP_ROUTE_36_NATIONAL_PARK_GATE
ret
; b8098
PlaceMapNameSign:: ; b8098 (2e:4098)
ld hl, wLandmarkSignTimer
ld a, [hl]
and a
jr z, .disappear
dec [hl]
cp 60
ret z
cp 59
jr nz, .skip2
call InitMapNameFrame
call PlaceMapNameCenterAlign
farcall HDMATransfer_OnlyTopFourRows
.skip2
ld a, $80
ld a, $70
ld [rWY], a
ld [hWY], a
ret
.disappear
ld a, $90
ld [rWY], a
ld [hWY], a
xor a
ld [hLCDCPointer], a
ret
LoadMapNameSignGFX: ; b80c6
ld de, MapEntryFrameGFX
ld hl, vTiles2 tile MAP_NAME_SIGN_START
lb bc, BANK(MapEntryFrameGFX), 14
call Get2bpp
ret
; b80d3
InitMapNameFrame: ; b80d3
hlcoord 0, 0
ld b, 2
ld c, 18
call InitMapSignAttrMap
call PlaceMapNameFrame
ret
; b80e1
PlaceMapNameCenterAlign: ; b80e1 (2e:40e1)
ld a, [wCurrentLandmark]
ld e, a
farcall GetLandmarkName
call .GetNameLength
ld a, SCREEN_WIDTH
sub c
srl a
ld b, $0
ld c, a
hlcoord 0, 2
add hl, bc
ld de, StringBuffer1
call PlaceString
ret
.GetNameLength: ; b8101 (2e:4101)
ld c, 0
push hl
ld hl, StringBuffer1
.loop
ld a, [hli]
cp "@"
jr z, .stop
cp "%"
jr z, .loop
inc c
jr .loop
.stop
pop hl
ret
InitMapSignAttrMap: ; b8115
ld de, AttrMap - TileMap
add hl, de
inc b
inc b
inc c
inc c
ld a, PAL_BG_TEXT | PRIORITY
.loop
push bc
push hl
.inner_loop
ld [hli], a
dec c
jr nz, .inner_loop
pop hl
ld de, SCREEN_WIDTH
add hl, de
pop bc
dec b
jr nz, .loop
ret
; b812f
PlaceMapNameFrame: ; b812f
hlcoord 0, 0
; top left
ld a, MAP_NAME_SIGN_START + 1
ld [hli], a
; top row
ld a, MAP_NAME_SIGN_START + 2
call .FillTopBottom
; top right
ld a, MAP_NAME_SIGN_START + 4
ld [hli], a
; left, first line
ld a, MAP_NAME_SIGN_START + 5
ld [hli], a
; first line
call .FillMiddle
; right, first line
ld a, MAP_NAME_SIGN_START + 11
ld [hli], a
; left, second line
ld a, MAP_NAME_SIGN_START + 6
ld [hli], a
; second line
call .FillMiddle
; right, second line
ld a, MAP_NAME_SIGN_START + 12
ld [hli], a
; bottom left
ld a, MAP_NAME_SIGN_START + 7
ld [hli], a
; bottom
ld a, MAP_NAME_SIGN_START + 8
call .FillTopBottom
; bottom right
ld a, MAP_NAME_SIGN_START + 10
ld [hl], a
ret
; b815b
.FillMiddle: ; b815b
ld c, SCREEN_WIDTH - 2
ld a, MAP_NAME_SIGN_START + 13
.loop
ld [hli], a
dec c
jr nz, .loop
ret
; b8164
.FillTopBottom: ; b8164
ld c, 5
jr .enterloop
.continueloop
ld [hli], a
ld [hli], a
.enterloop
inc a
ld [hli], a
ld [hli], a
dec a
dec c
jr nz, .continueloop
ret
; b8172

285
engine/events/treemons.asm Executable file
View File

@ -0,0 +1,285 @@
TreeMonEncounter: ; b81ea
farcall TrainerRankings_TreeEncounters
xor a
ld [TempWildMonSpecies], a
ld [CurPartyLevel], a
ld hl, TreeMonMaps
call GetTreeMonSet
jr nc, .no_battle
call GetTreeMons
jr nc, .no_battle
call GetTreeMon
jr nc, .no_battle
ld a, BATTLETYPE_TREE
ld [BattleType], a
ld a, 1
ld [ScriptVar], a
ret
.no_battle
xor a
ld [ScriptVar], a
ret
; b8219
RockMonEncounter: ; b8219
xor a
ld [TempWildMonSpecies], a
ld [CurPartyLevel], a
ld hl, RockMonMaps
call GetTreeMonSet
jr nc, .no_battle
call GetTreeMons
jr nc, .no_battle
; 40% chance of an encounter
ld a, 10
call RandomRange
cp 4
jr nc, .no_battle
call SelectTreeMon
jr nc, .no_battle
ret
.no_battle
xor a
ret
; b823e
db $05 ; ????
GetTreeMonSet: ; b823f
; Return carry and treemon set in a
; if the current map is in table hl.
ld a, [MapNumber]
ld e, a
ld a, [MapGroup]
ld d, a
.loop
ld a, [hli]
cp -1
jr z, .not_in_table
cp d
jr nz, .skip2
ld a, [hli]
cp e
jr nz, .skip1
jr .in_table
.skip2
inc hl
.skip1
inc hl
jr .loop
.not_in_table
xor a
ret
.in_table
ld a, [hl]
scf
ret
; b825e
INCLUDE "data/wild/treemon_maps.asm"
GetTreeMons: ; b82d2
; Return the address of TreeMon table a in hl.
; Return nc if table a doesn't exist.
cp NUM_TREEMON_SETS
jr nc, .quit
and a
jr z, .quit
ld e, a
ld d, 0
ld hl, TreeMons
add hl, de
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
scf
ret
.quit
xor a
ret
; b82e8
INCLUDE "data/wild/treemons.asm"
GetTreeMon: ; b83e5
push hl
call GetTreeScore
pop hl
and a ; TREEMON_SCORE_BAD
jr z, .bad
cp TREEMON_SCORE_GOOD
jr z, .good
cp TREEMON_SCORE_RARE
jr z, .rare
ret
.bad
; 10% chance of an encounter
ld a, 10
call RandomRange
and a
jr nz, NoTreeMon
jr SelectTreeMon
.good
; 50% chance of an encounter
ld a, 10
call RandomRange
cp 5
jr nc, NoTreeMon
jr SelectTreeMon
.rare
; 80% chance of an encounter
ld a, 10
call RandomRange
cp 8
jr nc, NoTreeMon
jr .skip
.skip
ld a, [hli]
cp -1
jr nz, .skip
call SelectTreeMon
ret
; b841f
SelectTreeMon: ; b841f
; Read a TreeMons table and pick one monster at random.
ld a, 100
call RandomRange
.loop
sub [hl]
jr c, .ok
inc hl
inc hl
inc hl
jr .loop
.ok
ld a, [hli]
cp -1
jr z, NoTreeMon
ld a, [hli]
ld [TempWildMonSpecies], a
ld a, [hl]
ld [CurPartyLevel], a
scf
ret
NoTreeMon: ; b843b
xor a
ld [TempWildMonSpecies], a
ld [CurPartyLevel], a
ret
; b8443
GetTreeScore: ; b8443
call .CoordScore
ld [Buffer1], a
call .OTIDScore
ld [Buffer2], a
ld c, a
ld a, [Buffer1]
sub c
jr z, .rare
jr nc, .ok
add 10
.ok
cp 5
jr c, .good
.bad
xor a ; TREEMON_SCORE_BAD
ret
.good
ld a, TREEMON_SCORE_GOOD
ret
.rare
ld a, TREEMON_SCORE_RARE
ret
; b8466
.CoordScore: ; b8466
call GetFacingTileCoord
ld hl, 0
ld c, e
ld b, 0
ld a, d
and a
jr z, .next
.loop
add hl, bc
dec a
jr nz, .loop
.next
add hl, bc
ld c, d
add hl, bc
ld a, h
ld [hDividend], a
ld a, l
ld [hDividend + 1], a
ld a, 5
ld [hDivisor], a
ld b, 2
call Divide
ld a, [hQuotient + 1]
ld [hDividend], a
ld a, [hQuotient + 2]
ld [hDividend + 1], a
ld a, 10
ld [hDivisor], a
ld b, 2
call Divide
ld a, [hQuotient + 3]
ret
; b849d
.OTIDScore: ; b849d
ld a, [PlayerID]
ld [hDividend], a
ld a, [PlayerID + 1]
ld [hDividend + 1], a
ld a, 10
ld [hDivisor], a
ld b, 2
call Divide
ld a, [hQuotient + 3]
ret
; b84b3

View File

@ -1,692 +0,0 @@
ReturnFromMapSetupScript:: ; b8000
xor a
ld [hBGMapMode], a
farcall .inefficient_farcall ; this is a waste of 6 ROM bytes and 6 stack bytes
ret
; b800a
; should have just been a fallthrough
.inefficient_farcall ; b800a
ld a, [MapGroup]
ld b, a
ld a, [MapNumber]
ld c, a
call GetWorldMapLocation
ld [wCurrentLandmark], a
call .CheckNationalParkGate
jr z, .nationalparkgate
call GetMapEnvironment
cp GATE
jr nz, .not_gate
.nationalparkgate
ld a, -1
ld [wCurrentLandmark], a
.not_gate
ld hl, wEnteredMapFromContinue
bit 1, [hl]
res 1, [hl]
jr nz, .dont_do_map_sign
call .CheckMovingWithinLandmark
jr z, .dont_do_map_sign
ld a, [wCurrentLandmark]
ld [wPreviousLandmark], a
call .CheckSpecialMap
jr z, .dont_do_map_sign
; Display for 60 frames
ld a, 60
ld [wLandmarkSignTimer], a
call LoadMapNameSignGFX
call InitMapNameFrame
farcall HDMATransfer_OnlyTopFourRows
ret
.dont_do_map_sign
ld a, [wCurrentLandmark]
ld [wPreviousLandmark], a
ld a, $90
ld [rWY], a
ld [hWY], a
xor a
ld [hLCDCPointer], a
ret
; b8064
.CheckMovingWithinLandmark: ; b8064
ld a, [wCurrentLandmark]
ld c, a
ld a, [wPreviousLandmark]
cp c
ret z
cp SPECIAL_MAP
ret
; b8070
.CheckSpecialMap: ; b8070
; These landmarks do not get pop-up signs.
cp -1
ret z
cp SPECIAL_MAP
ret z
cp RADIO_TOWER
ret z
cp LAV_RADIO_TOWER
ret z
cp UNDERGROUND_PATH
ret z
cp INDIGO_PLATEAU
ret z
cp POWER_PLANT
ret z
ld a, $1
and a
ret
; b8089
.CheckNationalParkGate: ; b8089
ld a, [MapGroup]
cp GROUP_ROUTE_35_NATIONAL_PARK_GATE
ret nz
ld a, [MapNumber]
cp MAP_ROUTE_35_NATIONAL_PARK_GATE
ret z
cp MAP_ROUTE_36_NATIONAL_PARK_GATE
ret
; b8098
PlaceMapNameSign:: ; b8098 (2e:4098)
ld hl, wLandmarkSignTimer
ld a, [hl]
and a
jr z, .disappear
dec [hl]
cp 60
ret z
cp 59
jr nz, .skip2
call InitMapNameFrame
call PlaceMapNameCenterAlign
farcall HDMATransfer_OnlyTopFourRows
.skip2
ld a, $80
ld a, $70
ld [rWY], a
ld [hWY], a
ret
.disappear
ld a, $90
ld [rWY], a
ld [hWY], a
xor a
ld [hLCDCPointer], a
ret
LoadMapNameSignGFX: ; b80c6
ld de, MapEntryFrameGFX
ld hl, vTiles2 tile $60
lb bc, BANK(MapEntryFrameGFX), $e
call Get2bpp
ret
; b80d3
InitMapNameFrame: ; b80d3
hlcoord 0, 0
ld b, 2
ld c, 18
call InitMapSignAttrMap
call PlaceMapNameFrame
ret
; b80e1
PlaceMapNameCenterAlign: ; b80e1 (2e:40e1)
ld a, [wCurrentLandmark]
ld e, a
farcall GetLandmarkName
call .GetNameLength
ld a, SCREEN_WIDTH
sub c
srl a
ld b, $0
ld c, a
hlcoord 0, 2
add hl, bc
ld de, StringBuffer1
call PlaceString
ret
.GetNameLength: ; b8101 (2e:4101)
ld c, 0
push hl
ld hl, StringBuffer1
.loop
ld a, [hli]
cp "@"
jr z, .stop
cp "%"
jr z, .loop
inc c
jr .loop
.stop
pop hl
ret
InitMapSignAttrMap: ; b8115
ld de, AttrMap - TileMap
add hl, de
inc b
inc b
inc c
inc c
ld a, $87
.loop
push bc
push hl
.inner_loop
ld [hli], a
dec c
jr nz, .inner_loop
pop hl
ld de, SCREEN_WIDTH
add hl, de
pop bc
dec b
jr nz, .loop
ret
; b812f
PlaceMapNameFrame: ; b812f
hlcoord 0, 0
; top left
ld a, $61
ld [hli], a
; top row
ld a, $62
call .FillTopBottom
; top right
ld a, $64
ld [hli], a
; left, first line
ld a, $65
ld [hli], a
; first line
call .FillMiddle
; right, first line
ld a, $6b
ld [hli], a
; left, second line
ld a, $66
ld [hli], a
; second line
call .FillMiddle
; right, second line
ld a, $6c
ld [hli], a
; bottom left
ld a, $67
ld [hli], a
; bottom
ld a, $68
call .FillTopBottom
; bottom right
ld a, $6a
ld [hl], a
ret
; b815b
.FillMiddle: ; b815b
ld c, 18
ld a, $6d
.loop
ld [hli], a
dec c
jr nz, .loop
ret
; b8164
.FillTopBottom: ; b8164
ld c, 5
jr .enterloop
.continueloop
ld [hli], a
ld [hli], a
.enterloop
inc a
ld [hli], a
ld [hli], a
dec a
dec c
jr nz, .continueloop
ret
; b8172
CheckForHiddenItems: ; b8172
; Checks to see if there are hidden items on the screen that have not yet been found. If it finds one, returns carry.
call GetMapScriptHeaderBank
ld [Buffer1], a
; Get the coordinate of the bottom right corner of the screen, and load it in Buffer3/Buffer4.
ld a, [XCoord]
add SCREEN_WIDTH / 4
ld [Buffer4], a
ld a, [YCoord]
add SCREEN_HEIGHT / 4
ld [Buffer3], a
; Get the pointer for the first BG event header in the map...
ld hl, wCurrMapBGEventHeaderPointer
ld a, [hli]
ld h, [hl]
ld l, a
; ... before even checking to see if there are any BG events on this map.
ld a, [wCurrMapBGEventCount]
and a
jr z, .nobgeventitems
; For i = 1:wCurrMapBGEventCount...
.loop
; Store the counter in Buffer2, and store the BG event header pointer in the stack.
ld [Buffer2], a
push hl
; Get the Y coordinate of the BG event.
call .GetFarByte
ld e, a
; Is the Y coordinate of the BG event on the screen? If not, go to the next BG event.
ld a, [Buffer3]
sub e
jr c, .next
cp SCREEN_HEIGHT / 2
jr nc, .next
; Is the X coordinate of the BG event on the screen? If not, go to the next BG event.
call .GetFarByte
ld d, a
ld a, [Buffer4]
sub d
jr c, .next
cp SCREEN_WIDTH / 2
jr nc, .next
; Is this BG event a hidden item? If not, go to the next BG event.
call .GetFarByte
cp BGEVENT_ITEM
jr nz, .next
; Has this item already been found? If not, set off the Itemfinder.
ld a, [Buffer1]
call GetFarHalfword
ld a, [Buffer1]
call GetFarHalfword
ld d, h
ld e, l
ld b, CHECK_FLAG
call EventFlagAction
ld a, c
and a
jr z, .itemnearby
.next
; Restore the BG event header pointer and increment it by the length of a BG event header.
pop hl
ld bc, 5
add hl, bc
; Restore the BG event counter and decrement it. If it hits zero, there are no hidden items in range.
ld a, [Buffer2]
dec a
jr nz, .loop
.nobgeventitems
xor a
ret
.itemnearby
pop hl
scf
ret
; b81e2
.GetFarByte: ; b81e2
ld a, [Buffer1]
call GetFarByte
inc hl
ret
; b81ea
TreeMonEncounter: ; b81ea
farcall TrainerRankings_TreeEncounters
xor a
ld [TempWildMonSpecies], a
ld [CurPartyLevel], a
ld hl, TreeMonMaps
call GetTreeMonSet
jr nc, .no_battle
call GetTreeMons
jr nc, .no_battle
call GetTreeMon
jr nc, .no_battle
ld a, BATTLETYPE_TREE
ld [BattleType], a
ld a, 1
ld [ScriptVar], a
ret
.no_battle
xor a
ld [ScriptVar], a
ret
; b8219
RockMonEncounter: ; b8219
xor a
ld [TempWildMonSpecies], a
ld [CurPartyLevel], a
ld hl, RockMonMaps
call GetTreeMonSet
jr nc, .no_battle
call GetTreeMons
jr nc, .no_battle
; 40% chance of an encounter
ld a, 10
call RandomRange
cp 4
jr nc, .no_battle
call SelectTreeMon
jr nc, .no_battle
ret
.no_battle
xor a
ret
; b823e
db $05 ; ????
GetTreeMonSet: ; b823f
; Return carry and treemon set in a
; if the current map is in table hl.
ld a, [MapNumber]
ld e, a
ld a, [MapGroup]
ld d, a
.loop
ld a, [hli]
cp -1
jr z, .not_in_table
cp d
jr nz, .skip2
ld a, [hli]
cp e
jr nz, .skip1
jr .in_table
.skip2
inc hl
.skip1
inc hl
jr .loop
.not_in_table
xor a
ret
.in_table
ld a, [hl]
scf
ret
; b825e
INCLUDE "data/wild/treemon_maps.asm"
GetTreeMons: ; b82d2
; Return the address of TreeMon table a in hl.
; Return nc if table a doesn't exist.
cp NUM_TREEMON_SETS
jr nc, .quit
and a
jr z, .quit
ld e, a
ld d, 0
ld hl, TreeMons
add hl, de
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
scf
ret
.quit
xor a
ret
; b82e8
INCLUDE "data/wild/treemons.asm"
GetTreeMon: ; b83e5
push hl
call GetTreeScore
pop hl
and a ; TREEMON_SCORE_BAD
jr z, .bad
cp TREEMON_SCORE_GOOD
jr z, .good
cp TREEMON_SCORE_RARE
jr z, .rare
ret
.bad
; 10% chance of an encounter
ld a, 10
call RandomRange
and a
jr nz, NoTreeMon
jr SelectTreeMon
.good
; 50% chance of an encounter
ld a, 10
call RandomRange
cp 5
jr nc, NoTreeMon
jr SelectTreeMon
.rare
; 80% chance of an encounter
ld a, 10
call RandomRange
cp 8
jr nc, NoTreeMon
jr .skip
.skip
ld a, [hli]
cp -1
jr nz, .skip
call SelectTreeMon
ret
; b841f
SelectTreeMon: ; b841f
; Read a TreeMons table and pick one monster at random.
ld a, 100
call RandomRange
.loop
sub [hl]
jr c, .ok
inc hl
inc hl
inc hl
jr .loop
.ok
ld a, [hli]
cp -1
jr z, NoTreeMon
ld a, [hli]
ld [TempWildMonSpecies], a
ld a, [hl]
ld [CurPartyLevel], a
scf
ret
NoTreeMon: ; b843b
xor a
ld [TempWildMonSpecies], a
ld [CurPartyLevel], a
ret
; b8443
GetTreeScore: ; b8443
call .CoordScore
ld [Buffer1], a
call .OTIDScore
ld [Buffer2], a
ld c, a
ld a, [Buffer1]
sub c
jr z, .rare
jr nc, .ok
add 10
.ok
cp 5
jr c, .good
.bad
xor a ; TREEMON_SCORE_BAD
ret
.good
ld a, TREEMON_SCORE_GOOD
ret
.rare
ld a, TREEMON_SCORE_RARE
ret
; b8466
.CoordScore: ; b8466
call GetFacingTileCoord
ld hl, 0
ld c, e
ld b, 0
ld a, d
and a
jr z, .next
.loop
add hl, bc
dec a
jr nz, .loop
.next
add hl, bc
ld c, d
add hl, bc
ld a, h
ld [hDividend], a
ld a, l
ld [hDividend + 1], a
ld a, 5
ld [hDivisor], a
ld b, 2
call Divide
ld a, [hQuotient + 1]
ld [hDividend], a
ld a, [hQuotient + 2]
ld [hDividend + 1], a
ld a, 10
ld [hDivisor], a
ld b, 2
call Divide
ld a, [hQuotient + 3]
ret
; b849d
.OTIDScore: ; b849d
ld a, [PlayerID]
ld [hDividend], a
ld a, [PlayerID + 1]
ld [hDividend + 1], a
ld a, 10
ld [hDivisor], a
ld b, 2
call Divide
ld a, [hQuotient + 3]
ret
; b84b3
LoadFishingGFX: ; b84b3
ld a, [rVBK]
push af
ld a, $1
ld [rVBK], a
ld de, FishingGFX
ld a, [wPlayerGender]
bit 0, a
jr z, .got_gender
ld de, KrisFishingGFX
.got_gender
ld hl, vTiles0 tile $02
call .LoadGFX
ld hl, vTiles0 tile $06
call .LoadGFX
ld hl, vTiles0 tile $0a
call .LoadGFX
ld hl, vTiles1 tile $7c
call .LoadGFX
pop af
ld [rVBK], a
ret
; b84e3
.LoadGFX: ; b84e3
lb bc, BANK(FishingGFX), 2
push de
call Get2bpp
pop de
ld hl, 2 tiles
add hl, de
ld d, h
ld e, l
ret
; b84f2
FishingGFX: ; b84f2
INCBIN "gfx/overworld/chris_fish.2bpp"
; b8582
KrisFishingGFX: ; b8582
INCBIN "gfx/overworld/kris_fish.2bpp"
; b8612

View File

@ -353,7 +353,7 @@ InitializeBackground: ; 10ef06
ld [hli], a ; tile id
inc e
inc e
ld a, 0 | BEHIND_BG
ld a, 0 | PRIORITY
ld [hli], a ; attributes
dec c
jr nz, .loop2

View File

@ -373,7 +373,10 @@ INCLUDE "data/phone/text/erin_overworld.asm"
SECTION "bank2E", ROMX
INCLUDE "engine/events_3.asm"
INCLUDE "engine/events/map_name_sign.asm"
INCLUDE "engine/events/checkforhiddenitems.asm"
INCLUDE "engine/events/treemons.asm"
INCLUDE "gfx/fishing.asm"
INCLUDE "engine/radio.asm"
INCLUDE "engine/mail_2.asm"