battle 4 is all done

This commit is contained in:
DizzyEggg 2017-09-28 16:51:24 +02:00
parent 14fcc9ec20
commit 7273b8f262
4 changed files with 74 additions and 79 deletions

View File

@ -1,30 +0,0 @@
@ the second big chunk of data
.include "asm/macros.inc"
.include "constants/constants.inc"
.section .rodata
gUnknown_0831C494:: @ 831C494
.byte 0x3d, 0x44, 0x3d, 0x44, 0x14, 0x2d, 0x54, 0x5c
.byte 0x46, 0x55, 0x20, 0x5c, 0x26, 0x45, 0x46, 0x55
.byte 0x14, 0x5a, 0x46, 0x5c, 0x1e, 0x32, 0x20, 0x5a
.byte 0x38, 0x4e, 0x38, 0x4e, 0x19, 0x28, 0x4b, 0x5a
.byte 0x45, 0x4b, 0x1c, 0x53, 0x23, 0x2d, 0x1d, 0x23
.byte 0x3e, 0x48, 0x1e, 0x32, 0x3a, 0x5f, 0x58, 0x5e
.byte 0x22, 0x2d, 0x1d, 0x28, 0x23, 0x28, 0x23, 0x5f
.byte 0x38, 0x4e, 0x38, 0x4e, 0x23, 0x50, 0x22, 0x5e
.byte 0x2c, 0x5e, 0x22, 0x28, 0x38, 0x4e, 0x38, 0x4e
.byte 0x1e, 0x58, 0x1e, 0x58, 0x1e, 0x2b, 0x1b, 0x21
.byte 0x28, 0x5a, 0x19, 0x57, 0x12, 0x58, 0x5a, 0x5f
.byte 0x58, 0x5e, 0x16, 0x2a, 0x2a, 0x5c, 0x2a, 0x2f
.byte 0x38, 0x4e, 0x38, 0x4e
.align 2
gUnknown_0831C4F8:: @ 831C4F8
.byte 0x03, 0x00, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00
.byte 0x01, 0x02, 0x02, 0x00, 0x03, 0x01, 0x03, 0x01
.byte 0x02, 0x03, 0x03, 0x02, 0x01, 0x00, 0x02, 0x02
.byte 0x03, 0x00, 0x00, 0x00

View File

@ -910,6 +910,8 @@ void BufferMoveToLearnIntoBattleTextBuff2(void);
void sub_8056A3C(u8 xStart, u8 yStart, u8 xEnd, u8 yEnd, u8 flags);
bool8 UproarWakeUpCheck(u8 bank);
extern const u8 gUnknown_0831C494[];
// battle_5
void AdjustFriendshipOnBattleFaint(u8 bank);
void sub_80571DC(u8 bank, u8 arg1);

View File

