Example #1
0
        private void setCareerTiers(QbItemStruct careerSongsSec, int existingTierCount, int newTierCount, bool setUnlockIfOneTier)
        {
            //if setUnlockIfOneTier is false and we only have only 1 tier then don't unlock the new tiers, if tier 2 exists the lock is clones from that

            int add = newTierCount - existingTierCount;

            int clone;
            QbKey qkTier;
            QbKey qkNewTier;
            QbKey qkLastTier = QbKey.Create(string.Format("tier{0}", newTierCount.ToString()));

            for (int t = existingTierCount + 1; t <= newTierCount; t++)
            {
                int origTiersCount = Math.Min(existingTierCount, (_project.GameInfo.Game == Game.GH3_Wii) ? 8 : 6); //6 for aerosmith
                clone = t % origTiersCount;
                if (clone == 0)
                    clone = origTiersCount;

                qkTier = QbKey.Create(string.Format("tier{0}", clone.ToString()));
                qkNewTier = QbKey.Create(string.Format("tier{0}", t.ToString()));

                QbItemStruct clonedTier = careerSongsSec.FindItem(qkTier, false).Clone() as QbItemStruct;
                clonedTier.ItemQbKey = qkNewTier.Clone();

                if (clone == 1) //if tier 1 is being cloned then check is tier 1 has the unlocked value and make this the same
                {
                    QbItemStruct tier2 = careerSongsSec.FindItem(QbKey.Create("tier2"), false) as QbItemStruct;
                    if (tier2 != null)
                    {
                        tier2 = tier2.Clone() as QbItemStruct;
                        QbItemInteger ul = tier2.FindItem(QbKey.Create("defaultunlocked"), false) as QbItemInteger;
                        if (ul == null) //remove the cloned item
                        {
                            if ((ul = clonedTier.FindItem(QbKey.Create("defaultunlocked"), false) as QbItemInteger) != null)
                                clonedTier.RemoveItem(ul);
                        }
                    }
                    else if (!setUnlockIfOneTier)
                    {
                        //clear lock
                        QbItemInteger ul = clonedTier.FindItem(QbKey.Create("defaultunlocked"), false) as QbItemInteger;
                        if (ul != null)
                            clonedTier.RemoveItem(ul);
                    }

                }

                careerSongsSec.AddItem(clonedTier);
            }

            while (careerSongsSec.Items.Count > 3 && careerSongsSec.Items[careerSongsSec.Items.Count - 1].ItemQbKey.Crc != qkLastTier.Crc)
                careerSongsSec.RemoveItem(careerSongsSec.Items[careerSongsSec.Items.Count - 1]); //remove last item

            careerSongsSec.Root.AlignPointers();
            careerSongsSec.Root.IsValid();
        }
Example #2
0
        private QbItemStruct copyCareerTiers(QbItemStruct careerSongsSec, QbItemStruct toTier)
        {
            //all other tier structs have encore2 in them so add it. and no completion movie item
            QbItemBase tmp;

            QbKey qkInitialMovie = QbKey.Create("initial_movie");
            QbKey qkCompletionMovie = QbKey.Create("completion_movie");
            QbKey qkEncoreP1 = QbKey.Create("encorep1");

            QbKey qkPrefix = QbKey.Create("prefix");
            string prefix = ((QbItemString)toTier.FindItem(qkPrefix, false)).Strings[0];

            QbItemStruct to = (QbItemStruct)careerSongsSec.Clone();

            if ((tmp = to.FindItem(qkInitialMovie, false)) != null)
                to.RemoveItem(tmp); //remove initial move if found

            to.ItemQbKey = toTier.ItemQbKey.Clone();
            ((QbItemString)to.FindItem(qkPrefix, false)).Strings[0] = prefix;

            QbItemQbKey encorep2 = new QbItemQbKey(to.Root);
            encorep2.Create(QbItemType.StructItemQbKey);
            encorep2.Values = new QbKey[] { QbKey.Create("encorep2") };

            foreach (QbItemBase qb in to.Items)
            {
                if (qb.QbItemType == QbItemType.StructItemStruct)
                {
                    if ((tmp = qb.FindItem(qkCompletionMovie, false)) != null)
                        qb.RemoveItem(tmp); //remove initial move if found

                    if ((tmp = qb.FindItem(false, delegate (QbItemBase q)
                        {
                            return (qb.QbItemType == QbItemType.StructItemQbKey && qb.ItemQbKey != null && qb.ItemQbKey.Crc == 0 && ((QbItemQbKey)qb).Values[0].Crc == qkEncoreP1.Crc);
                        })) != null)
                    {
                        qb.InsertItem(encorep2.Clone(), tmp, false);
                    }
                }
            }

            return to;
        }
