Merge branch 'master' into dodrio_berry_picking

This commit is contained in:
scnorton
2019-03-24 20:08:49 -04:00
137 changed files with 1196 additions and 6791 deletions

128
src/berry_powder.c Executable file
View File

@@ -0,0 +1,128 @@
#include "global.h"
#include "berry_powder.h"
#include "bg.h"
#include "event_data.h"
#include "load_save.h"
#include "menu.h"
#include "string_util.h"
#include "strings.h"
#include "text.h"
#include "text_window.h"
#include "window.h"
#define MAX_BERRY_POWDER 99999
static EWRAM_DATA u8 sBerryPowderVendorWindowId = 0;
static u32 DecryptBerryPowder(u32 *powder)
{
return *powder ^ gSaveBlock2Ptr->encryptionKey;
}
void SetBerryPowder(u32 *powder, u32 amount)
{
*powder = amount ^ gSaveBlock2Ptr->encryptionKey;
}
void ApplyNewEncryptionKeyToBerryPowder(u32 encryptionKey)
{
u32 *powder = &gSaveBlock2Ptr->berryCrush.berryPowderAmount;
ApplyNewEncryptionKeyToWord(powder, encryptionKey);
}
static bool8 HasEnoughBerryPowder_(u32 cost)
{
u32 *powder = &gSaveBlock2Ptr->berryCrush.berryPowderAmount;
if (DecryptBerryPowder(powder) < cost)
return FALSE;
else
return TRUE;
}
bool8 HasEnoughBerryPowder(void)
{
u32 *powder = &gSaveBlock2Ptr->berryCrush.berryPowderAmount;
if (DecryptBerryPowder(powder) < gSpecialVar_0x8004)
return FALSE;
else
return TRUE;
}
bool8 GiveBerryPowder(u32 amountToAdd)
{
u32 *powder = &gSaveBlock2Ptr->berryCrush.berryPowderAmount;
u32 amount = DecryptBerryPowder(powder) + amountToAdd;
if (amount > MAX_BERRY_POWDER)
{
SetBerryPowder(powder, MAX_BERRY_POWDER);
return FALSE;
}
else
{
SetBerryPowder(powder, amount);
return TRUE;
}
}
static bool8 TakeBerryPowder_(u32 cost)
{
u32 *powder = &gSaveBlock2Ptr->berryCrush.berryPowderAmount;
if (!HasEnoughBerryPowder_(cost))
return FALSE;
SetBerryPowder(powder, DecryptBerryPowder(powder) - cost);
return TRUE;
}
bool8 TakeBerryPowder(void)
{
u32 *powder = &gSaveBlock2Ptr->berryCrush.berryPowderAmount;
if (!HasEnoughBerryPowder_(gSpecialVar_0x8004))
return FALSE;
SetBerryPowder(powder, DecryptBerryPowder(powder) - gSpecialVar_0x8004);
return TRUE;
}
u32 GetBerryPowder(void)
{
u32 *powder = &gSaveBlock2Ptr->berryCrush.berryPowderAmount;
return DecryptBerryPowder(powder);
}
static void PrintBerryPowderAmount(u8 windowId, int amount, u8 x, u8 y, u8 speed)
{
ConvertIntToDecimalStringN(gStringVar1, amount, STR_CONV_MODE_RIGHT_ALIGN, 5);
AddTextPrinterParameterized(windowId, 1, gStringVar1, x, y, speed, NULL);
}
static void DrawPlayerPowderAmount(u8 windowId, u16 baseTileOffset, u8 paletteNum, u32 amount)
{
DrawStdFrameWithCustomTileAndPalette(windowId, FALSE, baseTileOffset, paletteNum);
AddTextPrinterParameterized(windowId, 1, gText_Powder, 0, 1, TEXT_SPEED_FF, NULL);
PrintBerryPowderAmount(windowId, amount, 26, 17, 0);
}
void PrintPlayerBerryPowderAmount(void)
{
u32 amount = GetBerryPowder();
PrintBerryPowderAmount(sBerryPowderVendorWindowId, amount, 26, 17, 0);
}
void DisplayBerryPowderVendorMenu(void)
{
struct WindowTemplate template;
SetWindowTemplateFields(&template, 0, 1, 1, 7, 4, 15, 0x1C);
sBerryPowderVendorWindowId = AddWindow(&template);
FillWindowPixelBuffer(sBerryPowderVendorWindowId, PIXEL_FILL(0));
PutWindowTilemap(sBerryPowderVendorWindowId);
LoadUserWindowBorderGfx_(sBerryPowderVendorWindowId, 0x21D, 0xD0);
DrawPlayerPowderAmount(sBerryPowderVendorWindowId, 0x21D, 13, GetBerryPowder());
}
void RemoveBerryPowderVendorMenu(void)
{
ClearWindowTilemap(sBerryPowderVendorWindowId);
ClearStdWindowAndFrameToTransparent(sBerryPowderVendorWindowId, TRUE);
RemoveWindow(sBerryPowderVendorWindowId);
}

