Unify TrHillTag struct definitions (variable floors)

This commit is contained in:
PikalaxALT
2019-09-04 15:42:53 -04:00
committed by huderlem
parent 904bba9e16
commit e87f4f4cc7
5 changed files with 5080 additions and 5037 deletions
+1 -5
View File
@@ -7,11 +7,7 @@ struct EReaderTrainerHillTrainer
{ {
u8 unk0; u8 unk0;
struct TrainerHillTrainer unk4; struct TrainerHillTrainer unk4;
u8 unk14C[0x100]; struct TrHillDisplay unk14C;
u16 unk24C[16];
u8 coords[2];
u8 direction;
u8 range;
u32 checksum; u32 checksum;
}; // size=0x274 }; // size=0x274
+11 -12
View File
@@ -21,11 +21,8 @@ struct TrHillRoomTrainers
u8 facilityClass[2]; u8 facilityClass[2];
}; };
struct TrHillFloor struct TrHillDisplay
{ {
u8 unk0;
u8 unk1;
struct TrainerHillTrainer trainers[2];
u8 data[0x100]; u8 data[0x100];
u16 unk3A0[16]; u16 unk3A0[16];
u8 coords[2]; // x first 4 bits, y last 4 bits u8 coords[2]; // x first 4 bits, y last 4 bits
@@ -33,13 +30,21 @@ struct TrHillFloor
u8 range; // array of 4 bits for each trainer u8 range; // array of 4 bits for each trainer
}; };
struct TrHillFloor
{
u8 unk0;
u8 unk1;
struct TrainerHillTrainer trainers[2];
struct TrHillDisplay display;
};
struct TrHillTag struct TrHillTag
{ {
u8 unkField_0; u8 unkField_0;
u8 unused1; u8 unused1;
u8 unkField_2; u8 numFloors;
u32 checksum; u32 checksum;
struct TrHillFloor floors[4]; struct TrHillFloor floors[0];
}; };
struct TrHillTag_Half struct TrHillTag_Half
@@ -51,12 +56,6 @@ struct TrHillTag_Half
struct TrHillFloor floors[2]; struct TrHillFloor floors[2];
}; };
struct TrHillStruct2
{
u8 floorId;
struct TrHillTag tag;
};
extern u32 *gTrainerHillVBlankCounter; extern u32 *gTrainerHillVBlankCounter;
void CallTrainerHillFunction(void); void CallTrainerHillFunction(void);
File diff suppressed because it is too large Load Diff
+3 -3
View File
@@ -450,14 +450,14 @@ static bool32 TryWriteTrainerHill_r(struct EReaderTrainerHillSet *ttdata, struct
memset(buffer2, 0, 0x1000); memset(buffer2, 0, 0x1000);
buffer2->unkField_0 = ttdata->count; buffer2->unkField_0 = ttdata->count;
buffer2->unused1 = sub_81D38D4(); buffer2->unused1 = sub_81D38D4();
buffer2->unkField_2 = (ttdata->count + 1) / 2; buffer2->numFloors = (ttdata->count + 1) / 2;
for (i = 0; i < ttdata->count; i++) for (i = 0; i < ttdata->count; i++)
{ {
if (!(i & 1)) if (!(i & 1))
{ {
buffer2->floors[i / 2].unk0 = ttdata->unk_8[i].unk0; buffer2->floors[i / 2].unk0 = ttdata->unk_8[i].unk0;
memcpy(buffer2->floors[i / 2].data, ttdata->unk_8[i].unk14C, 0x124); buffer2->floors[i / 2].display = ttdata->unk_8[i].unk14C;
buffer2->floors[i / 2].trainers[0] = ttdata->unk_8[i].unk4; buffer2->floors[i / 2].trainers[0] = ttdata->unk_8[i].unk4;
} }
else else
@@ -472,7 +472,7 @@ static bool32 TryWriteTrainerHill_r(struct EReaderTrainerHillSet *ttdata, struct
buffer2->floors[i / 2].trainers[1] = sTrainerHillTrainerTemplates_JP[i / 2]; buffer2->floors[i / 2].trainers[1] = sTrainerHillTrainerTemplates_JP[i / 2];
} }
buffer2->checksum = CalcByteArraySum((u8 *)buffer2->floors, sizeof(buffer2->floors)); buffer2->checksum = CalcByteArraySum((u8 *)buffer2->floors, 4 * sizeof(struct TrHillFloor));
if (TryWriteSpecialSaveSection(SECTOR_ID_TRAINER_HILL, (u8 *)buffer2) != 1) if (TryWriteSpecialSaveSection(SECTOR_ID_TRAINER_HILL, (u8 *)buffer2) != 1)
return FALSE; return FALSE;
+32 -25
View File
@@ -41,6 +41,13 @@
#define HILL_MAX_TIME 215999 // 60 * 60 * 60 - 1 #define HILL_MAX_TIME 215999 // 60 * 60 * 60 - 1
// EWRAM // EWRAM
struct TrHillStruct2
{
u8 floorId;
struct TrHillTag tag;
struct TrHillFloor floors[4];
};
static EWRAM_DATA struct TrHillStruct2 *sHillData = NULL; static EWRAM_DATA struct TrHillStruct2 *sHillData = NULL;
static EWRAM_DATA struct TrHillRoomTrainers *sRoomTrainers = NULL; static EWRAM_DATA struct TrHillRoomTrainers *sRoomTrainers = NULL;
EWRAM_DATA u32 *gTrainerHillVBlankCounter = NULL; EWRAM_DATA u32 *gTrainerHillVBlankCounter = NULL;
@@ -301,7 +308,7 @@ u8 GetTrainerHillTrainerFrontSpriteId(u16 trainerId)
SetUpDataStruct(); SetUpDataStruct();
id = trainerId - 1; id = trainerId - 1;
facilityClass = sHillData->tag.floors[sHillData->floorId].trainers[id].facilityClass; facilityClass = sHillData->floors[sHillData->floorId].trainers[id].facilityClass;
FreeDataStruct(); FreeDataStruct();
return gFacilityClassToPicIndex[facilityClass]; return gFacilityClassToPicIndex[facilityClass];
@@ -318,9 +325,9 @@ void InitTrainerHillBattleStruct(void)
{ {
for (j = 0; j < HILL_TRAINER_NAME_LENGTH; j++) for (j = 0; j < HILL_TRAINER_NAME_LENGTH; j++)
{ {
sRoomTrainers->name[i][j] = sHillData->tag.floors[sHillData->floorId].trainers[i].name[j]; sRoomTrainers->name[i][j] = sHillData->floors[sHillData->floorId].trainers[i].name[j];
} }
sRoomTrainers->facilityClass[i] = sHillData->tag.floors[sHillData->floorId].trainers[i].facilityClass; sRoomTrainers->facilityClass[i] = sHillData->floors[sHillData->floorId].trainers[i].facilityClass;
} }
SetTrainerHillVBlankCounter(&gSaveBlock1Ptr->trainerHill.timer); SetTrainerHillVBlankCounter(&gSaveBlock1Ptr->trainerHill.timer);
FreeDataStruct(); FreeDataStruct();
@@ -338,7 +345,7 @@ static void SetUpDataStruct(void)
{ {
sHillData = AllocZeroed(sizeof(*sHillData)); sHillData = AllocZeroed(sizeof(*sHillData));
sHillData->floorId = gMapHeader.mapLayoutId - LAYOUT_TRAINER_HILL_1F; sHillData->floorId = gMapHeader.mapLayoutId - LAYOUT_TRAINER_HILL_1F;
CpuCopy32(sDataPerTag[gSaveBlock1Ptr->trainerHill.tag], &sHillData->tag, sizeof(sHillData->tag)); CpuCopy32(sDataPerTag[gSaveBlock1Ptr->trainerHill.tag], &sHillData->tag, sizeof(sHillData->tag) + 4 * sizeof(struct TrHillFloor));
nullsub_2(); nullsub_2();
} }
} }
@@ -360,16 +367,16 @@ void CopyTrainerHillTrainerText(u8 which, u16 trainerId)
switch (which) switch (which)
{ {
case 2: case 2:
FrontierSpeechToString(sHillData->tag.floors[floorId].trainers[id].speechBefore); FrontierSpeechToString(sHillData->floors[floorId].trainers[id].speechBefore);
break; break;
case 3: case 3:
FrontierSpeechToString(sHillData->tag.floors[floorId].trainers[id].speechWin); FrontierSpeechToString(sHillData->floors[floorId].trainers[id].speechWin);
break; break;
case 4: case 4:
FrontierSpeechToString(sHillData->tag.floors[floorId].trainers[id].speechLose); FrontierSpeechToString(sHillData->floors[floorId].trainers[id].speechLose);
break; break;
case 5: case 5:
FrontierSpeechToString(sHillData->tag.floors[floorId].trainers[id].speechAfter); FrontierSpeechToString(sHillData->floors[floorId].trainers[id].speechAfter);
break; break;
} }
@@ -411,7 +418,7 @@ static void sub_81D5924(void)
{ {
u16 itemId = sub_81D6640(); u16 itemId = sub_81D6640();
if (sHillData->tag.unkField_2 != 4 || gSaveBlock1Ptr->trainerHill.field_3D6E_0a) if (sHillData->tag.numFloors != 4 || gSaveBlock1Ptr->trainerHill.field_3D6E_0a)
{ {
gSpecialVar_Result = 2; gSpecialVar_Result = 2;
} }
@@ -507,9 +514,9 @@ static void sub_81D5B2C(void)
static void sub_81D5BBC(void) static void sub_81D5BBC(void)
{ {
SetUpDataStruct(); SetUpDataStruct();
if (sHillData->tag.unkField_2 != 4) if (sHillData->tag.numFloors != 4)
{ {
ConvertIntToDecimalStringN(gStringVar1, sHillData->tag.unkField_2, STR_CONV_MODE_LEFT_ALIGN, 1); ConvertIntToDecimalStringN(gStringVar1, sHillData->tag.numFloors, STR_CONV_MODE_LEFT_ALIGN, 1);
gSpecialVar_Result = 0; gSpecialVar_Result = 0;
} }
else else
@@ -624,12 +631,12 @@ void sub_81D5DF8(void)
eventTemplates[i] = gUnknown_0862A670; eventTemplates[i] = gUnknown_0862A670;
eventTemplates[i].localId = i + 1; eventTemplates[i].localId = i + 1;
eventTemplates[i].graphicsId = FacilityClassToGraphicsId(sHillData->tag.floors[floorId].trainers[i].facilityClass); eventTemplates[i].graphicsId = FacilityClassToGraphicsId(sHillData->floors[floorId].trainers[i].facilityClass);
eventTemplates[i].x = sHillData->tag.floors[floorId].coords[i] & 0xF; eventTemplates[i].x = sHillData->floors[floorId].display.coords[i] & 0xF;
eventTemplates[i].y = ((sHillData->tag.floors[floorId].coords[i] >> 4) & 0xF) + 5; eventTemplates[i].y = ((sHillData->floors[floorId].display.coords[i] >> 4) & 0xF) + 5;
bits = i << 2; bits = i << 2;
eventTemplates[i].movementType = ((sHillData->tag.floors[floorId].direction >> bits) & 0xF) + MOVEMENT_TYPE_FACE_UP; eventTemplates[i].movementType = ((sHillData->floors[floorId].display.direction >> bits) & 0xF) + MOVEMENT_TYPE_FACE_UP;
eventTemplates[i].trainerRange_berryTreeId = (sHillData->tag.floors[floorId].range >> bits) & 0xF; eventTemplates[i].trainerRange_berryTreeId = (sHillData->floors[floorId].display.range >> bits) & 0xF;
eventTemplates[i].script = EventScript_2C83F0; eventTemplates[i].script = EventScript_2C83F0;
gSaveBlock2Ptr->frontier.trainerIds[i] = i + 1; gSaveBlock2Ptr->frontier.trainerIds[i] = i + 1;
} }
@@ -650,8 +657,8 @@ static u32 sub_81D5F58(u8 floorId, u32 bit, u32 arg2, u32 arg3)
{ {
u32 var0, var1, var2, var3; u32 var0, var1, var2, var3;
var0 = (sHillData->tag.floors[floorId].unk3A0[arg2] >> (15 - bit)) & 1; var0 = (sHillData->floors[floorId].unk3A0[arg2] >> (15 - bit)) & 1;
var1 = sHillData->tag.floors[floorId].data[arg2 * arg3 + bit]; var1 = sHillData->floors[floorId].data[arg2 * arg3 + bit];
var3 = 0x200; var3 = 0x200;
var2 = 0x3000; var2 = 0x3000;
@@ -894,7 +901,7 @@ static void sub_81D62CC(u16 trainerId, u8 firstMonId)
u8 id = gUnknown_0862A698[trId][arrId]; u8 id = gUnknown_0862A698[trId][arrId];
struct Pokemon *mon = &gEnemyParty[i]; struct Pokemon *mon = &gEnemyParty[i];
CreateBattleTowerMon(mon, &sHillData->tag.floors[floorId].trainers[trId].mons[id]); CreateBattleTowerMon(mon, &sHillData->floors[floorId].trainers[trId].mons[id]);
sub_81D642C(mon, level); sub_81D642C(mon, level);
} }
@@ -929,7 +936,7 @@ u8 GetTrainerEncounterMusicIdInTrainerHill(u16 trainerId)
SetUpDataStruct(); SetUpDataStruct();
trId = trainerId - 1; trId = trainerId - 1;
facilityClass = sHillData->tag.floors[sHillData->floorId].trainers[trId].facilityClass; facilityClass = sHillData->floors[sHillData->floorId].trainers[trId].facilityClass;
FreeDataStruct(); FreeDataStruct();
for (i = 0; i < ARRAY_COUNT(gUnknown_0862A3B4); i++) for (i = 0; i < ARRAY_COUNT(gUnknown_0862A3B4); i++)
@@ -956,7 +963,7 @@ u8 sub_81D6490(void)
u8 ret; u8 ret;
SetUpDataStruct(); SetUpDataStruct();
ret = sHillData->tag.unkField_2; ret = sHillData->tag.numFloors;
FreeDataStruct(); FreeDataStruct();
return ret; return ret;
@@ -1021,8 +1028,8 @@ static u8 sub_81D65E8(u8 arg0)
var = 0; var = 0;
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
{ {
var ^= sHillData->tag.floors[i].unk0 & 0x1F; var ^= sHillData->floors[i].unk0 & 0x1F;
var ^= sHillData->tag.floors[i].unk1 & 0x1F; var ^= sHillData->floors[i].unk1 & 0x1F;
} }
if (arg0) if (arg0)
@@ -1042,8 +1049,8 @@ static u16 sub_81D6640(void)
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
{ {
var += sHillData->tag.floors[i].unk0; var += sHillData->floors[i].unk0;
var += sHillData->tag.floors[i].unk1; var += sHillData->floors[i].unk1;
} }
var2 = var / 256; var2 = var / 256;