Esempio n. 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();
        }
Esempio n. 2
0
        /// <summary>
        /// Add song to bonus list and shop
        /// </summary>
        /// <param name="songQk"></param>
        public void AddBonusSongQbItems(QbKey songQk, QbFile qbStore, bool insertAdd)
        {
            QbKey qkCreditsSong = _project.GameInfo.Game == Game.GH3_Wii ? QbKey.Create("thrufireandflames") : QbKey.Create("kingsandqueenscredits");

            //find bonus song list
            QbItemArray bonusSongs = qbStore.FindItem(QbKey.Create("songs"), true) as QbItemArray;

            //find bonus song price list
            QbItemStruct songData = qbStore.FindItem(QbKey.Create("store_song_data"), true) as QbItemStruct;

            //find bonus song info
            QbItemArray bonusInfo = qbStore.FindItem(QbKey.Create("Bonus_Songs_Info"), true) as QbItemArray;

            //add bonus song to list
            if (bonusSongs != null)
            {
                List<QbKey> songs = new List<QbKey>((bonusSongs.Items[0] as QbItemQbKey).Values);
                if (!songs.Contains(songQk))
                {
                    if (insertAdd)
                        songs.Insert(0, songQk.Clone());
                    else
                    {
                        //insert second from the end (before TTFAF / kingandqueenscredits)
                        if (songs.Count == 0 || songs[songs.Count - 1].Crc != qkCreditsSong.Crc)
                            songs.Add(songQk.Clone()); //clone qbkey
                        else
                            songs.Insert(songs.Count - 1, songQk.Clone()); //clone qbkey
                    }
                    (bonusSongs.Items[0] as QbItemQbKey).Values = songs.ToArray();
                }
            }

            if (songData != null)
            {
                //add bonus song price
                if (null == songData.FindItem(false, delegate(QbItemBase qib)
                    {
                        return (qib.ItemQbKey.Crc == songQk.Crc);
                    }))
                {
                    QbItemStruct songDataItem = new QbItemStruct(qbStore);
                    songDataItem.Create(QbItemType.StructItemStruct);
                    songDataItem.ItemQbKey = songQk.Clone();
                    QbItemInteger songDataItemPrice = new QbItemInteger(qbStore);
                    songDataItemPrice.Create(QbItemType.StructItemInteger);
                    songDataItemPrice.ItemQbKey = QbKey.Create("price");
                    songDataItemPrice.Values = new uint[] { 0 };
                    songDataItem.AddItem(songDataItemPrice);
                    if (!insertAdd || songData.Items.Count == 0)
                        songData.AddItem(songDataItem);
                    else
                        songData.InsertItem(songDataItem, songData.Items[0], true);
                }
            }

            if (bonusInfo != null)
            {
                //add bonus info
                QbKey itemQk = QbKey.Create("item");
                QbItemStructArray infoArray = (bonusInfo.Items[0] as QbItemStructArray);
                if (null == infoArray.FindItem(false, delegate(QbItemBase qib)
                    {
                        QbItemQbKey iqk = (QbItemQbKey)(qib.Items[0]);
                        return iqk.ItemQbKey.Crc == itemQk.Crc && iqk.Values[0] == songQk.Crc;
                    }))
                {
                    QbItemStruct infoStruct = new QbItemStruct(qbStore);
                    infoStruct.Create(QbItemType.StructHeader);
                    if (!insertAdd || infoArray.Items.Count == 0)
                        infoArray.AddItem(infoStruct);
                    else
                        infoArray.InsertItem(infoStruct, infoArray.Items[0], true);
                    qbStore.AlignPointers();
                    qbStore.IsValid();
                    QbItemQbKey infoItem = new QbItemQbKey(qbStore);
                    infoItem.Create(QbItemType.StructItemQbKey);
                    infoItem.ItemQbKey = itemQk; //"item"
                    infoItem.Values = new QbKey[] { songQk.Clone() };
                    infoStruct.AddItem(infoItem);
                    qbStore.AlignPointers();
                    qbStore.IsValid();
                    QbItemString infoText = new QbItemString(qbStore);
                    infoText.Create(QbItemType.StructItemString);
                    infoText.ItemQbKey = QbKey.Create("text");
                    infoText.Strings = new string[] { "Bonus song added with TheGHOST" };
                    infoStruct.AddItem(infoText);
                    qbStore.AlignPointers();
                    qbStore.IsValid();
                    QbItemQbKey infoCover = new QbItemQbKey(qbStore);
                    infoCover.Create(QbItemType.StructItemQbKey);
                    infoCover.ItemQbKey = QbKey.Create("album_cover");
                    infoCover.Values = new QbKey[] { QbKey.Create("store_song_default") };
                    infoStruct.AddItem(infoCover);
                    qbStore.AlignPointers();
                    qbStore.IsValid();
                }
            }
        }
