Advertisement
EliteAnax17

CreateBoxMon

Mar 14th, 2017
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.40 KB | None | 0 0
  1. void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId)
  2. {
  3. u8 speciesName[POKEMON_NAME_LENGTH + 1];
  4. u32 personality;
  5. u32 value;
  6. u16 checksum;
  7.  
  8. ZeroBoxMonData(boxMon);
  9.  
  10. if (hasFixedPersonality)
  11. personality = fixedPersonality;
  12. else
  13. personality = Random32();
  14.  
  15. SetBoxMonData(boxMon, MON_DATA_PERSONALITY, (u8 *)&personality);
  16.  
  17. //Determine original trainer ID
  18. if (otIdType == 2) //Pokemon cannot be shiny
  19. {
  20. u32 shinyValue;
  21. do
  22. {
  23. value = Random32();
  24. shinyValue = HIHALF(value) ^ LOHALF(value) ^ HIHALF(personality) ^ LOHALF(personality);
  25. } while (shinyValue < 8);
  26. }
  27. else if (otIdType == 1) //Pokemon has a preset OT ID
  28. {
  29. value = fixedOtId;
  30. }
  31. else //Player is the OT
  32. {
  33. value = gSaveBlock2.playerTrainerId[0]
  34. | (gSaveBlock2.playerTrainerId[1] << 8)
  35. | (gSaveBlock2.playerTrainerId[2] << 16)
  36. | (gSaveBlock2.playerTrainerId[3] << 24);
  37. }
  38.  
  39. SetBoxMonData(boxMon, MON_DATA_OT_ID, (u8 *)&value);
  40.  
  41. checksum = CalculateBoxMonChecksum(boxMon);
  42. SetBoxMonData(boxMon, MON_DATA_CHECKSUM, (u8 *)&checksum);
  43. EncryptBoxMon(boxMon);
  44. GetSpeciesName(speciesName, species);
  45. SetBoxMonData(boxMon, MON_DATA_NICKNAME, speciesName);
  46. SetBoxMonData(boxMon, MON_DATA_LANGUAGE, &gGameLanguage);
  47. SetBoxMonData(boxMon, MON_DATA_OT_NAME, gSaveBlock2.playerName);
  48. SetBoxMonData(boxMon, MON_DATA_SPECIES, (u8 *)&species);
  49. SetBoxMonData(boxMon, MON_DATA_EXP, (u8 *)&gExperienceTables[gBaseStats[species].growthRate][level]);
  50. SetBoxMonData(boxMon, MON_DATA_FRIENDSHIP, &gBaseStats[species].friendship);
  51. value = sav1_map_get_name();
  52. SetBoxMonData(boxMon, MON_DATA_MET_LOCATION, (u8 *)&value);
  53. SetBoxMonData(boxMon, MON_DATA_MET_LEVEL, &level);
  54. SetBoxMonData(boxMon, MON_DATA_MET_GAME, &gGameVersion);
  55. value = 4;
  56. SetBoxMonData(boxMon, MON_DATA_POKEBALL, (u8 *)&value);
  57. SetBoxMonData(boxMon, MON_DATA_OT_GENDER, &gSaveBlock2.playerGender);
  58.  
  59. if (fixedIV < 32)
  60. {
  61. SetBoxMonData(boxMon, MON_DATA_HP_IV, &fixedIV);
  62. SetBoxMonData(boxMon, MON_DATA_ATK_IV, &fixedIV);
  63. SetBoxMonData(boxMon, MON_DATA_DEF_IV, &fixedIV);
  64. SetBoxMonData(boxMon, MON_DATA_SPD_IV, &fixedIV);
  65. SetBoxMonData(boxMon, MON_DATA_SPATK_IV, &fixedIV);
  66. SetBoxMonData(boxMon, MON_DATA_SPDEF_IV, &fixedIV);
  67. }
  68. else
  69. {
  70. u32 iv;
  71. value = Random();
  72.  
  73. iv = value & 0x1F;
  74. SetBoxMonData(boxMon, MON_DATA_HP_IV, (u8 *)&iv);
  75. iv = (value & 0x3E0) >> 5;
  76. SetBoxMonData(boxMon, MON_DATA_ATK_IV, (u8 *)&iv);
  77. iv = (value & 0x7C00) >> 10;
  78. SetBoxMonData(boxMon, MON_DATA_DEF_IV, (u8 *)&iv);
  79.  
  80. value = Random();
  81.  
  82. iv = value & 0x1F;
  83. SetBoxMonData(boxMon, MON_DATA_SPD_IV, (u8 *)&iv);
  84. iv = (value & 0x3E0) >> 5;
  85. SetBoxMonData(boxMon, MON_DATA_SPATK_IV, (u8 *)&iv);
  86. iv = (value & 0x7C00) >> 10;
  87. SetBoxMonData(boxMon, MON_DATA_SPDEF_IV, (u8 *)&iv);
  88. }
  89.  
  90. if (gBaseStats[species].ability2)
  91. {
  92. value = personality & 1;
  93. SetBoxMonData(boxMon, MON_DATA_ALT_ABILITY, (u8 *)&value);
  94. }
  95.  
  96. GiveBoxMonInitialMoveset(boxMon);
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement