split out crash.c

This commit is contained in:
ProjectRevoTPP
2018-01-17 00:29:25 -05:00
parent 31a322fdc5
commit 3ab6bf09d8
12 changed files with 157 additions and 87 deletions

View File

@@ -3,7 +3,6 @@
#define BIT(n) (1 << (n))
void sub_80AB184(void);
void sub_80AA280(u8);
void sub_80AA5E8(u8);
void sub_80AA658(u8);

View File

@@ -23,6 +23,6 @@ s8 GetSetPokedexFlag(u16, u8);
u16 GetNationalPokedexCount(u8);
u16 GetHoennPokedexCount(u8);
bool8 CompletedHoennPokedex(void);
u16 sub_8090FF4(void);
bool16 CompletedNationalPokedex(void);
#endif // GUARD_POKEDEX_H

View File

@@ -141,6 +141,7 @@ SECTIONS {
src/battle/battle_anim_80A7E7C.o(.text);
src/field/item.o(.text);
src/debug/matsuda_debug_menu.o(.text);
src/debug/crash.o(.text);
src/contest.o(.text);
src/field/shop.o(.text);
src/field/fldeff_escalator.o(.text);

View File

@@ -40,7 +40,7 @@ extern u8 gUnknown_0202E8F6;
extern u8 gUnknown_02038470[3];
extern u8 gUnknown_02038473;
extern u8 gUnknown_020384F0;
extern void (*gUnknown_03004AE4)(); //don't know types yet
extern void (*gPokemonItemUseCallback)(); //don't know types yet
extern struct PokemonStorage gPokemonStorage;
extern void nullsub_14();
@@ -466,7 +466,7 @@ void HandleBattlePartyMenu(u8 taskId)
{
if (gUnknown_02038473 == 3 && GetItemEffectType(gSpecialVar_ItemId) == 10)
{
gUnknown_03004AE4(taskId, gSpecialVar_ItemId, Task_80952E4);
gPokemonItemUseCallback(taskId, gSpecialVar_ItemId, Task_80952E4);
return;
}
@@ -480,7 +480,7 @@ void HandleBattlePartyMenu(u8 taskId)
else
{
sub_806D5A4();
gUnknown_03004AE4(taskId, gSpecialVar_ItemId, Task_80952E4);
gPokemonItemUseCallback(taskId, gSpecialVar_ItemId, Task_80952E4);
}
}
else

55
src/debug/crash.c Normal file
View File

@@ -0,0 +1,55 @@
#include "global.h"
#include "main.h"
#include "task.h"
#include "text.h"
#include "palette.h"
extern struct Window gUnknown_03004210;
static void CB2_CrashIdle(void);
// unused exception handler. Takes a string input describing the exception
// and halts on a black screen. Used in German Debug Ruby.
void Crash(u8 *text)
{
u16 savedIme;
REG_BG0HOFS = 0;
REG_BG0VOFS = 0;
REG_BG1HOFS = 0;
REG_BG1VOFS = 0;
REG_BG2HOFS = 0;
REG_BG2VOFS = 0;
REG_BG3HOFS = 0;
REG_BG3VOFS = 0;
REG_WIN0H = 0;
REG_WIN0V = 0;
REG_WIN1H = 0;
REG_WIN1V = 0;
REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON;
savedIme = REG_IME;
REG_IME = 0;
REG_IE |= INTR_FLAG_VBLANK;
REG_IME = savedIme;
REG_DISPSTAT = 8;
ResetTasks();
ResetSpriteData();
SetMainCallback2(CB2_CrashIdle);
DmaFill32Large(3, 0, (void *)VRAM, 0x18000, 0x1000);
Text_LoadWindowTemplate(&gWindowTemplate_81E6FD8);
Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowTemplate_81E6FD8);
LoadFontDefaultPalette(&gWindowTemplate_81E6FD8);
Text_InitWindowAndPrintText(&gUnknown_03004210, text, 1, 9, 7);
}
static void CB2_CrashIdle(void)
{
REG_BG0HOFS = 0;
REG_BG0VOFS = 0;
REG_BG1HOFS = 0;
REG_BG1VOFS = 0;
REG_BG2HOFS = 0;
REG_BG2VOFS = 0;
REG_BG3HOFS = 0;
REG_BG3VOFS = 0;
}

View File

