Merge branch 'master' into decompile_battle_5

This commit is contained in:
Cameron Hall
2017-08-22 15:33:38 -05:00
committed by GitHub
41 changed files with 8926 additions and 33447 deletions
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
-2403
View File
File diff suppressed because it is too large Load Diff
-9164
View File
File diff suppressed because it is too large Load Diff
-1630
View File
File diff suppressed because it is too large Load Diff
-3402
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
-2739
View File
File diff suppressed because it is too large Load Diff
+4
View File
@@ -0,0 +1,4 @@
gUnknown_03004830
gInGameOpponentsNo
gUnknown_03004840
gBerryBlenderData
+1
View File
@@ -0,0 +1 @@
gEggHatchData
-456
View File
@@ -1,456 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.section .rodata
.align 2
gUnknown_08215C0C:: @ 8215C0C
.incbin "graphics/berry_blender/center.gbapal"
.align 2
gUnknown_08215C2C:: @ 8215C2C
.incbin "graphics/berry_blender/center_map.bin"
.align 2
gUnknown_0821602C:: @ 821602C
.incbin "graphics/berry_blender/outer.gbapal"
.incbin "graphics/unused/unknown/821604C.gbapal"
.space 0x1C0
.string "▶$"
.string " $"
.string "カッコイ$" @ "cool" (missing an イ at the end)
.string "カワイイ$" @ "cute"
.string "ウツクシ$" @ "beautiful" (missing an イ at the end)
.string "カシコイ$" @ "smart"
.string "タクマシ$" @ "tough" (missing an イ at the end)
gUnknown_08216249:: @ 8216249
.string "\p$"
@ unreferenced
@ These appear to be the first names of four people who worked on the game.
.string "てつじ$", 10 @ Tetsuji (Ohta)
.string "あきと$", 10 @ Akito (Mori)
.string "シゲル$", 10 @ Shigeru (Ohmori)
.string "ヨシノリ$", 10 @ Yoshinori (Matsuda)
UnknownText_2Pok:
.string "2Pok$"
UnknownText_3Pok:
.string "3Pok$"
UnknownText_4Pok:
.string "4Pok$"
.align 2
gUnknown_08216284:: @ 8216284
.4byte UnknownText_2Pok
.4byte UnknownText_3Pok
.4byte UnknownText_4Pok
@ unreferenced
.string "1P$", 4
.string "2P$", 4
.string "3P$", 4
.string "4P$", 4
.ifdef ENGLISH
UnknownText_Mister:
.string "MISTER$"
UnknownText_Laddie:
.string "LADDIE$"
UnknownText_Lassie:
.string "LASSIE$"
.else
UnknownText_Mister:
.string "OPI$"
UnknownText_Laddie:
.string "KUMPEL$"
UnknownText_Lassie:
.string "TUSSI$"
.endif
.align 2
gUnknown_082162B8:: @ 82162B8
.4byte UnknownText_Mister
.4byte UnknownText_Laddie
.4byte UnknownText_Lassie
gUnknown_082162C4:: @ 82162C4
.string "{COLOR RED}$"
gUnknown_082162C8:: @ 82162C8
.string "\n$"
.string " $"
gUnknown_082162CC:: @ 82162CC
.byte -1, -1
.byte 1, -1
.byte -1, 1
.byte 1, 1
gUnknown_082162D4:: @ 82162D4
.byte 2, 6
.byte 23, 6
.byte 2, 12
.byte 23, 12
.byte 1, 6
.byte 22, 6
.byte 1, 12
.byte 22, 12
gUnknown_082162E4:: @ 82162E4
.byte 72, 32
.byte 168, 32
.byte 72, 128
.byte 168, 128
gUnknown_082162EC:: @ 82162EC
.byte -1, 0, 1, -1
.byte -1, 0, 1, 2
.byte 0, 1, 2, 3
.align 1
gUnknown_082162F8:: @ 82162F8
.2byte 0x0000, 0xC000, 0x4000, 0x8000
gUnknown_08216300:: @ 8216300
.byte 1
.byte 1
.byte 0
gUnknown_08216303:: @ 8216303
.byte 32
.byte 224
.byte 96
.byte 160
.byte 0
.align 2
gUnknown_08216308:: @ 8216308
.4byte sub_804F8C8
.4byte sub_804F9F4
.4byte sub_804FB1C
.align 2
gOamData_8216314:: @ 8216314
.2byte 0x0000
.2byte 0x8000
.2byte 0x0400
.align 2
gSpriteAnim_821631C:: @ 821631C
obj_image_anim_frame 16, 5, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP
obj_image_anim_end
.align 2
gSpriteAnim_8216324:: @ 8216324
obj_image_anim_frame 16, 5, OBJ_IMAGE_ANIM_V_FLIP
obj_image_anim_end
.align 2
gSpriteAnim_821632C:: @ 821632C
obj_image_anim_frame 16, 5, OBJ_IMAGE_ANIM_H_FLIP
obj_image_anim_end
.align 2
gSpriteAnim_8216334:: @ 8216334
obj_image_anim_frame 16, 5
obj_image_anim_end
.align 2
gSpriteAnim_821633C:: @ 821633C
obj_image_anim_frame 48, 2, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP
obj_image_anim_frame 32, 5, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP
obj_image_anim_frame 48, 3, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP
obj_image_anim_frame 16, 5, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP
obj_image_anim_end
.align 2
gSpriteAnim_8216350:: @ 8216350
obj_image_anim_frame 48, 2, OBJ_IMAGE_ANIM_V_FLIP
obj_image_anim_frame 32, 5, OBJ_IMAGE_ANIM_V_FLIP
obj_image_anim_frame 48, 3, OBJ_IMAGE_ANIM_V_FLIP
obj_image_anim_frame 16, 5, OBJ_IMAGE_ANIM_V_FLIP
obj_image_anim_end
.align 2
gSpriteAnim_8216364:: @ 8216364
obj_image_anim_frame 48, 2, OBJ_IMAGE_ANIM_H_FLIP
obj_image_anim_frame 32, 5, OBJ_IMAGE_ANIM_H_FLIP
obj_image_anim_frame 48, 3, OBJ_IMAGE_ANIM_H_FLIP
obj_image_anim_frame 16, 5, OBJ_IMAGE_ANIM_H_FLIP
obj_image_anim_end
.align 2
gSpriteAnim_8216378:: @ 8216378
obj_image_anim_frame 48, 2
obj_image_anim_frame 32, 5
obj_image_anim_frame 48, 3
obj_image_anim_frame 16, 5
obj_image_anim_end
.align 2
gSpriteAnim_821638C:: @ 821638C
obj_image_anim_frame 0, 5, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP
obj_image_anim_end
.align 2
gSpriteAnim_8216394:: @ 8216394
obj_image_anim_frame 0, 5, OBJ_IMAGE_ANIM_V_FLIP
obj_image_anim_end
.align 2
gSpriteAnim_821639C:: @ 821639C
obj_image_anim_frame 0, 5, OBJ_IMAGE_ANIM_H_FLIP
obj_image_anim_end
.align 2
gSpriteAnim_82163A4:: @ 82163A4
obj_image_anim_frame 0, 5
obj_image_anim_end
.align 2
gSpriteAnimTable_82163AC:: @ 82163AC
.4byte gSpriteAnim_821631C
.4byte gSpriteAnim_8216324
.4byte gSpriteAnim_821632C
.4byte gSpriteAnim_8216334
.4byte gSpriteAnim_821633C
.4byte gSpriteAnim_8216350
.4byte gSpriteAnim_8216364
.4byte gSpriteAnim_8216378
.4byte gSpriteAnim_821638C
.4byte gSpriteAnim_8216394
.4byte gSpriteAnim_821639C
.4byte gSpriteAnim_82163A4
.align 2
gUnknown_082163DC:: @ 82163DC
obj_tiles gBerryBlenderArrowTiles, 0x800, 46545
.align 2
gUnknown_082163E4:: @ 82163E4
obj_pal gBerryBlenderMiscPalette, 46546
.align 2
gUnknown_082163EC:: @ 82163EC
obj_pal gBerryBlenderArrowPalette, 12312
.align 2
gSpriteTemplate_82163F4:: @ 82163F4
spr_template 46545, 12312, gOamData_8216314, gSpriteAnimTable_82163AC, NULL, gDummySpriteAffineAnimTable, sub_8051C04
.align 2
gOamData_821640C:: @ 821640C
.2byte 0x0000
.2byte 0x4000
.2byte 0x0000
.align 2
gSpriteAnim_8216414:: @ 8216414
obj_image_anim_frame 0, 20
obj_image_anim_end
.align 2
gSpriteAnim_821641C:: @ 821641C
obj_image_anim_frame 4, 20, OBJ_IMAGE_ANIM_H_FLIP
obj_image_anim_end
.align 2
gSpriteAnim_8216424:: @ 8216424
obj_image_anim_frame 8, 4
obj_image_anim_frame 12, 4
obj_image_anim_frame 8, 4
obj_image_anim_frame 12, 4
obj_image_anim_frame 8, 4
obj_image_anim_end
.align 2
gSpriteAnim_821643C:: @ 821643C
obj_image_anim_frame 8, 4
obj_image_anim_end
.align 2
gSpriteAnimTable_8216444:: @ 8216444
.4byte gSpriteAnim_8216414
.4byte gSpriteAnim_821641C
.4byte gSpriteAnim_8216424
.4byte gSpriteAnim_821643C
.align 2
gUnknown_08216454:: @ 8216454
obj_tiles gBerryBlenderMarubatsuTiles, 0x200, 48888
.align 2
gSpriteTemplate_821645C:: @ 821645C
spr_template 48888, 46546, gOamData_821640C, gSpriteAnimTable_8216444, NULL, gDummySpriteAffineAnimTable, sub_8051650
.align 2
gOamData_8216474:: @ 8216474
.2byte 0x0000
.2byte 0x0000
.2byte 0x0400
.align 2
gSpriteAnim_821647C:: @ 821647C
obj_image_anim_frame 0, 3
obj_image_anim_frame 1, 4
obj_image_anim_frame 3, 5
obj_image_anim_frame 1, 4
obj_image_anim_frame 0, 3
obj_image_anim_end
.align 2
gSpriteAnim_8216494:: @ 8216494
obj_image_anim_frame 0, 3
obj_image_anim_frame 2, 4
obj_image_anim_frame 4, 5
obj_image_anim_frame 2, 4
obj_image_anim_frame 0, 3
obj_image_anim_end
.align 2
gSpriteAnim_82164AC:: @ 82164AC
obj_image_anim_frame 0, 2
obj_image_anim_frame 1, 2
obj_image_anim_frame 2, 2
obj_image_anim_frame 4, 4
obj_image_anim_frame 3, 3
obj_image_anim_frame 2, 2
obj_image_anim_frame 1, 2
obj_image_anim_frame 0, 2
obj_image_anim_end
.align 2
gSpriteAnim_82164D0:: @ 82164D0
obj_image_anim_frame 5, 5, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP
obj_image_anim_end
.align 2
gSpriteAnim_82164D8:: @ 82164D8
obj_image_anim_frame 6, 5, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP
obj_image_anim_end
.align 2
gSpriteAnimTable_82164E0:: @ 82164E0
.4byte gSpriteAnim_821647C
.4byte gSpriteAnim_8216494
.4byte gSpriteAnim_82164AC
.4byte gSpriteAnim_82164D0
.4byte gSpriteAnim_82164D8
.align 2
gUnknown_082164F4:: @ 82164F4
obj_tiles gBerryBlenderParticlesTiles, 0xE0, 23456
.align 2
gSpriteTemplate_82164FC:: @ 82164FC
spr_template 23456, 46546, gOamData_8216474, gSpriteAnimTable_82164E0, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
.align 2
gOamData_8216514:: @ 8216514
.2byte 0x0000
.2byte 0x8000
.2byte 0x0400
.align 2
gSpriteAnim_821651C:: @ 821651C
obj_image_anim_frame 32, 30
obj_image_anim_end
.align 2
gSpriteAnim_8216524:: @ 8216524
obj_image_anim_frame 16, 30
obj_image_anim_end
.align 2
gSpriteAnim_821652C:: @ 821652C
obj_image_anim_frame 0, 30
obj_image_anim_end
.align 2
gSpriteAnimTable_8216534:: @ 8216534
.4byte gSpriteAnim_821651C
.4byte gSpriteAnim_8216524
.4byte gSpriteAnim_821652C
.align 2
gUnknown_08216540:: @ 8216540
obj_tiles gBerryBlenderCountdownNumbersTiles, 0x600, 12345
.align 2
gSpriteTemplate_8216548:: @ 8216548
spr_template 12345, 46546, gOamData_8216514, gSpriteAnimTable_8216534, NULL, gDummySpriteAffineAnimTable, sub_805181C
.align 2
gOamData_8216560:: @ 8216560
.2byte 0x4000
.2byte 0xC000
.2byte 0x0400
.align 2
gSpriteAnim_8216568:: @ 8216568
obj_image_anim_frame 0, 30
obj_image_anim_end
.align 2
gSpriteAnimTable_8216570:: @ 8216570
.4byte gSpriteAnim_8216568
.align 2
gUnknown_08216574:: @ 8216574
obj_tiles gBerryBlenderStartTiles, 0x400, 12346
.align 2
gSpriteTemplate_821657C:: @ 821657C
spr_template 12346, 46546, gOamData_8216560, gSpriteAnimTable_8216570, NULL, gDummySpriteAffineAnimTable, sub_80518CC
.align 1
gUnknown_08216594:: @ 8216594
.2byte -10, 20, 10, 2, 1
.2byte 250, 20, 10, -2, 1
.2byte -10, 140, 10, 2, -1
.2byte 250, 140, 10, -2, -1
gUnknown_082165BC:: @ 82165BC
.byte 4, 3, 2
.byte 0, 4, 3
.byte 1, 0, 4
.byte 2, 1, 0
.byte 3, 2, 1
.byte 0, 2, 3
.byte 1, 3, 4
.byte 2, 4, 0
.byte 3, 0, 1
.byte 4, 1, 2
gUnknown_082165DA:: @ 82165DA
.byte 1, 1, 2, 3, 4
gUnknown_082165DF:: @ 82165DF
.byte 0x1C, 0x16, 0x13, 0x1A, 0x19, 0x0E, 0x0D, 0x0B, 0x07, 0x15
gUnknown_082165E9:: @ 82165E9
.byte 6, 6, 6, 6, 5
gUnknown_082165EE:: @ 82165EE
.byte 3, 3, 3, 2, 2
gUnknown_082165F3:: @ 82165F3
.byte 3, 3, 3, 3, 2
gUnknown_082165F8:: @ 82165F8
.string " $"
gOtherText_BPMAndDash:: @ 82165FA
.string "BPM$"
.string "-$"
gUnknown_08216600:: @ 8216600
.string "\n$"
.string "\n$"
-122
View File
@@ -1,122 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.section .rodata
EggPalette:: @ 8209AD8
.incbin "graphics/pokemon/egg/palette.gbapal"
EggHatchTiles:: @ 8209AF8
.incbin "graphics/misc/egg_hatch.4bpp"
EggShardTiles:: @ 820A2F8
.incbin "graphics/misc/egg_shard.4bpp"
.align 2
gOamData_820A378:: @ 820A378
.2byte 0x0000
.2byte 0x8000
.2byte 0x0400
.align 2
gSpriteAnim_820A380:: @ 820A380
obj_image_anim_frame 0, 5
obj_image_anim_end
.align 2
gSpriteAnim_820A388:: @ 820A388
obj_image_anim_frame 16, 5
obj_image_anim_end
.align 2
gSpriteAnim_820A390:: @ 820A390
obj_image_anim_frame 32, 5
obj_image_anim_end
.align 2
gSpriteAnim_820A398:: @ 820A398
obj_image_anim_frame 48, 5
obj_image_anim_end
.align 2
gSpriteAnimTable_820A3A0:: @ 820A3A0
.4byte gSpriteAnim_820A380
.4byte gSpriteAnim_820A388
.4byte gSpriteAnim_820A390
.4byte gSpriteAnim_820A398
.align 2
gUnknown_0820A3B0:: @ 820A3B0
obj_tiles EggHatchTiles, 2048, 12345
.align 2
gUnknown_0820A3B8:: @ 820A3B8
obj_tiles EggShardTiles, 128, 23456
.align 2
gUnknown_0820A3C0:: @ 820A3C0
obj_pal EggPalette, 54321
.align 2
gSpriteTemplate_820A3C8:: @ 820A3C8
spr_template 12345, 54321, gOamData_820A378, gSpriteAnimTable_820A3A0, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
.align 2
gOamData_820A3E0:: @ 820A3E0
.2byte 0x0000
.2byte 0x0000
.2byte 0x0800
.align 2
gSpriteAnim_820A3E8:: @ 820A3E8
obj_image_anim_frame 0, 5
obj_image_anim_end
.align 2
gSpriteAnim_820A3F0:: @ 820A3F0
obj_image_anim_frame 1, 5
obj_image_anim_end
.align 2
gSpriteAnim_820A3F8:: @ 820A3F8
obj_image_anim_frame 2, 5
obj_image_anim_end
.align 2
gSpriteAnim_820A400:: @ 820A400
obj_image_anim_frame 3, 5
obj_image_anim_end
.align 2
gSpriteAnimTable_820A408:: @ 820A408
.4byte gSpriteAnim_820A3E8
.4byte gSpriteAnim_820A3F0
.4byte gSpriteAnim_820A3F8
.4byte gSpriteAnim_820A400
.align 2
gSpriteTemplate_820A418:: @ 820A418
spr_template 23456, 54321, gOamData_820A3E0, gSpriteAnimTable_820A408, NULL, gDummySpriteAffineAnimTable, SpriteCB_EggShard
@ The values are Q8.8 fixed-point numbers.
.align 1
gEggShardVelocities:: @ 820A430
.2byte 0xFE80, 0xFC40 @ (-1.5, -3.75)
.2byte 0xFB00, 0xFD00 @ (-5, -3)
.2byte 0x0380, 0xFD00 @ (3.5, -3)
.2byte 0xFC00, 0xFC40 @ (-4, -3.75)
.2byte 0x0200, 0xFE80 @ (2, -1.5)
.2byte 0xFF80, 0xF940 @ (-0.5, -6.75)
.2byte 0x0500, 0xFDC0 @ (5, -2.25)
.2byte 0xFE80, 0xFC40 @ (-1.5, -3.75)
.2byte 0x0480, 0xFE80 @ (4.5, -1.5)
.2byte 0xFF00, 0xF940 @ (-1, -6.75)
.2byte 0x0400, 0xFDC0 @ (4, -2.25)
.2byte 0xFC80, 0xFC40 @ (-3.5, -3.75)
.2byte 0x0100, 0xFE80 @ (1, -1.5)
.2byte 0xFC7C, 0xF940 @ (-3.515625, -6.75)
.2byte 0x0480, 0xFDC0 @ (4.5, -2.25)
.2byte 0xFF80, 0xF880 @ (-0.5, -7.5)
.2byte 0x0100, 0xFB80 @ (1, -4.5)
.2byte 0xFD80, 0xFDC0 @ (-2.5, -2.25)
.2byte 0x0280, 0xF880 @ (2.5, -7.5)
-230
View File
@@ -1,230 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.section .rodata
.align 2
gUnknown_0840B514:: @ 840B514
obj_tiles gContestConfetti_Gfx, 0x220, 1001
.space 8
gUnknown_0840B524:: @ 840B524
obj_pal gContestConfetti_Pal, 1001
.space 8
.align 2
gUnknown_0840B534:: @ 840B534
.2byte 120,210,120, 40
.2byte 326,220, 56, 40
.2byte -86,220,184, 40
.2byte 120,-62,120, 88
.2byte -25,-62,200, 88
.2byte 265,-62, 40, 88
.align 2
gUnknown_0840B564:: @ 840B564
.2byte 120,214,120, 64
.2byte 281,214, 56, 64
.2byte -41,214,184, 64
.align 2
gUnknown_0840B57C:: @ 840B57C
.2byte 1002
.2byte 1002
.space 0x10
@ unused data?
.byte 2, 1, 3, 6, 4, 5
.align 2
gOamData_840B598:: @ 840B598
.2byte 0x0000
.2byte 0xC000
.2byte 0x0000
.align 2
gUnknown_0840B5A0:: @ 840B5A0
.4byte 0x02008000
.4byte 0x0200A000
.4byte 0x0200C000
.4byte 0x0200E000
.4byte 0x02010000
.4byte 0x02014000
.4byte 0x02018000
.align 2
gSpriteImageTable_840B5BC:: @ 840B5BC
obj_frame_tiles 0x02008000, 0x800
obj_frame_tiles 0x02008800, 0x800
obj_frame_tiles 0x02009000, 0x800
obj_frame_tiles 0x02009800, 0x800
.align 2
gSpriteImageTable_840B5DC:: @ 840B5DC
obj_frame_tiles 0x0200A000, 0x800
obj_frame_tiles 0x0200A800, 0x800
obj_frame_tiles 0x0200B000, 0x800
obj_frame_tiles 0x0200B800, 0x800
.align 2
gSpriteImageTable_840B5FC:: @ 840B5FC
obj_frame_tiles 0x0200C000, 0x800
obj_frame_tiles 0x0200C800, 0x800
obj_frame_tiles 0x0200D000, 0x800
obj_frame_tiles 0x0200D800, 0x800
.align 2
gSpriteImageTable_840B61C:: @ 840B61C
obj_frame_tiles 0x0200E000, 0x800
obj_frame_tiles 0x0200E800, 0x800
obj_frame_tiles 0x0200F000, 0x800
obj_frame_tiles 0x0200F800, 0x800
.align 2
gSpriteImageTable_840B63C:: @ 840B63C
obj_frame_tiles 0x02010000, 0x800
obj_frame_tiles 0x02010800, 0x800
obj_frame_tiles 0x02011000, 0x800
obj_frame_tiles 0x02011800, 0x800
.align 2
gSpriteImageTable_840B65C:: @ 840B65C
obj_frame_tiles 0x02014000, 0x800
obj_frame_tiles 0x02014800, 0x800
obj_frame_tiles 0x02015000, 0x800
obj_frame_tiles 0x02015800, 0x800
.align 2
gSpriteImageTable_840B67C:: @ 840B67C
obj_frame_tiles 0x02018000, 0x800
obj_frame_tiles 0x02018800, 0x800
obj_frame_tiles 0x02019000, 0x800
obj_frame_tiles 0x02019800, 0x800
.align 2
gUnknown_0840B69C:: @ 840B69C
.4byte gSpriteImageTable_840B5BC
.4byte gSpriteImageTable_840B5DC
.4byte gSpriteImageTable_840B5FC
.4byte gSpriteImageTable_840B61C
.4byte gSpriteImageTable_840B63C
.4byte gSpriteImageTable_840B65C
.4byte gSpriteImageTable_840B67C
gUnknown_0840B6B8:: @ 840B6B8
spr_template -1, -1, gOamData_840B598, NULL, gSpriteImageTable_840B5BC, gDummySpriteAffineAnimTable, nullsub_81
.align 2
gOamData_840B6D0:: @ 840B6D0
.2byte 0x0000
.2byte 0x0000
.2byte 0x0000
.align 2
gSpriteAnim_840B6D8:: @ 840B6D8
obj_image_anim_frame 0, 30
obj_image_anim_end
.align 2
gSpriteAnim_840B6E0:: @ 840B6E0
obj_image_anim_frame 1, 30
obj_image_anim_end
.align 2
gSpriteAnim_840B6E8:: @ 840B6E8
obj_image_anim_frame 2, 30
obj_image_anim_end
.align 2
gSpriteAnim_840B6F0:: @ 840B6F0
obj_image_anim_frame 3, 30
obj_image_anim_end
.align 2
gSpriteAnim_840B6F8:: @ 840B6F8
obj_image_anim_frame 4, 30
obj_image_anim_end
.align 2
gSpriteAnim_840B700:: @ 840B700
obj_image_anim_frame 5, 30
obj_image_anim_end
.align 2
gSpriteAnim_840B708:: @ 840B708
obj_image_anim_frame 6, 30
obj_image_anim_end
.align 2
gSpriteAnim_840B710:: @ 840B710
obj_image_anim_frame 7, 30
obj_image_anim_end
.align 2
gSpriteAnim_840B718:: @ 840B718
obj_image_anim_frame 8, 30
obj_image_anim_end
.align 2
gSpriteAnim_840B720:: @ 840B720
obj_image_anim_frame 9, 30
obj_image_anim_end
.align 2
gSpriteAnim_840B728:: @ 840B728
obj_image_anim_frame 10, 30
obj_image_anim_end
.align 2
gSpriteAnim_840B730:: @ 840B730
obj_image_anim_frame 11, 30
obj_image_anim_end
.align 2
gSpriteAnim_840B738:: @ 840B738
obj_image_anim_frame 12, 30
obj_image_anim_end
.align 2
gSpriteAnim_840B740:: @ 840B740
obj_image_anim_frame 13, 30
obj_image_anim_end
.align 2
gSpriteAnim_840B748:: @ 840B748
obj_image_anim_frame 14, 30
obj_image_anim_end
.align 2
gSpriteAnim_840B750:: @ 840B750
obj_image_anim_frame 15, 30
obj_image_anim_end
.align 2
gSpriteAnim_840B758:: @ 840B758
obj_image_anim_frame 16, 30
obj_image_anim_end
.align 2
gSpriteAnimTable_840B760:: @ 840B760
.4byte gSpriteAnim_840B6D8
.4byte gSpriteAnim_840B6E0
.4byte gSpriteAnim_840B6E8
.4byte gSpriteAnim_840B6F0
.4byte gSpriteAnim_840B6F8
.4byte gSpriteAnim_840B700
.4byte gSpriteAnim_840B708
.4byte gSpriteAnim_840B710
.4byte gSpriteAnim_840B718
.4byte gSpriteAnim_840B720
.4byte gSpriteAnim_840B728
.4byte gSpriteAnim_840B730
.4byte gSpriteAnim_840B738
.4byte gSpriteAnim_840B740
.4byte gSpriteAnim_840B748
.4byte gSpriteAnim_840B750
.4byte gSpriteAnim_840B758
.align 2
gSpriteTemplate_840B7A4:: @ 840B7A4
spr_template 1001, 1001, gOamData_840B6D0, gSpriteAnimTable_840B760, NULL, gDummySpriteAffineAnimTable, sub_814386C
+2 -2
View File
@@ -338,11 +338,11 @@ gSpriteAnimTable_8416D28:: @ 8416D28
.4byte gSpriteAnim_8416D14
.align 2
gSpriteTemplate_8416D2C:: @ 8416D2C
gSpriteTemplate_Brendan:: @ 8416D2C
spr_template 1001, 1002, gOamData_8416D0C, gSpriteAnimTable_8416D28, NULL, gDummySpriteAffineAnimTable, sub_81492A0
.align 2
gSpriteTemplate_8416D44:: @ 8416D44
gSpriteTemplate_May:: @ 8416D44
spr_template 1001, 1003, gOamData_8416D0C, gSpriteAnimTable_8416D28, NULL, gDummySpriteAffineAnimTable, sub_81492A0
.align 2
-150
View File
@@ -1,150 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.section .rodata
.align 2
gDexArrows_Pal::
.incbin "graphics/pokedex/arrows.gbapal"
.align 2
gDexArrows_Gfx::
.incbin "graphics/pokedex/arrows.4bpp"
gUnknown_08402CF8:: @ 8402CF8
.byte 0, 0, 9, 13
.byte 10, 0, 29, 7
.byte 2, 14, 27, 19
.byte 10, 8, 29, 13
gUnknown_08402D08:: @ 8402D08
.4byte OtherText_Battle
.byte 1, 1, 0, 0
.4byte OtherText_Power
.byte 1, 4, 1, 0
.4byte OtherText_Accuracy
.byte 1, 9, 2, 0
.space 8
.4byte OtherText_Contest
.byte 1, 1, 0, 0
.4byte OtherText_Appeal
.byte 1, 4, 1, 0
.4byte OtherText_Jam
.byte 1, 9, 2, 0
.space 8
.4byte 0xFF00FFEF
.4byte gTileBuffer
.align 2
gOamData_8402D50:: @ 8402D50
.2byte 0x0000
.2byte 0x0000
.2byte 0x0000
.align 2
gOamData_8402D58:: @ 8402D58
.2byte 0x8000
.2byte 0x0000
.2byte 0x0000
.align 2
gOamData_8402D60:: @ 8402D60
.2byte 0x4000
.2byte 0x0000
.2byte 0x0000
.align 2
gSpriteAnim_8402D68:: @ 8402D68
obj_image_anim_frame 2, 5
obj_image_anim_end
.align 2
gSpriteAnim_8402D70:: @ 8402D70
obj_image_anim_frame 0, 5
obj_image_anim_end
.align 2
gSpriteAnimTable_8402D78:: @ 8402D78
.4byte gSpriteAnim_8402D68
.4byte gSpriteAnim_8402D70
.align 2
gUnknown_08402D80:: @ 8402D80
obj_tiles gDexArrows_Gfx, 384, 0x1595
.align 2
gUnknown_08402D88:: @ 8402D88
obj_pal gDexArrows_Pal, 0x1596
.align 2
gSpriteTemplate_8402D90:: @ 8402D90
spr_template 5525, 5526, gOamData_8402D58, gSpriteAnimTable_8402D78, NULL, gDummySpriteAffineAnimTable, sub_8133300
.align 2
gSpriteAnim_8402DA8:: @ 8402DA8
obj_image_anim_frame 4, 5
obj_image_anim_end
.align 2
gSpriteAnim_8402DB0:: @ 8402DB0
obj_image_anim_frame 6, 5
obj_image_anim_end
.align 2
gSpriteAnimTable_8402DB8:: @ 8402DB8
.4byte gSpriteAnim_8402DA8
.4byte gSpriteAnim_8402DB0
.align 2
gSpriteTemplate_8402DC0:: @ 8402DC0
spr_template 5525, 5526, gOamData_8402D60, gSpriteAnimTable_8402DB8, NULL, gDummySpriteAffineAnimTable, sub_8133300
.align 2
gSpriteAnim_8402DD8:: @ 8402DD8
obj_image_anim_frame 8, 5
obj_image_anim_end
.align 2
gSpriteAnim_8402DE0:: @ 8402DE0
obj_image_anim_frame 9, 5
obj_image_anim_end
.align 2
gSpriteAnim_8402DE8:: @ 8402DE8
obj_image_anim_frame 10, 5
obj_image_anim_end
.align 2
gSpriteAnim_8402DF0:: @ 8402DF0
obj_image_anim_frame 11, 5
obj_image_anim_end
.align 2
gSpriteAnimTable_8402DF8:: @ 8402DF8
.4byte gSpriteAnim_8402DD8
.4byte gSpriteAnim_8402DE0
.4byte gSpriteAnim_8402DE8
.4byte gSpriteAnim_8402DF0
.align 2
gSpriteTemplate_8402E08:: @ 8402E08
spr_template 5525, 5526, gOamData_8402D50, gSpriteAnimTable_8402DF8, NULL, gDummySpriteAffineAnimTable, sub_8133300
.string "あきと$" @ programmer Akito Mori?
gUnknown_08402E24:: @ 8402E24
.byte 11, 1, 1
.byte 3, 6, 2
.byte 24, 1, 3
.byte 3, 11, 4
.byte 5, 4, 5
.byte 3, 6, 6
.byte 3, 11, 7
gUnknown_08402E39:: @ 8402E39
.byte 0, 1, 2, 3
gUnknown_08402E3D:: @ 8402E3D
.byte 4, 5, 6
+10 -1
View File
@@ -19,6 +19,15 @@
#define BATTLE_TYPE_LEGENDARY 0x2000
#define BATTLE_TYPE_REGI 0x4000
#define BATTLE_WON 0x1
#define BATTLE_LOST 0x2
#define BATTLE_DREW 0x3
#define BATTLE_RAN 0x4
#define BATTLE_PLAYER_TELEPORTED 0x5
#define BATTLE_POKE_FLED 0x6
#define BATTLE_CAUGHT 0x7
#define BATTLE_OPPONENT_TELEPORTED 0xA
#define AI_ACTION_DONE 0x0001
#define AI_ACTION_FLEE 0x0002
#define AI_ACTION_WATCH 0x0004
@@ -327,7 +336,7 @@ struct BattleStruct /* 0x2000000 */
/*0x1609D*/ u8 unk1609D;
/*0x1609E*/ u8 unk1609E;
/*0x1609F*/ u8 unk1609F;
/*0x160A0*/ u8 unk160a0;
/*0x160A0*/ u8 stringMoveType;
/*0x160A1*/ u8 animTargetsHit;
/*0x160A2*/ u8 expGetterBank;
/*0x160A3*/ u8 unk160A3;
+3 -2
View File
@@ -1,7 +1,8 @@
#ifndef GUARD_BATTLE_MESSAGE_H
#define GUARD_BATTLE_MESSAGE_H
void StrCpyDecodeToDisplayedStringBattle(const u8 *);
void StrCpyDecodeBattle(const u8 *, u8 *);
void BufferStringBattle(u16 stringID);
u32 StrCpyDecodeToDisplayedStringBattle(const u8* src);
u32 StrCpyDecodeBattle(const u8* src, u8* dst);
#endif // GUARD_BATTLE_MESSAGE_H
-6
View File
@@ -1,6 +0,0 @@
#ifndef GUARD_BERRY_BLENDER_H
#define GUARD_BERRY_BLENDER_H
void sub_80516C4(u8, u16);
#endif // GUARD_BERRY_BLENDER_H
+2
View File
@@ -45,6 +45,8 @@ extern const u8 gTrainerClassNames[][13];
extern const struct Trainer gTrainers[];
extern u8 gSpeciesNames[][11];
extern u8 gMoveNames[][13];
extern const u8 gAbilityNames[][13];
extern const u8 gTypeNames[][7];
extern const struct UnknownStructD2 gUnknown_081F9674;
extern const u8 gUnknown_081F96C8[];
extern struct CompressedSpriteSheet gUnknown_081FAEA4;
+1 -1
View File
@@ -10,7 +10,7 @@ void LoadCompressedObjectPicOverrideBuffer(const struct CompressedSpriteSheet *a
void LoadCompressedObjectPalette(const struct CompressedSpritePalette *a);
void LoadCompressedObjectPaletteOverrideBuffer(const struct CompressedSpritePalette *a, void *buffer);
void DecompressPicFromTable_2(const struct CompressedSpriteSheet *a, u8 b, u8 c, void *d, void *e, s32 f);
void HandleLoadSpecialPokePic(const struct CompressedSpriteSheet *spriteSheet, u32 b, u32 c, u32 d, void *dest, s32 species, u32 g);
void HandleLoadSpecialPokePic(const struct CompressedSpriteSheet *spriteSheet, u32 b, u32 c, u32 d, void *dest, s32 species, u32 pid);
void LoadSpecialPokePic(const struct CompressedSpriteSheet *spriteSheet, u32 b, u32 c, u32 d, void *dest, s32 species, u32 g, u32 h);
void Unused_LZDecompressWramIndirect(const void **src, void *dest);
+9 -8
View File
@@ -10,15 +10,16 @@ extern const struct SpritePalette gIntro2SpritePalettes[];
extern const struct CompressedSpriteSheet gUnknown_08416E24;
extern const struct CompressedSpriteSheet gUnknown_08416E34;
void load_intro_part2_graphics(/*TODO: arg types*/);
void sub_8148C78(/*TODO: arg types*/);
void load_intro_part2_graphics(u8 a);
void sub_8148C78(u8 a);
void sub_8148CB0(u8);
void sub_8148E90(u8);
u8 sub_8148EC0(/*TODO: arg types*/);
void sub_8149020(/*TODO: arg types*/);
u8 intro_create_brendan_sprite(/*TODO: arg types*/);
u8 intro_create_may_sprite(/*TODO: arg types*/);
u8 intro_create_latios_sprite(/*TODO: arg types*/);
u8 intro_create_latias_sprite(/*TODO: arg types*/);
u8 sub_8148EC0(u8 a, u16 b, u16 c, u16 d);
void sub_8148F3C(u8);
void sub_8149020(u8);
u8 intro_create_brendan_sprite(s16 a, s16 b);
u8 intro_create_may_sprite(s16 a, s16 b);
u8 intro_create_latios_sprite(s16 a, s16 b);
u8 intro_create_latias_sprite(s16 a, s16 b);
#endif // GUARD_INTRO_CREDITS_GRAPHICS_H
+11
View File
@@ -3,6 +3,17 @@
#include "string_util.h"
struct PocketScrollState
{
u8 cursorPos;
u8 scrollTop;
u8 numSlots;
u8 cursorMax;
};
extern struct PocketScrollState gBagPocketScrollStates[];
extern struct ItemSlot *gCurrentBagPocketItemSlots;
void ResetBagScrollPositions(void);
void ClearBag(void);
void sub_80A3E0C(void);
+1
View File
@@ -583,6 +583,7 @@ void AdjustFriendship(struct Pokemon *, u8);
u8 CheckPartyHasHadPokerus(struct Pokemon *, u8);
void UpdatePartyPokerusTime(u16);
u32 CanMonLearnTMHM(struct Pokemon *, u8);
u8 GetMoveRelearnerMoves(struct Pokemon *mon, u16 *moves);
u8 sub_8040574(struct Pokemon *party);
void ClearBattleMonForms(void);
void sub_80408BC();
+54 -54
View File
@@ -37,28 +37,28 @@ enum
/*0x1F*/ SE_SEIKAI,
/*0x20*/ SE_HAZURE,
/*0x21*/ SE_EXP,
SE_JITE_PYOKO,
SE_MU_PACHI,
SE_TK_KASYA,
SE_FU_ZAKU,
SE_FU_ZAKU2,
SE_FU_ZUZUZU,
SE_RU_GASHIN,
SE_RU_GASYAN,
SE_RU_BARI,
SE_RU_HYUU,
SE_KI_GASYAN,
SE_TK_WARPIN,
SE_TK_WARPOUT,
SE_TU_SAA,
SE_HI_TURUN,
SE_TRACK_MOVE,
SE_TRACK_STOP,
SE_TRACK_HAIK,
SE_TRACK_DOOR,
SE_MOTER,
SE_CARD,
SE_SAVE,
/*0x22*/ SE_JITE_PYOKO,
/*0x23*/ SE_MU_PACHI,
/*0x24*/ SE_TK_KASYA,
/*0x25*/ SE_FU_ZAKU,
/*0x26*/ SE_FU_ZAKU2,
/*0x27*/ SE_FU_ZUZUZU,
/*0x28*/ SE_RU_GASHIN,
/*0x29*/ SE_RU_GASYAN,
/*0x2A*/ SE_RU_BARI,
/*0x2B*/ SE_RU_HYUU,
/*0x2C*/ SE_KI_GASYAN,
/*0x2D*/ SE_TK_WARPIN,
/*0x2E*/ SE_TK_WARPOUT,
/*0x2F*/ SE_TU_SAA,
/*0x30*/ SE_HI_TURUN,
/*0x31*/ SE_TRACK_MOVE,
/*0x32*/ SE_TRACK_STOP,
/*0x33*/ SE_TRACK_HAIK,
/*0x34*/ SE_TRACK_DOOR,
/*0x35*/ SE_MOTER,
/*0x36*/ SE_CARD,
/*0x37*/ SE_SAVE,
/*0x38*/ SE_KON,
/*0x39*/ SE_KON2,
/*0x3A*/ SE_KON3,
@@ -274,38 +274,38 @@ enum
/*0x171*/ BGM_ME_BACHI,
/*0x172*/ BGM_FANFA4,
/*0x173*/ BGM_FANFA5,
BGM_ME_WAZA,
BGM_BIJYUTU,
BGM_DOORO_X4,
BGM_FUNE_KAN,
BGM_ME_SHINKA,
BGM_SHINKA,
BGM_ME_WASURE,
BGM_SYOUJOEYE,
BGM_BOYEYE,
BGM_DAN02,
BGM_MACHI_S3,
BGM_ODAMAKI,
BGM_B_TOWER,
BGM_SWIMEYE,
BGM_DAN03,
BGM_ME_KINOMI,
BGM_ME_TAMA,
BGM_ME_B_BIG,
BGM_ME_B_SMALL,
BGM_ME_ZANNEN,
BGM_BD_TIME,
BGM_TEST1,
BGM_TEST2,
BGM_TEST3,
BGM_TEST4,
BGM_TEST,
BGM_GOMACHI0,
BGM_GOTOWN,
BGM_POKECEN,
BGM_NEXTROAD,
BGM_GRANROAD,
BGM_CYCLING,
/*0x174*/ BGM_ME_WAZA,
/*0x175*/ BGM_BIJYUTU,
/*0x176*/ BGM_DOORO_X4,
/*0x177*/ BGM_FUNE_KAN,
/*0x178*/ BGM_ME_SHINKA,
/*0x179*/ BGM_SHINKA,
/*0x17A*/ BGM_ME_WASURE,
/*0x17B*/ BGM_SYOUJOEYE,
/*0x17C*/ BGM_BOYEYE,
/*0x17D*/ BGM_DAN02,
/*0x17E*/ BGM_MACHI_S3,
/*0x17F*/ BGM_ODAMAKI,
/*0x180*/ BGM_B_TOWER,
/*0x181*/ BGM_SWIMEYE,
/*0x182*/ BGM_DAN03,
/*0x183*/ BGM_ME_KINOMI,
/*0x184*/ BGM_ME_TAMA,
/*0x185*/ BGM_ME_B_BIG,
/*0x186*/ BGM_ME_B_SMALL,
/*0x187*/ BGM_ME_ZANNEN,
/*0x188*/ BGM_BD_TIME,
/*0x189*/ BGM_TEST1,
/*0x18A*/ BGM_TEST2,
/*0x18B*/ BGM_TEST3,
/*0x18C*/ BGM_TEST4,
/*0x18D*/ BGM_TEST,
/*0x18E*/ BGM_GOMACHI0,
/*0x18F*/ BGM_GOTOWN,
/*0x190*/ BGM_POKECEN,
/*0x191*/ BGM_NEXTROAD,
/*0x192*/ BGM_GRANROAD,
/*0x193*/ BGM_CYCLING,
BGM_FRIENDLY,
BGM_MISHIRO,
BGM_TOZAN,
+8 -8
View File
@@ -204,14 +204,14 @@ struct Sprite
/*0x3A*/ s16 data6;
/*0x3C*/ s16 data7;
/*0x3E*/ u16 inUse:1;
u16 coordOffsetEnabled:1;
u16 invisible:1;
u16 flags_3:1;
u16 flags_4:1;
u16 flags_5:1;
u16 flags_6:1;
u16 flags_7:1;
/*0x3E*/ u16 inUse:1; //1
u16 coordOffsetEnabled:1; //2
u16 invisible:1; //4
u16 flags_3:1; //8
u16 flags_4:1; //0x10
u16 flags_5:1; //0x20
u16 flags_6:1; //0x40
u16 flags_7:1; //0x80
/*0x3F*/ u16 hFlip:1;
u16 vFlip:1;
u16 animBeginning:1;
+9 -10
View File
@@ -74,7 +74,6 @@ SECTIONS {
src/daycare.o(.text);
asm/daycare.o(.text);
src/egg_hatch.o(.text);
asm/egg_hatch.o(.text);
src/battle_interface.o(.text);
src/smokescreen.o(.text);
src/pokeball.o(.text);
@@ -84,7 +83,7 @@ SECTIONS {
asm/trade.o(.text.sub_804A9F4);
src/trade.o(.text.sub_804DAD4);
asm/trade.o(.text.sub_804DB2C);
asm/berry_blender.o(.text);
src/berry_blender.o(.text);
src/play_time.o(.text);
src/new_game.o(.text);
src/rom4.o(.text);
@@ -229,7 +228,7 @@ SECTIONS {
src/fldeff_strength.o(.text);
asm/battle_transition.o(.text);
src/battle_811DA74.o(.text);
asm/battle_message.o(.text);
src/battle_message.o(.text);
src/choose_party.o(.text);
asm/cable_car.o(.text);
asm/roulette_util.o(.text);
@@ -244,7 +243,7 @@ SECTIONS {
asm/battle_anim_81258BC.o(.text_812BBFC);
src/fldeff_sweetscent.o(.text);
asm/battle_anim_812C144.o(.text);
asm/learn_move.o(.text);
src/learn_move.o(.text);
src/fldeff_softboiled.o(.text);
src/decoration_inventory.o(.text);
src/roamer.o(.text);
@@ -255,7 +254,7 @@ SECTIONS {
src/intro.o(.text);
src/field_region_map.o(.text);
asm/battle_anim_813F0F4.o(.text);
asm/hall_of_fame.o(.text);
src/hall_of_fame.o(.text);
src/credits.o(.text);
src/lottery_corner.o(.text);
src/diploma.o(.text);
@@ -265,7 +264,7 @@ SECTIONS {
src/braille_puzzles.o(.text);
asm/pokeblock_feed.o(.text);
src/clear_save_data_menu.o(.text);
asm/intro_credits_graphics.o(.text);
src/intro_credits_graphics.o(.text);
asm/evolution_graphics.o(.text);
src/bard_music.o(.text);
src/fldeff_teleport.o(.text);
@@ -339,11 +338,11 @@ SECTIONS {
src/trig.o(.rodata);
src/util.o(.rodata);
data/daycare.o(.rodata);
data/egg_hatch.o(.rodata);
src/egg_hatch.o(.rodata);
data/battle_interface.o(.rodata);
src/pokeball.o(.rodata);
data/trade.o(.rodata);
data/berry_blender.o(.rodata);
src/berry_blender.o(.rodata);
src/new_game.o(.rodata);
data/rom4.o(.rodata);
data/tilesets.o(.rodata);
@@ -455,7 +454,7 @@ SECTIONS {
data/contest_ai.o(.rodata);
data/battle_anim_81258BC.o(.rodata);
data/battle_anim_812C144.o(.rodata);
data/learn_move.o(.rodata);
src/learn_move.o(.rodata);
src/decoration_inventory.o(.rodata);
src/roamer.o(.rodata);
data/battle_tower.o(.rodata);
@@ -464,7 +463,7 @@ SECTIONS {
src/player_pc.o(.rodata);
src/intro.o(.rodata);
data/battle_anim_813F0F4.o(.rodata);
data/hall_of_fame.o(.rodata);
src/hall_of_fame.o(.rodata);
src/credits.o(.rodata);
data/credits.o(.rodata);
src/lottery_corner.o(.rodata);
-9
View File
@@ -246,15 +246,6 @@ extern u8 gUnknown_081D95DB[]; //bs payday money give
#define CMP_COMMON_BITS 0x4
#define CMP_NO_COMMON_BITS 0x5
#define BATTLE_WON 0x1
#define BATTLE_LOST 0x2
#define BATTLE_DREW 0x3
#define BATTLE_RAN 0x4
#define BATTLE_PLAYER_TELEPORTED 0x5
#define BATTLE_POKE_FLED 0x6
#define BATTLE_CAUGHT 0x7
#define BATTLE_OPPONENT_TELEPORTED 0xA
#define uBYTE0_16(value)(( (u8) (((u16)(value) & (0x000000FF)) >> 0x00)))
#define uBYTE1_16(value)(( (u8) (((u16)(value) & (0x0000FF00)) >> 0x08)))
+974
View File
@@ -0,0 +1,974 @@
#include "global.h"
#include "battle_message.h"
#include "battle.h"
#include "item.h"
#include "items.h"
#include "pokemon.h"
#include "data2.h"
#include "text.h"
#include "string_util.h"
#include "link.h"
#include "battle_setup.h"
#include "battle_tower.h"
#include "flags.h"
#define BATTLESTRING_TO_SUB 12
#define BATTLESTRINGS_NO 351
#define BATTLESTRINGS_MAX BATTLESTRINGS_NO + BATTLESTRING_TO_SUB
extern const u8* const gBattleStringsTable[BATTLESTRINGS_NO];
extern u16 gLastUsedItem;
extern u8 gLastUsedAbility;
extern u8 gActiveBank;
extern u8 gBankAttacker;
extern u8 gBankTarget;
extern u8 gStringBank;
extern u8 gEffectBank;
extern u8 gAbilitiesPerBank[4];
extern u8 gBattleTextBuff1[];
extern u8 gBattleTextBuff2[];
extern u8 gBattleTextBuff3[];
extern u8 gStringVar1[];
extern u8 gStringVar2[];
extern u8 gStringVar3[];
extern u16 gBattleTypeFlags;
extern u16 gTrainerBattleOpponent;
extern u8 gDisplayedStringBattle[];
extern u8 gStringVar1[];
extern u8 gStringVar2[];
extern u8 gStringVar3[];
extern u16 gBattlePartyID[4];
extern struct BattleEnigmaBerry gEnigmaBerries[4];
extern u8 gBattleBufferA[4][0x200];
extern const u8 gUnknown_084005DB[];
extern const u8 gUnknown_084005C7[];
extern const u8 gUnknown_084005AA[];
extern const u8 gUnknown_08400568[];
extern const u8 gUnknown_08400590[];
extern const u8 gUnknown_0840057B[];
extern const u8 gUnknown_08400555[];
extern const u8 gUnknown_084006F1[];
extern const u8 gUnknown_084006A4[];
extern const u8 gUnknown_0840069C[];
extern const u8 gUnknown_0840065C[];
extern const u8 gUnknown_08400645[];
extern const u8 gUnknown_08400608[];
extern const u8 gUnknown_08400635[];
extern const u8 gUnknown_084005F5[];
extern const u8 gUnknown_08400709[];
extern const u8 gUnknown_08400727[];
extern const u8 gUnknown_08400736[];
extern const u8 gUnknown_08400749[];
extern const u8 gUnknown_08400781[];
extern const u8 gUnknown_08400771[];
extern const u8 gUnknown_0840075E[];
extern const u8 gUnknown_084006B3[];
extern const u8 gUnknown_084006BB[];
extern const u8 gUnknown_084006C6[];
extern const u8 gUnknown_084006D5[];
extern const u8 gUnknown_0840068C[];
extern const u8 gUnknown_0840067C[];
extern const u8 gUnknown_08400622[];
extern const u8 gUnknown_084007BD[];
extern const u8 gUnknown_083FFEFC[];
extern const u8 gUnknown_083FFFF7[];
extern const u8 gUnknown_083FFFEA[];
extern const u8 gUnknown_083FFF6A[];
extern const u8 gUnknown_083FFF99[];
extern const u8 gUnknown_083FFFCB[];
extern const u8 gUnknown_083FFF56[];
extern const u8 gUnknown_083FFF81[];
extern const u8 gUnknown_083FFFB3[];
extern const u8 gUnknown_08400A78[];
extern const u8 gUnknown_08400A85[];
extern const u8 gUnknown_08400797[];
extern const u8 gUnknown_08400791[];
extern const u8 gUnknown_084007B7[];
extern const u8 gUnknown_084007B2[];
extern const u8 gUnknown_0840079C[];
extern const u8 gUnknown_084007A1[];
extern const u8 gUnknown_084007A7[];
extern const u8 gUnknown_084007AC[];
extern const u8 gUnknown_084009ED[];
extern const u8 gUnknown_084009F7[];
extern const u8 gUnknown_084007C8[];
extern const u8 gUnknown_084007CA[];
extern const u8 gUnknown_084007CC[];
extern const u8 gUnknown_084007CE[];
extern const u8 gUnknown_084007D0[];
extern const u8 gUnknown_08400E5E[];
extern const u8 gUnknown_08400E62[];
extern const u16 gUnknown_084016BC[]; // a table of moves
extern const u8* const gUnknown_08401674[]; // table of pointers to 'a -TYPE' strings
extern const u8* const gUnknown_08400F58[]; // table of pointers to stat strings
extern const u8* const gUnknown_08400F78[]; // table of pointers to flavour strings
struct StatusFlagString
{
u8* flag;
u8* ptr;
};
extern const struct StatusFlagString gUnknown_081FA6D4[7]; // status flag/text
extern const u8 gUnknown_084017A8[8]; // empty flags
struct StringInfo
{
u16 currentMove;
u16 lastMove;
u16 lastItem;
u8 lastAbility;
u8 scrActive;
u8 unk1605E;
u8 hpScale;
u8 StringBank;
u8 moveType;
u8 abilities[4];
u8 textBuffs[3][0x10];
};
extern struct StringInfo* gSelectedOrderFromParty;
#define gStringInfo gSelectedOrderFromParty
void sub_8121D1C(u8* textBuff);
void sub_8121D74(u8* textBuff);
void StrCpyDecodeBattleTextBuff(u8* src, u8* dst);
u8 GetBankSide(u8 bank);
s32 sub_803FC34(u16);
void get_trainer_name(u8* dst);
u8 get_trainer_class_name_index(void);
u8 sub_8135FD8(void);
u8 GetMultiplayerId(void);
u8 GetBankByPlayerAI(u8 ID);
u8 GetBankSide(u8 bank);
u8 GetBankIdentity(u8 bank);
#ifdef GERMAN
extern u8 *de_sub_804110C();
#endif
void BufferStringBattle(u16 stringID)
{
int i;
const u8* stringPtr = NULL;
gStringInfo = (struct StringInfo*)(&gBattleBufferA[gActiveBank][4]);
gLastUsedItem = gStringInfo->lastItem;
gLastUsedAbility = gStringInfo->lastAbility;
BATTLE_STRUCT->scriptingActive = gStringInfo->scrActive;
BATTLE_STRUCT->unk1605E = gStringInfo->unk1605E;
BATTLE_STRUCT->hpScale = gStringInfo->hpScale;
gStringBank = gStringInfo->StringBank;
BATTLE_STRUCT->stringMoveType = gStringInfo->moveType;
for (i = 0; i < 4; i++)
{
gAbilitiesPerBank[i] = gStringInfo->abilities[i];
}
for (i = 0; i < 0x10; i++)
{
gBattleTextBuff1[i] = gStringInfo->textBuffs[0][i];
gBattleTextBuff2[i] = gStringInfo->textBuffs[1][i];
gBattleTextBuff3[i] = gStringInfo->textBuffs[2][i];
}
switch (stringID)
{
case 0: // first battle msg
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
{
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
stringPtr = gUnknown_084005DB;
else
stringPtr = gUnknown_084005C7;
}
else
{
stringPtr = gUnknown_084005AA;
#ifdef GERMAN
stringPtr = de_sub_804110C(0xFFFF, stringPtr);
#endif
}
}
else
{
if (gBattleTypeFlags & BATTLE_TYPE_LEGENDARY)
stringPtr = gUnknown_08400568;
else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) // interesting, looks like they had something planned for wild double battles
stringPtr = gUnknown_08400590;
else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL)
stringPtr = gUnknown_0840057B;
else
stringPtr = gUnknown_08400555;
}
break;
case 1: // poke first send-out
if (GetBankSide(gActiveBank) == 0)
{
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
stringPtr = gUnknown_084006F1;
else
stringPtr = gUnknown_084006A4;
}
else
stringPtr = gUnknown_0840069C;
}
else
{
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
stringPtr = gUnknown_0840065C;
else if (gBattleTypeFlags & BATTLE_TYPE_LINK)
stringPtr = gUnknown_08400645;
else
{
stringPtr = gUnknown_08400608;
#ifdef GERMAN
stringPtr = de_sub_804110C(0xFFFF, stringPtr);
#endif
}
}
else if (gBattleTypeFlags & BATTLE_TYPE_LINK)
stringPtr = gUnknown_08400635;
else
{
stringPtr = gUnknown_084005F5;
#ifdef GERMAN
stringPtr = de_sub_804110C(0xFFFF, stringPtr);
#endif
}
}
break;
case 2: // sending poke to ball msg
if (GetBankSide(gActiveBank) == 0)
{
if (BATTLE_STRUCT->hpScale == 0)
stringPtr = gUnknown_08400709;
else if (BATTLE_STRUCT->hpScale == 1 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
stringPtr = gUnknown_08400727;
else if (BATTLE_STRUCT->hpScale == 2)
stringPtr = gUnknown_08400736;
else
stringPtr = gUnknown_08400749;
}
else
{
if (gTrainerBattleOpponent == 0x800)
{
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
stringPtr = gUnknown_08400781;
else
stringPtr = gUnknown_08400771;
}
else
{
stringPtr = gUnknown_0840075E;
#ifdef GERMAN
stringPtr = de_sub_804110C(0xFFFF, stringPtr);
#endif
}
}
break;
case 3: // switch-in msg
if (GetBankSide(BATTLE_STRUCT->scriptingActive) == 0)
{
if (BATTLE_STRUCT->hpScale == 0 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
stringPtr = gUnknown_084006B3;
else if (BATTLE_STRUCT->hpScale == 1)
stringPtr = gUnknown_084006BB;
else if (BATTLE_STRUCT->hpScale == 2)
stringPtr = gUnknown_084006C6;
else
stringPtr = gUnknown_084006D5;
}
else
{
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
stringPtr = gUnknown_0840068C;
else
stringPtr = gUnknown_0840067C;
}
else
{
stringPtr = gUnknown_08400622;
#ifdef GERMAN
stringPtr = de_sub_804110C(0xFFFF, stringPtr);
#endif
}
}
break;
case 4: // pokemon used a move msg
sub_8121D1C(gBattleTextBuff1);
if (gStringInfo->currentMove > 0x162)
StringCopy(gBattleTextBuff2, gUnknown_08401674[BATTLE_STRUCT->stringMoveType]);
else
StringCopy(gBattleTextBuff2, gMoveNames[gStringInfo->currentMove]);
sub_8121D74(gBattleTextBuff2);
stringPtr = gUnknown_084007BD;
break;
case 5: // battle end
if (gBattleTextBuff1[0] & 0x80)
{
gBattleTextBuff1[0] &= ~(0x80);
if (GetBankSide(gActiveBank) == 1 && gBattleTextBuff1[0] != 3)
gBattleTextBuff1[0] ^= 3;
if (gBattleTextBuff1[0] == BATTLE_LOST || gBattleTextBuff1[0] == BATTLE_DREW)
stringPtr = gUnknown_083FFEFC;
else
{
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
stringPtr = gUnknown_083FFFF7;
else
stringPtr = gUnknown_083FFFEA;
}
}
else
{
if (GetBankSide(gActiveBank) == 1 && gBattleTextBuff1[0] != 3)
gBattleTextBuff1[0] ^= 3;
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
{
switch (gBattleTextBuff1[0])
{
case BATTLE_WON:
stringPtr = gUnknown_083FFF6A;
break;
case BATTLE_LOST:
stringPtr = gUnknown_083FFF99;
break;
case BATTLE_DREW:
stringPtr = gUnknown_083FFFCB;
break;
}
}
else
{
switch (gBattleTextBuff1[0])
{
case BATTLE_WON:
stringPtr = gUnknown_083FFF56;
break;
case BATTLE_LOST:
stringPtr = gUnknown_083FFF81;
break;
case BATTLE_DREW:
stringPtr = gUnknown_083FFFB3;
break;
}
}
}
break;
default: // load a string from the table
if (stringID >= BATTLESTRINGS_MAX)
{
gDisplayedStringBattle[0] = EOS;
return;
}
else
{
stringPtr = gBattleStringsTable[stringID - BATTLESTRING_TO_SUB];
#ifdef GERMAN
stringPtr = de_sub_804110C(stringID, stringPtr);
#endif
}
break;
}
StrCpyDecodeToDisplayedStringBattle(stringPtr);
}
u32 StrCpyDecodeToDisplayedStringBattle(const u8* src)
{
StrCpyDecodeBattle(src, gDisplayedStringBattle);
}
const u8* AppendStatusString(u8* src)
{
u32 i;
u8 status[8];
u32 flag1, flag2;
u8* statusPtr;
memcpy(status, gUnknown_084017A8, 8);
statusPtr = status;
for (i = 0; i < sizeof(struct StatusFlagString); i++)
{
if (*src == EOS)
break;
*statusPtr = *src;
src++;
statusPtr++;
}
flag1 = *(u32*)(&status[0]);
flag2 = *(u32*)(&status[4]);
for (i = 0; i < 7; i++)
{
if (flag1 == *(u32*)(&gUnknown_081FA6D4[i].flag[0]) && flag2 == *(u32*)(&gUnknown_081FA6D4[i].flag[4]))
return gUnknown_081FA6D4[i].ptr;
}
return NULL;
}
#ifdef GERMAN
extern u8 *de_sub_8073174(u8 *, const u8 *);
extern u8 *de_sub_8041024(s32, u32);
#endif
#ifdef ENGLISH
#define HANDLE_NICKNAME_STRING_CASE(bank, monIndex) \
if (GetBankSide(bank) != 0) \
{ \
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) \
toCpy = gUnknown_08400797; \
else \
toCpy = gUnknown_08400791; \
while (*toCpy != EOS) \
{ \
dst[dstID] = *toCpy; \
dstID++; \
toCpy++; \
} \
GetMonData(&gEnemyParty[monIndex], MON_DATA_NICKNAME, text); \
} \
else \
{ \
GetMonData(&gPlayerParty[monIndex], MON_DATA_NICKNAME, text); \
} \
StringGetEnd10(text); \
toCpy = text;
#else
#define HANDLE_NICKNAME_STRING_CASE(bank, monIndex) \
if (GetBankSide(bank) != 0) \
{ \
GetMonData(&gEnemyParty[monIndex], MON_DATA_NICKNAME, text); \
StringGetEnd10(text); \
toCpy = text; \
while (*toCpy != EOS) \
{ \
dst[dstID] = *toCpy; \
dstID++; \
toCpy++; \
} \
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) \
toCpy = gUnknown_08400797; \
else \
toCpy = gUnknown_08400791; \
} \
else \
{ \
GetMonData(&gPlayerParty[monIndex], MON_DATA_NICKNAME, text); \
StringGetEnd10(text); \
toCpy = text; \
}
#endif
u32 StrCpyDecodeBattle(const u8* src, u8* dst)
{
u32 dstID = 0; // if they used dstID, why not use srcID as well?
const u8* toCpy = NULL;
u8 text[12];
u8 multiplayerID = GetMultiplayerId();
while (*src != EOS)
{
if (*src == 0xFD)
{
src++;
switch (*src)
{
case 0:
if (gBattleTextBuff1[0] == 0xFD)
{
StrCpyDecodeBattleTextBuff(gBattleTextBuff1, gStringVar1);
toCpy = gStringVar1;
}
else
{
toCpy = AppendStatusString(gBattleTextBuff1);
if (toCpy == 0)
toCpy = gBattleTextBuff1;
}
break;
case 1:
if (gBattleTextBuff2[0] == 0xFD)
{
StrCpyDecodeBattleTextBuff(gBattleTextBuff2, gStringVar2);
toCpy = gStringVar2;
}
else
toCpy = gBattleTextBuff2;
break;
case 42:
if (gBattleTextBuff3[0] == 0xFD)
{
StrCpyDecodeBattleTextBuff(gBattleTextBuff3, gStringVar3);
toCpy = gStringVar3;
}
else
toCpy = gBattleTextBuff3;
break;
case 2: // first player poke name
GetMonData(&gPlayerParty[gBattlePartyID[GetBankByPlayerAI(0)]], MON_DATA_NICKNAME, text);
StringGetEnd10(text);
toCpy = text;
break;
case 3: // first enemy poke name
GetMonData(&gEnemyParty[gBattlePartyID[GetBankByPlayerAI(1)]], MON_DATA_NICKNAME, text);
StringGetEnd10(text);
toCpy = text;
break;
case 4: // second player poke name
GetMonData(&gPlayerParty[gBattlePartyID[GetBankByPlayerAI(2)]], MON_DATA_NICKNAME, text);
StringGetEnd10(text);
toCpy = text;
break;
case 5: // second enemy poke name
GetMonData(&gEnemyParty[gBattlePartyID[GetBankByPlayerAI(3)]], MON_DATA_NICKNAME, text);
StringGetEnd10(text);
toCpy = text;
break;
case 6: // link first player poke name
GetMonData(&gPlayerParty[gBattlePartyID[gLinkPlayers[multiplayerID].lp_field_18]], MON_DATA_NICKNAME, text);
StringGetEnd10(text);
toCpy = text;
break;
case 7: // link first opponent poke name
GetMonData(&gEnemyParty[gBattlePartyID[gLinkPlayers[multiplayerID].lp_field_18 ^ 1]], MON_DATA_NICKNAME, text);
StringGetEnd10(text);
toCpy = text;
break;
case 8: // link second player poke name
GetMonData(&gPlayerParty[gBattlePartyID[gLinkPlayers[multiplayerID].lp_field_18 ^ 2]], MON_DATA_NICKNAME, text);
StringGetEnd10(text);
toCpy = text;
break;
case 9: // link second opponent poke name
GetMonData(&gEnemyParty[gBattlePartyID[gLinkPlayers[multiplayerID].lp_field_18 ^ 3]], MON_DATA_NICKNAME, text);
StringGetEnd10(text);
toCpy = text;
break;
case 10: // attacker name with prefix, only bank 0/1
HANDLE_NICKNAME_STRING_CASE(gBankAttacker, gBattlePartyID[GetBankByPlayerAI(GetBankIdentity(gBankAttacker) & 1)])
break;
case 11: // attacker partner name, only bank 0/1
if (GetBankSide(gBankAttacker) == 0)
GetMonData(&gPlayerParty[gBattlePartyID[GetBankByPlayerAI(GetBankIdentity(gBankAttacker) & 1) + 2]], MON_DATA_NICKNAME, text);
else
GetMonData(&gEnemyParty[gBattlePartyID[GetBankByPlayerAI(GetBankIdentity(gBankAttacker) & 1) + 2]], MON_DATA_NICKNAME, text);
StringGetEnd10(text);
toCpy = text;
break;
case 12: // attacker name with prefix
HANDLE_NICKNAME_STRING_CASE(gBankAttacker, gBattlePartyID[gBankAttacker])
break;
case 13: // target name with prefix
HANDLE_NICKNAME_STRING_CASE(gBankTarget, gBattlePartyID[gBankTarget])
break;
case 14: // effect bank name with prefix
HANDLE_NICKNAME_STRING_CASE(gEffectBank, gBattlePartyID[gEffectBank])
break;
case 15: // active bank name with prefix
HANDLE_NICKNAME_STRING_CASE(gActiveBank, gBattlePartyID[gActiveBank])
break;
case 16: // scripting active bank name with prefix
HANDLE_NICKNAME_STRING_CASE(BATTLE_STRUCT->scriptingActive, gBattlePartyID[BATTLE_STRUCT->scriptingActive])
break;
case 17: // current move name
if (gStringInfo->currentMove > 0x162)
toCpy = (void*) &gUnknown_08401674[BATTLE_STRUCT->stringMoveType];
else
toCpy = gMoveNames[gStringInfo->currentMove];
break;
case 18: // last used move name
if (gStringInfo->lastMove > 0x162)
toCpy = (void*) &gUnknown_08401674[BATTLE_STRUCT->stringMoveType];
else
toCpy = gMoveNames[gStringInfo->lastMove];
break;
case 19: // last used item
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{
if (gLastUsedItem == ITEM_ENIGMA_BERRY)
{
if (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18 == gStringBank)
{
StringCopy(text, gEnigmaBerries[gStringBank].name);
#ifdef ENGLISH
StringAppend(text, gUnknown_08400A85);
#else
de_sub_8073174(text, gUnknown_08400A85);
#endif
toCpy = text;
}
else
toCpy = gUnknown_08400A78;
}
else
{
CopyItemName(gLastUsedItem, text);
toCpy = text;
}
}
else
{
CopyItemName(gLastUsedItem, text);
toCpy = text;
}
break;
case 20: // last used ability
toCpy = gAbilityNames[gLastUsedAbility];
break;
case 21: // attacker ability
toCpy = gAbilityNames[gAbilitiesPerBank[gBankAttacker]];
break;
case 22: // target ability
toCpy = gAbilityNames[gAbilitiesPerBank[gBankTarget]];
break;
case 23: // scripting active ability
toCpy = gAbilityNames[gAbilitiesPerBank[BATTLE_STRUCT->scriptingActive]];
break;
case 24: // effect bank ability
toCpy = gAbilityNames[gAbilitiesPerBank[gEffectBank]];
break;
case 25: // trainer class name
#ifdef ENGLISH
if (gTrainerBattleOpponent == 0x400)
toCpy = gTrainerClassNames[GetSecretBaseTrainerNameIndex()];
else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER)
toCpy = gTrainerClassNames[get_trainer_class_name_index()];
else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER)
toCpy = gTrainerClassNames[sub_8135FD8()];
else
toCpy = gTrainerClassNames[gTrainers[gTrainerBattleOpponent].trainerClass];
break;
#else
if (gTrainerBattleOpponent == 0x400)
toCpy = de_sub_8041024(gTrainerBattleOpponent, 0);
else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER)
toCpy = de_sub_8041024(BATTLE_TYPE_BATTLE_TOWER, 0);
else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER)
toCpy = de_sub_8041024(BATTLE_TYPE_EREADER_TRAINER, 0);
else
toCpy = de_sub_8041024(0, gTrainerBattleOpponent);
break;
#endif
case 26: // trainer name
if (gTrainerBattleOpponent == 0x400)
{
memset(text, 0xFF, 8);
memcpy(text, &ewram[0x17002], 7);
toCpy = text;
}
else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER)
{
get_trainer_name(text);
toCpy = text;
}
else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER)
{
sub_8135FF4(text);
toCpy = text;
}
else
toCpy = gTrainers[gTrainerBattleOpponent].trainerName;
break;
case 27: // link player name?
toCpy = gLinkPlayers[multiplayerID].name;
break;
case 28: // link partner name?
toCpy = gLinkPlayers[sub_803FC34(2 ^ gLinkPlayers[multiplayerID].lp_field_18)].name;
break;
case 29: // link opponent 1 name?
toCpy = gLinkPlayers[sub_803FC34(1 ^ gLinkPlayers[multiplayerID].lp_field_18)].name;
break;
case 30: // link opponent 2 name?
toCpy = gLinkPlayers[sub_803FC34(3 ^ gLinkPlayers[multiplayerID].lp_field_18)].name;
break;
case 31: // link scripting active name
toCpy = gLinkPlayers[sub_803FC34(BATTLE_STRUCT->scriptingActive)].name;
break;
case 32: // player name
toCpy = gSaveBlock2.playerName;
break;
case 33: // ?
toCpy = sub_8082830();
break;
case 34: // ?
HANDLE_NICKNAME_STRING_CASE(BATTLE_STRUCT->scriptingActive, BATTLE_STRUCT->unk1605E)
break;
case 35: // lanette pc
if (FlagGet(SYS_PC_LANETTE))
toCpy = gUnknown_084009F7;
else
toCpy = gUnknown_084009ED;
break;
case 38:
if (GetBankSide(gBankAttacker) == 0)
toCpy = gUnknown_084007AC;
else
toCpy = gUnknown_084007A7;
break;
case 39:
if (GetBankSide(gBankTarget) == 0)
toCpy = gUnknown_084007AC;
else
toCpy = gUnknown_084007A7;
break;
case 36:
if (GetBankSide(gBankAttacker) == 0)
toCpy = gUnknown_084007A1;
else
toCpy = gUnknown_0840079C;
break;
case 37:
if (GetBankSide(gBankTarget) == 0)
toCpy = gUnknown_084007A1;
else
toCpy = gUnknown_0840079C;
break;
case 40:
if (GetBankSide(gBankAttacker) == 0)
toCpy = gUnknown_084007B7;
else
toCpy = gUnknown_084007B2;
break;
case 41:
if (GetBankSide(gBankTarget) == 0)
toCpy = gUnknown_084007B7;
else
toCpy = gUnknown_084007B2;
break;
}
//if (toCpy != NULL) really GF, why did you forget about this?
while (*toCpy != EOS)
{
dst[dstID] = *toCpy;
dstID++;
toCpy++;
}
if (*src == 33)
{
dst[dstID] = 0xFC;
dstID++;
dst[dstID] = 9;
dstID++;
}
}
else
{
dst[dstID] = *src;
dstID++;
}
src++;
}
dst[dstID] = *src;
dstID++;
return dstID;
}
#define ByteRead16(ptr) ((ptr)[0] | ((ptr)[1] << 8))
#define ByteRead32(ptr) ((ptr)[0] | (ptr)[1] << 8 | (ptr)[2] << 16 | (ptr)[3] << 24)
void StrCpyDecodeBattleTextBuff(u8* src, u8* dst)
{
u32 srcID = 1;
u32 value = 0;
u8 text[12];
u16 hword;
*dst = EOS;
while (src[srcID] != EOS)
{
switch (src[srcID])
{
case 0: // battle string
hword = ByteRead16(&src[srcID + 1]);
#ifdef GERMAN
if (hword == 209 || hword == 211)
srcID += 3;
#endif
StringAppend(dst, gBattleStringsTable[hword - BATTLESTRING_TO_SUB]);
srcID += 3;
break;
case 1: // int to string
switch (src[srcID + 1])
{
case 1:
value = src[srcID + 3];
break;
case 2:
value = ByteRead16(&src[srcID + 3]);
break;
case 4:
value = ByteRead32(&src[srcID + 3]);
break;
}
ConvertIntToDecimalStringN(dst, value, 0, src[srcID + 2]);
srcID += src[srcID + 1] + 3;
break;
case 2: // move name
StringAppend(dst, gMoveNames[ByteRead16(&src[srcID + 1])]);
srcID += 3;
break;
case 3: // type name
StringAppend(dst, gTypeNames[src[srcID + 1]]);
srcID += 2;
break;
case 4: // poke nick with prefix
#ifdef ENGLISH
if (GetBankSide(src[srcID + 1]) == 0)
{
GetMonData(&gPlayerParty[src[srcID + 2]], MON_DATA_NICKNAME, text);
}
else
{
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
StringAppend(dst, gUnknown_08400797);
else
StringAppend(dst, gUnknown_08400791);
GetMonData(&gEnemyParty[src[srcID + 2]], MON_DATA_NICKNAME, text);
}
StringGetEnd10(text);
StringAppend(dst, text);
#else
if (GetBankSide(src[srcID + 1]) == 0)
{
GetMonData(&gPlayerParty[src[srcID + 2]], MON_DATA_NICKNAME, text);
StringGetEnd10(text);
StringAppend(dst, text);
}
else
{
GetMonData(&gEnemyParty[src[srcID + 2]], MON_DATA_NICKNAME, text);
StringGetEnd10(text);
StringAppend(dst, text);
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
StringAppend(dst, gUnknown_08400797);
else
StringAppend(dst, gUnknown_08400791);
}
#endif
srcID += 3;
break;
case 5: // stats
StringAppend(dst, gUnknown_08400F58[src[srcID + 1]]);
srcID += 2;
break;
case 6: // species name
GetSpeciesName(dst, ByteRead16(&src[srcID + 1]));
srcID += 3;
break;
case 7: // poke nick without prefix
if (GetBankSide(src[srcID + 1]) == 0)
GetMonData(&gPlayerParty[src[srcID + 2]], MON_DATA_NICKNAME, dst);
else
GetMonData(&gEnemyParty[src[srcID + 2]], MON_DATA_NICKNAME, dst);
StringGetEnd10(dst);
srcID += 3;
break;
case 8: // flavour table
StringAppend(dst, gUnknown_08400F78[src[srcID + 1]]);
srcID += 2;
break;
case 9: // ability names
StringAppend(dst, gAbilityNames[src[srcID + 1]]);
srcID += 2;
break;
case 10: // item name
{
hword = ByteRead16(&src[srcID + 1]);
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{
if (hword == ITEM_ENIGMA_BERRY)
{
if (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18 == gStringBank)
{
StringCopy(dst, gEnigmaBerries[gStringBank].name);
#ifdef ENGLISH
StringAppend(dst, gUnknown_08400A85);
#else
de_sub_8073174(dst, gUnknown_08400A85);
#endif
}
else
StringAppend(dst, gUnknown_08400A78);
}
else
CopyItemName(hword, dst);
}
else
CopyItemName(hword, dst);
srcID += 3;
}
break;
}
}
}
void sub_8121D1C(u8* textBuff)
{
s32 counter = 0;
u32 i = 0;
while (counter != 4)
{
if (gUnknown_084016BC[i] == 0)
counter++;
if (gUnknown_084016BC[i++] == gStringInfo->currentMove)
break;
}
if (counter >= 0)
{
if (counter <= 2)
StringCopy(textBuff, gUnknown_08400E5E); // is
else if (counter <= 4)
StringCopy(textBuff, gUnknown_08400E62); // 's
}
}
void sub_8121D74(u8* dst)
{
s32 counter = 0;
s32 i = 0;
while (*dst != EOS)
dst++;
while (counter != 4)
{
if (gUnknown_084016BC[i] == 0)
counter++;
if (gUnknown_084016BC[i++] == gStringInfo->currentMove)
break;
}
switch (counter)
{
case 0:
StringCopy(dst, gUnknown_084007C8);
break;
case 1:
StringCopy(dst, gUnknown_084007CA);
break;
case 2:
StringCopy(dst, gUnknown_084007CC);
break;
case 3:
StringCopy(dst, gUnknown_084007CE);
break;
case 4:
StringCopy(dst, gUnknown_084007D0);
break;
}
}
+3884
View File
File diff suppressed because it is too large Load Diff
+59 -184
View File
@@ -61,9 +61,9 @@ static void sub_8146440(u8 taskId);
static void sub_8146480(u8 taskid);
static void sub_81464E4(void);
static void sub_8146600(u8 berry);
// static void sub_81466A0(void);
static void sub_81466A0(void);
static void sub_81466E8(u8 taskId, s8 direction);
// static void sub_8146798(u8 berry);
static void sub_8146798(u8 berry);
static void sub_8146810(s8 berry);
static void sub_81468BC(void);
@@ -347,7 +347,7 @@ static void sub_8146600(u8 berry)
gUnknown_0203932E[4] = sub_80A7E5C(208);
}
void sub_81466A0(void)
static void sub_81466A0(void)
{
u16 i;
@@ -361,105 +361,36 @@ void sub_81466A0(void)
}
}
__attribute__((naked))
static void sub_81466E8(u8 taskId, s8 direction)
{
asm(".syntax unified\n\
push {r4-r7,lr}\n\
mov r7, r8\n\
push {r7}\n\
lsls r0, 24\n\
lsrs r7, r0, 24\n\
lsls r1, 24\n\
lsrs r2, r1, 24\n\
lsls r0, r7, 2\n\
adds r0, r7\n\
lsls r0, 3\n\
ldr r1, _08146748 @ =gTasks + 0x8\n\
adds r6, r0, r1\n\
ldr r4, _0814674C @ =gBagPocketScrollStates\n\
movs r0, 0xC\n\
adds r0, r4\n\
mov r8, r0\n\
ldrb r1, [r0, 0x1]\n\
ldrb r0, [r4, 0xC]\n\
adds r1, r0\n\
cmp r1, 0\n\
bne _08146718\n\
lsls r0, r2, 24\n\
cmp r0, 0\n\
blt _0814678C\n\
_08146718:\n\
adds r0, r1, 0x1\n\
lsls r5, r2, 24\n\
mov r1, r8\n\
ldrb r1, [r1, 0x2]\n\
cmp r0, r1\n\
bne _08146728\n\
cmp r5, 0\n\
bgt _0814678C\n\
_08146728:\n\
movs r0, 0x5\n\
bl PlaySE\n\
mov r2, r8\n\
ldrb r3, [r2, 0x1]\n\
ldrb r4, [r4, 0xC]\n\
mov r12, r4\n\
adds r0, r3, r4\n\
asrs r2, r5, 24\n\
adds r1, r0, r2\n\
cmp r1, 0\n\
bge _08146750\n\
negs r0, r0\n\
strh r0, [r6, 0x2]\n\
b _08146766\n\
.align 2, 0\n\
_08146748: .4byte gTasks + 0x8\n\
_0814674C: .4byte gBagPocketScrollStates\n\
_08146750:\n\
mov r4, r8\n\
ldrb r0, [r4, 0x2]\n\
cmp r1, r0\n\
blt _08146764\n\
subs r0, r3\n\
mov r1, r12\n\
subs r0, r1\n\
subs r0, 0x1\n\
strh r0, [r6, 0x2]\n\
b _08146766\n\
_08146764:\n\
strh r2, [r6, 0x2]\n\
_08146766:\n\
ldr r0, _08146780 @ =gTasks\n\
lsls r1, r7, 2\n\
adds r1, r7\n\
lsls r1, 3\n\
adds r1, r0\n\
ldr r0, _08146784 @ =sub_8146798\n\
str r0, [r1]\n\
cmp r5, 0\n\
bge _08146788\n\
movs r2, 0x10\n\
negs r2, r2\n\
adds r0, r2, 0\n\
b _0814678A\n\
.align 2, 0\n\
_08146780: .4byte gTasks\n\
_08146784: .4byte sub_8146798\n\
_08146788:\n\
movs r0, 0x10\n\
_0814678A:\n\
strh r0, [r6]\n\
_0814678C:\n\
pop {r3}\n\
mov r8, r3\n\
pop {r4-r7}\n\
pop {r0}\n\
bx r0\n\
.syntax divided\n");
u8 berryPocket = 3;
s16 *data = gTasks[taskId].data;
if (gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos == 0
&& direction < 0)
return;
if (gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos + 1 == gBagPocketScrollStates[berryPocket].numSlots
&& direction > 0)
return;
PlaySE(SE_SELECT);
if (gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos + direction < 0)
data[1] = -(gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos);
else if (gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos + direction >= gBagPocketScrollStates[berryPocket].numSlots)
data[1] = gBagPocketScrollStates[berryPocket].numSlots - gBagPocketScrollStates[berryPocket].scrollTop - gBagPocketScrollStates[berryPocket].cursorPos - 1;
else
data[1] = direction;
gTasks[taskId].func = sub_8146798;
if (direction < 0)
data[0] = -16;
else
data[0] = 16;
}
void sub_8146798(u8 taskId)
static void sub_8146798(u8 taskId)
{
s16 *taskData = gTasks[taskId].data;
@@ -478,94 +409,38 @@ void sub_8146798(u8 taskId)
}
}
__attribute__((naked))
static void sub_8146810(s8 berry)
{
asm(".syntax unified\n\
push {r4-r6,lr}\n\
lsls r0, 24\n\
lsrs r3, r0, 24\n\
adds r4, r3, 0\n\
lsls r0, r3, 24\n\
asrs r1, r0, 24\n\
cmp r1, 0\n\
ble _08146848\n\
ldr r0, _08146840 @ =gBagPocketScrollStates\n\
adds r4, r0, 0\n\
adds r4, 0xC\n\
ldrb r2, [r0, 0xC]\n\
adds r1, r2, r1\n\
adds r6, r0, 0\n\
cmp r1, 0x7\n\
ble _08146844\n\
adds r0, r3, 0\n\
adds r0, 0xF9\n\
adds r0, r2, r0\n\
ldrb r1, [r4, 0x1]\n\
adds r0, r1\n\
strb r0, [r4, 0x1]\n\
movs r0, 0x7\n\
b _0814686E\n\
.align 2, 0\n\
_08146840: .4byte gBagPocketScrollStates\n\
_08146844:\n\
adds r0, r2, r3\n\
b _0814686E\n\
_08146848:\n\
ldr r0, _08146868 @ =gBagPocketScrollStates\n\
adds r5, r0, 0\n\
adds r5, 0xC\n\
ldrb r2, [r0, 0xC]\n\
adds r1, r2, r1\n\
adds r6, r0, 0\n\
cmp r1, 0\n\
bge _0814686C\n\
adds r0, r2, r3\n\
ldrb r1, [r5, 0x1]\n\
adds r0, r1\n\
movs r1, 0\n\
strb r0, [r5, 0x1]\n\
strb r1, [r6, 0xC]\n\
b _08146870\n\
.align 2, 0\n\
_08146868: .4byte gBagPocketScrollStates\n\
_0814686C:\n\
adds r0, r2, r4\n\
_0814686E:\n\
strb r0, [r6, 0xC]\n\
_08146870:\n\
ldr r2, _081468AC @ =gScriptItemId\n\
movs r0, 0x3\n\
lsls r0, 2\n\
adds r0, r6\n\
ldrb r1, [r0, 0x1]\n\
ldrb r0, [r0]\n\
adds r1, r0\n\
ldr r0, _081468B0 @ =gCurrentBagPocketItemSlots\n\
ldr r0, [r0]\n\
lsls r1, 2\n\
adds r1, r0\n\
ldrh r0, [r1]\n\
strh r0, [r2]\n\
ldr r0, _081468B4 @ =gUnknown_0203932C\n\
ldrb r1, [r0]\n\
lsls r0, r1, 4\n\
adds r0, r1\n\
lsls r0, 2\n\
ldr r1, _081468B8 @ =gSprites\n\
adds r0, r1\n\
bl DestroySprite\n\
bl sub_81466A0\n\
bl sub_80A7DD4\n\
pop {r4-r6}\n\
pop {r0}\n\
bx r0\n\
.align 2, 0\n\
_081468AC: .4byte gScriptItemId\n\
_081468B0: .4byte gCurrentBagPocketItemSlots\n\
_081468B4: .4byte gUnknown_0203932C\n\
_081468B8: .4byte gSprites\n\
.syntax divided\n");
u8 berryPocket = 3;
if (berry > 0)
{
if (gBagPocketScrollStates[berryPocket].cursorPos + berry > 7)
{
gBagPocketScrollStates[berryPocket].scrollTop += gBagPocketScrollStates[berryPocket].cursorPos - 7 + berry;
gBagPocketScrollStates[berryPocket].cursorPos = 7;
}
else
{
gBagPocketScrollStates[berryPocket].cursorPos += berry;
}
}
else
{
if (gBagPocketScrollStates[berryPocket].cursorPos + berry < 0)
{
gBagPocketScrollStates[berryPocket].scrollTop += gBagPocketScrollStates[berryPocket].cursorPos + berry;
gBagPocketScrollStates[berryPocket].cursorPos = 0;
}
else
{
gBagPocketScrollStates[berryPocket].cursorPos += berry;
}
}
gScriptItemId = gCurrentBagPocketItemSlots[gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos].itemId;
DestroySprite(&gSprites[gUnknown_0203932C]);
sub_81466A0();
sub_80A7DD4();
}
static void sub_81468BC(void)
+7 -89
View File
@@ -211,11 +211,10 @@ bool8 sub_8121E78(void)
return FALSE;
}
#ifdef NONMATCHING
static bool8 IsMonAllowedInBattleTower(struct Pokemon *pkmn)
{
u16 r3;
s32 i;
u16 species;
s32 i = 0;
if (GetMonData(pkmn, MON_DATA_IS_EGG))
return FALSE;
@@ -232,97 +231,16 @@ static bool8 IsMonAllowedInBattleTower(struct Pokemon *pkmn)
&& GetMonData(pkmn, MON_DATA_LEVEL) > 50)
return FALSE;
r3 = GetMonData(pkmn, MON_DATA_SPECIES);
// Can't stop the compiler from optimizing out the first index
for (i = 0; gBattleTowerBanlist[i] != 0xFFFF; i++)
// Check if the pkmn is in the ban list
species = GetMonData(pkmn, MON_DATA_SPECIES);
while (gBattleTowerBanlist[i] != 0xFFFF)
{
if (gBattleTowerBanlist[i] == r3)
if (gBattleTowerBanlist[i] == species)
return FALSE;
i++;
}
return TRUE;
}
#else
__attribute__((naked))
static bool8 IsMonAllowedInBattleTower(struct Pokemon *pkmn)
{
asm_unified(
"push {r4,lr}\n\
adds r4, r0, 0\n\
movs r1, 0x2D\n\
bl GetMonData\n\
cmp r0, 0\n\
bne _0812207C\n\
ldr r0, _08122058 @ =0x0201b000\n\
ldr r1, _0812205C @ =0x00000263\n\
adds r0, r1\n\
ldrb r0, [r0]\n\
cmp r0, 0\n\
bne _08122060\n\
adds r0, r4, 0\n\
movs r1, 0x39\n\
bl GetMonData\n\
cmp r0, 0\n\
beq _0812207C\n\
b _081220B6\n\
.align 2, 0\n\
_08122058: .4byte 0x0201b000\n\
_0812205C: .4byte 0x00000263\n\
_08122060:\n\
ldr r0, _08122080 @ =gSaveBlock2\n\
ldr r1, _08122084 @ =0x00000554\n\
adds r0, r1\n\
ldrb r1, [r0]\n\
movs r0, 0x1\n\
ands r0, r1\n\
cmp r0, 0\n\
bne _08122088\n\
adds r0, r4, 0\n\
movs r1, 0x38\n\
bl GetMonData\n\
cmp r0, 0x32\n\
bls _08122088\n\
_0812207C:\n\
movs r0, 0\n\
b _081220B8\n\
.align 2, 0\n\
_08122080: .4byte gSaveBlock2\n\
_08122084: .4byte 0x00000554\n\
_08122088:\n\
adds r0, r4, 0\n\
movs r1, 0xB\n\
bl GetMonData\n\
lsls r0, 16\n\
lsrs r3, r0, 16\n\
ldr r1, _081220C0 @ =gBattleTowerBanlist\n\
movs r0, 0\n\
lsls r0, 1\n\
adds r2, r0, r1\n\
ldrh r0, [r2]\n\
ldr r1, _081220C4 @ =0x0000ffff\n\
cmp r0, r1\n\
beq _081220B6\n\
adds r4, r1, 0\n\
adds r1, r2, 0\n\
_081220A8:\n\
ldrh r0, [r1]\n\
cmp r0, r3\n\
beq _0812207C\n\
adds r1, 0x2\n\
ldrh r0, [r1]\n\
cmp r0, r4\n\
bne _081220A8\n\
_081220B6:\n\
movs r0, 0x1\n\
_081220B8:\n\
pop {r4}\n\
pop {r1}\n\
bx r1\n\
.align 2, 0\n\
_081220C0: .4byte gBattleTowerBanlist\n\
_081220C4: .4byte 0x0000ffff\n"
);
}
#endif
static u8 sub_81220C8(void)
{
+813 -1
View File
@@ -1,7 +1,226 @@
#include "global.h"
#include "pokemon.h"
#include "items.h"
#include "decompress.h"
#include "data2.h"
#include "task.h"
#include "script.h"
#include "palette.h"
#include "rom4.h"
#include "main.h"
#include "event_data.h"
#include "sound.h"
#include "songs.h"
#include "text.h"
#include "text_window.h"
#include "string_util.h"
#include "strings2.h"
#include "menu.h"
#include "naming_screen.h"
#include "trig.h"
#include "rng.h"
void CreatedHatchedMon(struct Pokemon *egg, struct Pokemon *temp) {
extern u8 ewram[];
extern struct SpriteTemplate gUnknown_02024E8C;
struct EggHatchData
{
u8 eggSpriteID;
u8 pokeSpriteID;
u8 CB2_state;
u8 CB2_PalCounter;
u8 eggPartyID;
struct Window window;
u8 tileDataStartOffset;
u8 unused_39;
u8 eggShardVelocityID;
};
struct EggHatchData* gEggHatchData;
extern const u32 gUnknown_08D00000[];
extern const u32 gUnknown_08D00524[];
extern const u32 gUnknown_0820CA98[];
extern const u32 gUnknown_0820F798[];
extern const u16 gUnknown_08D004E0[]; //palette
extern const u16 gUnknown_0820C9F8[]; //palette
extern const struct SpriteSheet sUnknown_0820A3B0;
extern const struct SpriteSheet sUnknown_0820A3B8;
extern const struct SpritePalette sUnknown_0820A3C0;
bool8 GetNationalPokedexFlag(u16 nationalNum, u8 caseID);
u8* GetMonNick(struct Pokemon* mon, u8* dst);
u8 sav1_map_get_name(void);
const struct CompressedSpritePalette* sub_8040990(struct Pokemon* mon); //gets pokemon palette address
void sub_8080990(void);
static void Task_EggHatch(u8 taskID);
static void CB2_EggHatch_0(void);
static void CB2_EggHatch_1(void);
static void SpriteCB_Egg_0(struct Sprite* sprite);
static void SpriteCB_Egg_1(struct Sprite* sprite);
static void SpriteCB_Egg_2(struct Sprite* sprite);
static void SpriteCB_Egg_3(struct Sprite* sprite);
static void SpriteCB_Egg_4(struct Sprite* sprite);
static void SpriteCB_Egg_5(struct Sprite* sprite);
static void SpriteCB_EggShard(struct Sprite* sprite);
static void EggHatchPrintMessage2(u8* src);
static void EggHatchPrintMessage1(u8* src);
static bool8 EggHatchUpdateWindowText(void);
static void CreateRandomEggShardSprite(void);
static void CreateEggShardSprite(u8 x, u8 y, s16 data1, s16 data2, s16 data3, u8 spriteAnimIndex);
// graphics
static const u16 sEggPalette[] = INCBIN_U16("graphics/pokemon/egg/palette.gbapal");
static const u8 sEggHatchTiles[] = INCBIN_U8("graphics/misc/egg_hatch.4bpp");
static const u8 sEggShardTiles[] = INCBIN_U8("graphics/misc/egg_shard.4bpp");
static const struct OamData sOamData_820A378 =
{
.y = 0,
.affineMode = 0,
.objMode = 0,
.mosaic = 0,
.bpp = 0,
.shape = 0,
.x = 0,
.matrixNum = 0,
.size = 2,
.tileNum = 0,
.priority = 1,
.paletteNum = 0,
.affineParam = 0,
};
static const union AnimCmd sSpriteAnim_820A380[] =
{
ANIMCMD_FRAME(0, 5),
ANIMCMD_END
};
static const union AnimCmd sSpriteAnim_820A388[] =
{
ANIMCMD_FRAME(16, 5),
ANIMCMD_END
};
static const union AnimCmd sSpriteAnim_820A390[] =
{
ANIMCMD_FRAME(32, 5),
ANIMCMD_END
};
static const union AnimCmd sSpriteAnim_820A398[] =
{
ANIMCMD_FRAME(48, 5),
ANIMCMD_END
};
static const union AnimCmd *const sSpriteAnimTable_820A3A0[] =
{
sSpriteAnim_820A380,
sSpriteAnim_820A388,
sSpriteAnim_820A390,
sSpriteAnim_820A398,
};
static const struct SpriteSheet sUnknown_0820A3B0 =
{
.data = sEggHatchTiles,
.size = 2048,
.tag = 12345,
};
static const struct SpriteSheet sUnknown_0820A3B8 =
{
.data = sEggShardTiles,
.size = 128,
.tag = 23456,
};
static const struct SpritePalette sUnknown_0820A3C0 =
{
.data = sEggPalette,
.tag = 54321
};
static const struct SpriteTemplate sSpriteTemplate_820A3C8 =
{
.tileTag = 12345,
.paletteTag = 54321,
.oam = &sOamData_820A378,
.anims = sSpriteAnimTable_820A3A0,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
static const struct OamData sOamData_820A3E0 =
{
.y = 0,
.affineMode = 0,
.objMode = 0,
.mosaic = 0,
.bpp = 0,
.shape = 0,
.x = 0,
.matrixNum = 0,
.size = 0,
.tileNum = 0,
.priority = 2,
.paletteNum = 0,
.affineParam = 0,
};
static const union AnimCmd sSpriteAnim_820A3E8[] =
{
ANIMCMD_FRAME(0, 5),
ANIMCMD_END
};
static const union AnimCmd sSpriteAnim_820A3F0[] =
{
ANIMCMD_FRAME(1, 5),
ANIMCMD_END
};
static const union AnimCmd sSpriteAnim_820A3F8[] =
{
ANIMCMD_FRAME(2, 5),
ANIMCMD_END
};
static const union AnimCmd sSpriteAnim_820A400[] =
{
ANIMCMD_FRAME(3, 5),
ANIMCMD_END
};
static const union AnimCmd *const sSpriteAnimTable_820A408[] =
{
sSpriteAnim_820A3E8,
sSpriteAnim_820A3F0,
sSpriteAnim_820A3F8,
sSpriteAnim_820A400,
};
static const struct SpriteTemplate sSpriteTemplate_820A418 =
{
.tileTag = 23456,
.paletteTag = 54321,
.oam = &sOamData_820A3E0,
.anims = sSpriteAnimTable_820A408,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_EggShard
};
// actual code
static void CreatedHatchedMon(struct Pokemon *egg, struct Pokemon *temp)
{
u16 species;
u32 personality, pokerus;
u8 i, friendship, language, gameMet, markings;
@@ -50,3 +269,596 @@ void CreatedHatchedMon(struct Pokemon *egg, struct Pokemon *temp) {
*egg = *temp;
}
static void AddHatchedMonToParty(u8 id)
{
u8 isEgg;
u16 pokeNum;
u8 name[12];
u16 ball;
u16 caughtLvl;
u8 mapNameID;
struct Pokemon* mon = &gPlayerParty[id];
CreatedHatchedMon(mon, &gEnemyParty[0]);
isEgg = 0;
SetMonData(mon, MON_DATA_IS_EGG, &isEgg);
pokeNum = GetMonData(mon, MON_DATA_SPECIES);
GetSpeciesName(name, pokeNum);
SetMonData(mon, MON_DATA_NICKNAME, name);
pokeNum = SpeciesToNationalPokedexNum(pokeNum);
GetNationalPokedexFlag(pokeNum, 2);
GetNationalPokedexFlag(pokeNum, 3);
GetMonNick(mon, gStringVar1);
ball = ITEM_POKE_BALL;
SetMonData(mon, MON_DATA_POKEBALL, (const u8*) &ball);
caughtLvl = 0;
SetMonData(mon, MON_DATA_MET_LEVEL, (const u8*) &caughtLvl);
mapNameID = sav1_map_get_name();
SetMonData(mon, MON_DATA_MET_LOCATION, &mapNameID);
MonRestorePP(mon);
CalculateMonStats(mon);
}
void ScriptHatchMon(void)
{
AddHatchedMonToParty(gSpecialVar_0x8004);
}
#ifdef NONMATCHING
static bool8 sub_8042ABC(void* a, u8 b)
{
}
#else
__attribute__((naked))
static bool8 sub_8042ABC(void* a, u8 b)
{
asm(".syntax unified\n\
push {r4-r6,lr}\n\
sub sp, 0x20\n\
adds r5, r0, 0\n\
lsls r4, r1, 24\n\
lsrs r4, 24\n\
lsls r0, r4, 2\n\
adds r0, r4\n\
lsls r0, 4\n\
adds r0, r5, r0\n\
mov r1, sp\n\
bl GetBoxMonNick\n\
lsls r0, r4, 3\n\
subs r0, r4\n\
lsls r1, r0, 3\n\
adds r0, r5, r1\n\
adds r0, 0xC0\n\
ldrh r0, [r0]\n\
cmp r0, 0\n\
beq _08042B40\n\
adds r0, r1, 0\n\
adds r0, 0xA0\n\
adds r5, r0\n\
adds r6, r5, 0\n\
adds r6, 0x2C\n\
mov r0, sp\n\
adds r1, r6, 0\n\
bl StringCompareWithoutExtCtrlCodes\n\
cmp r0, 0\n\
bne _08042B08\n\
ldr r0, _08042B30 @ =gSaveBlock2\n\
adds r1, r5, 0\n\
adds r1, 0x24\n\
bl StringCompareWithoutExtCtrlCodes\n\
cmp r0, 0\n\
beq _08042B40\n\
_08042B08:\n\
ldr r0, _08042B34 @ =gStringVar1\n\
mov r1, sp\n\
bl StringCopy\n\
ldr r4, _08042B38 @ =gStringVar2\n\
adds r1, r5, 0\n\
adds r1, 0x24\n\
adds r0, r4, 0\n\
bl StringCopy\n\
ldr r0, _08042B3C @ =gStringVar3\n\
adds r1, r6, 0\n\
bl StringCopy\n\
adds r0, r4, 0\n\
bl SanitizeNameString\n\
movs r0, 0x1\n\
b _08042B42\n\
.align 2, 0\n\
_08042B30: .4byte gSaveBlock2\n\
_08042B34: .4byte gStringVar1\n\
_08042B38: .4byte gStringVar2\n\
_08042B3C: .4byte gStringVar3\n\
_08042B40:\n\
movs r0, 0\n\
_08042B42:\n\
add sp, 0x20\n\
pop {r4-r6}\n\
pop {r1}\n\
bx r1\n\
.syntax divided");
}
#endif // NONMATCHING
bool8 sub_8042B4C(void)
{
return sub_8042ABC(&gSaveBlock1.daycareData, gSpecialVar_0x8004);
}
static u8 EggHatchCreateMonSprite(u8 a0, u8 switchID, u8 pokeID)
{
u8 r5 = 0;
u8 spriteID = 0;
struct Pokemon* mon = NULL;
if (a0 == 0)
{
mon = &gPlayerParty[pokeID];
r5 = 1;
}
if (a0 == 1)
{
mon = &gPlayerParty[pokeID];
r5 = 3;
}
switch (switchID)
{
case 0:
{
u16 species = GetMonData(mon, MON_DATA_SPECIES);
u32 pid = GetMonData(mon, MON_DATA_PERSONALITY);
HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset,(u32)(&ewram[0]), gUnknown_081FAF4C[2 * a0 + 1], species, pid);
LoadCompressedObjectPalette(sub_8040990(mon));
}
break;
case 1:
GetMonSpriteTemplate_803C56C(sub_8040990(mon)->tag, r5);
spriteID = CreateSprite(&gUnknown_02024E8C, 120, 70, 6);
gSprites[spriteID].invisible = 1;
gSprites[spriteID].callback = SpriteCallbackDummy;
break;
}
return spriteID;
}
static void VBlankCB_EggHatch(void)
{
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
}
void EggHatch(void)
{
ScriptContext2_Enable();
CreateTask(Task_EggHatch, 10);
BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
}
static void Task_EggHatch(u8 taskID)
{
if (!gPaletteFade.active)
{
SetMainCallback2(CB2_EggHatch_0);
gFieldCallback = sub_8080990;
DestroyTask(taskID);
}
}
static void CB2_EggHatch_0(void)
{
switch (gMain.state)
{
case 0:
REG_DISPCNT = 0;
gEggHatchData = (struct EggHatchData*)(&ewram[0x18000]);
gEggHatchData->eggPartyID = gSpecialVar_0x8004;
gEggHatchData->eggShardVelocityID = 0;
ResetTasks();
ResetSpriteData();
FreeAllSpritePalettes();
SetVBlankCallback(VBlankCB_EggHatch);
gMain.state++;
gSpecialVar_0x8005 = GetCurrentMapMusic();
break;
case 1:
SetUpWindowConfig(&gWindowConfig_81E6F84);
InitWindowFromConfig(&gEggHatchData->window, &gWindowConfig_81E6F84);
gEggHatchData->tileDataStartOffset = SetTextWindowBaseTileNum(20);
LoadTextWindowGraphics(&gEggHatchData->window);
gMain.state++;
break;
case 2:
LZDecompressVram(&gUnknown_08D00000, (void*)(VRAM));
CpuSet(&gUnknown_08D00524, &ewram[0], 0x800);
DmaCopy16(3, &ewram[0], (void*)(VRAM + 0x2800), 0x500);
LoadCompressedPalette(&gUnknown_08D004E0, 0, 0x20);
gMain.state++;
break;
case 3:
LoadSpriteSheet(&sUnknown_0820A3B0);
LoadSpriteSheet(&sUnknown_0820A3B8);
LoadSpritePalette(&sUnknown_0820A3C0);
gMain.state++;
break;
case 4:
gEggHatchData->eggSpriteID = CreateSprite(&sSpriteTemplate_820A3C8, 0x78, 0x4B, 5);
AddHatchedMonToParty(gEggHatchData->eggPartyID);
gMain.state++;
break;
case 5:
EggHatchCreateMonSprite(0, 0, gEggHatchData->eggPartyID);
gMain.state++;
break;
case 6:
gEggHatchData->pokeSpriteID = EggHatchCreateMonSprite(0, 1, gEggHatchData->eggPartyID);
gMain.state++;
break;
case 7:
{
u32 offsetRead, offsetWrite;
u32 offsetRead2, offsetWrite2;
u32 size;
REG_BG2CNT = 0x4C06;
LoadPalette(&gUnknown_0820C9F8, 0x10, 0xA0);
offsetRead = (u32)(&gUnknown_0820CA98);
offsetWrite = (VRAM + 0x4000);
size = 0x1300;
while (TRUE)
{
DmaCopy16(3, offsetRead, (void *) (offsetWrite), 0x1000);
offsetRead += 0x1000;
offsetWrite += 0x1000;
size -= 0x1000;
if (size <= 0x1000)
{
DmaCopy16(3, offsetRead, (void *) (offsetWrite), size);
break;
}
}
offsetRead2 = (u32)(&gUnknown_0820F798);
offsetWrite2 = (u32)(VRAM + 0x6000);
DmaCopy16(3, offsetRead2, (void*)(offsetWrite2), 0x1000);
gMain.state++;
}
break;
case 8:
REG_BG1CNT = 0x501;
REG_BG0HOFS = 0;
REG_BG0VOFS = 0;
REG_BG1HOFS = 0;
REG_BG1VOFS = 0;
REG_BG2HOFS = 0;
REG_BG2VOFS = 0;
SetMainCallback2(CB2_EggHatch_1);
gEggHatchData->CB2_state = 0;
break;
}
}
static void EggHatchSetMonNickname(void)
{
SetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_NICKNAME, gStringVar3);
SetMainCallback2(c2_exit_to_overworld_2_switch);
}
static void Task_EggHatchPlayBGM(u8 taskID)
{
if (gTasks[taskID].data[0] == 0)
StopMapMusic();
if (gTasks[taskID].data[0] == 1)
PlayBGM(376);
if (gTasks[taskID].data[0] > 60)
{
PlayBGM(377);
DestroyTask(taskID);
//return; task is destroyed, yet you increment the value?
}
gTasks[taskID].data[0]++;
}
static void CB2_EggHatch_1(void)
{
switch (gEggHatchData->CB2_state)
{
case 0:
BeginNormalPaletteFade(-1, 0, 0x10, 0, 0);
REG_DISPCNT = 0x1740;
gEggHatchData->CB2_state++;
CreateTask(Task_EggHatchPlayBGM, 5);
break;
case 1:
if (!gPaletteFade.active)
{
gEggHatchData->CB2_PalCounter = 0;
gEggHatchData->CB2_state++;
}
break;
case 2:
if (++gEggHatchData->CB2_PalCounter > 30)
{
gEggHatchData->CB2_state++;
gSprites[gEggHatchData->eggSpriteID].callback = SpriteCB_Egg_0;
}
break;
case 3:
if (gSprites[gEggHatchData->eggSpriteID].callback == SpriteCallbackDummy)
gEggHatchData->CB2_state++;
break;
case 4:
GetMonNick(&gPlayerParty[gEggHatchData->eggPartyID], gStringVar1);
StringExpandPlaceholders(gStringVar4, gOtherText_HatchedFromEgg);
EggHatchPrintMessage2(gStringVar4);
PlayFanfare(371);
gEggHatchData->CB2_state++;
break;
case 5:
if (IsFanfareTaskInactive())
gEggHatchData->CB2_state++;
break;
case 6:
if (IsFanfareTaskInactive())
gEggHatchData->CB2_state++;
break;
case 7:
GetMonNick(&gPlayerParty[gEggHatchData->eggPartyID], gStringVar1);
StringExpandPlaceholders(gStringVar4, gOtherText_NickHatchPrompt);
EggHatchPrintMessage1(gStringVar4);
gEggHatchData->CB2_state++;
break;
case 8:
if (EggHatchUpdateWindowText())
{
MenuDrawTextWindow(22, 8, 27, 13);
InitYesNoMenu(22, 8, 4);
gEggHatchData->CB2_state++;
}
break;
case 9:
{
s8 menuInput;
if ((menuInput = ProcessMenuInputNoWrap_()) != -2)
{
if (menuInput != -1 && menuInput != 1)
{
u16 species;
u8 gender;
u32 personality;
GetMonNick(&gPlayerParty[gEggHatchData->eggPartyID], gStringVar3);
species = GetMonData(&gPlayerParty[gEggHatchData->eggPartyID], MON_DATA_SPECIES);
gender = GetMonGender(&gPlayerParty[gEggHatchData->eggPartyID]);
personality = GetMonData(&gPlayerParty[gEggHatchData->eggPartyID], MON_DATA_PERSONALITY, 0);
DoNamingScreen(3, gStringVar3, species, gender, personality, EggHatchSetMonNickname);
}
else
gEggHatchData->CB2_state++;
}
}
break;
case 10:
BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
gEggHatchData->CB2_state++;
break;
case 11:
if (!gPaletteFade.active)
SetMainCallback2(c2_exit_to_overworld_2_switch);
break;
}
RunTasks();
AnimateSprites();
BuildOamBuffer();
UpdatePaletteFade();
}
static void SpriteCB_Egg_0(struct Sprite* sprite)
{
if (++sprite->data0 > 20)
{
sprite->callback = SpriteCB_Egg_1;
sprite->data0 = 0;
}
else
{
sprite->data1 = (sprite->data1 + 20) & 0xFF;
sprite->pos2.x = Sin(sprite->data1, 1);
if (sprite->data0 == 15)
{
PlaySE(SE_BOWA);
StartSpriteAnim(sprite, 1);
CreateRandomEggShardSprite();
}
}
}
static void SpriteCB_Egg_1(struct Sprite* sprite)
{
if (++sprite->data2 > 30)
{
if (++sprite->data0 > 20)
{
sprite->callback = SpriteCB_Egg_2;
sprite->data0 = 0;
sprite->data2 = 0;
}
else
{
sprite->data1 = (sprite->data1 + 20) & 0xFF;
sprite->pos2.x = Sin(sprite->data1, 2);
if (sprite->data0 == 15)
{
PlaySE(SE_BOWA);
StartSpriteAnim(sprite, 2);
}
}
}
}
static void SpriteCB_Egg_2(struct Sprite* sprite)
{
if (++sprite->data2 > 30)
{
if (++sprite->data0 > 38)
{
u16 species;
sprite->callback = SpriteCB_Egg_3;
sprite->data0 = 0;
species = GetMonData(&gPlayerParty[gEggHatchData->eggPartyID], MON_DATA_SPECIES);
gSprites[gEggHatchData->pokeSpriteID].pos2.x = 0;
gSprites[gEggHatchData->pokeSpriteID].pos2.y = gMonFrontPicCoords[species].y_offset;
}
else
{
sprite->data1 = (sprite->data1 + 20) & 0xFF;
sprite->pos2.x = Sin(sprite->data1, 2);
if (sprite->data0 == 15)
{
PlaySE(SE_BOWA);
StartSpriteAnim(sprite, 2);
CreateRandomEggShardSprite();
CreateRandomEggShardSprite();
}
if (sprite->data0 == 30)
PlaySE(SE_BOWA);
}
}
}
static void SpriteCB_Egg_3(struct Sprite* sprite)
{
if (++sprite->data0 > 50)
{
sprite->callback = SpriteCB_Egg_4;
sprite->data0 = 0;
}
}
static void SpriteCB_Egg_4(struct Sprite* sprite)
{
s16 i;
if (sprite->data0 == 0)
BeginNormalPaletteFade(-1, -1, 0, 0x10, 0xFFFF);
if (sprite->data0 < 4u)
{
for (i = 0; i <= 3; i++)
CreateRandomEggShardSprite();
}
sprite->data0++;
if (!gPaletteFade.active)
{
PlaySE(SE_TAMAGO);
sprite->invisible = 1;
sprite->callback = SpriteCB_Egg_5;
sprite->data0 = 0;
}
}
static void SpriteCB_Egg_5(struct Sprite* sprite)
{
if (sprite->data0 == 0)
{
gSprites[gEggHatchData->pokeSpriteID].invisible = 0;
StartSpriteAffineAnim(&gSprites[gEggHatchData->pokeSpriteID], 1);
}
if (sprite->data0 == 8)
BeginNormalPaletteFade(-1, -1, 0x10, 0, 0xFFFF);
if (sprite->data0 <= 9)
gSprites[gEggHatchData->pokeSpriteID].pos1.y -= 1;
if (sprite->data0 > 40)
sprite->callback = SpriteCallbackDummy;
sprite->data0++;
}
static void SpriteCB_EggShard(struct Sprite* sprite)
{
sprite->data4 += sprite->data1;
sprite->data5 += sprite->data2;
sprite->pos2.x = sprite->data4 / 256;
sprite->pos2.y = sprite->data5 / 256;
sprite->data2 += sprite->data3;
if (sprite->pos1.y + sprite->pos2.y > sprite->pos1.y + 20 && sprite->data2 > 0)
DestroySprite(sprite);
}
// Converts a number to Q8.8 fixed-point format
#define Q_8_8(n) ((s16)((n) * 256))
static const s16 sEggShardVelocities[][2] =
{
{Q_8_8(-1.5), Q_8_8(-3.75)},
{Q_8_8(-5), Q_8_8(-3)},
{Q_8_8(3.5), Q_8_8(-3)},
{Q_8_8(-4), Q_8_8(-3.75)},
{Q_8_8(2), Q_8_8(-1.5)},
{Q_8_8(-0.5), Q_8_8(-6.75)},
{Q_8_8(5), Q_8_8(-2.25)},
{Q_8_8(-1.5), Q_8_8(-3.75)},
{Q_8_8(4.5), Q_8_8(-1.5)},
{Q_8_8(-1), Q_8_8(-6.75)},
{Q_8_8(4), Q_8_8(-2.25)},
{Q_8_8(-3.5), Q_8_8(-3.75)},
{Q_8_8(1), Q_8_8(-1.5)},
{Q_8_8(-3.515625), Q_8_8(-6.75)},
{Q_8_8(4.5), Q_8_8(-2.25)},
{Q_8_8(-0.5), Q_8_8(-7.5)},
{Q_8_8(1), Q_8_8(-4.5)},
{Q_8_8(-2.5), Q_8_8(-2.25)},
{Q_8_8(2.5), Q_8_8(-7.5)},
};
static void CreateRandomEggShardSprite(void)
{
u16 spriteAnimIndex;
s16 velocity1 = sEggShardVelocities[gEggHatchData->eggShardVelocityID][0];
s16 velocity2 = sEggShardVelocities[gEggHatchData->eggShardVelocityID][1];
gEggHatchData->eggShardVelocityID++;
spriteAnimIndex = Random() % 4;
CreateEggShardSprite(120, 60, velocity1, velocity2, 100, spriteAnimIndex);
}
static void CreateEggShardSprite(u8 x, u8 y, s16 data1, s16 data2, s16 data3, u8 spriteAnimIndex)
{
u8 spriteID = CreateSprite(&sSpriteTemplate_820A418, x, y, 4);
gSprites[spriteID].data1 = data1;
gSprites[spriteID].data2 = data2;
gSprites[spriteID].data3 = data3;
StartSpriteAnim(&gSprites[spriteID], spriteAnimIndex);
}
static void EggHatchPrintMessage1(u8* src)
{
sub_8002EB0(&gEggHatchData->window, src, gEggHatchData->tileDataStartOffset, 3, 15);
}
static void EggHatchPrintMessage2(u8* src)
{
sub_8003460(&gEggHatchData->window, src, gEggHatchData->tileDataStartOffset, 3, 15);
}
static bool8 EggHatchUpdateWindowText(void)
{
return sub_80035AC(&gEggHatchData->window);
}
+1413
View File
File diff suppressed because it is too large Load Diff
+532
View File
@@ -0,0 +1,532 @@
#include "global.h"
#include "gba/m4a_internal.h"
#include "intro.h"
#include "data2.h"
#include "decompress.h"
#include "hall_of_fame.h"
#include "intro_credits_graphics.h"
#include "libgncmultiboot.h"
#include "link.h"
#include "m4a.h"
#include "main.h"
#include "new_game.h"
#include "palette.h"
#include "rng.h"
#include "save.h"
#include "songs.h"
#include "sound.h"
#include "species.h"
#include "task.h"
#include "title_screen.h"
#include "trig.h"
#include "unknown_task.h"
// define register constants for the inline asm
asm(".include \"constants/gba_constants.inc\"\n");
struct UnknownStruct1
{
u8 var0_0:4;
u8 var0_4:2;
u8 var0_6:2;
u8 var1;
u8 var2;
u8 var3;
u16 var4;
};
extern u8 gUnknown_0841225C;
extern u8 gUnknown_084126DC;
extern u8 gUnknown_084121FC;
extern u8 gUnknown_084128D8;
extern u8 gUnknown_08412EB4;
extern u8 gUnknown_08412818;
extern u8 gUnknown_08413184;
extern u8 gUnknown_08413340;
extern u8 gUnknown_084139C8;
extern u8 gUnknown_08413300;
extern u8 gUnknown_08413CCC;
extern const struct SpriteTemplate gSpriteTemplate_8416B3C;
const extern struct CompressedSpriteSheet gUnknown_08416B54;
const extern struct CompressedSpriteSheet gUnknown_08416BDC;
extern u16 gUnknown_02039358;
extern s16 gUnknown_0203935A;
extern s16 gUnknown_0203935C;
extern u8 gReservedSpritePaletteCount;
void sub_8149248();
void sub_8149264();
void load_intro_part2_graphics(u8 a)
{
LZ77UnCompVram(&gUnknown_0841225C, (void *)(VRAM + 0x4000));
LZ77UnCompVram(&gUnknown_084126DC, (void *)(VRAM + 0x7800));
LoadPalette(&gUnknown_084121FC, 240, 32);
switch (a)
{
case 0:
default:
LZ77UnCompVram(&gUnknown_084128D8, (void *)(VRAM));
LZ77UnCompVram(&gUnknown_08412EB4, (void *)(VRAM + 0x3000));
LoadPalette(&gUnknown_08412818, 0, 96);
LoadCompressedObjectPic(&gUnknown_08416B54);
LoadPalette(&gUnknown_08413184, 256, 32);
sub_8149248();
break;
case 1:
LZ77UnCompVram(&gUnknown_08413340, (void *)(VRAM));
LZ77UnCompVram(&gUnknown_084139C8, (void *)(VRAM + 0x3000));
LoadPalette(&gUnknown_08413300, 0, 32);
LoadCompressedObjectPic(&gUnknown_08416BDC);
LoadPalette(&gUnknown_08413CCC, 256, 32);
sub_8149264();
break;
}
gUnknown_0203935C = 0;
gReservedSpritePaletteCount = 8;
}
void sub_8148C78(u8 a)
{
if (a == 1)
{
REG_BG3CNT = 0x603;
REG_BG2CNT = 0x702;
REG_BG1CNT = 0xF05;
REG_DISPCNT = 0x1E40;
}
else
{
REG_BG3CNT = 0x603;
REG_BG2CNT = 0x702;
REG_BG1CNT = 0xF05;
REG_DISPCNT = 0x1E40;
}
}
extern u8 gUnknown_084131C4;
extern u8 gUnknown_084131A4;
extern u8 gUnknown_0841221C;
extern u8 gUnknown_08412878;
extern u8 gUnknown_08413320;
extern u8 gUnknown_0841223C;
extern u8 gUnknown_08413E78;
extern u8 gUnknown_08414084;
extern u8 gUnknown_08413E38;
const extern struct CompressedSpriteSheet gUnknown_08416C70;
extern u8 gUnknown_08414064;
extern struct UnknownStruct1 gUnknown_08416B94;
extern struct UnknownStruct1 gUnknown_08416C10;
extern struct UnknownStruct1 gUnknown_08416C8C;
const extern union AnimCmd *const gSpriteAnimTable_8416B84;
const extern union AnimCmd *const gSpriteAnimTable_8416C04;
const extern union AnimCmd *const gSpriteAnimTable_8416C88;
const extern struct SpriteTemplate gSpriteTemplate_8416CDC;
const extern struct SpriteTemplate gSpriteTemplate_Brendan;
const extern struct SpriteTemplate gSpriteTemplate_8416CF4;
const extern struct SpriteTemplate gSpriteTemplate_May;
const extern struct SpriteTemplate gSpriteTemplate_8416D7C;
const extern struct SpriteTemplate gSpriteTemplate_8416D94;
void sub_8149280();
void sub_8148CB0(u8 a)
{
LZ77UnCompVram(&gUnknown_0841225C, (void *)(VRAM + 0x4000));
LZ77UnCompVram(&gUnknown_084126DC, (void *)(VRAM + 0x7800));
switch (a)
{
case 0:
default:
LoadPalette(&gUnknown_084121FC, 240, 32);
LZ77UnCompVram(&gUnknown_084128D8, (void *)(VRAM));
LZ77UnCompVram(&gUnknown_08412EB4, (void *)(VRAM + 0x3000));
LoadPalette(&gUnknown_08412818, 0, 96);
LoadCompressedObjectPic(&gUnknown_08416B54);
LZ77UnCompVram(&gUnknown_084131C4, (void *)(VRAM + 0x10000));
LoadPalette(&gUnknown_08413184, 256, 32);
sub_8149248();
break;
case 1:
LoadPalette(&gUnknown_0841221C, 240, 32);
LZ77UnCompVram(&gUnknown_084128D8, (void *)(VRAM));
LZ77UnCompVram(&gUnknown_08412EB4, (void *)(VRAM + 0x3000));
LoadPalette(&gUnknown_08412878, 0, 96);
LoadCompressedObjectPic(&gUnknown_08416B54);
LZ77UnCompVram(&gUnknown_084131C4, (void *)(VRAM + 0x10000));
LoadPalette(&gUnknown_084131A4, 256, 32);
sub_8149248();
break;
case 2:
case 3:
LoadPalette(&gUnknown_0841221C, 240, 32);
LZ77UnCompVram(&gUnknown_08413340, (void *)(VRAM));
LZ77UnCompVram(&gUnknown_084139C8, (void *)(VRAM + 0x3000));
LoadPalette(&gUnknown_08413320, 0, 32);
LoadCompressedObjectPic(&gUnknown_08416BDC);
LoadPalette(&gUnknown_08413320, 256, 32);
sub_8149264();
break;
case 4:
LoadPalette(&gUnknown_0841223C, 240, 32);
LZ77UnCompVram(&gUnknown_08413E78, (void *)(VRAM));
LZ77UnCompVram(&gUnknown_08414084, (void *)(VRAM + 0x3000));
LoadPalette(&gUnknown_08413E38, 0, 64);
LoadCompressedObjectPic(&gUnknown_08416C70);
LoadPalette(&gUnknown_08414064, 256, 32);
sub_8149280();
break;
}
gReservedSpritePaletteCount = 8;
gUnknown_0203935C = 0;
}
void sub_8148E90(u8 a)
{
REG_BG3CNT = 0x603;
REG_BG2CNT = 0x702;
REG_BG1CNT = 0xF05;
REG_DISPCNT = 0x1F40;
}
u8 sub_8148EC0(u8 a, u16 b, u16 c, u16 d)
{
u8 taskId = CreateTask(&sub_8148F3C, 0);
gTasks[taskId].data[0] = a;
gTasks[taskId].data[1] = b;
gTasks[taskId].data[2] = 0;
gTasks[taskId].data[3] = 0;
gTasks[taskId].data[4] = c;
gTasks[taskId].data[5] = 0;
gTasks[taskId].data[6] = 0;
gTasks[taskId].data[7] = d;
gTasks[taskId].data[8] = 8;
gTasks[taskId].data[9] = 0;
sub_8148F3C(taskId);
return taskId;
}
#ifdef NONMATCHING
void sub_8148F3C(u8 taskId)
{
register u32 r4 asm("r4");
s32 r2;
r4 = (u16)gTasks[taskId].data[1] << 16;
if (r4 != 0)
{
r2 = (gTasks[taskId].data[2] << 16) + (u16)gTasks[taskId].data[3] - (r4 >> 12);
gTasks[taskId].data[2] = r2 >> 16;
gTasks[taskId].data[3] = r2;
REG_BG1HOFS = gTasks[taskId].data[2];
REG_BG1VOFS = gUnknown_0203935A + gUnknown_02039358;
}
r4 = (u16)gTasks[taskId].data[4] << 16;
if (r4 != 0)
{
r2 = (gTasks[taskId].data[5] << 16) + (u16)gTasks[taskId].data[6] - (r4 >> 12);
gTasks[taskId].data[5] = r2 >> 16;
gTasks[taskId].data[3] = r2;
REG_BG2HOFS = gTasks[taskId].data[5];
if (gTasks[taskId].data[0] != 0)
REG_BG2VOFS = gUnknown_0203935A + gUnknown_02039358;
else
REG_BG2VOFS = gUnknown_02039358;
}
r4 = (u16)gTasks[taskId].data[7] << 16;
if (r4 != 0)
{
r2 = (gTasks[taskId].data[8] << 16) + (u16)gTasks[taskId].data[9] - (r4 >> 12);;
gTasks[taskId].data[8] = r2 >> 16;
gTasks[taskId].data[9] = r2;
REG_BG3HOFS = gTasks[taskId].data[8];
REG_BG3VOFS = gUnknown_02039358;
}
}
#else
__attribute__((naked))
void sub_8148F3C(u8 taskId)
{
asm(".syntax unified\n\
push {r4-r6,lr}\n\
lsls r0, 24\n\
lsrs r5, r0, 24\n\
ldr r1, _08148FB4 @ =gTasks\n\
lsls r0, r5, 2\n\
adds r0, r5\n\
lsls r0, 3\n\
adds r3, r0, r1\n\
ldrh r0, [r3, 0xA]\n\
lsls r4, r0, 16\n\
adds r6, r1, 0\n\
cmp r4, 0\n\
beq _08148F7C\n\
movs r1, 0xC\n\
ldrsh r0, [r3, r1]\n\
lsls r0, 16\n\
ldrh r1, [r3, 0xE]\n\
adds r2, r0, r1\n\
lsrs r0, r4, 12\n\
subs r2, r0\n\
asrs r1, r2, 16\n\
strh r1, [r3, 0xC]\n\
strh r2, [r3, 0xE]\n\
ldr r0, _08148FB8 @ =REG_BG1HOFS\n\
strh r1, [r0]\n\
ldr r2, _08148FBC @ =REG_BG1VOFS\n\
ldr r1, _08148FC0 @ =gUnknown_02039358\n\
ldr r0, _08148FC4 @ =gUnknown_0203935A\n\
ldrh r0, [r0]\n\
ldrh r1, [r1]\n\
adds r0, r1\n\
strh r0, [r2]\n\
_08148F7C:\n\
ldrh r0, [r3, 0x10]\n\
lsls r4, r0, 16\n\
cmp r4, 0\n\
beq _08148FD8\n\
movs r1, 0x12\n\
ldrsh r0, [r3, r1]\n\
lsls r0, 16\n\
ldrh r1, [r3, 0x14]\n\
adds r2, r0, r1\n\
lsrs r0, r4, 12\n\
subs r2, r0\n\
asrs r1, r2, 16\n\
strh r1, [r3, 0x12]\n\
strh r2, [r3, 0x14]\n\
ldr r0, _08148FC8 @ =REG_BG2HOFS\n\
strh r1, [r0]\n\
movs r1, 0x8\n\
ldrsh r0, [r3, r1]\n\
cmp r0, 0\n\
beq _08148FD0\n\
ldr r2, _08148FCC @ =REG_BG2VOFS\n\
ldr r1, _08148FC0 @ =gUnknown_02039358\n\
ldr r0, _08148FC4 @ =gUnknown_0203935A\n\
ldrh r0, [r0]\n\
ldrh r1, [r1]\n\
adds r0, r1\n\
strh r0, [r2]\n\
b _08148FD8\n\
.align 2, 0\n\
_08148FB4: .4byte gTasks\n\
_08148FB8: .4byte REG_BG1HOFS\n\
_08148FBC: .4byte REG_BG1VOFS\n\
_08148FC0: .4byte gUnknown_02039358\n\
_08148FC4: .4byte gUnknown_0203935A\n\
_08148FC8: .4byte REG_BG2HOFS\n\
_08148FCC: .4byte REG_BG2VOFS\n\
_08148FD0:\n\
ldr r0, _08149010 @ =REG_BG2VOFS\n\
ldr r1, _08149014 @ =gUnknown_02039358\n\
ldrh r1, [r1]\n\
strh r1, [r0]\n\
_08148FD8:\n\
lsls r0, r5, 2\n\
adds r0, r5\n\
lsls r0, 3\n\
adds r3, r0, r6\n\
ldrh r0, [r3, 0x16]\n\
lsls r4, r0, 16\n\
cmp r4, 0\n\
beq _08149008\n\
movs r1, 0x18\n\
ldrsh r0, [r3, r1]\n\
lsls r0, 16\n\
ldrh r1, [r3, 0x1A]\n\
adds r2, r0, r1\n\
lsrs r0, r4, 12\n\
subs r2, r0\n\
asrs r1, r2, 16\n\
strh r1, [r3, 0x18]\n\
strh r2, [r3, 0x1A]\n\
ldr r0, _08149018 @ =REG_BG3HOFS\n\
strh r1, [r0]\n\
ldr r1, _0814901C @ =REG_BG3VOFS\n\
ldr r0, _08149014 @ =gUnknown_02039358\n\
ldrh r0, [r0]\n\
strh r0, [r1]\n\
_08149008:\n\
pop {r4-r6}\n\
pop {r0}\n\
bx r0\n\
.align 2, 0\n\
_08149010: .4byte REG_BG2VOFS\n\
_08149014: .4byte gUnknown_02039358\n\
_08149018: .4byte REG_BG3HOFS\n\
_0814901C: .4byte REG_BG3VOFS\n\
.syntax divided\n");
}
#endif
void sub_8149020(u8 mode)
{
u16 var1;
u16 var2;
switch (mode)
{
case 0:
default:
/* stuff */
if (gMain.vblankCounter1 & 3 || gPaletteFade.active)
break;
if (gMain.vblankCounter1 & 4)
{
var1 = gPlttBufferUnfaded[9];
var2 = gPlttBufferUnfaded[10];
}
else
{
var1 = gPlttBufferUnfaded[10];
var2 = gPlttBufferUnfaded[9];
}
LoadPalette(&var1, 9, 2);
LoadPalette(&var2, 10, 2);
break;
case 2:
if (gMain.vblankCounter1 & 3 || gPaletteFade.active)
break;
if (gMain.vblankCounter1 & 4)
{
var1 = 0x3D27;
var2 = 0x295;
}
else
{
var1 = 0x31C;
var2 = 0x3D27;
}
LoadPalette(&var1, 12, 2);
LoadPalette(&var2, 13, 2);
break;
case 1:
break;
}
}
void sub_814910C(struct Sprite *sprite)
{
if (gUnknown_0203935C)
{
DestroySprite(sprite);
}
else
{
s32 var = ((sprite->pos1.x << 16) | (u16)sprite->data2) + (u16)sprite->data1;
sprite->pos1.x = var >> 16;
sprite->data2 = var;
if (sprite->pos1.x > 255) sprite->pos1.x = 0xFFE0;
if (sprite->data0)
{
sprite->pos2.y = -(gUnknown_02039358 + gUnknown_0203935A);
}
else
{
sprite->pos2.y = -gUnknown_02039358;
}
}
}
void sub_8149174(u8 a, struct UnknownStruct1 *b, const union AnimCmd *const *c, u8 d)
{
u8 i;
for(i = 0; i < d; i++)
{
u8 sprite = CreateSprite(&gSpriteTemplate_8416B3C, b[i].var1, b[i].var2, b[i].var3);
CalcCenterToCornerVec(&gSprites[sprite], b[i].var0_4, b[i].var0_6, 0);
gSprites[sprite].oam.priority = 3;
gSprites[sprite].oam.shape = b[i].var0_4;
gSprites[sprite].oam.size = b[i].var0_6;
gSprites[sprite].oam.paletteNum = 0;
gSprites[sprite].anims = c;
StartSpriteAnim(&gSprites[sprite], b[i].var0_0);
gSprites[sprite].data0 = a;
gSprites[sprite].data1 = b[i].var4;
gSprites[sprite].data2 = 0;
}
}
void sub_8149248()
{
sub_8149174(0, &gUnknown_08416B94, &gSpriteAnimTable_8416B84, 9);
}
void sub_8149264()
{
sub_8149174(1, &gUnknown_08416C10, &gSpriteAnimTable_8416C04, 12);
}
void sub_8149280()
{
sub_8149174(1, &gUnknown_08416C8C, &gSpriteAnimTable_8416C88, 6);
}
void nullsub_82()
{
}
void sub_81492A0(struct Sprite* sprite)
{
sprite->invisible = gSprites[sprite->data0].invisible;
sprite->pos1.x = gSprites[sprite->data0].pos1.x;
sprite->pos1.y = gSprites[sprite->data0].pos1.y + 8;
sprite->pos2.x = gSprites[sprite->data0].pos2.x;
sprite->pos2.y = gSprites[sprite->data0].pos2.y;
}
u8 intro_create_brendan_sprite(s16 a, s16 b)
{
u8 sprite = CreateSprite(&gSpriteTemplate_8416CDC, a, b, 0);
u8 brendan = CreateSprite(&gSpriteTemplate_Brendan, a, b + 8, 1);
gSprites[brendan].data0 = sprite;
return sprite;
}
u8 intro_create_may_sprite(s16 a, s16 b)
{
u8 sprite = CreateSprite(&gSpriteTemplate_8416CF4, a, b, 0);
u8 may = CreateSprite(&gSpriteTemplate_May, a, b + 8, 1);
gSprites[may].data0 = sprite;
return sprite;
}
void nullsub_83()
{
}
void sub_81493C4(struct Sprite* sprite)
{
sprite->invisible = gSprites[sprite->data0].invisible;
sprite->pos1.y = gSprites[sprite->data0].pos1.y;
sprite->pos2.x = gSprites[sprite->data0].pos2.x;
sprite->pos2.y = gSprites[sprite->data0].pos2.y;
}
u8 intro_create_latios_sprite(s16 a, s16 b)
{
u8 sprite = CreateSprite(&gSpriteTemplate_8416D7C, a - 32, b, 2);
u8 latios = CreateSprite(&gSpriteTemplate_8416D7C, a + 32, b, 2);
gSprites[latios].data0 = sprite;
StartSpriteAnim(&gSprites[latios], 1);
gSprites[latios].callback = &sub_81493C4;
return sprite;
}
u8 intro_create_latias_sprite(s16 a, s16 b)
{
u8 sprite = CreateSprite(&gSpriteTemplate_8416D94, a - 32, b, 2);
u8 latios = CreateSprite(&gSpriteTemplate_8416D94, a + 32, b, 2);
gSprites[latios].data0 = sprite;
StartSpriteAnim(&gSprites[latios], 1);
gSprites[latios].callback = &sub_81493C4;
return sprite;
}
-8
View File
@@ -56,14 +56,6 @@ extern void sub_804E990(u8);
extern void sub_802E424(u8);
extern void sub_8064E2C(void);
struct PocketScrollState
{
u8 cursorPos;
u8 scrollTop;
u8 numSlots;
u8 cursorMax;
};
struct UnknownStruct2
{
u8 unk0;
+1081
View File
File diff suppressed because it is too large Load Diff
+3 -2
View File
@@ -2,7 +2,6 @@
#include "link.h"
#include "battle.h"
#include "berry.h"
#include "berry_blender.h"
#include "hall_of_fame.h"
#include "item_use.h"
#include "main.h"
@@ -42,6 +41,8 @@ extern u16 gBattleTypeFlags;
extern u16 word_3004858;
extern void Blender_SetBankBerryData(u8 bank, u16 itemID);
static void InitLinkTestBG(u8, u8, u8, u8);
void InitLinkTestBG_Unused(u8, u8, u8, u8);
void LinkTestScreen();
@@ -556,7 +557,7 @@ static void ProcessRecvCmds(u8 unusedParam)
sub_8007E24();
break;
case 0xAAAB:
sub_80516C4(i, gRecvCmds[1][i]);
Blender_SetBankBerryData(i, gRecvCmds[1][i]);
break;
case 0xCCCC:
#if defined(ENGLISH)
+39 -42
View File
@@ -1024,17 +1024,17 @@ void sub_809D7E8(struct Sprite *);
u8 unref_sub_809D26C(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority)
{
u8 spriteId;
struct MonIconSpriteTemplate iconTemplate;
struct MonIconSpriteTemplate *iconTemplatePtr = &iconTemplate; // needed to match
struct MonIconSpriteTemplate iconTemplate =
{
.oam = &sMonIconOamData,
.image = gMonIconTable[species],
.anims = sMonIconAnims,
.affineAnims = sMonIconAffineAnims,
.callback = callback,
.paletteTag = POKE_ICON_BASE_PAL_TAG + gMonIconPaletteIndices[species],
};
iconTemplatePtr->oam = &sMonIconOamData;
iconTemplatePtr->image = gMonIconTable[species];
iconTemplatePtr->anims = sMonIconAnims;
iconTemplatePtr->affineAnims = sMonIconAffineAnims;
iconTemplatePtr->callback = callback;
iconTemplatePtr->paletteTag = POKE_ICON_BASE_PAL_TAG + gMonIconPaletteIndices[species];
spriteId = CreateMonIconSprite(iconTemplatePtr, x, y, subpriority);
spriteId = CreateMonIconSprite(&iconTemplate, x, y, subpriority);
UpdateMonIconFrame(&gSprites[spriteId]);
@@ -1067,17 +1067,17 @@ u8 CreateMonIcon(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u
u8 sub_809D3A4(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority)
{
u8 spriteId;
struct MonIconSpriteTemplate iconTemplate;
struct MonIconSpriteTemplate *iconTemplatePtr = &iconTemplate; // needed to match
struct MonIconSpriteTemplate iconTemplate =
{
.oam = &sMonIconOamData,
.image = gMonIconTable[species],
.anims = sMonIconAnims,
.affineAnims = sMonIconAffineAnims,
.callback = callback,
.paletteTag = POKE_ICON_BASE_PAL_TAG + gMonIconPaletteIndices[species],
};
iconTemplatePtr->oam = &sMonIconOamData;
iconTemplatePtr->image = gMonIconTable[species];
iconTemplatePtr->anims = sMonIconAnims;
iconTemplatePtr->affineAnims = sMonIconAffineAnims;
iconTemplatePtr->callback = callback;
iconTemplatePtr->paletteTag = POKE_ICON_BASE_PAL_TAG + gMonIconPaletteIndices[species];
spriteId = CreateMonIconSprite(iconTemplatePtr, x, y, subpriority);
spriteId = CreateMonIconSprite(&iconTemplate, x, y, subpriority);
UpdateMonIconFrame(&gSprites[spriteId]);
@@ -1197,7 +1197,7 @@ void sub_809D62C(struct Sprite *sprite)
UpdateMonIconFrame(sprite);
}
// TODO: try to find a way to avoid using goto and asm statement
// TODO: try to find a way to avoid using asm statement
u8 UpdateMonIconFrame(struct Sprite *sprite)
{
u8 result = 0;
@@ -1206,34 +1206,31 @@ u8 UpdateMonIconFrame(struct Sprite *sprite)
{
s16 frame = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.imageValue;
if (frame != -2)
switch (frame)
{
if (frame != -1)
goto copy;
goto end;
case -1:
break;
case -2:
sprite->animCmdIndex = 0;
break;
default:
RequestSpriteCopy(
(u8 *)sprite->images + sSpriteImageSizes[sprite->oam.shape][sprite->oam.size] * frame,
(u8 *)OBJ_VRAM0 + sprite->oam.tileNum * TILE_SIZE_4BPP,
sSpriteImageSizes[sprite->oam.shape][sprite->oam.size]);
{
register u8 duration asm("r0") = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.duration;
sprite->animDelayCounter = duration;
}
sprite->animCmdIndex++;
result = sprite->animCmdIndex;
break;
}
sprite->animCmdIndex = 0;
goto end;
copy:
RequestSpriteCopy(
(u8 *)sprite->images + sSpriteImageSizes[sprite->oam.shape][sprite->oam.size] * frame,
(u8 *)OBJ_VRAM0 + sprite->oam.tileNum * TILE_SIZE_4BPP,
sSpriteImageSizes[sprite->oam.shape][sprite->oam.size]);
{
register u8 duration asm("r0") = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.duration;
sprite->animDelayCounter = duration;
}
sprite->animCmdIndex++;
result = sprite->animCmdIndex;
}
else
{
sprite->animDelayCounter--;
}
end:
return result;
}
+2 -33
View File
@@ -28,32 +28,7 @@ gUnknown_03000500: @ 3000500
gUnknown_03000508: @ 3000508
.space 0x8
@ berry_blender
gUnknown_03000510: @ 3000510
.space 0x10
gUnknown_03000520: @ 3000520
.space 0xC
gUnknown_0300052C: @ 300052C
.space 0x2
gUnknown_0300052E: @ 300052E
.space 0x2
gUnknown_03000530: @ 3000530
.space 0x18
gUnknown_03000548: @ 3000548
.space 0x14
gUnknown_0300055C: @ 300055C
.space 0x4
gUnknown_03000560: @ 3000560
.space 0x1C
.include "src/berry_blender.o"
.include "src/play_time.o"
.include "src/rom4.o"
@@ -123,13 +98,7 @@ gUnknown_03000748: @ 3000748
.space 0x4
.include "src/field_specials.o"
@ learn_move
.align 2
gUnknown_030007B0: @ 30007B0
.space 0x4
.include "src/learn_move.o"
.include "src/player_pc.o"
.include "asm/m4a_1.o"
.include "src/agb_flash.o"
+2 -21
View File
@@ -106,13 +106,7 @@ gUnknown_0300434C: @ 300434C
.include "pokemon_1.o"
.include "rng.o"
@ egg_hatch
.align 2
gUnknown_0300481C: @ 300481C
.space 0x4
.include "egg_hatch.o"
.include "load_save.o"
@ trade
@@ -123,20 +117,7 @@ gUnknown_03004824: @ 3004824
gUnknown_03004828: @ 3004828
.space 0x8
@ berry_blender
gUnknown_03004830: @ 3004830
.space 0x4
gUnknown_03004834: @ 3004834
.space 0xC
gUnknown_03004840: @ 3004840
.space 0x14
gUnknown_03004854: @ 3004854
.space 0x4
.include "berry_blender.o"
.include "rom4.o"
.include "fieldmap.o"
.include "field_camera.o"
+2 -21
View File
@@ -308,20 +308,7 @@ gUnknown_02029700: @ 2029700
gUnknown_020297D8: @ 20297D8
.space 0x4
@ berry_blender
gUnknown_020297DC: @ 20297DC
.space 0x4
gUnknown_020297E0: @ 20297E0
.space 0x4
gUnknown_020297E4: @ 20297E4
.space 0x4
gUnknown_020297E8: @ 20297E8
.space 0x4
.include "src/berry_blender.o"
.include "src/new_game.o"
.include "src/rom4.o"
.include "src/fieldmap.o"
@@ -662,13 +649,7 @@ gUnknown_0203927D: @ 203927D
.include "src/use_pokeblock.o"
.include "src/player_pc.o"
.include "src/intro.o"
@ hall_of_fame
.align 2
gUnknown_0203931C: @ 203931C
.space 0x4
.include "src/hall_of_fame.o"
.include "src/credits.o"
.include "src/lottery_corner.o"
.include "src/berry_tag_screen.o"