Example #3
0
        private void insertFinishGame(QbItemStruct prog)
        {
            prog.FindItem(true, delegate(QbItemBase qib)
            {
                if (qib is QbItemStruct && qib.ItemQbKey.Crc == QbKey.Create("atom_params").Crc)
                {
                    QbItemQbKey qk = new QbItemQbKey(prog.Root);
                    qk.Create(QbItemType.StructItemQbKey);
                    qk.Values = new QbKey[] { QbKey.Create("finished_game") };
                    ((QbItemStruct)qib).AddItem(qk);
                    return true; //stop after the first find
                }

                return false; //return false to continue search
            });
        }
Example #4
0
        internal SongQb(Project project, QbItemStruct song)
        {
            _song = song;
            QbItemBase temp;

            _hopoMeasure = null;

            _checksum = (QbItemQbKey)song.FindItem(QbKey.Create("checksum"), false);
            //_key = song.ItemQbKey;
            _key = QbKey.Create(((QbItemString)song.FindItem(QbKey.Create("name"), false)).Strings[0]);

            _title = (QbItemString)song.FindItem(QbKey.Create("title"), false);
            _artist = (QbItemString)song.FindItem(QbKey.Create("artist"), false);

            _leaderboard = (QbItemInteger)song.FindItem(QbKey.Create("leaderboard"), false);
            _year = (QbItemString)song.FindItem(QbKey.Create("year"), false);

            _boss = song.FindItem(QbKey.Create("boss"), false) as QbItemQbKey;  //is this a boss

            temp = song.FindItem(QbKey.Create("band_playback_volume"), false);  //sometimes integer instead of float
            if (temp == null)
            {
                _songVolume = new QbItemFloat(song.Root);
                _songVolume.Create(QbItemType.StructItemFloat);
                _songVolume.ItemQbKey = QbKey.Create("band_playback_volume");
                _songVolume.Values = new float[1];
                _songVolume.Values[0] = 0;
                song.AddItem(_songVolume);
                song.Root.AlignPointers();
            }
            else if (temp is QbItemInteger)
                _songVolume = replaceItemIntForFloat(song, (QbItemInteger)temp);
            else
                _songVolume = (QbItemFloat)temp;

            temp = song.FindItem(QbKey.Create("guitar_playback_volume"), false);  //sometimes integer instead of float
            if (temp == null)
            {
                _guitarVolume = new QbItemFloat(song.Root);
                _guitarVolume.Create(QbItemType.StructItemFloat);
                _guitarVolume.ItemQbKey = QbKey.Create("guitar_playback_volume");
                _guitarVolume.Values = new float[1];
                _guitarVolume.Values[0] = 0;
                song.AddItem(_guitarVolume);
                song.Root.AlignPointers();
            }
            else if (temp is QbItemInteger)
                _guitarVolume = replaceItemIntForFloat(song, (QbItemInteger)temp);
            else
                _guitarVolume = (QbItemFloat)temp;

            _rhythmTrack = (QbItemInteger)song.FindItem(QbKey.Create("rhythm_track"), false);

            temp = song.FindItem(QbKey.Create("artist_text"), false);
            if (temp is QbItemString)
            {
                _artistTextString = (QbItemString)temp;
                _artistText = null;
            }
            else
            {
                _artistText = song.FindItem(QbKey.Create("artist_text"), false) as QbItemQbKey;
                _artistTextString = null;
            }

            _originalArtist = (QbItemInteger)song.FindItem(QbKey.Create("original_artist"), false);

            temp = song.FindItem(QbKey.Create("singer"), false);
            if (temp == null) //GH3 wii Cream sunshine for your love has no singer item
            {
                _singer = new QbItemQbKey(song.Root);
                _singer.Create(QbItemType.StructItemQbKey);
                _singer.ItemQbKey = QbKey.Create("singer");
                _singer.Values = new QbKey[1];
                _singer.Values[0] = QbKey.Create("male");
                song.AddItem(_singer);
                song.Root.AlignPointers();
            }
            else
                _singer = (QbItemQbKey)temp;

            _fretbarOffset = song.FindItem(QbKey.Create("fretbar_offset"), false) as QbItemInteger;
            _gemOffset = song.FindItem(QbKey.Create("gem_offset"), false) as QbItemInteger;
            _inputOffset = song.FindItem(QbKey.Create("input_offset"), false) as QbItemInteger;

            //this fixes an issue with GH3(cult of personality) and GHA (talk talking)
            if (this.key.Crc != this.checksum.Crc)
                _id = (project.GameInfo.Game == Game.GH3_Wii) ? this.checksum : this.key;
            else
                _id = this.checksum.HasText ? this.checksum : this.key;
        }