@@ -37,7 +37,7 @@ extern u16 gBattle_BG2_X;
extern u16 gBattle_BG2_Y;
extern u16 gBattle_BG3_X;
extern u16 gBattle_BG3_Y;
extern struct Window gUnknown_03004210;
extern u8 (*gCallback_03004AE8)(void);
extern bool8 gReceivedRemoteLinkPlayers;
@@ -1032,63 +1032,3 @@ u8 MatsudaDebugMenu_SetArtMuseumItems(void)
CloseMenu();
return 1;
}
void unref_sub_80AB084(u8 *text)
{
u16 savedIme;
u8 *addr;
size_t size;
REG_BG0HOFS = 0;
REG_BG0VOFS = 0;
REG_BG1HOFS = 0;
REG_BG1VOFS = 0;
REG_BG2HOFS = 0;
REG_BG2VOFS = 0;
REG_BG3HOFS = 0;
REG_BG3VOFS = 0;
REG_WIN0H = 0;
REG_WIN0V = 0;
REG_WIN1H = 0;
REG_WIN1V = 0;
REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON;
savedIme = REG_IME;
REG_IME = 0;
REG_IE |= INTR_FLAG_VBLANK;
REG_IME = savedIme;
REG_DISPSTAT = 8;
ResetTasks();
ResetSpriteData();
SetMainCallback2(sub_80AB184);
addr = (void *)VRAM;
size = 0x18000;
while (1)
{
DmaFill32(3, 0, addr, 0x1000);
addr += 0x1000;
size -= 0x1000;
if (size <= 0x1000)
{
DmaFill32(3, 0, addr, size);
break;
}
}
Text_LoadWindowTemplate(&gWindowTemplate_81E6FD8);
Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowTemplate_81E6FD8);
LoadFontDefaultPalette(&gWindowTemplate_81E6FD8);
Text_InitWindowAndPrintText(&gUnknown_03004210, text, 1, 9, 7);
}
void sub_80AB184(void)
{
REG_BG0HOFS = 0;
REG_BG0VOFS = 0;
REG_BG1HOFS = 0;
REG_BG1VOFS = 0;
REG_BG2HOFS = 0;
REG_BG2VOFS = 0;
REG_BG3HOFS = 0;
REG_BG3VOFS = 0;
}

View File

@@ -125,7 +125,7 @@ static void Task_DiplomaFadeOut(u8 taskId)
static void DisplayDiplomaText(void)
{
if (sub_8090FF4())
if (CompletedNationalPokedex())
{
REG_BG3HOFS = 256;
StringCopy(gStringVar1, gOtherText_NationalDex);

View File

@@ -40,7 +40,7 @@
extern void (*gFieldItemUseCallback)(u8);
extern void (*gFieldCallback)(void);
extern void (*gUnknown_0300485C)(void);
extern void (*gUnknown_03004AE4)(u8, u16, TaskFunc);
extern void (*gPokemonItemUseCallback)(u8, u16, TaskFunc);
extern u8 gUnknown_02038561;
extern u8 gLastFieldPokeMenuOpened;
@@ -832,7 +832,7 @@ void sub_80C9D98(u8 taskId)
void ItemUseOutOfBattle_Medicine(u8 taskId)
{
gUnknown_03004AE4 = UseMedicine;
gPokemonItemUseCallback = UseMedicine;
sub_80C9D98(taskId);
}
@@ -850,26 +850,26 @@ void ItemUseOutOfBattle_SacredAsh(u8 taskId)
break;
}
}
gUnknown_03004AE4 = sub_8070048;
gPokemonItemUseCallback = sub_8070048;
gUnknown_02038561 = 4;
ItemMenu_ConfirmNormalFade(taskId);
}
void ItemUseOutOfBattle_PPRecovery(u8 taskId)
{
gUnknown_03004AE4 = DoPPRecoveryItemEffect;
gPokemonItemUseCallback = DoPPRecoveryItemEffect;
sub_80C9D98(taskId);
}
void ItemUseOutOfBattle_PPUp(u8 taskId)
{
gUnknown_03004AE4 = DoPPUpItemEffect;
gPokemonItemUseCallback = DoPPUpItemEffect;
sub_80C9D98(taskId);
}
void ItemUseOutOfBattle_RareCandy(u8 taskId)
{
gUnknown_03004AE4 = DoRareCandyItemEffect;
gPokemonItemUseCallback = DoRareCandyItemEffect;
sub_80C9D98(taskId);
}
@@ -908,7 +908,7 @@ void sub_80C9F80(u8 var)
void sub_80C9FC0(u8 var)
{
gUnknown_03004AE4 = TeachMonTMMove;
gPokemonItemUseCallback = TeachMonTMMove;
sub_80C9D98(var);
}
@@ -1009,7 +1009,7 @@ void ItemUseOutOfBattle_EscapeRope(u8 taskId)
void ItemUseOutOfBattle_EvolutionStone(u8 var)
{
gUnknown_03004AE4 = DoEvolutionStoneItemEffect;
gPokemonItemUseCallback = DoEvolutionStoneItemEffect;
sub_80C9D98(var);
}
@@ -1078,19 +1078,19 @@ void sub_80CA3C0(u8 taskId)
void ItemUseInBattle_Medicine(u8 var)
{
gUnknown_03004AE4 = UseMedicine;
gPokemonItemUseCallback = UseMedicine;
sub_80CA3C0(var);
}
void unref_sub_80CA410(u8 var)
{
gUnknown_03004AE4 = sub_8070048;
gPokemonItemUseCallback = sub_8070048;
sub_80CA3C0(var);
}
void ItemUseInBattle_PPRecovery(u8 var)
{
gUnknown_03004AE4 = DoPPRecoveryItemEffect;
gPokemonItemUseCallback = DoPPRecoveryItemEffect;
sub_80CA3C0(var);
}