Esempio n. 3
0
        /// <summary>
        /// All but this tier 1 have a dependency on the previous tier being completed
        /// </summary>
        /// <param name="tier"></param>
        private void addDependencyToTier1SongsComplete(QbItemStruct prog)
        {
            //insert dependency on previous tier.  Obviously tier 0 does exist, it's just for replacement purposes
            QbItemBase qbs = prog.Items[prog.Items.Count - 1];
            if (qbs is QbItemArray)
            {
                QbItemStructArray qsa = (QbItemStructArray)qbs.Items[0];
                QbItemStruct qis = new QbItemStruct(prog.Root);
                qis.Create(QbItemType.StructHeader);

                QbItemQbKey qbQk = new QbItemQbKey(prog.Root);
                qbQk.Create(QbItemType.StructItemQbKey);
                qbQk.ItemQbKey = QbKey.Create("type");
                qbQk.Values = new QbKey[] { QbKey.Create("atom") };
                qis.AddItem(qbQk);

                qbQk = new QbItemQbKey(prog.Root);
                qbQk.Create(QbItemType.StructItemQbKey);
                qbQk.ItemQbKey = QbKey.Create("atom");
                qbQk.Values = new QbKey[] { QbKey.Create("career_tier0_complete") };
                qis.AddItem(qbQk);

                qsa.InsertItem(qis, qsa.Items[0], true);
            }
        }
Esempio n. 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;
        }
