mirror of
https://github.com/pret/pokeruby.git
synced 2026-09-12 21:17:43 -05:00
split out crash.c
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
55
src/debug/crash.c
Normal 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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -127,7 +127,7 @@ gUnknown_03004828: @ 3004828
|
||||
@ party_menu?
|
||||
|
||||
.align 2
|
||||
gUnknown_03004AE4: @ 3004AE4
|
||||
gPokemonItemUseCallback: @ 3004AE4
|
||||
.space 0x4
|
||||
|
||||
.include "field/start_menu.o"
|
||||
|
||||
Reference in New Issue
Block a user