View File

@@ -100,6 +100,8 @@ void GetMoneyAmountText(u8 *buffer, u32 amount, u8 arg2)
width = 7;
else if (amount > 99999)
width = 6;
// A special sprite is used for 10000 in the decoration
// shop, so be sure to account for this.
else if (amount > 10000)
width = 5;
else if (amount > 999)

View File

@@ -4121,28 +4121,101 @@ bool8 CompletedHoennPokedex(void)
return TRUE;
}
u16 sub_8090FF4(void)
bool16 CompletedNationalPokedex(void)
{
u16 i;
// BUG: This function indexes pokemon checks by 0, but adds
// 1 before passing to GetSetPokedexFlag. Normally, this is
// fine, because GetSetPokedexFlag subtracts by 1 to get the
// array index value, but since the array is 0 indexed
// starting with Bulbasaur, values passed actually means that
// dex entries 152 (Chikorita) and 252 (Treecko) are skipped.
// Because an earlier Hoenn Dex check prevented Treecko from
// being skippable, it means that Chikorita is not required
// to obtain the National Diploma. This was fixed in Emerald.
for (i = 0; i < 150; i++)
{
if (GetSetPokedexFlag(i + 1, 1) == 0)
return 0;
return FALSE;
}
for (i = 152; i < 250; i++)
{
if (GetSetPokedexFlag(i + 1, 1) == 0)
return 0;
return FALSE;
}
for (i = 252; i < 384; i++)
{
if (GetSetPokedexFlag(i + 1, 1) == 0)
return 0;
return FALSE;
}
return 1;
return TRUE;
}
/*
CompletedNationalPokedex:
push {r4, r5, lr}
mov r0, #0x0
.L1236:
add r0, r0, #0x1
lsl r0, r0, #0x10
lsr r4, r0, #0x10
add r0, r4, #0
mov r1, #0x1
bl GetSetPokedexFlag
lsl r0, r0, #0x18
cmp r0, #0
beq .L1252 @cond_branch
add r0, r4, #0
cmp r0, #0x95
bls .L1236 @cond_branch
mov r0, #0x98
.L1242:
add r0, r0, #0x1
lsl r0, r0, #0x10
lsr r4, r0, #0x10
add r0, r4, #0
mov r1, #0x1
bl GetSetPokedexFlag
lsl r0, r0, #0x18
cmp r0, #0
beq .L1252 @cond_branch
add r0, r4, #0
cmp r0, #0xf9
bls .L1242 @cond_branch
mov r0, #0xfc
ldr r5, .L1253
.L1248:
add r0, r0, #0x1
lsl r0, r0, #0x10
lsr r4, r0, #0x10
add r0, r4, #0
mov r1, #0x1
bl GetSetPokedexFlag
lsl r0, r0, #0x18
cmp r0, #0
bne .L1247 @cond_branch
.L1252:
mov r0, #0x0
b .L1251
.L1254:
.align 2, 0
.L1253:
.word 0x17f
.L1247:
add r0, r4, #0
cmp r0, r5
bls .L1248 @cond_branch
mov r0, #0x1
.L1251:
pop {r4, r5}
pop {r1}
bx r1
.Lfe84:
.size CompletedNationalPokedex,.Lfe84-CompletedNationalPokedex
.align 2, 0
*/
static void sub_8091060(u16 a)
{
if (!(a & 0x100))

View File

@@ -51,7 +51,7 @@ extern u8 gUnknown_0202E8F5;
extern u8 gUnknown_0202E8F6;
extern u8 gUnknown_02038561;
extern u16 gUnknown_0202E8F8;
extern void (*gUnknown_03004AE4)(u8 taskID, u16 itemID, TaskFunc func);
extern void (*gPokemonItemUseCallback)(u8 taskID, u16 itemID, TaskFunc func);
extern TaskFunc gUnknown_03005CF0;
void sub_808A520(void);
@@ -1013,7 +1013,7 @@ void sub_808B0C0(u8 taskID)
{
sub_806D5A4();
if (gUnknown_02038561 == 0)
gUnknown_03004AE4(taskID, gSpecialVar_ItemId, sub_808B224);
gPokemonItemUseCallback(taskID, gSpecialVar_ItemId, sub_808B224);
if (gUnknown_02038561 == 1)
{
PlaySE(SE_SELECT);
@@ -1042,7 +1042,7 @@ void sub_808B0C0(u8 taskID)
static void sub_808B1EC(u8 taskID)
{
if (!gPaletteFade.active)
gUnknown_03004AE4(taskID, gSpecialVar_ItemId, sub_808B224);
gPokemonItemUseCallback(taskID, gSpecialVar_ItemId, sub_808B224);
}
static void sub_808B224(u8 taskID)

View File

@@ -127,7 +127,7 @@ gUnknown_03004828: @ 3004828
@ party_menu?
.align 2
gUnknown_03004AE4: @ 3004AE4
gPokemonItemUseCallback: @ 3004AE4
.space 0x4
.include "field/start_menu.o"