/// <summary> /// Some items are not the correct type, replace them. /// </summary> /// <param name="song"></param> /// <param name="item"></param> /// <returns></returns> private QbItemFloat replaceItemIntForFloat(QbItemStruct song, QbItemInteger item) { QbItemFloat f = new QbItemFloat(song.Root); f.Create(QbItemType.StructItemFloat); f.ItemQbKey = item.ItemQbKey; f.Values[0] = item.Values[0]; song.InsertItem(f, item, true); song.RemoveItem(item); song.Root.AlignPointers(); return f; }
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; }
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; }