Guest User

Untitled

a guest
Aug 22nd, 2018
266
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.07 KB | None | 0 0
  1. case 1: // calculate experience points to redistribute
  2.         {
  3.             u16 calculatedExp;
  4.             s32 viaSentIn;
  5.            
  6.  
  7.  
  8.         for (viaSentIn = 0, i = 0; i < 6; i++)
  9.         {
  10.             if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) == SPECIES_NONE || GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0)
  11.                 continue;
  12.             if (gBitTable[i] & sentIn)
  13.                 viaSentIn++;
  14.  
  15.             item = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM);
  16.  
  17.             if (item == ITEM_ENIGMA_BERRY)
  18.                 holdEffect = gSaveBlock1.enigmaBerry.holdEffect;
  19.             else
  20.                 holdEffect = ItemId_GetHoldEffect(item);
  21.  
  22. //                if (holdEffect == HOLD_EFFECT_EXP_SHARE)
  23. //                    viaExpShare++;
  24.             }
  25.  
  26.         calculatedExp = gBaseStats[gBattleMons[gBank1].species].expYield * gBattleMons[gBank1].level / 7;
  27.  
  28.         if (gSaveBlock2.expShare) // exp share is turned on
  29.         {
  30.             *exp = calculatedExp / 2 / viaSentIn;
  31.             if (*exp == 0)
  32.                 *exp = 1;
  33.  
  34.             viaExpShare = gSaveBlock1.playerPartyCount;
  35.             gExpShareExp = calculatedExp / 2;
  36.             if (gExpShareExp == 0)
  37.                 gExpShareExp = 1;
  38.         }
  39.         else
  40.         {
  41.             *exp = calculatedExp / viaSentIn;
  42.             if (*exp == 0)
  43.                 *exp = 1;
  44.             gExpShareExp = 0;
  45.         }
  46.  
  47.         gBattleStruct->getexpStateTracker++;
  48.         gBattleStruct->expGetterID = 0;
  49.         gBattleStruct->sentInPokes = sentIn;
  50.     }
  51.     //fall through
  52. case 2: // set exp value to the poke in expgetter_id and print message
  53.  
  54.     if (gBattleExecBuffer == 0)
  55.     {
  56.         item = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_HELD_ITEM);
  57.  
  58.         if (item == ITEM_ENIGMA_BERRY)
  59.             holdEffect = gSaveBlock1.enigmaBerry.holdEffect;
  60.         else
  61.             holdEffect = ItemId_GetHoldEffect(item);
  62.  
  63.         if (!gSaveBlock2.expShare && !(gBattleStruct->sentInPokes & 1))
  64.         {
  65.             gBattleStruct->sentInPokes >>= 1;
  66.             gBattleStruct->getexpStateTracker = 5;
  67.             gBattleMoveDamage = 0; // used for exp
  68.         }
  69.         else if (GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_LEVEL) == 100)
  70.         {
  71.             gBattleStruct->sentInPokes >>= 1;
  72.             gBattleStruct->getexpStateTracker = 5;
  73.             gBattleMoveDamage = 0; // used for exp
  74.         }
  75.         else
  76.         {
  77.             // music change in wild battle after fainting a poke
  78.             if (!(gBattleTypeFlags & BATTLE_TYPE_TRAINER) && gBattleMons[0].hp && !gBattleStruct->wildVictorySong)
  79.             {
  80.                 BattleStopLowHpSound();
  81.                 PlayBGM(0x161);
  82.                 gBattleStruct->wildVictorySong++;
  83.             }
  84.  
  85.             if (GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_HP))
  86.             {
  87.                 if (gBattleStruct->sentInPokes & 1)
  88.                     gBattleMoveDamage = *exp;
  89.                 else
  90.                     gBattleMoveDamage = 0;
  91.  
  92.                 if (gSaveBlock2.expShare)
  93.                     gBattleMoveDamage += gExpShareExp;
  94.                 if (holdEffect == HOLD_EFFECT_LUCKY_EGG)
  95.                     gBattleMoveDamage = (gBattleMoveDamage * 150) / 100;
  96.                 if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
  97.                     gBattleMoveDamage = (gBattleMoveDamage * 150) / 100;
  98.  
  99.                 if (IsTradedMon(&gPlayerParty[gBattleStruct->expGetterID]))
  100.                 {
  101.                     gBattleMoveDamage = (gBattleMoveDamage * 150) / 100;
  102.                     i = 0x14A;
  103.                 }
  104.                 else
  105.                 {
  106.                     i = 0x149;
  107.                 }
  108.  
  109.                 // get exp getter bank
  110.                 if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
  111.                 {
  112.                     if (!(gBattlerPartyIndexes[2] != gBattleStruct->expGetterID) && !(gAbsentBattlerFlags & gBitTable[2]))
  113.                         gBattleStruct->expGetterBank = 2;
  114.                     else
  115.                     {
  116.                         if (!(gAbsentBattlerFlags & gBitTable[0]))
  117.                             gBattleStruct->expGetterBank = 0;
  118.                         else
  119.                             gBattleStruct->expGetterBank = 2;
  120.                     }
  121.                 }
  122.                 else
  123.                     gBattleStruct->expGetterBank = 0;
  124.  
  125.                 PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gBattleStruct->expGetterBank, gBattleStruct->expGetterID)
  126.  
  127.                 // buffer 'gained' or 'gained a boosted'
  128.                 PREPARE_STRING_BUFFER(gBattleTextBuff2, i)
  129.  
  130.                 PREPARE_WORD_NUMBER_BUFFER(gBattleTextBuff3, 5, gBattleMoveDamage)
  131.  
  132.                 PrepareStringBattle(STRINGID_PKMNGAINEDEXP, gBattleStruct->expGetterBank);
  133.                 MonGainEVs(&gPlayerParty[gBattleStruct->expGetterID], gBattleMons[gBank1].species);
  134.             }
  135.             gBattleStruct->sentInPokes >>= 1;
  136.             gBattleStruct->getexpStateTracker++;
  137.         }
  138.     }
  139.     break;
Advertisement
Add Comment
Please, Sign In to add comment