through CreateNidoranFSprite

This commit is contained in:
PikalaxALT
2019-04-11 08:46:30 -04:00
parent 35892e6b53
commit 6eb7cc6cfa
5 changed files with 115 additions and 375 deletions
-370
View File
@@ -5,376 +5,6 @@
.text
thumb_func_start sub_8130C64
sub_8130C64: @ 8130C64
push {r4,r5,lr}
sub sp, 0x10
ldr r0, _08130C84 @ =gMain
movs r1, 0x87
lsls r1, 3
adds r0, r1
ldrb r0, [r0]
cmp r0, 0x7
bls _08130C78
b _08130F10
_08130C78:
lsls r0, 2
ldr r1, _08130C88 @ =_08130C8C
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08130C84: .4byte gMain
_08130C88: .4byte _08130C8C
.align 2, 0
_08130C8C:
.4byte _08130CAC
.4byte _08130D18
.4byte _08130D78
.4byte _08130DB2
.4byte _08130DD0
.4byte _08130DE8
.4byte _08130E38
.4byte _08130EB8
_08130CAC:
movs r0, 0
bl SetVBlankCallback
add r1, sp, 0x8
movs r0, 0
strh r0, [r1]
ldr r1, _08130D04 @ =0x040000d4
add r0, sp, 0x8
str r0, [r1]
movs r0, 0xC0
lsls r0, 19
str r0, [r1, 0x4]
ldr r0, _08130D08 @ =0x8100c000
str r0, [r1, 0x8]
ldr r0, [r1, 0x8]
movs r2, 0
str r2, [sp, 0xC]
add r0, sp, 0xC
str r0, [r1]
movs r0, 0xE0
lsls r0, 19
str r0, [r1, 0x4]
ldr r0, _08130D0C @ =0x85000100
str r0, [r1, 0x8]
ldr r0, [r1, 0x8]
add r0, sp, 0x8
strh r2, [r0]
str r0, [r1]
ldr r0, _08130D10 @ =0x05000002
str r0, [r1, 0x4]
ldr r0, _08130D14 @ =0x810001ff
str r0, [r1, 0x8]
ldr r0, [r1, 0x8]
bl ResetPaletteFade
bl ScanlineEffect_Stop
bl ResetSpriteData
bl FreeAllSpritePalettes
bl reset_temp_tile_data_buffers
b _08130F10
.align 2, 0
_08130D04: .4byte 0x040000d4
_08130D08: .4byte 0x8100c000
_08130D0C: .4byte 0x85000100
_08130D10: .4byte 0x05000002
_08130D14: .4byte 0x810001ff
_08130D18:
movs r0, 0
bl ResetBgsAndClearDma3BusyFlags
ldr r1, _08130D70 @ =gUnknown_8462E58
movs r0, 0x1
movs r2, 0x3
bl InitBgsFromTemplates
ldr r4, _08130D74 @ =sOakSpeechResources
ldr r1, [r4]
movs r0, 0xE1
lsls r0, 5
adds r1, r0
movs r0, 0x1
bl SetBgTilemapBuffer
ldr r1, [r4]
movs r0, 0xC1
lsls r0, 5
adds r1, r0
movs r0, 0x2
bl SetBgTilemapBuffer
movs r0, 0x1
movs r1, 0
movs r2, 0
bl ChangeBgX
movs r0, 0x1
movs r1, 0
movs r2, 0
bl ChangeBgY
movs r0, 0x2
movs r1, 0
movs r2, 0
bl ChangeBgX
movs r0, 0x2
movs r1, 0
movs r2, 0
bl ChangeBgY
b _08130F10
.align 2, 0
_08130D70: .4byte gUnknown_8462E58
_08130D74: .4byte sOakSpeechResources
_08130D78:
movs r0, 0x40
movs r1, 0
bl SetGpuReg
movs r0, 0x44
movs r1, 0
bl SetGpuReg
movs r0, 0x48
movs r1, 0
bl SetGpuReg
movs r0, 0x4A
movs r1, 0
bl SetGpuReg
movs r0, 0x50
movs r1, 0
bl SetGpuReg
movs r0, 0x52
movs r1, 0
bl SetGpuReg
movs r0, 0x54
movs r1, 0
bl SetGpuReg
b _08130F10
_08130DB2:
bl FreeAllWindowBuffers
bl sub_80F6C6C
bl sub_80F6C98
ldr r0, _08130DCC @ =gUnknown_8460568
movs r1, 0
movs r2, 0xE0
bl LoadPalette
b _08130F10
.align 2, 0
_08130DCC: .4byte gUnknown_8460568
_08130DD0:
ldr r1, _08130DE4 @ =gUnknown_8460CA4
movs r0, 0
str r0, [sp]
movs r0, 0x1
movs r2, 0
movs r3, 0
bl decompress_and_copy_tile_data_to_vram
b _08130F10
.align 2, 0
_08130DE4: .4byte gUnknown_8460CA4
_08130DE8:
bl free_temp_tile_data_buffers_if_possible
lsls r0, 24
cmp r0, 0
beq _08130DF4
b _08130F1E
_08130DF4:
movs r5, 0x1E
str r5, [sp]
movs r4, 0x14
str r4, [sp, 0x4]
movs r0, 0x1
movs r1, 0
movs r2, 0
movs r3, 0
bl FillBgTilemapBufferRect_Palette0
ldr r1, _08130E34 @ =gUnknown_8460CE8
movs r0, 0x1
movs r2, 0
movs r3, 0
bl CopyToBgTilemapBuffer
str r5, [sp]
str r4, [sp, 0x4]
movs r0, 0x2
movs r1, 0
movs r2, 0
movs r3, 0
bl FillBgTilemapBufferRect_Palette0
movs r0, 0x1
bl CopyBgTilemapBufferToVram
movs r0, 0x2
bl CopyBgTilemapBufferToVram
b _08130F10
.align 2, 0
_08130E34: .4byte gUnknown_8460CE8
_08130E38:
ldr r0, _08130E5C @ =sub_8130464
movs r1, 0
bl CreateTask
lsls r0, 24
lsrs r5, r0, 24
ldr r0, _08130E60 @ =sOakSpeechResources
ldr r0, [r0]
ldrh r0, [r0, 0x10]
cmp r0, 0
bne _08130E72
ldr r0, _08130E64 @ =gSaveBlock2Ptr
ldr r0, [r0]
ldrb r0, [r0, 0x8]
cmp r0, 0
bne _08130E68
movs r0, 0
b _08130E6A
.align 2, 0
_08130E5C: .4byte sub_8130464
_08130E60: .4byte sOakSpeechResources
_08130E64: .4byte gSaveBlock2Ptr
_08130E68:
movs r0, 0x1
_08130E6A:
movs r1, 0
bl sub_81311F4
b _08130E7A
_08130E72:
movs r0, 0x2
movs r1, 0
bl sub_81311F4
_08130E7A:
ldr r0, _08130EA8 @ =gTasks
lsls r4, r5, 2
adds r4, r5
lsls r4, 3
adds r4, r0
ldr r0, _08130EAC @ =0x0000ffc4
strh r0, [r4, 0xA]
ldr r1, _08130EB0 @ =gSpriteCoordOffsetX
ldrh r0, [r1]
adds r0, 0x3C
strh r0, [r1]
ldr r1, _08130EB4 @ =0xffffc400
movs r0, 0x2
movs r2, 0
bl ChangeBgX
adds r0, r5, 0
movs r1, 0x1
bl sub_8130FD4
movs r0, 0x1
strh r0, [r4, 0x26]
b _08130F10
.align 2, 0
_08130EA8: .4byte gTasks
_08130EAC: .4byte 0x0000ffc4
_08130EB0: .4byte gSpriteCoordOffsetX
_08130EB4: .4byte 0xffffc400
_08130EB8:
movs r0, 0x1
negs r0, r0
movs r1, 0
str r1, [sp]
movs r2, 0x10
movs r3, 0
bl BeginNormalPaletteFade
movs r1, 0x82
lsls r1, 5
movs r0, 0
bl SetGpuReg
movs r0, 0
bl ShowBg
movs r0, 0x1
bl ShowBg
movs r0, 0x2
bl ShowBg
movs r0, 0x1
bl EnableInterrupts
ldr r0, _08130F04 @ =sub_812EAFC
bl SetVBlankCallback
ldr r2, _08130F08 @ =gTextFlags
ldrb r0, [r2]
movs r1, 0x1
orrs r0, r1
strb r0, [r2]
ldr r0, _08130F0C @ =sub_812EB10
bl SetMainCallback2
b _08130F1E
.align 2, 0
_08130F04: .4byte sub_812EAFC
_08130F08: .4byte gTextFlags
_08130F0C: .4byte sub_812EB10
_08130F10:
ldr r1, _08130F28 @ =gMain
movs r0, 0x87
lsls r0, 3
adds r1, r0
ldrb r0, [r1]
adds r0, 0x1
strb r0, [r1]
_08130F1E:
add sp, 0x10
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_08130F28: .4byte gMain
thumb_func_end sub_8130C64
thumb_func_start sub_8130F2C
sub_8130F2C: @ 8130F2C
push {r4,r5,lr}
adds r5, r0, 0
lsls r5, 24
lsrs r5, 24
ldr r4, _08130FA0 @ =gUnknown_8235194
movs r0, 0
bl sub_8044E00
adds r1, r0, 0
adds r0, r4, 0
movs r2, 0x1D
bl DecompressPicFromTable
ldr r0, _08130FA4 @ =gUnknown_82373F4
bl sub_800F078
movs r0, 0x1D
movs r1, 0
bl sub_803F7D4
ldr r0, _08130FA8 @ =gMultiuseSpriteTemplate
movs r1, 0x60
movs r2, 0x60
movs r3, 0x1
bl CreateSprite
lsls r0, 24
lsrs r0, 24
ldr r4, _08130FAC @ =gSprites
lsls r2, r0, 4
adds r2, r0
lsls r2, 2
adds r1, r4, 0
adds r1, 0x1C
adds r1, r2, r1
ldr r3, _08130FB0 @ =SpriteCallbackDummy
str r3, [r1]
adds r2, r4
ldrb r3, [r2, 0x5]
movs r1, 0xD
negs r1, r1
ands r1, r3
movs r3, 0x4
orrs r1, r3
strb r1, [r2, 0x5]
adds r2, 0x3E
ldrb r1, [r2]
orrs r1, r3
strb r1, [r2]
ldr r2, _08130FB4 @ =gTasks
lsls r1, r5, 2
adds r1, r5
lsls r1, 3
adds r1, r2
strh r0, [r1, 0x10]
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_08130FA0: .4byte gUnknown_8235194
_08130FA4: .4byte gUnknown_82373F4
_08130FA8: .4byte gMultiuseSpriteTemplate
_08130FAC: .4byte gSprites
_08130FB0: .4byte SpriteCallbackDummy
_08130FB4: .4byte gTasks
thumb_func_end sub_8130F2C
thumb_func_start sub_8130FB8
sub_8130FB8: @ 8130FB8
ldr r3, _08130FD0 @ =gSprites
+2
View File
@@ -18,6 +18,8 @@ void LoadCompressedObjectPalette(const struct CompressedSpritePalette *src);
void LoadCompressedObjectPaletteOverrideBuffer(const struct CompressedSpritePalette *a, void *buffer);
bool8 LoadCompressedObjectPaletteUsingHeap(const struct CompressedSpritePalette *src);
bool8 sub_800F078(const struct CompressedSpritePalette *src);
void DecompressPicFromTable(const struct CompressedSpriteSheet *src, void* buffer, s32 species);
void DecompressPicFromTable_2(const struct CompressedSpriteSheet *src, void* buffer, s32 species);
void DecompressPicFromTable_DontHandleDeoxys(const struct CompressedSpriteSheet *src, void* buffer, s32 species);
+1
View File
@@ -673,5 +673,6 @@ void BattleAnimateBackSprite(struct Sprite* sprite, u16 species);
void PlayMapChosenOrBattleBGM(u16 songId);
u8 GetMonsStateToDoubles(void);
void sub_803E0A4(struct Pokemon *mon, struct BattleTowerPokemon *src);
void sub_803F7D4(u16 trainerSpriteId, u8 battlerPosition);
#endif // GUARD_POKEMON_H
+1
View File
@@ -7,5 +7,6 @@ const u8* GetTrainerClassNameFromId(u16 trainerId);
const u8* GetTrainerNameFromId(u16 trainerId);
void sub_8044AF0(u8, u8);
void sub_8044D80(void);
void * sub_8044E00(u8 buffId);
#endif // GUARD_POKEMON_3_H
+111 -5
View File
@@ -1,5 +1,6 @@
#include "global.h"
#include "main.h"
#include "decompress.h"
#include "task.h"
#include "malloc.h"
#include "gpu_regs.h"
@@ -90,8 +91,9 @@ void sub_8130B10(u8 taskId);
void sub_8130BA8(u8 taskId);
void sub_8130BF0(u8 taskId);
void sub_8130C20(u8 taskId);
void sub_8130C64(void);
void sub_8130F2C(u8 taskId);
static void CB2_ReturnFromNamingScreen(void);
static void CreateNidoranFSprite(u8 taskId);
void sub_8130FD4(u8 taskId, u8 state);
void sub_8131168(u8 taskId, u8 state);
void sub_81311F4(u8 arg0, u8 state);
@@ -107,6 +109,9 @@ extern const u8 gUnknown_8415D50[];
extern const u8 gUnknown_8415D93[];
extern const u8 gUnknown_8415D97[];
extern const struct CompressedSpriteSheet gUnknown_8235194[];
extern const struct CompressedSpritePalette gUnknown_82373F4;
const u8 gUnknown_845FD54[][5] = {
[SPECIES_BULBASAUR - 1] = {0x16, 0x1b, 0x30, 0x16, 0x29},
[SPECIES_IVYSAUR - 1] = {0x14, 0x1b, 0x30, 0x15, 0x2a},
@@ -1040,7 +1045,7 @@ void sub_812F7C0(u8 taskId)
LoadBgTiles(1, sOakSpeechResources->unk_0000, size, 0);
CopyToBgTilemapBuffer(1, gUnknown_8460CE8, 0, 0);
CopyBgTilemapBufferToVram(1);
sub_8130F2C(taskId);
CreateNidoranFSprite(taskId);
sub_81311F4(3, 0);
sub_8130FD4(taskId, 1);
PlayBGM(292);
@@ -1374,13 +1379,13 @@ void sub_81303B4(u8 taskId)
sub_8131754(sOakSpeechResources->unk_0010, 0);
if (sOakSpeechResources->unk_0010 == 0)
{
DoNamingScreen(0, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, sub_8130C64);
DoNamingScreen(0, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_ReturnFromNamingScreen);
}
else
{
sub_810F4D8(gTasks[taskId].data[13], 1);
RemoveWindow(gTasks[taskId].data[13]);
DoNamingScreen(4, gSaveBlock1Ptr->rivalName, 0, 0, 0, sub_8130C64);
DoNamingScreen(4, gSaveBlock1Ptr->rivalName, 0, 0, 0, CB2_ReturnFromNamingScreen);
}
sub_8131168(taskId, 1);
FreeAllWindowBuffers();
@@ -1687,3 +1692,104 @@ void sub_8130C20(u8 taskId)
SetMainCallback2(CB2_NewGame);
DestroyTask(taskId);
}
static void CB2_ReturnFromNamingScreen(void)
{
u8 taskId;
switch (gMain.state)
{
case 0:
SetVBlankCallback(NULL);
DmaFill16(3, 0, VRAM, VRAM_SIZE);
DmaFill32(3, 0, OAM, OAM_SIZE);
DmaFill16(3, RGB_BLACK, PLTT + sizeof(u16), PLTT_SIZE - sizeof(u16));
ResetPaletteFade();
ScanlineEffect_Stop();
ResetSpriteData();
FreeAllSpritePalettes();
reset_temp_tile_data_buffers();
break;
case 1:
ResetBgsAndClearDma3BusyFlags(0);
InitBgsFromTemplates(1, gUnknown_8462E58, NELEMS(gUnknown_8462E58));
SetBgTilemapBuffer(1, sOakSpeechResources->bg1TilemapBuffer);
SetBgTilemapBuffer(2, sOakSpeechResources->bg2TilemapBuffer);
ChangeBgX(1, 0, 0);
ChangeBgY(1, 0, 0);
ChangeBgX(2, 0, 0);
ChangeBgY(2, 0, 0);
break;
case 2:
SetGpuReg(REG_OFFSET_WIN0H, 0);
SetGpuReg(REG_OFFSET_WIN0V, 0);
SetGpuReg(REG_OFFSET_WININ, 0);
SetGpuReg(REG_OFFSET_WINOUT, 0);
SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
SetGpuReg(REG_OFFSET_BLDY, 0);
break;
case 3:
FreeAllWindowBuffers();
sub_80F6C6C();
sub_80F6C98();
LoadPalette(gUnknown_8460568, 0, 0xe0);
break;
case 4:
decompress_and_copy_tile_data_to_vram(1, gUnknown_8460CA4, 0, 0, 0);
break;
case 5:
if (free_temp_tile_data_buffers_if_possible())
return;
FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20);
CopyToBgTilemapBuffer(1, gUnknown_8460CE8, 0, 0);
FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 20);
CopyBgTilemapBufferToVram(1);
CopyBgTilemapBufferToVram(2);
break;
case 6:
taskId = CreateTask(sub_8130464, 0);
if (sOakSpeechResources->unk_0010 == 0)
{
if (gSaveBlock2Ptr->playerGender == MALE)
sub_81311F4(MALE, 0);
else
sub_81311F4(FEMALE, 0);
}
else
sub_81311F4(2, 0);
gTasks[taskId].data[1] = -60;
gSpriteCoordOffsetX += 60;
ChangeBgX(2, -0x3C00, 0);
sub_8130FD4(taskId, 1);
gTasks[taskId].data[15] = 1;
break;
case 7:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON);
ShowBg(0);
ShowBg(1);
ShowBg(2);
EnableInterrupts(INTR_FLAG_VBLANK);
SetVBlankCallback(sub_812EAFC);
gTextFlags.flag_0 = TRUE;
SetMainCallback2(sub_812EB10);
return;
}
gMain.state++;
}
static void CreateNidoranFSprite(u8 taskId)
{
u8 spriteId;
DecompressPicFromTable(gUnknown_8235194, sub_8044E00(0), SPECIES_NIDORAN_F);
sub_800F078(&gUnknown_82373F4);
sub_803F7D4(SPECIES_NIDORAN_F, 0);
spriteId = CreateSprite(&gMultiuseSpriteTemplate, 0x60, 0x60, 1);
gSprites[spriteId].callback = SpriteCallbackDummy;
gSprites[spriteId].oam.priority = 1;
gSprites[spriteId].invisible = TRUE;
gTasks[taskId].data[4] = spriteId;
}