Esempio n. 5
0
        public static QbItemStruct CreateSong(QbFile root, string songname)
        {
            QbItemStruct song = new QbItemStruct(root);
            song.Create(QbItemType.StructItemStruct);
            song.ItemQbKey = QbKey.Create(songname);

            QbItemQbKey checksum = new QbItemQbKey(root);
            checksum.Create(QbItemType.StructItemQbKey);
            checksum.ItemQbKey = QbKey.Create("checksum");
            checksum.Values = new QbKey[] { QbKey.Create(songname) };
            song.AddItem(checksum);

            QbItemString name = new QbItemString(root);
            name.Create(QbItemType.StructItemString);
            name.ItemQbKey = QbKey.Create("name");
            name.Strings = new string[] { songname };
            song.AddItem(name);

            QbItemString title = new QbItemString(root);
            title.Create(QbItemType.StructItemString);
            title.ItemQbKey = QbKey.Create("title");
            title.Strings = new string[] { songname };
            song.AddItem(title);

            QbItemString artist = new QbItemString(root);
            artist.Create(QbItemType.StructItemString);
            artist.ItemQbKey = QbKey.Create("artist");
            artist.Strings = new string[] { songname };
            song.AddItem(artist);

            QbItemString year = new QbItemString(root);
            year.Create(QbItemType.StructItemString);
            year.ItemQbKey = QbKey.Create("year");
            year.Strings = new string[] { string.Empty };
            song.AddItem(year);

            QbItemQbKey artistText = new QbItemQbKey(root);
            artistText.Create(QbItemType.StructItemQbKeyString);
            artistText.ItemQbKey = QbKey.Create("artist_text");
            artistText.Values = new QbKey[] { QbKey.Create("artist_text_by") };
            song.AddItem(artistText);

            QbItemInteger originalArtist = new QbItemInteger(root);
            originalArtist.Create(QbItemType.StructItemInteger);
            originalArtist.ItemQbKey = QbKey.Create("original_artist");
            originalArtist.Values = new uint[] { 1 };
            song.AddItem(originalArtist);

            QbItemQbKey version = new QbItemQbKey(root);
            version.Create(QbItemType.StructItemQbKey);
            version.ItemQbKey = QbKey.Create("version");
            version.Values = new QbKey[] { QbKey.Create("gh3") };
            song.AddItem(version);

            QbItemInteger leaderboard = new QbItemInteger(root);
            leaderboard.Create(QbItemType.StructItemInteger);
            leaderboard.ItemQbKey = QbKey.Create("leaderboard");
            leaderboard.Values = new uint[] { 1 };
            song.AddItem(leaderboard);

            QbItemInteger gemOffset = new QbItemInteger(root);
            gemOffset.Create(QbItemType.StructItemInteger);
            gemOffset.ItemQbKey = QbKey.Create("gem_offset");
            gemOffset.Values = new uint[] { 0 };
            song.AddItem(gemOffset);

            QbItemInteger inputOffset = new QbItemInteger(root);
            inputOffset.Create(QbItemType.StructItemInteger);
            inputOffset.ItemQbKey = QbKey.Create("input_offset");
            inputOffset.Values = new uint[] { 0 };
            song.AddItem(inputOffset);

            QbItemQbKey singer = new QbItemQbKey(root);
            singer.Create(QbItemType.StructItemQbKey);
            singer.ItemQbKey = QbKey.Create("singer");
            singer.Values = new QbKey[] { QbKey.Create("male") };
            song.AddItem(singer);

            QbItemQbKey keyboard = new QbItemQbKey(root);
            keyboard.Create(QbItemType.StructItemQbKey);
            keyboard.ItemQbKey = QbKey.Create("keyboard");
            keyboard.Values = new QbKey[] { QbKey.Create("false") };
            song.AddItem(keyboard);

            QbItemFloat bandPlaybackVolume = new QbItemFloat(root);
            bandPlaybackVolume.Create(QbItemType.StructItemFloat);
            bandPlaybackVolume.ItemQbKey = QbKey.Create("band_playback_volume");
            bandPlaybackVolume.Values = new float[] { 0F };
            song.AddItem(bandPlaybackVolume);

            QbItemFloat guitarPlaybackVolume = new QbItemFloat(root);
            guitarPlaybackVolume.Create(QbItemType.StructItemFloat);
            guitarPlaybackVolume.ItemQbKey = QbKey.Create("guitar_playback_volume");
            guitarPlaybackVolume.Values = new float[] { 0F };
            song.AddItem(guitarPlaybackVolume);

            QbItemString countOff = new QbItemString(root);
            countOff.Create(QbItemType.StructItemString);
            countOff.ItemQbKey = QbKey.Create("countoff");
            countOff.Strings = new string[] { "sticks_normal" };
            song.AddItem(countOff);

            QbItemInteger rhythmTrack = new QbItemInteger(root);
            rhythmTrack.Create(QbItemType.StructItemInteger);
            rhythmTrack.ItemQbKey = QbKey.Create("rhythm_track");
            rhythmTrack.Values = new uint[] { 0 };
            song.AddItem(rhythmTrack);

            return song;
        }