@ -330,7 +330,6 @@ SECTIONS {
src/rtc.o(.rodata);
data/data2b.o(.rodata);
src/battle_4.o(.rodata);
data/battle_4.o(.rodata);
data/battle_controller_player.o(.rodata);
data/data2b_2.o(.rodata);
data/battle_controller_opponent.o(.rodata);

View File

@ -773,7 +773,7 @@ struct StatFractions
u8 divisor;
};
const struct StatFractions gAccuracyStageRatios[] =
static const struct StatFractions sAccuracyStageRatios[] =
{
{ 33, 100}, // -6
{ 36, 100}, // -5
@ -791,9 +791,9 @@ const struct StatFractions gAccuracyStageRatios[] =
};
// The chance is 1/N for each stage.
const u16 gCriticalHitChance[] = {16, 8, 4, 3, 2};
static const u16 sCriticalHitChance[] = {16, 8, 4, 3, 2};
const u32 gStatusFlagsForMoveEffects[] =
static const u32 sStatusFlagsForMoveEffects[] =
{
0x00000000,
STATUS_SLEEP,
@ -857,7 +857,7 @@ const u32 gStatusFlagsForMoveEffects[] =
0x00000000
};
const u8* const gMoveEffectBS_Ptrs[] =
static const u8* const sMoveEffectBS_Ptrs[] =
{
BattleScript_MoveEffectSleep, // 0
BattleScript_MoveEffectSleep, // MOVE_EFFECT_SLEEP
@ -902,8 +902,8 @@ const u8* const gMoveEffectBS_Ptrs[] =
static const struct WindowTemplate sUnusedWinTemplate = {0, 1, 3, 7, 0xF, 0x1F, 0x3F};
const u16 gUnknown_0831C2C8[] = INCBIN_U16("graphics/battle_interface/unk_battlebox.gbapal");
const u8 gUnknown_0831C2E8[] = INCBIN_U8("graphics/battle_interface/unk_battlebox.4bpp.lz");
static const u16 sUnknown_0831C2C8[] = INCBIN_U16("graphics/battle_interface/unk_battlebox.gbapal");
static const u8 sUnknown_0831C2E8[] = INCBIN_U8("graphics/battle_interface/unk_battlebox.4bpp.lz");
// unused
static const u8 sRubyLevelUpStatBoxStats[] =
@ -914,7 +914,7 @@ static const u8 sRubyLevelUpStatBoxStats[] =
#define MON_ICON_LVLUP_BOX_TAG 0xD75A
const struct OamData gUnknown_0831C3B8 =
static const struct OamData sOamData_MonIconOnLvlUpBox =
{
.y = 0,
.affineMode = 0,
@ -931,24 +931,24 @@ const struct OamData gUnknown_0831C3B8 =
.affineParam = 0,
};
const struct SpriteTemplate SpriteTemplate_MonIconOnLvlUpBox =
static const struct SpriteTemplate sSpriteTemplate_MonIconOnLvlUpBox =
{
.tileTag = MON_ICON_LVLUP_BOX_TAG,
.paletteTag = MON_ICON_LVLUP_BOX_TAG,
.oam = &gUnknown_0831C3B8,
.oam = &sOamData_MonIconOnLvlUpBox,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_MonIconOnLvlUpBox
};
const u16 sProtectSuccessRates[] = {0xFFFF, 0x7FFF, 0x3FFF, 0x1FFF};
static const u16 sProtectSuccessRates[] = {USHRT_MAX, USHRT_MAX / 2, USHRT_MAX / 4, USHRT_MAX / 8};
#define MIMIC_FORBIDDEN_END 0xFFFE
#define METRONOME_FORBIDDEN_END 0xFFFF
#define ASSIST_FORBIDDEN_END 0xFFFF
static const u16 gMovesForbiddenToCopy[] =
static const u16 sMovesForbiddenToCopy[] =
{
MOVE_METRONOME,
MOVE_STRUGGLE,
@ -1007,7 +1007,7 @@ static const u16 sWeightToDamageTable[] =
0xFFFF, 0xFFFF
};
static const u16 gPickupItems[] =
static const u16 sPickupItems[] =
{
ITEM_POTION,
ITEM_ANTIDOTE,
@ -1029,7 +1029,7 @@ static const u16 gPickupItems[] =
ITEM_MAX_ELIXIR,
};
static const u16 gRarePickupItems[] =
static const u16 sRarePickupItems[] =
{
ITEM_HYPER_POTION,
ITEM_NUGGET,
@ -1044,7 +1044,7 @@ static const u16 gRarePickupItems[] =
ITEM_TM26,
};
static const u8 gPickupProbabilities[] =
static const u8 sPickupProbabilities[] =
{
30, 40, 50, 60, 70, 80, 90, 94, 98
};
@ -1057,8 +1057,8 @@ static const u8 sTerrainToType[] =
TYPE_WATER, // underwater
TYPE_WATER, // water
TYPE_WATER, // pond water
TYPE_ROCK , // rock
TYPE_ROCK , // cave
TYPE_ROCK, // rock
TYPE_ROCK, // cave
TYPE_NORMAL, // building
TYPE_NORMAL, // plain
};
@ -1068,7 +1068,31 @@ static const u8 sBallCatchBonuses[] =
20, 15, 10, 15 // Ultra, Great, Poke, Safari
};
extern const u8 gUnknown_0831C4F8[];
// could be a 2d array or a struct
const ALIGNED(4) u8 gUnknown_0831C494[] =
{
0x3d, 0x44, 0x3d, 0x44, 0x14, 0x2d, 0x54, 0x5c,
0x46, 0x55, 0x20, 0x5c, 0x26, 0x45, 0x46, 0x55,
0x14, 0x5a, 0x46, 0x5c, 0x1e, 0x32, 0x20, 0x5a,
0x38, 0x4e, 0x38, 0x4e, 0x19, 0x28, 0x4b, 0x5a,
0x45, 0x4b, 0x1c, 0x53, 0x23, 0x2d, 0x1d, 0x23,
0x3e, 0x48, 0x1e, 0x32, 0x3a, 0x5f, 0x58, 0x5e,
0x22, 0x2d, 0x1d, 0x28, 0x23, 0x28, 0x23, 0x5f,
0x38, 0x4e, 0x38, 0x4e, 0x23, 0x50, 0x22, 0x5e,
0x2c, 0x5e, 0x22, 0x28, 0x38, 0x4e, 0x38, 0x4e,
0x1e, 0x58, 0x1e, 0x58, 0x1e, 0x2b, 0x1b, 0x21,
0x28, 0x5a, 0x19, 0x57, 0x12, 0x58, 0x5a, 0x5f,
0x58, 0x5e, 0x16, 0x2a, 0x2a, 0x5c, 0x2a, 0x2f,
0x38, 0x4e, 0x38, 0x4e
};
static const u8 sUnknown_0831C4F8[] =
{
0x03, 0x00, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00,
0x01, 0x02, 0x02, 0x00, 0x03, 0x01, 0x03, 0x01,
0x02, 0x03, 0x03, 0x02, 0x01, 0x00, 0x02, 0x02,
0x03, 0x00, 0x00, 0x00
};
static void atk00_attackcanceler(void)
{
@ -1304,8 +1328,8 @@ static void atk01_accuracycheck(void)
if (WEATHER_HAS_EFFECT && gBattleWeather & WEATHER_SUN_ANY && gBattleMoves[move].effect == EFFECT_THUNDER)
moveAcc = 50;
calc = gAccuracyStageRatios[buff].dividend * moveAcc;
calc /= gAccuracyStageRatios[buff].divisor;
calc = sAccuracyStageRatios[buff].dividend * moveAcc;
calc /= sAccuracyStageRatios[buff].divisor;
if (gBattleMons[gBankAttacker].ability == ABILITY_COMPOUND_EYES)
calc = (calc * 130) / 100; // 1.3 compound eyes boost
@ -1435,7 +1459,7 @@ static void atk04_critcalc(void)
if ((gBattleMons[gBankTarget].ability != ABILITY_BATTLE_ARMOR && gBattleMons[gBankTarget].ability != ABILITY_SHELL_ARMOR)
&& !(gStatuses3[gBankAttacker] & STATUS3_CANT_SCORE_A_CRIT)
&& !(gBattleTypeFlags & (BATTLE_TYPE_WALLY_TUTORIAL | BATTLE_TYPE_FIRST_BATTLE))
&& !(Random() % gCriticalHitChance[critChance]))
&& !(Random() % sCriticalHitChance[critChance]))
gCritMultiplier = 2;
else
gCritMultiplier = 1;
@ -2411,7 +2435,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
if (gBattleCommunication[MOVE_EFFECT_BYTE] <= 6) // status change
{
switch (gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]])
switch (sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]])
{
case STATUS_SLEEP:
// check active uproar
@ -2630,12 +2654,12 @@ void SetMoveEffect(bool8 primary, u8 certain)
{
BattleScriptPush(gBattlescriptCurrInstr + 1);
if (gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]] == STATUS_SLEEP)
if (sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]] == STATUS_SLEEP)
gBattleMons[gEffectBank].status1 |= ((Random() & 3) + 2);
else
gBattleMons[gEffectBank].status1 |= gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]];
gBattleMons[gEffectBank].status1 |= sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]];
gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
gActiveBank = gEffectBank;
EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gEffectBank].status1);
@ -2674,7 +2698,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
}
else
{
if (gBattleMons[gEffectBank].status2 & gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]])
if (gBattleMons[gEffectBank].status2 & sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]])
{
gBattlescriptCurrInstr++;
}
@ -2694,7 +2718,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
gBattleMons[gEffectBank].status2 |= (((Random()) % 0x4)) + 2;
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
}
break;
case MOVE_EFFECT_FLINCH:
@ -2714,7 +2738,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
else
{
if (BankGetTurnOrder(gEffectBank) > gCurrentMoveTurn)
gBattleMons[gEffectBank].status2 |= gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]];
gBattleMons[gEffectBank].status2 |= sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]];
gBattlescriptCurrInstr++;
}
break;
@ -2727,7 +2751,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
gBattleMons[gEffectBank].status2 |= ((Random() & 3) + 2) << 4;
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
}
else
{
@ -2743,7 +2767,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
gPaydayMoney = 0xFFFF;
}
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
break;
case MOVE_EFFECT_TRI_ATTACK:
if (gBattleMons[gEffectBank].status1)
@ -2776,7 +2800,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
*(gBattleStruct->wrappedBy + gEffectBank) = gBankAttacker;
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
for (gBattleCommunication[MULTISTRING_CHOOSER] = 0; ; gBattleCommunication[MULTISTRING_CHOOSER]++)
{
@ -2793,7 +2817,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
gBattleMoveDamage = 1;
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
break;
case MOVE_EFFECT_ATK_PLUS_1:
case MOVE_EFFECT_DEF_PLUS_1:
@ -3001,7 +3025,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
gBattleMoveDamage = 1;
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
break;
case MOVE_EFFECT_THRASH:
if (gBattleMons[gEffectBank].status2 & STATUS2_LOCK_CONFUSE)
@ -3108,9 +3132,9 @@ static void atk18_status_effect_clear(void)
gActiveBank = GetBattleBank(gBattlescriptCurrInstr[1]);
if (gBattleCommunication[MOVE_EFFECT_BYTE] <= MOVE_EFFECT_TOXIC)
gBattleMons[gActiveBank].status1 &= (~gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]);
gBattleMons[gActiveBank].status1 &= (~sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]);
else
gBattleMons[gActiveBank].status2 &= (~gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]);
gBattleMons[gActiveBank].status2 &= (~sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]);
gBattleCommunication[MOVE_EFFECT_BYTE] = 0;
gBattlescriptCurrInstr += 2;
@ -6733,8 +6757,8 @@ static void sub_804F17C(void)
gBattle_BG2_Y = 0;
gBattle_BG2_X = 0x1A0;
LoadPalette(gUnknown_0831C2C8, 0x60, 0x20);
CopyToWindowPixelBuffer(14, gUnknown_0831C2E8, 0, 0);
LoadPalette(sUnknown_0831C2C8, 0x60, 0x20);
CopyToWindowPixelBuffer(14, sUnknown_0831C2E8, 0, 0);
PutWindowTilemap(14);
CopyWindowToVram(14, 3);
@ -6860,7 +6884,7 @@ static void PutMonIconOnLvlUpBox(void)
LoadSpriteSheet(&iconSheet);
LoadSpritePalette(&iconPalSheet);
spriteId = CreateSprite(&SpriteTemplate_MonIconOnLvlUpBox, 256, 10, 0);
spriteId = CreateSprite(&sSpriteTemplate_MonIconOnLvlUpBox, 256, 10, 0);
gSprites[spriteId].sDestroy = FALSE;
gSprites[spriteId].sSavedLvlUpBoxXPosition = gBattle_BG2_X;
}
@ -7078,7 +7102,7 @@ static void atk76_various(void)
{
gBattleStruct->field_92 |= gBitTable[gActiveBank];
gBattleCommunication[0] = 1;
gBattleCommunication[MULTISTRING_CHOOSER] = gUnknown_0831C4F8[GetNatureFromPersonality(gBattleMons[gActiveBank].personality)];
gBattleCommunication[MULTISTRING_CHOOSER] = sUnknown_0831C4F8[GetNatureFromPersonality(gBattleMons[gActiveBank].personality)];
}
break;
case 9:
@ -8475,10 +8499,10 @@ static void atk9C_set_substitute(void)
static bool8 IsMoveUncopyableByMimic(u16 move)
{
s32 i;
for (i = 0; gMovesForbiddenToCopy[i] != MIMIC_FORBIDDEN_END
&& gMovesForbiddenToCopy[i] != move; i++);
for (i = 0; sMovesForbiddenToCopy[i] != MIMIC_FORBIDDEN_END
&& sMovesForbiddenToCopy[i] != move; i++);
return (gMovesForbiddenToCopy[i] != MIMIC_FORBIDDEN_END);
return (sMovesForbiddenToCopy[i] != MIMIC_FORBIDDEN_END);
}
static void atk9D_mimicattackcopy(void)
@ -8537,7 +8561,7 @@ static void atk9E_metronome(void)
for (i = 0; i < 4; i++); // ?
for (move = gMovesForbiddenToCopy; ; move++)
for (move = sMovesForbiddenToCopy; ; move++)
{
if (*move == gCurrentMove)
break;
@ -8567,7 +8591,7 @@ static void atk9E_metronome(void)
ldr r7, =gCurrentMove\n\
movs r6, 0xB1\n\
lsls r6, 1\n\
ldr r5, =gMovesForbiddenToCopy\n\
ldr r5, =sMovesForbiddenToCopy\n\
ldr r0, =gBattlescriptCurrInstr\n\
mov r8, r0\n\
_080524EE:\n\
@ -10580,9 +10604,9 @@ static void atkDE_asistattackselect(void)
if (IsInvalidForSleepTalkOrAssist(move))
continue;
for (; gMovesForbiddenToCopy[i] != ASSIST_FORBIDDEN_END && move != gMovesForbiddenToCopy[i]; i++);
for (; sMovesForbiddenToCopy[i] != ASSIST_FORBIDDEN_END && move != sMovesForbiddenToCopy[i]; i++);
if (gMovesForbiddenToCopy[i] != ASSIST_FORBIDDEN_END)
if (sMovesForbiddenToCopy[i] != ASSIST_FORBIDDEN_END)
continue;
if (move == MOVE_NONE)
continue;
@ -10774,14 +10798,14 @@ static void atkE5_pickup(void)
for (j = 0; j < 9; j++)
{
if (gPickupProbabilities[j] > rand)
if (sPickupProbabilities[j] > rand)
{
SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &gPickupItems[lvlDivBy10 + j]);
SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &sPickupItems[lvlDivBy10 + j]);
break;
}
else if (rand == 99 || rand == 98)
{
SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &gRarePickupItems[lvlDivBy10 + (99 - rand)]);
SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &sRarePickupItems[lvlDivBy10 + (99 - rand)]);
break;
}
}