diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/constants/animation_constants.asm | 14 | ||||
-rw-r--r-- | src/constants/map_constants.asm | 13 | ||||
-rw-r--r-- | src/data/map_headers.asm | 68 | ||||
-rw-r--r-- | src/data/map_ow_frameset_pointers.asm | 37 | ||||
-rw-r--r-- | src/data/map_ow_framesets.asm | 245 | ||||
-rw-r--r-- | src/engine/bank01.asm | 2 | ||||
-rw-r--r-- | src/engine/bank03.asm | 6 | ||||
-rw-r--r-- | src/engine/bank04.asm | 121 | ||||
-rw-r--r-- | src/engine/bank06.asm | 2 | ||||
-rw-r--r-- | src/engine/bank07.asm | 5 | ||||
-rw-r--r-- | src/engine/bank1c.asm | 65 | ||||
-rw-r--r-- | src/engine/bank20.asm | 400 | ||||
-rw-r--r-- | src/engine/home.asm | 8 | ||||
-rw-r--r-- | src/sram.asm | 105 | ||||
-rw-r--r-- | src/wram.asm | 38 |
15 files changed, 1042 insertions, 87 deletions
diff --git a/src/constants/animation_constants.asm b/src/constants/animation_constants.asm index 80c425d..16f534f 100644 --- a/src/constants/animation_constants.asm +++ b/src/constants/animation_constants.asm @@ -152,3 +152,17 @@ const_value = const_value + 1 const DUEL_ANIM_STRUCT_UNKNOWN_2 ; $6 const DUEL_ANIM_STRUCT_BANK ; $7 DUEL_ANIM_STRUCT_SIZE EQU const_value + + ; ow_frame struct constants + const_def + const OW_FRAME_STRUCT_DURATION ; $0 + const OW_FRAME_STRUCT_VRAM_TILE_OFFSET ; $1 + const OW_FRAME_STRUCT_VRAM_BANK ; $2 + const OW_FRAME_STRUCT_TILESET_BANK ; $3 + const OW_FRAME_STRUCT_TILESET ; $4 +const_value = const_value + 1 + const OW_FRAME_STRUCT_TILESET_OFFSET ; $6 +const_value = const_value + 1 +OW_FRAME_STRUCT_SIZE EQU const_value + +NUM_OW_FRAMESET_SUBGROUPS EQU 3 diff --git a/src/constants/map_constants.asm b/src/constants/map_constants.asm index c536b13..84656c4 100644 --- a/src/constants/map_constants.asm +++ b/src/constants/map_constants.asm @@ -65,3 +65,16 @@ MAP_SCRIPT_LOAD_MAP EQU $08 MAP_SCRIPT_AFTER_DUEL EQU $0a MAP_SCRIPT_MOVED_PLAYER EQU $0c MAP_SCRIPT_CLOSE_TEXTBOX EQU $0e + +; map palettes for use in SGB mode + const_def 1 + const MAP_SGB_PALETTE_1 ; $1 + const MAP_SGB_PALETTE_2 ; $2 + const MAP_SGB_PALETTE_3 ; $3 + const MAP_SGB_PALETTE_4 ; $4 + const MAP_SGB_PALETTE_5 ; $5 + const MAP_SGB_PALETTE_6 ; $6 + const MAP_SGB_PALETTE_7 ; $7 + const MAP_SGB_PALETTE_8 ; $8 + const MAP_SGB_PALETTE_9 ; $9 + const MAP_SGB_PALETTE_10 ; $a diff --git a/src/data/map_headers.asm b/src/data/map_headers.asm index 3204bbf..cf91df2 100644 --- a/src/data/map_headers.asm +++ b/src/data/map_headers.asm @@ -1,37 +1,37 @@ ; TODO: figure out the rest of the data for each map ; related to the table at 20:4e5d MapHeaders: ; 1c374 (7:4374) - db TILEMAP_OVERWORLD_MAP, TILEMAP_OVERWORLD_MAP_CGB, $00, $01, $01, MUSIC_OVERWORLD ; OVERWORLD_MAP - db TILEMAP_MASON_LABORATORY, TILEMAP_MASON_LABORATORY_CGB, $00, $02, $02, MUSIC_OVERWORLD ; MASON_LABORATORY - db TILEMAP_DECK_MACHINE_ROOM, TILEMAP_DECK_MACHINE_ROOM_CGB, $00, $02, $02, MUSIC_OVERWORLD ; DECK_MACHINE_ROOM - db TILEMAP_ISHIHARA, TILEMAP_ISHIHARA_CGB, $00, $03, $03, MUSIC_OVERWORLD ; ISHIHARAS_HOUSE - db TILEMAP_FIGHTING_CLUB_ENTRANCE, TILEMAP_FIGHTING_CLUB_ENTRANCE_CGB, $00, $03, $04, MUSIC_OVERWORLD ; FIGHTING_CLUB_ENTRANCE - db TILEMAP_CLUB_LOBBY, TILEMAP_CLUB_LOBBY_CGB, $00, $03, $0c, MUSIC_OVERWORLD ; FIGHTING_CLUB_LOBBY - db TILEMAP_FIGHTING_CLUB, TILEMAP_FIGHTING_CLUB_CGB, $00, $04, $0d, MUSIC_CLUB_3 ; FIGHTING_CLUB - db TILEMAP_ROCK_CLUB_ENTRANCE, TILEMAP_ROCK_CLUB_ENTRANCE_CGB, $00, $03, $05, MUSIC_OVERWORLD ; ROCK_CLUB_ENTRANCE - db TILEMAP_CLUB_LOBBY, TILEMAP_CLUB_LOBBY_CGB, $00, $03, $0c, MUSIC_OVERWORLD ; ROCK_CLUB_LOBBY - db TILEMAP_ROCK_CLUB, TILEMAP_ROCK_CLUB_CGB, $00, $04, $0e, MUSIC_CLUB_2 ; ROCK_CLUB - db TILEMAP_WATER_CLUB_ENTRANCE, TILEMAP_WATER_CLUB_ENTRANCE_CGB, $00, $03, $06, MUSIC_OVERWORLD ; WATER_CLUB_ENTRANCE - db TILEMAP_CLUB_LOBBY, TILEMAP_CLUB_LOBBY_CGB, $00, $03, $0c, MUSIC_OVERWORLD ; WATER_CLUB_LOBBY - db TILEMAP_WATER_CLUB, TILEMAP_WATER_CLUB_CGB, $00, $02, $0f, MUSIC_CLUB_2 ; WATER_CLUB - db TILEMAP_LIGHTNING_CLUB_ENTRANCE, TILEMAP_LIGHTNING_CLUB_ENTRANCE_CGB, $00, $03, $07, MUSIC_OVERWORLD ; LIGHTNING_CLUB_ENTRANCE - db TILEMAP_CLUB_LOBBY, TILEMAP_CLUB_LOBBY_CGB, $00, $03, $0c, MUSIC_OVERWORLD ; LIGHTNING_CLUB_LOBBY - db TILEMAP_LIGHTNING_CLUB, TILEMAP_LIGHTNING_CLUB_CGB, $00, $05, $10, MUSIC_CLUB_1 ; LIGHTNING_CLUB - db TILEMAP_GRASS_CLUB_ENTRANCE, TILEMAP_GRASS_CLUB_ENTRANCE_CGB, $00, $03, $08, MUSIC_OVERWORLD ; GRASS_CLUB_ENTRANCE - db TILEMAP_CLUB_LOBBY, TILEMAP_CLUB_LOBBY_CGB, $00, $03, $0c, MUSIC_OVERWORLD ; GRASS_CLUB_LOBBY - db TILEMAP_GRASS_CLUB, TILEMAP_GRASS_CLUB_CGB, $00, $06, $11, MUSIC_CLUB_1 ; GRASS_CLUB - db TILEMAP_PSYCHIC_CLUB_ENTRANCE, TILEMAP_PSYCHIC_CLUB_ENTRANCE_CGB, $00, $03, $09, MUSIC_OVERWORLD ; PSYCHIC_CLUB_ENTRANCE - db TILEMAP_CLUB_LOBBY, TILEMAP_CLUB_LOBBY_CGB, $00, $03, $0c, MUSIC_OVERWORLD ; PSYCHIC_CLUB_LOBBY - db TILEMAP_PSYCHIC_CLUB, TILEMAP_PSYCHIC_CLUB_CGB, $00, $07, $12, MUSIC_CLUB_2 ; PSYCHIC_CLUB - db TILEMAP_SCIENCE_CLUB_ENTRANCE, TILEMAP_SCIENCE_CLUB_ENTRANCE_CGB, $00, $03, $0a, MUSIC_OVERWORLD ; SCIENCE_CLUB_ENTRANCE - db TILEMAP_CLUB_LOBBY, TILEMAP_CLUB_LOBBY_CGB, $00, $03, $0c, MUSIC_OVERWORLD ; SCIENCE_CLUB_LOBBY - db TILEMAP_SCIENCE_CLUB, TILEMAP_SCIENCE_CLUB_CGB, $00, $06, $13, MUSIC_CLUB_3 ; SCIENCE_CLUB - db TILEMAP_FIRE_CLUB_ENTRANCE, TILEMAP_FIRE_CLUB_ENTRANCE_CGB, $00, $03, $0b, MUSIC_OVERWORLD ; FIRE_CLUB_ENTRANCE - db TILEMAP_CLUB_LOBBY, TILEMAP_CLUB_LOBBY_CGB, $00, $03, $0c, MUSIC_OVERWORLD ; FIRE_CLUB_LOBBY - db TILEMAP_FIRE_CLUB, TILEMAP_FIRE_CLUB_CGB, $00, $08, $14, MUSIC_CLUB_3 ; FIRE_CLUB - db TILEMAP_CHALLENGE_HALL_ENTRANCE, TILEMAP_CHALLENGE_HALL_ENTRANCE_CGB, $00, $03, $04, MUSIC_OVERWORLD ; CHALLENGE_HALL_ENTRANCE - db TILEMAP_CLUB_LOBBY, TILEMAP_CLUB_LOBBY_CGB, $00, $03, $0c, MUSIC_OVERWORLD ; CHALLENGE_HALL_LOBBY - db TILEMAP_CHALLENGE_HALL, TILEMAP_CHALLENGE_HALL_CGB, $00, $09, $15, MUSIC_OVERWORLD ; CHALLENGE_HALL - db TILEMAP_POKEMON_DOME_ENTRANCE, TILEMAP_POKEMON_DOME_ENTRANCE_CGB, $00, $0a, $16, MUSIC_OVERWORLD ; POKEMON_DOME_ENTRANCE - db TILEMAP_POKEMON_DOME, TILEMAP_POKEMON_DOME_CGB, $00, $0a, $17, MUSIC_POKEMON_DOME ; POKEMON_DOME - db TILEMAP_HALL_OF_HONOR, TILEMAP_HALL_OF_HONOR_CGB, $00, $0a, $18, MUSIC_HALL_OF_HONOR ; HALL_OF_HONOR + db TILEMAP_OVERWORLD_MAP, TILEMAP_OVERWORLD_MAP_CGB, $00, MAP_SGB_PALETTE_1, $01, MUSIC_OVERWORLD ; OVERWORLD_MAP + db TILEMAP_MASON_LABORATORY, TILEMAP_MASON_LABORATORY_CGB, $00, MAP_SGB_PALETTE_2, $02, MUSIC_OVERWORLD ; MASON_LABORATORY + db TILEMAP_DECK_MACHINE_ROOM, TILEMAP_DECK_MACHINE_ROOM_CGB, $00, MAP_SGB_PALETTE_2, $02, MUSIC_OVERWORLD ; DECK_MACHINE_ROOM + db TILEMAP_ISHIHARA, TILEMAP_ISHIHARA_CGB, $00, MAP_SGB_PALETTE_3, $03, MUSIC_OVERWORLD ; ISHIHARAS_HOUSE + db TILEMAP_FIGHTING_CLUB_ENTRANCE, TILEMAP_FIGHTING_CLUB_ENTRANCE_CGB, $00, MAP_SGB_PALETTE_3, $04, MUSIC_OVERWORLD ; FIGHTING_CLUB_ENTRANCE + db TILEMAP_CLUB_LOBBY, TILEMAP_CLUB_LOBBY_CGB, $00, MAP_SGB_PALETTE_3, $0c, MUSIC_OVERWORLD ; FIGHTING_CLUB_LOBBY + db TILEMAP_FIGHTING_CLUB, TILEMAP_FIGHTING_CLUB_CGB, $00, MAP_SGB_PALETTE_4, $0d, MUSIC_CLUB_3 ; FIGHTING_CLUB + db TILEMAP_ROCK_CLUB_ENTRANCE, TILEMAP_ROCK_CLUB_ENTRANCE_CGB, $00, MAP_SGB_PALETTE_3, $05, MUSIC_OVERWORLD ; ROCK_CLUB_ENTRANCE + db TILEMAP_CLUB_LOBBY, TILEMAP_CLUB_LOBBY_CGB, $00, MAP_SGB_PALETTE_3, $0c, MUSIC_OVERWORLD ; ROCK_CLUB_LOBBY + db TILEMAP_ROCK_CLUB, TILEMAP_ROCK_CLUB_CGB, $00, MAP_SGB_PALETTE_4, $0e, MUSIC_CLUB_2 ; ROCK_CLUB + db TILEMAP_WATER_CLUB_ENTRANCE, TILEMAP_WATER_CLUB_ENTRANCE_CGB, $00, MAP_SGB_PALETTE_3, $06, MUSIC_OVERWORLD ; WATER_CLUB_ENTRANCE + db TILEMAP_CLUB_LOBBY, TILEMAP_CLUB_LOBBY_CGB, $00, MAP_SGB_PALETTE_3, $0c, MUSIC_OVERWORLD ; WATER_CLUB_LOBBY + db TILEMAP_WATER_CLUB, TILEMAP_WATER_CLUB_CGB, $00, MAP_SGB_PALETTE_2, $0f, MUSIC_CLUB_2 ; WATER_CLUB + db TILEMAP_LIGHTNING_CLUB_ENTRANCE, TILEMAP_LIGHTNING_CLUB_ENTRANCE_CGB, $00, MAP_SGB_PALETTE_3, $07, MUSIC_OVERWORLD ; LIGHTNING_CLUB_ENTRANCE + db TILEMAP_CLUB_LOBBY, TILEMAP_CLUB_LOBBY_CGB, $00, MAP_SGB_PALETTE_3, $0c, MUSIC_OVERWORLD ; LIGHTNING_CLUB_LOBBY + db TILEMAP_LIGHTNING_CLUB, TILEMAP_LIGHTNING_CLUB_CGB, $00, MAP_SGB_PALETTE_5, $10, MUSIC_CLUB_1 ; LIGHTNING_CLUB + db TILEMAP_GRASS_CLUB_ENTRANCE, TILEMAP_GRASS_CLUB_ENTRANCE_CGB, $00, MAP_SGB_PALETTE_3, $08, MUSIC_OVERWORLD ; GRASS_CLUB_ENTRANCE + db TILEMAP_CLUB_LOBBY, TILEMAP_CLUB_LOBBY_CGB, $00, MAP_SGB_PALETTE_3, $0c, MUSIC_OVERWORLD ; GRASS_CLUB_LOBBY + db TILEMAP_GRASS_CLUB, TILEMAP_GRASS_CLUB_CGB, $00, MAP_SGB_PALETTE_6, $11, MUSIC_CLUB_1 ; GRASS_CLUB + db TILEMAP_PSYCHIC_CLUB_ENTRANCE, TILEMAP_PSYCHIC_CLUB_ENTRANCE_CGB, $00, MAP_SGB_PALETTE_3, $09, MUSIC_OVERWORLD ; PSYCHIC_CLUB_ENTRANCE + db TILEMAP_CLUB_LOBBY, TILEMAP_CLUB_LOBBY_CGB, $00, MAP_SGB_PALETTE_3, $0c, MUSIC_OVERWORLD ; PSYCHIC_CLUB_LOBBY + db TILEMAP_PSYCHIC_CLUB, TILEMAP_PSYCHIC_CLUB_CGB, $00, MAP_SGB_PALETTE_7, $12, MUSIC_CLUB_2 ; PSYCHIC_CLUB + db TILEMAP_SCIENCE_CLUB_ENTRANCE, TILEMAP_SCIENCE_CLUB_ENTRANCE_CGB, $00, MAP_SGB_PALETTE_3, $0a, MUSIC_OVERWORLD ; SCIENCE_CLUB_ENTRANCE + db TILEMAP_CLUB_LOBBY, TILEMAP_CLUB_LOBBY_CGB, $00, MAP_SGB_PALETTE_3, $0c, MUSIC_OVERWORLD ; SCIENCE_CLUB_LOBBY + db TILEMAP_SCIENCE_CLUB, TILEMAP_SCIENCE_CLUB_CGB, $00, MAP_SGB_PALETTE_6, $13, MUSIC_CLUB_3 ; SCIENCE_CLUB + db TILEMAP_FIRE_CLUB_ENTRANCE, TILEMAP_FIRE_CLUB_ENTRANCE_CGB, $00, MAP_SGB_PALETTE_3, $0b, MUSIC_OVERWORLD ; FIRE_CLUB_ENTRANCE + db TILEMAP_CLUB_LOBBY, TILEMAP_CLUB_LOBBY_CGB, $00, MAP_SGB_PALETTE_3, $0c, MUSIC_OVERWORLD ; FIRE_CLUB_LOBBY + db TILEMAP_FIRE_CLUB, TILEMAP_FIRE_CLUB_CGB, $00, MAP_SGB_PALETTE_8, $14, MUSIC_CLUB_3 ; FIRE_CLUB + db TILEMAP_CHALLENGE_HALL_ENTRANCE, TILEMAP_CHALLENGE_HALL_ENTRANCE_CGB, $00, MAP_SGB_PALETTE_3, $04, MUSIC_OVERWORLD ; CHALLENGE_HALL_ENTRANCE + db TILEMAP_CLUB_LOBBY, TILEMAP_CLUB_LOBBY_CGB, $00, MAP_SGB_PALETTE_3, $0c, MUSIC_OVERWORLD ; CHALLENGE_HALL_LOBBY + db TILEMAP_CHALLENGE_HALL, TILEMAP_CHALLENGE_HALL_CGB, $00, MAP_SGB_PALETTE_9, $15, MUSIC_OVERWORLD ; CHALLENGE_HALL + db TILEMAP_POKEMON_DOME_ENTRANCE, TILEMAP_POKEMON_DOME_ENTRANCE_CGB, $00, MAP_SGB_PALETTE_10, $16, MUSIC_OVERWORLD ; POKEMON_DOME_ENTRANCE + db TILEMAP_POKEMON_DOME, TILEMAP_POKEMON_DOME_CGB, $00, MAP_SGB_PALETTE_10, $17, MUSIC_POKEMON_DOME ; POKEMON_DOME + db TILEMAP_HALL_OF_HONOR, TILEMAP_HALL_OF_HONOR_CGB, $00, MAP_SGB_PALETTE_10, $18, MUSIC_HALL_OF_HONOR ; HALL_OF_HONOR diff --git a/src/data/map_ow_frameset_pointers.asm b/src/data/map_ow_frameset_pointers.asm new file mode 100644 index 0000000..3210533 --- /dev/null +++ b/src/data/map_ow_frameset_pointers.asm @@ -0,0 +1,37 @@ +MapOWFramesetPointers: ; 805d6 (20:45d6)
+; non-cgb, cgb
+ dw OverworldMapOWFrameset, OverworldMapCGBOWFrameset ; OVERWORLD_MAP
+ dw MasonLaboratoryOWFrameset, MasonLaboratoryOWFrameset ; MASON_LABORATORY
+ dw DeckMachineRoomOWFrameset, DeckMachineRoomCGBOWFrameset ; DECK_MACHINE_ROOM
+ dw DefaultOWFrameset, DefaultOWFrameset ; ISHIHARAS_HOUSE
+ dw DefaultOWFrameset, DefaultOWFrameset ; FIGHTING_CLUB_ENTRANCE
+ dw DefaultOWFrameset, DefaultOWFrameset ; FIGHTING_CLUB_LOBBY
+ dw DefaultOWFrameset, DefaultOWFrameset ; FIGHTING_CLUB
+ dw DefaultOWFrameset, DefaultOWFrameset ; ROCK_CLUB_ENTRANCE
+ dw DefaultOWFrameset, DefaultOWFrameset ; ROCK_CLUB_LOBBY
+ dw DefaultOWFrameset, DefaultOWFrameset ; ROCK_CLUB
+ dw DefaultOWFrameset, DefaultOWFrameset ; WATER_CLUB_ENTRANCE
+ dw DefaultOWFrameset, DefaultOWFrameset ; WATER_CLUB_LOBBY
+ dw WaterClubOWFrameset, WaterClubOWFrameset ; WATER_CLUB
+ dw DefaultOWFrameset, DefaultOWFrameset ; LIGHTNING_CLUB_ENTRANCE
+ dw DefaultOWFrameset, DefaultOWFrameset ; LIGHTNING_CLUB_LOBBY
+ dw LightningClubOWFrameset, LightningClubOWFrameset ; LIGHTNING_CLUB
+ dw DefaultOWFrameset, DefaultOWFrameset ; GRASS_CLUB_ENTRANCE
+ dw DefaultOWFrameset, DefaultOWFrameset ; GRASS_CLUB_LOBBY
+ dw DefaultOWFrameset, DefaultOWFrameset ; GRASS_CLUB
+ dw DefaultOWFrameset, DefaultOWFrameset ; PSYCHIC_CLUB_ENTRANCE
+ dw DefaultOWFrameset, DefaultOWFrameset ; PSYCHIC_CLUB_LOBBY
+ dw DefaultOWFrameset, DefaultOWFrameset ; PSYCHIC_CLUB
+ dw DefaultOWFrameset, DefaultOWFrameset ; SCIENCE_CLUB_ENTRANCE
+ dw DefaultOWFrameset, DefaultOWFrameset ; SCIENCE_CLUB_LOBBY
+ dw ScienceClubOWFrameset, ScienceClubOWFrameset ; SCIENCE_CLUB
+ dw DefaultOWFrameset, DefaultOWFrameset ; FIRE_CLUB_ENTRANCE
+ dw DefaultOWFrameset, DefaultOWFrameset ; FIRE_CLUB_LOBBY
+ dw FireClubOWFrameset, FireClubCGBOWFrameset ; FIRE_CLUB
+ dw DefaultOWFrameset, DefaultOWFrameset ; CHALLENGE_HALL_ENTRANCE
+ dw DefaultOWFrameset, DefaultOWFrameset ; CHALLENGE_HALL_LOBBY
+ dw ChallengeHallOWFrameset, ChallengeHallOWFrameset ; CHALLENGE_HALL
+ dw DefaultOWFrameset, DefaultOWFrameset ; POKEMON_DOME_ENTRANCE
+ dw DefaultOWFrameset, DefaultOWFrameset ; POKEMON_DOME
+ dw HallOfHonorOWFrameset, HallOfHonorOWFrameset ; HALL_OF_HONOR
+; 0x8065e
diff --git a/src/data/map_ow_framesets.asm b/src/data/map_ow_framesets.asm new file mode 100644 index 0000000..dec17be --- /dev/null +++ b/src/data/map_ow_framesets.asm @@ -0,0 +1,245 @@ +; each map has two corresponding OW framesets, for non-CGB and CGB respectively
+; within each frameset there is a header which contains relative
+; offsets to each frameset subgroup, for a total of 3
+; (in fact, only the first subgroup is effectively used,
+; the other two always point to end of data, -1)
+; inside a subgroup, some OW frames are defined with data
+; regarding its duration, and which tile to substitute
+; each OW frame defines 1 single tile to substitute, however
+; frames with duration of 0 are processed at the same time as previous ones,
+; so several tiles can be changed concurrently
+
+INCLUDE "data/map_ow_frameset_pointers.asm"
+
+; OW_FRAME_STRUCT (see constants/animation_constants.asm)
+; \1 = duration
+; \2 = VRAM tile offset
+; \3 = VRAM bank
+; \4 = tileset
+; \5 = tileset offset
+ow_frame: MACRO
+ db \1
+ db \2
+ db \3
+ dbw BANK(\4) - BANK(MapOWFramesetPointers), \4 + $2
+ dw \5
+ENDM
+
+DefaultOWFrameset: ; 8055e (20:455e)
+ db $3, $3, $3
+ db -1 ; end
+
+OverworldMapOWFrameset: ; 80662 (20:4662)
+ db $3, $33, $33
+
+ ow_frame 7, $f3, 0, OverworldMapTiles, $73
+ ow_frame 7, $f4, 0, OverworldMapTiles, $74
+ ow_frame 7, $f3, 0, OverworldMapTiles, $74
+ ow_frame 7, $f4, 0, OverworldMapTiles, $75
+ ow_frame 7, $f3, 0, OverworldMapTiles, $75
+ ow_frame 7, $f4, 0, OverworldMapTiles, $73
+ db -1 ; end
+
+OverworldMapCGBOWFrameset: ; 80696 (20:4696)
+ db $3, $ab, $ab
+
+ ow_frame 4, $f3, 0, OverworldMapTiles, $73
+ ow_frame 4, $f4, 0, OverworldMapTiles, $74
+ ow_frame 4, $18, 1, OverworldMapTiles, $98
+ ow_frame 0, $19, 1, OverworldMapTiles, $99
+ ow_frame 0, $1a, 1, OverworldMapTiles, $9a
+ ow_frame 0, $1b, 1, OverworldMapTiles, $9b
+ ow_frame 0, $1c, 1, OverworldMapTiles, $9c
+ ow_frame 4, $f3, 0, OverworldMapTiles, $74
+ ow_frame 4, $f4, 0, OverworldMapTiles, $75
+ ow_frame 4, $18, 1, OverworldMapTiles, $9d
+ ow_frame 0, $19, 1, OverworldMapTiles, $9e
+ ow_frame 0, $1a, 1, OverworldMapTiles, $9f
+ ow_frame 0, $1b, 1, OverworldMapTiles, $a0
+ ow_frame 0, $1c, 1, OverworldMapTiles, $a1
+ ow_frame 7, $f3, 0, OverworldMapTiles, $75
+ ow_frame 7, $f4, 0, OverworldMapTiles, $73
+ ow_frame 4, $18, 1, OverworldMapTiles, $a2
+ ow_frame 0, $19, 1, OverworldMapTiles, $a3
+ ow_frame 0, $1a, 1, OverworldMapTiles, $a4
+ ow_frame 0, $1b, 1, OverworldMapTiles, $a5
+ ow_frame 0, $1c, 1, OverworldMapTiles, $a6
+ db -1 ; end
+
+MasonLaboratoryOWFrameset: ; 80742 (20:4742)
+ db $3, $43, $43
+
+ ow_frame 3, $dc, 0, MasonLaboratoryTilesetGfx, $5c
+ ow_frame 0, $dd, 0, MasonLaboratoryTilesetGfx, $5d
+ ow_frame 3, $de, 0, MasonLaboratoryTilesetGfx, $5e
+ ow_frame 0, $df, 0, MasonLaboratoryTilesetGfx, $5f
+ ow_frame 3, $dc, 0, MasonLaboratoryTilesetGfx, $60
+ ow_frame 0, $dd, 0, MasonLaboratoryTilesetGfx, $61
+ ow_frame 3, $de, 0, MasonLaboratoryTilesetGfx, $62
+ ow_frame 0, $df, 0, MasonLaboratoryTilesetGfx, $63
+ db -1 ; end
+
+DeckMachineRoomOWFrameset: ; 80786 (20:4786)
+ db $3, $83, $83
+
+ ow_frame 3, $dc, 0, MasonLaboratoryTilesetGfx, $5c
+ ow_frame 0, $dd, 0, MasonLaboratoryTilesetGfx, $5d
+ ow_frame 3, $de, 0, MasonLaboratoryTilesetGfx, $5e
+ ow_frame 0, $df, 0, MasonLaboratoryTilesetGfx, $5f
+ ow_frame 5, $e4, 0, MasonLaboratoryTilesetGfx, $64
+ ow_frame 0, $e5, 0, MasonLaboratoryTilesetGfx, $65
+ ow_frame 0, $e6, 0, MasonLaboratoryTilesetGfx, $66
+ ow_frame 0, $e7, 0, MasonLaboratoryTilesetGfx, $67
+ ow_frame 3, $dc, 0, MasonLaboratoryTilesetGfx, $60
+ ow_frame 0, $dd, 0, MasonLaboratoryTilesetGfx, $61
+ ow_frame 3, $de, 0, MasonLaboratoryTilesetGfx, $62
+ ow_frame 0, $df, 0, MasonLaboratoryTilesetGfx, $63
+ ow_frame 5, $e4, 0, MasonLaboratoryTilesetGfx, $68
+ ow_frame 0, $e5, 0, MasonLaboratoryTilesetGfx, $69
+ ow_frame 0, $e6, 0, MasonLaboratoryTilesetGfx, $6a
+ ow_frame 0, $e7, 0, MasonLaboratoryTilesetGfx, $6b
+ db -1 ; end
+
+DeckMachineRoomCGBOWFrameset: ; 8080a (20:480a)
+ db $3, $83, $83
+
+ ow_frame 3, $dc, 0, MasonLaboratoryTilesetGfx, $5c
+ ow_frame 0, $dd, 0, MasonLaboratoryTilesetGfx, $5d
+ ow_frame 3, $de, 0, MasonLaboratoryTilesetGfx, $5e
+ ow_frame 0, $df, 0, MasonLaboratoryTilesetGfx, $5f
+ ow_frame 5, $03, 1, MasonLaboratoryTilesetGfx, $83
+ ow_frame 0, $04, 1, MasonLaboratoryTilesetGfx, $84
+ ow_frame 0, $05, 1, MasonLaboratoryTilesetGfx, $85
+ ow_frame 0, $06, 1, MasonLaboratoryTilesetGfx, $86
+ ow_frame 3, $dc, 0, MasonLaboratoryTilesetGfx, $60
+ ow_frame 0, $dd, 0, MasonLaboratoryTilesetGfx, $61
+ ow_frame 3, $de, 0, MasonLaboratoryTilesetGfx, $62
+ ow_frame 0, $df, 0, MasonLaboratoryTilesetGfx, $63
+ ow_frame 5, $03, 1, MasonLaboratoryTilesetGfx, $87
+ ow_frame 0, $04, 1, MasonLaboratoryTilesetGfx, $88
+ ow_frame 0, $05, 1, MasonLaboratoryTilesetGfx, $89
+ ow_frame 0, $06, 1, MasonLaboratoryTilesetGfx, $8a
+ db -1 ; end
+
+FireClubOWFrameset: ; 8088e (20:488e)
+ db $3, $83, $83
+
+ ow_frame 5, $9f, 0, FireClubTilesetGfx, $1f
+ ow_frame 0, $a0, 0, FireClubTilesetGfx, $20
+ ow_frame 0, $a1, 0, FireClubTilesetGfx, $21
+ ow_frame 0, $a2, 0, FireClubTilesetGfx, $22
+ ow_frame 6, $a3, 0, FireClubTilesetGfx, $23
+ ow_frame 0, $a4, 0, FireClubTilesetGfx, $24
+ ow_frame 0, $a5, 0, FireClubTilesetGfx, $25
+ ow_frame 0, $a6, 0, FireClubTilesetGfx, $26
+ ow_frame 5, $9f, 0, FireClubTilesetGfx, $27
+ ow_frame 0, $a0, 0, FireClubTilesetGfx, $28
+ ow_frame 0, $a1, 0, FireClubTilesetGfx, $29
+ ow_frame 0, $a2, 0, FireClubTilesetGfx, $2a
+ ow_frame 6, $a3, 0, FireClubTilesetGfx, $2b
+ ow_frame 0, $a4, 0, FireClubTilesetGfx, $2c
+ ow_frame 0, $a5, 0, FireClubTilesetGfx, $2d
+ ow_frame 0, $a6, 0, FireClubTilesetGfx, $2e
+ db -1 ; end
+
+FireClubCGBOWFrameset: ; 80912 (20:4912)
+ db $3, $83, $83
+
+ ow_frame 5, $bb, 0, FireClubTilesetGfx, $3b
+ ow_frame 0, $bc, 0, FireClubTilesetGfx, $3c
+ ow_frame 0, $bd, 0, FireClubTilesetGfx, $3d
+ ow_frame 0, $be, 0, FireClubTilesetGfx, $3e
+ ow_frame 6, $bf, 0, FireClubTilesetGfx, $3f
+ ow_frame 0, $c0, 0, FireClubTilesetGfx, $40
+ ow_frame 0, $c1, 0, FireClubTilesetGfx, $41
+ ow_frame 0, $c2, 0, FireClubTilesetGfx, $42
+ ow_frame 5, $bb, 0, FireClubTilesetGfx, $43
+ ow_frame 0, $bc, 0, FireClubTilesetGfx, $44
+ ow_frame 0, $bd, 0, FireClubTilesetGfx, $45
+ ow_frame 0, $be, 0, FireClubTilesetGfx, $46
+ ow_frame 6, $bf, 0, FireClubTilesetGfx, $47
+ ow_frame 0, $c0, 0, FireClubTilesetGfx, $48
+ ow_frame 0, $c1, 0, FireClubTilesetGfx, $49
+ ow_frame 0, $c2, 0, FireClubTilesetGfx, $4a
+ db -1 ; end
+
+WaterClubOWFrameset: ; 80996 (20:4996)
+ db $3, $c3, $c3
+
+ ow_frame 1, $e2, 0, WaterClubTilesetGfx, $62
+ ow_frame 1, $e3, 0, WaterClubTilesetGfx, $63
+ ow_frame 3, $e4, 0, WaterClubTilesetGfx, $64
+ ow_frame 0, $e5, 0, WaterClubTilesetGfx, $65
+ ow_frame 3, $e6, 0, WaterClubTilesetGfx, $66
+ ow_frame 0, $e7, 0, WaterClubTilesetGfx, $67
+ ow_frame 1, $e2, 0, WaterClubTilesetGfx, $68
+ ow_frame 1, $e3, 0, WaterClubTilesetGfx, $69
+ ow_frame 3, $e4, 0, WaterClubTilesetGfx, $6a
+ ow_frame 0, $e5, 0, WaterClubTilesetGfx, $6b
+ ow_frame 3, $e6, 0, WaterClubTilesetGfx, $6c
+ ow_frame 0, $e7, 0, WaterClubTilesetGfx, $6d
+ ow_frame 1, $e2, 0, WaterClubTilesetGfx, $62
+ ow_frame 1, $e3, 0, WaterClubTilesetGfx, $63
+ ow_frame 3, $e4, 0, WaterClubTilesetGfx, $64
+ ow_frame 0, $e5, 0, WaterClubTilesetGfx, $65
+ ow_frame 3, $e6, 0, WaterClubTilesetGfx, $66
+ ow_frame 0, $e7, 0, WaterClubTilesetGfx, $67
+ ow_frame 1, $e2, 0, WaterClubTilesetGfx, $6e
+ ow_frame 1, $e3, 0, WaterClubTilesetGfx, $6f
+ ow_frame 3, $e4, 0, WaterClubTilesetGfx, $70
+ ow_frame 0, $e5, 0, WaterClubTilesetGfx, $71
+ ow_frame 3, $e6, 0, WaterClubTilesetGfx, $72
+ ow_frame 0, $e7, 0, WaterClubTilesetGfx, $73
+ db -1 ; end
+
+LightningClubOWFrameset: ; 80a5a (20:4a5a)
+ db $3, $c3, $c3
+
+ ow_frame 10, $a2, 0, LightningClubTilesetGfx, $22
+ ow_frame 0, $a3, 0, LightningClubTilesetGfx, $23
+ ow_frame 0, $aa, 0, LightningClubTilesetGfx, $2a
+ ow_frame 0, $ab, 0, LightningClubTilesetGfx, $2b
+ ow_frame 4, $a5, 0, LightningClubTilesetGfx, $25
+ ow_frame 0, $a6, 0, LightningClubTilesetGfx, $26
+ ow_frame 0, $ac, 0, LightningClubTilesetGfx, $2c
+ ow_frame 0, $ad, 0, LightningClubTilesetGfx, $2d
+ ow_frame 4, $a7, 0, LightningClubTilesetGfx, $27
+ ow_frame 0, $a8, 0, LightningClubTilesetGfx, $28
+ ow_frame 0, $b0, 0, LightningClubTilesetGfx, $30
+ ow_frame 0, $b1, 0, LightningClubTilesetGfx, $31
+ ow_frame 10, $a2, 0, LightningClubTilesetGfx, $2a
+ ow_frame 0, $a3, 0, LightningClubTilesetGfx, $2b
+ ow_frame 0, $aa, 0, LightningClubTilesetGfx, $22
+ ow_frame 0, $ab, 0, LightningClubTilesetGfx, $23
+ ow_frame 4, $a5, 0, LightningClubTilesetGfx, $2d
+ ow_frame 0, $a6, 0, LightningClubTilesetGfx, $2e
+ ow_frame 0, $ac, 0, LightningClubTilesetGfx, $24
+ ow_frame 0, $ad, 0, LightningClubTilesetGfx, $25
+ ow_frame 4, $a7, 0, LightningClubTilesetGfx, $2f
+ ow_frame 0, $a8, 0, LightningClubTilesetGfx, $30
+ ow_frame 0, $b0, 0, LightningClubTilesetGfx, $28
+ ow_frame 0, $b1, 0, LightningClubTilesetGfx, $29
+ db -1 ; end
+
+ScienceClubOWFrameset: ; 80b1e (20:4b1e)
+ db $3, $13, $13
+ ow_frame 11, $c7, 0, ScienceClubTilesetGfx, $47
+ ow_frame 11, $c7, 0, ScienceClubTilesetGfx, $48
+ db -1 ; end
+
+ChallengeHallOWFrameset: ; 80b32 (20:4b32)
+ db $3, $3, $3
+ db -1 ; end
+
+HallOfHonorOWFrameset: ; 80b36 (20:4b36)
+ db $3, $43, $43
+ ow_frame 11, $a4, 0, HallOfHonorTilesetGfx, $28
+ ow_frame 0, $a5, 0, HallOfHonorTilesetGfx, $29
+ ow_frame 0, $a6, 0, HallOfHonorTilesetGfx, $2a
+ ow_frame 0, $a7, 0, HallOfHonorTilesetGfx, $2b
+ ow_frame 11, $a4, 0, HallOfHonorTilesetGfx, $2c
+ ow_frame 0, $a5, 0, HallOfHonorTilesetGfx, $2d
+ ow_frame 0, $a6, 0, HallOfHonorTilesetGfx, $2e
+ ow_frame 0, $a7, 0, HallOfHonorTilesetGfx, $2f
+ db -1 ; end
+; 0x80b7a
diff --git a/src/engine/bank01.asm b/src/engine/bank01.asm index bf16a12..b7fb896 100644 --- a/src/engine/bank01.asm +++ b/src/engine/bank01.asm @@ -7,7 +7,7 @@ GameLoop: ; 4000 (1:4000) call EnableInt_VBlank call EnableInt_Timer call EnableSRAM - ld a, [s0a006] + ld a, [sTextSpeed] ld [wTextSpeed], a ld a, [s0a009] ld [wSkipDelayAllowed], a diff --git a/src/engine/bank03.asm b/src/engine/bank03.asm index 6b7c2cb..1b4207b 100644 --- a/src/engine/bank03.asm +++ b/src/engine/bank03.asm @@ -42,7 +42,7 @@ LoadMap: ; c000 (3:4000) call Func_c4b9 call Func_c943 call Func_c158 - farcall Func_80480 + farcall DoMapOWFrame call SetOverworldDoFrameFunction xor a ld [wd0b4], a @@ -270,7 +270,7 @@ Func_c1f8: ; c1f8 (3:41f8) call EnableSRAM ld a, [sAnimationsDisabled] ld [wAnimationsDisabled], a - ld a, [s0a006] + ld a, [sTextSpeed] ld [wTextSpeed], a call DisableSRAM farcall Func_10756 @@ -464,7 +464,7 @@ Func_c36a: ; c36a (3:436a) cp POKEMON_DOME_ENTRANCE jr nz, .asm_c379 xor a - ld [wd324], a + ld [wd323 + 1], a .asm_c379 ret diff --git a/src/engine/bank04.asm b/src/engine/bank04.asm index 330cd3f..63681e7 100644 --- a/src/engine/bank04.asm +++ b/src/engine/bank04.asm @@ -1101,7 +1101,124 @@ Func_11416: ; 11416 (4:5416) INCROM $11416, $11430 Func_11430: ; 11430 (4:5430) - INCROM $11430, $1157c + push de + ld de, sb800 + call .Func_11439 + pop de + ret + +.Func_11439 + push hl + push bc + call EnableSRAM + call .Func_11447 + call DisableSRAM + pop bc + pop hl + ret + +.Func_11447 + push hl + push bc + push de + ld a, e + add $08 + ld [wTempPointer], a + ld a, d + adc 0 + ld [wTempPointer + 1], a + ld hl, .wram_map +.asm_11459 + ld a, [hli] + ld e, a + ld d, [hl] + or d + jr z, .done_copy + inc hl + ld a, [hli] + ld c, a + ld a, [hli] + ld b, a + +; copy bc bytes from wTempPointer to de + push hl + ld a, [wTempPointer] + ld l, a + ld a, [wTempPointer + 1] + ld h, a +.loop_copy + ld a, [hli] + ld [de], a + inc de + dec bc + ld a, c + or b + jr nz, .loop_copy + + ld a, l + ld [wTempPointer], a + ld a, h + ld [wTempPointer + 1], a + pop hl + inc hl + inc hl + jr .asm_11459 + +.done_copy + call EnableSRAM + ld a, [sAnimationsDisabled] + ld [wAnimationsDisabled], a + ld a, [sTextSpeed] + ld [wTextSpeed], a + call DisableSRAM + pop de + pop bc + pop hl + ret + +.wram_map +; pointer, number of bytes, unknown + dw wd3cc, 1, $ff00 ; sb808 + dw wd3cb, 1, $ff00 ; sb809 + dw wPlayTimeCounter + 0, 1, $ff00 ; sPlayTimeCounter + dw wPlayTimeCounter + 1, 1, $ff00 + dw wPlayTimeCounter + 2, 1, $ff00 + dw wPlayTimeCounter + 3, 2, $ff00 + dw wOverworldMapSelection, 1, $ff00 ; sOverworldMapSelection + dw wTempMap, 1, $ff00 ; sTempMap + dw wTempPlayerXCoord, 1, $ff00 ; sTempPlayerXCoord + dw wTempPlayerYCoord, 1, $ff00 ; sTempPlayerYCoord + dw wTempPlayerDirection, 1, $ff00 ; sTempPlayerDirection + dw wd0c2, 1, $ff00 ; sb814 + dw wDuelResult, 1, $ff00 ; sDuelResult + dw wNPCDuelist, 1, $ff00 ; sNPCDuelist + dw wChallengeHallNPC, 1, $ff00 ; sChallengeHallNPC + dw wd698, 4, $ff00 ; sb818 + dw wd323, 11, $ff00 ; sb81c + dw Data_1156c, 1, $ff00 ; sb827 + dw wd0b8, 1, $ff00 ; sb828 + dw wd0b9, 1, $ff00 ; sb829 + dw wd11b, 1, $ff00 ; sb82a + dw wd0ba, 1, $ff00 ; sb82b + dw wPCPackSelection, 1, $0e00 ; sPCPackSelection + dw wPCPacks, 15, $ff00 ; sPCPacks + dw wDefaultSong, 1, $ff00 ; sDefaultSong + dw wcad5, 1, $ff00 ; sb83d + dw wd3b8, 1, $ff00 ; sb83e + dw wd3bb, 10, $ff00 ; sb83f + dw wd0c5, 1, $ff00 ; sb849 + dw wMultichoiceTextboxResult_ChooseDeckToDuelAgainst, 1, $ff00 ; sMultichoiceTextboxResult_ChooseDeckToDuelAgainst + dw wd10e, 1, $ff00 ; sb84b + dw Data_1156c, 15, $ff00 ; sb84c + dw Data_1156c, 16, $ff00 ; sb85b + dw Data_1156c, 16, $ff00 ; sb86b + dw wEventVars, 64, $ff00 ; sEventVars + dw NULL +; 0x1156c + +Data_1156c: ; 1156c (4:556c) + db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +; 0x1157c ; save the game ; if c is 0, save the player at their current position @@ -2137,7 +2254,7 @@ MainMenu_NewGame: ; 12704 (4:6704) call EnableSRAM ld a, [sAnimationsDisabled] ld [wAnimationsDisabled], a - ld a, [s0a006] + ld a, [sTextSpeed] ld [wTextSpeed], a call DisableSRAM ld a, MUSIC_STOP diff --git a/src/engine/bank06.asm b/src/engine/bank06.asm index c96d2a1..1413aed 100644 --- a/src/engine/bank06.asm +++ b/src/engine/bank06.asm @@ -1501,7 +1501,7 @@ Func_1996e: ; 1996e (6:596e) ld a, $2 ld [s0a003], a ld a, $2 - ld [s0a006], a + ld [sTextSpeed], a ld [wTextSpeed], a xor a ld [sAnimationsDisabled], a diff --git a/src/engine/bank07.asm b/src/engine/bank07.asm index 376f2f1..018787e 100644 --- a/src/engine/bank07.asm +++ b/src/engine/bank07.asm @@ -50,6 +50,7 @@ Func_1c056: ; 1c056 (7:4056) INCLUDE "data/warps.asm" +; loads data from the map header of wCurMap LoadMapHeader: ; 1c33b (7:433b) push hl push bc @@ -66,7 +67,7 @@ LoadMapHeader: ; 1c33b (7:433b) ld a, [hli] ld [wCurTilemap], a ld a, [hli] - ld c, a + ld c, a ; CGB tilemap variant ld a, [hli] ld [wd28f], a ld a, [hli] @@ -1709,7 +1710,7 @@ Credits_1d6ad: ; 1d6ad (7:56ad) call Func_1d705 call Func_1c858 xor a - ld [wd324], a + ld [wd323 + 1], a ld a, MUSIC_CREDITS call PlaySong farcall Func_10031 diff --git a/src/engine/bank1c.asm b/src/engine/bank1c.asm index 0c992dc..1408f18 100644 --- a/src/engine/bank1c.asm +++ b/src/engine/bank1c.asm @@ -330,8 +330,65 @@ Func_70214: ; 70214 (1c:4214) Unknown_7024a: ; 7024a (1c:424a) INCROM $7024a, $7036a -Func_7036a: ; 7036a (1c:436a) - INCROM $7036a, $703cb +; decompresses palette data depending on wd132 +; then sends it as SGB packet +SetSGB2AndSGB3MapPalette: ; 7036a (1c:436a) + ld a, [wConsole] + cp CONSOLE_SGB + ret nz ; return if not SGB + ld a, [wd132] + or a + ret z ; not valid + + push hl + push bc + push de + ld a, [wd132] + add a + ld c, a + ld b, $0 + ld hl, .pal_data_pointers + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + call DecompressSGBPalette + + ; load palettes to wTempSGBPacket + ld hl, wDecompressionBuffer + ld de, wTempSGBPacket + 1 ; PAL Packet color #0 (PAL23's SGB2) + ld bc, 8 ; pal size + call CopyDataHLtoDE + ld hl, wDecompressionBuffer + 34 + ld de, wTempSGBPacket + 9 ; PAL Packet color #4 (PAL23's SGB3) + ld bc, 6 + call CopyDataHLtoDE + + xor a + ld [wTempSGBPacket + 15], a + ld hl, wTempSGBPacket + ld a, PAL01 << 3 + 1 + ld [hl], a + call Func_704c7 + call SendSGB + pop de + pop bc + pop hl + ret + +.pal_data_pointers + dw $722f ; unused + dw $722f ; MAP_SGB_PALETTE_1 + dw $7253 ; MAP_SGB_PALETTE_2 + dw $7277 ; MAP_SGB_PALETTE_3 + dw $729a ; MAP_SGB_PALETTE_4 + dw $72bd ; MAP_SGB_PALETTE_5 + dw $72e0 ; MAP_SGB_PALETTE_6 + dw $7304 ; MAP_SGB_PALETTE_7 + dw $7328 ; MAP_SGB_PALETTE_8 + dw $734b ; MAP_SGB_PALETTE_9 + dw $736f ; MAP_SGB_PALETTE_10 +; 0x703cb Func_703cb: ; 703cb (1c:43cb) ld a, [wConsole] @@ -340,7 +397,7 @@ Func_703cb: ; 703cb (1c:43cb) push hl push bc push de - call Func_70403 + call DecompressSGBPalette ld hl, wDecompressionBuffer ld de, wTempSGBPacket + $1 ld bc, $8 ; palette 2, color 0-3 @@ -361,7 +418,7 @@ Func_703cb: ; 703cb (1c:43cb) pop hl ret -Func_70403: ; 70403 (1c:4403) +DecompressSGBPalette: ; 70403 (1c:4403) push hl push bc push de diff --git a/src/engine/bank20.asm b/src/engine/bank20.asm index 4d46930..18f4d59 100644 --- a/src/engine/bank20.asm +++ b/src/engine/bank20.asm @@ -1,8 +1,22 @@ Func_80000: ; 80000 (20:4000) - INCROM $80000, $80028 + call ClearSRAMBGMaps + xor a + ld [wTextBoxFrameType], a + call Func_8003d + farcall Func_c37a + farcall Func_c9c7 + call Func_801a1 + farcall Func_c3ff + ld a, [wCurMap] + cp OVERWORLD_MAP + ret nz + farcall OverworldMap_PrintMapName + farcall OverworldMap_InitVolcanoSprite + ret +; 0x80028 Func_80028: ; 80028 (20:4028) - call Func_801f1 + call ClearSRAMBGMaps ld bc, $0000 call Func_80077 farcall Func_c9c7 @@ -13,7 +27,7 @@ Func_80028: ; 80028 (20:4028) Func_8003d: ; 8003d (20:403d) farcall LoadMapHeader - farcall Func_7036a + farcall SetSGB2AndSGB3MapPalette ld bc, $0 call Func_80077 ld a, $80 @@ -38,13 +52,13 @@ Func_8003d: ; 8003d (20:403d) ; 0x80077 Func_80077: ; 80077 (20:4077) - ld a, $1 - ld [wBGMapCopyMode], a + ld a, TRUE + ld [wWriteBGMapToSRAM], a jr Func_80082 Func_8007e: ; 8007e (20:407e) xor a - ld [wBGMapCopyMode], a + ld [wWriteBGMapToSRAM], a ; fallthrough Func_80082: ; 80082 (20:4082) @@ -214,13 +228,13 @@ Func_80148: ; 80148 (20:4148) ret ; copies BG Map data pointed by hl -; to either VRAM or SRAM, depending on wBGMapCopyMode +; to either VRAM or SRAM, depending on wWriteBGMapToSRAM ; de is the target address in VRAM, ; if SRAM is the target address to copy, ; copies data to s0BGMap or s1BGMap ; for VRAM0 or VRAM1 respectively CopyBGDataToVRAMOrSRAM: ; 8016e (20:416e) - ld a, [wBGMapCopyMode] + ld a, [wWriteBGMapToSRAM] or a jp z, SafeCopyDataHLtoDE @@ -308,16 +322,16 @@ Func_801a1: ; 801a1 (20:41a1) pop hl ret -; Clears the first x800 bytes of S1:a000 -Func_801f1: ; 801f1 (20:41f1) +; clears s0BGMap and s1BGMap +ClearSRAMBGMaps: ; 801f1 (20:41f1) push hl push bc ldh a, [hBankSRAM] push af - ld a, $1 + ld a, BANK(s0BGMap) ; SRAM 1 call BankswitchSRAM - ld hl, $a000 - ld bc, $0800 + ld hl, s0BGMap + ld bc, $800 ; s0BGMap + s1BGMap xor a call FillMemoryWithA pop af @@ -804,22 +818,315 @@ CopyPaletteDataToBuffer: ; 80456 (20:4456) INCROM $8047b, $80480 -Func_80480: ; 80480 (20:4480) - INCROM $80480, $804d8 +; for the current map, process the animation +; data of its corresponding OW tiles +DoMapOWFrame: ; 80480 (20:4480) + push hl + push bc + ld a, [wCurMap] + add a + add a ; *4 + ld c, a + ld a, [wConsole] + cp CONSOLE_CGB + jr nz, .not_cgb + ld a, c + add 2 + ld c, a +.not_cgb + ld b, $0 + ld hl, MapOWFramesetPointers + add hl, bc + ; got pointer for current map's frameset data + ld a, [hli] + ld h, [hl] + ld l, a + call ProcessOWFrameset + pop bc + pop hl + ret +; 0x804a2 + +; processes the OW frameset pointed by hl +ProcessOWFrameset: ; 804a2 (20:44a2) + push hl + push bc + ld a, l + ld [wCurMapOWFrameset], a + ld a, h + ld [wCurMapOWFrameset + 1], a + xor a + ld [wumLoadedFramesetSubgroups], a + call ClearOWFramesetSubgroups + ld c, 0 +.loop_subgroups + call LoadOWFramesetSubgroup + call GetOWFramesetSubgroupData + ld a, [wCurOWFrameDataOffset] + cp -1 + jr z, .next_subgroup + ld a, [wumLoadedFramesetSubgroups] + inc a + ld [wumLoadedFramesetSubgroups], a + call LoadOWFrameTiles + call StoreOWFramesetSubgroup +.next_subgroup + inc c + ld a, c + cp NUM_OW_FRAMESET_SUBGROUPS + jr c, .loop_subgroups + pop bc + pop hl + ret +; 0x804d8 + +; for each of the loaded frameset subgroups +; load their tiles and advance their durations +DoLoadedFramesetSubgroupsFrame: ; 804d8 (20:44d8) + ld a, [wumLoadedFramesetSubgroups] + or a + ret z + ld c, 0 +.loop_subgroups + call LoadOWFramesetSubgroup + cp -1 + jr z, .next_subgroup + call LoadOWFrameTiles + call StoreOWFramesetSubgroup +.next_subgroup + inc c + ld a, c + cp NUM_OW_FRAMESET_SUBGROUPS + jr c, .loop_subgroups + ret +; 0x804f3 + +; from subgroup in register c, get +; from OW frameset in hl its corresponding +; data offset and duration +GetOWFramesetSubgroupData: ; 804f3 (20:44f3) + push hl + push bc + push hl + ld b, $0 + add hl, bc + ld c, [hl] + pop hl + add hl, bc + ld a, [hl] ; beginning of OW_FRAME + cp -1 + jr z, .end_of_list ; skip if it's end of list + ld a, c ; store its addr offset + ld [wCurOWFrameDataOffset], a + xor a + ld [wCurOWFrameDuration], a +.end_of_list + pop bc + pop hl + ret +; 0x8050c + +; if wCurOWFrameDuration == 0, processes next frame for OW map +; by loading the tiles corresponding to current frame +; if wCurOWFrameDuration != 0, then simply decrements it and returns +LoadOWFrameTiles: ; 8050c (20:450c) + ld a, [wCurOWFrameDuration] + or a + jr z, .next_frame + dec a + ld [wCurOWFrameDuration], a + ret + +.next_frame + push hl + push de + push bc + ; add wCurOWFrameDataOffset to pointer in wCurMapOWFrameset + ld a, [wCurOWFrameDataOffset] + ld c, a + ld a, [wCurMapOWFrameset] + add c + ld l, a + ld a, [wCurMapOWFrameset + 1] + adc 0 + ld h, a + + ld a, [hl] + ld [wCurOWFrameDuration], a +.loop_ow_frames + call .LoadTile + ld de, OW_FRAME_STRUCT_SIZE + add hl, de ; next frame data + ld a, c + add e + ld c, a + ; OW frames with 0 duration are processed + ; at the same time as the previous frame data + ld a, [hl] + or a + jr z, .loop_ow_frames -Func_804d8: ; 804d8 (20:44d8) - INCROM $804d8, $80b7a + cp -1 + ld a, c + ld [wCurOWFrameDataOffset], a + jr nz, .done +; there's no more frames to process for this map +; reset the frame data offset + pop bc + push bc + ld a, [wCurOWFrameDuration] + push af + ld a, [wCurMapOWFrameset] + ld l, a + ld a, [wCurMapOWFrameset + 1] + ld h, a + call GetOWFramesetSubgroupData + pop af + ld [wCurOWFrameDuration], a + +.done + pop bc + pop de + pop hl + ret + +; load a single tile specified +; by the OW frame data pointed by hl +.LoadTile + push hl + push bc + push de + ldh a, [hBankVRAM] + push af + inc hl + ld a, [hli] ; tile number + xor $80 + ld e, a + ld a, [hli] ; VRAM bank + +; get tile offset of register e +; and load its address in de + push hl + call BankswitchVRAM + ld h, $00 + ld l, e + add hl, hl ; *2 + add hl, hl ; *4 + add hl, hl ; *8 + add hl, hl ; *16 + ld de, v0Tiles1 ; or v1Tiles1 + add hl, de + ld e, l + ld d, h + pop hl + + ld a, [hli] ; bank of tileset + add BANK(MapOWFramesetPointers) + ld [wTempPointerBank], a + ld a, [hli] ; tileset addr lo byte + ld c, a + ld a, [hli] ; tileset addr hi byte + ld b, a + ld a, [hli] ; tile number lo byte + ld h, [hl] ; tile number hi byte + ld l, a + add hl, hl ; *2 + add hl, hl ; *4 + add hl, hl ; *8 + add hl, hl ; *16 + add hl, bc + ; copy tile from the tileset to VRAM addr + lb bc, 1, TILE_SIZE + call CopyGfxDataFromTempBank + pop af + call BankswitchVRAM + pop de + pop bc + pop hl + ret +; 0x8059a + +; fills wOWFramesetSubgroups with $ff +ClearOWFramesetSubgroups: ; 8059a (20:459a) + push hl + push bc + ld hl, wOWFramesetSubgroups + ld c, NUM_OW_FRAMESET_SUBGROUPS * 2 + ld a, $ff +.loop + ld [hli], a + dec c + jr nz, .loop + pop bc + pop hl + ret +; 0x805aa + +; copies wOWFramesetSubgroups + 2*c +; to wCurOWFrameDataOffset and wCurOWFrameDuration +; also returns its current duration +LoadOWFramesetSubgroup: ; 805aa (20:45aa) + push hl + push bc + ld hl, wOWFramesetSubgroups + sla c + ld b, $00 + add hl, bc + ld a, [hli] + ld [wCurOWFrameDataOffset], a + push af + ld a, [hl] + ld [wCurOWFrameDuration], a + pop af + pop bc + pop hl + ret +; 0x805c1 + +; copies wCurOWFrameDataOffset and wCurOWFrameDuration +; to wOWFramesetSubgroups + 2*c +StoreOWFramesetSubgroup: ; 805c1 (20:45c1) + push hl + push bc + ld hl, wOWFramesetSubgroups + sla c + ld b, $00 + add hl, bc + ld a, [wCurOWFrameDataOffset] + ld [hli], a + ld a, [wCurOWFrameDuration] + ld [hl], a + pop bc + pop hl + ret +; 0x805d6 + +INCLUDE "data/map_ow_framesets.asm" + +; clears wd323 Func_80b7a: ; 80b7a (20:4b7a) - INCROM $80b7a, $80b89 + push hl + push bc + ld c, $b + ld hl, wd323 + xor a +.loop + ld [hli], a + dec c + jr nz, .loop + pop bc + pop hl + ret +; 0x80b89 Func_80b89: ; 80b89 (20:4b89) push hl push bc push af ld c, a - ld a, $01 - ld [wBGMapCopyMode], a + ld a, TRUE + ld [wWriteBGMapToSRAM], a ld b, $00 ld hl, wd323 add hl, bc @@ -837,9 +1144,9 @@ Func_80b89: ; 80b89 (20:4b89) Func_80ba4: ; 80ba4 (20:4ba4) push af xor a - ld [wBGMapCopyMode], a + ld [wWriteBGMapToSRAM], a pop af -; Fallthrough +; fallthrough Func_80baa: ; 80baa (20:4baa) push hl @@ -858,16 +1165,18 @@ Func_80baa: ; 80baa (20:4baa) push af ld a, [wd23a + 1] push af + ld b, $0 ld hl, wd323 add hl, bc ld a, $1 ld [hl], a + ld a, c add a ld c, a ld b, $0 - ld hl, Unknown_80c21 + ld hl, .unknown_80c21 add hl, bc ld a, [hli] ld h, [hl] @@ -885,13 +1194,13 @@ Func_80baa: ; 80baa (20:4baa) ld a, [hl] ld [wCurTilemap], a push bc - farcall Func_80082 + farcall Func_80082 ; unnecessary farcall pop bc srl b ld a, c rrca - and $f - swap a + and $0f + swap a ; * $10 add b ld c, a ld b, $0 @@ -915,8 +1224,43 @@ Func_80baa: ; 80baa (20:4baa) pop hl ret -Unknown_80c21: ; 80c21 (20:4c21) - INCROM $80c21, $80e5a +.unknown_80c21 + dw .data_1 + dw .data_2 + dw .data_3 + dw .data_4 + dw .data_5 + dw .data_6 + dw .data_7 + dw .data_8 + dw .data_9 + dw .data_10 + dw .data_11 + +.data_1 + db $16, $00, TILEMAP_UNUSED_5, TILEMAP_UNUSED_6 +.data_2 + db $0e, $00, TILEMAP_UNUSED_7, TILEMAP_UNUSED_8 +.data_3 + db $06, $02, TILEMAP_UNUSED_3, TILEMAP_UNUSED_4 +.data_4 + db $0a, $02, TILEMAP_UNUSED_3, TILEMAP_UNUSED_4 +.data_5 + db $0e, $02, TILEMAP_UNUSED_3, TILEMAP_UNUSED_4 +.data_6 + db $12, $02, TILEMAP_UNUSED_3, TILEMAP_UNUSED_4 +.data_7 + db $0e, $0a, TILEMAP_UNUSED_3, TILEMAP_UNUSED_4 +.data_8 + db $12, $0a, TILEMAP_UNUSED_3, TILEMAP_UNUSED_4 +.data_9 + db $0e, $12, TILEMAP_UNUSED_3, TILEMAP_UNUSED_4 +.data_10 + db $12, $12, TILEMAP_UNUSED_3, TILEMAP_UNUSED_4 +.data_11 + db $0a, $00, TILEMAP_UNUSED_1, TILEMAP_UNUSED_2 + + INCROM $80c63, $80e5a SpriteNullAnimationPointer: ; 80e5a (20:4e5a) dw SpriteNullAnimationFrame diff --git a/src/engine/home.asm b/src/engine/home.asm index 6ec1230..f12f24d 100644 --- a/src/engine/home.asm +++ b/src/engine/home.asm @@ -10577,9 +10577,9 @@ OverworldDoFrameFunction: ; 380e (0:380e) call BankswitchROM call Func_1c610 call Func_3cb4 - ld a, BANK(Func_804d8) + ld a, BANK(DoLoadedFramesetSubgroupsFrame) call BankswitchROM - call Func_804d8 + call DoLoadedFramesetSubgroupsFrame call UpdateRNGSources pop af call BankswitchROM @@ -11690,9 +11690,9 @@ Func_3e31: ; 3e31 (0:3e31) ldh a, [hBankROM] push af call Func_3cb4 - ld a, BANK(Func_804d8) + ld a, BANK(DoLoadedFramesetSubgroupsFrame) call BankswitchROM - call Func_804d8 + call DoLoadedFramesetSubgroupsFrame pop af call BankswitchROM ret diff --git a/src/sram.asm b/src/sram.asm index 512d96a..f8d77fb 100644 --- a/src/sram.asm +++ b/src/sram.asm @@ -9,7 +9,7 @@ s0a004:: ; a004 ds $1 s0a005:: ; a005 ds $1 -s0a006:: ; a006 +sTextSpeed:: ; a006 ds $1 ; store settings for animation enabled/disabled @@ -78,7 +78,108 @@ sb701:: ; b701 sb703:: ; b703 ds $1 - ds $340 + ds $fc + +sb800:: ; b800 + ds $8 + +sb808:: ; b808 + ds $1 + +sb809:: ; b809 + ds $1 + +sPlayTimeCounter:: ; b80a + ds $5 + +sOverworldMapSelection:: ; b80f + ds $1 + +sTempMap:: ; b810 + ds $1 + +sTempPlayerXCoord:: ; b811 + ds $1 + +sTempPlayerYCoord:: ; b812 + ds $1 + +sTempPlayerDirection:: ; b813 + ds $1 + +sb814:: ; b814 + ds $1 + +sDuelResult:: ; b815 + ds $1 + +sNPCDuelist:: ; b816 + ds $1 + +sChallengeHallNPC:: ; b817 + ds $1 + +sb818:: ; b818 + ds $4 + +sb81c:: ; b81c + ds $b + +sb827:: ; b827 + ds $1 + +sb828:: ; b828 + ds $1 + +sb829:: ; b829 + ds $1 + +sb82a:: ; b82a + ds $1 + +sb82b:: ; b82b + ds $1 + +sPCPackSelection:: ; b82c + ds $1 + +sPCPacks:: ; b82d + ds $f + +sDefaultSong:: ; b83c + ds $1 + +sb83d:: ; b83d + ds $1 + +sb83e:: ; b83e + ds $1 + +sb83f:: ; b83f + ds $a + +sb849:: ; b849 + ds $1 + +sMultichoiceTextboxResult_ChooseDeckToDuelAgainst:: ; b84a + ds $1 + +sb84b:: ; b84b + ds $1 + +sb84c:: ; b84c + ds $f + +sb85b:: ; b85b + ds $10 + +sb86b:: ; b86b + ds $10 + +sEventVars:: ; b87b + ds $40 + + ds $189 sba44:: ; ba44 ds $1 diff --git a/src/wram.asm b/src/wram.asm index 50545bd..85c839b 100644 --- a/src/wram.asm +++ b/src/wram.asm @@ -2171,7 +2171,7 @@ wd291:: ; d291 ; determines where to copy BG Map data ; $0 = copies to VRAM ; $1 = copies to SRAM -wBGMapCopyMode:: ; d292 +wWriteBGMapToSRAM:: ; d292 ds $1 ds $4 @@ -2181,15 +2181,33 @@ wBGMapCopyMode:: ; d292 wTempBackgroundPalettesCGB:: ; d297 ds 8 palettes - ds $4c + ds $41 -wd323:: ; d323 +; pointer to the data of current map OW frameset +wCurMapOWFrameset:: ; d318 + ds $2 + +; stored data for each OW frameset subgroup +; has frame data offset and duration +wOWFramesetSubgroups:: ; d31a + ds NUM_OW_FRAMESET_SUBGROUPS * $2 + +; address offset of current OW frame +; relative to wCurMapOWFrameset +wCurOWFrameDataOffset:: ; d320 ds $1 -wd324:: ; d324 +; duration of the current map OW frame +wCurOWFrameDuration:: ; d321 ds $1 - ds $9 +; number of valid subgroups +; that are currently loaded in wOWFramesetSubgroups +wumLoadedFramesetSubgroups:: ; d322 + ds $1 + +wd323:: ; d323 + ds $b ; the OWMAP_* value for the current overworld map selection wOverworldMapSelection:: ; d32e @@ -2334,7 +2352,15 @@ wd3b9:: ; d3b9 wd3bb:: ; d3bb ds $a - ds $b + ds $6 + +wd3cb:: ; d3cb + ds $1 + +wd3cc:: ; d3cc + ds $1 + + ds $3 wd3d0:: ; d3d0 ds $1 |