Esempio n. 6
0
        private void calculateMarkers(int[] frets, QbItemArray arr, QbFile text)
        {
            int minNote = this.Notes.MinNoteOffsetSynced + _startPaddingMs + _fretPadding;
            int maxNote = this.Notes.MaxNoteOffsetSynced + _startPaddingMs + _fretPadding;

            int pos = minNote;

            int sectionSecs = 20000;
            int sections = (maxNote - minNote) / sectionSecs; //every x seconds

            for (int c = text.Items.Count - 1; c > 0; c--)
                text.RemoveItem(text.Items[c]);

            QbItemStructArray sa = new QbItemStructArray(arr.Root);
            sa.Create(QbItemType.ArrayStruct);

            arr.Items.Clear();
            arr.AddItem(sa);

            QbItemStruct s;
            QbItemInteger i;
            QbItemQbKey q;
            string sectionTitle;
            QbKey qbKey;
            QbItemString txt;

            for (int c = 0; c < sections; c++)
            {
                if (pos + 3000 > this.Length)
                    break; //don't create a section less than 3 seconds long

                sectionTitle = string.Format("Section {0}", (c + 1).ToString());
                qbKey = QbKey.Create(string.Format("{0}_markers_text_{1}", this.SongQb.Id, QbKey.Create(sectionTitle).Crc.ToString("x").ToLower()));

                txt = new QbItemString(text);
                txt.Create(QbItemType.SectionString);
                txt.ItemQbKey = qbKey;
                txt.Strings = new string[] { sectionTitle };
                text.AddItem(txt);

                s = new QbItemStruct(arr.Root);
                s.Create(QbItemType.StructHeader);
                sa.AddItem(s);

                i = new QbItemInteger(arr.Root);
                i.Create(QbItemType.StructItemInteger);
                i.ItemQbKey = QbKey.Create("time");
                i.Values = new uint[] { findNearestFret((uint)pos, frets) };
                s.AddItem(i);

                pos += sectionSecs;

                q = new QbItemQbKey(arr.Root);
                q.Create(QbItemType.StructItemQbKeyString);
                q.ItemQbKey = QbKey.Create("marker");
                q.Values = new QbKey[] { qbKey };
                s.AddItem(q);
            }

            text.AlignPointers();
            arr.Root.AlignPointers();
        }
Esempio n. 7
0
        private void setMarkers(int[] frets, QbItemArray arr, QbFile text, NotesMarker[] markers)
        {
            int minNote = this.Notes.MinNoteOffsetSynced + _startPaddingMs + _fretPadding;
            QbItemStruct s;
            QbItemInteger i;
            QbItemQbKey q;
            QbKey qbKey;
            QbItemString txt;

            for (int c = text.Items.Count - 1; c > 0; c--)
                text.RemoveItem(text.Items[c]);

            if (arr.Items[0] is QbItemFloats)
            {
                QbItemStructArray newArr = new QbItemStructArray(arr.Root);
                newArr.Create(QbItemType.ArrayStruct);
                arr.AddItem(newArr);
                arr.RemoveItem(arr.Items[0]);
            }

            QbItemStructArray sa = (QbItemStructArray)arr.Items[0];
            sa.Items.Clear();

            NotesMarker marker;

            List<NotesMarker> mrk = new List<NotesMarker>(markers);

            if (mrk.Count > 0 && mrk[0].Offset > minNote)  //some charts don't have sections at the start so you can't practice the start notes :-(
            {
                if (mrk[0].Offset > minNote + 5000) // if > 5secs then add new
                    mrk.Insert(0, new NotesMarker("Start", minNote));
                else //else move first marker back to start
                    mrk[0].Offset = minNote;
            }

            for (int c = 0; c < mrk.Count; c++)
            {
                marker = mrk[c];
                if (c < mrk.Count - 1 && mrk[c + 1].Offset < minNote)
                    continue; //don't add sections at the start that would have no notes (crashes song??)

                qbKey = QbKey.Create(string.Format("{0}_markers_text_{1}", this.SongQb.Id, QbKey.Create(marker.Title).Crc.ToString("x").ToLower()));

                txt = new QbItemString(text);
                txt.Create(QbItemType.SectionString);
                txt.ItemQbKey = qbKey;
                txt.Strings = new string[] { marker.Title };
                text.AddItem(txt);

                s = new QbItemStruct(arr.Root);
                s.Create(QbItemType.StructHeader);
                sa.AddItem(s);

                i = new QbItemInteger(arr.Root);
                i.Create(QbItemType.StructItemInteger);
                i.ItemQbKey = QbKey.Create("time");
                i.Values = new uint[] { findNearestFret((uint)marker.Offset, frets) };
                s.AddItem(i);

                q = new QbItemQbKey(arr.Root);
                q.Create(QbItemType.StructItemQbKeyString);
                q.ItemQbKey = QbKey.Create("marker");
                q.Values = new QbKey[] { qbKey };
                s.AddItem(q);
            }
            text.AlignPointers();
            arr.Root.AlignPointers();
        }