Factory done
This commit is contained in:
+31
-225
@@ -8,7 +8,7 @@
|
||||
#include "battle_tower.h"
|
||||
#include "random.h"
|
||||
#include "item.h"
|
||||
#include "battle_factory.h"
|
||||
#include "battle_factory_screen.h"
|
||||
#include "frontier_util.h"
|
||||
#include "constants/items.h"
|
||||
#include "constants/region_map_sections.h"
|
||||
@@ -280,17 +280,17 @@ bool8 sub_81B9E94(void)
|
||||
&& ((gMapHeader.mapLayoutId == 385) | (gMapHeader.mapLayoutId == 386)));
|
||||
}
|
||||
|
||||
// This function was written very...oddly.
|
||||
#ifdef NONMATCHING
|
||||
static void sub_81B9EC0(void)
|
||||
{
|
||||
s32 i, j;
|
||||
u16 currMonId = 0, currSpecies = 0;
|
||||
u8 firstMonId;
|
||||
u16 monSetId;
|
||||
u16 currSpecies;
|
||||
u16 species[PARTY_SIZE];
|
||||
u16 monIds[PARTY_SIZE];
|
||||
u16 heldItems[PARTY_SIZE];
|
||||
s32 zero = 0;
|
||||
|
||||
firstMonId = 0;
|
||||
gFacilityTrainers = gSlateportBattleTentTrainers;
|
||||
for (i = 0; i < PARTY_SIZE; i++)
|
||||
{
|
||||
@@ -300,250 +300,56 @@ static void sub_81B9EC0(void)
|
||||
}
|
||||
gFacilityTrainerMons = gSlateportBattleTentMons;
|
||||
currSpecies = 0;
|
||||
for (i = 0; i != PARTY_SIZE;)
|
||||
i = 0;
|
||||
while (i != PARTY_SIZE)
|
||||
{
|
||||
// Cannot have two pokemon of the same species.
|
||||
currMonId = Random() % 70;
|
||||
for (j = zero; j < i + zero; j++)
|
||||
monSetId = Random() % 70;
|
||||
for (j = firstMonId; j < firstMonId + i; j++)
|
||||
{
|
||||
if (monIds[j] == currMonId)
|
||||
u16 monId = monIds[j];
|
||||
if (monIds[j] == monSetId)
|
||||
break;
|
||||
if (species[j] == gFacilityTrainerMons[currMonId].species)
|
||||
if (species[j] == gFacilityTrainerMons[monSetId].species)
|
||||
{
|
||||
if (currSpecies == 0)
|
||||
currSpecies = gFacilityTrainerMons[currMonId].species;
|
||||
currSpecies = gFacilityTrainerMons[monSetId].species;
|
||||
else
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (j != i + zero)
|
||||
if (j != i + firstMonId)
|
||||
continue;
|
||||
|
||||
// Cannot have two same held items.
|
||||
for (j = zero; j < i + zero; j++)
|
||||
for (j = firstMonId; j < i + firstMonId; j++)
|
||||
{
|
||||
if (heldItems[j] == 0)
|
||||
continue;
|
||||
if (heldItems[j] == gBattleFrontierHeldItems[gFacilityTrainerMons[currMonId].itemTableId])
|
||||
if (heldItems[j] != 0 && heldItems[j] == gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId])
|
||||
{
|
||||
if (gFacilityTrainerMons[currMonId].species == currSpecies)
|
||||
if (gFacilityTrainerMons[monSetId].species == currSpecies)
|
||||
currSpecies = 0;
|
||||
else
|
||||
break;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (j != i + zero)
|
||||
if (j != i + firstMonId)
|
||||
continue;
|
||||
|
||||
gSaveBlock2Ptr->frontier.field_E70[i].monId = currMonId;
|
||||
species[i] = gFacilityTrainerMons[currMonId].species;
|
||||
heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[currMonId].itemTableId];
|
||||
monIds[i] = currMonId;
|
||||
gSaveBlock2Ptr->frontier.field_E70[i].monId = monSetId;
|
||||
species[i] = gFacilityTrainerMons[monSetId].species;
|
||||
heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId];
|
||||
monIds[i] = monSetId;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
#else
|
||||
NAKED
|
||||
static void sub_81B9EC0(void)
|
||||
{
|
||||
asm_unified("\n\
|
||||
push {r4-r7,lr}\n\
|
||||
mov r7, r10\n\
|
||||
mov r6, r9\n\
|
||||
mov r5, r8\n\
|
||||
push {r5-r7}\n\
|
||||
sub sp, 0x3C\n\
|
||||
ldr r1, =gFacilityTrainers\n\
|
||||
ldr r0, =gSlateportBattleTentTrainers\n\
|
||||
str r0, [r1]\n\
|
||||
add r0, sp, 0xC\n\
|
||||
mov r9, r0\n\
|
||||
mov r1, sp\n\
|
||||
adds r1, 0x18\n\
|
||||
str r1, [sp, 0x2C]\n\
|
||||
ldr r5, =gFacilityTrainerMons\n\
|
||||
ldr r4, =gSlateportBattleTentMons\n\
|
||||
movs r2, 0\n\
|
||||
adds r3, r1, 0\n\
|
||||
mov r1, r9\n\
|
||||
mov r0, sp\n\
|
||||
movs r6, 0x5\n\
|
||||
mov r8, r6\n\
|
||||
_081B9EEC:\n\
|
||||
strh r2, [r0]\n\
|
||||
strh r2, [r1]\n\
|
||||
strh r2, [r3]\n\
|
||||
adds r3, 0x2\n\
|
||||
adds r1, 0x2\n\
|
||||
adds r0, 0x2\n\
|
||||
movs r7, 0x1\n\
|
||||
negs r7, r7\n\
|
||||
add r8, r7\n\
|
||||
mov r6, r8\n\
|
||||
cmp r6, 0\n\
|
||||
bge _081B9EEC\n\
|
||||
str r4, [r5]\n\
|
||||
movs r7, 0\n\
|
||||
mov r10, r7\n\
|
||||
movs r0, 0\n\
|
||||
mov r8, r0\n\
|
||||
ldr r1, [sp, 0x2C]\n\
|
||||
str r1, [sp, 0x30]\n\
|
||||
mov r2, sp\n\
|
||||
str r2, [sp, 0x34]\n\
|
||||
lsls r6, r0, 1\n\
|
||||
str r6, [sp, 0x24]\n\
|
||||
add r6, r9\n\
|
||||
str r6, [sp, 0x28]\n\
|
||||
_081B9F1E:\n\
|
||||
bl Random\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r0, 16\n\
|
||||
movs r1, 0x46\n\
|
||||
bl __umodsi3\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r5, r0, 16\n\
|
||||
movs r2, 0\n\
|
||||
mov r7, r8\n\
|
||||
adds r6, r2, r7\n\
|
||||
cmp r2, r6\n\
|
||||
bge _081B9F7C\n\
|
||||
ldr r1, [sp, 0x28]\n\
|
||||
ldrh r0, [r1]\n\
|
||||
cmp r0, r5\n\
|
||||
beq _081B9F7C\n\
|
||||
ldr r0, =gFacilityTrainerMons\n\
|
||||
ldr r1, [r0]\n\
|
||||
lsls r0, r5, 4\n\
|
||||
adds r4, r0, r1\n\
|
||||
ldrh r7, [r4]\n\
|
||||
mov r12, r7\n\
|
||||
lsls r3, r2, 1\n\
|
||||
ldr r1, [sp, 0x24]\n\
|
||||
add r1, sp\n\
|
||||
str r6, [sp, 0x38]\n\
|
||||
_081B9F56:\n\
|
||||
ldrh r0, [r1]\n\
|
||||
cmp r0, r12\n\
|
||||
bne _081B9F66\n\
|
||||
mov r0, r10\n\
|
||||
cmp r0, 0\n\
|
||||
bne _081B9F7C\n\
|
||||
ldrh r7, [r4]\n\
|
||||
mov r10, r7\n\
|
||||
_081B9F66:\n\
|
||||
adds r3, 0x2\n\
|
||||
adds r1, 0x2\n\
|
||||
adds r2, 0x1\n\
|
||||
ldr r0, [sp, 0x38]\n\
|
||||
cmp r2, r0\n\
|
||||
bge _081B9F7C\n\
|
||||
mov r7, r9\n\
|
||||
adds r0, r7, r3\n\
|
||||
ldrh r0, [r0]\n\
|
||||
cmp r0, r5\n\
|
||||
bne _081B9F56\n\
|
||||
_081B9F7C:\n\
|
||||
cmp r2, r6\n\
|
||||
bne _081BA01C\n\
|
||||
movs r2, 0\n\
|
||||
cmp r2, r6\n\
|
||||
bge _081B9FD4\n\
|
||||
ldr r0, =gBattleFrontierHeldItems\n\
|
||||
mov r12, r0\n\
|
||||
ldr r7, =gFacilityTrainerMons\n\
|
||||
ldr r1, [sp, 0x24]\n\
|
||||
ldr r0, [sp, 0x2C]\n\
|
||||
adds r4, r1, r0\n\
|
||||
_081B9F92:\n\
|
||||
ldrh r3, [r4]\n\
|
||||
cmp r3, 0\n\
|
||||
beq _081B9FCC\n\
|
||||
ldr r1, [r7]\n\
|
||||
lsls r0, r5, 4\n\
|
||||
adds r1, r0, r1\n\
|
||||
ldrb r0, [r1, 0xA]\n\
|
||||
lsls r0, 1\n\
|
||||
add r0, r12\n\
|
||||
ldrh r0, [r0]\n\
|
||||
cmp r3, r0\n\
|
||||
bne _081B9FCC\n\
|
||||
ldrh r0, [r1]\n\
|
||||
cmp r0, r10\n\
|
||||
bne _081B9FD4\n\
|
||||
movs r1, 0\n\
|
||||
mov r10, r1\n\
|
||||
b _081B9FD4\n\
|
||||
.pool\n\
|
||||
_081B9FCC:\n\
|
||||
adds r4, 0x2\n\
|
||||
adds r2, 0x1\n\
|
||||
cmp r2, r6\n\
|
||||
blt _081B9F92\n\
|
||||
_081B9FD4:\n\
|
||||
cmp r2, r6\n\
|
||||
bne _081BA01C\n\
|
||||
ldr r0, =gSaveBlock2Ptr\n\
|
||||
ldr r1, [r0]\n\
|
||||
mov r2, r8\n\
|
||||
lsls r3, r2, 1\n\
|
||||
adds r0, r3, r2\n\
|
||||
lsls r0, 2\n\
|
||||
adds r1, r0\n\
|
||||
movs r6, 0xE7\n\
|
||||
lsls r6, 4\n\
|
||||
adds r1, r6\n\
|
||||
strh r5, [r1]\n\
|
||||
ldr r0, =gFacilityTrainerMons\n\
|
||||
ldr r0, [r0]\n\
|
||||
lsls r1, r5, 4\n\
|
||||
adds r1, r0\n\
|
||||
ldrh r0, [r1]\n\
|
||||
ldr r7, [sp, 0x34]\n\
|
||||
strh r0, [r7]\n\
|
||||
ldr r2, =gBattleFrontierHeldItems\n\
|
||||
ldrb r0, [r1, 0xA]\n\
|
||||
lsls r0, 1\n\
|
||||
adds r0, r2\n\
|
||||
ldrh r0, [r0]\n\
|
||||
ldr r1, [sp, 0x30]\n\
|
||||
strh r0, [r1]\n\
|
||||
add r3, r9\n\
|
||||
strh r5, [r3]\n\
|
||||
adds r1, 0x2\n\
|
||||
str r1, [sp, 0x30]\n\
|
||||
adds r2, r7, 0\n\
|
||||
adds r2, 0x2\n\
|
||||
str r2, [sp, 0x34]\n\
|
||||
movs r6, 0x1\n\
|
||||
add r8, r6\n\
|
||||
_081BA01C:\n\
|
||||
mov r7, r8\n\
|
||||
cmp r7, 0x6\n\
|
||||
beq _081BA024\n\
|
||||
b _081B9F1E\n\
|
||||
_081BA024:\n\
|
||||
add sp, 0x3C\n\
|
||||
pop {r3-r5}\n\
|
||||
mov r8, r3\n\
|
||||
mov r9, r4\n\
|
||||
mov r10, r5\n\
|
||||
pop {r4-r7}\n\
|
||||
pop {r0}\n\
|
||||
bx r0\n\
|
||||
.pool\n\
|
||||
");
|
||||
}
|
||||
#endif // NONMATCHING
|
||||
|
||||
static void sub_81BA040(void)
|
||||
{
|
||||
u16 trainerId;
|
||||
s32 i, j, k;
|
||||
register const u16 *monSetsPool asm("r9"); // Fix me. Compiler insists on moving that variable into stack.
|
||||
register const u16 *monSets asm("r9"); // Fix me. Compiler insists on moving that variable into stack.
|
||||
u16 species[3];
|
||||
u16 heldItems[3];
|
||||
s32 monPoolCount = 0;
|
||||
s32 setsCount = 0;
|
||||
|
||||
gFacilityTrainers = gSlateportBattleTentTrainers;
|
||||
gFacilityTrainerMons = gSlateportBattleTentMons;
|
||||
@@ -561,21 +367,21 @@ static void sub_81BA040(void)
|
||||
} while (i != gSaveBlock2Ptr->frontier.curChallengeBattleNum);
|
||||
|
||||
gTrainerBattleOpponent_A = trainerId;
|
||||
while (gFacilityTrainers[gTrainerBattleOpponent_A].bfMonPool[monPoolCount] != 0xFFFF)
|
||||
monPoolCount++;
|
||||
if (monPoolCount > 8)
|
||||
while (gFacilityTrainers[gTrainerBattleOpponent_A].monSets[setsCount] != 0xFFFF)
|
||||
setsCount++;
|
||||
if (setsCount > 8)
|
||||
break;
|
||||
monPoolCount = 0;
|
||||
setsCount = 0;
|
||||
}
|
||||
|
||||
if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < 2)
|
||||
gSaveBlock2Ptr->frontier.field_CB4[gSaveBlock2Ptr->frontier.curChallengeBattleNum] = gTrainerBattleOpponent_A;
|
||||
|
||||
monSetsPool = gFacilityTrainers[gTrainerBattleOpponent_A].bfMonPool;
|
||||
monSets = gFacilityTrainers[gTrainerBattleOpponent_A].monSets;
|
||||
i = 0;
|
||||
while (i != 3)
|
||||
{
|
||||
sRandMonSetId = monSetsPool[Random() % monPoolCount];
|
||||
sRandMonSetId = monSets[Random() % setsCount];
|
||||
for (j = 0; j < 6; j++)
|
||||
{
|
||||
if (gFacilityTrainerMons[sRandMonSetId].species == gFacilityTrainerMons[gSaveBlock2Ptr->frontier.field_E70[j].monId].species)
|
||||
|
||||
Reference in New Issue
Block a user