void dWMShop_c::buyItem(int item) { static int itemDefs[6][3] = { // Cost, Start Index, Count {1, 0, 1}, {2, 1, 1}, {2, 2, 1}, {3, 3, 1}, {5, 4, 3}, {8, 7, 5} }; int cost = itemDefs[item][0], cash = getUnspentStarCoinCount(); if (cost > cash) { OSReport("Started playing Not Enough\n"); lakituModel->playingNotEnough = true; lakituModel->playAnim("notenough", 1.0f, 1); MapSoundPlayer(SoundRelatedClass, SE_SYS_INVALID, 1); return; } MapSoundPlayer(SoundRelatedClass, SE_SYS_DECIDE, 1); SaveFile *file = GetSaveFile(); SaveBlock *block = file->GetBlock(file->header.current_file); coinsRemaining = cost; // Work out what we need to apply int appliedItems[ITEM_TYPE_COUNT]; for (int i = 0; i < ITEM_TYPE_COUNT; i++) appliedItems[i] = 0; int invStartIndex = itemDefs[item][1], invCount = itemDefs[item][2]; for (int i = 0; i < invCount; i++) appliedItems[(int)Inventory[shopKind][invStartIndex+i]]++; for (int i = 0; i < 8; i++) { block->powerups_available[i] += appliedItems[i]; if (block->powerups_available[i] > 99) block->powerups_available[i] = 99; dScKoopatlas_c::instance->stockItem->newCounts[i] = block->powerups_available[i]; } // Apply lives to everyone for (int i = 0; i < 4; i++) { if (Player_Active[i]) { int id = Player_ID[i]; Player_Lives[id] += appliedItems[(int)ONE_UP]; if (Player_Lives[id] > 99) Player_Lives[id] = 99; } } if (appliedItems[(int)ONE_UP] > 0) MapSoundPlayer(SoundRelatedClass, SE_SYS_100COIN_ONE_UP, 1); state.setState(&StateID_CoinCountdown); HideSelectCursor(SelectCursorPointer, 0); }