View File

@@ -14,8 +14,8 @@
#include "gpu_regs.h"
#include "graphics.h"
#include "international_string_util.h"
#include "link.h"
#include "main.h"
#include "mevent.h"
#include "menu.h"
#include "overworld.h"
#include "palette.h"
@@ -1318,7 +1318,7 @@ void ShowEasyChatScreen(void)
words = gSaveBlock2Ptr->apprentices[0].easyChatWords;
break;
case EASY_CHAT_TYPE_QUESTIONNAIRE:
words = GetSaveBlock1Field3564();
words = sub_801B058();
break;
default:
return;
@@ -5531,7 +5531,7 @@ void InitializeEasyChatWordArray(u16 *words, u16 length)
void sub_811F8BC(void)
{
int i;
u16 *words = GetSaveBlock1Field3564();
u16 *words = sub_801B058();
for (i = 0; i < 4; i++)
words[i] = 0xFFFF;
}

View File

@@ -1,4 +1,5 @@
#include "global.h"
#include "alloc.h"
#include "battle.h"
#include "battle_tower.h"
#include "cable_club.h"
@@ -20,7 +21,7 @@
#include "link.h"
#include "list_menu.h"
#include "main.h"
#include "alloc.h"
#include "mevent.h"
#include "match_call.h"
#include "menu.h"
#include "overworld.h"
@@ -31,7 +32,6 @@
#include "random.h"
#include "rayquaza_scene.h"
#include "region_map.h"
#include "rom_8011DC0.h"
#include "rtc.h"
#include "script.h"
#include "script_menu.h"

View File

