Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId)
- {
- u8 speciesName[POKEMON_NAME_LENGTH + 1];
- u32 personality;
- u32 value;
- u16 checksum;
- ZeroBoxMonData(boxMon);
- if (hasFixedPersonality)
- personality = fixedPersonality;
- else
- personality = Random32();
- SetBoxMonData(boxMon, MON_DATA_PERSONALITY, (u8 *)&personality);
- //Determine original trainer ID
- if (otIdType == 2) //Pokemon cannot be shiny
- {
- u32 shinyValue;
- do
- {
- value = Random32();
- shinyValue = HIHALF(value) ^ LOHALF(value) ^ HIHALF(personality) ^ LOHALF(personality);
- } while (shinyValue < 8);
- }
- else if (otIdType == 1) //Pokemon has a preset OT ID
- {
- value = fixedOtId;
- }
- else //Player is the OT
- {
- value = gSaveBlock2.playerTrainerId[0]
- | (gSaveBlock2.playerTrainerId[1] << 8)
- | (gSaveBlock2.playerTrainerId[2] << 16)
- | (gSaveBlock2.playerTrainerId[3] << 24);
- }
- SetBoxMonData(boxMon, MON_DATA_OT_ID, (u8 *)&value);
- checksum = CalculateBoxMonChecksum(boxMon);
- SetBoxMonData(boxMon, MON_DATA_CHECKSUM, (u8 *)&checksum);
- EncryptBoxMon(boxMon);
- GetSpeciesName(speciesName, species);
- SetBoxMonData(boxMon, MON_DATA_NICKNAME, speciesName);
- SetBoxMonData(boxMon, MON_DATA_LANGUAGE, &gGameLanguage);
- SetBoxMonData(boxMon, MON_DATA_OT_NAME, gSaveBlock2.playerName);
- SetBoxMonData(boxMon, MON_DATA_SPECIES, (u8 *)&species);
- SetBoxMonData(boxMon, MON_DATA_EXP, (u8 *)&gExperienceTables[gBaseStats[species].growthRate][level]);
- SetBoxMonData(boxMon, MON_DATA_FRIENDSHIP, &gBaseStats[species].friendship);
- value = sav1_map_get_name();
- SetBoxMonData(boxMon, MON_DATA_MET_LOCATION, (u8 *)&value);
- SetBoxMonData(boxMon, MON_DATA_MET_LEVEL, &level);
- SetBoxMonData(boxMon, MON_DATA_MET_GAME, &gGameVersion);
- value = 4;
- SetBoxMonData(boxMon, MON_DATA_POKEBALL, (u8 *)&value);
- SetBoxMonData(boxMon, MON_DATA_OT_GENDER, &gSaveBlock2.playerGender);
- if (fixedIV < 32)
- {
- SetBoxMonData(boxMon, MON_DATA_HP_IV, &fixedIV);
- SetBoxMonData(boxMon, MON_DATA_ATK_IV, &fixedIV);
- SetBoxMonData(boxMon, MON_DATA_DEF_IV, &fixedIV);
- SetBoxMonData(boxMon, MON_DATA_SPD_IV, &fixedIV);
- SetBoxMonData(boxMon, MON_DATA_SPATK_IV, &fixedIV);
- SetBoxMonData(boxMon, MON_DATA_SPDEF_IV, &fixedIV);
- }
- else
- {
- u32 iv;
- value = Random();
- iv = value & 0x1F;
- SetBoxMonData(boxMon, MON_DATA_HP_IV, (u8 *)&iv);
- iv = (value & 0x3E0) >> 5;
- SetBoxMonData(boxMon, MON_DATA_ATK_IV, (u8 *)&iv);
- iv = (value & 0x7C00) >> 10;
- SetBoxMonData(boxMon, MON_DATA_DEF_IV, (u8 *)&iv);
- value = Random();
- iv = value & 0x1F;
- SetBoxMonData(boxMon, MON_DATA_SPD_IV, (u8 *)&iv);
- iv = (value & 0x3E0) >> 5;
- SetBoxMonData(boxMon, MON_DATA_SPATK_IV, (u8 *)&iv);
- iv = (value & 0x7C00) >> 10;
- SetBoxMonData(boxMon, MON_DATA_SPDEF_IV, (u8 *)&iv);
- }
- if (gBaseStats[species].ability2)
- {
- value = personality & 1;
- SetBoxMonData(boxMon, MON_DATA_ALT_ABILITY, (u8 *)&value);
- }
- GiveBoxMonInitialMoveset(boxMon);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement