Merge branch 'master' of github.com:pret/pokeemerald
This commit is contained in:
+2
-5
@@ -204,9 +204,6 @@ extern const u8 BattleScript_ActionSwitch[];
|
||||
extern const u8 BattleScript_PrintFailedToRunString[];
|
||||
|
||||
// functions
|
||||
extern void HandleLinkBattleSetup(void); // rom_3
|
||||
extern void SetUpBattleVarsAndBirchZigzagoon(void); // rom_3
|
||||
extern void sub_8032768(void); // rom_3
|
||||
extern void dp12_8087EA4(void);
|
||||
extern void sub_80356D0(void);
|
||||
extern void GetFrontierTrainerName(u8* dst, u16 trainerId); // battle tower
|
||||
@@ -4083,7 +4080,7 @@ static void HandleTurnActionSelectionState(void)
|
||||
if (gBattleMons[GetBankByIdentity(GetBankIdentity(gActiveBank) ^ BIT_MON)].status2 & STATUS2_MULTIPLETURNS
|
||||
|| gBattleMons[GetBankByIdentity(GetBankIdentity(gActiveBank) ^ BIT_MON)].status2 & STATUS2_RECHARGE)
|
||||
{
|
||||
Emit_x32(0);
|
||||
EmitCmd50(0);
|
||||
MarkBufferBankForExecution(gActiveBank);
|
||||
return;
|
||||
}
|
||||
@@ -4111,7 +4108,7 @@ static void HandleTurnActionSelectionState(void)
|
||||
{
|
||||
RecordedBattle_ClearBankAction(GetBankByIdentity(GetBankIdentity(gActiveBank) ^ BIT_MON), 3);
|
||||
}
|
||||
Emit_x32(0);
|
||||
EmitCmd50(0);
|
||||
MarkBufferBankForExecution(gActiveBank);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ static bool8 ShouldSwitchIfPerishSong(void)
|
||||
&& gDisableStructs[gActiveBank].perishSong1 == 0)
|
||||
{
|
||||
*(gBattleStruct->field_294 + gActiveBank) = 6;
|
||||
EmitCmd_x21(1, 2, 0);
|
||||
EmitCmd33(1, 2, 0);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -121,7 +121,7 @@ static bool8 ShouldSwitchIfWonderGuard(void)
|
||||
{
|
||||
// we found a mon
|
||||
*(gBattleStruct->field_294 + gActiveBank) = i;
|
||||
EmitCmd_x21(1, 2, 0);
|
||||
EmitCmd33(1, 2, 0);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
@@ -221,7 +221,7 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void)
|
||||
{
|
||||
// we found a mon
|
||||
*(gBattleStruct->field_294 + gActiveBank) = i;
|
||||
EmitCmd_x21(1, 2, 0);
|
||||
EmitCmd33(1, 2, 0);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
@@ -241,13 +241,13 @@ static bool8 ShouldSwitchIfNaturalCure(void)
|
||||
if ((gUnknown_02024250[gActiveBank] == 0 || gUnknown_02024250[gActiveBank] == 0xFFFF) && Random() & 1)
|
||||
{
|
||||
*(gBattleStruct->field_294 + gActiveBank) = 6;
|
||||
EmitCmd_x21(1, 2, 0);
|
||||
EmitCmd33(1, 2, 0);
|
||||
return TRUE;
|
||||
}
|
||||
else if (gBattleMoves[gUnknown_02024250[gActiveBank]].power == 0 && Random() & 1)
|
||||
{
|
||||
*(gBattleStruct->field_294 + gActiveBank) = 6;
|
||||
EmitCmd_x21(1, 2, 0);
|
||||
EmitCmd33(1, 2, 0);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -258,7 +258,7 @@ static bool8 ShouldSwitchIfNaturalCure(void)
|
||||
if (Random() & 1)
|
||||
{
|
||||
*(gBattleStruct->field_294 + gActiveBank) = 6;
|
||||
EmitCmd_x21(1, 2, 0);
|
||||
EmitCmd33(1, 2, 0);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -426,7 +426,7 @@ static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent)
|
||||
if (moveFlags & MOVESTATUS_SUPEREFFECTIVE && Random() % moduloPercent == 0)
|
||||
{
|
||||
*(gBattleStruct->field_294 + gActiveBank) = i;
|
||||
EmitCmd_x21(1, 2, 0);
|
||||
EmitCmd33(1, 2, 0);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
@@ -611,7 +611,7 @@ void AI_TrySwitchOrUseItem(void)
|
||||
}
|
||||
}
|
||||
|
||||
EmitCmd_x21(1, 0, (gActiveBank ^ BIT_SIDE) << 8);
|
||||
EmitCmd33(1, 0, (gActiveBank ^ BIT_SIDE) << 8);
|
||||
}
|
||||
|
||||
#define TYPE_FORESIGHT 0xFE
|
||||
@@ -940,7 +940,7 @@ static bool8 ShouldUseItem(void)
|
||||
|
||||
if (shouldUse)
|
||||
{
|
||||
EmitCmd_x21(1, 1, 0);
|
||||
EmitCmd33(1, 1, 0);
|
||||
*(gBattleStruct->field_C0 + (gActiveBank / 2) * 2) = item;
|
||||
gBattleResources->battleHistory->trainerItems[i] = 0;
|
||||
return shouldUse;
|
||||
|
||||
+1850
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -349,7 +349,7 @@ static void atk51_switch_handle_order(void);
|
||||
static void atk52_switch_in_effects(void);
|
||||
static void atk53_trainer_slide(void);
|
||||
static void atk54_effectiveness_sound(void);
|
||||
static void atk55_play_sound(void);
|
||||
static void atk55_play_fanfare(void);
|
||||
static void atk56_fainting_cry(void);
|
||||
static void atk57(void);
|
||||
static void atk58_return_to_ball(void);
|
||||
@@ -601,7 +601,7 @@ void (* const gBattleScriptingCommandsTable[])(void) =
|
||||
atk52_switch_in_effects,
|
||||
atk53_trainer_slide,
|
||||
atk54_effectiveness_sound,
|
||||
atk55_play_sound,
|
||||
atk55_play_fanfare,
|
||||
atk56_fainting_cry,
|
||||
atk57,
|
||||
atk58_return_to_ball,
|
||||
@@ -5308,7 +5308,7 @@ static void atk4B_return_atk_to_ball(void)
|
||||
gActiveBank = gBankAttacker;
|
||||
if (!(gHitMarker & HITMARKER_FAINTED(gActiveBank)))
|
||||
{
|
||||
EmitReturnPokeToBall(0, 0);
|
||||
EmitReturnMonToBall(0, 0);
|
||||
MarkBufferBankForExecution(gActiveBank);
|
||||
}
|
||||
gBattlescriptCurrInstr++;
|
||||
@@ -5627,7 +5627,7 @@ static void atk50_openpartyscreen(void)
|
||||
{
|
||||
gAbsentBankFlags |= gBitTable[gActiveBank];
|
||||
gHitMarker &= ~(HITMARKER_FAINTED(gActiveBank));
|
||||
Emit_x2A(0);
|
||||
EmitCmd42(0);
|
||||
MarkBufferBankForExecution(gActiveBank);
|
||||
}
|
||||
else if (!gSpecialStatuses[gActiveBank].flag40)
|
||||
@@ -5649,7 +5649,7 @@ static void atk50_openpartyscreen(void)
|
||||
{
|
||||
gAbsentBankFlags |= gBitTable[gActiveBank];
|
||||
gHitMarker &= ~(HITMARKER_FAINTED(gActiveBank));
|
||||
Emit_x2A(0);
|
||||
EmitCmd42(0);
|
||||
MarkBufferBankForExecution(gActiveBank);
|
||||
}
|
||||
else if (!gSpecialStatuses[gActiveBank].flag40)
|
||||
@@ -5670,7 +5670,7 @@ static void atk50_openpartyscreen(void)
|
||||
{
|
||||
gAbsentBankFlags |= gBitTable[gActiveBank];
|
||||
gHitMarker &= ~(HITMARKER_FAINTED(gActiveBank));
|
||||
Emit_x2A(0);
|
||||
EmitCmd42(0);
|
||||
MarkBufferBankForExecution(gActiveBank);
|
||||
}
|
||||
else if (!gSpecialStatuses[gActiveBank].flag40)
|
||||
@@ -5692,7 +5692,7 @@ static void atk50_openpartyscreen(void)
|
||||
{
|
||||
gAbsentBankFlags |= gBitTable[gActiveBank];
|
||||
gHitMarker &= ~(HITMARKER_FAINTED(gActiveBank));
|
||||
Emit_x2A(0);
|
||||
EmitCmd42(0);
|
||||
MarkBufferBankForExecution(gActiveBank);
|
||||
}
|
||||
else if (!gSpecialStatuses[gActiveBank].flag40)
|
||||
@@ -5755,7 +5755,7 @@ static void atk50_openpartyscreen(void)
|
||||
{
|
||||
gAbsentBankFlags |= gBitTable[gActiveBank];
|
||||
gHitMarker &= ~(HITMARKER_FAINTED(gActiveBank));
|
||||
Emit_x2A(0);
|
||||
EmitCmd42(0);
|
||||
MarkBufferBankForExecution(gActiveBank);
|
||||
}
|
||||
else if (!gSpecialStatuses[gActiveBank].flag40)
|
||||
@@ -5771,7 +5771,7 @@ static void atk50_openpartyscreen(void)
|
||||
{
|
||||
gAbsentBankFlags |= gBitTable[gActiveBank];
|
||||
gHitMarker &= ~(HITMARKER_FAINTED(gActiveBank));
|
||||
Emit_x2A(0);
|
||||
EmitCmd42(0);
|
||||
MarkBufferBankForExecution(gActiveBank);
|
||||
}
|
||||
else if (!gSpecialStatuses[gActiveBank].flag40)
|
||||
@@ -6031,10 +6031,10 @@ static void atk54_effectiveness_sound(void)
|
||||
gBattlescriptCurrInstr += 3;
|
||||
}
|
||||
|
||||
static void atk55_play_sound(void)
|
||||
static void atk55_play_fanfare(void)
|
||||
{
|
||||
gActiveBank = gBankAttacker;
|
||||
EmitPlaySound(0, BS2ScriptRead16(gBattlescriptCurrInstr + 1), 0);
|
||||
EmitPlayFanfareOrBGM(0, BS2ScriptRead16(gBattlescriptCurrInstr + 1), FALSE);
|
||||
MarkBufferBankForExecution(gActiveBank);
|
||||
|
||||
gBattlescriptCurrInstr += 3;
|
||||
@@ -6052,7 +6052,7 @@ static void atk56_fainting_cry(void)
|
||||
static void atk57(void)
|
||||
{
|
||||
gActiveBank = GetBankByIdentity(0);
|
||||
Emit_x37(0, gBattleOutcome);
|
||||
EmitCmd55(0, gBattleOutcome);
|
||||
MarkBufferBankForExecution(gActiveBank);
|
||||
|
||||
gBattlescriptCurrInstr += 1;
|
||||
@@ -6061,7 +6061,7 @@ static void atk57(void)
|
||||
static void atk58_return_to_ball(void)
|
||||
{
|
||||
gActiveBank = GetBattleBank(gBattlescriptCurrInstr[1]);
|
||||
EmitReturnPokeToBall(0, 1);
|
||||
EmitReturnMonToBall(0, 1);
|
||||
MarkBufferBankForExecution(gActiveBank);
|
||||
|
||||
gBattlescriptCurrInstr += 2;
|
||||
@@ -7137,7 +7137,7 @@ static void atk76_various(void)
|
||||
gDisableStructs[1].truantUnknownBit = 1;
|
||||
break;
|
||||
case 13:
|
||||
EmitCmd13(0);
|
||||
EmitCmd19(0);
|
||||
MarkBufferBankForExecution(gActiveBank);
|
||||
break;
|
||||
case 14:
|
||||
@@ -7162,7 +7162,7 @@ static void atk76_various(void)
|
||||
gActiveBank = 1;
|
||||
if (gBattleMons[gActiveBank].hp != 0)
|
||||
{
|
||||
EmitReturnPokeToBall(0, 0);
|
||||
EmitReturnMonToBall(0, 0);
|
||||
MarkBufferBankForExecution(gActiveBank);
|
||||
}
|
||||
break;
|
||||
@@ -7172,7 +7172,7 @@ static void atk76_various(void)
|
||||
gActiveBank = 3;
|
||||
if (gBattleMons[gActiveBank].hp != 0)
|
||||
{
|
||||
EmitReturnPokeToBall(0, 0);
|
||||
EmitReturnMonToBall(0, 0);
|
||||
MarkBufferBankForExecution(gActiveBank);
|
||||
}
|
||||
}
|
||||
@@ -7197,7 +7197,7 @@ static void atk76_various(void)
|
||||
gBattleOutcome = BATTLE_OPPONENT_TELEPORTED;
|
||||
break;
|
||||
case VARIOUS_PLAY_TRAINER_DEFEATED_MUSIC:
|
||||
EmitPlaySound(0, BGM_KACHI1, 1);
|
||||
EmitPlayFanfareOrBGM(0, BGM_KACHI1, TRUE);
|
||||
MarkBufferBankForExecution(gActiveBank);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -220,7 +220,7 @@ bool8 ShouldDoBrailleStrengthEffect(void)
|
||||
|
||||
void sub_8179834(void)
|
||||
{
|
||||
gFieldEffectSpawnParams[0] = brm_get_pokemon_selection();
|
||||
gFieldEffectArguments[0] = brm_get_pokemon_selection();
|
||||
FieldEffectStart(FLDEFF_USE_FLY_ANCIENT_TOMB);
|
||||
}
|
||||
|
||||
@@ -256,7 +256,7 @@ bool8 ShouldDoBrailleFlyEffect(void)
|
||||
|
||||
void sub_8179918(void)
|
||||
{
|
||||
gFieldEffectSpawnParams[0] = brm_get_pokemon_selection();
|
||||
gFieldEffectArguments[0] = brm_get_pokemon_selection();
|
||||
FieldEffectStart(FLDEFF_USE_FLY_ANCIENT_TOMB);
|
||||
}
|
||||
|
||||
@@ -417,7 +417,7 @@ bool8 ShouldDoBrailleRegicePuzzle(void)
|
||||
}
|
||||
// TODO: Find what flags 2 and 3 are.
|
||||
FlagSet(3);
|
||||
FlagReset(2);
|
||||
FlagClear(2);
|
||||
return FALSE;
|
||||
}
|
||||
#else
|
||||
@@ -568,7 +568,7 @@ _08179B44:\n\
|
||||
movs r0, 0x3\n\
|
||||
bl FlagSet\n\
|
||||
movs r0, 0x2\n\
|
||||
bl FlagReset\n\
|
||||
bl FlagClear\n\
|
||||
_08179B5A:\n\
|
||||
movs r0, 0\n\
|
||||
_08179B5C:\n\
|
||||
|
||||
+2
-2
@@ -5,12 +5,12 @@
|
||||
#include "text_window.h"
|
||||
#include "string_util.h"
|
||||
#include "menu.h"
|
||||
#include "international_string_util.h"
|
||||
|
||||
#define MAX_COINS 9999
|
||||
|
||||
EWRAM_DATA u8 sCoinsWindowId = 0;
|
||||
|
||||
extern s32 GetStringRightAlignXOffset(u8 fontId, u8 *str, s32 totalWidth);
|
||||
extern void sub_819746C(u8 windowId, bool8 copyToVram);
|
||||
|
||||
extern const u8 gText_Coins[];
|
||||
@@ -54,7 +54,7 @@ void SetCoins(u16 coinAmount)
|
||||
}
|
||||
|
||||
/* Can't match it lol
|
||||
bool8 AddCoins(u16 toAdd)
|
||||
bool8 GiveCoins(u16 toAdd)
|
||||
{
|
||||
u16 newAmount;
|
||||
u16 ownedCoins = GetCoins();
|
||||
|
||||
+1
-1
@@ -465,7 +465,7 @@ u32 sub_8034974(void* ptr)
|
||||
return (ptr_[3] << 16) | (ptr_[2] << 8) | (ptr_[1]);
|
||||
}
|
||||
|
||||
bool8 LoadCompressedObjectPicUsingHeap(struct CompressedSpriteSheet* src)
|
||||
bool8 LoadCompressedObjectPicUsingHeap(const struct CompressedSpriteSheet* src)
|
||||
{
|
||||
struct SpriteSheet dest;
|
||||
void* buffer;
|
||||
|
||||
+1
-1
@@ -462,7 +462,7 @@ static void VBlankCB_EggHatch(void)
|
||||
TransferPlttBuffer();
|
||||
}
|
||||
|
||||
static void EggHatch(void)
|
||||
void EggHatch(void)
|
||||
{
|
||||
ScriptContext2_Enable();
|
||||
CreateTask(Task_EggHatch, 10);
|
||||
|
||||
+26
-26
@@ -40,11 +40,11 @@ void ClearTempFieldEventData(void)
|
||||
{
|
||||
memset(gSaveBlock1Ptr->flags, 0, TEMP_FLAGS_SIZE);
|
||||
memset(gSaveBlock1Ptr->vars, 0, TEMP_VARS_SIZE);
|
||||
FlagReset(SYS_ENC_UP_ITEM);
|
||||
FlagReset(SYS_ENC_DOWN_ITEM);
|
||||
FlagReset(SYS_USE_STRENGTH);
|
||||
FlagReset(SYS_CTRL_OBJ_DELETE);
|
||||
FlagReset(SYS_UNKNOWN_880);
|
||||
FlagClear(SYS_ENC_UP_ITEM);
|
||||
FlagClear(SYS_ENC_DOWN_ITEM);
|
||||
FlagClear(SYS_USE_STRENGTH);
|
||||
FlagClear(SYS_CTRL_OBJ_DELETE);
|
||||
FlagClear(SYS_UNKNOWN_880);
|
||||
}
|
||||
|
||||
// probably had different flag splits at one point.
|
||||
@@ -58,7 +58,7 @@ void DisableNationalPokedex(void)
|
||||
u16 *nationalDexVar = GetVarPointer(VAR_NATIONAL_DEX);
|
||||
gSaveBlock2Ptr->pokedex.nationalMagic = 0;
|
||||
*nationalDexVar = 0;
|
||||
FlagReset(SYS_NATIONAL_DEX);
|
||||
FlagClear(SYS_NATIONAL_DEX);
|
||||
}
|
||||
|
||||
void EnableNationalPokedex(void)
|
||||
@@ -82,7 +82,7 @@ bool32 IsNationalPokedexEnabled(void)
|
||||
|
||||
void DisableMysteryEvent(void)
|
||||
{
|
||||
FlagReset(SYS_MYSTERY_EVENT_ENABLE);
|
||||
FlagClear(SYS_MYSTERY_EVENT_ENABLE);
|
||||
}
|
||||
|
||||
void EnableMysteryEvent(void)
|
||||
@@ -97,7 +97,7 @@ bool32 IsMysteryEventEnabled(void)
|
||||
|
||||
void DisableMysteryGift(void)
|
||||
{
|
||||
FlagReset(SYS_MYSTERY_GIFT_ENABLE);
|
||||
FlagClear(SYS_MYSTERY_GIFT_ENABLE);
|
||||
}
|
||||
|
||||
void EnableMysteryGift(void)
|
||||
@@ -112,22 +112,22 @@ bool32 IsMysteryGiftEnabled(void)
|
||||
|
||||
void sub_809D4D8(void)
|
||||
{
|
||||
FlagReset(0x1E4);
|
||||
FlagReset(0x1E5);
|
||||
FlagReset(0x1E6);
|
||||
FlagReset(0x1E7);
|
||||
FlagReset(0x1E8);
|
||||
FlagReset(0x1E9);
|
||||
FlagReset(0x1EA);
|
||||
FlagReset(0x1EB);
|
||||
FlagReset(0x1EC);
|
||||
FlagReset(0x1ED);
|
||||
FlagReset(0x1EE);
|
||||
FlagReset(0x1EF);
|
||||
FlagReset(0x1F0);
|
||||
FlagReset(0x1F1);
|
||||
FlagReset(0x1F2);
|
||||
FlagReset(0x1F3);
|
||||
FlagClear(0x1E4);
|
||||
FlagClear(0x1E5);
|
||||
FlagClear(0x1E6);
|
||||
FlagClear(0x1E7);
|
||||
FlagClear(0x1E8);
|
||||
FlagClear(0x1E9);
|
||||
FlagClear(0x1EA);
|
||||
FlagClear(0x1EB);
|
||||
FlagClear(0x1EC);
|
||||
FlagClear(0x1ED);
|
||||
FlagClear(0x1EE);
|
||||
FlagClear(0x1EF);
|
||||
FlagClear(0x1F0);
|
||||
FlagClear(0x1F1);
|
||||
FlagClear(0x1F2);
|
||||
FlagClear(0x1F3);
|
||||
}
|
||||
|
||||
void sub_809D570(void)
|
||||
@@ -145,7 +145,7 @@ void sub_809D570(void)
|
||||
void DisableResetRTC(void)
|
||||
{
|
||||
VarSet(VAR_RESET_RTC_ENABLE, 0);
|
||||
FlagReset(SYS_RESET_RTC_ENABLE);
|
||||
FlagClear(SYS_RESET_RTC_ENABLE);
|
||||
}
|
||||
|
||||
void EnableResetRTC(void)
|
||||
@@ -214,7 +214,7 @@ u8 FlagSet(u16 id)
|
||||
return 0;
|
||||
}
|
||||
|
||||
u8 FlagReset(u16 id)
|
||||
u8 FlagClear(u16 id)
|
||||
{
|
||||
u8 *ptr = GetFlagPointer(id);
|
||||
if (ptr)
|
||||
|
||||
+14
-14
@@ -3,7 +3,7 @@
|
||||
#include "global.h"
|
||||
#include "malloc.h"
|
||||
#include "sprite.h"
|
||||
#include "rom4.h"
|
||||
#include "overworld.h"
|
||||
#include "rng.h"
|
||||
#include "event_scripts.h"
|
||||
#include "berry.h"
|
||||
@@ -2386,10 +2386,10 @@ bool8 do_berry_tree_growth_sparkle_1 (struct MapObject *mapObject, struct Sprite
|
||||
{
|
||||
if (!(sprite->data7 & 0x0004) && sprite->animNum == 4)
|
||||
{
|
||||
gFieldEffectSpawnParams[0] = mapObject->coords2.x;
|
||||
gFieldEffectSpawnParams[1] = mapObject->coords2.y;
|
||||
gFieldEffectSpawnParams[2] = sprite->subpriority - 1;
|
||||
gFieldEffectSpawnParams[3] = sprite->oam.priority;
|
||||
gFieldEffectArguments[0] = mapObject->coords2.x;
|
||||
gFieldEffectArguments[1] = mapObject->coords2.y;
|
||||
gFieldEffectArguments[2] = sprite->subpriority - 1;
|
||||
gFieldEffectArguments[3] = sprite->oam.priority;
|
||||
FieldEffectStart(FLDEFF_BERRY_TREE_GROWTH_SPARKLE);
|
||||
sprite->animNum = berryStage;
|
||||
}
|
||||
@@ -2425,10 +2425,10 @@ bool8 do_berry_tree_growth_sparkle_2 (struct MapObject *mapObject, struct Sprite
|
||||
sprite->data1 = 3;
|
||||
sprite->data2 = 0;
|
||||
sprite->data7 |= 0x0002;
|
||||
gFieldEffectSpawnParams[0] = mapObject->coords2.x;
|
||||
gFieldEffectSpawnParams[1] = mapObject->coords2.y;
|
||||
gFieldEffectSpawnParams[2] = sprite->subpriority - 1;
|
||||
gFieldEffectSpawnParams[3] = sprite->oam.priority;
|
||||
gFieldEffectArguments[0] = mapObject->coords2.x;
|
||||
gFieldEffectArguments[1] = mapObject->coords2.y;
|
||||
gFieldEffectArguments[2] = sprite->subpriority - 1;
|
||||
gFieldEffectArguments[3] = sprite->oam.priority;
|
||||
FieldEffectStart(FLDEFF_BERRY_TREE_GROWTH_SPARKLE);
|
||||
return TRUE;
|
||||
}
|
||||
@@ -3425,7 +3425,7 @@ void FieldObjectCB_TreeDisguise(struct Sprite *sprite)
|
||||
mapObject = &gMapObjects[sprite->data0];
|
||||
if (mapObject->mapobj_unk_21 == 0 || (mapObject->mapobj_unk_21 == 1 && !sprite->data7))
|
||||
{
|
||||
FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectSpawnParams[0], (u8 *)&gFieldEffectSpawnParams[1], (u8 *)&gFieldEffectSpawnParams[2]);
|
||||
FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]);
|
||||
mapObject->mapobj_unk_1A = FieldEffectStart(FLDEFF_TREE_DISGUISE);
|
||||
mapObject->mapobj_unk_21 = 1;
|
||||
sprite->data7 ++;
|
||||
@@ -3446,7 +3446,7 @@ void FieldObjectCB_MountainDisguise(struct Sprite *sprite)
|
||||
mapObject = &gMapObjects[sprite->data0];
|
||||
if (mapObject->mapobj_unk_21 == 0 || (mapObject->mapobj_unk_21 == 1 && !sprite->data7))
|
||||
{
|
||||
FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectSpawnParams[0], (u8 *)&gFieldEffectSpawnParams[1], (u8 *)&gFieldEffectSpawnParams[2]);
|
||||
FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]);
|
||||
mapObject->mapobj_unk_1A = FieldEffectStart(FLDEFF_MOUNTAIN_DISGUISE);
|
||||
mapObject->mapobj_unk_21 = 1;
|
||||
sprite->data7 ++;
|
||||
@@ -4693,7 +4693,7 @@ bool8 sub_80954CC(struct MapObject *mapObject, struct Sprite *sprite)
|
||||
|
||||
bool8 do_exclamation_mark_bubble_1(struct MapObject *mapObject, struct Sprite *sprite)
|
||||
{
|
||||
FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectSpawnParams[0], (u8 *)&gFieldEffectSpawnParams[1], (u8 *)&gFieldEffectSpawnParams[2]);
|
||||
FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]);
|
||||
FieldEffectStart(FLDEFF_EXCLAMATION_MARK_ICON_1);
|
||||
sprite->data2 = 1;
|
||||
return TRUE;
|
||||
@@ -4701,7 +4701,7 @@ bool8 do_exclamation_mark_bubble_1(struct MapObject *mapObject, struct Sprite *s
|
||||
|
||||
bool8 do_exclamation_mark_bubble_2(struct MapObject *mapObject, struct Sprite *sprite)
|
||||
{
|
||||
FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectSpawnParams[0], (u8 *)&gFieldEffectSpawnParams[1], (u8 *)&gFieldEffectSpawnParams[2]);
|
||||
FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]);
|
||||
FieldEffectStart(FLDEFF_EXCLAMATION_MARK_ICON_2);
|
||||
sprite->data2 = 1;
|
||||
return TRUE;
|
||||
@@ -4709,7 +4709,7 @@ bool8 do_exclamation_mark_bubble_2(struct MapObject *mapObject, struct Sprite *s
|
||||
|
||||
bool8 do_heart_bubble(struct MapObject *mapObject, struct Sprite *sprite)
|
||||
{
|
||||
FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectSpawnParams[0], (u8 *)&gFieldEffectSpawnParams[1], (u8 *)&gFieldEffectSpawnParams[2]);
|
||||
FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]);
|
||||
FieldEffectStart(FLDEFF_HEART_ICON);
|
||||
sprite->data2 = 1;
|
||||
return TRUE;
|
||||
|
||||
@@ -13,10 +13,10 @@
|
||||
#define SECONDS(value) ((signed) (60.0 * value + 0.5))
|
||||
|
||||
extern u8 GetSSTidalLocation(s8 *, s8 *, s16 *, s16 *); // should be in field_specials.h
|
||||
extern void warp1_set(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
|
||||
extern bool8 sub_80D3340(u8, u8, u8);
|
||||
extern void Overworld_SetWarpDestination(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
|
||||
extern bool8 ScriptMovement_IsObjectMovementFinished(u8, u8, u8);
|
||||
extern bool32 CountSSTidalStep(u16);
|
||||
extern bool8 exec_movement(u8, u8, u8, u8 *);
|
||||
extern bool8 ScriptMovement_StartObjectMovementScript(u8, u8, u8, u8 *);
|
||||
extern void copy_saved_warp2_bank_and_enter_x_to_warp1(u8 unused);
|
||||
extern void sp13E_warp_to_last_warp(void);
|
||||
extern void saved_warp2_set(int unused, s8 mapGroup, s8 mapNum, s8 warpId);
|
||||
@@ -264,7 +264,7 @@ bool8 sub_80FB59C(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
warp1_set(mapGroup, mapNum, -1, x, y);
|
||||
Overworld_SetWarpDestination(mapGroup, mapNum, -1, x, y);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
@@ -287,7 +287,7 @@ void Task_HandlePorthole(u8 taskId)
|
||||
case IDLE_CHECK: // idle and move.
|
||||
if (gMain.newKeys & A_BUTTON)
|
||||
data[1] = 1;
|
||||
if (!sub_80D3340(0xFF, location->mapNum, location->mapGroup))
|
||||
if (!ScriptMovement_IsObjectMovementFinished(0xFF, location->mapNum, location->mapGroup))
|
||||
return;
|
||||
if (CountSSTidalStep(1) == TRUE)
|
||||
{
|
||||
@@ -308,18 +308,18 @@ void Task_HandlePorthole(u8 taskId)
|
||||
// run this once.
|
||||
if (*var == 2) // which direction?
|
||||
{
|
||||
exec_movement(0xFF, location->mapNum, location->mapGroup, gUnknown_0858E8AB);
|
||||
ScriptMovement_StartObjectMovementScript(0xFF, location->mapNum, location->mapGroup, gUnknown_0858E8AB);
|
||||
data[0] = IDLE_CHECK; // run case 1.
|
||||
}
|
||||
else
|
||||
{
|
||||
exec_movement(0xFF, location->mapNum, location->mapGroup, gUnknown_0858E8AD);
|
||||
ScriptMovement_StartObjectMovementScript(0xFF, location->mapNum, location->mapGroup, gUnknown_0858E8AD);
|
||||
data[0] = IDLE_CHECK; // run case 1.
|
||||
}
|
||||
break;
|
||||
case EXIT_PORTHOLE: // exit porthole.
|
||||
FlagReset(0x4001);
|
||||
FlagReset(0x4000);
|
||||
FlagClear(0x4001);
|
||||
FlagClear(0x4000);
|
||||
copy_saved_warp2_bank_and_enter_x_to_warp1(0);
|
||||
sp13E_warp_to_last_warp();
|
||||
DestroyTask(taskId);
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
#include "global.h"
|
||||
#include "international_string_util.h"
|
||||
#include "text.h"
|
||||
|
||||
extern s32 convert_pixel_width_to_tile_width(s32 a0); // script menu
|
||||
|
||||
s32 GetStringCenterAlignXOffset(s32 fontId, const u8 *str, s32 totalWidth)
|
||||
{
|
||||
return GetStringCenterAlignXOffsetWithLetterSpacing(fontId, str, totalWidth, 0);
|
||||
}
|
||||
|
||||
s32 GetStringRightAlignXOffset(s32 fontId, const u8 *str, s32 totalWidth)
|
||||
{
|
||||
return GetStringWidthDifference(fontId, str, totalWidth, 0);
|
||||
}
|
||||
|
||||
s32 GetStringCenterAlignXOffsetWithLetterSpacing(s32 fontId, const u8 *str, s32 totalWidth, s32 letterSpacing)
|
||||
{
|
||||
return GetStringWidthDifference(fontId, str, totalWidth, letterSpacing) / 2;
|
||||
}
|
||||
|
||||
s32 GetStringWidthDifference(s32 fontId, const u8 *str, s32 totalWidth, s32 letterSpacing)
|
||||
{
|
||||
s32 stringWidth = GetStringWidth(fontId, str, letterSpacing);
|
||||
if (totalWidth > stringWidth)
|
||||
return totalWidth - stringWidth;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 GetMaxWidthInMenuTable(const u8 **str, s32 arg1)
|
||||
{
|
||||
s32 i, var;
|
||||
|
||||
for (var = 0, i = 0; i < arg1; i++)
|
||||
{
|
||||
s32 stringWidth = GetStringWidth(1, str[i * 2], 0);
|
||||
if (stringWidth > var)
|
||||
var = stringWidth;
|
||||
}
|
||||
|
||||
return convert_pixel_width_to_tile_width(var);
|
||||
}
|
||||
|
||||
s32 sub_81DB3D8(const u8 **str, u8* arg1, s32 arg2)
|
||||
{
|
||||
s32 i, var;
|
||||
|
||||
for (var = 0, i = 0; i < arg2; i++)
|
||||
{
|
||||
s32 stringWidth = GetStringWidth(1, str[arg1[i] * 2], 0);
|
||||
if (stringWidth > var)
|
||||
var = stringWidth;
|
||||
}
|
||||
|
||||
return convert_pixel_width_to_tile_width(var);
|
||||
}
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
|
||||
#include "global.h"
|
||||
#include "main.h"
|
||||
#include "rom4.h"
|
||||
#include "overworld.h"
|
||||
#include "rom6.h"
|
||||
#include "event_data.h"
|
||||
#include "script.h"
|
||||
|
||||
+577
@@ -0,0 +1,577 @@
|
||||
|
||||
// Includes
|
||||
#include "global.h"
|
||||
#include "main.h"
|
||||
#include "overworld.h"
|
||||
#include "task.h"
|
||||
#include "unknown_task.h"
|
||||
#include "palette.h"
|
||||
#include "menu.h"
|
||||
#include "menu_helpers.h"
|
||||
#include "text.h"
|
||||
#include "text_window.h"
|
||||
#include "string_util.h"
|
||||
#include "international_string_util.h"
|
||||
#include "strings.h"
|
||||
#include "gpu_regs.h"
|
||||
#include "bg.h"
|
||||
#include "pokemon_icon.h"
|
||||
#include "species.h"
|
||||
#include "malloc.h"
|
||||
#include "easy_chat.h"
|
||||
#include "mail_data.h"
|
||||
#include "mail.h"
|
||||
|
||||
// Static type declarations
|
||||
|
||||
struct UnkMailStruct
|
||||
{
|
||||
u32 numEasyChatWords:2;
|
||||
u32 xOffset:6;
|
||||
u32 lineHeight:8;
|
||||
};
|
||||
|
||||
struct MailLayout
|
||||
{
|
||||
u8 numSubStructs;
|
||||
u8 signatureYPos;
|
||||
u8 signatureWidth;
|
||||
u8 wordsXPos;
|
||||
u8 wordsYPos;
|
||||
const struct UnkMailStruct *var8;
|
||||
};
|
||||
|
||||
struct MailGraphics
|
||||
{
|
||||
const u16 *palette;
|
||||
const u8 *tiles;
|
||||
const u8 *tileMap;
|
||||
u16 var0C;
|
||||
u16 var0E;
|
||||
u16 color10;
|
||||
u16 color12;
|
||||
};
|
||||
|
||||
// Static RAM declarations
|
||||
|
||||
static EWRAM_DATA struct
|
||||
{
|
||||
/*0x0000*/ u8 strbuf[8][64];
|
||||
/*0x0200*/ u8 playerName[12];
|
||||
/*0x020C*/ MainCallback callback;
|
||||
/*0x0210*/ MainCallback callback2;
|
||||
/*0x0214*/ struct MailStruct *mail;
|
||||
/*0x0218*/ bool8 flag;
|
||||
/*0x0219*/ u8 signatureWidth;
|
||||
/*0x021a*/ u8 mailType;
|
||||
/*0x021b*/ u8 animsActive;
|
||||
/*0x021c*/ u8 monIconSprite;
|
||||
/*0x021d*/ u8 language;
|
||||
/*0x021e*/ bool8 playerIsSender;
|
||||
/*0x0220*/ void (*parserSingle)(u8 *dest, u16 word);
|
||||
/*0x0224*/ void (*parserMultiple)(u8 *dest, const u16 *src, u16 length1, u16 length2);
|
||||
/*0x0228*/ const struct MailLayout *layout;
|
||||
/*0x022c*/ u8 bg1TilemapBuffer[0x1000];
|
||||
/*0x122c*/ u8 bg2TilemapBuffer[0x1000];
|
||||
} *gUnknown_0203A134 = NULL;
|
||||
|
||||
// Static ROM declarations
|
||||
|
||||
void sub_81219F0(void);
|
||||
void sub_8121A1C(void);
|
||||
void sub_8121B1C(void);
|
||||
void sub_8121C50(void);
|
||||
void sub_8121C64(void);
|
||||
void sub_8121C98(void);
|
||||
void sub_8121CC0(void);
|
||||
void sub_8121D00(void);
|
||||
|
||||
// .rodata
|
||||
|
||||
const struct BgTemplate gUnknown_0859F290[] = {
|
||||
{
|
||||
.bg = 0,
|
||||
.charBaseIndex = 2,
|
||||
.mapBaseIndex = 31,
|
||||
.priority = 0
|
||||
}, {
|
||||
.bg = 1,
|
||||
.charBaseIndex = 0,
|
||||
.mapBaseIndex = 30,
|
||||
.priority = 1
|
||||
}, {
|
||||
.bg = 2,
|
||||
.charBaseIndex = 0,
|
||||
.mapBaseIndex = 29,
|
||||
.priority = 2
|
||||
}
|
||||
};
|
||||
|
||||
const struct WindowTemplate gUnknown_0859F29C[] = {
|
||||
{
|
||||
.priority = 0,
|
||||
.tilemapLeft = 2,
|
||||
.tilemapTop = 3,
|
||||
.width = 26,
|
||||
.height = 15,
|
||||
.paletteNum = 15,
|
||||
.baseBlock = 1
|
||||
},
|
||||
DUMMY_WIN_TEMPLATE
|
||||
};
|
||||
|
||||
const u8 gUnknown_0859F2AC[] = {
|
||||
0,
|
||||
10,
|
||||
11
|
||||
};
|
||||
|
||||
const u16 gUnknown_0859F2B0[][2] = {
|
||||
{ 0x6ACD, 0x51A5 },
|
||||
{ 0x45FC, 0x38D4 }
|
||||
};
|
||||
|
||||
extern const u16 gUnknown_08DBE818[];
|
||||
extern const u16 gUnknown_08DBE838[];
|
||||
extern const u16 gUnknown_08DBE858[];
|
||||
extern const u16 gUnknown_08DBE878[];
|
||||
extern const u16 gUnknown_08DBE898[];
|
||||
extern const u16 gUnknown_08DBE8B8[];
|
||||
extern const u16 gUnknown_08DBE8D8[];
|
||||
extern const u16 gUnknown_08DBE8F8[];
|
||||
extern const u16 gUnknown_08DBE918[];
|
||||
extern const u16 gUnknown_08DBE938[];
|
||||
extern const u16 gUnknown_08DBE958[];
|
||||
extern const u16 gUnknown_08DBE978[];
|
||||
extern const u8 gUnknown_08DBE998[];
|
||||
extern const u8 gUnknown_08DBFBA4[];
|
||||
extern const u8 gUnknown_08DBEB38[];
|
||||
extern const u8 gUnknown_08DBFC7C[];
|
||||
extern const u8 gUnknown_08DBEC74[];
|
||||
extern const u8 gUnknown_08DBFD5C[];
|
||||
extern const u8 gUnknown_08DBEE84[];
|
||||
extern const u8 gUnknown_08DBFE68[];
|
||||
extern const u8 gUnknown_08DBEF5C[];
|
||||
extern const u8 gUnknown_08DBFF44[];
|
||||
extern const u8 gUnknown_08DBF154[];
|
||||
extern const u8 gUnknown_08DC0034[];
|
||||
extern const u8 gUnknown_08DBF2D4[];
|
||||
extern const u8 gUnknown_08DC0114[];
|
||||
extern const u8 gUnknown_08DBF37C[];
|
||||
extern const u8 gUnknown_08DC01F4[];
|
||||
extern const u8 gUnknown_08DBF50C[];
|
||||
extern const u8 gUnknown_08DC0300[];
|
||||
extern const u8 gUnknown_08DBF64C[];
|
||||
extern const u8 gUnknown_08DC03F0[];
|
||||
extern const u8 gUnknown_08DBF7B4[];
|
||||
extern const u8 gUnknown_08DC04E8[];
|
||||
extern const u8 gUnknown_08DBF904[];
|
||||
extern const u8 gUnknown_08DC0600[];
|
||||
|
||||
const struct MailGraphics gUnknown_0859F2B8[] = {
|
||||
{
|
||||
gUnknown_08DBE818, gUnknown_08DBE998, gUnknown_08DBFBA4, 0x02c0, 0x0000, 0x294a, 0x6739
|
||||
}, {
|
||||
gUnknown_08DBE838, gUnknown_08DBEB38, gUnknown_08DBFC7C, 0x02e0, 0x0000, 0x7fff, 0x4631
|
||||
}, {
|
||||
gUnknown_08DBE858, gUnknown_08DBEC74, gUnknown_08DBFD5C, 0x0400, 0x0000, 0x294a, 0x6739
|
||||
}, {
|
||||
gUnknown_08DBE878, gUnknown_08DBEE84, gUnknown_08DBFE68, 0x01e0, 0x0000, 0x7fff, 0x4631
|
||||
}, {
|
||||
gUnknown_08DBE898, gUnknown_08DBEF5C, gUnknown_08DBFF44, 0x02e0, 0x0000, 0x7fff, 0x4631
|
||||
}, {
|
||||
gUnknown_08DBE8B8, gUnknown_08DBF154, gUnknown_08DC0034, 0x0300, 0x0000, 0x294a, 0x6739
|
||||
}, {
|
||||
gUnknown_08DBE8D8, gUnknown_08DBF2D4, gUnknown_08DC0114, 0x0140, 0x0000, 0x7fff, 0x4631
|
||||
}, {
|
||||
gUnknown_08DBE8F8, gUnknown_08DBF37C, gUnknown_08DC01F4, 0x0300, 0x0000, 0x7fff, 0x4631
|
||||
}, {
|
||||
gUnknown_08DBE918, gUnknown_08DBF50C, gUnknown_08DC0300, 0x0220, 0x0000, 0x294a, 0x6739
|
||||
}, {
|
||||
gUnknown_08DBE938, gUnknown_08DBF64C, gUnknown_08DC03F0, 0x0340, 0x0000, 0x294a, 0x6739
|
||||
}, {
|
||||
gUnknown_08DBE958, gUnknown_08DBF7B4, gUnknown_08DC04E8, 0x02a0, 0x0000, 0x294a, 0x6739
|
||||
}, {
|
||||
gUnknown_08DBE978, gUnknown_08DBF904, gUnknown_08DC0600, 0x0520, 0x0000, 0x294a, 0x6739
|
||||
}
|
||||
};
|
||||
|
||||
const struct UnkMailStruct Unknown_0859F3A8[] = {
|
||||
{ .numEasyChatWords = 3, .lineHeight = 16 },
|
||||
{ .numEasyChatWords = 3, .lineHeight = 16 },
|
||||
{ .numEasyChatWords = 3, .lineHeight = 16 }
|
||||
};
|
||||
|
||||
const struct MailLayout gUnknown_0859F3B4[] = {
|
||||
{ 0x03, 0x00, 0x00, 0x02, 0x04, Unknown_0859F3A8 },
|
||||
{ 0x03, 0x00, 0x00, 0x02, 0x04, Unknown_0859F3A8 },
|
||||
{ 0x03, 0x00, 0x00, 0x02, 0x04, Unknown_0859F3A8 },
|
||||
{ 0x03, 0x00, 0x00, 0x02, 0x04, Unknown_0859F3A8 },
|
||||
{ 0x03, 0x00, 0x00, 0x02, 0x04, Unknown_0859F3A8 },
|
||||
{ 0x03, 0x00, 0x00, 0x02, 0x04, Unknown_0859F3A8 },
|
||||
{ 0x03, 0x00, 0x00, 0x02, 0x04, Unknown_0859F3A8 },
|
||||
{ 0x03, 0x00, 0x00, 0x02, 0x04, Unknown_0859F3A8 },
|
||||
{ 0x03, 0x00, 0x00, 0x02, 0x04, Unknown_0859F3A8 },
|
||||
{ 0x03, 0x00, 0x00, 0x02, 0x04, Unknown_0859F3A8 },
|
||||
{ 0x03, 0x08, 0x00, 0x02, 0x04, Unknown_0859F3A8 },
|
||||
{ 0x03, 0x00, 0x00, 0x02, 0x00, Unknown_0859F3A8 }
|
||||
};
|
||||
|
||||
const struct UnkMailStruct Unknown_0859F444[] = {
|
||||
{ .numEasyChatWords = 2, .lineHeight = 16 },
|
||||
{ .numEasyChatWords = 2, .lineHeight = 16 },
|
||||
{ .numEasyChatWords = 2, .lineHeight = 16 },
|
||||
{ .numEasyChatWords = 2, .lineHeight = 16 },
|
||||
{ .numEasyChatWords = 1, .lineHeight = 16 }
|
||||
};
|
||||
|
||||
const struct MailLayout gUnknown_0859F458[] = {
|
||||
{ 0x05, 0x07, 0x58, 0x0b, 0x1e, Unknown_0859F444 },
|
||||
{ 0x05, 0x0a, 0x60, 0x09, 0x1e, Unknown_0859F444 },
|
||||
{ 0x05, 0x0c, 0x68, 0x05, 0x1e, Unknown_0859F444 },
|
||||
{ 0x05, 0x05, 0x60, 0x08, 0x1e, Unknown_0859F444 },
|
||||
{ 0x05, 0x0a, 0x60, 0x09, 0x1e, Unknown_0859F444 },
|
||||
{ 0x05, 0x09, 0x70, 0x05, 0x1e, Unknown_0859F444 },
|
||||
{ 0x05, 0x0c, 0x68, 0x09, 0x1e, Unknown_0859F444 },
|
||||
{ 0x05, 0x0d, 0x68, 0x0d, 0x1e, Unknown_0859F444 },
|
||||
{ 0x05, 0x09, 0x60, 0x09, 0x1e, Unknown_0859F444 },
|
||||
{ 0x05, 0x09, 0x60, 0x09, 0x1e, Unknown_0859F444 },
|
||||
{ 0x05, 0x11, 0x68, 0x0f, 0x1e, Unknown_0859F444 },
|
||||
{ 0x05, 0x09, 0x60, 0x05, 0x1e, Unknown_0859F444 }
|
||||
};
|
||||
|
||||
// What the heck are these meant to be? Call them u16 for now.
|
||||
|
||||
const u16 Unknown_0859F4E8[] = {
|
||||
0x00, 0x4000, 0x00, 0x00
|
||||
};
|
||||
|
||||
const u16 Unknown_0859F4F0[] = {
|
||||
0x00, 0x00, -1, 0x00
|
||||
};
|
||||
|
||||
const u16 Unknown_0859F4F8[] = {
|
||||
0x04, 0x00, -1, 0x00
|
||||
};
|
||||
|
||||
const u16 Unknown_0859F500[] = {
|
||||
0x00, 0x40, -1, 0x00
|
||||
};
|
||||
|
||||
const u16 *const gUnknown_0859F508[] = {
|
||||
Unknown_0859F4F0,
|
||||
Unknown_0859F4F8,
|
||||
Unknown_0859F500
|
||||
};
|
||||
|
||||
// .text
|
||||
|
||||
void sub_8121478(struct MailStruct *mail, MainCallback callback, bool8 flag) {
|
||||
u16 buffer[2];
|
||||
u16 species;
|
||||
|
||||
gUnknown_0203A134 = calloc(1, sizeof(*gUnknown_0203A134));
|
||||
gUnknown_0203A134->language = LANGUAGE_ENGLISH;
|
||||
gUnknown_0203A134->playerIsSender = TRUE;
|
||||
gUnknown_0203A134->parserSingle = CopyEasyChatWord;
|
||||
gUnknown_0203A134->parserMultiple = ConvertEasyChatWordsToString;
|
||||
if (mail->itemId >= ITEM_ORANGE_MAIL && mail->itemId <= ITEM_RETRO_MAIL) {
|
||||
gUnknown_0203A134->mailType = mail->itemId - ITEM_ORANGE_MAIL;
|
||||
}
|
||||
else
|
||||
{
|
||||
gUnknown_0203A134->mailType = 0;
|
||||
flag = FALSE;
|
||||
}
|
||||
switch (gUnknown_0203A134->playerIsSender)
|
||||
{
|
||||
case FALSE:
|
||||
default:
|
||||
gUnknown_0203A134->layout = &gUnknown_0859F3B4[gUnknown_0203A134->mailType];
|
||||
break;
|
||||
case TRUE:
|
||||
gUnknown_0203A134->layout = &gUnknown_0859F458[gUnknown_0203A134->mailType];
|
||||
break;
|
||||
}
|
||||
species = sub_80D45E8(mail->species, buffer);
|
||||
if (species >= SPECIES_BULBASAUR && species < NUM_SPECIES)
|
||||
{
|
||||
switch (gUnknown_0203A134->mailType)
|
||||
{
|
||||
default:
|
||||
gUnknown_0203A134->animsActive = 0;
|
||||
break;
|
||||
case ITEM_BEAD_MAIL - ITEM_ORANGE_MAIL:
|
||||
gUnknown_0203A134->animsActive = 1;
|
||||
break;
|
||||
case ITEM_DREAM_MAIL - ITEM_ORANGE_MAIL:
|
||||
gUnknown_0203A134->animsActive = 2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
gUnknown_0203A134->animsActive = 0;
|
||||
}
|
||||
gUnknown_0203A134->mail = mail;
|
||||
gUnknown_0203A134->callback = callback;
|
||||
gUnknown_0203A134->flag = flag;
|
||||
SetMainCallback2(sub_81219F0);
|
||||
}
|
||||
|
||||
bool8 sub_81215EC(void)
|
||||
{
|
||||
u16 icon;
|
||||
|
||||
switch (gMain.state)
|
||||
{
|
||||
case 0:
|
||||
SetVBlankCallback(NULL);
|
||||
remove_some_task();
|
||||
SetGpuReg(REG_OFFSET_DISPCNT, 0x0000);
|
||||
break;
|
||||
case 1:
|
||||
CpuFill16(0, (void *)OAM, OAM_SIZE);
|
||||
break;
|
||||
case 2:
|
||||
ResetPaletteFade();
|
||||
break;
|
||||
case 3:
|
||||
ResetTasks();
|
||||
break;
|
||||
case 4:
|
||||
ResetSpriteData();
|
||||
break;
|
||||
case 5:
|
||||
FreeAllSpritePalettes();
|
||||
reset_temp_tile_data_buffers();
|
||||
SetGpuReg(REG_OFFSET_BG0HOFS, 0x0000);
|
||||
SetGpuReg(REG_OFFSET_BG0VOFS, 0x0000);
|
||||
SetGpuReg(REG_OFFSET_BG1HOFS, 0x0000);
|
||||
SetGpuReg(REG_OFFSET_BG1VOFS, 0x0000);
|
||||
SetGpuReg(REG_OFFSET_BG2VOFS, 0x0000);
|
||||
SetGpuReg(REG_OFFSET_BG2HOFS, 0x0000);
|
||||
SetGpuReg(REG_OFFSET_BG3HOFS, 0x0000);
|
||||
SetGpuReg(REG_OFFSET_BG3VOFS, 0x0000);
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, 0x0000);
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, 0x0000);
|
||||
break;
|
||||
case 6:
|
||||
ResetBgsAndClearDma3BusyFlags(0);
|
||||
InitBgsFromTemplates(0, gUnknown_0859F290, 3);
|
||||
SetBgTilemapBuffer(1, gUnknown_0203A134->bg1TilemapBuffer);
|
||||
SetBgTilemapBuffer(2, gUnknown_0203A134->bg2TilemapBuffer);
|
||||
break;
|
||||
case 7:
|
||||
InitWindows(gUnknown_0859F29C);
|
||||
DeactivateAllTextPrinters();
|
||||
break;
|
||||
case 8:
|
||||
decompress_and_copy_tile_data_to_vram(1, gUnknown_0859F2B8[gUnknown_0203A134->mailType].tiles, 0, 0, 0);
|
||||
break;
|
||||
case 9:
|
||||
if (free_temp_tile_data_buffers_if_possible())
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
break;
|
||||
case 10:
|
||||
FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20);
|
||||
FillBgTilemapBufferRect_Palette0(2, 1, 0, 0, 30, 20);
|
||||
CopyToBgTilemapBuffer(1, gUnknown_0859F2B8[gUnknown_0203A134->mailType].tileMap, 0, 0);
|
||||
break;
|
||||
case 11:
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
CopyBgTilemapBufferToVram(1);
|
||||
CopyBgTilemapBufferToVram(2);
|
||||
break;
|
||||
case 12:
|
||||
LoadPalette(sub_8098C64(), 240, 32);
|
||||
gPlttBufferUnfaded[250] = gUnknown_0859F2B8[gUnknown_0203A134->mailType].color10;
|
||||
gPlttBufferFaded[250] = gUnknown_0859F2B8[gUnknown_0203A134->mailType].color10;
|
||||
gPlttBufferUnfaded[251] = gUnknown_0859F2B8[gUnknown_0203A134->mailType].color12;
|
||||
gPlttBufferFaded[251] = gUnknown_0859F2B8[gUnknown_0203A134->mailType].color12;
|
||||
LoadPalette(gUnknown_0859F2B8[gUnknown_0203A134->mailType].palette, 0, 32);
|
||||
gPlttBufferUnfaded[10] = gUnknown_0859F2B0[gSaveBlock2Ptr->playerGender][0];
|
||||
gPlttBufferFaded[10] = gUnknown_0859F2B0[gSaveBlock2Ptr->playerGender][0];
|
||||
gPlttBufferUnfaded[11] = gUnknown_0859F2B0[gSaveBlock2Ptr->playerGender][1];
|
||||
gPlttBufferFaded[11] = gUnknown_0859F2B0[gSaveBlock2Ptr->playerGender][1];
|
||||
break;
|
||||
case 13:
|
||||
if (gUnknown_0203A134->flag)
|
||||
{
|
||||
sub_8121A1C();
|
||||
}
|
||||
break;
|
||||
case 14:
|
||||
if (gUnknown_0203A134->flag)
|
||||
{
|
||||
sub_8121B1C();
|
||||
RunTextPrinters();
|
||||
}
|
||||
break;
|
||||
case 15:
|
||||
if (sub_8087598() == TRUE)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
break;
|
||||
case 16:
|
||||
SetVBlankCallback(sub_8121C50);
|
||||
gPaletteFade.bufferTransferDisabled = TRUE;
|
||||
break;
|
||||
case 17:
|
||||
icon = sub_80D2E84(gUnknown_0203A134->mail->species);
|
||||
switch (gUnknown_0203A134->animsActive)
|
||||
{
|
||||
case 1:
|
||||
sub_80D2F68(icon);
|
||||
gUnknown_0203A134->monIconSprite = sub_80D2D78(icon, SpriteCallbackDummy, 0x60, 0x80, 0, 0);
|
||||
break;
|
||||
case 2:
|
||||
sub_80D2F68(icon);
|
||||
gUnknown_0203A134->monIconSprite = sub_80D2D78(icon, SpriteCallbackDummy, 0x28, 0x80, 0, 0);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 18:
|
||||
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
|
||||
ShowBg(0);
|
||||
ShowBg(1);
|
||||
ShowBg(2);
|
||||
BeginNormalPaletteFade(-1, 0, 16, 0, 0);
|
||||
gPaletteFade.bufferTransferDisabled = FALSE;
|
||||
gUnknown_0203A134->callback2 = sub_8121C98;
|
||||
return TRUE;
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
gMain.state ++;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void sub_81219F0(void)
|
||||
{
|
||||
do
|
||||
{
|
||||
if (sub_81215EC() == TRUE)
|
||||
{
|
||||
SetMainCallback2(sub_8121C64);
|
||||
break;
|
||||
}
|
||||
} while (sub_81221AC() != TRUE);
|
||||
}
|
||||
|
||||
void sub_8121A1C(void)
|
||||
{
|
||||
u16 i;
|
||||
u8 total;
|
||||
u8 *ptr;
|
||||
|
||||
total = 0;
|
||||
for (i = 0; i < gUnknown_0203A134->layout->numSubStructs; i ++)
|
||||
{
|
||||
ConvertEasyChatWordsToString(gUnknown_0203A134->strbuf[i], &gUnknown_0203A134->mail->words[total], gUnknown_0203A134->layout->var8[i].numEasyChatWords, 1);
|
||||
total += gUnknown_0203A134->layout->var8[i].numEasyChatWords;
|
||||
}
|
||||
ptr = StringCopy(gUnknown_0203A134->playerName, gUnknown_0203A134->mail->playerName);
|
||||
if (!gUnknown_0203A134->playerIsSender)
|
||||
{
|
||||
StringCopy(ptr, gText_FromSpace);
|
||||
gUnknown_0203A134->signatureWidth = gUnknown_0203A134->layout->signatureWidth - (StringLength(gUnknown_0203A134->playerName) * 8 - 0x60);
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_81DB52C(gUnknown_0203A134->playerName);
|
||||
gUnknown_0203A134->signatureWidth = gUnknown_0203A134->layout->signatureWidth;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8121B1C(void)
|
||||
{
|
||||
u16 i;
|
||||
u8 strbuf[0x20];
|
||||
u8 y;
|
||||
u8 *bufptr;
|
||||
s32 box_x;
|
||||
s32 box_y;
|
||||
|
||||
y = 0;
|
||||
PutWindowTilemap(0);
|
||||
PutWindowTilemap(1);
|
||||
FillWindowPixelBuffer(0, 0);
|
||||
FillWindowPixelBuffer(1, 0);
|
||||
for (i = 0; i < gUnknown_0203A134->layout->numSubStructs; i ++)
|
||||
{
|
||||
if (gUnknown_0203A134->strbuf[i][0] == EOS || gUnknown_0203A134->strbuf[i][0] == CHAR_SPACE)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
box_print(0, 1, gUnknown_0203A134->layout->var8[i].xOffset + gUnknown_0203A134->layout->wordsYPos, y + gUnknown_0203A134->layout->wordsXPos, gUnknown_0859F2AC, 0, gUnknown_0203A134->strbuf[i]);
|
||||
y += gUnknown_0203A134->layout->var8[i].lineHeight;
|
||||
}
|
||||
bufptr = StringCopy(strbuf, gText_FromSpace);
|
||||
StringCopy(bufptr, gUnknown_0203A134->playerName);
|
||||
box_x = GetStringCenterAlignXOffset(1, strbuf, gUnknown_0203A134->signatureWidth) + 0x68;
|
||||
box_y = gUnknown_0203A134->layout->signatureYPos + 0x58;
|
||||
box_print(0, 1, box_x, box_y, gUnknown_0859F2AC, 0, strbuf);
|
||||
CopyWindowToVram(0, 3);
|
||||
CopyWindowToVram(1, 3);
|
||||
}
|
||||
|
||||
void sub_8121C50(void)
|
||||
{
|
||||
LoadOam();
|
||||
ProcessSpriteCopyRequests();
|
||||
TransferPlttBuffer();
|
||||
}
|
||||
|
||||
void sub_8121C64(void)
|
||||
{
|
||||
if (gUnknown_0203A134->animsActive != 0)
|
||||
{
|
||||
AnimateSprites();
|
||||
BuildOamBuffer();
|
||||
}
|
||||
gUnknown_0203A134->callback2();
|
||||
}
|
||||
|
||||
void sub_8121C98(void)
|
||||
{
|
||||
if (!UpdatePaletteFade())
|
||||
{
|
||||
gUnknown_0203A134->callback2 = sub_8121CC0;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8121CC0(void)
|
||||
{
|
||||
if (gMain.newKeys & (A_BUTTON | B_BUTTON))
|
||||
{
|
||||
BeginNormalPaletteFade(-1, 0, 0, 16, 0);
|
||||
gUnknown_0203A134->callback2 = sub_8121D00;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8121D00(void)
|
||||
{
|
||||
if (!UpdatePaletteFade())
|
||||
{
|
||||
SetMainCallback2(gUnknown_0203A134->callback);
|
||||
switch (gUnknown_0203A134->animsActive)
|
||||
{
|
||||
case 1:
|
||||
case 2:
|
||||
sub_80D2FF0(sub_80D2E84(gUnknown_0203A134->mail->species));
|
||||
sub_80D2EF8(&gSprites[gUnknown_0203A134->monIconSprite]);
|
||||
}
|
||||
memset(gUnknown_0203A134, 0, sizeof(*gUnknown_0203A134));
|
||||
ResetPaletteFade();
|
||||
UnsetBgTilemapBuffer(0);
|
||||
UnsetBgTilemapBuffer(1);
|
||||
ResetBgsAndClearDma3BusyFlags(0);
|
||||
FreeAllWindowBuffers();
|
||||
free(gUnknown_0203A134);
|
||||
gUnknown_0203A134 = NULL;
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -110,7 +110,7 @@ void AddMoney(u32* moneyPtr, u32 toAdd)
|
||||
SetMoney(moneyPtr, toSet);
|
||||
}
|
||||
|
||||
void SubtractMoney(u32* moneyPtr, u32 toSub)
|
||||
void RemoveMoney(u32* moneyPtr, u32 toSub)
|
||||
{
|
||||
u32 toSet = GetMoney(moneyPtr);
|
||||
|
||||
@@ -130,7 +130,7 @@ bool8 IsEnoughForCostInVar0x8005(void)
|
||||
|
||||
void SubtractMoneyFromVar0x8005(void)
|
||||
{
|
||||
SubtractMoney(&gSaveBlock1Ptr->money, gSpecialVar_0x8005);
|
||||
RemoveMoney(&gSaveBlock1Ptr->money, gSpecialVar_0x8005);
|
||||
}
|
||||
|
||||
void PrintMoneyAmountInMoneyBox(u8 windowId, int amount, u8 speed)
|
||||
|
||||
+2
-2
@@ -29,7 +29,7 @@ extern u8 gUnknown_030060B0;
|
||||
// TODO: replace those declarations with file headers
|
||||
extern u16 GetGeneratedTrainerIdLower(void);
|
||||
extern void ClearContestWinnerPicsInContestHall(void);
|
||||
extern void warp1_set(s8 mapBank, s8 mapNo, s8 warpNo, s8 xPos, s8 yPos);
|
||||
extern void Overworld_SetWarpDestination(s8 mapBank, s8 mapNo, s8 warpNo, s8 xPos, s8 yPos);
|
||||
extern void warp_in(void);
|
||||
extern void sub_80BB358(void);
|
||||
extern void ResetBagScrollPositions(void);
|
||||
@@ -131,7 +131,7 @@ void sub_8084400(void)
|
||||
|
||||
void WarpToTruck(void)
|
||||
{
|
||||
warp1_set(25, 40, -1, -1, -1); // inside of truck
|
||||
Overworld_SetWarpDestination(25, 40, -1, -1, -1); // inside of truck
|
||||
warp_in();
|
||||
}
|
||||
|
||||
|
||||
+3
-3
@@ -53,13 +53,13 @@ static void UpdateBlendRegisters(void);
|
||||
static bool8 IsSoftwarePaletteFadeFinishing(void);
|
||||
static void sub_80A2D54(u8 taskId);
|
||||
|
||||
EWRAM_DATA u16 gPlttBufferUnfaded[0x200] = {0};
|
||||
EWRAM_DATA u16 gPlttBufferFaded[0x200] = {0};
|
||||
EWRAM_DATA u16 gPlttBufferUnfaded[PLTT_BUFFER_SIZE] = {0};
|
||||
EWRAM_DATA u16 gPlttBufferFaded[PLTT_BUFFER_SIZE] = {0};
|
||||
EWRAM_DATA struct PaletteStruct sPaletteStructs[0x10] = {0};
|
||||
EWRAM_DATA struct PaletteFadeControl gPaletteFade = {0};
|
||||
static EWRAM_DATA u32 gFiller_2037FE0 = 0;
|
||||
static EWRAM_DATA u32 sPlttBufferTransferPending = 0;
|
||||
EWRAM_DATA u8 gPaletteDecompressionBuffer[0x400] = {0};
|
||||
EWRAM_DATA u8 gPaletteDecompressionBuffer[PLTT_DECOMP_BUFFER_SIZE] = {0};
|
||||
|
||||
static const struct PaletteStructTemplate gDummyPaletteStructTemplate = {
|
||||
.uid = 0xFFFF,
|
||||
|
||||
+1
-1
@@ -1089,7 +1089,7 @@ u8 SendMonToPC(struct Pokemon* mon)
|
||||
gSpecialVar_0x8012 = boxNo;
|
||||
gSpecialVar_0x8013 = boxPos;
|
||||
if (get_unknown_box_id() != boxNo)
|
||||
FlagReset(SYS_STORAGE_UNKNOWN_FLAG);
|
||||
FlagClear(SYS_STORAGE_UNKNOWN_FLAG);
|
||||
VarSet(VAR_STORAGE_UNKNOWN, boxNo);
|
||||
return MON_GIVEN_TO_PC;
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#include "load_save.h"
|
||||
#include "save.h"
|
||||
#include "new_game.h"
|
||||
#include "rom4.h"
|
||||
#include "overworld.h"
|
||||
#include "malloc.h"
|
||||
|
||||
void sub_81700F8(void)
|
||||
|
||||
@@ -336,9 +336,9 @@ static void CreateHealthboxSprite(u8 bank)
|
||||
UpdateHealthboxAttribute(gHealthBoxesIds[bank], &gPlayerParty[gBattlePartyID[bank]], HEALTHBOX_ALL);
|
||||
|
||||
if (GetBankIdentity(bank) == IDENTITY_OPPONENT_MON2 || GetBankIdentity(bank) == IDENTITY_PLAYER_MON2)
|
||||
nullsub_30(gHealthBoxesIds[bank], TRUE);
|
||||
DummyBattleInterfaceFunc(gHealthBoxesIds[bank], TRUE);
|
||||
else
|
||||
nullsub_30(gHealthBoxesIds[bank], FALSE);
|
||||
DummyBattleInterfaceFunc(gHealthBoxesIds[bank], FALSE);
|
||||
|
||||
if (GetBankSide(bank) != SIDE_PLAYER)
|
||||
{
|
||||
|
||||
+2
-2
@@ -60,7 +60,7 @@ void SetSafariZoneFlag(void)
|
||||
|
||||
void ResetSafariZoneFlag(void)
|
||||
{
|
||||
FlagReset(SYS_SAFARI_MODE);
|
||||
FlagClear(SYS_SAFARI_MODE);
|
||||
}
|
||||
|
||||
void EnterSafariMode(void)
|
||||
@@ -139,7 +139,7 @@ static void ClearAllPokeblockFeeders(void)
|
||||
memset(sPokeblockFeeders, 0, sizeof(sPokeblockFeeders));
|
||||
}
|
||||
|
||||
static void GetPokeblockFeederInFront(void)
|
||||
void GetPokeblockFeederInFront(void)
|
||||
{
|
||||
s16 x, y;
|
||||
u16 i;
|
||||
|
||||
+2444
-7
File diff suppressed because it is too large
Load Diff
+2
-2
@@ -134,12 +134,12 @@ const u8 *ScriptPop(struct ScriptContext *ctx)
|
||||
return ctx->stack[ctx->stackDepth];
|
||||
}
|
||||
|
||||
void ScriptJump(struct ScriptContext *ctx, u8 *ptr)
|
||||
void ScriptJump(struct ScriptContext *ctx, const u8 *ptr)
|
||||
{
|
||||
ctx->scriptPtr = ptr;
|
||||
}
|
||||
|
||||
void ScriptCall(struct ScriptContext *ctx, u8 *ptr)
|
||||
void ScriptCall(struct ScriptContext *ctx, const u8 *ptr)
|
||||
{
|
||||
ScriptPush(ctx, ctx->scriptPtr);
|
||||
ctx->scriptPtr = ptr;
|
||||
|
||||
+1
-1
@@ -594,7 +594,7 @@ u8 CreateSpriteAt(u8 index, const struct SpriteTemplate *template, s16 x, s16 y,
|
||||
return index;
|
||||
}
|
||||
|
||||
u8 CreateSpriteAndAnimate(struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority)
|
||||
u8 CreateSpriteAndAnimate(const struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority)
|
||||
{
|
||||
u8 i;
|
||||
|
||||
|
||||
+1
-1
@@ -145,7 +145,7 @@ void DeactivateAllTextPrinters (void)
|
||||
gTextPrinters[printer].sub_union.sub.active = 0;
|
||||
}
|
||||
|
||||
u16 PrintTextOnWindow(u8 windowId, u8 fontId, u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextSubPrinter *, u16))
|
||||
u16 PrintTextOnWindow(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextSubPrinter *, u16))
|
||||
{
|
||||
struct TextSubPrinter subPrinter;
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
// Includes
|
||||
#include "global.h"
|
||||
#include "rtc.h"
|
||||
#include "rom4.h"
|
||||
#include "overworld.h"
|
||||
#include "map_constants.h"
|
||||
#include "rng.h"
|
||||
#include "event_data.h"
|
||||
@@ -838,7 +838,7 @@ void UpdateTVScreensOnMap(int width, int height)
|
||||
}
|
||||
else if (FlagGet(SYS_TV_START) && (FindAnyTVShowOnTheAir() != 0xff || FindAnyTVNewsOnTheAir() != 0xff || IsTVShowInSearchOfTrainersAiring()))
|
||||
{
|
||||
FlagReset(SYS_TV_WATCH);
|
||||
FlagClear(SYS_TV_WATCH);
|
||||
SetTVMetatilesOnMap(width, height, 0x3);
|
||||
}
|
||||
break;
|
||||
@@ -1263,7 +1263,7 @@ void InterviewAfter_ContestLiveUpdates(void)
|
||||
show2->contestLiveUpdates.kind = TVSHOW_CONTEST_LIVE_UPDATES;
|
||||
show2->contestLiveUpdates.active = TRUE;
|
||||
StringCopy(show2->contestLiveUpdates.playerName, gSaveBlock2Ptr->playerName);
|
||||
show2->contestLiveUpdates.category = gUnknown_02039F2C;
|
||||
show2->contestLiveUpdates.category = gScriptContestCategory;
|
||||
show2->contestLiveUpdates.species = GetMonData(&gPlayerParty[gUnknown_02039F24], MON_DATA_SPECIES, NULL);
|
||||
show2->contestLiveUpdates.winningSpecies = show->contestLiveUpdates.winningSpecies;
|
||||
show2->contestLiveUpdates.appealFlags2 = show->contestLiveUpdates.appealFlags2;
|
||||
@@ -1527,7 +1527,7 @@ void BravoTrainerPokemonProfile_BeforeInterview2(u8 a0)
|
||||
if (sCurTVShowSlot != -1)
|
||||
{
|
||||
show->bravoTrainer.contestResult = a0;
|
||||
show->bravoTrainer.contestCategory = gUnknown_02039F2C;
|
||||
show->bravoTrainer.contestCategory = gScriptContestCategory;
|
||||
show->bravoTrainer.contestRank = gUnknown_02039F2E;
|
||||
show->bravoTrainer.species = GetMonData(&gPlayerParty[gUnknown_02039F24], MON_DATA_SPECIES, NULL);
|
||||
GetMonData(&gPlayerParty[gUnknown_02039F24], MON_DATA_NICKNAME, show->bravoTrainer.pokemonNickname);
|
||||
@@ -1675,7 +1675,7 @@ void InterviewAfter_FanClubLetter(void)
|
||||
show->fanclubLetter.kind = TVSHOW_FAN_CLUB_LETTER;
|
||||
show->fanclubLetter.active = TRUE;
|
||||
StringCopy(show->fanclubLetter.playerName, gSaveBlock2Ptr->playerName);
|
||||
show->fanclubLetter.species = GetMonData(&gPlayerParty[GetIdxOfFirstPartyMemberThatIsNotAnEgg()], MON_DATA_SPECIES, NULL);
|
||||
show->fanclubLetter.species = GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_SPECIES, NULL);
|
||||
tv_store_id_2x(show);
|
||||
show->fanclubLetter.language = gGameLanguage;
|
||||
}
|
||||
@@ -1700,21 +1700,21 @@ void InterviewAfter_PkmnFanClubOpinions(void)
|
||||
show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
|
||||
show->fanclubOpinions.kind = TVSHOW_PKMN_FAN_CLUB_OPINIONS;
|
||||
show->fanclubOpinions.active = TRUE;
|
||||
show->fanclubOpinions.friendshipHighNybble = GetMonData(&gPlayerParty[GetIdxOfFirstPartyMemberThatIsNotAnEgg()], MON_DATA_FRIENDSHIP, NULL) >> 4;
|
||||
show->fanclubOpinions.friendshipHighNybble = GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_FRIENDSHIP, NULL) >> 4;
|
||||
show->fanclubOpinions.questionAsked = gSpecialVar_0x8007;
|
||||
StringCopy(show->fanclubOpinions.playerName, gSaveBlock2Ptr->playerName);
|
||||
GetMonData(&gPlayerParty[GetIdxOfFirstPartyMemberThatIsNotAnEgg()], MON_DATA_NICKNAME, show->fanclubOpinions.nickname);
|
||||
GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_NICKNAME, show->fanclubOpinions.nickname);
|
||||
StripExtCtrlCodes(show->fanclubOpinions.nickname);
|
||||
show->fanclubOpinions.species = GetMonData(&gPlayerParty[GetIdxOfFirstPartyMemberThatIsNotAnEgg()], MON_DATA_SPECIES, NULL);
|
||||
show->fanclubOpinions.species = GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_SPECIES, NULL);
|
||||
tv_store_id_2x(show);
|
||||
show->fanclubOpinions.language = gGameLanguage;
|
||||
if (gGameLanguage == LANGUAGE_JAPANESE || GetMonData(&gPlayerParty[GetIdxOfFirstPartyMemberThatIsNotAnEgg()], MON_DATA_LANGUAGE) == LANGUAGE_JAPANESE)
|
||||
if (gGameLanguage == LANGUAGE_JAPANESE || GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_LANGUAGE) == LANGUAGE_JAPANESE)
|
||||
{
|
||||
show->fanclubOpinions.pokemonNameLanguage = LANGUAGE_JAPANESE;
|
||||
}
|
||||
else
|
||||
{
|
||||
show->fanclubOpinions.pokemonNameLanguage = GetMonData(&gPlayerParty[GetIdxOfFirstPartyMemberThatIsNotAnEgg()], MON_DATA_LANGUAGE);
|
||||
show->fanclubOpinions.pokemonNameLanguage = GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_LANGUAGE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3073,7 +3073,7 @@ void TV_PrintIntToStringVar(u8 varIdx, int value)
|
||||
ConvertIntToDecimalStringN(gTVStringVarPtrs[varIdx], value, STR_CONV_MODE_LEFT_ALIGN, nDigits);
|
||||
}
|
||||
|
||||
int sub_80EF370(int value)
|
||||
size_t sub_80EF370(int value)
|
||||
{
|
||||
if (value / 10 == 0)
|
||||
{
|
||||
@@ -3246,7 +3246,7 @@ void InterviewBefore_FanClubLetter(void)
|
||||
FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_FAN_CLUB_LETTER);
|
||||
if (!gScriptResult)
|
||||
{
|
||||
StringCopy(gStringVar1, gSpeciesNames[GetMonData(&gPlayerParty[GetIdxOfFirstPartyMemberThatIsNotAnEgg()], MON_DATA_SPECIES, NULL)]);
|
||||
StringCopy(gStringVar1, gSpeciesNames[GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_SPECIES, NULL)]);
|
||||
InitializeEasyChatWordArray(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].fanclubLetter.words, 6);
|
||||
}
|
||||
}
|
||||
@@ -3265,8 +3265,8 @@ void InterviewBefore_PkmnFanClubOpinions(void)
|
||||
FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_PKMN_FAN_CLUB_OPINIONS);
|
||||
if (!gScriptResult)
|
||||
{
|
||||
StringCopy(gStringVar1, gSpeciesNames[GetMonData(&gPlayerParty[GetIdxOfFirstPartyMemberThatIsNotAnEgg()], MON_DATA_SPECIES, NULL)]);
|
||||
GetMonData(&gPlayerParty[GetIdxOfFirstPartyMemberThatIsNotAnEgg()], MON_DATA_NICKNAME, gStringVar2);
|
||||
StringCopy(gStringVar1, gSpeciesNames[GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_SPECIES, NULL)]);
|
||||
GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_NICKNAME, gStringVar2);
|
||||
StringGetEnd10(gStringVar2);
|
||||
InitializeEasyChatWordArray(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].fanclubOpinions.words, 2);
|
||||
}
|
||||
@@ -3336,7 +3336,7 @@ bool8 sub_80EF88C(u8 monIdx)
|
||||
|
||||
bool8 sub_80EF8F8(void)
|
||||
{
|
||||
return sub_80EF88C(GetIdxOfFirstPartyMemberThatIsNotAnEgg());
|
||||
return sub_80EF88C(GetLeadMonIndex());
|
||||
}
|
||||
|
||||
void DeleteTVShowInArrayByIdx(TVShow *shows, u8 idx)
|
||||
|
||||
@@ -0,0 +1,257 @@
|
||||
#include "global.h"
|
||||
#include "walda_phrase.h"
|
||||
#include "string_util.h"
|
||||
#include "event_data.h"
|
||||
#include "naming_screen.h"
|
||||
#include "main.h"
|
||||
#include "text.h"
|
||||
#include "new_game.h"
|
||||
|
||||
extern void (*gFieldCallback)(void);
|
||||
|
||||
extern const u8 gText_Peekaboo[];
|
||||
|
||||
extern u8 *GetWaldaPhrasePtr(void);
|
||||
extern bool32 IsWaldaPhraseEmpty(void);
|
||||
extern void sub_80AF168(void);
|
||||
extern void c2_exit_to_overworld_2_switch(void);
|
||||
extern void SetWaldaPhrase(const u8 *src);
|
||||
extern void SetWaldaWallpaperPatternId(u8 patternId);
|
||||
extern void SetWaldaWallpaperIconId(u8 iconId);
|
||||
extern void SetWaldaWallpaperColors(u16 backgroundColor, u16 foregroundColor);
|
||||
extern void SetWaldaWallpaperLockedOrUnlocked(bool32 unlocked);
|
||||
|
||||
// this file's functions
|
||||
static void CB2_HandleGivenWaldaPhrase(void);
|
||||
static u32 GetWaldaPhraseInputCase(u8 *inputPtr);
|
||||
static bool32 TryCalculateWallpaper(u16* backgroundClr, u16 *foregroundClr, u8 *iconId, u8 *patternId, u16 trainerId, u8 *phrase);
|
||||
static void sub_81D9D5C(u8 *array, u8 *letterTableIds, u32 arg2, u32 arg3, u32 loopCount);
|
||||
static u32 sub_81D9DAC(u8 *array, u32 arg1, u32 loopCount);
|
||||
static void sub_81D9C90(u8 *array, s32 arg1, s32 arg2);
|
||||
static void sub_81D9CDC(u8 *array, u32 loopCount, u8 arg2);
|
||||
|
||||
// only consonants are allowed, no vowels, some lowercase letters are missing
|
||||
static const u8 sWaldaLettersTable[] =
|
||||
{
|
||||
CHAR_B, CHAR_C, CHAR_D, CHAR_F, CHAR_G, CHAR_H, CHAR_J, CHAR_K, CHAR_L, CHAR_M, CHAR_N, CHAR_P, CHAR_Q, CHAR_R, CHAR_S, CHAR_T, CHAR_V, CHAR_W, CHAR_Z,
|
||||
CHAR_b, CHAR_c, CHAR_d, CHAR_f, CHAR_g, CHAR_h, CHAR_j, CHAR_k, CHAR_m, CHAR_n, CHAR_p, CHAR_q, CHAR_s
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
PHRASE_GIVEN_NEW,
|
||||
PHRASE_NO_CHANGE,
|
||||
PHRASE_FIRST_ATTEMPT
|
||||
};
|
||||
|
||||
u16 TryBufferWaldaPhrase(void)
|
||||
{
|
||||
if (IsWaldaPhraseEmpty())
|
||||
return FALSE;
|
||||
|
||||
StringCopy(gStringVar1, GetWaldaPhrasePtr());
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void DoWaldaNamingScreen(void)
|
||||
{
|
||||
StringCopy(gStringVar2, GetWaldaPhrasePtr());
|
||||
DoNamingScreen(NAMING_SCREEN_WALDA, gStringVar2, 0, 0, 0, CB2_HandleGivenWaldaPhrase);
|
||||
}
|
||||
|
||||
static void CB2_HandleGivenWaldaPhrase(void)
|
||||
{
|
||||
gSpecialVar_0x8004 = GetWaldaPhraseInputCase(gStringVar2);
|
||||
|
||||
switch (gSpecialVar_0x8004)
|
||||
{
|
||||
case PHRASE_FIRST_ATTEMPT:
|
||||
if (IsWaldaPhraseEmpty())
|
||||
SetWaldaPhrase(gText_Peekaboo);
|
||||
else
|
||||
gSpecialVar_0x8004 = PHRASE_NO_CHANGE;
|
||||
break;
|
||||
case PHRASE_GIVEN_NEW:
|
||||
SetWaldaPhrase(gStringVar2);
|
||||
break;
|
||||
case PHRASE_NO_CHANGE:
|
||||
break;
|
||||
}
|
||||
|
||||
StringCopy(gStringVar1, GetWaldaPhrasePtr());
|
||||
gFieldCallback = sub_80AF168;
|
||||
SetMainCallback2(c2_exit_to_overworld_2_switch);
|
||||
}
|
||||
|
||||
static u32 GetWaldaPhraseInputCase(u8 *inputPtr)
|
||||
{
|
||||
if (inputPtr[0] == EOS)
|
||||
return PHRASE_FIRST_ATTEMPT;
|
||||
if (StringCompare(inputPtr, GetWaldaPhrasePtr()) == 0)
|
||||
return PHRASE_NO_CHANGE;
|
||||
|
||||
return PHRASE_GIVEN_NEW;
|
||||
}
|
||||
|
||||
u16 TryGetWallpaperWithWaldaPhrase(void)
|
||||
{
|
||||
u16 backgroundClr, foregroundClr;
|
||||
u8 patternId, iconId;
|
||||
u16 trainerId = ReadUnalignedWord(gSaveBlock2Ptr->playerTrainerId);
|
||||
gScriptResult = TryCalculateWallpaper(&backgroundClr, &foregroundClr, &iconId, &patternId, trainerId, GetWaldaPhrasePtr());
|
||||
|
||||
if (gScriptResult)
|
||||
{
|
||||
SetWaldaWallpaperPatternId(patternId);
|
||||
SetWaldaWallpaperIconId(iconId);
|
||||
SetWaldaWallpaperColors(backgroundClr, foregroundClr);
|
||||
}
|
||||
|
||||
SetWaldaWallpaperLockedOrUnlocked(gScriptResult);
|
||||
return (bool8)(gScriptResult);
|
||||
}
|
||||
|
||||
static u8 GetLetterTableId(u8 letter)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(sWaldaLettersTable); i++)
|
||||
{
|
||||
if (sWaldaLettersTable[i] == letter)
|
||||
return i;
|
||||
}
|
||||
|
||||
return ARRAY_COUNT(sWaldaLettersTable);
|
||||
}
|
||||
|
||||
static bool32 TryCalculateWallpaper(u16* backgroundClr, u16 *foregroundClr, u8 *iconId, u8 *patternId, u16 trainerId, u8 *phrase)
|
||||
{
|
||||
s32 i;
|
||||
ALIGNED(2) u8 array[12];
|
||||
u8 charsByTableId[16];
|
||||
u16 *ptr;
|
||||
|
||||
if (StringLength(phrase) != 15)
|
||||
return FALSE;
|
||||
|
||||
for (i = 0; i < 15; i++)
|
||||
{
|
||||
charsByTableId[i] = GetLetterTableId(phrase[i]);
|
||||
if (charsByTableId[i] == ARRAY_COUNT(sWaldaLettersTable))
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
for (i = 0; i < 14; i++)
|
||||
{
|
||||
sub_81D9D5C(array, charsByTableId, (5 * i), 3 + (8 * i), 5);
|
||||
}
|
||||
|
||||
sub_81D9D5C(array, charsByTableId, 70, 115, 2);
|
||||
|
||||
if (sub_81D9DAC(array, 0, 3) != sub_81D9DAC(charsByTableId, 117, 3))
|
||||
return FALSE;
|
||||
|
||||
sub_81D9C90(array, 9, 21);
|
||||
sub_81D9C90(array, 8, array[8] & 0xF);
|
||||
sub_81D9CDC(array, 8, array[8] >> 4);
|
||||
|
||||
if (array[6] != (array[0] ^ array[2] ^ array[4] ^ (trainerId >> 8)))
|
||||
return FALSE;
|
||||
|
||||
if (array[7] != (array[1] ^ array[3] ^ array[5] ^ (trainerId & 0xFF)))
|
||||
return FALSE;
|
||||
|
||||
ptr = (u16*)(&array[0]);
|
||||
*backgroundClr = *ptr;
|
||||
|
||||
ptr = (u16*)(&array[2]);
|
||||
*foregroundClr = *ptr;
|
||||
|
||||
*iconId = array[4];
|
||||
*patternId = array[5];
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void sub_81D9C90(u8 *array, s32 arg1, s32 arg2)
|
||||
{
|
||||
s32 i, j;
|
||||
u8 var1, var2;
|
||||
|
||||
for (i = arg2 - 1; i != -1; i--)
|
||||
{
|
||||
var1 = (array[0] & 0x80) >> 7;
|
||||
|
||||
var1++; var1--; // needed to match
|
||||
|
||||
for (j = arg1 - 1; j >= 0; j--)
|
||||
{
|
||||
var2 = array[j] & 0x80;
|
||||
array[j] <<= 1;
|
||||
array[j] |= var1;
|
||||
var1 = var2 >> 7;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_81D9CDC(u8 *array, u32 loopCount, u8 arg2)
|
||||
{
|
||||
u32 i;
|
||||
|
||||
arg2 |= (arg2 << 4);
|
||||
|
||||
for (i = 0; i < loopCount; i++)
|
||||
{
|
||||
array[i] ^= arg2;
|
||||
}
|
||||
}
|
||||
|
||||
static bool8 sub_81D9D0C(u8 *array, u32 arg1)
|
||||
{
|
||||
u32 arrayId = arg1 >> 3;
|
||||
u32 bits = 0x80 >> (7 & arg1);
|
||||
|
||||
return ((array[arrayId] & bits) != 0);
|
||||
}
|
||||
|
||||
static void sub_81D9D28(u8 *array, u32 arg1)
|
||||
{
|
||||
u32 arrayId = arg1 >> 3;
|
||||
u8 bits = 0x80 >> (7 & arg1);
|
||||
|
||||
array[arrayId] |= bits;
|
||||
}
|
||||
|
||||
static void sub_81D9D40(u8 *array, u32 arg1)
|
||||
{
|
||||
u32 arrayId = arg1 >> 3;
|
||||
u8 bits = ~(0x80 >> (7 & arg1));
|
||||
|
||||
array[arrayId] &= bits;
|
||||
}
|
||||
|
||||
static void sub_81D9D5C(u8 *array, u8 *letterTableIds, u32 arg2, u32 arg3, u32 loopCount)
|
||||
{
|
||||
u32 i;
|
||||
|
||||
for (i = 0; i < loopCount; i++)
|
||||
{
|
||||
if (sub_81D9D0C(letterTableIds, arg3 + i))
|
||||
sub_81D9D28(array, arg2 + i);
|
||||
else
|
||||
sub_81D9D40(array, arg2 + i);
|
||||
}
|
||||
}
|
||||
|
||||
static u32 sub_81D9DAC(u8 *array, u32 arg1, u32 loopCount)
|
||||
{
|
||||
u32 ret, i;
|
||||
|
||||
for (ret = 0, i = 0; i < loopCount; i++)
|
||||
{
|
||||
ret <<= 1;
|
||||
ret |= sub_81D9D0C(array, arg1 + i);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
Reference in New Issue
Block a user