diff options
Diffstat (limited to 'src/trainer_hill.c')
-rw-r--r-- | src/trainer_hill.c | 96 |
1 files changed, 27 insertions, 69 deletions
diff --git a/src/trainer_hill.c b/src/trainer_hill.c index 77c8fcb53..2a7e003d9 100644 --- a/src/trainer_hill.c +++ b/src/trainer_hill.c @@ -38,58 +38,16 @@ #define HILL_TAG_UNIQUE 2 #define HILL_TAG_EXPERT 3 -#define HILL_TRAINER_NAME_LENGTH 11 #define HILL_MAX_TIME 215999 // 60 * 60 * 60 - 1 -struct TrHillRoomTrainers -{ - u8 name[2][HILL_TRAINER_NAME_LENGTH]; - u8 facilityClass[2]; -}; - -struct TrainerHillTrainer -{ - u8 name[HILL_TRAINER_NAME_LENGTH]; - u8 facilityClass; - u32 unused; - u16 speechBefore[6]; - u16 speechWin[6]; - u16 speechLose[6]; - u16 speechAfter[6]; - struct BattleTowerPokemon mons[PARTY_SIZE]; -}; - -struct TrHillFloor -{ - u8 unk0; - u8 unk1; - struct TrainerHillTrainer trainers[2]; - u8 data[0x100]; - u16 unk3A0[16]; - u8 coords[2]; // x first 4 bits, y last 4 bits - u8 direction; // array of 4 bits for each trainer - u8 range; // array of 4 bits for each trainer -}; - -struct TrHillTag -{ - u8 unkField_0; - u8 unused1; - u8 unkField_2; - u8 unused3; - u8 unused4; - u8 unused5; - u8 unused6; - struct TrHillFloor floors[4]; -}; - +// EWRAM struct TrHillStruct2 { u8 floorId; struct TrHillTag tag; + struct TrHillFloor floors[4]; }; -// EWRAM static EWRAM_DATA struct TrHillStruct2 *sHillData = NULL; static EWRAM_DATA struct TrHillRoomTrainers *sRoomTrainers = NULL; EWRAM_DATA u32 *gTrainerHillVBlankCounter = NULL; @@ -350,7 +308,7 @@ u8 GetTrainerHillTrainerFrontSpriteId(u16 trainerId) SetUpDataStruct(); id = trainerId - 1; - facilityClass = sHillData->tag.floors[sHillData->floorId].trainers[id].facilityClass; + facilityClass = sHillData->floors[sHillData->floorId].trainers[id].facilityClass; FreeDataStruct(); return gFacilityClassToPicIndex[facilityClass]; @@ -367,9 +325,9 @@ void InitTrainerHillBattleStruct(void) { 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); FreeDataStruct(); @@ -387,7 +345,7 @@ static void SetUpDataStruct(void) { sHillData = AllocZeroed(sizeof(*sHillData)); 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(); } } @@ -409,16 +367,16 @@ void CopyTrainerHillTrainerText(u8 which, u16 trainerId) switch (which) { case 2: - FrontierSpeechToString(sHillData->tag.floors[floorId].trainers[id].speechBefore); + FrontierSpeechToString(sHillData->floors[floorId].trainers[id].speechBefore); break; case 3: - FrontierSpeechToString(sHillData->tag.floors[floorId].trainers[id].speechWin); + FrontierSpeechToString(sHillData->floors[floorId].trainers[id].speechWin); break; case 4: - FrontierSpeechToString(sHillData->tag.floors[floorId].trainers[id].speechLose); + FrontierSpeechToString(sHillData->floors[floorId].trainers[id].speechLose); break; case 5: - FrontierSpeechToString(sHillData->tag.floors[floorId].trainers[id].speechAfter); + FrontierSpeechToString(sHillData->floors[floorId].trainers[id].speechAfter); break; } @@ -460,7 +418,7 @@ static void sub_81D5924(void) { 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; } @@ -556,9 +514,9 @@ static void sub_81D5B2C(void) static void sub_81D5BBC(void) { 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; } else @@ -673,12 +631,12 @@ void sub_81D5DF8(void) eventTemplates[i] = gUnknown_0862A670; eventTemplates[i].localId = i + 1; - eventTemplates[i].graphicsId = FacilityClassToGraphicsId(sHillData->tag.floors[floorId].trainers[i].facilityClass); - eventTemplates[i].x = sHillData->tag.floors[floorId].coords[i] & 0xF; - eventTemplates[i].y = ((sHillData->tag.floors[floorId].coords[i] >> 4) & 0xF) + 5; + eventTemplates[i].graphicsId = FacilityClassToGraphicsId(sHillData->floors[floorId].trainers[i].facilityClass); + eventTemplates[i].x = sHillData->floors[floorId].display.coords[i] & 0xF; + eventTemplates[i].y = ((sHillData->floors[floorId].display.coords[i] >> 4) & 0xF) + 5; bits = i << 2; - eventTemplates[i].movementType = ((sHillData->tag.floors[floorId].direction >> bits) & 0xF) + MOVEMENT_TYPE_FACE_UP; - eventTemplates[i].trainerRange_berryTreeId = (sHillData->tag.floors[floorId].range >> bits) & 0xF; + eventTemplates[i].movementType = ((sHillData->floors[floorId].display.direction >> bits) & 0xF) + MOVEMENT_TYPE_FACE_UP; + eventTemplates[i].trainerRange_berryTreeId = (sHillData->floors[floorId].display.range >> bits) & 0xF; eventTemplates[i].script = EventScript_2C83F0; gSaveBlock2Ptr->frontier.trainerIds[i] = i + 1; } @@ -699,8 +657,8 @@ static u32 sub_81D5F58(u8 floorId, u32 bit, u32 arg2, u32 arg3) { u32 var0, var1, var2, var3; - var0 = (sHillData->tag.floors[floorId].unk3A0[arg2] >> (15 - bit)) & 1; - var1 = sHillData->tag.floors[floorId].data[arg2 * arg3 + bit]; + var0 = (sHillData->floors[floorId].unk3A0[arg2] >> (15 - bit)) & 1; + var1 = sHillData->floors[floorId].data[arg2 * arg3 + bit]; var3 = 0x200; var2 = 0x3000; @@ -943,7 +901,7 @@ static void sub_81D62CC(u16 trainerId, u8 firstMonId) u8 id = gUnknown_0862A698[trId][arrId]; 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); } @@ -978,7 +936,7 @@ u8 GetTrainerEncounterMusicIdInTrainerHill(u16 trainerId) SetUpDataStruct(); trId = trainerId - 1; - facilityClass = sHillData->tag.floors[sHillData->floorId].trainers[trId].facilityClass; + facilityClass = sHillData->floors[sHillData->floorId].trainers[trId].facilityClass; FreeDataStruct(); for (i = 0; i < ARRAY_COUNT(gUnknown_0862A3B4); i++) @@ -1005,7 +963,7 @@ u8 sub_81D6490(void) u8 ret; SetUpDataStruct(); - ret = sHillData->tag.unkField_2; + ret = sHillData->tag.numFloors; FreeDataStruct(); return ret; @@ -1070,8 +1028,8 @@ static u8 sub_81D65E8(u8 arg0) var = 0; for (i = 0; i < 4; i++) { - var ^= sHillData->tag.floors[i].unk0 & 0x1F; - var ^= sHillData->tag.floors[i].unk1 & 0x1F; + var ^= sHillData->floors[i].unk0 & 0x1F; + var ^= sHillData->floors[i].unk1 & 0x1F; } if (arg0) @@ -1091,8 +1049,8 @@ static u16 sub_81D6640(void) for (i = 0; i < 4; i++) { - var += sHillData->tag.floors[i].unk0; - var += sHillData->tag.floors[i].unk1; + var += sHillData->floors[i].unk0; + var += sHillData->floors[i].unk1; } var2 = var / 256; |