@@ -4,6 +4,7 @@
#include "battle_pyramid.h"
#include "battle_pyramid_bag.h"
#include "berry.h"
#include "berry_powder.h"
#include "bike.h"
#include "coins.h"
#include "data2.h"
@@ -45,8 +46,6 @@ extern u8 Route102_EventScript_274482[];
extern u8 Route102_EventScript_2744C0[];
extern u8 BattleFrontier_OutsideEast_EventScript_242CFC[];
extern s32 sub_80247BC(void);
void SetUpItemUseCallback(u8 taskId);
void MapPostLoadHook_UseItem(void);
void sub_80AF6D4(void);
@@ -638,7 +637,7 @@ void ItemUseOutOfBattle_CoinCase(u8 taskId)
void ItemUseOutOfBattle_PowderJar(u8 taskId)
{
ConvertIntToDecimalStringN(gStringVar1, sub_80247BC(), 0, 5);
ConvertIntToDecimalStringN(gStringVar1, GetBerryPowder(), 0, 5);
StringExpandPlaceholders(gStringVar4, gText_PowderQty);
if (!gTasks[taskId].data[3])

View File

@@ -1,5 +1,6 @@
#include "global.h"
#include "alloc.h"
#include "berry_powder.h"
#include "item.h"
#include "load_save.h"
#include "main.h"
@@ -15,8 +16,6 @@
static void ApplyNewEncryptionKeyToAllEncryptedData(u32 encryptionKey);
extern void ApplyNewEncryptionKeyToBerryPowder(u32 key);
#define SAVEBLOCK_MOVE_RANGE 128
struct LoadedSaveData

626
src/mevent2.c Executable file
View File

@@ -0,0 +1,626 @@
#include "global.h"
#include "util.h"
#include "main.h"
#include "event_data.h"
#include "easy_chat.h"
#include "script.h"
#include "battle_tower.h"
#include "mevent_news.h"
#include "string_util.h"
#include "new_game.h"
#include "mevent.h"
#include "constants/species.h"
static EWRAM_DATA bool32 gUnknown_02022C70 = FALSE;
static void sub_801B180(void);
static void sub_801B14C(void);
static bool32 sub_801B114(const struct MEventBuffer_3120_Sub *data);
static bool32 sub_801B2CC(const struct MEventBuffer_32E0_Sub *data);
static void sub_801B330(void);
static void sub_801B368(void);
static void sub_801B9F8(void);
static void sub_801BA8C(u32 a0, u32 a1, u32 *a2, int a3);
void sub_801AFD8(void)
{
CpuFill32(0, &gSaveBlock1Ptr->unk_322C, sizeof(gSaveBlock1Ptr->unk_322C));
sub_801B180();
sub_811F8BC();
}
struct MEventBuffer_3120_Sub *sub_801B00C(void)
{
return &gSaveBlock1Ptr->unk_322C.buffer_000.data;
}
struct MEventBuffer_32E0_Sub *sav1_get_mevent_buffer_1(void)
{
return &gSaveBlock1Ptr->unk_322C.buffer_1c0.data;
}
struct MEventBuffer_3430_Sub *sav1_get_mevent_buffer_2(void)
{
return &gSaveBlock1Ptr->unk_322C.buffer_310.data;
}
struct MysteryEventStruct *sub_801B044(void)
{
return &gSaveBlock1Ptr->unk_322C.unk_340;
}
u16 *sub_801B058(void)
{
return gSaveBlock1Ptr->unk_322C.unk_338;
}
void sub_801B06C(void)
{
sub_801B14C();
}
bool32 sub_801B078(const struct MEventBuffer_3120_Sub *src)
{
if (!sub_801B114(src))
return FALSE;
sub_801B14C();
gSaveBlock1Ptr->unk_322C.buffer_000.data = *src;
gSaveBlock1Ptr->unk_322C.buffer_000.crc = CalcCRC16WithTable((void *)&gSaveBlock1Ptr->unk_322C.buffer_000.data, sizeof(struct MEventBuffer_3120_Sub));
return TRUE;
}
bool32 sub_801B0CC(void)
{
if (CalcCRC16WithTable((void *)&gSaveBlock1Ptr->unk_322C.buffer_000.data, sizeof(struct MEventBuffer_3120_Sub)) != gSaveBlock1Ptr->unk_322C.buffer_000.crc)
return FALSE;
if (!sub_801B114(&gSaveBlock1Ptr->unk_322C.buffer_000.data))
return FALSE;
return TRUE;
}
static bool32 sub_801B114(const struct MEventBuffer_3120_Sub *data)
{
if (data->unk_00 == 0)
return FALSE;
return TRUE;
}
bool32 sub_801B128(void)
{
const struct MEventBuffer_3120_Sub *data = &gSaveBlock1Ptr->unk_322C.buffer_000.data;
if (data->unk_02 == 0)
return FALSE;
return TRUE;
}
static void sub_801B14C(void)
{
CpuFill32(0, sub_801B00C(), sizeof(gSaveBlock1Ptr->unk_322C.buffer_000.data));
gSaveBlock1Ptr->unk_322C.buffer_000.crc = 0;
}
static void sub_801B180(void)
{
CpuFill32(0, sub_801B044(), sizeof(struct MysteryEventStruct));
sub_801DBC0();
}
bool32 sub_801B1A4(const u8 *src)
{
const u8 *r5 = (const u8 *)&gSaveBlock1Ptr->unk_322C.buffer_000.data;
u32 i;
if (!sub_801B0CC())
return FALSE;
for (i = 0; i < sizeof(struct MEventBuffer_3120_Sub); i++)
{
if (r5[i] != src[i])
return FALSE;
}
return TRUE;
}
void sub_801B1E8(void)
{
sub_801B330();
sub_801B368();
sub_801B9F8();
ClearRamScript();
sub_809D4D8();
sub_809D570();
ClearEReaderTrainer(&gSaveBlock2Ptr->frontier.ereaderTrainer);
}
bool32 sub_801B21C(const struct MEventBuffer_32E0_Sub *data)
{
struct MEventBuffer_3430_Sub *r2;
struct MEventBuffer_32E0_Sub *r1;
if (!sub_801B2CC(data))
return FALSE;
sub_801B1E8();
memcpy(&gSaveBlock1Ptr->unk_322C.buffer_1c0.data, data, sizeof(struct MEventBuffer_32E0_Sub));
gSaveBlock1Ptr->unk_322C.buffer_1c0.crc = CalcCRC16WithTable((void *)&gSaveBlock1Ptr->unk_322C.buffer_1c0.data, sizeof(struct MEventBuffer_32E0_Sub));
r2 = &gSaveBlock1Ptr->unk_322C.buffer_310.data;
r1 = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data;
r2->unk_06 = r1->unk_02;
return TRUE;
}
bool32 sub_801B27C(void)
{
if (gSaveBlock1Ptr->unk_322C.buffer_1c0.crc != CalcCRC16WithTable((void *)&gSaveBlock1Ptr->unk_322C.buffer_1c0.data, sizeof(struct MEventBuffer_32E0_Sub)))
return FALSE;
if (!sub_801B2CC(&gSaveBlock1Ptr->unk_322C.buffer_1c0.data))
return FALSE;
if (!sub_80991F8())
return FALSE;
return TRUE;
}
static bool32 sub_801B2CC(const struct MEventBuffer_32E0_Sub *data)
{
if (data->unk_00 == 0)
return FALSE;
if (data->unk_08_0 > 2)
return FALSE;
if (!(data->unk_08_6 == 0 || data->unk_08_6 == 1 || data->unk_08_6 == 2))
return FALSE;
if (data->unk_08_2 > 7)
return FALSE;
if (data->unk_09 > 7)
return FALSE;
return TRUE;
}
bool32 sub_801B308(void)
{
const struct MEventBuffer_32E0_Sub *data = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data;
if (data->unk_08_6 == 0)
return FALSE;
return TRUE;
}
static void sub_801B330(void)
{
CpuFill32(0, &gSaveBlock1Ptr->unk_322C.buffer_1c0.data, sizeof(struct MEventBuffer_32E0_Sub));
gSaveBlock1Ptr->unk_322C.buffer_1c0.crc = 0;
}
static void sub_801B368(void)
{
CpuFill32(0, sav1_get_mevent_buffer_2(), 18 *sizeof(u16));
gSaveBlock1Ptr->unk_322C.buffer_310.crc = 0;
}
u16 sub_801B39C(void)
{
if (sub_801B27C())
return gSaveBlock1Ptr->unk_322C.buffer_1c0.data.unk_00;
return 0;
}
void sub_801B3C0(struct MEventBuffer_32E0_Sub *buffer)
{
if (buffer->unk_08_6 == 1)
buffer->unk_08_6 = 0;
}
static bool32 sub_801B3D8(u16 a0)
{
if (a0 >= 1000 && a0 < 1020)
return TRUE;
return FALSE;
}
static const u16 sMysteryGiftFlags[] =
{
FLAG_RECEIVED_AURORA_TICKET,
FLAG_RECEIVED_MYSTIC_TICKET,
FLAG_RECEIVED_OLD_SEA_MAP,
FLAG_UNUSED_MYSTERY_GIFT_0x13D,
FLAG_UNUSED_MYSTERY_GIFT_0x13E,
FLAG_UNUSED_MYSTERY_GIFT_0x13F,
FLAG_UNUSED_MYSTERY_GIFT_0x140,
FLAG_UNUSED_MYSTERY_GIFT_0x141,
FLAG_UNUSED_MYSTERY_GIFT_0x142,
FLAG_UNUSED_MYSTERY_GIFT_0x143,
FLAG_UNUSED_MYSTERY_GIFT_0x144,
FLAG_UNUSED_MYSTERY_GIFT_0x145,
FLAG_UNUSED_MYSTERY_GIFT_0x146,
FLAG_UNUSED_MYSTERY_GIFT_0x147,
FLAG_UNUSED_MYSTERY_GIFT_0x148,
FLAG_UNUSED_MYSTERY_GIFT_0x149,
FLAG_UNUSED_MYSTERY_GIFT_0x14A,
FLAG_UNUSED_MYSTERY_GIFT_0x14B,
FLAG_UNUSED_MYSTERY_GIFT_0x14C,
FLAG_UNUSED_MYSTERY_GIFT_0x14D,
};
bool32 sub_801B3F8(void)
{
u16 value = sub_801B39C();
if (!sub_801B3D8(value))
return FALSE;
if (FlagGet(sMysteryGiftFlags[value - 1000]) == TRUE)
return FALSE;
return TRUE;
}
static int sub_801B438(const struct MEventBuffer_3430_Sub *data, int size)
{
int r3 = 0;
int i;
for (i = 0; i < size; i++)
{
if (data->unk_08[1][i] && data->unk_08[0][i])
r3++;
}
return r3;
}
static bool32 sub_801B460(const struct MEventBuffer_3430_Sub *data1, const u16 *data2, int size)
{
int i;
for (i = 0; i < size; i++)
{
if (data1->unk_08[1][i] == data2[1])
return TRUE;
if (data1->unk_08[0][i] == data2[0])
return TRUE;
}
return FALSE;
}
static bool32 sub_801B4A4(const u16 *data)
{
if (data[1] == 0)
return FALSE;
if (data[0] == 0)
return FALSE;
if (data[0] >= NUM_SPECIES)
return FALSE;
return TRUE;
}
static int sub_801B4CC(void)
{
struct MEventBuffer_32E0_Sub *data;
if (!sub_801B27C())
return 0;
data = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data;
if (data->unk_08_0 != 1)
return 0;
return sub_801B438(&gSaveBlock1Ptr->unk_322C.buffer_310.data, data->unk_09);
}
bool32 sub_801B508(const u16 *data)
{
struct MEventBuffer_32E0_Sub *buffer = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data;
int size = buffer->unk_09;
int i;
if (!sub_801B4A4(data))
return FALSE;
if (sub_801B460(&gSaveBlock1Ptr->unk_322C.buffer_310.data, data, size))
return FALSE;
for (i = 0; i < size; i++)
{
if (gSaveBlock1Ptr->unk_322C.buffer_310.data.unk_08[1][i] == 0 && gSaveBlock1Ptr->unk_322C.buffer_310.data.unk_08[0][i] == 0)
{
gSaveBlock1Ptr->unk_322C.buffer_310.data.unk_08[1][i] = data[1];
gSaveBlock1Ptr->unk_322C.buffer_310.data.unk_08[0][i] = data[0];
return TRUE;
}
}
return FALSE;
}
void sub_801B580(struct MEventStruct_Unk1442CC *data, bool32 a1)
{
int i;
CpuFill32(0, data, sizeof(struct MEventStruct_Unk1442CC));
data->unk_00 = 0x101;
data->unk_04 = 1;
data->unk_08 = 1;
if (a1)
{
data->unk_0C = 5;
data->unk_10 = 0x0201;
}
else
{
data->unk_0C = 4;
data->unk_10 = 0x0200;
}
if (sub_801B27C())
{
data->unk_14 = sav1_get_mevent_buffer_1()->unk_00;
data->unk_20 = *sav1_get_mevent_buffer_2();
data->unk_44 = sav1_get_mevent_buffer_1()->unk_09;
}
else
{
data->unk_14 = 0;
}
for (i = 0; i < 4; i++)
data->unk_16[i] = gSaveBlock1Ptr->unk_322C.unk_338[i];
CopyTrainerId(data->unk_4C, gSaveBlock2Ptr->playerTrainerId);
StringCopy(data->unk_45, gSaveBlock2Ptr->playerName);
for (i = 0; i < 6; i++)
data->unk_50[i] = gSaveBlock1Ptr->easyChatProfile[i];
memcpy(data->unk_5C, RomHeaderGameCode, 4);
data->unk_60 = RomHeaderSoftwareVersion;
}
bool32 sub_801B6A0(const struct MEventStruct_Unk1442CC *data, bool32 a1)
{
if (data->unk_00 != 0x101)
return FALSE;
if (!(data->unk_04 & 1))
return FALSE;
if (!(data->unk_08 & 1))
return FALSE;
if (!a1)
{
if (!(data->unk_0C & 4))
return FALSE;
if (!(data->unk_10 & 0x380))
return FALSE;
}
return TRUE;
}
u32 sub_801B6EC(const u16 *a0, const struct MEventStruct_Unk1442CC *a1, void *unused)
{
if (a1->unk_14 == 0)
return 0;
if (*a0 == a1->unk_14)
return 1;
return 2;
}
u32 sub_801B708(const u16 *a0, const struct MEventStruct_Unk1442CC *a1, void *unused)
{
int r4 = a1->unk_44 - sub_801B438(&a1->unk_20, a1->unk_44);
if (r4 == 0)
return 1;
if (sub_801B460(&a1->unk_20, a0, a1->unk_44))
return 3;
if (r4 == 1)
return 4;
return 2;
}
bool32 sub_801B748(const struct MEventStruct_Unk1442CC *a0, const u16 *a1)
{
int i;
for (i = 0; i < 4; i++)
{
if (a0->unk_16[i] != a1[i])
return FALSE;
}
return TRUE;
}
static int sub_801B770(const struct MEventStruct_Unk1442CC *a0)
{
return sub_801B438(&a0->unk_20, a0->unk_44);
}
u16 sub_801B784(const struct MEventStruct_Unk1442CC *a0, u32 command)
{
switch (command)
{
case 0:
return a0->unk_20.unk_00;
case 1:
return a0->unk_20.unk_02;
case 2:
return a0->unk_20.unk_04;
case 3:
return sub_801B770(a0);
case 4:
return a0->unk_44;
default:
AGB_ASSERT(0);
return 0;
}
}
static void sub_801B7D8(u32 command)
{
struct MEventBuffer_32E0_Sub *data = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data;
if (data->unk_08_0 == 2)
{
u16 *dest = NULL;
switch (command)
{
case 0:
dest = &gSaveBlock1Ptr->unk_322C.buffer_310.data.unk_00;
break;
case 1:
dest = &gSaveBlock1Ptr->unk_322C.buffer_310.data.unk_02;
break;
case 2:
dest = &gSaveBlock1Ptr->unk_322C.buffer_310.data.unk_04;
break;
case 3:
break;
case 4:
break;
}
if (dest == NULL)
AGB_ASSERT(0);
else if (++(*dest) > 999)
*dest = 999;
}
}
u16 mevent_081445C0(u32 command)
{
switch (command)
{
case 0:
{
struct MEventBuffer_32E0_Sub *data = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data;
if (data->unk_08_0 == 2)
{
struct MEventBuffer_3430_Sub *buffer = &gSaveBlock1Ptr->unk_322C.buffer_310.data;
return buffer->unk_00;
}
break;
}
case 1:
{
struct MEventBuffer_32E0_Sub *data = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data;
if (data->unk_08_0 == 2)
{
struct MEventBuffer_3430_Sub *buffer = &gSaveBlock1Ptr->unk_322C.buffer_310.data;
return buffer->unk_02;
}
break;
}
case 2:
{
struct MEventBuffer_32E0_Sub *data = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data;
if (data->unk_08_0 == 2)
{
struct MEventBuffer_3430_Sub *buffer = &gSaveBlock1Ptr->unk_322C.buffer_310.data;
return buffer->unk_04;
}
break;
}
case 3:
{
struct MEventBuffer_32E0_Sub *data = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data;
if (data->unk_08_0 == 1)
return sub_801B4CC();
break;
}
case 4:
{
struct MEventBuffer_32E0_Sub *data = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data;
if (data->unk_08_0 == 1)
return data->unk_09;
break;
}
}
AGB_ASSERT(0);
return 0;
}
void sub_801B940(void)
{
gUnknown_02022C70 = FALSE;
}
bool32 sub_801B94C(u16 a0)
{
gUnknown_02022C70 = FALSE;
if (a0 == 0)
return FALSE;
if (!sub_801B27C())
return FALSE;
if (gSaveBlock1Ptr->unk_322C.buffer_1c0.data.unk_00 != a0)
return FALSE;
gUnknown_02022C70 = TRUE;
return TRUE;
}
void sub_801B990(u32 a0, u32 a1)
{
if (gUnknown_02022C70)
{
switch (a0)
{
case 2:
sub_801BA8C(2, a1, gSaveBlock1Ptr->unk_322C.unk_344[1], 5);
break;
case 0:
sub_801BA8C(0, a1, gSaveBlock1Ptr->unk_322C.unk_344[0], 5);
break;
case 1:
sub_801BA8C(1, a1, gSaveBlock1Ptr->unk_322C.unk_344[0], 5);
break;
default:
AGB_ASSERT(0);
}
}
}
static void sub_801B9F8(void)
{
CpuFill32(0, gSaveBlock1Ptr->unk_322C.unk_344, sizeof(gSaveBlock1Ptr->unk_322C.unk_344));
}
static bool32 sub_801BA24(u32 a0, u32 *a1, int size)
{
int i;
int j;
for (i = 0; i < size; i++)
{
if (a1[i] == a0)
break;
}
if (i == size)
{
for (j = size - 1; j > 0; j--)
a1[j] = a1[j - 1];
a1[0] = a0;
return TRUE;
}
else
{
for (j = i; j > 0; j--)
a1[j] = a1[j - 1];
a1[0] = a0;
return FALSE;
}
}
static void sub_801BA8C(u32 a0, u32 a1, u32 *a2, int a3)
{
if (sub_801BA24(a1, a2, a3))
sub_801B7D8(a0);
}

View File

@@ -41,12 +41,12 @@
#include "secret_base.h"
#include "player_pc.h"
#include "field_specials.h"
#include "berry_powder.h"
#include "mevent.h"
extern void copy_strings_to_sav1(void);
extern void sub_801AFD8(void);
extern void ResetPokeJumpResults(void);
extern void SetBerryPowder(u32* powder, u32 newValue);
extern const u8 EventScript_ResetAllMapFlags[];

View File

@@ -1,6 +1,7 @@
#include "global.h"
#include "script.h"
#include "event_data.h"
#include "mevent.h"
#include "util.h"
#include "constants/map_scripts.h"
@@ -8,8 +9,6 @@
extern const u8* gUnknown_020375C0;
extern bool32 sub_801B27C(void);
// ewram bss
IWRAM_DATA static u8 sScriptContext1Status;
IWRAM_DATA static u32 sUnusedVariable1;

View File

@@ -34,6 +34,7 @@
#include "data2.h"
#include "field_screen_effect.h"
#include "script_pokemon_util_80F87D8.h"
#include "mevent.h"
struct UnkStruct_Shared
{
@@ -228,9 +229,6 @@ void sub_80177B8(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 *arg3, u8 arg4,
bool32 sub_8017678(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1);
u32 sub_8018120(struct TradeUnkStruct *arg0, u8 multiplayerId);
void sub_801807C(struct TradeUnkStruct *arg0);
void sub_801B940(void);
void sub_801B94C(u16);
u16 sub_801B39C(void);
void sub_801AC54(void);
void sub_801DD98(void);
void sub_802A9A8(u8 monId, MainCallback callback);

View File

@@ -509,19 +509,15 @@ void sub_81668F8(void)
}
}
#ifdef NONMATCHING
void sub_8166A34(void)
{
switch (gUnknown_0203BC90->field_50)
{
u8 var;
case 0:
gUnknown_0203BC90->field_5c[0] = (u8) &gPlayerParty;
gUnknown_0203BCAC->info.field_71 = (u32) &gUnknown_0203BCAC->field_0[gUnknown_0203BCAC->info.field_71];
gUnknown_0203BC90->field_5c[0] = &gPlayerParty
gUnknown_0203BC90->pokemon = gPlayerParty;
gUnknown_0203BC90->pokemon += gUnknown_0203BCAC->field_7FB8[gUnknown_0203BCAC->info.field_71].unk1;
sub_81D3520(gUnknown_0203BCAC->field_7B1C);
/*gUnknown_0203BCAC->pokemon = &gPlayerParty[gUnknown_083DFEC4->unk893c[gUnknown_0203BCAC->field_0[0x7B1C]].partyIdx];
move_anim_execute();*/
gUnknown_0203BC90->field_50++;
break;
case 1:
@@ -530,27 +526,26 @@ void sub_8166A34(void)
break;
case 2:
sub_8167104();
sub_81D2754(gUnknown_0203BC90->field_5c, &gUnknown_0203BCAC->field_7C58[0x50]);
sub_81D1F84(&gUnknown_0203BCAC->field_7C58[0], &gUnknown_0203BCAC->field_7C58[gUnknown_0203BCAC->field_7C58[0x35B] + 0x14], 0);
sub_81D2754(gUnknown_0203BC90->field_5c, gUnknown_0203BCAC->field_7C58.unk14[3]);
sub_81D1F84(&gUnknown_0203BCAC->field_7C58, gUnknown_0203BCAC->field_7C58.unk14[gUnknown_0203BCAC->field_7FB3], gUnknown_0203BCAC->field_7C58.unk14[3]);
sub_8167338();
gUnknown_0203BC90->field_50++;
break;
case 3:
var = gUnknown_0203BCAC->field_7C58[0];
sub_81D2074();
if (!var)
var = sub_81D2074(&gUnknown_0203BCAC->field_7C58);
if(var)
return;
sub_81681F4(sub_81672A4(gUnknown_0203BCAC->info.field_71));
if (gUnknown_0203BCAC->info.field_71 != gUnknown_0203BCAC->info.field_70 - 1)
{
sub_81681F4(sub_81672A4(gUnknown_0203BCAC->info.field_71));
/*sub_80F3D00();
gUnknown_0203BCAC->unk52 = 0;*/
if(gUnknown_0203BCAC->info.field_71 == gUnknown_0203BCAC->info.field_70 - 1)
{
gUnknown_0203BC90->field_52 = var;
}
sub_81D3480(&gUnknown_0203BCAC->field_7C58[0x35B], gUnknown_0203BCAC->field_7C58[0x35B + gUnknown_0203BCAC->field_7C58[0x358]]);
u8 var0 = gUnknown_0203BCAC->unk7FB0[gUnknown_0203BCAC->field_7FB3];
sub_81D3480(gUnknown_0203BCAC->field_7B1C, gUnknown_0203BCAC->field_7B10, var0);
}
gUnknown_0203BC90->field_52 = 0;
gUnknown_0203BC90->field_50++;
break;
case 4:
if ((++gUnknown_0203BC90->field_52) > 16)
@@ -568,190 +563,6 @@ void sub_8166A34(void)
break;
}
}
#else
NAKED
void sub_8166A34(void)
{
asm(".syntax unified\n\
push {r4-r6,lr}\n\
ldr r1, =gUnknown_0203BC90\n\
ldr r0, [r1]\n\
adds r0, 0x50\n\
ldrb r0, [r0]\n\
adds r5, r1, 0\n\
cmp r0, 0x5\n\
bls _08166A46\n\
b _08166BDA\n\
_08166A46:\n\
lsls r0, 2\n\
ldr r1, =_08166A58\n\
adds r0, r1\n\
ldr r0, [r0]\n\
mov pc, r0\n\
.pool\n\
.align 2, 0\n\
_08166A58:\n\
.4byte _08166A70\n\
.4byte _08166AAC\n\
.4byte _08166AC0\n\
.4byte _08166B14\n\
.4byte _08166B94\n\
.4byte _08166BB6\n\
_08166A70:\n\
ldr r4, [r5]\n\
ldr r3, =gPlayerParty\n\
str r3, [r4, 0xC]\n\
ldr r0, =gUnknown_0203BCAC\n\
ldr r0, [r0]\n\
ldr r2, =0x00008041\n\
adds r1, r0, r2\n\
ldrb r1, [r1]\n\
lsls r1, 2\n\
adds r1, r0, r1\n\
subs r2, 0x88\n\
adds r1, r2\n\
ldrb r2, [r1]\n\
movs r1, 0x64\n\
muls r1, r2\n\
adds r1, r3\n\
str r1, [r4, 0xC]\n\
ldr r3, =0x00007b1c\n\
adds r0, r3\n\
bl sub_81D3520\n\
b _08166BAA\n\
.pool\n\
_08166AAC:\n\
ldr r0, =gMain\n\
ldrh r1, [r0, 0x2E]\n\
movs r0, 0x3\n\
ands r0, r1\n\
cmp r0, 0\n\
bne _08166ABA\n\
b _08166BDA\n\
_08166ABA:\n\
b _08166BAA\n\
.pool\n\
_08166AC0:\n\
bl sub_8167104\n\
ldr r6, =gUnknown_0203BC90\n\
ldr r0, [r6]\n\
adds r0, 0x5C\n\
ldr r4, =gUnknown_0203BCAC\n\
ldr r1, [r4]\n\
ldr r5, =0x00007ca8\n\
adds r1, r5\n\
bl sub_81D2754\n\
ldr r2, [r4]\n\
ldr r4, =0x00007c58\n\
adds r0, r2, r4\n\
ldr r3, =0x00007fb3\n\
adds r1, r2, r3\n\
movs r3, 0\n\
ldrsb r3, [r1, r3]\n\
lsls r1, r3, 2\n\
adds r1, r3\n\
lsls r1, 2\n\
adds r4, 0x14\n\
adds r1, r4\n\
adds r1, r2, r1\n\
adds r2, r5\n\
bl sub_81D1F84\n\
bl sub_8167338\n\
ldr r1, [r6]\n\
b _08166BAC\n\
.pool\n\
_08166B14:\n\
ldr r5, =gUnknown_0203BCAC\n\
ldr r0, [r5]\n\
ldr r1, =0x00007c58\n\
adds r0, r1\n\
bl sub_81D2074\n\
lsls r0, 24\n\
lsrs r6, r0, 24\n\
cmp r6, 0\n\
bne _08166BDA\n\
ldr r0, [r5]\n\
ldr r4, =0x00008041\n\
adds r0, r4\n\
ldrb r0, [r0]\n\
bl sub_81672A4\n\
lsls r0, 24\n\
lsrs r0, 24\n\
bl sub_81681F4\n\
ldr r3, [r5]\n\
adds r4, r3, r4\n\
ldrb r1, [r4]\n\
ldr r2, =0x00008040\n\
adds r0, r3, r2\n\
ldrb r0, [r0]\n\
subs r0, 0x1\n\
cmp r1, r0\n\
beq _08166B6C\n\
ldr r4, =0x00007fb3\n\
adds r0, r3, r4\n\
movs r1, 0\n\
ldrsb r1, [r0, r1]\n\
subs r2, 0x90\n\
adds r0, r3, r2\n\
adds r0, r1\n\
ldrb r2, [r0]\n\
ldr r4, =0x00007b1c\n\
adds r0, r3, r4\n\
subs r4, 0xC\n\
adds r1, r3, r4\n\
ldrb r1, [r1]\n\
bl sub_81D3480\n\
_08166B6C:\n\
ldr r1, =gUnknown_0203BC90\n\
ldr r0, [r1]\n\
adds r0, 0x52\n\
strb r6, [r0]\n\
ldr r1, [r1]\n\
b _08166BAC\n\
.pool\n\
_08166B94:\n\
ldr r1, [r5]\n\
adds r1, 0x52\n\
ldrb r0, [r1]\n\
adds r0, 0x1\n\
strb r0, [r1]\n\
lsls r0, 24\n\
lsrs r0, 24\n\
cmp r0, 0x10\n\
bls _08166BDA\n\
bl sub_8166E24\n\
_08166BAA:\n\
ldr r1, [r5]\n\
_08166BAC:\n\
adds r1, 0x50\n\
ldrb r0, [r1]\n\
adds r0, 0x1\n\
strb r0, [r1]\n\
b _08166BDA\n\
_08166BB6:\n\
ldr r0, =gMain\n\
ldrh r1, [r0, 0x2E]\n\
movs r0, 0x3\n\
ands r0, r1\n\
cmp r0, 0\n\
beq _08166BDA\n\
bl sub_8166EDC\n\
lsls r0, 24\n\
cmp r0, 0\n\
bne _08166BDA\n\
ldr r0, =gSpecialVar_ItemId\n\
ldrb r0, [r0]\n\
bl TryClearPokeblock\n\
ldr r0, =sub_8166BEC\n\
bl sub_816636C\n\
_08166BDA:\n\
pop {r4-r6}\n\
pop {r0}\n\
bx r0\n\
.pool\n\
.syntax divided\n");
}
#endif
void sub_8166BEC(void)
{